[PATCH v3 1/2] sunxi: reorganize mctl_mem_matches_* functions

Andre Przywara andre.przywara at arm.com
Tue Mar 5 02:21:33 CET 2024


On Thu, 28 Dec 2023 00:28:42 +0300
Andrey Skvortsov <andrej.skvortzov at gmail.com> wrote:

Hi,

> mctl_mem_matches and mctl_mem_matches_base identical functions. To
> avoid code duplication move them to dram_helpers and make
> mctl_mem_matches use generic mctl_mem_matches_base.
> 
> Signed-off-by: Andrey Skvortsov <andrej.skvortzov at gmail.com>

thanks for the changes, that looks good now!

Reviewed-by: Andre Przywara <andre.przywara at arm.com>

Merged to sunxi/master.

Cheers,
Andre

> ---
>  arch/arm/include/asm/arch-sunxi/dram.h |  1 +
>  arch/arm/mach-sunxi/dram_helpers.c     | 20 ++++++++++++++------
>  arch/arm/mach-sunxi/dram_sunxi_dw.c    | 13 -------------
>  3 files changed, 15 insertions(+), 19 deletions(-)
> 
> diff --git a/arch/arm/include/asm/arch-sunxi/dram.h b/arch/arm/include/asm/arch-sunxi/dram.h
> index 682daae6b1..9d21b49241 100644
> --- a/arch/arm/include/asm/arch-sunxi/dram.h
> +++ b/arch/arm/include/asm/arch-sunxi/dram.h
> @@ -40,5 +40,6 @@
>  unsigned long sunxi_dram_init(void);
>  void mctl_await_completion(u32 *reg, u32 mask, u32 val);
>  bool mctl_mem_matches(u32 offset);
> +bool mctl_mem_matches_base(u32 offset, ulong base);
>  
>  #endif /* _SUNXI_DRAM_H */
> diff --git a/arch/arm/mach-sunxi/dram_helpers.c b/arch/arm/mach-sunxi/dram_helpers.c
> index cdf2750f1c..661186b648 100644
> --- a/arch/arm/mach-sunxi/dram_helpers.c
> +++ b/arch/arm/mach-sunxi/dram_helpers.c
> @@ -25,19 +25,27 @@ void mctl_await_completion(u32 *reg, u32 mask, u32 val)
>  }
>  
>  /*
> - * Test if memory at offset offset matches memory at begin of DRAM
> + * Test if memory at offset matches memory at a certain base
>   *
>   * Note: dsb() is not available on ARMv5 in Thumb mode
>   */
>  #ifndef CONFIG_MACH_SUNIV
> -bool mctl_mem_matches(u32 offset)
> +bool mctl_mem_matches_base(u32 offset, ulong base)
>  {
>  	/* Try to write different values to RAM at two addresses */
> -	writel(0, CFG_SYS_SDRAM_BASE);
> -	writel(0xaa55aa55, (ulong)CFG_SYS_SDRAM_BASE + offset);
> +	writel(0, base);
> +	writel(0xaa55aa55, base + offset);
>  	dsb();
>  	/* Check if the same value is actually observed when reading back */
> -	return readl(CFG_SYS_SDRAM_BASE) ==
> -	       readl((ulong)CFG_SYS_SDRAM_BASE + offset);
> +	return readl(base) ==
> +	       readl(base + offset);
> +}
> +
> +/*
> + * Test if memory at offset matches memory at begin of DRAM
> + */
> +bool mctl_mem_matches(u32 offset)
> +{
> +	return mctl_mem_matches_base(offset, CFG_SYS_SDRAM_BASE);
>  }
>  #endif
> diff --git a/arch/arm/mach-sunxi/dram_sunxi_dw.c b/arch/arm/mach-sunxi/dram_sunxi_dw.c
> index 9382d3d0be..2e8dd40b97 100644
> --- a/arch/arm/mach-sunxi/dram_sunxi_dw.c
> +++ b/arch/arm/mach-sunxi/dram_sunxi_dw.c
> @@ -652,19 +652,6 @@ static int mctl_channel_init(uint16_t socid, struct dram_para *para)
>  	return 0;
>  }
>  
> -/*
> - * Test if memory at offset offset matches memory at a certain base
> - */
> -static bool mctl_mem_matches_base(u32 offset, ulong base)
> -{
> -	/* Try to write different values to RAM at two addresses */
> -	writel(0, base);
> -	writel(0xaa55aa55, base + offset);
> -	dsb();
> -	/* Check if the same value is actually observed when reading back */
> -	return readl(base) ==
> -	       readl(base + offset);
> -}
>  
>  static void mctl_auto_detect_dram_size_rank(uint16_t socid, struct dram_para *para, ulong base, struct rank_para *rank)
>  {



More information about the U-Boot mailing list