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

Lee Jones lee.jones at linaro.org
Fri Aug 12 04:02:01 PDT 2016


On Thu, 11 Aug 2016, Suman Anna wrote:

> 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);
> +	}
> +

+1 for getting the functionality out of core code.

-100 for having to jump though all these hoops.

If you are going to keep all of this, I would at least tuck it away in
a header file or something.

>  	m3_ipc->mbox_client.dev = dev;
>  	m3_ipc->mbox_client.tx_done = NULL;
>  	m3_ipc->mbox_client.tx_prepare = NULL;

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog



More information about the linux-arm-kernel mailing list