From 54d0442975d359b74117d96e368fa52c2bea0a25 Mon Sep 17 00:00:00 2001 From: Rishabh Bhatnagar Date: Fri, 15 Feb 2019 16:49:26 -0800 Subject: [PATCH] drivers: llcc: Configure cache override registers Use the llcc compatible string to configure correct set of llcc override registers. Change-Id: I29f00a095aeaf3494674c2e2bfae897b2d93756f Signed-off-by: Rishabh Bhatnagar [rananta@codeaurora.org: Updated register offsets] Signed-off-by: Raghavendra Rao Ananta --- drivers/soc/qcom/llcc-slice.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/soc/qcom/llcc-slice.c b/drivers/soc/qcom/llcc-slice.c index f405f34790cb..11d316704c56 100644 --- a/drivers/soc/qcom/llcc-slice.c +++ b/drivers/soc/qcom/llcc-slice.c @@ -44,6 +44,10 @@ #define LLCC_TRP_ATTR0_CFGn(n) (0x21000 + SZ_8 * n) #define LLCC_TRP_ATTR1_CFGn(n) (0x21004 + SZ_8 * n) +#define LLCC_TRP_C_AS_NC 0x22890 +#define LLCC_TRP_NC_AS_C 0x22894 +#define LLCC_FEAC_C_AS_NC 0x35030 +#define LLCC_FEAC_NC_AS_C 0x35034 #define LLCC_TRP_WRSC_EN 0x21F20 #define LLCC_WRSC_SCID_EN(n) BIT(n) @@ -264,10 +268,36 @@ static int qcom_llcc_cfg_program(struct platform_device *pdev) struct llcc_slice_desc desc; bool cap_based_alloc_and_pwr_collapse = drv_data->cap_based_alloc_and_pwr_collapse; + uint32_t mask = ~0; sz = drv_data->cfg_size; llcc_table = drv_data->cfg; + /* Disable the Cache as Non-Cache override and enable + * the Non-Cache as Cache override + */ + if (of_device_is_compatible(pdev->dev.of_node, "qcom,llcc-v2")) { + ret = regmap_write(drv_data->bcast_regmap, + LLCC_TRP_C_AS_NC, 0); + if (ret) + return ret; + + ret = regmap_write(drv_data->bcast_regmap, + LLCC_TRP_NC_AS_C, mask); + if (ret) + return ret; + } else { + ret = regmap_write(drv_data->bcast_regmap, + LLCC_FEAC_C_AS_NC, 0); + if (ret) + return ret; + + ret = regmap_write(drv_data->bcast_regmap, + LLCC_FEAC_NC_AS_C, mask); + if (ret) + return ret; + } + for (i = 0; i < sz; i++) { attr1_cfg = LLCC_TRP_ATTR1_CFGn(llcc_table[i].slice_id); attr0_cfg = LLCC_TRP_ATTR0_CFGn(llcc_table[i].slice_id);