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.
                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
 
 
        _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*)
        /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
 
 #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