Message ID | 20240709-b4-qcom-rpmh-v4-0-c06d0a26644a@linaro.org |
---|---|
Headers | show |
Series | qcom: rpmh core and regulator support | expand |
Hi Caleb, On Tue, 9 Jul 2024 at 15:04, Caleb Connolly <caleb.connolly@linaro.org> wrote: > > This series introduces support for the RPMh (Resource Power Manager > (hardened)) co-processor and associated regulator driver found on most > modern Qualcomm platforms (since ~2017). > > Even though most regulators are controlled via SPMI, the specific > regions on the PMICs for controlling the regulators are restricted and > can't be accessed by the Applications Processor (AP/HLOS). Instead, > these resources are proxied via the RPMh where they can be voted on by > multiple subsystems (Linux, the modem, and the other DSPs). This is done > for security (to protect clocks, power domains, and regulators that are > specifically relevant for the trustzone) as well as to simplify the > management of shared peripherals and to allow for handover of > peripherals like the USB controller. > > For U-Boot, our main concern is the regulators. Since all regulators on > the system are controlled via the RPMh, it is necessary to support it to > enable USB VBUS on some platforms, and may be needed for other > peripherals in the future. > > Communicating with the RPMh additional requires accessing the cmd-db > shared memory region, this contains key/value maps to determine the > address of specific resources on the RPMh. > > Introduce support for the cmd-db, the RPMh framework, and some of the > regulators that are necessary to enable USB VBUS on the RB5 development > board. > > These drivers are taken from Linux, then modified and simplified for > U-Boot. The original Linux drivers contain heavy optimisations related > to multithreading and asynchronous probing, as well as support for idle > and suspend states which we don't need to deal with here. This unused > code is removed before finally adjusting the drivers to properly build > for U-Boot and use its device model. > > The U-Boot version of the driver supports a single ACTIVE_ONLY TCS and > waits for it to be cleared after use. We don't support programming > low power states. > > --- > Changes in v4: > - Denote original Linux version in bitmap.h patch > - Rebased on Linux 6.10-rc6 and re-apply U-Boot changes preserving git > history. Allowing for future changes to the Linux drivers to be ported > over more easily. > - Add missing check to wait for the TCS to be cleared after use (seems > we were just racing the RPMh before, oops!). > - Fix missing n_modes in pmic5_pldo regulator. > - Link to v3: https://lore.kernel.org/r/20240708-b4-qcom-rpmh-v3-0-846cc6c5b728@linaro.org Thanks for doing this, this looks much better from a maintainability perspective. Although I am seeing a lot of patches saying adjustments and build fixes, I think you should have taken care of commits bisect-ability such that individual commits don't cause any build errors. FWIW, for the series: Acked-by: Sumit Garg <sumit.garg@linaro.org> -Sumit > > Changes in v3: > - Don't call dm_scan_fdt_dev(), since DM core will scan. > - Link to v2: https://lore.kernel.org/r/20240708-b4-qcom-rpmh-v2-0-8bc765606e56@linaro.org > > Changes in v2: > - Implement Neil's suggestions and fixes for SM8[56]50 > - Slightly refactor cmd_db_init() for better abstraction. > - Improve logging (printf -> log_err/dev_err) > - Add missing error check in rpmh_regulators_bind() > - Link to v1: https://lore.kernel.org/r/20240617-b4-qcom-rpmh-v1-0-bd2336923e0a@linaro.org > > --- > Caleb Connolly (21): > linux/bitmap.h: add bitmap_empty helper > soc: qcom: import rpmh and cmd-db drivers from Linux > soc: qcom: cmd-db: adjust headers for U-Boot > soc: qcom: cmd-db: drop unused functions > soc: qcom: cmd-db: replace cmd_db_ready() with cmd_db_init() > soc: qcom: cmd-db: adjust for U-Boot API > soc: qcom: rpmh-rsc: drop unused multi-threading and non-active TCS support > soc: qcom: rpmh-rsc: adjust headers for U-Boot > soc: qcom: rpmh-rsc: adjust probe for U-Boot > soc: qcom: rpmh-rsc: remaining U-Boot API changes > soc: qcom: rpmh: adjust headers for U-Boot > soc: qcom: rpmh: drop unused functions > soc: qcom: rpmh: U-Boot API changes > power: regulator: import qcom-rpmh-regulator from Linux > power: regulator: adjust headers for U-Boot > power: regulator: qcom-rpmh-regulator: port over lineage_range helpers > power: regulator: adjust structs for U-Boot > power: regulator: qcom-rpmh-regulator: remove unused regulators > power: regulator: qcom-rpmh-regulator: port ops to U-Boot > power: regulator: qcom-rpmh-regulator: adjust probe for U-Boot > qcom_defconfig: enable rpmh regulators > > configs/qcom_defconfig | 5 + > drivers/power/regulator/Kconfig | 8 + > drivers/power/regulator/Makefile | 1 + > drivers/power/regulator/qcom-rpmh-regulator.c | 544 ++++++++++++++++++++++++++ > drivers/soc/Kconfig | 1 + > drivers/soc/Makefile | 1 + > drivers/soc/qcom/Kconfig | 27 ++ > drivers/soc/qcom/Makefile | 4 + > drivers/soc/qcom/cmd-db.c | 213 ++++++++++ > drivers/soc/qcom/rpmh-internal.h | 138 +++++++ > drivers/soc/qcom/rpmh-rsc.c | 518 ++++++++++++++++++++++++ > drivers/soc/qcom/rpmh.c | 110 ++++++ > include/linux/bitmap.h | 8 + > include/soc/qcom/cmd-db.h | 33 ++ > include/soc/qcom/rpmh.h | 28 ++ > include/soc/qcom/tcs.h | 81 ++++ > 16 files changed, 1720 insertions(+) > --- > change-id: 20240611-b4-qcom-rpmh-fcfd32ac2940 > base-commit: 50adc932e7aa34e6d9c738ec13ed09382a9d109a > > // Caleb (they/them) >
On 10/07/2024 13:33, Sumit Garg wrote: > Hi Caleb, > > On Tue, 9 Jul 2024 at 15:04, Caleb Connolly <caleb.connolly@linaro.org> wrote: >> >> This series introduces support for the RPMh (Resource Power Manager >> (hardened)) co-processor and associated regulator driver found on most >> modern Qualcomm platforms (since ~2017). >> >> Even though most regulators are controlled via SPMI, the specific >> regions on the PMICs for controlling the regulators are restricted and >> can't be accessed by the Applications Processor (AP/HLOS). Instead, >> these resources are proxied via the RPMh where they can be voted on by >> multiple subsystems (Linux, the modem, and the other DSPs). This is done >> for security (to protect clocks, power domains, and regulators that are >> specifically relevant for the trustzone) as well as to simplify the >> management of shared peripherals and to allow for handover of >> peripherals like the USB controller. >> >> For U-Boot, our main concern is the regulators. Since all regulators on >> the system are controlled via the RPMh, it is necessary to support it to >> enable USB VBUS on some platforms, and may be needed for other >> peripherals in the future. >> >> Communicating with the RPMh additional requires accessing the cmd-db >> shared memory region, this contains key/value maps to determine the >> address of specific resources on the RPMh. >> >> Introduce support for the cmd-db, the RPMh framework, and some of the >> regulators that are necessary to enable USB VBUS on the RB5 development >> board. >> >> These drivers are taken from Linux, then modified and simplified for >> U-Boot. The original Linux drivers contain heavy optimisations related >> to multithreading and asynchronous probing, as well as support for idle >> and suspend states which we don't need to deal with here. This unused >> code is removed before finally adjusting the drivers to properly build >> for U-Boot and use its device model. >> >> The U-Boot version of the driver supports a single ACTIVE_ONLY TCS and >> waits for it to be cleared after use. We don't support programming >> low power states. >> >> --- >> Changes in v4: >> - Denote original Linux version in bitmap.h patch >> - Rebased on Linux 6.10-rc6 and re-apply U-Boot changes preserving git >> history. Allowing for future changes to the Linux drivers to be ported >> over more easily. >> - Add missing check to wait for the TCS to be cleared after use (seems >> we were just racing the RPMh before, oops!). >> - Fix missing n_modes in pmic5_pldo regulator. >> - Link to v3: https://lore.kernel.org/r/20240708-b4-qcom-rpmh-v3-0-846cc6c5b728@linaro.org > > Thanks for doing this, this looks much better from a maintainability > perspective. Although I am seeing a lot of patches saying adjustments > and build fixes, I think you should have taken care of commits > bisect-ability such that individual commits don't cause any build > errors. I'll send a v5 which holds off on adding the Kconfig/Makefile parts until after the code is adjusted, this will prevent breaking bisection and still make it easy for us to cherry-pick commits from Linux with some git magic. > > FWIW, for the series: > > Acked-by: Sumit Garg <sumit.garg@linaro.org> Thanks, > > -Sumit > >> >> Changes in v3: >> - Don't call dm_scan_fdt_dev(), since DM core will scan. >> - Link to v2: https://lore.kernel.org/r/20240708-b4-qcom-rpmh-v2-0-8bc765606e56@linaro.org >> >> Changes in v2: >> - Implement Neil's suggestions and fixes for SM8[56]50 >> - Slightly refactor cmd_db_init() for better abstraction. >> - Improve logging (printf -> log_err/dev_err) >> - Add missing error check in rpmh_regulators_bind() >> - Link to v1: https://lore.kernel.org/r/20240617-b4-qcom-rpmh-v1-0-bd2336923e0a@linaro.org >> >> --- >> Caleb Connolly (21): >> linux/bitmap.h: add bitmap_empty helper >> soc: qcom: import rpmh and cmd-db drivers from Linux >> soc: qcom: cmd-db: adjust headers for U-Boot >> soc: qcom: cmd-db: drop unused functions >> soc: qcom: cmd-db: replace cmd_db_ready() with cmd_db_init() >> soc: qcom: cmd-db: adjust for U-Boot API >> soc: qcom: rpmh-rsc: drop unused multi-threading and non-active TCS support >> soc: qcom: rpmh-rsc: adjust headers for U-Boot >> soc: qcom: rpmh-rsc: adjust probe for U-Boot >> soc: qcom: rpmh-rsc: remaining U-Boot API changes >> soc: qcom: rpmh: adjust headers for U-Boot >> soc: qcom: rpmh: drop unused functions >> soc: qcom: rpmh: U-Boot API changes >> power: regulator: import qcom-rpmh-regulator from Linux >> power: regulator: adjust headers for U-Boot >> power: regulator: qcom-rpmh-regulator: port over lineage_range helpers >> power: regulator: adjust structs for U-Boot >> power: regulator: qcom-rpmh-regulator: remove unused regulators >> power: regulator: qcom-rpmh-regulator: port ops to U-Boot >> power: regulator: qcom-rpmh-regulator: adjust probe for U-Boot >> qcom_defconfig: enable rpmh regulators >> >> configs/qcom_defconfig | 5 + >> drivers/power/regulator/Kconfig | 8 + >> drivers/power/regulator/Makefile | 1 + >> drivers/power/regulator/qcom-rpmh-regulator.c | 544 ++++++++++++++++++++++++++ >> drivers/soc/Kconfig | 1 + >> drivers/soc/Makefile | 1 + >> drivers/soc/qcom/Kconfig | 27 ++ >> drivers/soc/qcom/Makefile | 4 + >> drivers/soc/qcom/cmd-db.c | 213 ++++++++++ >> drivers/soc/qcom/rpmh-internal.h | 138 +++++++ >> drivers/soc/qcom/rpmh-rsc.c | 518 ++++++++++++++++++++++++ >> drivers/soc/qcom/rpmh.c | 110 ++++++ >> include/linux/bitmap.h | 8 + >> include/soc/qcom/cmd-db.h | 33 ++ >> include/soc/qcom/rpmh.h | 28 ++ >> include/soc/qcom/tcs.h | 81 ++++ >> 16 files changed, 1720 insertions(+) >> --- >> change-id: 20240611-b4-qcom-rpmh-fcfd32ac2940 >> base-commit: 50adc932e7aa34e6d9c738ec13ed09382a9d109a >> >> // Caleb (they/them) >>