[PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type

Dong Aisheng dongas86 at gmail.com
Wed Jul 14 03:25:02 PDT 2021


On Wed, Jul 14, 2021 at 9:12 AM Peng Fan <peng.fan at nxp.com> wrote:
>
> > Subject: [PATCH V2 2/5] remoteproc: imx_rproc: fix TCM io memory type
> >
> > is_iomem was introduced in the commit 40df0a91b2a5 ("remoteproc: add
> > is_iomem to da_to_va"), but the driver seemed missed to provide the io type
>
> missed->missing
>
> > correctly.
> > This patch updates remoteproc driver to indicate the TCM on IMX are io
> > memories. Without the change, remoteroc kick will fail.
>
> remoteroc->remoteproc
>

Will fix, thanks.

> >
> > Cc: Bjorn Andersson <bjorn.andersson at linaro.org>
> > Cc: Mathieu Poirier <mathieu.poirier at linaro.org>
> > Cc: Peng Fan <peng.fan at nxp.com>
> > Fixes: d59eedc0e408 ("remoteproc: imx_rproc: support i.MX8ULP")
>
> Drop this fix. 8ULP only support ROM loaded M33 images, no
> chance to let Kernel load M33 image.

Will drop, thanks

Regards
Aisheng

>
> > Fixes: 79806d32d5aa ("remoteproc: imx_rproc: support i.MX8MN/P")
> > Signed-off-by: Dong Aisheng <aisheng.dong at nxp.com>
> > ---
> > ChangeLog:
> > v1->v2:
> >  * using ioremap_wc for non TCM memory
> > ---
> >  drivers/remoteproc/imx_rproc.c | 35 ++++++++++++++++++++--------------
> >  1 file changed, 21 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/remoteproc/imx_rproc.c
> > b/drivers/remoteproc/imx_rproc.c index d88f76f5305e..71dcc6dd32e4
> > 100644
> > --- a/drivers/remoteproc/imx_rproc.c
> > +++ b/drivers/remoteproc/imx_rproc.c
> > @@ -71,6 +71,7 @@ struct imx_rproc_mem {
> >  /* att flags */
> >  /* M4 own area. Can be mapped at probe */
> >  #define ATT_OWN              BIT(1)
> > +#define ATT_IOMEM    BIT(2)
> >
> >  /* address translation table */
> >  struct imx_rproc_att {
> > @@ -117,7 +118,7 @@ struct imx_rproc {
> >  static const struct imx_rproc_att imx_rproc_att_imx8mn[] = {
> >       /* dev addr , sys addr  , size      , flags */
> >       /* ITCM   */
> > -     { 0x00000000, 0x007E0000, 0x00020000, ATT_OWN },
> > +     { 0x00000000, 0x007E0000, 0x00020000, ATT_OWN | ATT_IOMEM },
> >       /* OCRAM_S */
> >       { 0x00180000, 0x00180000, 0x00009000, 0 },
> >       /* OCRAM */
> > @@ -131,7 +132,7 @@ static const struct imx_rproc_att
> > imx_rproc_att_imx8mn[] = {
> >       /* DDR (Code) - alias */
> >       { 0x10000000, 0x40000000, 0x0FFE0000, 0 },
> >       /* DTCM */
> > -     { 0x20000000, 0x00800000, 0x00020000, ATT_OWN },
> > +     { 0x20000000, 0x00800000, 0x00020000, ATT_OWN | ATT_IOMEM },
> >       /* OCRAM_S - alias */
> >       { 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
> >       /* OCRAM */
> > @@ -147,7 +148,7 @@ static const struct imx_rproc_att
> > imx_rproc_att_imx8mn[] = {  static const struct imx_rproc_att
> > imx_rproc_att_imx8mq[] = {
> >       /* dev addr , sys addr  , size      , flags */
> >       /* TCML - alias */
> > -     { 0x00000000, 0x007e0000, 0x00020000, 0 },
> > +     { 0x00000000, 0x007e0000, 0x00020000, ATT_IOMEM},
> >       /* OCRAM_S */
> >       { 0x00180000, 0x00180000, 0x00008000, 0 },
> >       /* OCRAM */
> > @@ -159,9 +160,9 @@ static const struct imx_rproc_att
> > imx_rproc_att_imx8mq[] = {
> >       /* DDR (Code) - alias */
> >       { 0x10000000, 0x80000000, 0x0FFE0000, 0 },
> >       /* TCML */
> > -     { 0x1FFE0000, 0x007E0000, 0x00020000, ATT_OWN },
> > +     { 0x1FFE0000, 0x007E0000, 0x00020000, ATT_OWN  | ATT_IOMEM},
> >       /* TCMU */
> > -     { 0x20000000, 0x00800000, 0x00020000, ATT_OWN },
> > +     { 0x20000000, 0x00800000, 0x00020000, ATT_OWN  | ATT_IOMEM},
> >       /* OCRAM_S */
> >       { 0x20180000, 0x00180000, 0x00008000, ATT_OWN },
> >       /* OCRAM */
> > @@ -199,12 +200,12 @@ static const struct imx_rproc_att
> > imx_rproc_att_imx7d[] = {
> >       /* OCRAM_PXP (Code) - alias */
> >       { 0x00940000, 0x00940000, 0x00008000, 0 },
> >       /* TCML (Code) */
> > -     { 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN },
> > +     { 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN | ATT_IOMEM },
> >       /* DDR (Code) - alias, first part of DDR (Data) */
> >       { 0x10000000, 0x80000000, 0x0FFF0000, 0 },
> >
> >       /* TCMU (Data) */
> > -     { 0x20000000, 0x00800000, 0x00008000, ATT_OWN },
> > +     { 0x20000000, 0x00800000, 0x00008000, ATT_OWN | ATT_IOMEM },
> >       /* OCRAM (Data) */
> >       { 0x20200000, 0x00900000, 0x00020000, 0 },
> >       /* OCRAM_EPDC (Data) */
> > @@ -218,18 +219,18 @@ static const struct imx_rproc_att
> > imx_rproc_att_imx7d[] = {  static const struct imx_rproc_att
> > imx_rproc_att_imx6sx[] = {
> >       /* dev addr , sys addr  , size      , flags */
> >       /* TCML (M4 Boot Code) - alias */
> > -     { 0x00000000, 0x007F8000, 0x00008000, 0 },
> > +     { 0x00000000, 0x007F8000, 0x00008000, ATT_IOMEM },
> >       /* OCRAM_S (Code) */
> >       { 0x00180000, 0x008F8000, 0x00004000, 0 },
> >       /* OCRAM_S (Code) - alias */
> >       { 0x00180000, 0x008FC000, 0x00004000, 0 },
> >       /* TCML (Code) */
> > -     { 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN },
> > +     { 0x1FFF8000, 0x007F8000, 0x00008000, ATT_OWN | ATT_IOMEM },
> >       /* DDR (Code) - alias, first part of DDR (Data) */
> >       { 0x10000000, 0x80000000, 0x0FFF8000, 0 },
> >
> >       /* TCMU (Data) */
> > -     { 0x20000000, 0x00800000, 0x00008000, ATT_OWN },
> > +     { 0x20000000, 0x00800000, 0x00008000, ATT_OWN | ATT_IOMEM },
> >       /* OCRAM_S (Data) - alias? */
> >       { 0x208F8000, 0x008F8000, 0x00004000, 0 },
> >       /* DDR (Data) */
> > @@ -341,7 +342,7 @@ static int imx_rproc_stop(struct rproc *rproc)  }
> >
> >  static int imx_rproc_da_to_sys(struct imx_rproc *priv, u64 da,
> > -                            size_t len, u64 *sys)
> > +                            size_t len, u64 *sys, bool *is_iomem)
> >  {
> >       const struct imx_rproc_dcfg *dcfg = priv->dcfg;
> >       int i;
> > @@ -354,6 +355,8 @@ static int imx_rproc_da_to_sys(struct imx_rproc *priv,
> > u64 da,
> >                       unsigned int offset = da - att->da;
> >
> >                       *sys = att->sa + offset;
> > +                     if (is_iomem)
> > +                             *is_iomem = att->flags & ATT_IOMEM;
> >                       return 0;
> >               }
> >       }
> > @@ -377,7 +380,7 @@ static void *imx_rproc_da_to_va(struct rproc *rproc,
> > u64 da, size_t len, bool *i
> >        * On device side we have many aliases, so we need to convert device
> >        * address (M4) to system bus address first.
> >        */
> > -     if (imx_rproc_da_to_sys(priv, da, len, &sys))
> > +     if (imx_rproc_da_to_sys(priv, da, len, &sys, is_iomem))
> >               return NULL;
> >
> >       for (i = 0; i < IMX_RPROC_MEM_MAX; i++) { @@ -553,8 +556,12 @@
> > static int imx_rproc_addr_init(struct imx_rproc *priv,
> >               if (b >= IMX_RPROC_MEM_MAX)
> >                       break;
> >
> > -             priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev,
> > -                                                  att->sa, att->size);
> > +             if (att->flags & ATT_IOMEM)
> > +                     priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev,
> > +                                                          att->sa, att->size);
> > +             else
> > +                     priv->mem[b].cpu_addr = devm_ioremap_wc(&pdev->dev,
> > +                                                             att->sa, att->size);
> >               if (!priv->mem[b].cpu_addr) {
> >                       dev_err(dev, "failed to remap %#x bytes from %#x\n", att->size,
> > att->sa);
> >                       return -ENOMEM;
>
>
> Besides the upper comments, looks ok to me.
> Reviewed-by: Peng Fan <peng.fan at nxp.com>
>
> > --
> > 2.25.1
>



More information about the linux-arm-kernel mailing list