[PATCH v4 00/21] qcom: rpmh core and regulator support

Caleb Connolly caleb.connolly at linaro.org
Wed Jul 10 18:29:59 CEST 2024



On 10/07/2024 13:33, Sumit Garg wrote:
> Hi Caleb,
> 
> On Tue, 9 Jul 2024 at 15:04, Caleb Connolly <caleb.connolly at 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 at 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)
>>

-- 
// Caleb (they/them)


More information about the U-Boot mailing list