virtualization/linux-yocto: Backport virtio SCMI driver.
[AGL/meta-agl-devel.git] / meta-egvirt / recipes-kernel / linux / linux-yocto / virtio-scmi / 0001-firmware-arm_scmi-smccc-mailbox-Make-shmem-based-tra.patch
1 From 36269e8f5fa1f33a793c472935affe3039c052bd Mon Sep 17 00:00:00 2001
2 From: Igor Skalkin <igor.skalkin@opensynergy.com>
3 Date: Thu, 5 Nov 2020 22:21:07 +0100
4 Subject: [PATCH] firmware: arm_scmi, smccc, mailbox: Make shmem based
5  transports optional
6
7 Upon adding the virtio transport in this patch series, SCMI will also
8 work without shared memory based transports. Also, the mailbox transport
9 may not be needed if the smc transport is used.
10
11 - Compile shmem.c only if a shmem based transport is available.
12
13 - Remove hard dependency of SCMI on mailbox.
14
15 Co-developed-by: Peter Hilber <peter.hilber@opensynergy.com>
16 Signed-off-by: Peter Hilber <peter.hilber@opensynergy.com>
17 Signed-off-by: Igor Skalkin <igor.skalkin@opensynergy.com>
18 Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
19 ---
20  drivers/firmware/Kconfig           | 9 ++++++++-
21  drivers/firmware/arm_scmi/Makefile | 2 +-
22  drivers/firmware/arm_scmi/common.h | 2 ++
23  drivers/firmware/arm_scmi/driver.c | 2 ++
24  drivers/firmware/smccc/Kconfig     | 1 +
25  drivers/mailbox/Kconfig            | 1 +
26  6 files changed, 15 insertions(+), 2 deletions(-)
27
28 diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
29 index 3315e3c21586..30a85d38d0c0 100644
30 --- a/drivers/firmware/Kconfig
31 +++ b/drivers/firmware/Kconfig
32 @@ -9,7 +9,7 @@ menu "Firmware Drivers"
33  config ARM_SCMI_PROTOCOL
34         tristate "ARM System Control and Management Interface (SCMI) Message Protocol"
35         depends on ARM || ARM64 || COMPILE_TEST
36 -       depends on MAILBOX
37 +       depends on ARM_SCMI_HAVE_SHMEM
38         help
39           ARM System Control and Management Interface (SCMI) protocol is a
40           set of operating system-independent software interfaces that are
41 @@ -27,6 +27,13 @@ config ARM_SCMI_PROTOCOL
42           This protocol library provides interface for all the client drivers
43           making use of the features offered by the SCMI.
44  
45 +config ARM_SCMI_HAVE_SHMEM
46 +       bool
47 +       default n
48 +       help
49 +         This declares whether a shared memory based transport for SCMI is
50 +         available.
51 +
52  config ARM_SCMI_POWER_DOMAIN
53         tristate "SCMI power domain driver"
54         depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
55 diff --git a/drivers/firmware/arm_scmi/Makefile b/drivers/firmware/arm_scmi/Makefile
56 index bc0d54f8e861..3cc7fa40a464 100644
57 --- a/drivers/firmware/arm_scmi/Makefile
58 +++ b/drivers/firmware/arm_scmi/Makefile
59 @@ -1,7 +1,7 @@
60  # SPDX-License-Identifier: GPL-2.0-only
61  scmi-bus-y = bus.o
62  scmi-driver-y = driver.o notify.o
63 -scmi-transport-y = shmem.o
64 +scmi-transport-$(CONFIG_ARM_SCMI_HAVE_SHMEM) = shmem.o
65  scmi-transport-$(CONFIG_MAILBOX) += mailbox.o
66  scmi-transport-$(CONFIG_HAVE_ARM_SMCCC_DISCOVERY) += smc.o
67  scmi-protocols-y = base.o clock.o perf.o power.o reset.o sensors.o system.o
68 diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h
69 index 65063fa948d4..aed192238177 100644
70 --- a/drivers/firmware/arm_scmi/common.h
71 +++ b/drivers/firmware/arm_scmi/common.h
72 @@ -242,7 +242,9 @@ struct scmi_desc {
73         int max_msg_size;
74  };
75  
76 +#ifdef CONFIG_MAILBOX
77  extern const struct scmi_desc scmi_mailbox_desc;
78 +#endif
79  #ifdef CONFIG_HAVE_ARM_SMCCC
80  extern const struct scmi_desc scmi_smc_desc;
81  #endif
82 diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
83 index 6b2ce3f28f7b..7efbf66f117b 100644
84 --- a/drivers/firmware/arm_scmi/driver.c
85 +++ b/drivers/firmware/arm_scmi/driver.c
86 @@ -918,7 +918,9 @@ ATTRIBUTE_GROUPS(versions);
87  
88  /* Each compatible listed below must have descriptor associated with it */
89  static const struct of_device_id scmi_of_match[] = {
90 +#ifdef CONFIG_MAILBOX
91         { .compatible = "arm,scmi", .data = &scmi_mailbox_desc },
92 +#endif
93  #ifdef CONFIG_HAVE_ARM_SMCCC_DISCOVERY
94         { .compatible = "arm,scmi-smc", .data = &scmi_smc_desc},
95  #endif
96 diff --git a/drivers/firmware/smccc/Kconfig b/drivers/firmware/smccc/Kconfig
97 index 15e7466179a6..69c4d6cabf62 100644
98 --- a/drivers/firmware/smccc/Kconfig
99 +++ b/drivers/firmware/smccc/Kconfig
100 @@ -9,6 +9,7 @@ config HAVE_ARM_SMCCC_DISCOVERY
101         bool
102         depends on ARM_PSCI_FW
103         default y
104 +       select ARM_SCMI_HAVE_SHMEM
105         help
106          SMCCC v1.0 lacked discoverability and hence PSCI v1.0 was updated
107          to add SMCCC discovery mechanism though the PSCI firmware
108 diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig
109 index 05b1009e2820..5ffe1ab0c869 100644
110 --- a/drivers/mailbox/Kconfig
111 +++ b/drivers/mailbox/Kconfig
112 @@ -1,6 +1,7 @@
113  # SPDX-License-Identifier: GPL-2.0-only
114  menuconfig MAILBOX
115         bool "Mailbox Hardware Support"
116 +       select ARM_SCMI_HAVE_SHMEM
117         help
118           Mailbox is a framework to control hardware communication between
119           on-chip processors through queued messages and interrupt driven