summaryrefslogtreecommitdiffstats
path: root/meta-egvirt/recipes-kernel/linux/linux-yocto/virtio-scmi/0006-firmware-arm_scmi-Add-optional-link_supplier-transpo.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-egvirt/recipes-kernel/linux/linux-yocto/virtio-scmi/0006-firmware-arm_scmi-Add-optional-link_supplier-transpo.patch')
-rw-r--r--meta-egvirt/recipes-kernel/linux/linux-yocto/virtio-scmi/0006-firmware-arm_scmi-Add-optional-link_supplier-transpo.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/meta-egvirt/recipes-kernel/linux/linux-yocto/virtio-scmi/0006-firmware-arm_scmi-Add-optional-link_supplier-transpo.patch b/meta-egvirt/recipes-kernel/linux/linux-yocto/virtio-scmi/0006-firmware-arm_scmi-Add-optional-link_supplier-transpo.patch
new file mode 100644
index 00000000..0f5180fa
--- /dev/null
+++ b/meta-egvirt/recipes-kernel/linux/linux-yocto/virtio-scmi/0006-firmware-arm_scmi-Add-optional-link_supplier-transpo.patch
@@ -0,0 +1,54 @@
+From f0d7ff1f10ab846bf32bae3b7d32bf95653954fa Mon Sep 17 00:00:00 2001
+From: Peter Hilber <peter.hilber@opensynergy.com>
+Date: Thu, 5 Nov 2020 22:21:12 +0100
+Subject: [PATCH] firmware: arm_scmi: Add optional link_supplier() transport op
+
+For the scmi-virtio transport, it might not be possible to refer to the
+proper virtio device at device tree build time. Therefore, add an op
+which will allow scmi-virtio to dynamically link to the proper virtio
+device during probe.
+
+Signed-off-by: Peter Hilber <peter.hilber@opensynergy.com>
+Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
+---
+ drivers/firmware/arm_scmi/common.h | 2 ++
+ drivers/firmware/arm_scmi/driver.c | 6 ++++++
+ 2 files changed, 8 insertions(+)
+
+diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h
+index ae5db602e45d..2f55ac71555a 100644
+--- a/drivers/firmware/arm_scmi/common.h
++++ b/drivers/firmware/arm_scmi/common.h
+@@ -202,6 +202,7 @@ struct scmi_chan_info {
+ /**
+ * struct scmi_transport_ops - Structure representing a SCMI transport ops
+ *
++ * @link_supplier: Optional callback to add link to a supplier device
+ * @chan_available: Callback to check if channel is available or not
+ * @chan_setup: Callback to allocate and setup a channel
+ * @chan_free: Callback to free a channel
+@@ -217,6 +218,7 @@ struct scmi_chan_info {
+ * @poll_done: Callback to poll transfer status
+ */
+ struct scmi_transport_ops {
++ int (*link_supplier)(struct device *dev);
+ bool (*chan_available)(struct device *dev, int idx);
+ int (*chan_setup)(struct scmi_chan_info *cinfo, struct device *dev,
+ bool tx);
+diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
+index 27dd43dcff5b..0b70f9ef9477 100644
+--- a/drivers/firmware/arm_scmi/driver.c
++++ b/drivers/firmware/arm_scmi/driver.c
+@@ -826,6 +826,12 @@ static int scmi_probe(struct platform_device *pdev)
+ handle->dev = info->dev;
+ handle->version = &info->version;
+
++ if (desc->ops->link_supplier) {
++ ret = desc->ops->link_supplier(dev);
++ if (ret)
++ return ret;
++ }
++
+ ret = scmi_txrx_setup(info, dev, SCMI_PROTOCOL_BASE);
+ if (ret)
+ return ret;