[PATCH 2/3] soc: qcom: rpmh and cmd-db drivers
Neil Armstrong
neil.armstrong at linaro.org
Mon Jun 17 11:53:28 CEST 2024
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 at 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 at linaro.org> # on SM8550 & SM8^%)
<snip>
More information about the U-Boot
mailing list