* [bug report] remoteproc: imx_rproc: Introduce prepare ops for imx_rproc_dcfg
[not found] <caa37f28-a2e8-4e0a-a9ce-a365ce805e4b@stanley.mountain>
@ 2026-02-06 13:41 ` Dan Carpenter
2026-02-06 16:29 ` Mathieu Poirier
2026-02-08 11:45 ` Peng Fan
0 siblings, 2 replies; 3+ messages in thread
From: Dan Carpenter @ 2026-02-06 13:41 UTC (permalink / raw)
To: Peng Fan
Cc: Pengutronix Kernel Team, Fabio Estevam, linux-remoteproc, imx,
linux-arm-kernel, linux-kernel
[ Smatch checking is paused while we raise funding. #SadFace
https://lore.kernel.org/all/aTaiGSbWZ9DJaGo7@stanley.mountain/ -dan ]
Hello Peng Fan,
Commit edd2a9956055 ("remoteproc: imx_rproc: Introduce prepare ops
for imx_rproc_dcfg") from Jan 9, 2026 (linux-next), leads to the
following Smatch static checker warning:
drivers/remoteproc/imx_rproc.c:648 imx_rproc_prepare()
warn: ignoring unreachable code.
drivers/remoteproc/imx_rproc.c
605 static int imx_rproc_prepare(struct rproc *rproc)
606 {
607 struct imx_rproc *priv = rproc->priv;
608 struct device_node *np = priv->dev->of_node;
609 struct rproc_mem_entry *mem;
610 int i = 0;
611 u32 da;
612
613 /* Register associated reserved memory regions */
614 while (1) {
615 int err;
616 struct resource res;
617
618 err = of_reserved_mem_region_to_resource(np, i++, &res);
619 if (err)
620 return 0;
621
622 /*
623 * Ignore the first memory region which will be used vdev buffer.
624 * No need to do extra handlings, rproc_add_virtio_dev will handle it.
625 */
626 if (strstarts(res.name, "vdev0buffer"))
627 continue;
628
629 if (strstarts(res.name, "rsc-table"))
630 continue;
631
632 /* No need to translate pa to da, i.MX use same map */
633 da = res.start;
634
635 /* Register memory region */
636 mem = rproc_mem_entry_init(priv->dev, NULL, (dma_addr_t)res.start,
637 resource_size(&res), da,
638 imx_rproc_mem_alloc, imx_rproc_mem_release,
639 "%.*s", strchrnul(res.name, '@') - res.name,
640 res.name);
641 if (!mem)
642 return -ENOMEM;
643
644 rproc_coredump_add_segment(rproc, da, resource_size(&res));
645 rproc_add_carveout(rproc, mem);
646 }
647
--> 648 if (priv->ops && priv->ops->prepare)
649 return priv->ops->prepare(rproc);
This is unreachable code.
650
651 return 0;
652 }
regards,
dan carpenter
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [bug report] remoteproc: imx_rproc: Introduce prepare ops for imx_rproc_dcfg
2026-02-06 13:41 ` [bug report] remoteproc: imx_rproc: Introduce prepare ops for imx_rproc_dcfg Dan Carpenter
@ 2026-02-06 16:29 ` Mathieu Poirier
2026-02-08 11:45 ` Peng Fan
1 sibling, 0 replies; 3+ messages in thread
From: Mathieu Poirier @ 2026-02-06 16:29 UTC (permalink / raw)
To: Dan Carpenter
Cc: Peng Fan, Pengutronix Kernel Team, Fabio Estevam,
linux-remoteproc, imx, linux-arm-kernel, linux-kernel
On Fri, Feb 06, 2026 at 04:41:13PM +0300, Dan Carpenter wrote:
> [ Smatch checking is paused while we raise funding. #SadFace
> https://lore.kernel.org/all/aTaiGSbWZ9DJaGo7@stanley.mountain/ -dan ]
>
> Hello Peng Fan,
>
> Commit edd2a9956055 ("remoteproc: imx_rproc: Introduce prepare ops
> for imx_rproc_dcfg") from Jan 9, 2026 (linux-next), leads to the
> following Smatch static checker warning:
>
> drivers/remoteproc/imx_rproc.c:648 imx_rproc_prepare()
> warn: ignoring unreachable code.
>
> drivers/remoteproc/imx_rproc.c
> 605 static int imx_rproc_prepare(struct rproc *rproc)
> 606 {
> 607 struct imx_rproc *priv = rproc->priv;
> 608 struct device_node *np = priv->dev->of_node;
> 609 struct rproc_mem_entry *mem;
> 610 int i = 0;
> 611 u32 da;
> 612
> 613 /* Register associated reserved memory regions */
> 614 while (1) {
> 615 int err;
> 616 struct resource res;
> 617
> 618 err = of_reserved_mem_region_to_resource(np, i++, &res);
> 619 if (err)
> 620 return 0;
> 621
> 622 /*
> 623 * Ignore the first memory region which will be used vdev buffer.
> 624 * No need to do extra handlings, rproc_add_virtio_dev will handle it.
> 625 */
> 626 if (strstarts(res.name, "vdev0buffer"))
> 627 continue;
> 628
> 629 if (strstarts(res.name, "rsc-table"))
> 630 continue;
> 631
> 632 /* No need to translate pa to da, i.MX use same map */
> 633 da = res.start;
> 634
> 635 /* Register memory region */
> 636 mem = rproc_mem_entry_init(priv->dev, NULL, (dma_addr_t)res.start,
> 637 resource_size(&res), da,
> 638 imx_rproc_mem_alloc, imx_rproc_mem_release,
> 639 "%.*s", strchrnul(res.name, '@') - res.name,
> 640 res.name);
> 641 if (!mem)
> 642 return -ENOMEM;
> 643
> 644 rproc_coredump_add_segment(rproc, da, resource_size(&res));
> 645 rproc_add_carveout(rproc, mem);
> 646 }
> 647
> --> 648 if (priv->ops && priv->ops->prepare)
> 649 return priv->ops->prepare(rproc);
>
> This is unreachable code.
It looks like Dan (and Smatch) has a point.
>
> 650
> 651 return 0;
> 652 }
>
> regards,
> dan carpenter
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [bug report] remoteproc: imx_rproc: Introduce prepare ops for imx_rproc_dcfg
2026-02-06 13:41 ` [bug report] remoteproc: imx_rproc: Introduce prepare ops for imx_rproc_dcfg Dan Carpenter
2026-02-06 16:29 ` Mathieu Poirier
@ 2026-02-08 11:45 ` Peng Fan
1 sibling, 0 replies; 3+ messages in thread
From: Peng Fan @ 2026-02-08 11:45 UTC (permalink / raw)
To: Dan Carpenter
Cc: Pengutronix Kernel Team, Fabio Estevam,
linux-remoteproc@vger.kernel.org, imx@lists.linux.dev,
linux-arm-kernel@lists.infradead.org, linux-kernel
Hi Dan,
Thanks for your report.
> Subject: [bug report] remoteproc: imx_rproc: Introduce prepare ops for
> imx_rproc_dcfg
>
> Hello Peng Fan,
>
> Commit edd2a9956055 ("remoteproc: imx_rproc: Introduce prepare
> ops for imx_rproc_dcfg") from Jan 9, 2026 (linux-next), leads to the
> following Smatch static checker warning:
>
> drivers/remoteproc/imx_rproc.c:648 imx_rproc_prepare()
> warn: ignoring unreachable code.
>
> drivers/remoteproc/imx_rproc.c
[...]
> 642 return -ENOMEM;
> 643
> 644 rproc_coredump_add_segment(rproc, da,
> resource_size(&res));
> 645 rproc_add_carveout(rproc, mem);
> 646 }
> 647
> --> 648 if (priv->ops && priv->ops->prepare)
> 649 return priv->ops->prepare(rproc);
>
> This is unreachable code.
Indeed.
The i.MX95 patches were developed quite some time ago. Later, there was
another change [1] which modified the reserved-memory while-loop logic.
When rebasing my changes on top of that, I overlooked this behavior
change, which resulted in the early return making the prepare callback
unreachable.
Regarding why this was not exposed earlier during testing: NXP U-Boot
powers up the M7 (leaving it in reset) and initializes TCM ECC by default.
As a result, even without calling the platform prepare ops, Linux can
still load the M7 ELF correctly, so no issue was observed.
In hindsight, I should have tested the case where M7 remains powered off
when rebasing these changes (:
I have just sent out a fix to address this issue. Thanks again for
reporting it.
[1] 67a7bc7f0358b ("remoteproc: Use of_reserved_mem_region_* functions for "memory-region")
Thanks,
Peng
> 650
> 651 return 0;
> 652 }
>
> regards,
> dan carpenter
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-02-08 11:45 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <caa37f28-a2e8-4e0a-a9ce-a365ce805e4b@stanley.mountain>
2026-02-06 13:41 ` [bug report] remoteproc: imx_rproc: Introduce prepare ops for imx_rproc_dcfg Dan Carpenter
2026-02-06 16:29 ` Mathieu Poirier
2026-02-08 11:45 ` Peng Fan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox