[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <938c4876-d284-4f11-a4ac-9f3831d3c14d@amd.com>
Date: Fri, 2 May 2025 10:40:36 -0500
From: Tanmay Shah <tanmay.shah@....com>
To: "Rob Herring (Arm)" <robh@...nel.org>,
Saravana Kannan <saravanak@...gle.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Bjorn Andersson <andersson@...nel.org>,
Mathieu Poirier <mathieu.poirier@...aro.org>, Shawn Guo
<shawnguo@...nel.org>, Sascha Hauer <s.hauer@...gutronix.de>,
Pengutronix Kernel Team <kernel@...gutronix.de>,
Fabio Estevam <festevam@...il.com>,
Patrice Chotard <patrice.chotard@...s.st.com>,
Maxime Coquelin <mcoquelin.stm32@...il.com>,
Alexandre Torgue <alexandre.torgue@...s.st.com>,
Arnaud POULIQUEN <arnaud.pouliquen@...s.st.com>,
Chen-Yu Tsai <wens@...nel.org>
Cc: devicetree@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-remoteproc@...r.kernel.org, imx@...ts.linux.dev,
linux-arm-kernel@...ts.infradead.org, linux-arm-msm@...r.kernel.org,
linux-stm32@...md-mailman.stormreply.com
Subject: Re: [PATCH v2 4/4] remoteproc: Use of_reserved_mem_region_* functions
for "memory-region"
Hello Rob,
Thanks for the patch. Please find my comments below.
On 4/23/25 2:42 PM, Rob Herring (Arm) wrote:
> Use the newly added of_reserved_mem_region_to_resource() and
> of_reserved_mem_region_count() functions to handle "memory-region"
> properties.
>
> The error handling is a bit different in some cases. Often
> "memory-region" is optional, so failed lookup is not an error. But then
> an error in of_reserved_mem_lookup() is treated as an error. However,
> that distinction is not really important. Either the region is available
> and usable or it is not. So now, it is just
> of_reserved_mem_region_to_resource() which is checked for an error.
>
> Signed-off-by: Rob Herring (Arm) <robh@...nel.org>
> ---
> v2:
> - Use strstarts instead of strcmp for resource names as they include
> the unit-address.
> - Drop the unit-address from resource name for imx and st drivers
> ---
> drivers/remoteproc/imx_dsp_rproc.c | 45 ++++++++------------
> drivers/remoteproc/imx_rproc.c | 68 ++++++++++++------------------
> drivers/remoteproc/qcom_q6v5_adsp.c | 24 ++++-------
> drivers/remoteproc/qcom_q6v5_mss.c | 60 +++++++++------------------
> drivers/remoteproc/qcom_q6v5_pas.c | 69 +++++++++++--------------------
> drivers/remoteproc/qcom_q6v5_wcss.c | 25 +++++------
> drivers/remoteproc/qcom_wcnss.c | 23 ++++-------
> drivers/remoteproc/rcar_rproc.c | 36 +++++++---------
> drivers/remoteproc/st_remoteproc.c | 41 +++++++++---------
> drivers/remoteproc/stm32_rproc.c | 44 +++++++++-----------
> drivers/remoteproc/ti_k3_dsp_remoteproc.c | 28 +++++--------
> drivers/remoteproc/ti_k3_m4_remoteproc.c | 28 +++++--------
> drivers/remoteproc/ti_k3_r5_remoteproc.c | 28 +++++--------
> drivers/remoteproc/xlnx_r5_remoteproc.c | 51 +++++++++--------------
> 14 files changed, 221 insertions(+), 349 deletions(-)
>
> diff --git a/drivers/remoteproc/imx_dsp_rproc.c b/drivers/remoteproc/imx_dsp_rproc.c
> index 90cb1fc13e71..fffae6ff4a5c 100644
[ ... ]
> diff --git a/drivers/remoteproc/xlnx_r5_remoteproc.c b/drivers/remoteproc/xlnx_r5_remoteproc.c
> index 5aeedeaf3c41..b73e97074c01 100644
> --- a/drivers/remoteproc/xlnx_r5_remoteproc.c
> +++ b/drivers/remoteproc/xlnx_r5_remoteproc.c
> @@ -460,49 +460,44 @@ static int add_mem_regions_carveout(struct rproc *rproc)
> {
> struct rproc_mem_entry *rproc_mem;
> struct zynqmp_r5_core *r5_core;
> - struct of_phandle_iterator it;
> - struct reserved_mem *rmem;
> int i = 0;
>
> r5_core = rproc->priv;
>
> /* Register associated reserved memory regions */
> - of_phandle_iterator_init(&it, r5_core->np, "memory-region", NULL, 0);
> + while (1) {
> + int err;
> + struct resource res;
>
> - while (of_phandle_iterator_next(&it) == 0) {
> - rmem = of_reserved_mem_lookup(it.node);
> - if (!rmem) {
> - of_node_put(it.node);
> - dev_err(&rproc->dev, "unable to acquire memory-region\n");
> - return -EINVAL;
> - }
> + err = of_reserved_mem_region_to_resource(r5_core->np, i++, &res);
Here i++ is not needed as it's done at the end of the loop.
This bug breaks RPMsg communication on zynqmp platform.
Thanks,
Tanmay
> + if (err)
> + return 0;
>
> - if (!strcmp(it.node->name, "vdev0buffer")) {
> + if (strstarts(res.name, "vdev0buffer")) {
> /* Init reserved memory for vdev buffer */
> rproc_mem = rproc_of_resm_mem_entry_init(&rproc->dev, i,
> - rmem->size,
> - rmem->base,
> - it.node->name);
> + resource_size(&res),
> + res.start,
> + "vdev0buffer");
> } else {
> /* Register associated reserved memory regions */
> rproc_mem = rproc_mem_entry_init(&rproc->dev, NULL,
> - (dma_addr_t)rmem->base,
> - rmem->size, rmem->base,
> + (dma_addr_t)res.start,
> + resource_size(&res), res.start,
> zynqmp_r5_mem_region_map,
> zynqmp_r5_mem_region_unmap,
> - it.node->name);
> + "%.*s",
> + strchrnul(res.name, '@') - res.name,
> + res.name);
> }
>
> - if (!rproc_mem) {
> - of_node_put(it.node);
> + if (!rproc_mem)
> return -ENOMEM;
> - }
>
> rproc_add_carveout(rproc, rproc_mem);
> - rproc_coredump_add_segment(rproc, rmem->base, rmem->size);
> + rproc_coredump_add_segment(rproc, res.start, resource_size(&res));
>
> - dev_dbg(&rproc->dev, "reserved mem carveout %s addr=%llx, size=0x%llx",
> - it.node->name, rmem->base, rmem->size);
> + dev_dbg(&rproc->dev, "reserved mem carveout %pR\n", &res);
> i++;
> }
>
> @@ -776,7 +771,6 @@ static int zynqmp_r5_get_rsc_table_va(struct zynqmp_r5_core *r5_core)
> struct device *dev = r5_core->dev;
> struct rsc_tbl_data *rsc_data_va;
> struct resource res_mem;
> - struct device_node *np;
> int ret;
>
> /*
> @@ -786,14 +780,7 @@ static int zynqmp_r5_get_rsc_table_va(struct zynqmp_r5_core *r5_core)
> * contains that data structure which holds resource table address, size
> * and some magic number to validate correct resource table entry.
> */
> - np = of_parse_phandle(r5_core->np, "memory-region", 0);
> - if (!np) {
> - dev_err(dev, "failed to get memory region dev node\n");
> - return -EINVAL;
> - }
> -
> - ret = of_address_to_resource(np, 0, &res_mem);
> - of_node_put(np);
> + ret = of_reserved_mem_region_to_resource(r5_core->np, 0, &res_mem);
> if (ret) {
> dev_err(dev, "failed to get memory-region resource addr\n");
> return -EINVAL;
>
Powered by blists - more mailing lists