GNU Linux-libre 6.7.9-gnu
[releases.git] / drivers / firmware / arm_scmi / Kconfig
1 # SPDX-License-Identifier: GPL-2.0-only
2 menu "ARM System Control and Management Interface Protocol"
3
4 config 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
24 if ARM_SCMI_PROTOCOL
25
26 config 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
33 config 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
48 config 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
58 config 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
65 config ARM_SCMI_HAVE_SHMEM
66         bool
67         help
68           This declares whether a shared memory based transport for SCMI is
69           available.
70
71 config ARM_SCMI_HAVE_MSG
72         bool
73         help
74           This declares whether a message passing based transport for SCMI is
75           available.
76
77 config 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
89 config 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
102 config 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
114 config 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
128 config 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
139 config 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
154 config 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
169 endif #ARM_SCMI_PROTOCOL
170
171 config 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
184 config ARM_SCMI_PERF_DOMAIN
185         tristate "SCMI performance domain driver"
186         depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
187         default y
188         select PM_GENERIC_DOMAINS if PM
189         help
190           This enables support for the SCMI performance domains which can be
191           enabled or disabled via the SCP firmware.
192
193           This driver can also be built as a module. If so, the module will be
194           called scmi_perf_domain.
195
196 config ARM_SCMI_POWER_CONTROL
197         tristate "SCMI system power control driver"
198         depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
199         help
200           This enables System Power control logic which binds system shutdown or
201           reboot actions to SCMI System Power notifications generated by SCP
202           firmware.
203
204           This driver can also be built as a module.  If so, the module will be
205           called scmi_power_control. Note this may needed early in boot to catch
206           early shutdown/reboot SCMI requests.
207
208 endmenu