[PATCH 1/6] sunxi: Kconfig: introduce SUNXI_MINIMUM_DRAM_MB
Jernej Škrabec
jernej.skrabec at gmail.com
Wed Oct 12 23:33:27 CEST 2022
Hi Andre,
Dne sreda, 12. oktober 2022 ob 18:34:53 CEST je Andre Przywara napisal(a):
> Traditionally we assumed that every Allwinner board would come with at
> least 256 MB of DRAM, and set our DRAM layout accordingly. This affected
> both the default load addresses, but also U-Boot's own address
> expectations (like being loaded at 160 MB).
>
> Some SoCs come with co-packaged DRAM, but only provide 32 or 64MB. So
> far we special-cased those *chips*, as there was only one chip per DRAM
> size. However new chips force us to take a more general approach.
>
> Introduce a Kconfig symbol, which provides the minimum DRAM size of the
> board. If nothing else is specified, we use 256 MB, and default to
> smaller values for those co-packaged SoCs.
> Then select the different DRAM maps according to this new symbol, so
> that different SoCs with the same DRAM size can share those definitions.
>
> Inspired by an idea from Icenowy.
>
> This is just refactoring: compiled for all boards before and after this
> patch: the binaries were identical.
>
> Signed-off-by: Andre Przywara <andre.przywara at arm.com>
Nice approach.
Reviewed-by: Jernej Skrabec <jernej.skrabec at gmail.com>
Best regards,
Jernej
> ---
> Kconfig | 6 +++---
> arch/arm/mach-sunxi/Kconfig | 12 ++++++++++++
> boot/Kconfig | 4 ++--
> include/configs/sunxi-common.h | 31 +++++++++++++++++--------------
> 4 files changed, 34 insertions(+), 19 deletions(-)
>
> diff --git a/Kconfig b/Kconfig
> index 2ea735d38e4..d297513bac6 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -312,9 +312,9 @@ config SYS_MALLOC_LEN
> default 0x4000000 if SANDBOX
> default 0x2000000 if ARCH_ROCKCHIP || ARCH_OMAP2PLUS || ARCH_MESON
> default 0x200000 if ARCH_BMIPS || X86
> - default 0x120000 if MACH_SUNIV
> - default 0x220000 if MACH_SUN8I_V3S
> - default 0x4020000 if ARCH_SUNXI
> + default 0x4020000 if SUNXI_MINIMUM_DRAM_MB >= 256
> + default 0x220000 if SUNXI_MINIMUM_DRAM_MB >= 64
> + default 0x120000 if SUNXI_MINIMUM_DRAM_MB >= 32
> default 0x400000
> help
> This defines memory to be allocated for Dynamic allocation
> diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
> index 6b16f43494f..9aa66deb9fd 100644
> --- a/arch/arm/mach-sunxi/Kconfig
> +++ b/arch/arm/mach-sunxi/Kconfig
> @@ -615,6 +615,18 @@ config SYS_BOARD
> config SYS_SOC
> default "sunxi"
>
> +config SUNXI_MINIMUM_DRAM_MB
> + int "minimum DRAM size"
> + default 32 if MACH_SUNIV
> + default 64 if MACH_SUN8I_V3S
> + default 256
> + ---help---
> + Minimum DRAM size expected on the board. Traditionally we assumed
> + 256 MB, so that U-Boot would load at 160MB. With co-packaged DRAM
> + we have smaller sizes, though, so that U-Boot's own load address
and
> + the default payload addresses must be shifted down.
> + This is expected to be fixed by the SoC selection.
> +
> config UART0_PORT_F
> bool "UART0 on MicroSD breakout board"
> ---help---
> diff --git a/boot/Kconfig b/boot/Kconfig
> index 6b3b8f072cb..45f86e946cd 100644
> --- a/boot/Kconfig
> +++ b/boot/Kconfig
> @@ -499,8 +499,8 @@ config SYS_TEXT_BASE
> default 0x80800000 if ARCH_OMAP2PLUS || ARCH_K3
> default 0x81700000 if MACH_SUNIV
> default 0x2a000000 if MACH_SUN9I
> - default 0x42e00000 if MACH_SUN8I_V3S
> - default 0x4a000000 if ARCH_SUNXI
> + default 0x4a000000 if SUNXI_MINIMUM_DRAM_MB >= 256
> + default 0x42e00000 if SUNXI_MINIMUM_DRAM_MB >= 64
> hex "Text Base"
> help
> The address in memory that U-Boot will be running from,
initially.
> diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h
> index 0f0ef4f64bb..416a0422861 100644
> --- a/include/configs/sunxi-common.h
> +++ b/include/configs/sunxi-common.h
> @@ -135,7 +135,21 @@
> #define FDTOVERLAY_ADDR_R __stringify(SDRAM_OFFSET(FE00000))
> #define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(FF00000))
>
> -#elif defined(CONFIG_MACH_SUN8I_V3S)
> +#elif (CONFIG_SUNXI_MINIMUM_DRAM_MB >= 256)
> +/*
> + * 160M RAM (256M minimum minus 64MB heap + 32MB for u-boot, stack, fb,
> etc. + * 32M uncompressed kernel, 16M compressed kernel, 1M fdt,
> + * 1M script, 1M pxe, 1M dt overlay and the ramdisk at the end.
> + */
> +#define BOOTM_SIZE __stringify(0xa000000)
> +#define KERNEL_ADDR_R __stringify(SDRAM_OFFSET(2000000))
> +#define FDT_ADDR_R __stringify(SDRAM_OFFSET(3000000))
> +#define SCRIPT_ADDR_R __stringify(SDRAM_OFFSET(3100000))
> +#define PXEFILE_ADDR_R __stringify(SDRAM_OFFSET(3200000))
> +#define FDTOVERLAY_ADDR_R __stringify(SDRAM_OFFSET(3300000))
> +#define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(3400000))
> +
> +#elif (CONFIG_SUNXI_MINIMUM_DRAM_MB >= 64)
> /*
> * 64M RAM minus 2MB heap + 16MB for u-boot, stack, fb, etc.
> * 16M uncompressed kernel, 8M compressed kernel, 1M fdt,
> @@ -149,7 +163,7 @@
> #define FDTOVERLAY_ADDR_R __stringify(SDRAM_OFFSET(1B00000))
> #define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(1C00000))
>
> -#elif defined(CONFIG_MACH_SUNIV)
> +#elif (CONFIG_SUNXI_MINIMUM_DRAM_MB >= 32)
> /*
> * 32M RAM minus 1MB heap + 8MB for u-boot, stack, fb, etc.
> * 8M uncompressed kernel, 4M compressed kernel, 512K fdt,
> @@ -164,18 +178,7 @@
> #define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(0D60000))
>
> #else
> -/*
> - * 160M RAM (256M minimum minus 64MB heap + 32MB for u-boot, stack, fb,
> etc. - * 32M uncompressed kernel, 16M compressed kernel, 1M fdt,
> - * 1M script, 1M pxe, 1M dt overlay and the ramdisk at the end.
> - */
> -#define BOOTM_SIZE __stringify(0xa000000)
> -#define KERNEL_ADDR_R __stringify(SDRAM_OFFSET(2000000))
> -#define FDT_ADDR_R __stringify(SDRAM_OFFSET(3000000))
> -#define SCRIPT_ADDR_R __stringify(SDRAM_OFFSET(3100000))
> -#define PXEFILE_ADDR_R __stringify(SDRAM_OFFSET(3200000))
> -#define FDTOVERLAY_ADDR_R __stringify(SDRAM_OFFSET(3300000))
> -#define RAMDISK_ADDR_R __stringify(SDRAM_OFFSET(3400000))
> +#error Need at least 32MB of DRAM. Please adjust load addresses.
> #endif
>
> #define MEM_LAYOUT_ENV_SETTINGS \
> --
> 2.25.1
More information about the U-Boot
mailing list