From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5DB30C43458 for ; Wed, 8 Jul 2026 21:52:30 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9067D84A1F; Wed, 8 Jul 2026 23:52:28 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=microchip.com header.i=@microchip.com header.b="pGhbIIjx"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 6CDCF84A3A; Wed, 8 Jul 2026 23:52:27 +0200 (CEST) Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 2E4988407E for ; Wed, 8 Jul 2026 23:52:23 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=prvs=642353e54=Charles.Perry@microchip.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1783547544; x=1815083544; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=5/OyS+eSCclVy+POhet5GQaKA5e2AZcWYNNb70XWC/Y=; b=pGhbIIjxhwAiK2lgbvvJwb62iRn6w6v3QJqBeus9DgNgXaRSpoP2uaO3 A6bwRWQiegItd8FaSsb5cQHQJaRFAhynFpfLjRx0+6ZSI/LHC0Gn/RBUr qLrTMHiKJv0TodHk8MNZq8pX/7kLgNJHle5iKzaiPBVjK+pMtSWXDMK3i lNZeoDVUVvx38FZnLuxGjUjEbbHyWKBh3/cGwo7dd0x7mU0etFvaZbw58 Sql4U0IjkloFJU6PqiMiTrqZ8PRKrFGrK+UO7FBxMxxc/ixI9moEaJXGI IBBIV0VDDcSth0cdoITbgWnAIEVD7WU/BDEVLTPyDTHd7mn69pwyX53n5 w==; X-CSE-ConnectionGUID: G6Eiu6x1SPm322wxbY4XdQ== X-CSE-MsgGUID: K0IT1HnjSQ2Y0ygAilpu7w== X-IronPort-AV: E=Sophos;i="6.25,153,1779174000"; d="scan'208";a="69640496" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa1.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2026 14:52:21 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.87.151) by chn-vm-ex3.mchp-main.com (10.10.87.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.43; Wed, 8 Jul 2026 14:52:20 -0700 Received: from bby-cbu-swbuild03.eng.microchip.com (10.10.85.11) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Wed, 8 Jul 2026 14:52:18 -0700 From: Charles Perry To: CC: Rahul Pathak , Anup Patel , Charles Perry , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Romain Caritey , Mame Maria Mbaye , Tom Rini , "Heinrich Schuchardt" , Rick Chen , Leo Yu-Chi Liang Subject: [PATCH v2 0/5] Add support for RPMI to U-Boot Date: Wed, 8 Jul 2026 14:51:37 -0700 Message-ID: <20260708215200.1331416-1-charles.perry@microchip.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean 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 one client or service group in RPMI jargon: the clock service group. 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>; }; 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>; }; ``` [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 Cc: Anup Patel Cc: Paul Walmsley Cc: Palmer Dabbelt Cc: Albert Ou Cc: Alexandre Ghiti Cc: Romain Caritey Cc: Mame Maria Mbaye Cc: Tom Rini Cc: Heinrich Schuchardt Cc: Rick Chen Cc: Leo Yu-Chi Liang Changes in v2: - Drop the device-power service group as the DT bindings for it are not mainlined (was patch 5 and 7). - Reorder headers in all .c files. - Don't null check pointers before free(). - Improve error messages in rpmi_check_versions() (patch 1). - Remove struct sbi_mpxy_rpmi_channel_attrs and struct sbi_mpxy_channel_attrs for simpler u32 arrays (patch 2). - Remove transition_latency from struct rpmi_clk_def as it's unused (patch 4). - Simplify last return path of _rpmi_clk_enable_disable() (patch 4). - Move the call to _rpmi_clk_get_rate() from _rpmi_clk_set_rate() to rpmi_clk_set_rate() (patch 4). Charles Perry (5): 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 firmware: rpmi: add a test and a sandbox driver MAINTAINERS | 8 + arch/riscv/include/asm/sbi.h | 57 +++ arch/sandbox/dts/test.dts | 12 + configs/sandbox_defconfig | 2 + drivers/clk/Kconfig | 7 + drivers/clk/Makefile | 1 + drivers/clk/clk_rpmi.c | 344 +++++++++++++++ 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.c | 156 +++++++ drivers/firmware/rpmi/rpmi-sandbox.h | 47 ++ drivers/firmware/rpmi/rpmi-sbi-mpxy.c | 410 ++++++++++++++++++ drivers/firmware/rpmi/rpmi-shmem.c | 473 +++++++++++++++++++++ drivers/firmware/rpmi/rpmi-uclass.c | 144 +++++++ include/dm/uclass-id.h | 1 + include/rpmi-uclass.h | 79 ++++ include/rpmi.h | 159 +++++++ include/rpmi_proto.h | 125 ++++++ test/dm/Makefile | 1 + test/dm/rpmi.c | 48 +++ 23 files changed, 2553 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.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 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