]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soc: qcom: llcc: Update configuration data for IPQ5424
authorVaradarajan Narayanan <quic_varada@quicinc.com>
Thu, 21 Nov 2024 05:19:34 +0000 (10:49 +0530)
committerBjorn Andersson <andersson@kernel.org>
Wed, 8 Jan 2025 02:16:21 +0000 (20:16 -0600)
The 'broadcast' register space is present only in chipsets that
have multiple instances of LLCC IP. Since IPQ5424 has only one
instance, both the LLCC and LLCC_BROADCAST points to the same
register space.

Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20241121051935.1055222-3-quic_varada@quicinc.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
drivers/soc/qcom/llcc-qcom.c

index 1560db00a01248197e5c2936e785a5ea77f74ad8..56823b6a2facc4345265e29b60da24a391e3707d 100644 (file)
@@ -142,6 +142,7 @@ struct qcom_llcc_config {
        bool skip_llcc_cfg;
        bool no_edac;
        bool irq_configured;
+       bool no_broadcast_register;
 };
 
 struct qcom_sct_config {
@@ -154,6 +155,38 @@ enum llcc_reg_offset {
        LLCC_COMMON_STATUS0,
 };
 
+static const struct llcc_slice_config ipq5424_data[] =  {
+       {
+               .usecase_id = LLCC_CPUSS,
+               .slice_id = 1,
+               .max_cap = 768,
+               .priority = 1,
+               .bonus_ways = 0xFFFF,
+               .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_VIDSC0,
+               .slice_id = 2,
+               .max_cap = 256,
+               .priority = 2,
+               .fixed_size = true,
+               .bonus_ways = 0xF000,
+               .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 sa8775p_data[] =  {
        {
                .usecase_id = LLCC_CPUSS,
@@ -3186,6 +3219,16 @@ static const struct qcom_llcc_config qdu1000_cfg[] = {
        },
 };
 
+static const struct qcom_llcc_config ipq5424_cfg[] = {
+       {
+               .sct_data       = ipq5424_data,
+               .size           = ARRAY_SIZE(ipq5424_data),
+               .reg_offset     = llcc_v2_1_reg_offset,
+               .edac_reg_offset = &llcc_v2_1_edac_reg_offset,
+               .no_broadcast_register = true,
+       },
+};
+
 static const struct qcom_llcc_config sa8775p_cfg[] = {
        {
                .sct_data       = sa8775p_data,
@@ -3361,6 +3404,11 @@ static const struct qcom_sct_config qdu1000_cfgs = {
        .num_config     = ARRAY_SIZE(qdu1000_cfg),
 };
 
+static const struct qcom_sct_config ipq5424_cfgs = {
+       .llcc_config    = ipq5424_cfg,
+       .num_config     = ARRAY_SIZE(ipq5424_cfg),
+};
+
 static const struct qcom_sct_config sa8775p_cfgs = {
        .llcc_config    = sa8775p_cfg,
        .num_config     = ARRAY_SIZE(sa8775p_cfg),
@@ -3958,8 +4006,12 @@ static int qcom_llcc_probe(struct platform_device *pdev)
 
        drv_data->bcast_regmap = qcom_llcc_init_mmio(pdev, i, "llcc_broadcast_base");
        if (IS_ERR(drv_data->bcast_regmap)) {
-               ret = PTR_ERR(drv_data->bcast_regmap);
-               goto err;
+               if (cfg->no_broadcast_register) {
+                       drv_data->bcast_regmap = regmap;
+               } else {
+                       ret = PTR_ERR(drv_data->bcast_regmap);
+                       goto err;
+               }
        }
 
        /* Extract version of the IP */
@@ -4030,6 +4082,7 @@ err:
 }
 
 static const struct of_device_id qcom_llcc_of_match[] = {
+       { .compatible = "qcom,ipq5424-llcc", .data = &ipq5424_cfgs},
        { .compatible = "qcom,qcs615-llcc", .data = &qcs615_cfgs},
        { .compatible = "qcom,qcs8300-llcc", .data = &qcs8300_cfgs},
        { .compatible = "qcom,qdu1000-llcc", .data = &qdu1000_cfgs},