arm64: add an option to switch visibility of CONFIG_SYS_INIT_SP_BSS_OFFSET
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Wed, 26 Jun 2019 04:51:46 +0000 (13:51 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Wed, 10 Jul 2019 13:37:23 +0000 (22:37 +0900)
By default, CONFIG_SYS_INIT_SP_BSS_OFFSET was made invisible by not
giving a prompt to it.

The only way to define it is to hard-code an extra entry in SoC/board
Kconfig, like arch/arm/mach-tegra/tegra{186,210}/Kconfig.

Add a prompt to it in order to allow defconfig files to specify the
value of CONFIG_SYS_INIT_SP_BSS_OFFSET.

With this, CONFIG_SYS_INIT_SP_BSS_OFFSET would become always visible.
So, we need a new bool option to turn it off by default.

I move the 'default 524288' to the common place. This value is not too
big, but is big enough to avoid the overwrap of DT in most platforms.
If 512KB is not a suitable choice for your platform, you can change it
from your defconfig or menuconfig etc.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Stephen Warren <swarren@nvidia.com>
Makefile
arch/arm/Kconfig
arch/arm/cpu/armv8/linux-kernel-image-header-vars.h
arch/arm/lib/crt0_64.S
arch/arm/mach-tegra/Kconfig
arch/arm/mach-tegra/tegra186/Kconfig
arch/arm/mach-tegra/tegra210/Kconfig

index 516260f46d0275dae1ad7f6d35dfee252d30eee1..73fdf70cddf2757c7939fe9875f1d0c276e1d9b1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -874,7 +874,7 @@ ifneq ($(CONFIG_BUILD_TARGET),)
 ALL-y += $(CONFIG_BUILD_TARGET:"%"=%)
 endif
 
-ifneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)
+ifdef CONFIG_INIT_SP_RELATIVE
 ALL-y += init_sp_bss_offset_check
 endif
 
@@ -1155,7 +1155,7 @@ binary_size_check: u-boot-nodtb.bin FORCE
                fi \
        fi
 
-ifneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)
+ifdef CONFIG_INIT_SP_RELATIVE
 ifneq ($(CONFIG_SYS_MALLOC_F_LEN),)
 subtract_sys_malloc_f_len = space=$$(($${space} - $(CONFIG_SYS_MALLOC_F_LEN)))
 else
index f5a7630e4f99e62f33b4f4f2cbe37bb14eaf2d8a..87541977259cfa7ffe741c915b48ab144543ad5c 100644 (file)
@@ -20,15 +20,25 @@ config POSITION_INDEPENDENT
          information that is embedded into the binary to support U-Boot
          relocating itself to the top-of-RAM later during execution.
 
-config SYS_INIT_SP_BSS_OFFSET
-       int
+config INIT_SP_RELATIVE
+       bool "Specify the early stack pointer relative to the .bss section"
        help
          U-Boot typically uses a hard-coded value for the stack pointer
-         before relocation. Define this option to instead calculate the
+         before relocation. Enable this option to instead calculate the
          initial SP at run-time. This is useful to avoid hard-coding addresses
          into U-Boot, so that can be loaded and executed at arbitrary
-         addresses and thus avoid using arbitrary addresses at runtime. This
-         option's value is the offset added to &_bss_start in order to
+         addresses and thus avoid using arbitrary addresses at runtime.
+
+         If this option is enabled, the early stack pointer is set to
+         &_bss_start with a offset value added. The offset is specified by
+         SYS_INIT_SP_BSS_OFFSET.
+
+config SYS_INIT_SP_BSS_OFFSET
+       int "Early stack offset from the .bss base address"
+       depends on INIT_SP_RELATIVE
+       default 524288
+       help
+         This option's value is the offset added to &_bss_start in order to
          calculate the stack pointer. This offset should be large enough so
          that the early malloc region, global data (gd), and early stack usage
          do not overlap any appended DTB.
index fa6e86d1c24bb9d1e3dd6a4b012522fb5635ba34..b4220e4936f0b6d4039dc5faa75be0e15c8b199f 100644 (file)
@@ -48,7 +48,7 @@
 #define __MAX(a, b)            (((a) > (b)) ? (a) : (b))
 #define __CODE_DATA_SIZE       (__bss_start - _start)
 #define __BSS_SIZE             (__bss_end - __bss_start)
-#ifdef CONFIG_SYS_INIT_SP_BSS_OFFSET
+#ifdef CONFIG_INIT_SP_RELATIVE
 #define __MAX_EXTRA_RAM_USAGE  __MAX(__BSS_SIZE, CONFIG_SYS_INIT_SP_BSS_OFFSET)
 #else
 #define __MAX_EXTRA_RAM_USAGE  __BSS_SIZE
index d6b632aa87d10952a9b10edfba1013240c5d76e1..e76b25a03e8c7621717cc9595c7b2fd5be9807e9 100644 (file)
@@ -72,7 +72,7 @@ ENTRY(_main)
        ldr     x0, =(CONFIG_TPL_STACK)
 #elif defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)
        ldr     x0, =(CONFIG_SPL_STACK)
-#elif defined(CONFIG_SYS_INIT_SP_BSS_OFFSET)
+#elif defined(CONFIG_INIT_SP_RELATIVE)
        adr     x0, __bss_start
        add     x0, x0, #CONFIG_SYS_INIT_SP_BSS_OFFSET
 #else
index 97e22ead59859e79631bf2b12c57f37ff41cff22..ff9f29f2d5d0070adc59b61d36b87b157137edd8 100644 (file)
@@ -86,6 +86,7 @@ config TEGRA_ARMV7_COMMON
 config TEGRA_ARMV8_COMMON
        bool "Tegra 64-bit common options"
        select ARM64
+       select INIT_SP_RELATIVE
        select LINUX_KERNEL_IMAGE_HEADER
        select POSITION_INDEPENDENT
        select TEGRA_COMMON
index 479c0955eec6a873ba07ac11325785482c4f518f..b2e53b58caf86b1041880dfa76861e430d97aab6 100644 (file)
@@ -21,9 +21,6 @@ endchoice
 config SYS_SOC
        default "tegra186"
 
-config SYS_INIT_SP_BSS_OFFSET
-       default 524288
-
 source "board/nvidia/p2771-0000/Kconfig"
 
 endif
index 250738aed3122e05f04f93924c65781af1701cf9..3637473051b8ed87a5c4b2b003204cb4a932b574 100644 (file)
@@ -40,9 +40,6 @@ endchoice
 config SYS_SOC
        default "tegra210"
 
-config SYS_INIT_SP_BSS_OFFSET
-       default 524288
-
 source "board/nvidia/e2220-1170/Kconfig"
 source "board/nvidia/p2371-0000/Kconfig"
 source "board/nvidia/p2371-2180/Kconfig"