Hi Johan, On Wed, 8 Mar 2023 at 00:39, Johan Jonker <jbx6...@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 <jbx6...@gmail.com> > > Reviewed-by: Kever Yang <kever.y...@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 > >