[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