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

Johan Jonker jbx6244 at gmail.com
Wed Mar 8 09:39:28 CET 2023



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!

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