
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.connolly@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.armstrong@linaro.org # on SM8550 & SM8^%)
<snip>