[PATCH v6 11/22] core: remap: convert regmap_init_mem_plat() input to phys_addr_t

Simon Glass sjg at chromium.org
Wed Mar 8 18:16:52 CET 2023


Hi Johan,

On Wed, 8 Mar 2023 at 00:39, Johan Jonker <jbx6244 at gmail.com> wrote:
>
>
>
> On 3/3/23 01:14, Johan Jonker wrote:
> > The fdt_addr_t and phys_addr_t size have been decoupled.
> > A 32bit CPU can expect 64-bit data from the device tree parser,
> > so convert regmap_init_mem_plat() input to phys_addr_t in files
> > that use this function. Also correct struct syscon_base_plat
> > depending on CONFIG_PHYS_64BIT setting and fix ARRAY_SIZE
> > divider.
> >
> > Signed-off-by: Johan Jonker <jbx6244 at gmail.com>
> > Reviewed-by: Kever Yang <kever.yang at rock-chips.com>
> > ---
> >  drivers/core/regmap.c               |  2 +-
> >  drivers/core/syscon-uclass.c        |  4 ++--
> >  drivers/ram/rockchip/sdram_rk3066.c |  2 +-
> >  drivers/ram/rockchip/sdram_rk3188.c |  2 +-
> >  drivers/ram/rockchip/sdram_rk322x.c |  2 +-
> >  drivers/ram/rockchip/sdram_rk3288.c |  2 +-
> >  drivers/ram/rockchip/sdram_rk3328.c |  2 +-
> >  drivers/ram/rockchip/sdram_rk3399.c |  2 +-
> >  include/regmap.h                    |  2 +-
> >  include/syscon.h                    | 13 +++++++------
> >  10 files changed, 17 insertions(+), 16 deletions(-)
> >
> > diff --git a/drivers/core/regmap.c b/drivers/core/regmap.c
> > index e33bb9d7..37da64b2 100644
> > --- a/drivers/core/regmap.c
> > +++ b/drivers/core/regmap.c
> > @@ -79,7 +79,7 @@ static struct regmap *regmap_alloc(int count)
> >  }
> >
> >  #if CONFIG_IS_ENABLED(OF_PLATDATA)
> > -int regmap_init_mem_plat(struct udevice *dev, fdt_val_t *reg, int count,
> > +int regmap_init_mem_plat(struct udevice *dev, phys_addr_t *reg, int count,
> >                        struct regmap **mapp)
> >  {
> >       struct regmap_range *range;
> > diff --git a/drivers/core/syscon-uclass.c b/drivers/core/syscon-uclass.c
> > index 25fdb66e..b557a24f 100644
> > --- a/drivers/core/syscon-uclass.c
> > +++ b/drivers/core/syscon-uclass.c
> > @@ -58,8 +58,8 @@ static int syscon_pre_probe(struct udevice *dev)
> >  #if CONFIG_IS_ENABLED(OF_PLATDATA)
>
> >       struct syscon_base_plat *plat = dev_get_plat(dev);
>
> This patch must be put in the garbage bin for now.
>
> The size of plat data is unknown.
> Where is this plat data defined?
> struct syscon_base_plat is not used elsewhere.
> With rk3288 this can be 32 or 64bit size.
> The only place that this can be found out is in the syscon driver that holds the compatible and the struct dtd.
> Must test if data from struct dtd can be transfered to dev->plat by dev_set_plat() into a fixed struct syscon_base_plat format.
> Any ideas on how to move forward/fix are welcome!

You could have two functions, one for 32 and one for 64 bits.

Regards,
Simon


>
> Johan
>
> >
> > -     return regmap_init_mem_plat(dev, plat->reg, ARRAY_SIZE(plat->reg),
> > -                                     &priv->regmap);
> > +     return regmap_init_mem_plat(dev, (phys_addr_t *)plat->reg,
> > +                                 ARRAY_SIZE(plat->reg) / 2, &priv->regmap);
>
> This patch
>
>
>
> >  #else
> >       return regmap_init_mem(dev_ofnode(dev), &priv->regmap);
> >  #endif
>
>
> [..]
>
> > diff --git a/include/syscon.h b/include/syscon.h
> > index f5e6cc1a..836ae07c 100644
> > --- a/include/syscon.h
> > +++ b/include/syscon.h
> > @@ -27,14 +27,15 @@ struct syscon_ops {
> >
> >  #if CONFIG_IS_ENABLED(OF_PLATDATA)
> >  /*
> > - * We don't support 64-bit machines. If they are so resource-contrained that
> > - * they need to use OF_PLATDATA, something is horribly wrong with the
> > - * education of our hardware engineers.
> > - *
> > - * Update: 64-bit is now supported and we have an education crisis.
> > + * Support for 64bit or 32bit fdt addresses
> > + * depending on the physical SoC properties.
> >   */
> >  struct syscon_base_plat {
> > -     fdt_val_t reg[2];
> > +#ifdef CONFIG_PHYS_64BIT
> > +     fdt64_t reg[2];
> > +#else
> > +     fdt32_t reg[2];
> > +#endif
> >  };
> >  #endif
> >
> > --
> > 2.20.1
> >


More information about the U-Boot mailing list