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