1# SPDX-License-Identifier: GPL-2.0-only
2menu "ARM System Control and Management Interface Protocol"
3
4config ARM_SCMI_PROTOCOL
5	tristate "ARM System Control and Management Interface (SCMI) Message Protocol"
6	depends on ARM || ARM64 || COMPILE_TEST
7	help
8	  ARM System Control and Management Interface (SCMI) protocol is a
9	  set of operating system-independent software interfaces that are
10	  used in system management. SCMI is extensible and currently provides
11	  interfaces for: Discovery and self-description of the interfaces
12	  it supports, Power domain management which is the ability to place
13	  a given device or domain into the various power-saving states that
14	  it supports, Performance management which is the ability to control
15	  the performance of a domain that is composed of compute engines
16	  such as application processors and other accelerators, Clock
17	  management which is the ability to set and inquire rates on platform
18	  managed clocks and Sensor management which is the ability to read
19	  sensor data, and be notified of sensor value.
20
21	  This protocol library provides interface for all the client drivers
22	  making use of the features offered by the SCMI.
23
24if ARM_SCMI_PROTOCOL
25
26config ARM_SCMI_NEED_DEBUGFS
27	bool
28	help
29	  This declares whether at least one SCMI facility is configured
30	  which needs debugfs support. When selected causess the creation
31	  of a common SCMI debugfs root directory.
32
33config ARM_SCMI_RAW_MODE_SUPPORT
34	bool "Enable support for SCMI Raw transmission mode"
35	depends on DEBUG_FS
36	select ARM_SCMI_NEED_DEBUGFS
37	help
38	  Enable support for SCMI Raw transmission mode.
39
40	  If enabled allows the direct injection and snooping of SCMI bare
41	  messages through a dedicated debugfs interface.
42	  It is meant to be used by SCMI compliance/testing suites.
43
44	  When enabled regular SCMI drivers interactions are inhibited in
45	  order to avoid unexpected interactions with the SCMI Raw message
46	  flow. If unsure say N.
47
48config ARM_SCMI_RAW_MODE_SUPPORT_COEX
49	bool "Allow SCMI Raw mode coexistence with normal SCMI stack"
50	depends on ARM_SCMI_RAW_MODE_SUPPORT
51	help
52	  Allow SCMI Raw transmission mode to coexist with normal SCMI stack.
53
54	  This will allow regular SCMI drivers to register with the core and
55	  operate normally, thing which could make an SCMI test suite using the
56	  SCMI Raw mode support unreliable. If unsure, say N.
57
58config ARM_SCMI_HAVE_TRANSPORT
59	bool
60	help
61	  This declares whether at least one SCMI transport has been configured.
62	  Used to trigger a build bug when trying to build SCMI without any
63	  configured transport.
64
65config ARM_SCMI_HAVE_SHMEM
66	bool
67	help
68	  This declares whether a shared memory based transport for SCMI is
69	  available.
70
71config ARM_SCMI_HAVE_MSG
72	bool
73	help
74	  This declares whether a message passing based transport for SCMI is
75	  available.
76
77config ARM_SCMI_TRANSPORT_MAILBOX
78	bool "SCMI transport based on Mailbox"
79	depends on MAILBOX
80	select ARM_SCMI_HAVE_TRANSPORT
81	select ARM_SCMI_HAVE_SHMEM
82	default y
83	help
84	  Enable mailbox based transport for SCMI.
85
86	  If you want the ARM SCMI PROTOCOL stack to include support for a
87	  transport based on mailboxes, answer Y.
88
89config ARM_SCMI_TRANSPORT_OPTEE
90	bool "SCMI transport based on OP-TEE service"
91	depends on OPTEE=y || OPTEE=ARM_SCMI_PROTOCOL
92	select ARM_SCMI_HAVE_TRANSPORT
93	select ARM_SCMI_HAVE_SHMEM
94	select ARM_SCMI_HAVE_MSG
95	default y
96	help
97	  This enables the OP-TEE service based transport for SCMI.
98
99	  If you want the ARM SCMI PROTOCOL stack to include support for a
100	  transport based on OP-TEE SCMI service, answer Y.
101
102config ARM_SCMI_TRANSPORT_SMC
103	bool "SCMI transport based on SMC"
104	depends on HAVE_ARM_SMCCC_DISCOVERY
105	select ARM_SCMI_HAVE_TRANSPORT
106	select ARM_SCMI_HAVE_SHMEM
107	default y
108	help
109	  Enable SMC based transport for SCMI.
110
111	  If you want the ARM SCMI PROTOCOL stack to include support for a
112	  transport based on SMC, answer Y.
113
114config ARM_SCMI_TRANSPORT_SMC_ATOMIC_ENABLE
115	bool "Enable atomic mode support for SCMI SMC transport"
116	depends on ARM_SCMI_TRANSPORT_SMC
117	help
118	  Enable support of atomic operation for SCMI SMC based transport.
119
120	  If you want the SCMI SMC based transport to operate in atomic
121	  mode, avoiding any kind of sleeping behaviour for selected
122	  transactions on the TX path, answer Y.
123	  Enabling atomic mode operations allows any SCMI driver using this
124	  transport to optionally ask for atomic SCMI transactions and operate
125	  in atomic context too, at the price of using a number of busy-waiting
126	  primitives all over instead. If unsure say N.
127
128config ARM_SCMI_TRANSPORT_VIRTIO
129	bool "SCMI transport based on VirtIO"
130	depends on VIRTIO=y || VIRTIO=ARM_SCMI_PROTOCOL
131	select ARM_SCMI_HAVE_TRANSPORT
132	select ARM_SCMI_HAVE_MSG
133	help
134	  This enables the virtio based transport for SCMI.
135
136	  If you want the ARM SCMI PROTOCOL stack to include support for a
137	  transport based on VirtIO, answer Y.
138
139config ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE
140	bool "SCMI VirtIO transport Version 1 compliance"
141	depends on ARM_SCMI_TRANSPORT_VIRTIO
142	default y
143	help
144	  This enforces strict compliance with VirtIO Version 1 specification.
145
146	  If you want the ARM SCMI VirtIO transport layer to refuse to work
147	  with Legacy VirtIO backends and instead support only VirtIO Version 1
148	  devices (or above), answer Y.
149
150	  If you want instead to support also old Legacy VirtIO backends (like
151	  the ones implemented by kvmtool) and let the core Kernel VirtIO layer
152	  take care of the needed conversions, say N.
153
154config ARM_SCMI_TRANSPORT_VIRTIO_ATOMIC_ENABLE
155	bool "Enable atomic mode for SCMI VirtIO transport"
156	depends on ARM_SCMI_TRANSPORT_VIRTIO
157	help
158	  Enable support of atomic operation for SCMI VirtIO based transport.
159
160	  If you want the SCMI VirtIO based transport to operate in atomic
161	  mode, avoiding any kind of sleeping behaviour for selected
162	  transactions on the TX path, answer Y.
163
164	  Enabling atomic mode operations allows any SCMI driver using this
165	  transport to optionally ask for atomic SCMI transactions and operate
166	  in atomic context too, at the price of using a number of busy-waiting
167	  primitives all over instead. If unsure say N.
168
169endif #ARM_SCMI_PROTOCOL
170
171config ARM_SCMI_POWER_DOMAIN
172	tristate "SCMI power domain driver"
173	depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
174	default y
175	select PM_GENERIC_DOMAINS if PM
176	help
177	  This enables support for the SCMI power domains which can be
178	  enabled or disabled via the SCP firmware
179
180	  This driver can also be built as a module.  If so, the module
181	  will be called scmi_pm_domain. Note this may needed early in boot
182	  before rootfs may be available.
183
184config ARM_SCMI_POWER_CONTROL
185	tristate "SCMI system power control driver"
186	depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
187	help
188	  This enables System Power control logic which binds system shutdown or
189	  reboot actions to SCMI System Power notifications generated by SCP
190	  firmware.
191
192	  This driver can also be built as a module.  If so, the module will be
193	  called scmi_power_control. Note this may needed early in boot to catch
194	  early shutdown/reboot SCMI requests.
195
196endmenu
197