From: Charles Perry <charles.perry@microchip.com>
To: <u-boot@lists.denx.de>
Cc: Rahul Pathak <rahul@summations.net>,
Anup Patel <anup@brainfault.org>,
Charles Perry <charles.perry@microchip.com>,
Paul Walmsley <pjw@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Alexandre Ghiti <alex@ghiti.fr>,
Romain Caritey <romain.caritey@microchip.com>,
Mame Maria Mbaye <MameMaria.Mbaye@microchip.com>,
Tom Rini <trini@konsulko.com>,
"Heinrich Schuchardt" <heinrich.schuchardt@canonical.com>,
Rick Chen <rick@andestech.com>,
Leo Yu-Chi Liang <ycliang@andestech.com>
Subject: [PATCH 0/7] Add support for RPMI to U-Boot
Date: Fri, 26 Jun 2026 13:15:41 -0700 [thread overview]
Message-ID: <20260626201613.1035208-1-charles.perry@microchip.com> (raw)
Hello,
This series adds support for RISC-V Platform Management Interface (RPMI) to
U-Boot. RPMI is an OS-agnostic protocol for communication between an
Application Processor (AP) and a Platform Microcontroller (PuC) [1]. The
goals and purpose of RPMI are similar to ARM's SCMI.
This patchset first adds an abstraction layer for the transport
(UCLASS_RPMI), then adds two transport layer (SBI MPXY and shared memory)
and finally adds two client, or service group in RPMI jargon: Clock and
device power service groups.
This series also include a sandbox mode for which the RPMI transport
doesn't attach to a firmware but contains a simulation of a firmware. This
reuses code from librpmi [2] to create the message responses.
Apart from the spec [1], this series reuses code from the Linux SBI MPXY
driver [3], OpenSBI shared memory transport [4] and Linux RPMI clock driver
[5].
This was tested on a PIC64-HPSC SoC which features an application cluster
and a system controller with isolated address spaces, hence the need for
RPMI. I've tested the interoperability between RPMI clients and transports
with an S-Mode U-boot (using the MPXY transport) and M-Mode U-Boot (using
shared memory transport) and the following device tree fragment:
```
firmware {
rpmi: mailbox@7000000000 {
compatible = "riscv,rpmi-shmem-mbox";
reg = <0x70 0x00000000 0x0 0x3000>,
<0x70 0x00003000 0x0 0x3000>,
<0x70 0x00006000 0x0 0x1000>,
<0x70 0x00007000 0x0 0x1000>;
reg-names = "a2p-req", "p2a-ack", "p2a-req", "a2p-ack";
riscv,slot-size = <64>;
#mbox-cells = <1>;
};
ifndef CONFIG_RISCV_MMODE
clock-service {
compatible = "riscv,rpmi-mpxy-clock";
mboxes = <&rpmi 0x8>;
riscv,sbi-mpxy-channel-id = <0x1000>;
};
device-power-service {
compatible = "riscv,rpmi-mpxy-device-power";
mboxes = <&rpmi 0x9>;
riscv,sbi-mpxy-channel-id = <0x1001>;
};
mpxy_mbox: mailbox {
compatible = "riscv,sbi-mpxy-mbox";
#mbox-cells = <2>;
};
endif
sysc_clk: clock-controller {
compatible = "riscv,rpmi-clock";
ifdef CONFIG_RISCV_MMODE
mboxes = <&rpmi 0x8>;
else
mboxes = <&mpxy_mbox 0x1000 0x0>;
endif
#clock-cells = <1>;
};
sysc_dpwr: power-domain-controller {
compatible = "riscv,rpmi-device-power";
ifdef CONFIG_RISCV_MMODE
mboxes = <&rpmi 0x9>;
else
mboxes = <&mpxy_mbox 0x1001 0x0>;
endif
#power-domain-cells = <1>;
};
};
```
[1]: https://github.com/riscv-non-isa/riscv-rpmi
[2]: https://github.com/riscv-software-src/librpmi
[3]: https://elixir.bootlin.com/linux/v7.0.10/source/drivers/mailbox/riscv-sbi-mpxy-mbox.c
[4]: https://elixir.bootlin.com/opensbi/v1.8.1/source/lib/utils/mailbox/fdt_mailbox_rpmi_shmem.c
[5]: https://elixir.bootlin.com/linux/v7.0.10/source/drivers/clk/clk-rpmi.c
Cc: Rahul Pathak <rahul@summations.net>
Cc: Anup Patel <anup@brainfault.org>
Cc: Paul Walmsley <pjw@kernel.org>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexandre Ghiti <alex@ghiti.fr>
Cc: Romain Caritey <romain.caritey@microchip.com>
Cc: Mame Maria Mbaye <MameMaria.Mbaye@microchip.com>
Cc: Tom Rini <trini@konsulko.com>
Cc: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Cc: Rick Chen <rick@andestech.com>
Cc: Leo Yu-Chi Liang <ycliang@andestech.com>
Charles Perry (7):
firmware: add support for RPMI
firmware: rpmi: add support for the SBI MPXY transport
firmware: rpmi: add support for shared memory transport
drivers: clk: add support for RPMI clocks
drivers: power: add support for RPMI power domains
firmware: rpmi: add a test and a sandbox driver
firmware: rpmi: add a test and sandbox for device power
MAINTAINERS | 9 +
arch/riscv/include/asm/sbi.h | 57 +++
arch/sandbox/dts/test.dts | 23 +
configs/sandbox_defconfig | 3 +
drivers/clk/Kconfig | 7 +
drivers/clk/Makefile | 1 +
drivers/clk/clk_rpmi.c | 346 +++++++++++++++
drivers/firmware/Kconfig | 1 +
drivers/firmware/Makefile | 1 +
drivers/firmware/rpmi/Kconfig | 27 ++
drivers/firmware/rpmi/Makefile | 4 +
drivers/firmware/rpmi/rpmi-sandbox-clock.c | 446 +++++++++++++++++++
drivers/firmware/rpmi/rpmi-sandbox-power.c | 174 ++++++++
drivers/firmware/rpmi/rpmi-sandbox.c | 158 +++++++
drivers/firmware/rpmi/rpmi-sandbox.h | 48 +++
drivers/firmware/rpmi/rpmi-sbi-mpxy.c | 449 +++++++++++++++++++
drivers/firmware/rpmi/rpmi-shmem.c | 474 +++++++++++++++++++++
drivers/firmware/rpmi/rpmi-uclass.c | 138 ++++++
drivers/power/domain/Kconfig | 7 +
drivers/power/domain/Makefile | 1 +
drivers/power/domain/rpmi-power-domain.c | 229 ++++++++++
include/dm/uclass-id.h | 1 +
include/rpmi-uclass.h | 79 ++++
include/rpmi.h | 159 +++++++
include/rpmi_proto.h | 143 +++++++
test/dm/Makefile | 1 +
test/dm/rpmi.c | 69 +++
27 files changed, 3055 insertions(+)
create mode 100644 drivers/clk/clk_rpmi.c
create mode 100644 drivers/firmware/rpmi/Kconfig
create mode 100644 drivers/firmware/rpmi/Makefile
create mode 100644 drivers/firmware/rpmi/rpmi-sandbox-clock.c
create mode 100644 drivers/firmware/rpmi/rpmi-sandbox-power.c
create mode 100644 drivers/firmware/rpmi/rpmi-sandbox.c
create mode 100644 drivers/firmware/rpmi/rpmi-sandbox.h
create mode 100644 drivers/firmware/rpmi/rpmi-sbi-mpxy.c
create mode 100644 drivers/firmware/rpmi/rpmi-shmem.c
create mode 100644 drivers/firmware/rpmi/rpmi-uclass.c
create mode 100644 drivers/power/domain/rpmi-power-domain.c
create mode 100644 include/rpmi-uclass.h
create mode 100644 include/rpmi.h
create mode 100644 include/rpmi_proto.h
create mode 100644 test/dm/rpmi.c
--
2.47.3
next reply other threads:[~2026-06-26 21:20 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-26 20:15 Charles Perry [this message]
2026-06-26 20:15 ` [PATCH 1/7] firmware: add support for RPMI Charles Perry
2026-06-27 1:09 ` Yao Zi
2026-06-26 20:15 ` [PATCH 2/7] firmware: rpmi: add support for the SBI MPXY transport Charles Perry
2026-06-27 1:30 ` Yao Zi
2026-06-26 20:15 ` [PATCH 3/7] firmware: rpmi: add support for shared memory transport Charles Perry
2026-06-26 20:15 ` [PATCH 4/7] drivers: clk: add support for RPMI clocks Charles Perry
2026-06-27 1:47 ` Yao Zi
2026-06-26 20:15 ` [PATCH 5/7] drivers: power: add support for RPMI power domains Charles Perry
2026-06-26 20:15 ` [PATCH 6/7] firmware: rpmi: add a test and a sandbox driver Charles Perry
2026-06-26 20:15 ` [PATCH 7/7] firmware: rpmi: add a test and sandbox for device power Charles Perry
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260626201613.1035208-1-charles.perry@microchip.com \
--to=charles.perry@microchip.com \
--cc=MameMaria.Mbaye@microchip.com \
--cc=alex@ghiti.fr \
--cc=anup@brainfault.org \
--cc=aou@eecs.berkeley.edu \
--cc=heinrich.schuchardt@canonical.com \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=rahul@summations.net \
--cc=rick@andestech.com \
--cc=romain.caritey@microchip.com \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=ycliang@andestech.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox