[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210511002040.802226-5-peter.hilber@opensynergy.com>
Date: Tue, 11 May 2021 02:20:32 +0200
From: Peter Hilber <peter.hilber@...nsynergy.com>
To: <linux-arm-kernel@...ts.infradead.org>,
<devicetree@...r.kernel.org>
CC: Peter Hilber <peter.hilber@...nsynergy.com>,
Rob Herring <robh+dt@...nel.org>,
<linux-kernel@...r.kernel.org>, <sudeep.holla@....com>,
<souvik.chakravarty@....com>, <alex.bennee@...aro.org>,
<jean-philippe@...aro.org>, <igor.skalkin@...nsynergy.com>,
<mikhail.golubev@...nsynergy.com>,
<anton.yakovlev@...nsynergy.com>,
Vasyl Vavrychuk <Vasyl.Vavrychuk@...nsynergy.com>,
Andriy Tryshnivskyy <Andriy.Tryshnivskyy@...nsynergy.com>,
Cristian Marussi <cristian.marussi@....com>
Subject: [RFC PATCH v3 04/12] 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@...nsynergy.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 13be8dedcd6b..d60e3c26821d 100644
--- a/drivers/firmware/arm_scmi/common.h
+++ b/drivers/firmware/arm_scmi/common.h
@@ -283,6 +283,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
@@ -297,6 +298,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 b7271f8fd1c7..df526ff37c6d 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -1434,6 +1434,12 @@ static int scmi_probe(struct platform_device *pdev)
handle->devm_protocol_get = scmi_devm_protocol_get;
handle->devm_protocol_put = scmi_devm_protocol_put;
+ 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;
--
2.25.1
Powered by blists - more mailing lists