[U-Boot] [linux-sunxi] [PATCH 01/13] sunxi: change SUNXI_HIGH_SRAM option to SUNXI_SRAM_ADDRESS

Andre Przywara andre.przywara at arm.com
Tue Jun 26 10:34:30 UTC 2018


(resend from proper address)
Hi,

On 25/06/18 11:37, Icenowy Zheng wrote:
> The new Allwinner H6 SoC has its SRAM A1 at neither 0x0 nor 0x10000, but
> it's at 0x20000. Thus the SUNXI_HIGH_SRAM option needs to be refactored
> to support this new configuration.
> 
> Change it to SUNXI_SRAM_ADDRESS, which holds the real address of SRAM
> A1 in the memory map.

Nice rework, thanks for that!

> Signed-off-by: Icenowy Zheng <icenowy at aosc.io>

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

Cheers,
Andre.

> ---
>  arch/arm/include/asm/arch-sunxi/spl.h |  6 +-----
>  arch/arm/mach-sunxi/Kconfig           | 14 +++++---------
>  include/configs/sunxi-common.h        | 19 +++++++++++--------
>  3 files changed, 17 insertions(+), 22 deletions(-)
> 
> diff --git a/arch/arm/include/asm/arch-sunxi/spl.h b/arch/arm/include/asm/arch-sunxi/spl.h
> index a70b1797e5..e166568d11 100644
> --- a/arch/arm/include/asm/arch-sunxi/spl.h
> +++ b/arch/arm/include/asm/arch-sunxi/spl.h
> @@ -12,11 +12,7 @@
>  #define SPL_SIGNATURE		"SPL" /* marks "sunxi" SPL header */
>  #define SPL_HEADER_VERSION	2
>  
> -#ifdef CONFIG_SUNXI_HIGH_SRAM
> -#define SPL_ADDR		0x10000
> -#else
> -#define SPL_ADDR		0x0
> -#endif
> +#define SPL_ADDR		CONFIG_SUNXI_SRAM_ADDRESS
>  
>  /* The low 8-bits of the 'boot_media' field in the SPL header */
>  #define SUNXI_BOOTED_FROM_MMC0	0
> diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
> index 0a7bd3086a..e3c19b7464 100644
> --- a/arch/arm/mach-sunxi/Kconfig
> +++ b/arch/arm/mach-sunxi/Kconfig
> @@ -73,16 +73,15 @@ config SUN8I_RSB
>  	  with various RSB based devices, such as AXP223, AXP8XX PMICs,
>  	  and AC100/AC200 ICs.
>  
> -config SUNXI_HIGH_SRAM
> -	bool
> -	default n
> +config SUNXI_SRAM_ADDRESS
> +	hex
> +	default 0x10000 if MACH_SUN9I || MACH_SUN50I || MACH_SUN50I_H5
> +	default 0x0
>  	---help---
>  	Older Allwinner SoCs have their mask boot ROM mapped just below 4GB,
>  	with the first SRAM region being located at address 0.
>  	Some newer SoCs map the boot ROM at address 0 instead and move the
> -	SRAM to 64KB, just behind the mask ROM.
> -	Chips using the latter setup are supposed to select this option to
> -	adjust the addresses accordingly.
> +	SRAM to a different address.
>  
>  # Note only one of these may be selected at a time! But hidden choices are
>  # not supported by Kconfig
> @@ -252,7 +251,6 @@ config MACH_SUN9I
>  	select CPU_V7
>  	select DRAM_SUN9I
>  	select SUN6I_PRCM
> -	select SUNXI_HIGH_SRAM
>  	select SUNXI_GEN_SUN6I
>  	select SUN8I_RSB
>  	select SUPPORT_SPL
> @@ -264,7 +262,6 @@ config MACH_SUN50I
>  	select PHY_SUN4I_USB
>  	select SUNXI_DE2
>  	select SUNXI_GEN_SUN6I
> -	select SUNXI_HIGH_SRAM
>  	select SUPPORT_SPL
>  	select SUNXI_DRAM_DW
>  	select SUNXI_DRAM_DW_32BIT
> @@ -275,7 +272,6 @@ config MACH_SUN50I_H5
>  	bool "sun50i (Allwinner H5)"
>  	select ARM64
>  	select MACH_SUNXI_H3_H5
> -	select SUNXI_HIGH_SRAM
>  	select FIT
>  	select SPL_LOAD_FIT
>  
> diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h
> index 9d9e9ce173..0196dd0431 100644
> --- a/include/configs/sunxi-common.h
> +++ b/include/configs/sunxi-common.h
> @@ -83,20 +83,19 @@
>  
>  #define CONFIG_SPL_BSS_MAX_SIZE		0x00080000 /* 512 KiB */
>  
> -#ifdef CONFIG_SUNXI_HIGH_SRAM
>  /*
>   * The A80's A1 sram starts at 0x00010000 rather then at 0x00000000 and is
>   * slightly bigger. Note that it is possible to map the first 32 KiB of the
>   * A1 at 0x00000000 like with older SoCs by writing 0x16aa0001 to the
>   * undocumented 0x008000e0 SYS_CTRL register. Where the 16aa is a key and
>   * the 1 actually activates the mapping of the first 32 KiB to 0x00000000.
> + * A64 and H5 also has SRAM A1 at 0x00010000, but no magic remap register
> + * is known yet.
> + * H6 has SRAM A1 at 0x00020000.
>   */
> -#define CONFIG_SYS_INIT_RAM_ADDR	0x10000
> -#define CONFIG_SYS_INIT_RAM_SIZE	0x08000	/* FIXME: 40 KiB ? */
> -#else
> -#define CONFIG_SYS_INIT_RAM_ADDR	0x0
> -#define CONFIG_SYS_INIT_RAM_SIZE	0x8000	/* 32 KiB */
> -#endif
> +#define CONFIG_SYS_INIT_RAM_ADDR	CONFIG_SUNXI_SRAM_ADDRESS
> +/* FIXME: this may be larger on some SoCs */
> +#define CONFIG_SYS_INIT_RAM_SIZE	0x8000 /* 32 KiB */
>  
>  #define CONFIG_SYS_INIT_SP_OFFSET \
>  	(CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
> @@ -188,7 +187,11 @@
>  #define CONFIG_SPL_BOARD_LOAD_IMAGE
>  #endif
>  
> -#ifdef CONFIG_SUNXI_HIGH_SRAM
> +/*
> + * We cannot use expressions here, because expressions won't be evaluated in
> + * autoconf.mk.
> + */
> +#if CONFIG_SUNXI_SRAM_ADDRESS == 0x10000
>  #define CONFIG_SPL_TEXT_BASE		0x10060		/* sram start+header */
>  #define CONFIG_SPL_MAX_SIZE		0x7fa0		/* 32 KiB */
>  #ifdef CONFIG_ARM64
> 


More information about the U-Boot mailing list