[PATCH v3 0/3] Add RISC-V RPMI device power service support

Ulf Hansson ulf.hansson at oss.qualcomm.com
Mon Sep 21 07:32:37 PDT 2026


On Thu, Sep 3, 2026 at 11:24 AM Joshua Yeong
<joshua.yeong at starfivetech.com> wrote:
>
> The RISC-V Platform Management Interface (RPMI) specification defines a
> modular and extensible messaging protocol between the supervisor software
> and a platform microcontroller (PuC). Among the service groups it defines
> is the device power service group (service group ID 0x00009), which allows
> the supervisor to enumerate the power domains of platform devices managed
> by the PuC, query their attributes, and get/set their power state.
>
> This series adds supervisor-side support for that service group:
>
>  - DT bindings for the power domain controller exposed to the supervisor
>    ("riscv,rpmi-device-power") and for the SBI MPXY channel that the SBI
>    implementation uses to expose the service group to the supervisor
>    ("riscv,rpmi-mpxy-device-power").
>
>  - A generic power domain (genpd) provider driver under
>    drivers/pmdomain/riscv/ which talks to the PuC over an SBI MPXY
>    mailbox channel. At probe it queries GET_NUM_DOMAINS, then for each
>    domain queries GET_ATTRS for the name and transition latency and
>    GET_STATE for the initial state, and registers the whole set as a
>    onecell genpd provider. Domain power on/off is driven through
>    SET_STATE with the generic ON/OFF power state parameters, so devices
>    can simply reference a domain through the "power-domains" property.
>
> The series is based on the existing RISC-V RPMI/MPXY infrastructure
> already present in the tree (drivers/mailbox/riscv-sbi-mpxy-mbox.c and
> include/linux/mailbox/riscv-rpmi-message.h), and only adds the device
> power service group definitions on top of it.
>
> Changes in v3:
>  - Move the MAINTAINERS change into its own patch, and add a new
>    "RISC-V RPMI DEVICE POWER DRIVER" section scoped to this driver and
>    its bindings instead of adding an M: entry to the existing "RISC-V
>    RPMI AND MPXY DRIVERS" section, which covers drivers maintained by
>    others.
>  - Drop the redundant trailing "bindings" from the dt-bindings subject.
>  - Compare only the value field of the RPMI power state word. The word
>    also carries a context bit, so a full word comparison would report
>    -EIO after a successful transition, and would drop a domain at probe,
>    whenever the PuC reports context as lost.
>  - Check the pm_genpd_init() return value and leave a failed domain out
>    of the onecell array. Every failure path in pm_genpd_init() returns
>    before the genpd is linked into gpd_list, so the previous code could
>    hand a half initialised genpd to of_genpd_add_provider_onecell() and
>    then list_del() an uninitialised list head in the unwind loop.
>  - Set GENPD_FLAG_DEV_NAME_FW. The domain names come from the PuC and
>    are not guaranteed to be unique or non-empty, and were used verbatim
>    as the sysfs and debugfs names, where a duplicate fails device_add()
>    with -EEXIST and takes down the whole provider.
>
> v1: https://lore.kernel.org/r/20260829205520.1691-1-joshua.yeong@starfivetech.com
> v2: https://lore.kernel.org/r/20260830152812.312663-1-joshua.yeong@starfivetech.com
>
> Testing
> =======
>
> The series was tested under QEMU with the RPMI device power service
> implemented in firmware.
>
> Components:
>
>  - OpenSBI: latest master branch
>    https://github.com/riscv-software-src/opensbi
>
>  - QEMU: the RPMI-enabled tree at
>    https://github.com/yeongjoshua/qemu/tree/rpmi-v11.1.0
>
> Kernel config: enable CONFIG_RISCV_RPMI_DEVICE_POWER (default y on RISC-V
> when MAILBOX is enabled) along with the SBI MPXY mailbox driver.
>
> Run with:
>
>   qemu-system-riscv64 \
>       -M virt -m 2G -smp 4 \
>       -bios fw_dynamic.bin \
>       -kernel Image \
>       -M rpmi=true \
>       -nographic \
>       -initrd rootfs-busybox.cpio \
>       -append "root=/dev/ram rw console=ttyS0,115200 no_console_suspend mem=2048M earlycon=uart8250,mmio,0x10000000"
>
> The RPMI device power domains advertised by the emulated platform
> microcontroller show up as generic power domains and can be inspected
> through /sys/kernel/debug/pm_genpd/. The series was additionally booted
> with CONFIG_PROVE_LOCKING, CONFIG_DEBUG_MUTEXES and
> CONFIG_DEBUG_ATOMIC_SLEEP enabled, with no lockdep reports.
>
> Joshua Yeong (3):
>   dt-bindings: power: Add RPMI device power service
>   pmdomain: riscv: Add RPMI device power service
>   MAINTAINERS: Add RISC-V RPMI device power driver
>
>  .../power/riscv,rpmi-device-power.yaml        |  65 +++
>  .../power/riscv,rpmi-mpxy-device-power.yaml   |  65 +++
>  MAINTAINERS                                   |   8 +
>  drivers/pmdomain/Kconfig                      |   1 +
>  drivers/pmdomain/Makefile                     |   1 +
>  drivers/pmdomain/riscv/Kconfig                |  15 +
>  drivers/pmdomain/riscv/Makefile               |   3 +
>  .../pmdomain/riscv/riscv-rpmi-device-power.c  | 485 ++++++++++++++++++
>  include/linux/mailbox/riscv-rpmi-message.h    |  11 +
>  9 files changed, 654 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/power/riscv,rpmi-device-power.yaml
>  create mode 100644 Documentation/devicetree/bindings/power/riscv,rpmi-mpxy-device-power.yaml
>  create mode 100644 drivers/pmdomain/riscv/Kconfig
>  create mode 100644 drivers/pmdomain/riscv/Makefile
>  create mode 100644 drivers/pmdomain/riscv/riscv-rpmi-device-power.c
>
>
> base-commit: 8d3ae59288f1e7d58d76558a6ee96d533bc5019f
> --
> 2.43.0

The v3 series applied for next, thanks!

Kind regards
Uffe



More information about the linux-riscv mailing list