[PATCH v2 0/9] firmware: arm_scmi: Refactoring and enablement of ACPI PCC transport
Sudeep Holla
sudeep.holla at kernel.org
Mon May 25 13:42:38 PDT 2026
The SCMI can be utilized in systems using either the FDT or ACPI specification.
While FDT-based systems can natively use SCMI, ACPI-based systems often
need to abstract the functionality provided by SCMI under ASL methods.
So far, there has been no need to support SCMI natively on ACPI systems.
However, with the addition of a few new protocols such as Powercap and Telemetry,
which lack abstractions in the ACPI specification, there is now a need to
run SCMI natively for those use cases. ACPI for System Control and Management
Interface document[1] provides a mechanism which allows ACPI-based systems to
discover whether a platform supports SCMI and to natively use SCMI for
selected/limited subset of SCMI protocols.
This patch series introduces ACPI PCC transport support for the Arm SCMI
framework, alongside several foundational refactors and enhancements to
achieve firmware-node neutrality between Device Tree (DT) and ACPI systems.
The key changes include:
1. ACPI/DT abstraction and fwnode transition
Converted the core SCMI code to use `fwnode_handle` instead of DT-specific
structures, ensuring seamless operation across both ACPI and DT
environments. All property lookups, child enumeration, and device
association paths have been updated accordingly.
2. Unified transport registration for ACPI and DT
Extended the SCMI transport driver macros to support ACPI match tables,
enabling transports to probe using ACPI device IDs while maintaining
backward compatibility with DT-only systems.
3. Protocol device initialization and refactoring
Refactored the protocol device creation and validation logic into a new
helper for improved readability and maintainability. Enhanced the
initialization logic to handle ACPI-based SCMI devices without explicit
child fwnodes.
4. Introduction of ACPI PCC transport
Added a new SCMI transport driver leveraging ACPI PCCT (Platform
Communications Channel Table) subspaces via the Linux PCC mailbox
framework. This enables SCMI communication over PCC on ACPI-based
platforms.
Collectively, these changes lay the groundwork for robust SCMI operation on
ACPI platforms, achieving near parity with DT systems where applicable,
while enabling the new PCC transport path for firmware communication.
Note: SCMI will not be run natively for all existing protocols other
than Powercap and Telemetry, as they must continue to use ACPI abstractions.
[1] https://developer.arm.com/documentation/111115/latest
-->8
Device (SCM0) {
Name(_HID, "ARML0001")
Name (_UID, 0)
Name (_DSD, Package () {
ToUUID("84a2d1c6-86b6-4199-8dac-9c17449d5e03"), // SCMI Properties UUID
Package () {
Package(2) {
"arm-arml0001-transport-pcc", // Key
Package () { // Value
1, // Revision
3, // Count
Package(){4, 0, 1}, // PCCT Idx, TransportUID, A2P Common
Package(){7, 1, 0}, // PCCT Idx, TransportUID, A2P Exclusive
Package(){9, 2, 2} // PCCT Idx, TransportUID, P2A Exclusive
} // Value
},
Package(2) {
"arm-arml0001-protocol-pcap", // Key
Package () { // Value
1, // Revision
Package() { // Protocol Exclusive Transport Package
// Empty; A2P Common
},
Package() {} // Protocol Association Package
} // Value
},
Package(2) {
"arm-arml0001-protocol-telemetry", // Key
Package () { // Value
1, // Revision
Package() { // Protocol Exclusive Transport Package
Package (2) {1, 0}, // UID=1; Flags=0; A2P Exclusive
Package (2) {2, 0} // UID=2; Flags=0; P2A Exclusive
},
Package() {} // Protocol Association Package
} // Value
},
} // Device Properties
}) // _DSD
} // SCM0
Signed-off-by: Sudeep Holla <sudeep.holla at kernel.org>
---
Changes in v2:
- Fixed SCMI fwnode lifetime handling by taking a reference when
assigning protocol device fwnodes and releasing it from the device
release path.
- Reworked ACPI PCC _DSD parsing to validate package types,
revisions, counts, UID ranges, flags, duplicate UIDs, and channel
mappings.
- Parse the SCMI ACPI _DSD UUID package directly as we moved to SCMI
specific UUID from the generic device properties UUID and reject
malformed or unsupported protocol association data.
- Tightened PCC channel selection so each protocol gets at most one Tx
and one Rx channel, with exactly one common A2P channel and at most
one common P2A channel.
- Only set the PCC interrupt-enable flag when the mailbox channel has a
txdone IRQ.
- Added the SCMI Telemetry protocol ID(Temporary to get the build
working, must come from Cristian's Telemetry support patched)
- Link to v1: https://patch.msgid.link/20251017-acpi_scmi_pcc-v1-0-0adbab7709d9@arm.com
---
Sudeep Holla (9):
firmware: arm_scmi: Fix OF node reference handling
firmware: arm_scmi: Set fwnode for the generated SCMI platform device
firmware: arm_scmi: Extend transport driver macro to support ACPI
firmware: arm_scmi: Convert OF-only paths to generic fwnode in SCMI core
firmware: arm_scmi: Fall back to ACPI HID when "compatible" is absent
firmware: arm_scmi: Pass protocol ID to chan_available() transport callback
firmware: arm_scmi: Refactor protocol device creation logic
firmware: arm_scmi: transport: Add ACPI PCC transport
firmware: arm_scmi: Initialise all protocol devices and transport channels
drivers/firmware/arm_scmi/bus.c | 36 +-
drivers/firmware/arm_scmi/common.h | 36 +-
drivers/firmware/arm_scmi/driver.c | 183 ++++----
drivers/firmware/arm_scmi/transports/Kconfig | 12 +
drivers/firmware/arm_scmi/transports/Makefile | 2 +
drivers/firmware/arm_scmi/transports/mailbox.c | 7 +-
drivers/firmware/arm_scmi/transports/optee.c | 7 +-
drivers/firmware/arm_scmi/transports/pcc.c | 593 +++++++++++++++++++++++++
drivers/firmware/arm_scmi/transports/smc.c | 12 +-
drivers/firmware/arm_scmi/transports/virtio.c | 3 +-
include/linux/scmi_protocol.h | 1 +
11 files changed, 785 insertions(+), 107 deletions(-)
---
base-commit: e7ae89a0c97ce2b68b0983cd01eda67cf373517d
change-id: 20251017-acpi_scmi_pcc-e44e1233eae3
--
Regards,
Sudeep
More information about the linux-arm-kernel
mailing list