[PATCH] soc: ti: wkup_m3_ipc: switch to using remoteproc OF infrastructure

Suman Anna s-anna at ti.com
Thu Aug 11 17:35:29 PDT 2016


The remoteproc framework has been enhanced recently to provide new
OF API to retrieve a remoteproc handle by client drivers through a
standard 'rprocs' property in client nodes. The wkup_m3_ipc driver
has been using a custom 'ti,rproc' property until now, switch this
to use this new OF infrastructure. The wkup_m3_ipc driver has been
fixed up to provide backward compatibility for older DTBs by
replacing the older property with the standard newer property.

The wkup_m3_ipc binding has also been updated accordingly.

Signed-off-by: Suman Anna <s-anna at ti.com>
---
This patch is based on the discussion [1] for introducing new standard
OF API in remoteproc core series [2] and the exporting of couple of
functions in OF base code [3].

With this in place, the remoteproc core need not be looking for the
TI specific property anymore. I will submit the DTS changes once this
makes it to mainline.

regards
Suman

[1] https://patchwork.kernel.org/patch/9237767/
[2] http://marc.info/?l=linux-kernel&m=146894341701010&w=2
[3] https://patchwork.kernel.org/patch/9276181/

 .../devicetree/bindings/soc/ti/wkup_m3_ipc.txt     |  9 ++++++--
 drivers/soc/ti/wkup_m3_ipc.c                       | 26 +++++++++++++++++++++-
 2 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/soc/ti/wkup_m3_ipc.txt b/Documentation/devicetree/bindings/soc/ti/wkup_m3_ipc.txt
index 401550487ed6..2ea7dd91acff 100644
--- a/Documentation/devicetree/bindings/soc/ti/wkup_m3_ipc.txt
+++ b/Documentation/devicetree/bindings/soc/ti/wkup_m3_ipc.txt
@@ -23,12 +23,17 @@ Required properties:
 			with the Wakeup M3 processor
 - interrupts:		Contains the interrupt information for the wkup_m3
 			interrupt that signals the MPU.
-- ti,rproc:		phandle to the wkup_m3 rproc node so the IPC driver
+- rprocs:		phandle to the wkup_m3 rproc node so the IPC driver
 			can boot it.
 - mboxes:		phandles used by IPC framework to get correct mbox
 			channel for communication. Must point to appropriate
 			mbox_wkupm3 child node.
 
+Deprecated properties:
+----------------------
+- ti,rproc:		This property has been replaced with the "rprocs"
+			property.
+
 Example:
 --------
 /* AM33xx */
@@ -48,7 +53,7 @@ Example:
 				compatible = "ti,am3352-wkup-m3-ipc";
 				reg = <0x1324 0x24>;
 				interrupts = <78>;
-				ti,rproc = <&wkup_m3>;
+				rprocs = <&wkup_m3>;
 				mboxes = <&mailbox &mbox_wkupm3>;
 			};
 
diff --git a/drivers/soc/ti/wkup_m3_ipc.c b/drivers/soc/ti/wkup_m3_ipc.c
index 8823cc81ae45..86085f9bf6a8 100644
--- a/drivers/soc/ti/wkup_m3_ipc.c
+++ b/drivers/soc/ti/wkup_m3_ipc.c
@@ -1,7 +1,7 @@
 /*
  * AMx3 Wkup M3 IPC driver
  *
- * Copyright (C) 2015 Texas Instruments, Inc.
+ * Copyright (C) 2015-2016 Texas Instruments, Inc.
  *
  * Dave Gerlach <d-gerlach at ti.com>
  *
@@ -390,6 +390,8 @@ static int wkup_m3_ipc_probe(struct platform_device *pdev)
 	struct resource *res;
 	struct task_struct *task;
 	struct wkup_m3_ipc *m3_ipc;
+	struct property *nprop, *oprop;
+	const char nprop_name[] = "rprocs";
 
 	m3_ipc = devm_kzalloc(dev, sizeof(*m3_ipc), GFP_KERNEL);
 	if (!m3_ipc)
@@ -415,6 +417,28 @@ static int wkup_m3_ipc_probe(struct platform_device *pdev)
 		return ret;
 	}
 
+	/* provide compatibility for older DTBs using ti,rproc property */
+	nprop = of_find_property(dev->of_node, "rprocs", NULL);
+	if (!nprop) {
+		oprop = of_find_property(dev->of_node, "ti,rproc", NULL);
+		if (!oprop) {
+			dev_err(&pdev->dev, "node is missing ti,rproc property\n");
+			return -ENODEV;
+		}
+
+		nprop = kzalloc(sizeof(*nprop) + sizeof(nprop_name),
+				GFP_KERNEL);
+		if (!nprop)
+			return -ENOMEM;
+
+		nprop->name = (char *)nprop + sizeof(*nprop);
+		snprintf(nprop->name, sizeof(nprop_name), nprop_name);
+		nprop->value = oprop->value;
+		nprop->length = oprop->length;
+		of_update_property(dev->of_node, nprop);
+		of_remove_property(dev->of_node, oprop);
+	}
+
 	m3_ipc->mbox_client.dev = dev;
 	m3_ipc->mbox_client.tx_done = NULL;
 	m3_ipc->mbox_client.tx_prepare = NULL;
-- 
2.9.0




More information about the linux-arm-kernel mailing list