| From 89ae53021d697db5c02dfeeeabf460af9c76c3d0 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 29 Jan 2026 09:44:48 +0800 |
| Subject: remoteproc: imx_rproc: Fix invalid loaded resource table detection |
| |
| From: Peng Fan <peng.fan@nxp.com> |
| |
| [ Upstream commit 26aa5295010ffaebcf8f1991c53fa7cf2ee1b20d ] |
| |
| imx_rproc_elf_find_loaded_rsc_table() may incorrectly report a loaded |
| resource table even when the current firmware does not provide one. |
| |
| When the device tree contains a "rsc-table" entry, priv->rsc_table is |
| non-NULL and denotes where a resource table would be located if one is |
| present in memory. However, when the current firmware has no resource |
| table, rproc->table_ptr is NULL. The function still returns |
| priv->rsc_table, and the remoteproc core interprets this as a valid loaded |
| resource table. |
| |
| Fix this by returning NULL from imx_rproc_elf_find_loaded_rsc_table() when |
| there is no resource table for the current firmware (i.e. when |
| rproc->table_ptr is NULL). This aligns the function's semantics with the |
| remoteproc core: a loaded resource table is only reported when a valid |
| table_ptr exists. |
| |
| With this change, starting firmware without a resource table no longer |
| triggers a crash. |
| |
| Fixes: e954a1bd1610 ("remoteproc: imx_rproc: Use imx specific hook for find_loaded_rsc_table") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Peng Fan <peng.fan@nxp.com> |
| Acked-by: Daniel Baluta <daniel.baluta@nxp.com> |
| Link: https://lore.kernel.org/r/20260129-imx-rproc-fix-v3-1-fc4e41e6e750@nxp.com |
| Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/remoteproc/imx_rproc.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c |
| index 33f21ab24c921..d93bf5134d6f0 100644 |
| --- a/drivers/remoteproc/imx_rproc.c |
| +++ b/drivers/remoteproc/imx_rproc.c |
| @@ -609,6 +609,10 @@ imx_rproc_elf_find_loaded_rsc_table(struct rproc *rproc, const struct firmware * |
| { |
| struct imx_rproc *priv = rproc->priv; |
| |
| + /* No resource table in the firmware */ |
| + if (!rproc->table_ptr) |
| + return NULL; |
| + |
| if (priv->rsc_table) |
| return (struct resource_table *)priv->rsc_table; |
| |
| -- |
| 2.51.0 |
| |