On 17/06/2024 10:32, Caleb Connolly wrote:
Introduce two Qualcomm SoC drivers, the RPMh and cmd-db. RPMh is a the
name for the second generation Resource Power Management hub on Qualcomm
SoCs. Most core regulators have to be controlled via this hub.

The cmd-db is a region of memory which contains offsets and data about
how to communicate with the RPMh.

Signed-off-by: Caleb Connolly <caleb.conno...@linaro.org>
---
  drivers/soc/Kconfig              |   1 +
  drivers/soc/Makefile             |   1 +
  drivers/soc/qcom/Kconfig         |  25 ++
  drivers/soc/qcom/Makefile        |   4 +
  drivers/soc/qcom/cmd-db.c        | 246 ++++++++++++++++
  drivers/soc/qcom/rpmh-internal.h | 141 +++++++++
  drivers/soc/qcom/rpmh-rsc.c      | 619 +++++++++++++++++++++++++++++++++++++++
  drivers/soc/qcom/rpmh.c          | 110 +++++++
  include/soc/qcom/cmd-db.h        |  42 +++
  include/soc/qcom/rpmh.h          |  29 ++
  include/soc/qcom/tcs.h           |  78 +++++
  11 files changed, 1296 insertions(+)


<snip>

+
+       if (drv->ver.major == 3) {
+               printf("RPMh v3 not supported\n");
+               return -EOPNOTSUPP;
+       } else {
+               drv->regs = rpmh_rsc_reg_offset_ver_2_7;
+       }


I think you can safely add the v3 offsets:

==========><======================================
diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c
index 29fc0c2ed49..a4ff374675d 100644
--- a/drivers/soc/qcom/rpmh-rsc.c
+++ b/drivers/soc/qcom/rpmh-rsc.c
@@ -152,6 +152,24 @@ static u32 rpmh_rsc_reg_offset_ver_2_7[] = {
        [RSC_DRV_CMD_RESP_DATA]         = 0x40,
 };

+static u32 rpmh_rsc_reg_offset_ver_3_0[] = {
+       [RSC_DRV_TCS_OFFSET]            = 672,
+       [RSC_DRV_CMD_OFFSET]            = 24,
+       [DRV_SOLVER_CONFIG]             = 0x04,
+       [DRV_PRNT_CHLD_CONFIG]          = 0x0C,
+       [RSC_DRV_IRQ_ENABLE]            = 0x00,
+       [RSC_DRV_IRQ_STATUS]            = 0x04,
+       [RSC_DRV_IRQ_CLEAR]             = 0x08,
+       [RSC_DRV_CMD_WAIT_FOR_CMPL]     = 0x20,
+       [RSC_DRV_CONTROL]               = 0x24,
+       [RSC_DRV_STATUS]                = 0x28,
+       [RSC_DRV_CMD_ENABLE]            = 0x2C,
+       [RSC_DRV_CMD_MSGID]             = 0x34,
+       [RSC_DRV_CMD_ADDR]              = 0x38,
+       [RSC_DRV_CMD_DATA]              = 0x3C,
+       [RSC_DRV_CMD_STATUS]            = 0x40,
+       [RSC_DRV_CMD_RESP_DATA]         = 0x44,
+};

 static inline void __iomem *
 tcs_reg_addr(const struct rsc_drv *drv, int reg, int tcs_id)
@@ -573,10 +591,9 @@ found:
        drv->ver.minor = rsc_id & (MINOR_VER_MASK << MINOR_VER_SHIFT);
        drv->ver.minor >>= MINOR_VER_SHIFT;

-       if (drv->ver.major == 3) {
-               printf("RPMh v3 not supported\n");
-               return -ENOTSUPP;
-       } else
+       if (drv->ver.major == 3)
+               drv->regs = rpmh_rsc_reg_offset_ver_3_0;
+       else
                drv->regs = rpmh_rsc_reg_offset_ver_2_7;

        ret = rpmh_probe_tcs_config(dev, drv);
==========><======================================

And add my:
Tested-by: Neil Armstrong <neil.armstr...@linaro.org> # on SM8550 & SM8^%)


<snip>

Reply via email to