summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Yan <leo.yan@linaro.org>2022-08-10 16:53:01 +0200
committerFabien Parent <fabien.parent@linaro.org>2022-10-30 12:13:09 +0100
commit6abcffc7d2ae01192931a2f1efebbdb20e7c543e (patch)
tree7f2498803e95535b57a42da30e49df18adf4fd5c
parent7626481570873cf67b4787480efaa2f02ca46622 (diff)
soc: qcom: cpr: Add support for ACC override parameters
Some SoCs, such as MSM8939, require to use some override parameters for ACC. This commit use some value from the fuses which indicates whether that SoC should use the override parameters. The CPR driver updates the pointer to the ACC descriptor in order to use the override parameters instead. Signed-off-by: Leo Yan <leo.yan@linaro.org> Signed-off-by: Fabien Parent <fabien.parent@linaro.org>
-rw-r--r--drivers/soc/qcom/cpr.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/soc/qcom/cpr.c b/drivers/soc/qcom/cpr.c
index b1cf6879ab7a..8a281e6a9861 100644
--- a/drivers/soc/qcom/cpr.c
+++ b/drivers/soc/qcom/cpr.c
@@ -196,6 +196,7 @@ struct acc_desc {
struct cpr_acc_desc {
const struct cpr_desc *cpr_desc;
const struct acc_desc *acc_desc;
+ const struct acc_desc *override_acc_desc;
};
struct fuse_corner {
@@ -1638,6 +1639,7 @@ static int cpr_probe(struct platform_device *pdev)
const struct cpr_acc_desc *data;
struct device_node *np;
u32 cpr_rev = FUSE_REVISION_UNKNOWN;
+ u32 cpr_mem_acc;
data = of_device_get_match_data(dev);
if (!data || !data->cpr_desc || !data->acc_desc)
@@ -1650,6 +1652,11 @@ static int cpr_probe(struct platform_device *pdev)
drv->desc = data->cpr_desc;
drv->acc_desc = data->acc_desc;
+ ret = nvmem_cell_read_variable_le_u32(drv->dev, "cpr_mem_acc",
+ &cpr_mem_acc);
+ if (!ret && cpr_mem_acc && data->override_acc_desc)
+ drv->acc_desc = data->override_acc_desc;
+
drv->fuse_corners = devm_kcalloc(dev, drv->desc->num_fuse_corners,
sizeof(*drv->fuse_corners),
GFP_KERNEL);