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!

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
> 

Reply via email to