1e8419c24SCristian Marussi# SPDX-License-Identifier: GPL-2.0-only 2e8419c24SCristian Marussimenu "ARM System Control and Management Interface Protocol" 3e8419c24SCristian Marussi 4e8419c24SCristian Marussiconfig ARM_SCMI_PROTOCOL 5e8419c24SCristian Marussi tristate "ARM System Control and Management Interface (SCMI) Message Protocol" 6e8419c24SCristian Marussi depends on ARM || ARM64 || COMPILE_TEST 7e8419c24SCristian Marussi help 8e8419c24SCristian Marussi ARM System Control and Management Interface (SCMI) protocol is a 9e8419c24SCristian Marussi set of operating system-independent software interfaces that are 10e8419c24SCristian Marussi used in system management. SCMI is extensible and currently provides 11e8419c24SCristian Marussi interfaces for: Discovery and self-description of the interfaces 12e8419c24SCristian Marussi it supports, Power domain management which is the ability to place 13e8419c24SCristian Marussi a given device or domain into the various power-saving states that 14e8419c24SCristian Marussi it supports, Performance management which is the ability to control 15e8419c24SCristian Marussi the performance of a domain that is composed of compute engines 16e8419c24SCristian Marussi such as application processors and other accelerators, Clock 17e8419c24SCristian Marussi management which is the ability to set and inquire rates on platform 18e8419c24SCristian Marussi managed clocks and Sensor management which is the ability to read 19e8419c24SCristian Marussi sensor data, and be notified of sensor value. 20e8419c24SCristian Marussi 21e8419c24SCristian Marussi This protocol library provides interface for all the client drivers 22e8419c24SCristian Marussi making use of the features offered by the SCMI. 23e8419c24SCristian Marussi 24e8419c24SCristian Marussiif ARM_SCMI_PROTOCOL 25e8419c24SCristian Marussi 26*c3d4aed7SCristian Marussiconfig ARM_SCMI_NEED_DEBUGFS 27*c3d4aed7SCristian Marussi bool 28*c3d4aed7SCristian Marussi help 29*c3d4aed7SCristian Marussi This declares whether at least one SCMI facility is configured 30*c3d4aed7SCristian Marussi which needs debugfs support. When selected causess the creation 31*c3d4aed7SCristian Marussi of a common SCMI debugfs root directory. 32*c3d4aed7SCristian Marussi 33e8419c24SCristian Marussiconfig ARM_SCMI_HAVE_TRANSPORT 34e8419c24SCristian Marussi bool 35e8419c24SCristian Marussi help 36e8419c24SCristian Marussi This declares whether at least one SCMI transport has been configured. 37e8419c24SCristian Marussi Used to trigger a build bug when trying to build SCMI without any 38e8419c24SCristian Marussi configured transport. 39e8419c24SCristian Marussi 40a7b1138bSIgor Skalkinconfig ARM_SCMI_HAVE_SHMEM 41a7b1138bSIgor Skalkin bool 42a7b1138bSIgor Skalkin help 43a7b1138bSIgor Skalkin This declares whether a shared memory based transport for SCMI is 44a7b1138bSIgor Skalkin available. 45a7b1138bSIgor Skalkin 46f301bba0SPeter Hilberconfig ARM_SCMI_HAVE_MSG 47f301bba0SPeter Hilber bool 48f301bba0SPeter Hilber help 49f301bba0SPeter Hilber This declares whether a message passing based transport for SCMI is 50f301bba0SPeter Hilber available. 51f301bba0SPeter Hilber 52e8419c24SCristian Marussiconfig ARM_SCMI_TRANSPORT_MAILBOX 53e8419c24SCristian Marussi bool "SCMI transport based on Mailbox" 54e8419c24SCristian Marussi depends on MAILBOX 55e8419c24SCristian Marussi select ARM_SCMI_HAVE_TRANSPORT 56a7b1138bSIgor Skalkin select ARM_SCMI_HAVE_SHMEM 57e8419c24SCristian Marussi default y 58e8419c24SCristian Marussi help 59e8419c24SCristian Marussi Enable mailbox based transport for SCMI. 60e8419c24SCristian Marussi 61e8419c24SCristian Marussi If you want the ARM SCMI PROTOCOL stack to include support for a 62e8419c24SCristian Marussi transport based on mailboxes, answer Y. 63e8419c24SCristian Marussi 645f90f189SEtienne Carriereconfig ARM_SCMI_TRANSPORT_OPTEE 655f90f189SEtienne Carriere bool "SCMI transport based on OP-TEE service" 665f90f189SEtienne Carriere depends on OPTEE=y || OPTEE=ARM_SCMI_PROTOCOL 675f90f189SEtienne Carriere select ARM_SCMI_HAVE_TRANSPORT 685f90f189SEtienne Carriere select ARM_SCMI_HAVE_SHMEM 695e114ad9SEtienne Carriere select ARM_SCMI_HAVE_MSG 705f90f189SEtienne Carriere default y 715f90f189SEtienne Carriere help 725f90f189SEtienne Carriere This enables the OP-TEE service based transport for SCMI. 735f90f189SEtienne Carriere 745f90f189SEtienne Carriere If you want the ARM SCMI PROTOCOL stack to include support for a 755f90f189SEtienne Carriere transport based on OP-TEE SCMI service, answer Y. 765f90f189SEtienne Carriere 77e8419c24SCristian Marussiconfig ARM_SCMI_TRANSPORT_SMC 78e8419c24SCristian Marussi bool "SCMI transport based on SMC" 79e8419c24SCristian Marussi depends on HAVE_ARM_SMCCC_DISCOVERY 80e8419c24SCristian Marussi select ARM_SCMI_HAVE_TRANSPORT 81a7b1138bSIgor Skalkin select ARM_SCMI_HAVE_SHMEM 82e8419c24SCristian Marussi default y 83e8419c24SCristian Marussi help 84e8419c24SCristian Marussi Enable SMC based transport for SCMI. 85e8419c24SCristian Marussi 86e8419c24SCristian Marussi If you want the ARM SCMI PROTOCOL stack to include support for a 87e8419c24SCristian Marussi transport based on SMC, answer Y. 88e8419c24SCristian Marussi 890bfdca8aSCristian Marussiconfig ARM_SCMI_TRANSPORT_SMC_ATOMIC_ENABLE 900bfdca8aSCristian Marussi bool "Enable atomic mode support for SCMI SMC transport" 910bfdca8aSCristian Marussi depends on ARM_SCMI_TRANSPORT_SMC 920bfdca8aSCristian Marussi help 930bfdca8aSCristian Marussi Enable support of atomic operation for SCMI SMC based transport. 940bfdca8aSCristian Marussi 950bfdca8aSCristian Marussi If you want the SCMI SMC based transport to operate in atomic 960bfdca8aSCristian Marussi mode, avoiding any kind of sleeping behaviour for selected 970bfdca8aSCristian Marussi transactions on the TX path, answer Y. 980bfdca8aSCristian Marussi Enabling atomic mode operations allows any SCMI driver using this 990bfdca8aSCristian Marussi transport to optionally ask for atomic SCMI transactions and operate 1000bfdca8aSCristian Marussi in atomic context too, at the price of using a number of busy-waiting 1010bfdca8aSCristian Marussi primitives all over instead. If unsure say N. 1020bfdca8aSCristian Marussi 10346abe13bSIgor Skalkinconfig ARM_SCMI_TRANSPORT_VIRTIO 10446abe13bSIgor Skalkin bool "SCMI transport based on VirtIO" 105c90521a0SCristian Marussi depends on VIRTIO=y || VIRTIO=ARM_SCMI_PROTOCOL 10646abe13bSIgor Skalkin select ARM_SCMI_HAVE_TRANSPORT 10746abe13bSIgor Skalkin select ARM_SCMI_HAVE_MSG 10846abe13bSIgor Skalkin help 10946abe13bSIgor Skalkin This enables the virtio based transport for SCMI. 11046abe13bSIgor Skalkin 11146abe13bSIgor Skalkin If you want the ARM SCMI PROTOCOL stack to include support for a 11246abe13bSIgor Skalkin transport based on VirtIO, answer Y. 11346abe13bSIgor Skalkin 114530897ecSCristian Marussiconfig ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE 115530897ecSCristian Marussi bool "SCMI VirtIO transport Version 1 compliance" 116530897ecSCristian Marussi depends on ARM_SCMI_TRANSPORT_VIRTIO 117530897ecSCristian Marussi default y 118530897ecSCristian Marussi help 119530897ecSCristian Marussi This enforces strict compliance with VirtIO Version 1 specification. 120530897ecSCristian Marussi 121530897ecSCristian Marussi If you want the ARM SCMI VirtIO transport layer to refuse to work 122530897ecSCristian Marussi with Legacy VirtIO backends and instead support only VirtIO Version 1 123530897ecSCristian Marussi devices (or above), answer Y. 124530897ecSCristian Marussi 125530897ecSCristian Marussi If you want instead to support also old Legacy VirtIO backends (like 126530897ecSCristian Marussi the ones implemented by kvmtool) and let the core Kernel VirtIO layer 127530897ecSCristian Marussi take care of the needed conversions, say N. 128530897ecSCristian Marussi 1295a3b7185SCristian Marussiconfig ARM_SCMI_TRANSPORT_VIRTIO_ATOMIC_ENABLE 1305a3b7185SCristian Marussi bool "Enable atomic mode for SCMI VirtIO transport" 1315a3b7185SCristian Marussi depends on ARM_SCMI_TRANSPORT_VIRTIO 1325a3b7185SCristian Marussi help 1335a3b7185SCristian Marussi Enable support of atomic operation for SCMI VirtIO based transport. 1345a3b7185SCristian Marussi 1355a3b7185SCristian Marussi If you want the SCMI VirtIO based transport to operate in atomic 1365a3b7185SCristian Marussi mode, avoiding any kind of sleeping behaviour for selected 1375a3b7185SCristian Marussi transactions on the TX path, answer Y. 1385a3b7185SCristian Marussi 1395a3b7185SCristian Marussi Enabling atomic mode operations allows any SCMI driver using this 1405a3b7185SCristian Marussi transport to optionally ask for atomic SCMI transactions and operate 1415a3b7185SCristian Marussi in atomic context too, at the price of using a number of busy-waiting 1425a3b7185SCristian Marussi primitives all over instead. If unsure say N. 1435a3b7185SCristian Marussi 144e8419c24SCristian Marussiendif #ARM_SCMI_PROTOCOL 145e8419c24SCristian Marussi 146e8419c24SCristian Marussiconfig ARM_SCMI_POWER_DOMAIN 147e8419c24SCristian Marussi tristate "SCMI power domain driver" 148e8419c24SCristian Marussi depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF) 149e8419c24SCristian Marussi default y 150e8419c24SCristian Marussi select PM_GENERIC_DOMAINS if PM 151e8419c24SCristian Marussi help 152e8419c24SCristian Marussi This enables support for the SCMI power domains which can be 153e8419c24SCristian Marussi enabled or disabled via the SCP firmware 154e8419c24SCristian Marussi 155e8419c24SCristian Marussi This driver can also be built as a module. If so, the module 156e8419c24SCristian Marussi will be called scmi_pm_domain. Note this may needed early in boot 157e8419c24SCristian Marussi before rootfs may be available. 158e8419c24SCristian Marussi 1592c4b97feSCristian Marussiconfig ARM_SCMI_POWER_CONTROL 1602c4b97feSCristian Marussi tristate "SCMI system power control driver" 1612c4b97feSCristian Marussi depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF) 1622c4b97feSCristian Marussi help 1632c4b97feSCristian Marussi This enables System Power control logic which binds system shutdown or 1642c4b97feSCristian Marussi reboot actions to SCMI System Power notifications generated by SCP 1652c4b97feSCristian Marussi firmware. 1662c4b97feSCristian Marussi 1672c4b97feSCristian Marussi This driver can also be built as a module. If so, the module will be 1682c4b97feSCristian Marussi called scmi_power_control. Note this may needed early in boot to catch 1692c4b97feSCristian Marussi early shutdown/reboot SCMI requests. 1702c4b97feSCristian Marussi 171e8419c24SCristian Marussiendmenu 172