summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README18
-rw-r--r--arch/arm/cpu/u-boot-spl.lds24
-rw-r--r--arch/arm/cpu/u-boot.lds4
-rw-r--r--include/configs/tegra-common.h2
4 files changed, 30 insertions, 18 deletions
diff --git a/README b/README
index 14c83f4bb1..19da9c81eb 100644
--- a/README
+++ b/README
@@ -2831,8 +2831,18 @@ FIT uImage format:
CONFIG_SPL_LDSCRIPT
LDSCRIPT for linking the SPL binary.
+ CONFIG_SPL_MAX_FOOTPRINT
+ Maximum size in memory allocated to the SPL, BSS included.
+ When defined, the linker checks that the actual memory
+ used by SPL from _start to __bss_end does not exceed it.
+ CONFIG_SPL_MAX_FOOTPRINT and CONFIG_SPL_MAX_BSS_SIZE
+ must not be both defined at the same time.
+
CONFIG_SPL_MAX_SIZE
- Maximum binary size (text, data and rodata) of the SPL binary.
+ Maximum size of the SPL image (text, data, rodata, and
+ linker lists sections), BSS excluded.
+ When defined, the linker checks that the actual size does
+ not exceed it.
CONFIG_SPL_TEXT_BASE
TEXT_BASE for linking the SPL binary.
@@ -2845,7 +2855,11 @@ FIT uImage format:
Link address for the BSS within the SPL binary.
CONFIG_SPL_BSS_MAX_SIZE
- Maximum binary size of the BSS section of the SPL binary.
+ Maximum size in memory allocated to the SPL BSS.
+ When defined, the linker checks that the actual memory used
+ by SPL from __bss_start to __bss_end does not exceed it.
+ CONFIG_SPL_MAX_FOOTPRINT and CONFIG_SPL_MAX_BSS_SIZE
+ must not be both defined at the same time.
CONFIG_SPL_STACK
Adress of the start of the stack SPL will use
diff --git a/arch/arm/cpu/u-boot-spl.lds b/arch/arm/cpu/u-boot-spl.lds
index 3c0d99ca36..1408f03b23 100644
--- a/arch/arm/cpu/u-boot-spl.lds
+++ b/arch/arm/cpu/u-boot-spl.lds
@@ -65,15 +65,6 @@ SECTIONS
_end = .;
- /*
- * Deprecated: this MMU section is used by pxa at present but
- * should not be used by new boards/CPUs.
- */
- . = ALIGN(4096);
- .mmutable : {
- *(.mmutable)
- }
-
.bss __rel_dyn_start (OVERLAY) : {
__bss_start = .;
*(.bss*)
@@ -88,6 +79,17 @@ SECTIONS
/DISCARD/ : { *(.gnu*) }
}
-#if defined(CONFIG_SPL_TEXT_BASE) && defined(CONFIG_SPL_MAX_SIZE)
-ASSERT(__bss_end < (CONFIG_SPL_TEXT_BASE + CONFIG_SPL_MAX_SIZE), "SPL image too big");
+#if defined(CONFIG_SPL_MAX_SIZE)
+ASSERT(__image_copy_end - __image_copy_start < (CONFIG_SPL_MAX_SIZE), \
+ "SPL image too big");
+#endif
+
+#if defined(CONFIG_SPL_BSS_MAX_SIZE)
+ASSERT(__bss_end - __bss_start < (CONFIG_SPL_BSS_MAX_SIZE), \
+ "SPL image BSS too big");
+#endif
+
+#if defined(CONFIG_SPL_MAX_FOOTPRINT)
+ASSERT(__bss_end - _start < (CONFIG_SPL_MAX_FOOTPRINT), \
+ "SPL image plus BSS too big");
#endif
diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
index d5e42d3ac9..d9bbee3b27 100644
--- a/arch/arm/cpu/u-boot.lds
+++ b/arch/arm/cpu/u-boot.lds
@@ -107,7 +107,3 @@ SECTIONS
/DISCARD/ : { *(.interp*) }
/DISCARD/ : { *(.gnu*) }
}
-
-#if defined(CONFIG_SPL_TEXT_BASE) && defined(CONFIG_SPL_MAX_SIZE)
-ASSERT(__bss_end < (CONFIG_SPL_TEXT_BASE + CONFIG_SPL_MAX_SIZE), "SPL image too big");
-#endif
diff --git a/include/configs/tegra-common.h b/include/configs/tegra-common.h
index 036ded0c79..e9241b8dff 100644
--- a/include/configs/tegra-common.h
+++ b/include/configs/tegra-common.h
@@ -158,7 +158,7 @@
#define CONFIG_SPL_RAM_DEVICE
#define CONFIG_SPL_BOARD_INIT
#define CONFIG_SPL_NAND_SIMPLE
-#define CONFIG_SPL_MAX_SIZE (CONFIG_SYS_TEXT_BASE - \
+#define CONFIG_SPL_MAX_FOOTPRINT (CONFIG_SYS_TEXT_BASE - \
CONFIG_SPL_TEXT_BASE)
#define CONFIG_SYS_SPL_MALLOC_SIZE 0x00010000