Merge tag 'arm-dt-6.0' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[linux-2.6-microblaze.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_HAVE_TRANSPORT
27         bool
28         help
29           This declares whether at least one SCMI transport has been configured.
30           Used to trigger a build bug when trying to build SCMI without any
31           configured transport.
32
33 config ARM_SCMI_HAVE_SHMEM
34         bool
35         help
36           This declares whether a shared memory based transport for SCMI is
37           available.
38
39 config ARM_SCMI_HAVE_MSG
40         bool
41         help
42           This declares whether a message passing based transport for SCMI is
43           available.
44
45 config ARM_SCMI_TRANSPORT_MAILBOX
46         bool "SCMI transport based on Mailbox"
47         depends on MAILBOX
48         select ARM_SCMI_HAVE_TRANSPORT
49         select ARM_SCMI_HAVE_SHMEM
50         default y
51         help
52           Enable mailbox based transport for SCMI.
53
54           If you want the ARM SCMI PROTOCOL stack to include support for a
55           transport based on mailboxes, answer Y.
56
57 config ARM_SCMI_TRANSPORT_OPTEE
58         bool "SCMI transport based on OP-TEE service"
59         depends on OPTEE=y || OPTEE=ARM_SCMI_PROTOCOL
60         select ARM_SCMI_HAVE_TRANSPORT
61         select ARM_SCMI_HAVE_SHMEM
62         select ARM_SCMI_HAVE_MSG
63         default y
64         help
65           This enables the OP-TEE service based transport for SCMI.
66
67           If you want the ARM SCMI PROTOCOL stack to include support for a
68           transport based on OP-TEE SCMI service, answer Y.
69
70 config ARM_SCMI_TRANSPORT_SMC
71         bool "SCMI transport based on SMC"
72         depends on HAVE_ARM_SMCCC_DISCOVERY
73         select ARM_SCMI_HAVE_TRANSPORT
74         select ARM_SCMI_HAVE_SHMEM
75         default y
76         help
77           Enable SMC based transport for SCMI.
78
79           If you want the ARM SCMI PROTOCOL stack to include support for a
80           transport based on SMC, answer Y.
81
82 config ARM_SCMI_TRANSPORT_SMC_ATOMIC_ENABLE
83         bool "Enable atomic mode support for SCMI SMC transport"
84         depends on ARM_SCMI_TRANSPORT_SMC
85         help
86           Enable support of atomic operation for SCMI SMC based transport.
87
88           If you want the SCMI SMC based transport to operate in atomic
89           mode, avoiding any kind of sleeping behaviour for selected
90           transactions on the TX path, answer Y.
91           Enabling atomic mode operations allows any SCMI driver using this
92           transport to optionally ask for atomic SCMI transactions and operate
93           in atomic context too, at the price of using a number of busy-waiting
94           primitives all over instead. If unsure say N.
95
96 config ARM_SCMI_TRANSPORT_VIRTIO
97         bool "SCMI transport based on VirtIO"
98         depends on VIRTIO=y || VIRTIO=ARM_SCMI_PROTOCOL
99         select ARM_SCMI_HAVE_TRANSPORT
100         select ARM_SCMI_HAVE_MSG
101         help
102           This enables the virtio based transport for SCMI.
103
104           If you want the ARM SCMI PROTOCOL stack to include support for a
105           transport based on VirtIO, answer Y.
106
107 config ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE
108         bool "SCMI VirtIO transport Version 1 compliance"
109         depends on ARM_SCMI_TRANSPORT_VIRTIO
110         default y
111         help
112           This enforces strict compliance with VirtIO Version 1 specification.
113
114           If you want the ARM SCMI VirtIO transport layer to refuse to work
115           with Legacy VirtIO backends and instead support only VirtIO Version 1
116           devices (or above), answer Y.
117
118           If you want instead to support also old Legacy VirtIO backends (like
119           the ones implemented by kvmtool) and let the core Kernel VirtIO layer
120           take care of the needed conversions, say N.
121
122 config ARM_SCMI_TRANSPORT_VIRTIO_ATOMIC_ENABLE
123         bool "Enable atomic mode for SCMI VirtIO transport"
124         depends on ARM_SCMI_TRANSPORT_VIRTIO
125         help
126           Enable support of atomic operation for SCMI VirtIO based transport.
127
128           If you want the SCMI VirtIO based transport to operate in atomic
129           mode, avoiding any kind of sleeping behaviour for selected
130           transactions on the TX path, answer Y.
131
132           Enabling atomic mode operations allows any SCMI driver using this
133           transport to optionally ask for atomic SCMI transactions and operate
134           in atomic context too, at the price of using a number of busy-waiting
135           primitives all over instead. If unsure say N.
136
137 endif #ARM_SCMI_PROTOCOL
138
139 config ARM_SCMI_POWER_DOMAIN
140         tristate "SCMI power domain driver"
141         depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
142         default y
143         select PM_GENERIC_DOMAINS if PM
144         help
145           This enables support for the SCMI power domains which can be
146           enabled or disabled via the SCP firmware
147
148           This driver can also be built as a module.  If so, the module
149           will be called scmi_pm_domain. Note this may needed early in boot
150           before rootfs may be available.
151
152 config ARM_SCMI_POWER_CONTROL
153         tristate "SCMI system power control driver"
154         depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
155         help
156           This enables System Power control logic which binds system shutdown or
157           reboot actions to SCMI System Power notifications generated by SCP
158           firmware.
159
160           This driver can also be built as a module.  If so, the module will be
161           called scmi_power_control. Note this may needed early in boot to catch
162           early shutdown/reboot SCMI requests.
163
164 endmenu