Message ID | 20240712-imx_rproc-v1-2-7bcf6732d328@nxp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | remoteproc: imx_rproc: various patches for misc | expand |
On 7/12/2024 11:34 AM, Peng Fan (OSS) wrote: > From: Peng Fan <peng.fan@nxp.com> > > If there is a resource table device tree node, use the address as > the resource table address, otherwise use the address(where > .resource_table section loaded) inside the Cortex-M elf file. > > And there is an update in NXP SDK that Resource Domain Control(RDC) > enabled to protect TCM, linux not able to write the TCM space when > updating resource table status and cause kernel dump. So use the address > from device tree could avoid kernel dump. > > Note: NXP M4 SDK not check resource table update, so it does not matter > use whether resource table address specified in elf file or in device > tree. But to reflect the fact that if people specific resource table > address in device tree, it means people are aware and going to use it, > not the address specified in elf file. > > Signed-off-by: Peng Fan <peng.fan@nxp.com> Reviewed-by: Iuliana Prodan <iuliana.prodan@nxp.com> Thanks, Iulia > --- > drivers/remoteproc/imx_rproc.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c > index 3c8b64db8823..48c48b53a3aa 100644 > --- a/drivers/remoteproc/imx_rproc.c > +++ b/drivers/remoteproc/imx_rproc.c > @@ -666,6 +666,17 @@ static struct resource_table *imx_rproc_get_loaded_rsc_table(struct rproc *rproc > return (struct resource_table *)priv->rsc_table; > } > > +static struct resource_table * > +imx_rproc_elf_find_loaded_rsc_table(struct rproc *rproc, const struct firmware *fw) > +{ > + struct imx_rproc *priv = rproc->priv; > + > + if (priv->rsc_table) > + return (struct resource_table *)priv->rsc_table; > + > + return rproc_elf_find_loaded_rsc_table(rproc, fw); > +} > + > static const struct rproc_ops imx_rproc_ops = { > .prepare = imx_rproc_prepare, > .attach = imx_rproc_attach, > @@ -676,7 +687,7 @@ static const struct rproc_ops imx_rproc_ops = { > .da_to_va = imx_rproc_da_to_va, > .load = rproc_elf_load_segments, > .parse_fw = imx_rproc_parse_fw, > - .find_loaded_rsc_table = rproc_elf_find_loaded_rsc_table, > + .find_loaded_rsc_table = imx_rproc_elf_find_loaded_rsc_table, > .get_loaded_rsc_table = imx_rproc_get_loaded_rsc_table, > .sanity_check = rproc_elf_sanity_check, > .get_boot_addr = rproc_elf_get_boot_addr, >
diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c index 3c8b64db8823..48c48b53a3aa 100644 --- a/drivers/remoteproc/imx_rproc.c +++ b/drivers/remoteproc/imx_rproc.c @@ -666,6 +666,17 @@ static struct resource_table *imx_rproc_get_loaded_rsc_table(struct rproc *rproc return (struct resource_table *)priv->rsc_table; } +static struct resource_table * +imx_rproc_elf_find_loaded_rsc_table(struct rproc *rproc, const struct firmware *fw) +{ + struct imx_rproc *priv = rproc->priv; + + if (priv->rsc_table) + return (struct resource_table *)priv->rsc_table; + + return rproc_elf_find_loaded_rsc_table(rproc, fw); +} + static const struct rproc_ops imx_rproc_ops = { .prepare = imx_rproc_prepare, .attach = imx_rproc_attach, @@ -676,7 +687,7 @@ static const struct rproc_ops imx_rproc_ops = { .da_to_va = imx_rproc_da_to_va, .load = rproc_elf_load_segments, .parse_fw = imx_rproc_parse_fw, - .find_loaded_rsc_table = rproc_elf_find_loaded_rsc_table, + .find_loaded_rsc_table = imx_rproc_elf_find_loaded_rsc_table, .get_loaded_rsc_table = imx_rproc_get_loaded_rsc_table, .sanity_check = rproc_elf_sanity_check, .get_boot_addr = rproc_elf_get_boot_addr,