[PATCH 2/2] soc: qcom: llcc: Add LLCC configuration for IPQ9650

From: Kathiravan Thirumoorthy

Date: Fri Oct 09 2026 - 09:59:01 EST


Add the system cache table and configuration for IPQ9650. The LLCC
hardware version in IPQ9650 is v7.1, but similar to IPQ5424, there is
no broadcast region since there is only one LLCC instance.

Signed-off-by: Kathiravan Thirumoorthy <kathiravan.thirumoorthy@xxxxxxxxxxxxxxxx>
---
drivers/soc/qcom/llcc-qcom.c | 76 ++++++++++++++++++++++++++++++++++++++
include/linux/soc/qcom/llcc-qcom.h | 1 +
2 files changed, 77 insertions(+)

diff --git a/drivers/soc/qcom/llcc-qcom.c b/drivers/soc/qcom/llcc-qcom.c
index d7a42a8040a1..7ffe6b9019d8 100644
--- a/drivers/soc/qcom/llcc-qcom.c
+++ b/drivers/soc/qcom/llcc-qcom.c
@@ -696,6 +696,66 @@ static const struct llcc_slice_config ipq5424_data[] = {
},
};

+static const struct llcc_slice_config ipq9650_data[] = {
+ {
+ .usecase_id = LLCC_PPE_RXFILL,
+ .slice_id = 1,
+ .max_cap = 128,
+ .priority = 1,
+ .bonus_ways = 0x007F,
+ .retain_on_pc = true,
+ .activate_on_init = true,
+ .write_scid_cacheable_en = true,
+ .stale_en = true,
+ .stale_cap_en = true,
+ .alloc_oneway_en = true,
+ .ovcap_en = true,
+ .ovcap_prio = true,
+ .vict_prio = true,
+ },
+ {
+ .usecase_id = LLCC_CPUSS,
+ .slice_id = 2,
+ .max_cap = 384,
+ .priority = 3,
+ .fixed_size = true,
+ .bonus_ways = 0x007F,
+ .retain_on_pc = true,
+ .activate_on_init = true,
+ .write_scid_cacheable_en = true,
+ .stale_en = true,
+ .stale_cap_en = true,
+ },
+ {
+ .usecase_id = LLCC_PPE_RXDESC,
+ .slice_id = 5,
+ .max_cap = 192,
+ .priority = 3,
+ .bonus_ways = 0x0380,
+ .retain_on_pc = true,
+ .activate_on_init = true,
+ .write_scid_cacheable_en = true,
+ .stale_en = true,
+ .stale_cap_en = true,
+ .alloc_oneway_en = true,
+ .ovcap_en = true,
+ .ovcap_prio = true,
+ .vict_prio = true,
+ },
+ {
+ .usecase_id = LLCC_WLAN_2G,
+ .slice_id = 8,
+ .max_cap = 384,
+ .priority = 3,
+ .bonus_ways = 0xFC00,
+ .retain_on_pc = true,
+ .activate_on_init = true,
+ .write_scid_cacheable_en = true,
+ .stale_en = true,
+ .stale_cap_en = true,
+ },
+};
+
static const struct llcc_slice_config kaanapali_data[] = {
{
.usecase_id = LLCC_CPUSS,
@@ -4673,6 +4733,16 @@ static const struct qcom_llcc_config ipq5424_cfg[] = {
},
};

+static const struct qcom_llcc_config ipq9650_cfg[] = {
+ {
+ .sct_data = ipq9650_data,
+ .size = ARRAY_SIZE(ipq9650_data),
+ .reg_offset = llcc_v6_reg_offset,
+ .edac_reg_offset = &llcc_v6_edac_reg_offset,
+ .no_broadcast_register = true,
+ },
+};
+
static const struct qcom_llcc_config sa8775p_cfg[] = {
{
.sct_data = sa8775p_data,
@@ -4909,6 +4979,11 @@ static const struct qcom_sct_config ipq5424_cfgs = {
.num_config = ARRAY_SIZE(ipq5424_cfg),
};

+static const struct qcom_sct_config ipq9650_cfgs = {
+ .llcc_config = ipq9650_cfg,
+ .num_config = ARRAY_SIZE(ipq9650_cfg),
+};
+
static const struct qcom_sct_config sa8775p_cfgs = {
.llcc_config = sa8775p_cfg,
.num_config = ARRAY_SIZE(sa8775p_cfg),
@@ -5830,6 +5905,7 @@ static const struct of_device_id qcom_llcc_of_match[] = {
{ .compatible = "qcom,glymur-llcc", .data = &glymur_cfgs },
{ .compatible = "qcom,hawi-llcc", .data = &hawi_sct_cfgs },
{ .compatible = "qcom,ipq5424-llcc", .data = &ipq5424_cfgs},
+ { .compatible = "qcom,ipq9650-llcc", .data = &ipq9650_cfgs},
{ .compatible = "qcom,kaanapali-llcc", .data = &kaanapali_cfgs},
{ .compatible = "qcom,nord-llcc", .data = &nord_cfgs},
{ .compatible = "qcom,qcs615-llcc", .data = &qcs615_cfgs},
diff --git a/include/linux/soc/qcom/llcc-qcom.h b/include/linux/soc/qcom/llcc-qcom.h
index 713cb0221b14..b0ce1a7d5d8d 100644
--- a/include/linux/soc/qcom/llcc-qcom.h
+++ b/include/linux/soc/qcom/llcc-qcom.h
@@ -92,6 +92,7 @@
#define LLCC_PPE_RXFILL 102
#define LLCC_WLAN_5G 103
#define LLCC_WLAN_6G 104
+#define LLCC_WLAN_2G 105

/**
* struct llcc_slice_desc - Cache slice descriptor

--
2.34.1