From nobody Sun Feb 8 04:38:31 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2103.outbound.protection.partner.outlook.cn [139.219.17.103]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3C80930FF33; Tue, 6 Jan 2026 09:22:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.103 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767691331; cv=fail; b=NacCbfIVx1ZIHDMCRSd7p6ZKzDD+FJEcgycbgA6Bv/nBPzvN+nZI434vziaSKRyCOz+EQtaUPkL37xcJPKLLIg6a8/XR9+HRGk0LeNyonqEPOxTdQQkyBIXmwIX3cLG+kQ6aqrsotLQVORawG5CQ6WFedkPc5XGStzu3U+L7a9M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767691331; c=relaxed/simple; bh=oP1ovvZL4DTAUFkW23aAIJ6Y0kghiKxJpuRGyO55sJE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=X8MDyvPoq3COb5eVo4r+X7JCk6N20C2kKYiP15M5jW8ln3kt+GUkBKPTto6NtDdJJae+az585naHQjpQNOPyyUHpoeSoljLq1ep+WodWocg/vxn9W/T75wGJf3f3Kk26iQhzKbpevMxnGSeEFFikjR/KFkLhUuRtk+/zmdbkftE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.103 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ea4rbdu+3DqzE5mq4y2Ksu2VvAU/yp3T7WOrJdZNO8wKg2OD2upBSWNxnRnXQI/Hshmo9aBKdV98LM2/X1huzujlm/FjHsgDAXZ+PgQs8uV8+hRBGMfDJNt8sGiCbbAWyf5MqrSQz7fFYefKUhXUbdDBMDhMONzW8R9nspQy2sxnTnWlP0iNjUPPXyOSagOumsA7cGBqneIbRuZZBvrni4+qkWagYTvNjnjG99kS+Nl7Nr9OEcsBADL//J4ljWZLchoTOyWC1Q9WynBL85+amyMhC1wd8ENQXxEdq6ADHxTuHcWa19Xq4WD/N53pekzxHj07zsa1yeUh6gVwZeVoZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=riT3ma3FNotfFDXDu4XiwyZfXtI287FI8R03KiFZAOg=; b=gGvSCNgZOOehA2ZI5zrsrSp37kr5bEF1TkneqV8jmdmshcJpYtVgMBKqWDhDEnJ6ctxLz3KcStsmxCBIxmEOAKGF+3iz5EjCKUNC77PRrUE7a7gOIeY8xh0YHEVM0RqJlSKTFLRBKKjD6ZbCifETfT6XhahPEMPXb8e4xykdtLh6JIPvw9/z2P5q0J8/feQ2qRGjyt0glxWoRDbQ4y86tFK3CGRDSHm06VyoAFNfgF1AgWlrF71h0dfccf++r8tgmyuB1DStdjplwO4W8dZ245qXDnIikB0obEfEtmIVpKnKUC8nWCLwfoTQnG5TPNygOI494a3DivPnibL69gb2xw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:20::14) by SH0PR01MB0730.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:22::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.13; Tue, 6 Jan 2026 09:22:01 +0000 Received: from SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn ([fe80::81c4:2724:6a48:a18]) by SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn ([fe80::81c4:2724:6a48:a18%4]) with mapi id 15.20.9388.011; Tue, 6 Jan 2026 09:22:01 +0000 From: Joshua Yeong To: rahul@summations.net, anup@brainfault.org, joshua.yeong@starfivetech.com, leyfoon.tan@starfivetech.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr, rafael@kernel.org, viresh.kumar@linaro.org, sboyd@kernel.org, jms@oss.tenstorrent.com, darshan.prajapati@einfochips.com, charlie@rivosinc.com, dfustini@oss.tenstorrent.com, michal.simek@amd.com, cyy@cyyself.name, jassisinghbrar@gmail.com, andriy.shevchenko@linux.intel.com Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH 1/5] dt-bindings: firmware: Add RPMI performance service message proxy bindings Date: Tue, 6 Jan 2026 17:21:12 +0800 Message-ID: <20260106092117.3727152-2-joshua.yeong@starfivetech.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260106092117.3727152-1-joshua.yeong@starfivetech.com> References: <20260106092117.3727152-1-joshua.yeong@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: ZQ0PR01CA0035.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:2::21) To SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:20::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SH0PR01MB0841:EE_|SH0PR01MB0730:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a87ed47-4ddf-4ea5-1cc7-08de4d050c0f X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|366016|52116014|41320700013|38350700014|921020; X-Microsoft-Antispam-Message-Info: uQu2qLuOzJ7YU9WhgBAYJhiW+jNIueOP1F6fckdUF0Qt1vDGBhPpRk0l+8cerSTI6K0ojdVhZdqHj61r9Vh1dHiSE0UBIsmC436OMjfm+DoQGJSa7cVkevqH3xJM55mXDDjVw11XSj1b7cwRZGl0Zx5+WSt0SgiJ38angqqx7vPTAgJIqKpBmMmf9X1kLxVu665OVk7h9O4p5jRCv833Qj8RgmfkA58RblLprOF9Lu3t5afYbXdHAA3JntVdkpuNHr3oOleSm851BmRzu6KTvFPRcNnIzQ3v7F0rjcGfq/NjgDbDfTr3Xj0zuSoyHPp7apCqGl7UC3w7gOfQl6PzVKpi9QAVLxBEVkkvFe9q7xE3klyFvFvowT7ami6BYF9dsXmjvPLW4cM2zHTWz9CEgfNIF3JQCF6zytcW6/BRs2GSnnRGnAEgwoosqQ8jkXGmWZzloaOOP1y6THW9Dw8zj4gSgkeYBfoMUsp5ZQ2S+0PhjpPhWSpUJjBGqzCoXtqhEisitTQIJnaQWqG+kemUjbsYyZnPkOdcQjgcgr9ESiWP8zV6ObJKZnFoiGBJrY9rmg44yEZSetbBnChc3GRPrHVz7llcFFgveUtK3X65WnE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(366016)(52116014)(41320700013)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?NG94XhRNbcsx/WaQTAIGSpYbL0gJrbmo5gp8KPJme0pBtG8C7pNBtKjHiIqT?= =?us-ascii?Q?bzRyX3aYu7pD+mIFpKSvDuL26YwoTelmXFFdqxnWiFFl3z3hQ+z5p5fzkLhl?= =?us-ascii?Q?XK2rZBWEPYM2jU+5ar5Xy76Z5Q7grCR6pJk0lpnZ7kgxDtUlwsqNXnUb2goE?= =?us-ascii?Q?No85KpvhaCJcEsOO4KYZ2qsrGeYvRBJSZn7uIEv7yC6+hL8tJayfqdQ0gZ2A?= =?us-ascii?Q?3fN2dBlyRkqYtGiiaP38R7puxw8dy6p4+7W7kjBYn/F5ocYGsO67AiQNeySo?= =?us-ascii?Q?SRkRrN0HAJqmSwNOxRyDYEVnAx2pZnqFN8/WqD4O6i1wuEzs8+lRmFIIUHWf?= =?us-ascii?Q?PEFTkKl+JQu3IbBGZnu2ClfRn3faIwU/pSdALA1x/pObhSYdIma+A8WmO/9m?= =?us-ascii?Q?dMoanpSG+iAb5dZ+Gq4XPOuajurFtap4qtwDyBfheBlMk77O95hJKbSeMH+c?= =?us-ascii?Q?28R41Z5EkPPvCiCKTzYnH9yeLyoYqyJPCmWKHn4F98Eg8yw4PRkhDe6/U4Vq?= =?us-ascii?Q?0Jh6E+2GvkeszJ4WoKBYBoKZT9414GU+P8XBAl6m1aXgP7ovseY0HR2acvLc?= =?us-ascii?Q?YclXnvPvztarZHJCcDq0uIuDq0tmuPbRQ8krU/Y1oRDVCIxKirVK8luG/AyB?= =?us-ascii?Q?Q32Z2IwSOh2NJv86RAYcfdJvtnLNy5vWX1fa5D7zYDhcIYUBQAJfFdYKwdRn?= =?us-ascii?Q?GB+etf6mRvOfJZRznD/Gr/WOCQ96vwJXMICf76Ovc4fkl4aSv7CSRHT+Xlg6?= =?us-ascii?Q?Becwg+0GkdmlAOEpjDTf4X3SqQ9Nv3cIe8M+6kz6Pylt9fb9tzFractQuyQT?= =?us-ascii?Q?xYrhEG02V2TIIyenowdc3HBXHlCusSM73iKEwo826HFbaA8z/AAX+hiOCoyI?= =?us-ascii?Q?MLDK3iaT0uH4N8DnmuYfj0OI+FQydJc7qJ7zEk8SEqDKPlZyG/h9VNLS4Gz2?= =?us-ascii?Q?dPBSOS3nzT7qJcZBf3tqtakfET/bVe9qaOalaIp9SoB7aHvLMsZxDnmllJSE?= =?us-ascii?Q?tWQ/71gqxH5MPeA1mVCYU1Op3na9qyZSmPmhxRt4OUh9vjQ9M5pnkSczhq6F?= =?us-ascii?Q?uRa/hlaMdVggo46Y46ESFfagpmw7WbFVhUYwxXlYOKg8SCMEySD9dsWgyiD1?= =?us-ascii?Q?+q6Ezsfa83C6z+Tr9htQyt5RH/9VsbIlGUM98prXxujkoT28Ix9/rP6Ug+jo?= =?us-ascii?Q?qQPT9euvYh6ql1M7P/VsnGsev4GShiYw0zNsobcXQOm2ESftwMhEdbb0TEqU?= =?us-ascii?Q?Nost0txt3wDOjgUQ+IQ9TzB92lh6DRzYsxfFIhaGKdLCvxzz/JWpWa6ZyRhb?= =?us-ascii?Q?Uj6S7S6ui04ibv2KHLHcoeuj6hbXhA+KNP7YodFfUnVpriLBCmpGn6uZGblA?= =?us-ascii?Q?/mL/QaIk8yPV4PREB6IvK6n1ssbvRv7TtMqDSk4Lr4YX2bS14YIo3gM9JHY9?= =?us-ascii?Q?5Ft4lkKLATyfopXZfhJyZ47t7WT0Fjnmw1+YUCL4v6vNDsUXNAfIRdyza2fp?= =?us-ascii?Q?wCqF6z5i6aqZaleWEdJKZf1fZVxhnYbQHN/oMq6Rpy5UJP320nzvFOLARYta?= =?us-ascii?Q?W6z8y7cRkfT0V1P3z2vkYHZDVUhUwslmzFpoxnVDOkS29vZTN6Wwp93jjES8?= =?us-ascii?Q?ldnNQ99ZfjSXWRj2dRyRAd0=3D?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6a87ed47-4ddf-4ea5-1cc7-08de4d050c0f X-MS-Exchange-CrossTenant-AuthSource: SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2026 09:22:00.8960 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2mZJrfpZ4DqFCtE0P3vMqqJ89hjjFHQYaQjvMFIbWPEy3et1QP1VFpw9Wj8LbwgHSfshkpssnAat8YEIe8hSUNv8CUHjCIliCTgRHL+1TKo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SH0PR01MB0730 Content-Type: text/plain; charset="utf-8" Add device tree bindings for the RPMI performance service group based message proxy implemented by the SBI implementation (machine mode firmware or hypervisor). The RPMI performance service group is defined by the RISC-V Platform Management Interface (RPMI) specification. Signed-off-by: Joshua Yeong --- .../firmware/riscv,rpmi-mpxy-performance.yaml | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Documentation/devicetree/bindings/firmware/riscv,rpmi-m= pxy-performance.yaml diff --git a/Documentation/devicetree/bindings/firmware/riscv,rpmi-mpxy-per= formance.yaml b/Documentation/devicetree/bindings/firmware/riscv,rpmi-mpxy-= performance.yaml new file mode 100644 index 000000000000..0b97bbff458f --- /dev/null +++ b/Documentation/devicetree/bindings/firmware/riscv,rpmi-mpxy-performanc= e.yaml @@ -0,0 +1,65 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/firmware/riscv,rpmi-mpxy-performance.ya= ml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: RISC-V RPMI performance service group based message proxy + +maintainers: + - Joshua Yeong + +description: | + The RISC-V Platform Management Interface (RPMI) [1] defines a modular and + extensible messaging protocol for platform management functions. The sup= ervisor + software can send and receive RPMI messages via SBI MPXY extension [2] + or via a dedicated supervisor-mode RPMI transport. + + The RPMI specification [1] defines performance service group (performance + domain) for accessing and controlling platform-managed performance-relat= ed + resources implemented by a platform microcontroller. The SBI implementat= ion + (machine mode firmware or hypervisor) can implement an SBI MPXY channel + to allow supervisor software to access the RPMI performance service grou= p. + + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + References + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + + [1] RISC-V Platform Management Interface (RPMI) v1.0 (or higher) + https://github.com/riscv-non-isa/riscv-rpmi/releases + + [2] RISC-V Supervisor Binary Interface (SBI) v3.0 (or higher) + https://github.com/riscv-non-isa/riscv-sbi-doc/releases + +properties: + compatible: + description: + Intended for use by the SBI implementation. + const: riscv,rpmi-mpxy-clock + + mboxes: + maxItems: 1 + description: + Mailbox channel of the underlying RPMI transport. + + riscv,sbi-mpxy-channel-id: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + The SBI MPXY channel id to be used for providing RPMI access to + the supervisor software. + +required: + - compatible + - mboxes + - riscv,sbi-mpxy-channel-id + +additionalProperties: false + +examples: + - | + performance { + compatible =3D "riscv,rpmi-mpxy-performance"; + mboxes =3D <&rpmi_shmem_mbox 0x0a>; + riscv,sbi-mpxy-channel-id =3D <0x1001>; + }; +... --=20 2.43.0 From nobody Sun Feb 8 04:38:31 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2102.outbound.protection.partner.outlook.cn [139.219.17.102]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C76A30C359; Tue, 6 Jan 2026 09:22:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.102 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767691346; cv=fail; b=olhdWW9tUMMXoV9sXsk1UNXmlgPoPPPvrHHsy3Ljvhmzv5Yqyni4N2RYcgAlOy/mCyrko/iGz0X5wxBHjRfOk+hhXo1jIPn1Z3MTxBlakX5TEfixDBz2pioZYLhmHF8DdpTlB1oqmc1voiunBcVAfrS34kgcz6UHv+n4OG0b1CQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767691346; c=relaxed/simple; bh=09BYvLzlTMpTyxUv76H25kfdzvoNYhr/4GiqhQooU28=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=OZpWX/uxrfk9i7SVRjvRxhHaiwvkSE3GjOnNXfGGnmgJLIMWpPuTKuZZcJUtWVgPzTbRgRgsRY9zuc23arNqaYzH9sCAsI11NsrZ9vdSrO7kB7KwcqzKocsLELDvgZyh+woRySKT5cQdFI23Anol8dI87hqWuQD4emjGSdsRJVE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.102 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QvWTcI2tskjfvt0SzI2zrzzWeIr2fIS0kPnpEVxReNRsWcow/M3V6/oRJiX5RXaB16CJ/EwTHTZMFUso9s9fQKV/KqHE5HaIvf3pyDVHTLawSCuhYx7+M5A4UeGZyvRkljvcpP0g4cOZdlXTcnIKSYx9zNGXy4tBBJ/7K7yWWKSz7hE+zgITzybX8WP5mn7ydX4oQbUe6mY9MnYNDYxvPLW94x+r5brqdVoH5ertMywO5QDRD91mX4+Z3gLHSfliJUHbIXTAXBu2OxPFHZNT8bohhzTKJPorSwEQwDSZWAKAEb4eMbUHyEBOPuWjOD4u+HDPE82muhj+PaWrUv9E8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=j4mDJNji4mtjh1Y26Jd0d8dhHU7DpWSJDldQXvL/GoA=; b=lYeTg6cgrRmEPnSouj3l4FwGBTdmqG/70NGvgFruAYuk/sa023EjYjLidKEDkFpO+Yubm/un4drNSRKKHMRGQkHXU3iKed7CHhQLEpS7eVGN76teiJvNMjUwezCgZP3nP5MxdJQhLw3f5dnL+sL1OQ+o+8u6v5kjQz9tC3SyEZBbzuTsEv0MpOhkgQ4CX+epxCwuyTV09TTL3B3W0N2Ccam0IWv8FAmgjwQx0Amr8W4WhuFEzmRFWtpF6B2OlbALNoSfGymJaaIBSO0yGj6LcNoQO89+DxCURjT+FVchLlj6qHR4pWAz0rnJLAek+4oeKFhHZXgMIacXOFU590kuWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:20::14) by SH0PR01MB0730.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:22::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.13; Tue, 6 Jan 2026 09:22:12 +0000 Received: from SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn ([fe80::81c4:2724:6a48:a18]) by SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn ([fe80::81c4:2724:6a48:a18%4]) with mapi id 15.20.9388.011; Tue, 6 Jan 2026 09:22:12 +0000 From: Joshua Yeong To: rahul@summations.net, anup@brainfault.org, joshua.yeong@starfivetech.com, leyfoon.tan@starfivetech.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr, rafael@kernel.org, viresh.kumar@linaro.org, sboyd@kernel.org, jms@oss.tenstorrent.com, darshan.prajapati@einfochips.com, charlie@rivosinc.com, dfustini@oss.tenstorrent.com, michal.simek@amd.com, cyy@cyyself.name, jassisinghbrar@gmail.com, andriy.shevchenko@linux.intel.com Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH 2/5] dt-bindings: firmware: Add RPMI performance service bindings Date: Tue, 6 Jan 2026 17:21:13 +0800 Message-ID: <20260106092117.3727152-3-joshua.yeong@starfivetech.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260106092117.3727152-1-joshua.yeong@starfivetech.com> References: <20260106092117.3727152-1-joshua.yeong@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: ZQ0PR01CA0035.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:2::21) To SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:20::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SH0PR01MB0841:EE_|SH0PR01MB0730:EE_ X-MS-Office365-Filtering-Correlation-Id: b5498138-a731-4faa-5f4e-08de4d0512a4 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|366016|52116014|41320700013|38350700014|921020; X-Microsoft-Antispam-Message-Info: 6LQ4uX0Jp9LZ6zidwUgGeZRzZXj7pD7h7kiFHNz006mhi2017rtAV2avCtXNETV5aTPKLDMwU75HkJncuZVrLskQ2UlLZ/GCg1RbHEQMFDSBzJh65x+29YYYcxrTuTvSoAlP7JNP3q8yIDpkCLk2tMzVNNik4F5xrII2rBeaYAKhtVv51rO7x5i648jWD9GEkQzm1v8yUCprKGQs82lsDWFtP7FznjSrnioce25D9q9ozo3wuLJXHhsyOdtLb41tjPf2D38oMCG7OsaNMGOsXmsEloT+LgnIyFhoVrVvyYTCL14fEFIctFUKfo9lFiDA9n67PjNtTSQ9t6Ak2DQlPj18X+FaufP6EzJB2GbKXgFoIMl6Jgr36rhG27xfZwTZ15SDyGmZZyJbMW0V/zBukQwcYkRY+691nBETE688aPr1Lwf0F1Xl6xtmvyWVICBZnNlhyWn69wx/WbiouMSmcoNBVq4sRN81q2MLydtrD3Xrt069qbR/xPWBP8m+pta1+COeiFFVTR0Vv6EE6RPMQQb5e2rQyWsyZSrUE8mZcVhAeSFTtjmJtSfik4yp/Qo/Rl0gGXJve02T/u37h/VuyB96rBIDIAhSmtNtnDchzVk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(366016)(52116014)(41320700013)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?BEltrf/PgkkoUfqQuoOaCcfar5tSMen4Xe5QYr4a6/4SfgKUwr2cIzLkwT/m?= =?us-ascii?Q?JVNDp2pElq2qGmNZkUBRef8rAOCGEQqvNT1BpM7hKGOFL8ECDZaC8DHAEzF6?= =?us-ascii?Q?TA1gC9EC2sGtNz+nc91xYQfoO9hD5grhIPIFDbETGF7g230mMrRqXAdmCMQy?= =?us-ascii?Q?5NJWGYX0Z6bvmXAADilR5Mrbo4gqpasP4dxZeFrCZfnZoMuOCRT250/nvCFM?= =?us-ascii?Q?b8GErucUuKrlPhQ1V/4Zjlo8M65yBC1hg5qY3uHCxypXmmNAlZLQfWiGTn1k?= =?us-ascii?Q?5+IBTlpI7whR7CxdLmwNKKe3fgmC60lmCGVBew7R3lyjx88H2rUEKqPWOIpQ?= =?us-ascii?Q?5U1jRCRI5VdeKDPkWMxNZtwuCoS8wVhd0t00kMRTk/9dtEtvdhYP4qoL/TPC?= =?us-ascii?Q?f7ZyQ30j272vUbyS2Dvo4Hw4lHYw4qKAr3ySZsYm7baQ84k2i4VZdtApy4Uk?= =?us-ascii?Q?VJD6IzUcYRd/JfLaDtyZUfg2kkXtrpxkiZT5kkWci5T7tMys0UW02LCxLKKV?= =?us-ascii?Q?Owl/jW9q1ruGW1/60MfdIiae6cvP+pLOey2HRrSzhisSnP3wmdbRHBtpBRnU?= =?us-ascii?Q?wAPIb+nAWR4WWTRr+rjeFogK6W+N9tzIbFy1KwO6E5DoNXx0hCCo5EPy+RyK?= =?us-ascii?Q?uHKujQGmyuubQ7IrEIPkA7FNI4QfwLL2QgNBdd2NNbITN0FN20bgKTwcMNBC?= =?us-ascii?Q?GTV5tP9+zUh6WwC+lTEt9T1nWdEqZdVuK+j+iOozkBMcsKZiGcVozK6U7dLP?= =?us-ascii?Q?VzJc+DkA596UMqSYHAMzQZxWak/pK9OBTJUNsfJDwfHwQaSSwg3nEUc0Z1dl?= =?us-ascii?Q?lqNfMhMiQgGcAXL/OjUoAFNN3vTYdYyZwoGhBaM6ZH8yJnJVc+vurhsYk132?= =?us-ascii?Q?iKemqxs5jvznlZHRu8rd0XHqBmAmuV/Kh/e4JD5wYcENpQU6yklI0hL53cff?= =?us-ascii?Q?HAi5NHLew0c+6721h1Q25TyWSzi9Z99sD1em3ZgTgxWdseNLf0EO5wl0zSgT?= =?us-ascii?Q?+Db73AyZhGxm2tFgKLzYBwYGsC7DUFCLENMjgOP61LSMPNbYeTao/UDTiTBU?= =?us-ascii?Q?glb3S1i3/QFP/+4MF0fPdUcqNKdlBKLX1lEZo8dKwi4rUNLyQOtsZ89a2ttO?= =?us-ascii?Q?PzrNY4bTd/QagoWtaT+YDt3dy+8Z36kqtWMma2GvSmTDNspBRKFrp0mCnlcG?= =?us-ascii?Q?Que2fdA2AcfcUQ6pvQLQAHtbIRY9qZX181TVdrioHP93GPC8db9pJ4czBtn2?= =?us-ascii?Q?gAv2IqL6mW8jcDoT5gUcu4CMsL3qQKF1KcJahQNJ+oFP4FyZt6KTVqN0YFiC?= =?us-ascii?Q?EYCwVazJFMCS7k0B5wseTHJu/GqgxNIZ9f6B3cXMKYBfsxfmxQj56/5uYqYk?= =?us-ascii?Q?oZvN8Rjup8YWY8LvEbUi3CMPaYab28ijLVHkfpkg6SIaRtWyzqRdBz8IvwE5?= =?us-ascii?Q?pMiDqUHiJ9KcDZ5b2HHyPaGWWxYuT2slyTN3wUjRGAANFjAfx+g12doVFExR?= =?us-ascii?Q?ds4kCZRxwnl8yP3igsGdn+SngmxaveYnGIv3Zo0RNl/VsmneRvvdCGTJ84zx?= =?us-ascii?Q?2ZDyNhYPH+r2BFMlGcOrxtipXjJa+6vQwlCB3t++cL9YHXKl1Es3ZQHl3kNe?= =?us-ascii?Q?YEsJ/0iVGpT5nrIaLpwKTIE=3D?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: b5498138-a731-4faa-5f4e-08de4d0512a4 X-MS-Exchange-CrossTenant-AuthSource: SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2026 09:22:11.9539 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Mxtt7UsB9t5/+cePVsWH+VUXUllLh2FtDznnKovHv9/2BzVicd4ea7nErs0fGoCJly3naY4n1hE7rxnLbzCgu9sZaLMiiKnwxGohLyAu9kw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SH0PR01MB0730 Content-Type: text/plain; charset="utf-8" Add device tree bindings for the RPMI performance service group based controller for the supervisor software. The RPMI performance service group is defined by the RISC-V Platform Management Interface (RPMI) specification. Signed-off-by: Joshua Yeong --- .../firmware/riscv,rpmi-performance.yaml | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Documentation/devicetree/bindings/firmware/riscv,rpmi-p= erformance.yaml diff --git a/Documentation/devicetree/bindings/firmware/riscv,rpmi-performa= nce.yaml b/Documentation/devicetree/bindings/firmware/riscv,rpmi-performanc= e.yaml new file mode 100644 index 000000000000..61adf6b1bed8 --- /dev/null +++ b/Documentation/devicetree/bindings/firmware/riscv,rpmi-performance.yaml @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/firmware/riscv,rpmi-performance.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: RISC-V RPMI performance service group based cpufreq controller + +maintainers: + - Joshua Yeong + +description: | + The RISC-V Platform Management Interface (RPMI) [1] defines a modular and + extensible messaging protocol for platform management functions. The sup= ervisor + software can send and receive RPMI messages via SBI MPXY extension [2] + or via a dedicated supervisor-mode RPMI transport. + + The RPMI specification [1] defines performance service group (performance + domain) for accessing and controlling platform-managed performance-relat= ed + resources, as implemented by a platform microcontroller. Supervisor soft= ware + can interact with the RPMI performance service group through an SBI MPXY + channel or through a dedicated supervisor-mode RPMI transport. + + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + References + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + + [1] RISC-V Platform Management Interface (RPMI) v1.0 (or higher) + https://github.com/riscv-non-isa/riscv-rpmi/releases + + [2] RISC-V Supervisor Binary Interface (SBI) v3.0 (or higher) + https://github.com/riscv-non-isa/riscv-sbi-doc/releases + +properties: + compatible: + description: + Intended for use by the supervisor software. + const: riscv,rpmi-performance + + mboxes: + maxItems: 1 + description: + Mailbox channel of the underlying RPMI transport or SBI message prox= y channel. + + "#performance-domain-cells": + const: 1 + +required: + - compatible + - mboxes + - "#performance-domain-cells" + +additionalProperties: false + +examples: + - | + performance: rpmi-performance { + compatible =3D "riscv,rpmi-performance"; + mboxes =3D <&mpxy_mbox 0x1001 0x0>; + #performance-domain-cells =3D <0x01>; + }; +... --=20 2.43.0 From nobody Sun Feb 8 04:38:31 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2102.outbound.protection.partner.outlook.cn [139.219.17.102]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 683FF3128D9; Tue, 6 Jan 2026 09:22:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.102 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767691348; cv=fail; b=clYhVjD1u0hcly5EF0MfNfJ1H9WAVDTJWygweN75uiwJMS0+h4/vLItbP/VJ8wELbXX7FHCy8JNRTna44QqQk7gQsyBgpDilZW/3laQXH3u9qDYab0du5f/9PSG3Vc3d1Eg0lZRMnRac/KdSCe3L7kUI2t6N7P2dok7Oi2hb7OM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767691348; c=relaxed/simple; bh=0h4soRKEQwI7C5NAEQcAcXNvvUY81X70JbIrBc1qmIs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=hgL5BiPZAcufRMgrmqUIvgxplJ+HjpYlJcSLPYpuTW1Q8IMZRaLFDWJ5AYjAAYGc1NRsjT+9zGm+8R74aqZWBoKCdUkgotbCnBUgSsPSx/0peHrr3pLEswwmJhnT4NvDr/7bamfIEcP+buvp3QLaJ6tbcAso0hZBG6+zyDsERtw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.102 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VrbkDXaLXRkIPLkAQwudABPhfRUnQfy9GgVxqNedJ0kwCq5fNFKmhUtZmtqijv37rxaGT7UQJLxkP8xBIzQOK2QRV7DiJKVfbf9VKmktmkBLsmzlZ09oZRdfv8xJfYfNA+YpMqFY3TJwx0ZcWis95FaEYlqWCPx+k8pJs2MlHzCamJit8Ws07b6uzlD3NsjJfxJ9IpnT23OVVLJih/on0IPm42gbM+DsiPVHkAqexn9ZPQaLFM1uORIVmkJksQJgRx+G+k+Li+lB7dGqn5SP4tjs+N9/TYoTkr1L9ATAGmE5sFP7Fa6EMboG6yIBE8S5Q4WX8AwZzA7YAtvtSej25A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=N0opdMDfUs59Uk9CqjaxK57v7wc/9d//PB/5YEZ2jnE=; b=fi2jBFvmG1Arism7Si8t4IIEYNjjVvCN5ic+akUkiBp6KA4HzKz67RTp1rYOZwkrYb1zhx77jUFi85FnlSMiV9bLtVWpluw96xJMwuwQxI/zZDWVq9YTyAKpRX16R3F6V36ZZ8PXYJO5BtmZMZOVYVyYEye0LhLz91or/ZshMyli7ml1jy6xO02iwv9mLnIN/UruJxWoD45yAgigOHV0WSo2Fp0O2844hStjEbsokoRZ+BGUAK2reDoTyGdtF75Bal2i8K6UNq3BtG8AA7HPA2AYM4wx57B8Yjvm1HNrlck2uy1l68OuyK//2ETu7BYY8h6SYhZVA9EmBQi6mdkSeA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:20::14) by SH0PR01MB0730.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:22::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.13; Tue, 6 Jan 2026 09:22:19 +0000 Received: from SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn ([fe80::81c4:2724:6a48:a18]) by SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn ([fe80::81c4:2724:6a48:a18%4]) with mapi id 15.20.9388.011; Tue, 6 Jan 2026 09:22:19 +0000 From: Joshua Yeong To: rahul@summations.net, anup@brainfault.org, joshua.yeong@starfivetech.com, leyfoon.tan@starfivetech.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr, rafael@kernel.org, viresh.kumar@linaro.org, sboyd@kernel.org, jms@oss.tenstorrent.com, darshan.prajapati@einfochips.com, charlie@rivosinc.com, dfustini@oss.tenstorrent.com, michal.simek@amd.com, cyy@cyyself.name, jassisinghbrar@gmail.com, andriy.shevchenko@linux.intel.com Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH 3/5] dt-bindings: riscv: cpus: document performance-domains property Date: Tue, 6 Jan 2026 17:21:14 +0800 Message-ID: <20260106092117.3727152-4-joshua.yeong@starfivetech.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260106092117.3727152-1-joshua.yeong@starfivetech.com> References: <20260106092117.3727152-1-joshua.yeong@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: ZQ0PR01CA0035.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:2::21) To SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:20::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SH0PR01MB0841:EE_|SH0PR01MB0730:EE_ X-MS-Office365-Filtering-Correlation-Id: f9f0ee9d-665e-49fb-564d-08de4d0516e0 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|366016|52116014|41320700013|38350700014|921020; X-Microsoft-Antispam-Message-Info: Y/IpyhEH4VAm/0K0o/BFVCwm64QPhkO7IfAbrl/REGlK5efQVc3l4anqUvuVYJzmIXlhKSl7JqG/u/4NXpRErsFeisNeuuHCN6UF4EyJzYEEvZyGg0zlLrtv0DQho1vyk4eO5Wafongk1B/T8AbprIiVHhE74mGA8K2Sqov2UC211N/2FbFZynxtoDUlb/8l+DBiSthL8dRrptS8JwyM+i9A5su802/Qw4W2/W2pmxJt4Jfs3RxFUQZZJsV9zG8Hu4rUAIox74f5+LOPLHTtuE6awVOc4B4OR5jiFd8szhBXPWRiMxMlQq3O5Txa0Pz8akPX0eJT4I2FwQ+NBrb1eO8QJzi5hG5rsP6/LCY/+ktOcT/VZp8sTelJAtrjir2neDYI8YZDmJ/SfqFrCLPfmVHtzuPGpAHjPhVtkwTWgOL+hp9J4Gg3xVkA42s54alOVOg2ChlrKMcEMOrp3Q4FgqL6cwkpwLQ+C3WqsahLSJmr/WZs5YesvnBFe3ANEQEDueD+plRA+idwWut44+V0dRXjYkH1skqdqEwt0JdBDFKywparjiGaa7vLOmWrjS8N6OsAl9W/NodzUAHhKYp7vXIKYXq4HkmrubE3zQJq0R8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(366016)(52116014)(41320700013)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?hOZbyLaNqxAhMcoksSfS/XZL5DEB1P0sxAgMATkncmu14BoLJZHYzJXG9YZJ?= =?us-ascii?Q?I5cRhGA/xlP4oeIhG/WZuBzXtZPTC3qMOMpBVUyk1+gvdrTi2ZHTyrmk5RBV?= =?us-ascii?Q?BKNh9BkU6QMVbpQXDy4MPobs2P09earrOovZ+Hz88uNTOUWyLiHNouvzGh7j?= =?us-ascii?Q?AkT+aZ7hLICaf7l4DlT6OWabLxWwQJTpxJG/49Uws0mNbo1CSygmqwPtNe/6?= =?us-ascii?Q?NJMWI2oJVWYqDy6ydt0ihlFbvjKzFsgrVAmlxa6h+nyJq3wbMZPw88eCF2oX?= =?us-ascii?Q?1Otf6F7FA2WyZvvvx+/j5ITjDjQFpwzHwoqL4dYrs731yev98ZpQ2Ll8E8Yd?= =?us-ascii?Q?hlHyQhvcwltLYmgRtp75JMkxajP8z12ebrKQiczrQ3Hvs3RAG3hPp/+oCb0i?= =?us-ascii?Q?iOHAVkcvC4CqZH4+9fIZHgQhgOGtMMKy1tPrW+wxiROntyQLgzHtqI2/cVR5?= =?us-ascii?Q?zuvVcvyLnki5xSEOq2zwKgXpQvgEJf2lNKXYtBLtUrMsmaOV8Wi+vQCHgsg+?= =?us-ascii?Q?4EeSUYu/mQVvJyhSjUZFn11jQFwOVwSFegv4v2ZVNsd8lf2UThMwvI1koRrT?= =?us-ascii?Q?+RJaCrF9pYeM5Y4vs6nZvEZGk9NWG3vrRoa/5Qzn5VwHsKs7eX8wOWefaMia?= =?us-ascii?Q?XKiYpIaxrflMLQ+NulJYpV6pHytKsvRSXV6GpVvPYQ0GAjc6+oL4ULwNhGbX?= =?us-ascii?Q?7DQQ+LC2KUcFWNvwDw0fuJeOMDgVafJ0sP/TRg6hmMH4HgEJ5GBy++0XbYyC?= =?us-ascii?Q?GxoCKWuYHYgoftHk1TqCxC6ElWAvDhgUkQAeI0He0y0sSdsC1TNlw/ygwALC?= =?us-ascii?Q?PQqPjJx+oSweTpK1sp2gEeeJgJqTu/eV3y568f3IyMzeL5Ywr1whOPmKKgQi?= =?us-ascii?Q?eobeAc2+rDrYmtp1yZTNWE5WFeyX+R8K0toNeSGvwmhmeY+7/9YgWOYY8XkK?= =?us-ascii?Q?wKPtwSag1mN+TsL8HE2DOpSLHQOBzDN4igfMjfUyyHRHwrLODxZB7YHt9kW0?= =?us-ascii?Q?Pd36TS7rHCcaRWb+pPwQZ/06TMlkcoaZW58ETbRNyBqT4Hn/lBnZjljVmWpP?= =?us-ascii?Q?vuWWsmwnodzU00GOA2vm7sCKpcqdq/vx521ATrRGEZaepbTu8qDM0bEr85P1?= =?us-ascii?Q?jYeQrI4Zx56d+WroMPdmjS32ABdKX9gKJghqy6qETbWRKAZSh12+QLpd9q7t?= =?us-ascii?Q?allm2brj9xCmQVEe1MHqOO76psFPD+u10Q76UPuReh39JWg8IX8f6G209MUt?= =?us-ascii?Q?Skq84V4cEYTvW2NLehcXs4WUiMxdP6kQ/ulqHMEE/oVaGy85GTuHGBZbXo1U?= =?us-ascii?Q?8sCCl2nin7aI4DjYy0XdPA6TCPvHqQqazCta3PIW4sxT7/BltEFc+u8gb3FQ?= =?us-ascii?Q?gnQ39bl/x3pvDWT40qzYO8T6Q1T5VAyGlm114vHOzzLxf/ekHDdAoekUW3My?= =?us-ascii?Q?h+CjEarE59mPXNUdiw08b1QdWsVvARqpnp+9l0ryjL1I0EST00xIE2Z6MtK6?= =?us-ascii?Q?ZhZAAPFvtGXGag7qv0iy5LL/1TNmyNkGd3f3dNe7akR5+hQGLWmGwqaMa1SE?= =?us-ascii?Q?Nw8PTPYFzi+pZXKiFew+agx/aJbXOQbvAKqDI9H7FS8dWZF2aXsacSEvEp1c?= =?us-ascii?Q?Q5azm3svh2t2MFXNG3RBarw=3D?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: f9f0ee9d-665e-49fb-564d-08de4d0516e0 X-MS-Exchange-CrossTenant-AuthSource: SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2026 09:22:19.0424 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XZQoJDWee//0+WqFghoWV4ejzPCo59xOx8SZBE7NqGGbT+fl1DQIIfdMi9yWEaPeb/+feimC0098rHU9rTOogj/L9nCPx4lBWnUja4kAcHg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SH0PR01MB0730 Content-Type: text/plain; charset="utf-8" The property is defined as a phandle array referencing an RPMI performance domain provider, with the domain specifier interpreted according to the bindings of the referenced RPMI performance controller. Signed-off-by: Joshua Yeong --- Documentation/devicetree/bindings/riscv/cpus.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/riscv/cpus.yaml b/Documentat= ion/devicetree/bindings/riscv/cpus.yaml index d733c0bd534f..a7c38d078981 100644 --- a/Documentation/devicetree/bindings/riscv/cpus.yaml +++ b/Documentation/devicetree/bindings/riscv/cpus.yaml @@ -143,6 +143,13 @@ properties: DMIPS/MHz, relative to highest capacity-dmips-mhz in the system. =20 + performance-domains: + $ref: /schemas/types.yaml#/definitions/phandle-array + description: + A phandle and RPMI performance domain specifier, as defined by the + bindings of the referenced RPMI performance controller or provider. + (see riscv,rpmi-performance.yaml / riscv,rpmi-mpxy-performance.yaml) + anyOf: - required: - riscv,isa --=20 2.43.0 From nobody Sun Feb 8 04:38:31 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2102.outbound.protection.partner.outlook.cn [139.219.17.102]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15ABF314B9A; Tue, 6 Jan 2026 09:22:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.102 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767691351; cv=fail; b=TAN/NfrQscxOEECTA2MqQFl/Yzs+XrgnOjglYCAMeo2fCNyV0MnhA6zLTWAuofrJMc+bli5/BAcoOz/iOeXNt5TDw8ok4mULrX9WltnaXRGWUuhG9QSYDdx4jrfuktzwQU9/FXUzv0IUd4/LaEUrIKqkOcci+iAw6nVbpyzXi+Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767691351; c=relaxed/simple; bh=J7Ovp3UBPOqu51A4DzLnZdX0QqNu3JgSq3kWnrh5HLU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=PtsMfREesS3hJ7TPcUJEjYrof9ZexGPAzdR0mWuqvJq8f/QDOZgiOULaZE79b4TQ9YD7uak6oSjmz3sOz7jwPf02CV+qX+of7goPte4N+t4dDKIxcWxgDG5BOXw+ZMwD4YwmMQB+2Pa73vIpIjISUCWZWuetZFMG5XNun5QYvk0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.102 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FGcHljYkmCG2S0ClvY8AN+3lvvhWo3QO+j02GEs3B6eEoSobe2T586E3t5PvR1eKy8XObU1ErtZOUFB+dngqrrHXmG9+bnO+ls0889vdIhS1Y4DTZ5flCj37WysUTndTTRdXm+oYSq5Yc6N5GLbSJg2fuNUxNjyyQ7xj4G6yIJ1LcKLjzVtNwobY63Hcpyok1dfBlWK41G9izDMhPBuxfRRxBdKO7vZLraDKlX2fYvSbfiTJ+dMfmouxgWmAQoj3wHpswL5B5AGGFcHJnGwnZCmJ1DsZCq1FK7qJF9xM+QII/F7YrZTAfvaLGj+NOBJUZG95sEtuQ27dhkZCO2W8LQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=iZBFSosnb1fR14zHiC9lQgDymZ0LkoggJk3jqdeF+lI=; b=mTyJ9N0yJJ9uZADl1Z7gnKXwwKr/f0GR6WlFdp12JPoRK3PAcCammRs8P/x2w5jceoDXuWLQ7xEDjyNwaDKConUDRHemJJpzQZ1wZXbKeAwfFQla/rCVa8pdMBjVV63+6dpEwsWe25qzXDSRl2Vpuj0YyFMVPszkcRim2OXvmO2cgF5bKhoTmKMsEquDHQ1CVwaaEU0BgfqWUWZMh49D2hOsjJMiRhYy3m0tjbGqpPWoZ2tJBBE/wLFAQyPdmum2LXE8kjDDTLAouFi+fD7JMr74qmMvKWlzfX1VnBBjQDj2S4jHqjPMbAW1swu8HkLeJyMtMAH8FhlzJDqYCER0ow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:20::14) by SH0PR01MB0730.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:22::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.13; Tue, 6 Jan 2026 09:22:27 +0000 Received: from SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn ([fe80::81c4:2724:6a48:a18]) by SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn ([fe80::81c4:2724:6a48:a18%4]) with mapi id 15.20.9388.011; Tue, 6 Jan 2026 09:22:27 +0000 From: Joshua Yeong To: rahul@summations.net, anup@brainfault.org, joshua.yeong@starfivetech.com, leyfoon.tan@starfivetech.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr, rafael@kernel.org, viresh.kumar@linaro.org, sboyd@kernel.org, jms@oss.tenstorrent.com, darshan.prajapati@einfochips.com, charlie@rivosinc.com, dfustini@oss.tenstorrent.com, michal.simek@amd.com, cyy@cyyself.name, jassisinghbrar@gmail.com, andriy.shevchenko@linux.intel.com Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH 4/5] cpufreq: Add cpufreq driver for the RISC-V RPMI performance service group Date: Tue, 6 Jan 2026 17:21:15 +0800 Message-ID: <20260106092117.3727152-5-joshua.yeong@starfivetech.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260106092117.3727152-1-joshua.yeong@starfivetech.com> References: <20260106092117.3727152-1-joshua.yeong@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: ZQ0PR01CA0035.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:2::21) To SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:20::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SH0PR01MB0841:EE_|SH0PR01MB0730:EE_ X-MS-Office365-Filtering-Correlation-Id: 883800c8-2831-4cca-31f1-08de4d051bee X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|366016|52116014|41320700013|38350700014|921020; X-Microsoft-Antispam-Message-Info: tZ5kZS3TQz72P9HJwMMoXoJQBRWCxev1RrIfOE6L3Ja5qAfzZI7caVORmga/ElAlIyQf9Mcyea8UOqWf0aVzzOstio5iiDcT+VHgS9u8flz5lz8gZrsriem5Nit0NUDOq0oiaPF2FwdZevDM3vi9uwDel06PtGRLR9Jj83PLepPcLGc6XV+7BJkZRyL8/cjr66BKxDDt25VW2O6Mg9oKe3UlLq7gT3MDXSxG6gX0O8HnM7DJGchJPNFs7WHzT9NgE7SI6T6zL5GTkQn3zckqCLJZInoLhfIcvHsXG1G7/07eJy399GnnXLHDNHN+l6p12IYsz2VLwdgqU/Y2UX0mtV5J5hZoFgys2Vsq0mM4pbSDzC1fDT5bz5BVlZT3mGlU4n0Lgz6ETJitFOK6Z2ZrTTXkFd8WW/eVMREBowyEXI8l2LqASw8m65AJjxLJoZCcQmZpSYOEtypLZRl5msYRCTXVcsvdYGEg5jfHhFRyrF6y2+4g3+WVGBWH7fevK8ifdBBaLHKLm9fnjVeq+YdqMzEkOnK28m9/hnTP/2Vxsromjxv8bxdGlVE8JaLOwinjvs7ZuOJZugIU92Celt+KTGzrc9vshBnuTsyV7nmeLoY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(366016)(52116014)(41320700013)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?KU6rcwORFf5mWETFijbCq3FIP2onwtXA6EOAnaPeBbgEhAibYeNzZEUBeFwd?= =?us-ascii?Q?xDmPT0DBIYBHHBbq0hRtHdT+IsfztptpOSbqPZHOz6ZT4GlYb2pFw3MKgPU0?= =?us-ascii?Q?yxJzgFJ/nifBnYKCM8nImVJpXBphlXvdVi3q/yYc94ge+GMthVLuBOfgKVx/?= =?us-ascii?Q?D6LJ8VbgPeNEP+cd+cWedU1UU80Gpr6JcSQL8BTkF4bxL4Jq0RLHkFlKlbQs?= =?us-ascii?Q?jvJ7Poq1BvrGxGhAVbUy1z8O+7TcVqChTleYr/2faPfiypVWTXlaw10F7/G7?= =?us-ascii?Q?U+Ig53mG9+ubFeQ/EP7CZplQqu5EjAA+TDFRnLryKbCWS/RcVE3ds3Mm5/J0?= =?us-ascii?Q?6PBAPerBtlDkxpK+x2J6gcRblDh7Z4ThegsuL9Dy1nALZd7sBO91nrmEqozb?= =?us-ascii?Q?OBAl5rNRTp3iolYI3AONpvPjhSc5r1QaYIrWiIcMXIXCxHPX0weMh6CqyCHE?= =?us-ascii?Q?GJjib1qL4JpdqAQNXU80NKx0bKEl3TFAUtctgvUY+1vyNr1wxyLWlJDVqImJ?= =?us-ascii?Q?xqhNMhzFma8vxLdXLQmerafoDAAh7iDkNnHZzmg15UUa9DIxYEeaOjnEB3sI?= =?us-ascii?Q?/NknIBCMz8h98fJkLny6ijl4LCD0OXXsaU4tdcsc7DHHn6yCT7PZSc4JJLcc?= =?us-ascii?Q?qNgli8QTKfm6UJB8YLizIXRWVzrBsGUQ3iT0km6TD3t3ksNFNXW13lmSaZkF?= =?us-ascii?Q?KIQmHwBKdmUd9bTG8NxK4YAXu2apaFZYzd7XqPpVIklCZAvpviQWZV6Yx/RP?= =?us-ascii?Q?adrjjLLqbDQqH08tqQ3X+x9PPEVx4L8BMGKhAZz2KXHXk4wn01pGZ0hxMXvj?= =?us-ascii?Q?K2B5fPJTDBHb8a6RZGKK64caj9G1pdHRNE6Trguo+rEGtEmk0511yESeOHnI?= =?us-ascii?Q?/8cOrRiLlGeOm6cPCvAA4rNJyRq3ndd7ZokJwjm4cMj/wTLijt3f6Ilf8wg8?= =?us-ascii?Q?F8FFu6e+giXYP4q9XVqsgPDl4tHJsvKnZaJYQxI/vwMg+LDPRpWxd9GE03rw?= =?us-ascii?Q?z6gaxlPUzK6nc3M0fFAdflhPnscM2fiQ4y3jaqVmrZ9VKfnRnkgsOdFYSIGj?= =?us-ascii?Q?LmLvEWo+86hKhKJLYYWU3Ulov7FUldvbtO1xtZzn0hCm65Tsss2THIBggqX3?= =?us-ascii?Q?FBGhOQqESKMS/Zn1pyHAj/2nyccTuIAGf2qypWvs6cAq/DccoIkZl3fRdunb?= =?us-ascii?Q?6F1FtLtT8CzRy1+RubqTFj5rUWiPMKKA4D8QalfPyQLBBpbKUnUCBMeczbga?= =?us-ascii?Q?p2QX4thZeFfZmW9pTuPfuyhoHomVSlRmerT8wiHU+QRSBjgebXT/ZdzW1Kgt?= =?us-ascii?Q?rGsatWVAFQ2DNMwx30AbS7ULk57+zzxTWaulepKtzuADpGB5m5ORcH1RIQyp?= =?us-ascii?Q?JvbbEJmWj8R5bnifmBzlM6BLQs2imLezNlmK5JZIM9Zt053eX5opn1vQ10lO?= =?us-ascii?Q?nfV5iOEdE6euBv2W0kkCgm0/rrOhdSGbdbSGQK/xSeCFS+POm6u2ZPV4r1AR?= =?us-ascii?Q?zTkLqr66VgEqEiwWmi/N5m2t5WqCvFehyCvfuB1jzn2pxm183z+ZpMNQD66Y?= =?us-ascii?Q?gWwuqmBnQUCEcW9RPFOWOaipyba7vzGXp3ONDRoN5mGf/htcNaoTIIpfekoO?= =?us-ascii?Q?WliOWDxCay14sUvlhFuPJ1s=3D?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 883800c8-2831-4cca-31f1-08de4d051bee X-MS-Exchange-CrossTenant-AuthSource: SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2026 09:22:27.5909 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: i9RxWtFw4vDjwYDxv6sGo8Z0enI1a8XsDMw0/bQnYlrPblDk9ZHU0zJ0kBN7JfuJ7j2Ccw6yn3cEA4hzczAgnJTJDMy/ku11MB67dhDXIxQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SH0PR01MB0730 Content-Type: text/plain; charset="utf-8" The RPMI specification defines a performance service group which can be accessed via SBI MPXY extension or dedicated S-mode RPMI transport. Add mailbox client based cpufreq driver for the RISC-V RPMI performance service group. Signed-off-by: Joshua Yeong --- drivers/cpufreq/Kconfig | 26 +- drivers/cpufreq/Makefile | 6 +- drivers/cpufreq/riscv-rpmi-cpufreq.c | 976 +++++++++++++++++++++ include/linux/mailbox/riscv-rpmi-message.h | 16 + 4 files changed, 1017 insertions(+), 7 deletions(-) create mode 100644 drivers/cpufreq/riscv-rpmi-cpufreq.c diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig index 78702a08364f..9aaa1f71000e 100644 --- a/drivers/cpufreq/Kconfig +++ b/drivers/cpufreq/Kconfig @@ -4,8 +4,8 @@ menu "CPU Frequency scaling" config CPU_FREQ bool "CPU Frequency scaling" help - CPU Frequency scaling allows you to change the clock speed of=20 - CPUs on the fly. This is a nice method to save power, because=20 + CPU Frequency scaling allows you to change the clock speed of + CPUs on the fly. This is a nice method to save power, because the lower the CPU clock speed, the less power the CPU consumes. =20 Note that this driver doesn't automatically change the CPU @@ -65,7 +65,7 @@ config CPU_FREQ_DEFAULT_GOV_USERSPACE select CPU_FREQ_GOV_USERSPACE help Use the CPUFreq governor 'userspace' as default. This allows - you to set the CPU frequency manually or when a userspace=20 + you to set the CPU frequency manually or when a userspace program shall be able to set the CPU dynamically without having to enable the userspace governor manually. =20 @@ -134,7 +134,7 @@ config CPU_FREQ_GOV_USERSPACE help Enable this cpufreq governor when you either want to set the CPU frequency manually or when a userspace program shall - be able to set the CPU dynamically, like on LART=20 + be able to set the CPU dynamically, like on LART . =20 To compile this driver as a module, choose M here: the @@ -147,11 +147,11 @@ config CPU_FREQ_GOV_ONDEMAND select CPU_FREQ_GOV_COMMON help 'ondemand' - This driver adds a dynamic cpufreq policy governor. - The governor does a periodic polling and=20 + The governor does a periodic polling and changes frequency based on the CPU utilization. The support for this governor depends on CPU capability to do fast frequency switching (i.e, very low latency frequency - transitions).=20 + transitions). =20 To compile this driver as a module, choose M here: the module will be called cpufreq_ondemand. @@ -367,4 +367,18 @@ config ACPI_CPPC_CPUFREQ_FIE =20 endif =20 +if RISCV +config RISCV_RPMI_CPUFREQ + tristate "RISC-V RPMI Based CPUFreq driver" + depends on RISCV_SBI || COMPILE_TEST + default RISCV + select PM_OPP + help + This adds the CPUfreq driver support for RISC-V platform using SBI + RPMI protocol for CPU power management. + + To compile this driver as a module, choose M here: the + module will be called riscv-rpmi-cpufreq. +endif + endmenu diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile index 681d687b5a18..9c6304d445b4 100644 --- a/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile @@ -5,7 +5,7 @@ obj-$(CONFIG_CPU_FREQ) +=3D cpufreq.o freq_table.o # CPUfreq stats obj-$(CONFIG_CPU_FREQ_STAT) +=3D cpufreq_stats.o =20 -# CPUfreq governors=20 +# CPUfreq governors obj-$(CONFIG_CPU_FREQ_GOV_PERFORMANCE) +=3D cpufreq_performance.o obj-$(CONFIG_CPU_FREQ_GOV_POWERSAVE) +=3D cpufreq_powersave.o obj-$(CONFIG_CPU_FREQ_GOV_USERSPACE) +=3D cpufreq_userspace.o @@ -99,6 +99,10 @@ obj-$(CONFIG_CPU_FREQ_PMAC64) +=3D pmac64-cpufreq.o obj-$(CONFIG_PPC_PASEMI_CPUFREQ) +=3D pasemi-cpufreq.o obj-$(CONFIG_POWERNV_CPUFREQ) +=3D powernv-cpufreq.o =20 +##########################################################################= ######## +# RISC-V platform drivers +obj-$(CONFIG_RISCV_RPMI_CPUFREQ) +=3D riscv-rpmi-cpufreq.o + ##########################################################################= ######## # Other platform drivers obj-$(CONFIG_BMIPS_CPUFREQ) +=3D bmips-cpufreq.o diff --git a/drivers/cpufreq/riscv-rpmi-cpufreq.c b/drivers/cpufreq/riscv-r= pmi-cpufreq.c new file mode 100644 index 000000000000..4ef7d76b6b08 --- /dev/null +++ b/drivers/cpufreq/riscv-rpmi-cpufreq.c @@ -0,0 +1,976 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * RISC-V MPXY Based CPUFreq Driver + * + * Copyright (C) 2026 Shanghai StarFive Technology Co., Ltd. + */ + +#define pr_fmt(fmt) "riscv-rpmi-performance: " fmt + +#include +#include +#include +#include +#include +#include + +#define RPMI_PERF_DOMAIN_NAME_LEN 16 + +struct rpmi_perf_opp { + u32 index; + u32 clock_freq; + u32 power_cost; + u32 trans_latency_us; +}; + +struct rpmi_fc_db_info { + int width; + u64 set; + void __iomem *addr; +}; + +struct rpmi_fc_info { + void __iomem *set_addr; + void __iomem *get_addr; + struct rpmi_fc_db_info *set_db; +}; + +struct rpmi_ctx { + struct mbox_chan *chan; + struct mbox_client client; + u32 max_msg_size; +}; + +struct rpmi_fast_channel { + u64 addr; + u64 size; +}; + +struct rpmi_perf_domain { + u32 id; + bool set_limit; + bool set_level; + bool has_fastchannels; + u32 opp_count; + u32 rate_limit_us; + char name[RPMI_PERF_DOMAIN_NAME_LEN]; + struct rpmi_perf_opp *opp; + struct rpmi_fc_info *fc_info; + struct rpmi_ctx *mpxy_ctx; + struct device *dev; + struct rpmi_perf *perf; +}; + +struct rpmi_perf { + u32 num_domains; + struct rpmi_fast_channel fast_channel; + struct device *dev; + struct rpmi_perf_domain *domain; +}; + +struct rpmi_perf_cpufreq_data { + int cpufreq_domain_id; + int nr_opp; + struct device *cpu_dev; + struct rpmi_perf *mpxy_perf; +}; + +enum { + RPMI_PERF_FC_LEVEL, + RPMI_PERF_FC_LIMIT, + RPMI_PERF_FC_MAX, +}; + +/* Service: ENABLE_NOTIFICATION */ +struct rpmi_perf_enable_notification_tx { + u32 event_id; +}; + +struct rpmi_perf_enable_notification_rx { + s32 status; +}; + +/* Service: GET_NUM_DOMAINS */ +struct rpmi_perf_get_num_domain_rx { + s32 status; + u32 num_domains; +}; + +/* Service: GET_ATTRS */ +struct rpmi_perf_get_attrs_tx { + u32 domain_id; +}; + +struct rpmi_perf_get_attrs_rx { + s32 status; + u32 flags; +#define PERF_LIMIT_SETTING(f) (FIELD_GET(BIT(2), (f))) +#define PERF_LEVEL_SETTING(f) (FIELD_GET(BIT(1), (f))) +#define FAST_CHANNEL_SUPPORT(f) (FIELD_GET(BIT(0), (f))) + u32 num_levels; + u32 trans_latency_us; + char name[RPMI_PERF_DOMAIN_NAME_LEN]; +}; + +/* Service: GET_SUPPORTED_LEVELS */ +struct rpmi_perf_get_supported_level_tx { + u32 domain_id; + u32 level_index; +}; + +struct rpmi_perf_get_supported_level_rx { + s32 status; + u32 flags; + u32 remaining; + u32 returned; + struct rpmi_perf_opp opp[]; +}; + +/* Service: GET_LEVELS */ +struct rpmi_perf_get_level_tx { + u32 domain_id; +}; + +struct rpmi_perf_get_level_rx { + s32 status; + u32 level_index; +}; + +/* Service: SET_LEVELS */ +struct rpmi_perf_set_level_tx { + u32 domain_id; + u32 level_index; +}; + +struct rpmi_perf_set_level_rx { + s32 status; +}; + +/* Service: GET_FAST_CHANNEL_REGION */ +struct rpmi_perf_get_fast_channel_region_rx { + s32 status; + u32 addr_low; + u32 addr_high; + u32 size_low; + u32 size_high; +}; + +/* Service: GET_FAST_CHANNEL_ATTRIBUTES */ +struct rpmi_perf_get_fast_channel_attributes_tx { + u32 domain_id; + u32 service_id; +}; + +struct rpmi_perf_get_fast_channel_attributes_rx { + s32 status; + u32 flags; +#define DOORBELL_REG_WIDTH(f) (FIELD_GET(GENMASK(2, 1), (f))) +#define SUPPORTS_DOORBELL(f) (FIELD_GET(BIT(0), (f))) + u32 offset_low; + u32 offset_high; + u32 size; + u32 db_addr_low; + u32 db_addr_high; + u32 db_id; +}; + +static void rpmi_perf_fastchannel_db_ring(struct rpmi_fc_db_info *db) +{ + if (!db || !db->addr) + return; + + switch (db->width) { + case 8: + iowrite8((u8)db->set, db->addr); + break; + case 16: + iowrite16((u16)db->set, db->addr); + break; + case 32: + iowrite32((u32)db->set, db->addr); + break; + } +} + +static int rpmi_perf_get_num_domains(struct rpmi_ctx *mpxy_ctx, u32 *domai= n) +{ + struct rpmi_perf_get_num_domain_rx rx; + struct rpmi_mbox_message msg; + int ret; + + rpmi_mbox_init_send_with_response(&msg, RPMI_PERF_SRV_GET_NUM_DOMAINS, + NULL, 0, &rx, sizeof(rx)); + ret =3D rpmi_mbox_send_message(mpxy_ctx->chan, &msg); + if (ret) + return ret; + + if (rx.status) + return rpmi_to_linux_error(rx.status); + + *domain =3D rx.num_domains; + + return 0; +} + +static int rpmi_perf_get_attrs(struct rpmi_perf *mpxy_perf, struct rpmi_pe= rf_domain *perf_domain) +{ + struct rpmi_perf_get_attrs_tx tx; + struct rpmi_perf_get_attrs_rx rx; + struct rpmi_mbox_message msg; + int ret; + + tx.domain_id =3D perf_domain->id; + + rpmi_mbox_init_send_with_response(&msg, RPMI_PERF_SRV_GET_ATTRIBUTES, + &tx, sizeof(tx), &rx, sizeof(rx)); + ret =3D rpmi_mbox_send_message(perf_domain->mpxy_ctx->chan, &msg); + if (ret) + return ret; + + if (rx.status) + return rpmi_to_linux_error(rx.status); + + perf_domain->set_limit =3D PERF_LIMIT_SETTING(rx.flags); + perf_domain->set_level =3D PERF_LEVEL_SETTING(rx.flags); + perf_domain->has_fastchannels =3D mpxy_perf->fast_channel.size && + (perf_domain->set_limit || perf_domain->set_level) ? + FAST_CHANNEL_SUPPORT(rx.flags) : false; + perf_domain->opp_count =3D rx.num_levels; + perf_domain->rate_limit_us =3D rx.trans_latency_us; + strscpy(perf_domain->name, rx.name, RPMI_PERF_DOMAIN_NAME_LEN); + + if (!perf_domain->opp_count) + return -EINVAL; + + perf_domain->opp =3D devm_kcalloc(mpxy_perf->dev, perf_domain->opp_count, + sizeof(struct rpmi_perf_opp), GFP_KERNEL); + if (!perf_domain->opp) + return -ENOMEM; + + return 0; +} + +static int rpmi_perf_get_supported_levels(struct rpmi_perf_domain *perf_do= main) +{ + struct rpmi_perf_get_supported_level_tx tx; + struct rpmi_perf_get_supported_level_rx *rx; + struct rpmi_mbox_message msg; + struct rpmi_perf_opp *opp; + u32 index =3D 0; + int ret =3D 0; + + rx =3D devm_kcalloc(perf_domain->dev, perf_domain->mpxy_ctx->max_msg_size, + sizeof(u32), GFP_KERNEL); + if (!rx) + return -ENOMEM; + + do { + tx.domain_id =3D perf_domain->id; + tx.level_index =3D index; + + rpmi_mbox_init_send_with_response(&msg, RPMI_PERF_SRV_GET_SUPPORTED_LEVE= LS, + &tx, sizeof(tx), rx, + perf_domain->mpxy_ctx->max_msg_size); + ret =3D rpmi_mbox_send_message(perf_domain->mpxy_ctx->chan, &msg); + if (ret) + goto exit; + + if (rx->status) { + ret =3D rpmi_to_linux_error(rx->status); + goto exit; + } + + if ((index + rx->returned + rx->remaining) !=3D perf_domain->opp_count) { + ret =3D -EINVAL; + goto exit; + } + + for (int i =3D 0; i < rx->returned; i++) { + opp =3D &perf_domain->opp[index + i]; + opp->index =3D rx->opp[i].index; + opp->clock_freq =3D rx->opp[i].clock_freq; + opp->power_cost =3D rx->opp[i].power_cost; + opp->trans_latency_us =3D rx->opp[i].trans_latency_us; + } + + index +=3D rx->returned; + + } while (rx->remaining); + +exit: + devm_kfree(perf_domain->dev, rx); + + return ret; +} + +static int rpmi_perf_get_levels(struct rpmi_perf_domain *perf_domain, u32 = *level_index) +{ + struct rpmi_perf_get_level_tx tx; + struct rpmi_perf_get_level_rx rx; + struct rpmi_mbox_message msg; + int ret =3D 0; + + tx.domain_id =3D perf_domain->id; + + rpmi_mbox_init_send_with_response(&msg, RPMI_PERF_SRV_GET_LEVEL, + &tx, sizeof(tx), &rx, sizeof(rx)); + ret =3D rpmi_mbox_send_message(perf_domain->mpxy_ctx->chan, &msg); + if (ret) + return ret; + + if (rx.status) + return rpmi_to_linux_error(rx.status); + + *level_index =3D rx.level_index; + + return 0; +} + +static int rpmi_perf_set_levels(struct rpmi_perf_domain *perf_domain, u32 = level_index) +{ + struct rpmi_perf_set_level_tx tx; + struct rpmi_perf_set_level_rx rx; + struct rpmi_mbox_message msg; + int ret =3D 0; + + tx.domain_id =3D perf_domain->id; + tx.level_index =3D level_index; + + rpmi_mbox_init_send_with_response(&msg, RPMI_PERF_SRV_SET_LEVEL, + &tx, sizeof(tx), &rx, sizeof(rx)); + ret =3D rpmi_mbox_send_message(perf_domain->mpxy_ctx->chan, &msg); + if (ret) + return ret; + + if (rx.status) + return rpmi_to_linux_error(rx.status); + + return 0; +} + +static int rpmi_perf_get_fast_channel_regions(struct rpmi_ctx *mpxy_ctx, s= truct rpmi_perf *perf) +{ + struct rpmi_perf_get_fast_channel_region_rx rx; + struct rpmi_mbox_message msg; + int ret; + + rpmi_mbox_init_send_with_response(&msg, RPMI_PERF_SRV_GET_FAST_CHANNEL_RE= GION, + NULL, 0, &rx, sizeof(rx)); + ret =3D rpmi_mbox_send_message(mpxy_ctx->chan, &msg); + if (ret) + return ret; + + if (rx.status) + return rpmi_to_linux_error(rx.status); + + perf->fast_channel.addr =3D rx.addr_low | (((u64)rx.addr_high) << 32); + perf->fast_channel.size =3D rx.size_low | (((u64)rx.size_high) << 32); + + return 0; +} + +static int rpmi_perf_extract_attributes(struct rpmi_perf_get_fast_channel_= attributes_rx *rx, + struct rpmi_perf_domain *domain, + struct rpmi_fc_info *fc, u32 service_id) +{ + u64 phys_offset, phys_addr, db_phys_addr; + struct rpmi_fc_db_info *db =3D NULL; + void __iomem *addr, *db_addr; + u8 db_addr_width; + u32 flags; + + flags =3D le32_to_cpu(rx->flags); + phys_offset =3D le32_to_cpu(rx->offset_low); + phys_offset |=3D (u64)le32_to_cpu(rx->offset_high) << 32; + phys_addr =3D domain->perf->fast_channel.addr + phys_offset; + + addr =3D devm_ioremap(domain->dev, phys_addr, 8); + if (!addr) { + dev_err(domain->dev, + "failed to get fastchannel virtual addr in domain: %d\n", + domain->id); + return -EADDRNOTAVAIL; + } + + switch (service_id) { + case RPMI_PERF_SRV_GET_LEVEL: + case RPMI_PERF_SRV_GET_LIMIT: + fc->get_addr =3D addr; + break; + case RPMI_PERF_SRV_SET_LEVEL: + case RPMI_PERF_SRV_SET_LIMIT: + if (SUPPORTS_DOORBELL(flags)) { + db =3D devm_kzalloc(domain->dev, + sizeof(struct rpmi_fc_db_info), + GFP_KERNEL); + if (!db) + break; + + db_addr_width =3D 1 << (DOORBELL_REG_WIDTH(flags) + 3); + db_phys_addr =3D le32_to_cpu(rx->db_addr_low); + db_phys_addr |=3D (u64)le32_to_cpu(rx->db_addr_high) << 32; + + db_addr =3D devm_ioremap(domain->dev, db_phys_addr, 8); + if (!db_addr) + break; + + db->addr =3D db_addr; + db->width =3D db_addr_width; + db->set =3D le32_to_cpu(rx->db_id); + fc->set_db =3D db; + } + fc->set_addr =3D addr; + + break; + } + + return 0; +} + +static int rpmi_perf_get_fast_channel_attributes(struct rpmi_perf_domain *= perf_domain, + struct rpmi_fc_info *fc, + u32 service_id) +{ + struct rpmi_perf_get_fast_channel_attributes_tx tx; + struct rpmi_perf_get_fast_channel_attributes_rx rx; + struct rpmi_mbox_message msg; + int ret; + + tx.domain_id =3D perf_domain->id; + tx.service_id =3D service_id; + + rpmi_mbox_init_send_with_response(&msg, RPMI_PERF_SRV_GET_FAST_CHANNEL_AT= TRS, + &tx, sizeof(tx), &rx, sizeof(rx)); + ret =3D rpmi_mbox_send_message(perf_domain->mpxy_ctx->chan, &msg); + if (ret) + return ret; + + if (rx.status) + return rpmi_to_linux_error(rx.status); + + ret =3D rpmi_perf_extract_attributes(&rx, perf_domain, fc, service_id); + + return ret; +} + +static int rpmi_perf_enumerate(struct rpmi_perf *mpxy_perf, struct rpmi_pe= rf_domain *domain) +{ + struct rpmi_fc_info *fc; + int ret, id; + + id =3D domain->id; + + ret =3D rpmi_perf_get_attrs(mpxy_perf, domain); + if (ret) { + dev_err(domain->dev, + "Failed to get attributes of perf domain: #%u\n", id); + return ret; + } + + ret =3D rpmi_perf_get_supported_levels(domain); + if (ret) { + dev_err(domain->dev, + "Failed to get supported level of perf domain: #%u\n", id); + return ret; + } + + if (domain->has_fastchannels) { + fc =3D devm_kcalloc(domain->dev, RPMI_PERF_FC_MAX, sizeof(*fc), GFP_KERN= EL); + if (!fc) + return -ENOMEM; + + if (domain->set_level) { + rpmi_perf_get_fast_channel_attributes(domain, + &fc[RPMI_PERF_FC_LEVEL], + RPMI_PERF_SRV_SET_LEVEL); + } + + rpmi_perf_get_fast_channel_attributes(domain, + &fc[RPMI_PERF_FC_LEVEL], + RPMI_PERF_SRV_GET_LEVEL); + + if (domain->set_limit) { + rpmi_perf_get_fast_channel_attributes(domain, + &fc[RPMI_PERF_FC_LIMIT], + RPMI_PERF_SRV_SET_LIMIT); + } + + rpmi_perf_get_fast_channel_attributes(domain, + &fc[RPMI_PERF_FC_LIMIT], + RPMI_PERF_SRV_GET_LIMIT); + + domain->fc_info =3D fc; + } + + return 0; +} + +static int rpmi_perf_dvfs_device_opps_add(const struct rpmi_perf *mpxy_per= f, + struct device *dev, int domain) +{ + struct rpmi_perf_opp *opp; + struct rpmi_perf_domain *dom; + unsigned long freq; + int idx, ret; + + if (domain < 0) + return domain; + else if (domain > mpxy_perf->num_domains) + return -EINVAL; + + dom =3D mpxy_perf->domain + domain; + + for (opp =3D dom->opp, idx =3D 0; idx < dom->opp_count; idx++, opp++) { + /* Frequency from RPMI is in kHz*/ + freq =3D opp->clock_freq * 1000; + + ret =3D dev_pm_opp_add(dev, freq, 0); + if (ret) { + dev_warn(dev, "failed to add opp %luHz\n", freq); + + while (idx-- > 0) { + /* Frequency from RPMI is in kHz*/ + freq =3D (--opp)->clock_freq * 1000; + dev_pm_opp_remove(dev, freq); + } + return ret; + } + } + return 0; +} + +static int rpmi_perf_search_index(const void *id, const void *opp) +{ + return *((u32 *)id) - ((struct rpmi_perf_opp *)opp)->index; +} + +static int rpmi_perf_search_freq(const void *id, const void *opp) +{ + return *((u32 *)id) - ((struct rpmi_perf_opp *)opp)->clock_freq; +} + +static int rpmi_perf_level_to_frequency(struct rpmi_perf_domain *domain, u= 32 index, u32 *cpufreq) +{ + struct rpmi_perf_opp *found; + + found =3D bsearch(&index, domain->opp, domain->opp_count, + sizeof(domain->opp[0]), rpmi_perf_search_index); + if (found) { + *cpufreq =3D found->clock_freq; + return 0; + } + + return -EINVAL; +} + +static int rpmi_perf_frequency_to_level(struct rpmi_perf_domain *domain, u= 32 clock_freq, u32 *index) +{ + struct rpmi_perf_opp *found; + + found =3D bsearch(&clock_freq, domain->opp, domain->opp_count, + sizeof(domain->opp[0]), rpmi_perf_search_freq); + if (found) { + *index =3D found->index; + return 0; + } + + return -EINVAL; +} + +static int rpmi_perf_set_target_index(struct cpufreq_policy *policy, unsig= ned int index) +{ + struct rpmi_perf_cpufreq_data *data =3D policy->driver_data; + struct rpmi_perf_domain *domain; + int ret; + + domain =3D &data->mpxy_perf->domain[data->cpufreq_domain_id]; + + if (!domain->set_level) { + dev_err(data->mpxy_perf->dev, + "perf domain #%u - set perf level is not supported\n", + data->cpufreq_domain_id); + return -EOPNOTSUPP; + } + + if (!domain->fc_info || !domain->fc_info[RPMI_PERF_FC_LEVEL].set_addr) { + ret =3D rpmi_perf_set_levels(domain, index); + } else { + iowrite32(index, domain->fc_info[RPMI_PERF_FC_LEVEL].set_addr); + rpmi_perf_fastchannel_db_ring(domain->fc_info[RPMI_PERF_FC_LEVEL].set_db= ); + ret =3D 0; + } + + return ret; +} + +static unsigned int rpmi_perf_fast_switch(struct cpufreq_policy *policy, + unsigned int target_freq) +{ + struct rpmi_perf_cpufreq_data *data =3D policy->driver_data; + struct rpmi_perf_domain *domain =3D &data->mpxy_perf->domain[data->cpufre= q_domain_id]; + u32 level_index =3D 0; + + if (!rpmi_perf_frequency_to_level(domain, target_freq, &level_index)) + return 0; + + if (!rpmi_perf_set_target_index(policy, level_index)) + return target_freq; + + return 0; +} + +static unsigned int rpmi_perf_get_rate(unsigned int cpu) +{ + struct cpufreq_policy *policy =3D cpufreq_cpu_get_raw(cpu); + struct rpmi_perf_cpufreq_data *data =3D policy->driver_data; + struct rpmi_perf_domain *domain; + u32 cpufreq, level_index; + unsigned long rate; + int ret; + + domain =3D &data->mpxy_perf->domain[data->cpufreq_domain_id]; + + if (!domain->fc_info || !domain->fc_info[RPMI_PERF_FC_LEVEL].get_addr) { + ret =3D rpmi_perf_get_levels(&data->mpxy_perf->domain[data->cpufreq_doma= in_id], + &level_index); + if (ret) + return 0; + } else { + level_index =3D ioread32(domain->fc_info[RPMI_PERF_FC_LEVEL].get_addr); + } + + ret =3D rpmi_perf_level_to_frequency(domain, level_index, &cpufreq); + if (ret) + return 0; + + rate =3D (unsigned long)cpufreq; + + return rate; +} + +static int rpmi_perf_init(struct cpufreq_policy *policy) +{ + struct cpufreq_frequency_table *freq_table; + struct rpmi_perf_cpufreq_data *data; + struct rpmi_perf_domain *domain; + struct of_phandle_args args; + struct rpmi_perf *mpxy_perf; + int ret, nr_opp, domain_id; + struct device *cpu_dev; + + mpxy_perf =3D cpufreq_get_driver_data(); + + cpu_dev =3D get_cpu_device(policy->cpu); + if (!cpu_dev) { + pr_err("failed to get cpu%d device\n", policy->cpu); + return -ENODEV; + } + + data =3D kzalloc(sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + ret =3D of_perf_domain_get_sharing_cpumask(policy->cpu, + "performance-domains", + "#performance-domain-cells", + policy->cpus, &args); + if (ret) { + dev_err(cpu_dev, "%s: failed to performance domain info: %d\n", + __func__, ret); + goto out_free_priv; + } + + domain_id =3D args.args[0]; + of_node_put(args.np); + + ret =3D rpmi_perf_dvfs_device_opps_add(mpxy_perf, cpu_dev, domain_id); + if (ret) { + dev_warn(cpu_dev, "failed to add opps to the device\n"); + goto out_free_priv; + } + + nr_opp =3D dev_pm_opp_get_opp_count(cpu_dev); + if (nr_opp <=3D 0) { + dev_dbg(cpu_dev, "OPP table is not ready, deferring probe\n"); + ret =3D -EPROBE_DEFER; + goto out_free_priv; + } + + ret =3D dev_pm_opp_init_cpufreq_table(cpu_dev, &freq_table); + if (ret) { + dev_err(cpu_dev, "failed to init cpufreq table: %d\n", ret); + goto out_free_opp; + } + + data->cpu_dev =3D cpu_dev; + data->nr_opp =3D nr_opp; + data->cpufreq_domain_id =3D domain_id; + data->mpxy_perf =3D mpxy_perf; + + /* Allow DVFS request for any domain from any CPU */ + policy->dvfs_possible_from_any_cpu =3D true; + policy->driver_data =3D data; + policy->freq_table =3D freq_table; + + domain =3D &mpxy_perf->domain[domain_id]; + policy->cpuinfo.transition_latency =3D domain->rate_limit_us * 1000; + policy->fast_switch_possible =3D true; + + return 0; + +out_free_opp: + dev_pm_opp_remove_all_dynamic(cpu_dev); + +out_free_priv: + kfree(data); + + return ret; +} + +static void rpmi_perf_exit(struct cpufreq_policy *policy) +{ + struct rpmi_perf_cpufreq_data *data =3D policy->driver_data; + + dev_pm_opp_free_cpufreq_table(data->cpu_dev, &policy->freq_table); + dev_pm_opp_remove_all_dynamic(data->cpu_dev); + kfree(data); +} + +static int __maybe_unused +rpmi_perf_get_cpu_power(struct device *cpu_dev, unsigned long *uW, + unsigned long *kHz) +{ + struct rpmi_perf_cpufreq_data *data; + struct rpmi_perf_domain *domain; + struct cpufreq_policy *policy; + struct rpmi_perf_opp *opp; + unsigned long Hz; + int idx; + + policy =3D cpufreq_cpu_get_raw(cpu_dev->id); + if (!policy) + return 0; + + data =3D policy->driver_data; + domain =3D &data->mpxy_perf->domain[data->cpufreq_domain_id]; + Hz =3D *kHz * 1000; + + for (opp =3D domain->opp, idx =3D 0; idx < domain->opp_count; idx++, opp+= +) { + if (opp->clock_freq < *kHz) + continue; + + *uW =3D opp->power_cost; + *kHz =3D opp->clock_freq; + break; + } + + return 0; +} + +static void rpmi_perf_register_em(struct cpufreq_policy *policy) +{ + struct em_data_callback em_cb =3D EM_DATA_CB(rpmi_perf_get_cpu_power); + struct rpmi_perf_cpufreq_data *data =3D policy->driver_data; + + em_dev_register_perf_domain(get_cpu_device(policy->cpu), data->nr_opp, + &em_cb, policy->cpus, true); +} + +static struct cpufreq_driver rpmi_perf_cpufreq_driver =3D { + .name =3D "sbi-mpxy-cpufreq", + .flags =3D CPUFREQ_HAVE_GOVERNOR_PER_POLICY | + CPUFREQ_NEED_INITIAL_FREQ_CHECK | + CPUFREQ_IS_COOLING_DEV, + .verify =3D cpufreq_generic_frequency_table_verify, + .target_index =3D rpmi_perf_set_target_index, + .fast_switch =3D rpmi_perf_fast_switch, + .get =3D rpmi_perf_get_rate, + .init =3D rpmi_perf_init, + .exit =3D rpmi_perf_exit, + .register_em =3D rpmi_perf_register_em, +}; + +static int rpmi_cpufreq_attr_setup(struct device *dev, struct rpmi_ctx *mp= xy_ctx) +{ + struct rpmi_mbox_message msg; + int ret; + + /* Validate RPMI specification version */ + rpmi_mbox_init_get_attribute(&msg, RPMI_MBOX_ATTR_SPEC_VERSION); + ret =3D rpmi_mbox_send_message(mpxy_ctx->chan, &msg); + if (ret) { + dev_dbg(dev, "Failed to get spec version\n"); + return ret; + } + + if (msg.attr.value < RPMI_MKVER(1, 0)) { + dev_dbg(dev, + "msg protocol version mismatch, expected 0x%x, found 0x%x\n", + RPMI_MKVER(1, 0), msg.attr.value); + return -EINVAL; + } + + /* Validate performance service group ID */ + rpmi_mbox_init_get_attribute(&msg, RPMI_MBOX_ATTR_SERVICEGROUP_ID); + ret =3D rpmi_mbox_send_message(mpxy_ctx->chan, &msg); + if (ret) { + dev_dbg(dev, "Failed to get service group ID\n"); + return ret; + } + + if (msg.attr.value !=3D RPMI_SRVGRP_PERFORMANCE) { + dev_dbg(dev, + "service group match failed, expected 0x%x, found 0x%x\n", + RPMI_SRVGRP_PERFORMANCE, msg.attr.value); + return -EINVAL; + } + + /* Validate performance service group version */ + rpmi_mbox_init_get_attribute(&msg, RPMI_MBOX_ATTR_SERVICEGROUP_VERSION); + ret =3D rpmi_mbox_send_message(mpxy_ctx->chan, &msg); + if (ret) { + dev_dbg(dev, "Failed to get service group version\n"); + return ret; + } + + if (msg.attr.value < RPMI_MKVER(1, 0)) { + dev_dbg(dev, + "service group version failed, expected 0x%x, found 0x%x\n", + RPMI_MKVER(1, 0), msg.attr.value); + return -EINVAL; + } + + /* Get max message size */ + rpmi_mbox_init_get_attribute(&msg, RPMI_MBOX_ATTR_MAX_MSG_DATA_SIZE); + ret =3D rpmi_mbox_send_message(mpxy_ctx->chan, &msg); + if (ret) { + dev_dbg(dev, "Failed to get max message data size\n"); + return ret; + } + + mpxy_ctx->max_msg_size =3D msg.attr.value; + + return 0; +} + +static int rpmi_cpufreq_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct rpmi_perf *mpxy_perf; + struct rpmi_ctx *mpxy_ctx; + int num_domains =3D 0; + int ret, i; + + mpxy_ctx =3D devm_kzalloc(&pdev->dev, sizeof(*mpxy_ctx), GFP_KERNEL); + if (!mpxy_ctx) + return -ENOMEM; + + /* Setup mailbox client */ + mpxy_ctx->client.dev =3D dev; + mpxy_ctx->client.rx_callback =3D NULL; + mpxy_ctx->client.tx_block =3D false; + mpxy_ctx->client.knows_txdone =3D true; + mpxy_ctx->client.tx_tout =3D 0; + + /* Request mailbox channel */ + mpxy_ctx->chan =3D mbox_request_channel(&mpxy_ctx->client, 0); + if (IS_ERR(mpxy_ctx->chan)) + return PTR_ERR(mpxy_ctx->chan); + + ret =3D rpmi_cpufreq_attr_setup(dev, mpxy_ctx); + if (ret) { + dev_err(dev, "failed to verify RPMI attribute - err:%d\n", ret); + goto fail_free_channel; + } + + /* Get number of performance domain */ + ret =3D rpmi_perf_get_num_domains(mpxy_ctx, &num_domains); + if (ret) { + dev_err(dev, "invalid number of perf domains - err:%d\n", ret); + goto fail_free_channel; + } + + if (!num_domains) { + dev_err(dev, "No PM domains found!\n"); + ret =3D -EINVAL; + goto fail_free_channel; + } + + mpxy_perf =3D devm_kzalloc(dev, sizeof(*mpxy_perf), GFP_KERNEL); + if (!mpxy_perf) { + ret =3D -ENOMEM; + goto fail_free_channel; + } + + mpxy_perf->domain =3D devm_kcalloc(dev, num_domains, + sizeof(struct rpmi_perf_domain), + GFP_KERNEL); + if (!mpxy_perf->domain) { + ret =3D -ENOMEM; + goto fail_free_channel; + } + + mpxy_perf->num_domains =3D num_domains; + mpxy_perf->dev =3D dev; + + /* Get fast channel region for performance domain */ + ret =3D rpmi_perf_get_fast_channel_regions(mpxy_ctx, mpxy_perf); + if (ret) + dev_err(dev, "invalid fast channel region\n"); + + for (i =3D 0; i < num_domains; i++) { + struct rpmi_perf_domain *domain =3D &mpxy_perf->domain[i]; + + domain->id =3D i; + domain->mpxy_ctx =3D mpxy_ctx; + domain->dev =3D dev; + domain->perf =3D mpxy_perf; + + rpmi_perf_enumerate(mpxy_perf, domain); + } + + rpmi_perf_cpufreq_driver.driver_data =3D mpxy_perf; + + ret =3D cpufreq_register_driver(&rpmi_perf_cpufreq_driver); + if (ret) { + dev_err(dev, "registering cpufreq failed, err: %d\n", ret); + goto fail_free_channel; + } + + dev_info(dev, "%d MPXY cpufreq domains registered\n", num_domains); + dev_set_drvdata(dev, mpxy_perf); + + return 0; + +fail_free_channel: + mbox_free_channel(mpxy_ctx->chan); + + return ret; +} + +static void rpmi_cpufreq_remove(struct platform_device *pdev) +{ + cpufreq_unregister_driver(&rpmi_perf_cpufreq_driver); +} + +static const struct of_device_id rpmi_cpufreq_of_match[] =3D { + { .compatible =3D "riscv,rpmi-performance" }, + { }, +}; + +MODULE_DEVICE_TABLE(of, rpmi_cpufreq_of_match); + +static struct platform_driver rpmi_cpufreq_platdrv =3D { + .driver =3D { + .name =3D "riscv-rpmi-performance", + .of_match_table =3D rpmi_cpufreq_of_match, + }, + .probe =3D rpmi_cpufreq_probe, + .remove =3D rpmi_cpufreq_remove, +}; + +module_platform_driver(rpmi_cpufreq_platdrv); + +MODULE_AUTHOR("Joshua Yeong "); +MODULE_DESCRIPTION("CPUFreq Driver based on SBI MPXY extension"); +MODULE_LICENSE("GPL"); diff --git a/include/linux/mailbox/riscv-rpmi-message.h b/include/linux/mai= lbox/riscv-rpmi-message.h index e135c6564d0c..a32210db48ed 100644 --- a/include/linux/mailbox/riscv-rpmi-message.h +++ b/include/linux/mailbox/riscv-rpmi-message.h @@ -93,6 +93,7 @@ static inline int rpmi_to_linux_error(int rpmi_error) /* RPMI service group IDs */ #define RPMI_SRVGRP_SYSTEM_MSI 0x00002 #define RPMI_SRVGRP_CLOCK 0x00008 +#define RPMI_SRVGRP_PERFORMANCE 0x0000A =20 /* RPMI clock service IDs */ enum rpmi_clock_service_id { @@ -119,6 +120,21 @@ enum rpmi_sysmsi_service_id { RPMI_SYSMSI_SRV_ID_MAX_COUNT }; =20 +/* RPMI performances service IDs */ +enum rpmi_perf_service_id { + RPMI_PERF_SRV_ENABLE_NOTIFICATION =3D 0x01, + RPMI_PERF_SRV_GET_NUM_DOMAINS =3D 0x02, + RPMI_PERF_SRV_GET_ATTRIBUTES =3D 0x03, + RPMI_PERF_SRV_GET_SUPPORTED_LEVELS =3D 0x04, + RPMI_PERF_SRV_GET_LEVEL =3D 0x05, + RPMI_PERF_SRV_SET_LEVEL =3D 0x06, + RPMI_PERF_SRV_GET_LIMIT =3D 0x07, + RPMI_PERF_SRV_SET_LIMIT =3D 0x08, + RPMI_PERF_SRV_GET_FAST_CHANNEL_REGION =3D 0x09, + RPMI_PERF_SRV_GET_FAST_CHANNEL_ATTRS =3D 0x0a, + RPMI_PERF_SRV_ID_MAX_COUNT, +}; + /* RPMI Linux mailbox attribute IDs */ enum rpmi_mbox_attribute_id { RPMI_MBOX_ATTR_SPEC_VERSION, --=20 2.43.0 From nobody Sun Feb 8 04:38:31 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2110.outbound.protection.partner.outlook.cn [139.219.17.110]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D74FE335555; Tue, 6 Jan 2026 14:55:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.110 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767711350; cv=fail; b=Q2OJzwenJvY6e+Y9WxOHsuyrDioKDKGECodMU7bUckB7eDS8S/knSWUj5cXHIsBN0cXUhZpiWfgFFc0bu4ABaoLT2stgtH4iAysh1datwRINLkl5hTUGpVcVJQDSjAI2BJtZcCYsd4SORxzMNpQn1HfY9RiWQfsoTbjHu8On7xM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767711350; c=relaxed/simple; bh=SkkR+r7LIQY55TuDN6eNAAhPAgUWgoDL5SvY24aww+s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=gbbgRLot78P3vZjOMrT2SHMpLTlkELrSpEPrV7P1mH3xAzva2D7HWFhXSK0s+RlZ6VncU2k6iiM46/JIiA17ub4Ni1JK12uVGqYScnRa5zFL76uBi7hCDPKqOC8j7gHPUj1XX+aWDbqWmMkGdHrt2CibqhfCU6tvNPfuLpIWZ7s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.110 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D8bYIrqGe/9tj+I/02JeFwgbIht/VTONxgveTrUDPF2HjEtM+9TuVvGn5NyDmsb62bZxRbyzegdFIfC6tHQ/23UNlV6kSvRu8B1TiPgl2WYgmnIf8YjID+fCeRB1d+aQK/Z/I7apR5lES8s2KvL06IjZBcw9EgGhM86XENiW2qgQNCbAtniu1FpuHXp8j3ghmakcDz3Wxhy3bNdek0vCzjkqTRYMDCTWF0F1BH+tSRMOONykY1+W5pZCsP6ApqCvcVuXSuHihkow22WAt9aDivWMG0RaMIZfdgJTxdqljuVET/BwSmo5K9PbN404Y7tRm9AKg4vYk6Jr/Zh3D3IMZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1ur0Zu1ZfgULTGPHXoJkZKxzKzahgPq68u4jKhcp7Jk=; b=ZCYLa8FZHF6HV7a3dc/jc9NYAFF/Y2VvFD0VKA8MV6RQL4o1cf03aE4Wh1AfXbF9LAvTzAm9ShhQ5dgPVHjkSvVZg6OAQFrXxARld+NxJzq/LmxqIUCvGlqhx6TLzoQw6a6bgRg48Mx4jqrH1FK2VnkBQGFwzWvXDVe9/X41JWOdHJoMGHHTSidV9KDFq1fEw47jdfRrigpquLAmTfJNFmpmWhz5bpqdUsLCglO9j8jcXYw09tajpq65JLeC45ZaA8i9A33zi6ycEFTmml6VPS0ebDZllv8/sTNUz4Dco0mdIKtCwue7Shl9D/g6cFUMN6UqAVFZa2kM0thRJS5lLQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:20::14) by SH0PR01MB0730.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:22::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.13; Tue, 6 Jan 2026 09:22:36 +0000 Received: from SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn ([fe80::81c4:2724:6a48:a18]) by SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn ([fe80::81c4:2724:6a48:a18%4]) with mapi id 15.20.9388.011; Tue, 6 Jan 2026 09:22:35 +0000 From: Joshua Yeong To: rahul@summations.net, anup@brainfault.org, joshua.yeong@starfivetech.com, leyfoon.tan@starfivetech.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr, rafael@kernel.org, viresh.kumar@linaro.org, sboyd@kernel.org, jms@oss.tenstorrent.com, darshan.prajapati@einfochips.com, charlie@rivosinc.com, dfustini@oss.tenstorrent.com, michal.simek@amd.com, cyy@cyyself.name, jassisinghbrar@gmail.com, andriy.shevchenko@linux.intel.com Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH 5/5] MAINTAINERS: Add RISC-V RPMI performance service group Date: Tue, 6 Jan 2026 17:21:16 +0800 Message-ID: <20260106092117.3727152-6-joshua.yeong@starfivetech.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260106092117.3727152-1-joshua.yeong@starfivetech.com> References: <20260106092117.3727152-1-joshua.yeong@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: ZQ0PR01CA0035.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:2::21) To SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:20::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SH0PR01MB0841:EE_|SH0PR01MB0730:EE_ X-MS-Office365-Filtering-Correlation-Id: 130d56d1-3fff-48f8-9faa-08de4d0520bc X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|366016|52116014|41320700013|38350700014|7053199007|921020; X-Microsoft-Antispam-Message-Info: kbrSbf8ooNIykpWGeNs+rku2zPZQ1ha1c+yRHZ2/h3y5iEdAMz2ZOlEPDbuaNKtNyOuqgnZUWq6dvefOdRKJPpqz0+NJT699j43ag5vp4eFoFc3Kr20cAOTNwRu8aCZbSTdWuZn+9snddUhXLRvf1EHTE8z6ofsAQpCyU5b4VChGXT9zzrDbTQJ4nP/v6A5U0er6h93FdwJQnIMEjygBvoNGh+7viSlGZBZOgTtSftnPLOnRcZpOnt2R5SmIGe220mFHesla5vlfdPnRBIXC+vaXLpP1pOq+nXM/maeY4OUhmyoHxPuyf7ClMiMC8TyBL7SK4VQCtW9Mv3ue0thahO5G2kgCYmenNZraHQsgu0mTJzpglMgJvxwcLdvHAC5LWz0k+MoEzkLoRGZMRkervj74iaCI7/rCF9El/X4kqvG8FidVPM6axR9nTYjYDQTgNWyKy72SCMi9H98SMhvOfwn45JyUq/e+OaL16SaMZWlTkiGORGxEK5y0FuJdCAm4LGqKjxWzBCavi2VzFAb0yKAPbYY/M4Fm2hDeu95z8gKkbcXhmwLUgrgj7eRkx81+peylhg47p+y4Qv1if1ZOBThZ+KyQ6mkFOZx4fMG4gVM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(366016)(52116014)(41320700013)(38350700014)(7053199007)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ogz8QKKL7Rl5XP1dfaoFpYlk0nsCdIer+YNGT5jtZ4G0nzJfg93I/7H47snt?= =?us-ascii?Q?VhAkQmT73006F8tbgUoC9FUqaeFRjE3Y/wt/pwnQXn+YcGEvqLH20Nv7ajci?= =?us-ascii?Q?0Gl+1M47h9yZ8/cmMnd6Jo+2SGDrhRWhN7TMjnFhwy9sOHRw9fG7heUjjOzc?= =?us-ascii?Q?rQqiROMCCKiosEI4zM6WerROfw7zv9Pg1X4mmL98af5AbzpK3UEpdhKLiyDX?= =?us-ascii?Q?F71AhmZbEkUKCKjLGJojadI9ZQ4RZLiWXm/0c5fZbZix6327O+6Xnjyk/w3W?= =?us-ascii?Q?xTxjJ/GJUF0+OjUmybFw/FUpUIvD8uYEwo4nLG6HZ1U5AgHau3it1PeXKU5d?= =?us-ascii?Q?cOPKcUoCmND0zhzYY4U+KQZCExErPUoG8jodvgUWGpUK26gmko/eXZX2dEj7?= =?us-ascii?Q?MUXWR+rs+9iBwbLB9ePslQ+F1+KPEYA/fTb0wG3onNXggZKi/ewbBZIG9yfF?= =?us-ascii?Q?BZM0B+UmiMlUR+qYjpMOCJDjZkHNLIWM/jhuCv2wiqdhUuiGUmuq9sJF3BoG?= =?us-ascii?Q?bb5kTNtiKk0RQ3L480nkU5daCi8h31obGMghytZfJci1zw+TQYYZuPeRkI/F?= =?us-ascii?Q?d5bo/cXAcSNBxfGaxOuK9OkBGjraDdvmHrmLCyObxCKK8zTRcr+emtRqN0Gr?= =?us-ascii?Q?XHANfzPwWKy/DpC3U9+2Zwt9NQRtcnSrZ5OiE9ynx9zSdYI8h+Z02/nVE9JT?= =?us-ascii?Q?4h6Ndvykp3QK5qUL9NpTfbjim1erkNvagkZn+P+cIZt40+CPddROUuPSABD9?= =?us-ascii?Q?GtBTkElsgDG4p6hjPmdRPK+Ym7Ps/ncgxq+BC7lKS139S6411IFdw6WMB+RS?= =?us-ascii?Q?/nHXdbLTg+7v6OjaFh2K/glqOmmtXTnkrFtDddiFMNf4EqlclLQFb227kLsX?= =?us-ascii?Q?yDGaXF6PHKNju7AONdlec0s4obqIghRnfL24Zg2pbeiPc56ZP/1JB/xowr4g?= =?us-ascii?Q?/KtqY8E40A3Dsg1vVT1O1gO3zcJE30CMlAlROcEb83+Dkc24dPfytyNkWZen?= =?us-ascii?Q?kd6csIBEToUg29WdryL66hdvODIULheOun0MoYd75D7UAngZeswUoExXEruT?= =?us-ascii?Q?rWlRlb51tJdVb+o4BHevACTSzfoUtWpCJFQAEvvMriYF7Dm+cFLIqVOGKXlH?= =?us-ascii?Q?7KT3fhzqrigmM7yy/9CRacJkJ2Wiu07gejvUYfMnk7Sw9dvYZhsX1TqIUuWs?= =?us-ascii?Q?6tcHm2pr+J9Qjrgsl6TA1gJiYxAyrAjmNb/yL9YRDxyL4L/TNdNmIx9U15np?= =?us-ascii?Q?RPlVfXhe8A6LBrETl8l/cw8GcTcwq+sK32XquemaQn9QW7bypICEFUJ8yeYv?= =?us-ascii?Q?DD0CYsOl6Z6vpWtPz5U21/VtkWg+KNFl/u2jO3NdF2RZWATHUddj7S44Rajk?= =?us-ascii?Q?DM+7Ibs84AOCZL2ZfwnS0BwtOasyb3LZx/ucA8awE75HI5ppavCdJxhIEAZJ?= =?us-ascii?Q?yiY8zF+ZWx07Vim6JQMRXEmVp3+nu76UZpKez0+60o/qFP5Q1Ks52eJvCx+0?= =?us-ascii?Q?05xWYhgGQS3c+hLUfCasvj4jDAOlZxq082NdsUC0Trx9VocJVOZYe8j51ZW3?= =?us-ascii?Q?zBLY155yPS4kNH0zclA9FsCBYGC5GizBNWqdBc6RIwXP7WLN26qsbKv88deY?= =?us-ascii?Q?IlM/toiQ1XXL0I93yyt+jpQ=3D?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 130d56d1-3fff-48f8-9faa-08de4d0520bc X-MS-Exchange-CrossTenant-AuthSource: SH0PR01MB0841.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2026 09:22:35.8492 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: f5OtLeW+gXqIZyt2s6RAzl5c7/6Yhf222wQq/b/gOwwv8Z8FEsZ7dFoW8DjlW/Fqkv/16YKnE5wQ87HFF9ueNCOz4tA765AuUqzjnil76+M= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SH0PR01MB0730 Content-Type: text/plain; charset="utf-8" Add myself into mail to list for RISC-V RPMI. Signed-off-by: Joshua Yeong --- MAINTAINERS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 765ad2daa218..fa47e94446cb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -22508,14 +22508,18 @@ F: drivers/perf/riscv_pmu_sbi.c RISC-V RPMI AND MPXY DRIVERS M: Rahul Pathak M: Anup Patel +M: Joshua Yeong L: linux-riscv@lists.infradead.org F: Documentation/devicetree/bindings/clock/riscv,rpmi-clock.yaml F: Documentation/devicetree/bindings/clock/riscv,rpmi-mpxy-clock.yaml +F: Documentation/devicetree/bindings/firmware/riscv,rpmi-performance.yaml +F: Documentation/devicetree/bindings/firmware/riscv,rpmi-mpxy-performance.= yaml F: Documentation/devicetree/bindings/interrupt-controller/riscv,rpmi-mpxy-= system-msi.yaml F: Documentation/devicetree/bindings/interrupt-controller/riscv,rpmi-syste= m-msi.yaml F: Documentation/devicetree/bindings/mailbox/riscv,rpmi-shmem-mbox.yaml F: Documentation/devicetree/bindings/mailbox/riscv,sbi-mpxy-mbox.yaml F: drivers/clk/clk-rpmi.c +F: drivers/cpufreq/riscv-rpmi-cpufreq.c F: drivers/irqchip/irq-riscv-rpmi-sysmsi.c F: drivers/mailbox/riscv-sbi-mpxy-mbox.c F: include/linux/mailbox/riscv-rpmi-message.h --=20 2.43.0