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
26e8419c24SCristian Marussiconfig ARM_SCMI_HAVE_TRANSPORT
27e8419c24SCristian Marussi	bool
28e8419c24SCristian Marussi	help
29e8419c24SCristian Marussi	  This declares whether at least one SCMI transport has been configured.
30e8419c24SCristian Marussi	  Used to trigger a build bug when trying to build SCMI without any
31e8419c24SCristian Marussi	  configured transport.
32e8419c24SCristian Marussi
33a7b1138bSIgor Skalkinconfig ARM_SCMI_HAVE_SHMEM
34a7b1138bSIgor Skalkin	bool
35a7b1138bSIgor Skalkin	help
36a7b1138bSIgor Skalkin	  This declares whether a shared memory based transport for SCMI is
37a7b1138bSIgor Skalkin	  available.
38a7b1138bSIgor Skalkin
39f301bba0SPeter Hilberconfig ARM_SCMI_HAVE_MSG
40f301bba0SPeter Hilber	bool
41f301bba0SPeter Hilber	help
42f301bba0SPeter Hilber	  This declares whether a message passing based transport for SCMI is
43f301bba0SPeter Hilber	  available.
44f301bba0SPeter Hilber
45e8419c24SCristian Marussiconfig ARM_SCMI_TRANSPORT_MAILBOX
46e8419c24SCristian Marussi	bool "SCMI transport based on Mailbox"
47e8419c24SCristian Marussi	depends on MAILBOX
48e8419c24SCristian Marussi	select ARM_SCMI_HAVE_TRANSPORT
49a7b1138bSIgor Skalkin	select ARM_SCMI_HAVE_SHMEM
50e8419c24SCristian Marussi	default y
51e8419c24SCristian Marussi	help
52e8419c24SCristian Marussi	  Enable mailbox based transport for SCMI.
53e8419c24SCristian Marussi
54e8419c24SCristian Marussi	  If you want the ARM SCMI PROTOCOL stack to include support for a
55e8419c24SCristian Marussi	  transport based on mailboxes, answer Y.
56e8419c24SCristian Marussi
575f90f189SEtienne Carriereconfig ARM_SCMI_TRANSPORT_OPTEE
585f90f189SEtienne Carriere	bool "SCMI transport based on OP-TEE service"
595f90f189SEtienne Carriere	depends on OPTEE=y || OPTEE=ARM_SCMI_PROTOCOL
605f90f189SEtienne Carriere	select ARM_SCMI_HAVE_TRANSPORT
615f90f189SEtienne Carriere	select ARM_SCMI_HAVE_SHMEM
625f90f189SEtienne Carriere	default y
635f90f189SEtienne Carriere	help
645f90f189SEtienne Carriere	  This enables the OP-TEE service based transport for SCMI.
655f90f189SEtienne Carriere
665f90f189SEtienne Carriere	  If you want the ARM SCMI PROTOCOL stack to include support for a
675f90f189SEtienne Carriere	  transport based on OP-TEE SCMI service, answer Y.
685f90f189SEtienne Carriere
69e8419c24SCristian Marussiconfig ARM_SCMI_TRANSPORT_SMC
70e8419c24SCristian Marussi	bool "SCMI transport based on SMC"
71e8419c24SCristian Marussi	depends on HAVE_ARM_SMCCC_DISCOVERY
72e8419c24SCristian Marussi	select ARM_SCMI_HAVE_TRANSPORT
73a7b1138bSIgor Skalkin	select ARM_SCMI_HAVE_SHMEM
74e8419c24SCristian Marussi	default y
75e8419c24SCristian Marussi	help
76e8419c24SCristian Marussi	  Enable SMC based transport for SCMI.
77e8419c24SCristian Marussi
78e8419c24SCristian Marussi	  If you want the ARM SCMI PROTOCOL stack to include support for a
79e8419c24SCristian Marussi	  transport based on SMC, answer Y.
80e8419c24SCristian Marussi
810bfdca8aSCristian Marussiconfig ARM_SCMI_TRANSPORT_SMC_ATOMIC_ENABLE
820bfdca8aSCristian Marussi	bool "Enable atomic mode support for SCMI SMC transport"
830bfdca8aSCristian Marussi	depends on ARM_SCMI_TRANSPORT_SMC
840bfdca8aSCristian Marussi	help
850bfdca8aSCristian Marussi	  Enable support of atomic operation for SCMI SMC based transport.
860bfdca8aSCristian Marussi
870bfdca8aSCristian Marussi	  If you want the SCMI SMC based transport to operate in atomic
880bfdca8aSCristian Marussi	  mode, avoiding any kind of sleeping behaviour for selected
890bfdca8aSCristian Marussi	  transactions on the TX path, answer Y.
900bfdca8aSCristian Marussi	  Enabling atomic mode operations allows any SCMI driver using this
910bfdca8aSCristian Marussi	  transport to optionally ask for atomic SCMI transactions and operate
920bfdca8aSCristian Marussi	  in atomic context too, at the price of using a number of busy-waiting
930bfdca8aSCristian Marussi	  primitives all over instead. If unsure say N.
940bfdca8aSCristian Marussi
9546abe13bSIgor Skalkinconfig ARM_SCMI_TRANSPORT_VIRTIO
9646abe13bSIgor Skalkin	bool "SCMI transport based on VirtIO"
97c90521a0SCristian Marussi	depends on VIRTIO=y || VIRTIO=ARM_SCMI_PROTOCOL
9846abe13bSIgor Skalkin	select ARM_SCMI_HAVE_TRANSPORT
9946abe13bSIgor Skalkin	select ARM_SCMI_HAVE_MSG
10046abe13bSIgor Skalkin	help
10146abe13bSIgor Skalkin	  This enables the virtio based transport for SCMI.
10246abe13bSIgor Skalkin
10346abe13bSIgor Skalkin	  If you want the ARM SCMI PROTOCOL stack to include support for a
10446abe13bSIgor Skalkin	  transport based on VirtIO, answer Y.
10546abe13bSIgor Skalkin
106530897ecSCristian Marussiconfig ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE
107530897ecSCristian Marussi	bool "SCMI VirtIO transport Version 1 compliance"
108530897ecSCristian Marussi	depends on ARM_SCMI_TRANSPORT_VIRTIO
109530897ecSCristian Marussi	default y
110530897ecSCristian Marussi	help
111530897ecSCristian Marussi	  This enforces strict compliance with VirtIO Version 1 specification.
112530897ecSCristian Marussi
113530897ecSCristian Marussi	  If you want the ARM SCMI VirtIO transport layer to refuse to work
114530897ecSCristian Marussi	  with Legacy VirtIO backends and instead support only VirtIO Version 1
115530897ecSCristian Marussi	  devices (or above), answer Y.
116530897ecSCristian Marussi
117530897ecSCristian Marussi	  If you want instead to support also old Legacy VirtIO backends (like
118530897ecSCristian Marussi	  the ones implemented by kvmtool) and let the core Kernel VirtIO layer
119530897ecSCristian Marussi	  take care of the needed conversions, say N.
120530897ecSCristian Marussi
121*5a3b7185SCristian Marussiconfig ARM_SCMI_TRANSPORT_VIRTIO_ATOMIC_ENABLE
122*5a3b7185SCristian Marussi	bool "Enable atomic mode for SCMI VirtIO transport"
123*5a3b7185SCristian Marussi	depends on ARM_SCMI_TRANSPORT_VIRTIO
124*5a3b7185SCristian Marussi	help
125*5a3b7185SCristian Marussi	  Enable support of atomic operation for SCMI VirtIO based transport.
126*5a3b7185SCristian Marussi
127*5a3b7185SCristian Marussi	  If you want the SCMI VirtIO based transport to operate in atomic
128*5a3b7185SCristian Marussi	  mode, avoiding any kind of sleeping behaviour for selected
129*5a3b7185SCristian Marussi	  transactions on the TX path, answer Y.
130*5a3b7185SCristian Marussi
131*5a3b7185SCristian Marussi	  Enabling atomic mode operations allows any SCMI driver using this
132*5a3b7185SCristian Marussi	  transport to optionally ask for atomic SCMI transactions and operate
133*5a3b7185SCristian Marussi	  in atomic context too, at the price of using a number of busy-waiting
134*5a3b7185SCristian Marussi	  primitives all over instead. If unsure say N.
135*5a3b7185SCristian Marussi
136e8419c24SCristian Marussiendif #ARM_SCMI_PROTOCOL
137e8419c24SCristian Marussi
138e8419c24SCristian Marussiconfig ARM_SCMI_POWER_DOMAIN
139e8419c24SCristian Marussi	tristate "SCMI power domain driver"
140e8419c24SCristian Marussi	depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
141e8419c24SCristian Marussi	default y
142e8419c24SCristian Marussi	select PM_GENERIC_DOMAINS if PM
143e8419c24SCristian Marussi	help
144e8419c24SCristian Marussi	  This enables support for the SCMI power domains which can be
145e8419c24SCristian Marussi	  enabled or disabled via the SCP firmware
146e8419c24SCristian Marussi
147e8419c24SCristian Marussi	  This driver can also be built as a module.  If so, the module
148e8419c24SCristian Marussi	  will be called scmi_pm_domain. Note this may needed early in boot
149e8419c24SCristian Marussi	  before rootfs may be available.
150e8419c24SCristian Marussi
151e8419c24SCristian Marussiendmenu
152