Commit ab33c8f3 authored by Maulik Shah's avatar Maulik Shah Committed by Bjorn Andersson

soc: qcom: rpmh-rsc: Save base address of drv

Add changes to save drv's base address for rsc. This is
used to read drv's configuration such as solver mode is
supported or to write into CONTROL_TCS registers.
Signed-off-by: default avatarMaulik Shah <quic_mkshah@quicinc.com>
Reviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Tested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> # SM8450
Signed-off-by: default avatarBjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20221018152837.619426-6-ulf.hansson@linaro.org
parent 1498c503
...@@ -91,6 +91,7 @@ struct rpmh_ctrlr { ...@@ -91,6 +91,7 @@ struct rpmh_ctrlr {
* Resource State Coordinator controller (RSC) * Resource State Coordinator controller (RSC)
* *
* @name: Controller identifier. * @name: Controller identifier.
* @base: Start address of the DRV registers in this controller.
* @tcs_base: Start address of the TCS registers in this controller. * @tcs_base: Start address of the TCS registers in this controller.
* @id: Instance id in the controller (Direct Resource Voter). * @id: Instance id in the controller (Direct Resource Voter).
* @num_tcs: Number of TCSes in this DRV. * @num_tcs: Number of TCSes in this DRV.
...@@ -114,6 +115,7 @@ struct rpmh_ctrlr { ...@@ -114,6 +115,7 @@ struct rpmh_ctrlr {
*/ */
struct rsc_drv { struct rsc_drv {
const char *name; const char *name;
void __iomem *base;
void __iomem *tcs_base; void __iomem *tcs_base;
int id; int id;
int num_tcs; int num_tcs;
......
...@@ -881,8 +881,7 @@ static int rpmh_rsc_pd_attach(struct rsc_drv *drv, struct device *dev) ...@@ -881,8 +881,7 @@ static int rpmh_rsc_pd_attach(struct rsc_drv *drv, struct device *dev)
return ret; return ret;
} }
static int rpmh_probe_tcs_config(struct platform_device *pdev, static int rpmh_probe_tcs_config(struct platform_device *pdev, struct rsc_drv *drv)
struct rsc_drv *drv, void __iomem *base)
{ {
struct tcs_type_config { struct tcs_type_config {
u32 type; u32 type;
...@@ -896,9 +895,9 @@ static int rpmh_probe_tcs_config(struct platform_device *pdev, ...@@ -896,9 +895,9 @@ static int rpmh_probe_tcs_config(struct platform_device *pdev,
ret = of_property_read_u32(dn, "qcom,tcs-offset", &offset); ret = of_property_read_u32(dn, "qcom,tcs-offset", &offset);
if (ret) if (ret)
return ret; return ret;
drv->tcs_base = base + offset; drv->tcs_base = drv->base + offset;
config = readl_relaxed(base + DRV_PRNT_CHLD_CONFIG); config = readl_relaxed(drv->base + DRV_PRNT_CHLD_CONFIG);
max_tcs = config; max_tcs = config;
max_tcs &= DRV_NUM_TCS_MASK << (DRV_NUM_TCS_SHIFT * drv->id); max_tcs &= DRV_NUM_TCS_MASK << (DRV_NUM_TCS_SHIFT * drv->id);
...@@ -960,7 +959,6 @@ static int rpmh_rsc_probe(struct platform_device *pdev) ...@@ -960,7 +959,6 @@ static int rpmh_rsc_probe(struct platform_device *pdev)
char drv_id[10] = {0}; char drv_id[10] = {0};
int ret, irq; int ret, irq;
u32 solver_config; u32 solver_config;
void __iomem *base;
/* /*
* Even though RPMh doesn't directly use cmd-db, all of its children * Even though RPMh doesn't directly use cmd-db, all of its children
...@@ -987,11 +985,11 @@ static int rpmh_rsc_probe(struct platform_device *pdev) ...@@ -987,11 +985,11 @@ static int rpmh_rsc_probe(struct platform_device *pdev)
drv->name = dev_name(&pdev->dev); drv->name = dev_name(&pdev->dev);
snprintf(drv_id, ARRAY_SIZE(drv_id), "drv-%d", drv->id); snprintf(drv_id, ARRAY_SIZE(drv_id), "drv-%d", drv->id);
base = devm_platform_ioremap_resource_byname(pdev, drv_id); drv->base = devm_platform_ioremap_resource_byname(pdev, drv_id);
if (IS_ERR(base)) if (IS_ERR(drv->base))
return PTR_ERR(base); return PTR_ERR(drv->base);
ret = rpmh_probe_tcs_config(pdev, drv, base); ret = rpmh_probe_tcs_config(pdev, drv);
if (ret) if (ret)
return ret; return ret;
...@@ -1014,7 +1012,7 @@ static int rpmh_rsc_probe(struct platform_device *pdev) ...@@ -1014,7 +1012,7 @@ static int rpmh_rsc_probe(struct platform_device *pdev)
* 'HW solver' mode where they can be in autonomous mode executing low * 'HW solver' mode where they can be in autonomous mode executing low
* power mode to power down. * power mode to power down.
*/ */
solver_config = readl_relaxed(base + DRV_SOLVER_CONFIG); solver_config = readl_relaxed(drv->base + DRV_SOLVER_CONFIG);
solver_config &= DRV_HW_SOLVER_MASK << DRV_HW_SOLVER_SHIFT; solver_config &= DRV_HW_SOLVER_MASK << DRV_HW_SOLVER_SHIFT;
solver_config = solver_config >> DRV_HW_SOLVER_SHIFT; solver_config = solver_config >> DRV_HW_SOLVER_SHIFT;
if (!solver_config) { if (!solver_config) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment