treewide: Add Kconfig variable MEMLAYOUT_LD_FILE

This change defines a Kconfig variable MEMLAYOUT_LD_FILE which allows
SoC/mainboard to provide a linker file for the platform. x86 already
provides a default memlayout.ld under src/arch/x86. With this new
Kconfig variable, it is possible for the SoC/mainboard code for x86 to
provide a custom linker file as well.

Makefile.inc is updated for all architectures to use this new Kconfig
variable instead of assuming memlayout.ld files under a certain
path. All non-x86 boards used memlayout.ld under mainboard
directory. However, a lot of these boards were simply including the
memlayout from SoC. So, this change also updates these mainboards and
SoCs to define the Kconfig as required.

BUG=b:155322763
TEST=Verified that abuild with --timeless option results in the same
coreboot.rom image for all boards.

Change-Id: I6a7f96643ed0519c93967ea2c3bcd881a5d6a4d6
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/42292
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Raul Rangel <rrangel@chromium.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/Makefile.inc b/Makefile.inc
index 86467a6..fca7ebd 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -13,6 +13,7 @@
 CONFIG_FMDFILE:=$(call strip_quotes,$(CONFIG_FMDFILE))
 CONFIG_DEVICETREE:=$(call strip_quotes, $(CONFIG_DEVICETREE))
 CONFIG_OVERRIDE_DEVICETREE:=$(call strip_quotes, $(CONFIG_OVERRIDE_DEVICETREE))
+CONFIG_MEMLAYOUT_LD_FILE:=$(call strip_quotes, $(CONFIG_MEMLAYOUT_LD_FILE))
 
 #######################################################################
 # misleadingly named, this is the coreboot version
@@ -609,6 +610,13 @@
 .PHONY: devicetree
 devicetree: $(DEVICETREE_STATIC_C)
 
+ramstage-y += $(CONFIG_MEMLAYOUT_LD_FILE)
+romstage-y += $(CONFIG_MEMLAYOUT_LD_FILE)
+bootblock-y += $(CONFIG_MEMLAYOUT_LD_FILE)
+verstage-y += $(CONFIG_MEMLAYOUT_LD_FILE)
+postcar-y += $(CONFIG_MEMLAYOUT_LD_FILE)
+decompressor-y += $(CONFIG_MEMLAYOUT_LD_FILE)
+
 #######################################################################
 # Clean up rules
 clean-abuild:
diff --git a/src/Kconfig b/src/Kconfig
index f3d86f2..eef7a96 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -1182,6 +1182,15 @@
 	# src/lib/bootblock.c#main() C entry point.
 	bool
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/mainboard/$(CONFIG_MAINBOARD_DIR)/memlayout.ld"
+	help
+	  This variable allows SoC/mainboard to supply in a custom linker file
+	  if required. This determines the linker file used for all the stages
+	  (bootblock, romstage, verstage, ramstage, postcar) in
+	  src/arch/${ARCH}/Makefile.inc.
+
 ###############################################################################
 # Set default values for symbols created before mainboards.  This allows the
 # option to be displayed in the general menu, but the default to be loaded in
diff --git a/src/arch/arm/Makefile.inc b/src/arch/arm/Makefile.inc
index 66bf9c4..eef2650 100644
--- a/src/arch/arm/Makefile.inc
+++ b/src/arch/arm/Makefile.inc
@@ -50,11 +50,11 @@
 
 $(objcbfs)/bootblock.debug: $$(bootblock-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) -T $(call src-to-obj,bootblock,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(bootblock-objs)) --end-group
+	$(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) -T $(call src-to-obj,bootblock,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(bootblock-objs)) --end-group
 
 $(objcbfs)/decompressor.debug: $$(decompressor-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) -T $(call src-to-obj,decompressor,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(decompressor-objs)) --end-group
+	$(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) -T $(call src-to-obj,decompressor,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(decompressor-objs)) --end-group
 
 endif # CONFIG_ARCH_BOOTBLOCK_ARM
 
@@ -66,7 +66,7 @@
 
 $(objcbfs)/verstage.debug: $$(verstage-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_verstage) $(LDFLAGS_verstage) -o $@ -L$(obj) -T $(call src-to-obj,verstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(verstage-objs)) --end-group
+	$(LD_verstage) $(LDFLAGS_verstage) -o $@ -L$(obj) -T $(call src-to-obj,verstage,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(verstage-objs)) --end-group
 
 verstage-y += boot.c
 verstage-y += div0.c
@@ -99,7 +99,7 @@
 
 $(objcbfs)/romstage.debug: $$(romstage-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_romstage) $(LDFLAGS_romstage) -o $@ -L$(obj) -T $(call src-to-obj,romstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(romstage-objs)) --end-group
+	$(LD_romstage) $(LDFLAGS_romstage) -o $@ -L$(obj) -T $(call src-to-obj,romstage,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(romstage-objs)) --end-group
 
 endif # CONFIG_ARCH_ROMSTAGE_ARM
 
@@ -128,6 +128,6 @@
 
 $(objcbfs)/ramstage.debug: $$(ramstage-objs)
 	@printf "    CC         $(subst $(obj)/,,$(@))\n"
-	$(LD_ramstage) $(LDFLAGS_ramstage) -o $@ -L$(obj) -T $(call src-to-obj,ramstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) --end-group
+	$(LD_ramstage) $(LDFLAGS_ramstage) -o $@ -L$(obj) -T $(call src-to-obj,ramstage,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) --end-group
 
 endif # CONFIG_ARCH_RAMSTAGE_ARM
diff --git a/src/arch/arm64/Makefile.inc b/src/arch/arm64/Makefile.inc
index 5fd316a..920ff5d 100644
--- a/src/arch/arm64/Makefile.inc
+++ b/src/arch/arm64/Makefile.inc
@@ -45,11 +45,11 @@
 
 $(objcbfs)/bootblock.debug: $$(bootblock-objs) $(obj)/config.h
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(bootblock-objs)) --end-group -T $(call src-to-obj,bootblock,src/mainboard/$(MAINBOARDDIR)/memlayout.ld)
+	$(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(bootblock-objs)) --end-group -T $(call src-to-obj,bootblock,$(CONFIG_MEMLAYOUT_LD_FILE))
 
 $(objcbfs)/decompressor.debug: $$(decompressor-objs) $(obj)/config.h
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(decompressor-objs)) --end-group -T $(call src-to-obj,decompressor,src/mainboard/$(MAINBOARDDIR)/memlayout.ld)
+	$(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(decompressor-objs)) --end-group -T $(call src-to-obj,decompressor,$(CONFIG_MEMLAYOUT_LD_FILE))
 
 endif # CONFIG_ARCH_BOOTBLOCK_ARM64
 
@@ -61,7 +61,7 @@
 
 $(objcbfs)/verstage.debug: $$(verstage-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_verstage) $(LDFLAGS_verstage) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(verstage-objs)) --end-group -T $(call src-to-obj,verstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld)
+	$(LD_verstage) $(LDFLAGS_verstage) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(verstage-objs)) --end-group -T $(call src-to-obj,verstage,$(CONFIG_MEMLAYOUT_LD_FILE))
 
 verstage-y += boot.c
 verstage-y += div0.c
@@ -99,7 +99,7 @@
 
 $(objcbfs)/romstage.debug: $$(romstage-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_romstage) $(LDFLAGS_romstage) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(romstage-objs)) --end-group -T $(call src-to-obj,romstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld)
+	$(LD_romstage) $(LDFLAGS_romstage) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(romstage-objs)) --end-group -T $(call src-to-obj,romstage,$(CONFIG_MEMLAYOUT_LD_FILE))
 
 endif # CONFIG_ARCH_ROMSTAGE_ARM64
 
@@ -134,7 +134,7 @@
 
 $(objcbfs)/ramstage.debug: $$(ramstage-objs)
 	@printf "    CC         $(subst $(obj)/,,$(@))\n"
-	$(LD_ramstage) $(LDFLAGS_ramstage) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) --end-group -T $(call src-to-obj,ramstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld)
+	$(LD_ramstage) $(LDFLAGS_ramstage) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) --end-group -T $(call src-to-obj,ramstage,$(CONFIG_MEMLAYOUT_LD_FILE))
 
 # Build ARM Trusted Firmware (BL31)
 
diff --git a/src/arch/ppc64/Makefile.inc b/src/arch/ppc64/Makefile.inc
index f1a2487..d1774a1 100644
--- a/src/arch/ppc64/Makefile.inc
+++ b/src/arch/ppc64/Makefile.inc
@@ -24,7 +24,7 @@
 $(objcbfs)/bootblock.debug: $$(bootblock-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
 	$(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) \
-		-T $(call src-to-obj,bootblock,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(bootblock-objs)) \
+		-T $(call src-to-obj,bootblock,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(bootblock-objs)) \
 		$(LIBGCC_FILE_NAME_bootblock) --end-group $(COMPILER_RT_bootblock)
 
 endif
@@ -50,7 +50,7 @@
 
 $(objcbfs)/romstage.debug: $$(romstage-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_romstage) $(LDFLAGS_romstage) -o $@ -L$(obj) -T $(call src-to-obj,romstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(romstage-objs)) --end-group $(COMPILER_RT_romstage)
+	$(LD_romstage) $(LDFLAGS_romstage) -o $@ -L$(obj) -T $(call src-to-obj,romstage,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(romstage-objs)) --end-group $(COMPILER_RT_romstage)
 
 romstage-c-ccopts += $(ppc64_flags)
 romstage-S-ccopts += $(ppc64_asm_flags)
@@ -83,7 +83,7 @@
 
 $(objcbfs)/ramstage.debug: $$(ramstage-objs)
 	@printf "    CC         $(subst $(obj)/,,$(@))\n"
-	$(LD_ramstage) $(LDFLAGS_ramstage) -o $@ -L$(obj) -T $(call src-to-obj,ramstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) --end-group $(COMPILER_RT_ramstage)
+	$(LD_ramstage) $(LDFLAGS_ramstage) -o $@ -L$(obj) -T $(call src-to-obj,ramstage,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) --end-group $(COMPILER_RT_ramstage)
 
 ramstage-c-ccopts += $(ppc64_flags)
 ramstage-S-ccopts += $(ppc64_asm_flags)
diff --git a/src/arch/riscv/Makefile.inc b/src/arch/riscv/Makefile.inc
index 632e220..cd94692 100644
--- a/src/arch/riscv/Makefile.inc
+++ b/src/arch/riscv/Makefile.inc
@@ -64,7 +64,7 @@
 $(objcbfs)/bootblock.debug: $$(bootblock-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
 	$(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) \
-		-T $(call src-to-obj,bootblock,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(bootblock-objs)) \
+		-T $(call src-to-obj,bootblock,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(bootblock-objs)) \
 		$(LIBGCC_FILE_NAME_bootblock) --end-group $(COMPILER_RT_bootblock)
 
 bootblock-c-ccopts += $(riscv_flags)
@@ -99,7 +99,7 @@
 
 $(objcbfs)/romstage.debug: $$(romstage-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_romstage) $(LDFLAGS_romstage) -o $@ -L$(obj) -T $(call src-to-obj,romstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(romstage-objs)) --end-group $(COMPILER_RT_romstage)
+	$(LD_romstage) $(LDFLAGS_romstage) -o $@ -L$(obj) -T $(call src-to-obj,romstage,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(romstage-objs)) --end-group $(COMPILER_RT_romstage)
 
 romstage-c-ccopts += $(riscv_flags)
 romstage-S-ccopts += $(riscv_asm_flags)
@@ -148,7 +148,7 @@
 
 $(objcbfs)/ramstage.debug: $$(ramstage-objs)
 	@printf "    CC         $(subst $(obj)/,,$(@))\n"
-	$(LD_ramstage) $(LDFLAGS_ramstage) -o $@ -L$(obj) -T $(call src-to-obj,ramstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) --end-group $(COMPILER_RT_ramstage)
+	$(LD_ramstage) $(LDFLAGS_ramstage) -o $@ -L$(obj) -T $(call src-to-obj,ramstage,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) --end-group $(COMPILER_RT_ramstage)
 
 ramstage-c-ccopts += $(riscv_flags)
 ramstage-S-ccopts += $(riscv_asm_flags)
diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig
index 0a207e1..18c1ed3 100644
--- a/src/arch/x86/Kconfig
+++ b/src/arch/x86/Kconfig
@@ -316,4 +316,8 @@
 	help
 	  Set the maximum size of all ACPI tables in KiB.
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/arch/x86/memlayout.ld"
+
 endif
diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc
index 8d4c457..1b70fec 100644
--- a/src/arch/x86/Makefile.inc
+++ b/src/arch/x86/Makefile.inc
@@ -67,14 +67,13 @@
 define early_x86_stage
 # $1 stage name
 # $2 oformat
-$(1)-y += memlayout.ld
 
 # The '.' include path is needed for the generated assembly.inc file.
 $(1)-S-ccopts += -I.
 
 $$(objcbfs)/$(1).debug: $$$$($(1)-libs) $$$$($(1)-objs)
 	@printf "    LINK       $$(subst $$(obj)/,,$$(@))\n"
-	$$(LD_$(1)) $$(LDFLAGS_$(1)) -o $$@ -L$$(obj) $$(COMPILER_RT_FLAGS_$(1)) --whole-archive --start-group $$(filter-out %.ld,$$($(1)-objs)) $$($(1)-libs) --no-whole-archive $$(COMPILER_RT_$(1)) --end-group -T $(call src-to-obj,$(1),$(dir)/memlayout.ld) --oformat $(2)
+	$$(LD_$(1)) $$(LDFLAGS_$(1)) -o $$@ -L$$(obj) $$(COMPILER_RT_FLAGS_$(1)) --whole-archive --start-group $$(filter-out %.ld,$$($(1)-objs)) $$($(1)-libs) --no-whole-archive $$(COMPILER_RT_$(1)) --end-group -T $(call src-to-obj,$(1),$(CONFIG_MEMLAYOUT_LD_FILE)) --oformat $(2)
 	-LANG=C LC_ALL= $$(OBJCOPY_$(1)) --only-section .illegal_globals $$(@) $$(objcbfs)/$(1)_null.offenders >/dev/null 2>&1
 	if [ -z "$$$$($$(NM_$(1)) $$(objcbfs)/$(1)_null.offenders 2>&1 | grep 'no symbols')" ];then \
 		echo "Forbidden global variables in $(1):"; \
@@ -201,7 +200,6 @@
 postcar-$(CONFIG_IDT_IN_EVERY_STAGE) += idt.S
 postcar-y += exit_car.S
 postcar-y += memmove.c
-postcar-y += memlayout.ld
 postcar-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
 postcar-y += postcar.c
 postcar-$(CONFIG_COLLECT_TIMESTAMPS_TSC) += timestamp.c
@@ -210,7 +208,7 @@
 
 $(objcbfs)/postcar.debug: $$(postcar-objs)
 	@printf "    LINK       $(subst $(obj)/,,$(@))\n"
-	$(LD_postcar) $(LDFLAGS_postcar) -o $@ -L$(obj) $(COMPILER_RT_FLAGS_postcar) --whole-archive --start-group $(filter-out %.ld,$^) --no-whole-archive $(COMPILER_RT_postcar) --end-group -T $(call src-to-obj,postcar,src/arch/x86/memlayout.ld)
+	$(LD_postcar) $(LDFLAGS_postcar) -o $@ -L$(obj) $(COMPILER_RT_FLAGS_postcar) --whole-archive --start-group $(filter-out %.ld,$^) --no-whole-archive $(COMPILER_RT_postcar) --end-group -T $(call src-to-obj,postcar,$(CONFIG_MEMLAYOUT_LD_FILE))
 
 $(objcbfs)/postcar.elf: $(objcbfs)/postcar.debug.rmod
 	cp $< $@
@@ -236,7 +234,6 @@
 ramstage-y += idt.S
 ramstage-y += gdt.c
 ramstage-$(CONFIG_IOAPIC) += ioapic.c
-ramstage-y += memlayout.ld
 ramstage-y += memmove.c
 ramstage-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
 ramstage-$(CONFIG_GENERATE_MP_TABLE) += mpspec.c
@@ -289,9 +286,9 @@
 
 endif
 
-$(objcbfs)/ramstage.debug: $(objgenerated)/ramstage.o $(call src-to-obj,ramstage,src/arch/x86/memlayout.ld)
+$(objcbfs)/ramstage.debug: $(objgenerated)/ramstage.o $(call src-to-obj,ramstage,$(CONFIG_MEMLAYOUT_LD_FILE))
 	@printf "    CC         $(subst $(obj)/,,$(@))\n"
-	$(LD_ramstage) $(CPPFLAGS) $(LDFLAGS_ramstage) -o $@ -L$(obj) $< -T $(call src-to-obj,ramstage,src/arch/x86/memlayout.ld)
+	$(LD_ramstage) $(CPPFLAGS) $(LDFLAGS_ramstage) -o $@ -L$(obj) $< -T $(call src-to-obj,ramstage,$(CONFIG_MEMLAYOUT_LD_FILE))
 
 $(objgenerated)/ramstage.o: $$(ramstage-objs) $(COMPILER_RT_ramstage) $$(ramstage-libs)
 	@printf "    CC         $(subst $(obj)/,,$(@))\n"
diff --git a/src/cpu/ti/am335x/Kconfig b/src/cpu/ti/am335x/Kconfig
index 6de5eb4..3684480 100644
--- a/src/cpu/ti/am335x/Kconfig
+++ b/src/cpu/ti/am335x/Kconfig
@@ -8,3 +8,11 @@
 	select BOOT_DEVICE_NOT_SPI_FLASH
 	bool
 	default n
+
+if CPU_TI_AM335X
+
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/cpu/ti/am335x/memlayout.ld"
+
+endif
diff --git a/src/cpu/ti/am335x/Makefile.inc b/src/cpu/ti/am335x/Makefile.inc
index e1a3b9c..6f414bc 100644
--- a/src/cpu/ti/am335x/Makefile.inc
+++ b/src/cpu/ti/am335x/Makefile.inc
@@ -49,8 +49,5 @@
 
 omap-header-y	+= header.c
 
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
-omap-header-y += memlayout.ld
+omap-header-srcs += $(CONFIG_MEMLAYOUT_LD_FILE)
 omap-header-y += header.ld
diff --git a/src/mainboard/cavium/cn8100_sff_evb/Makefile.inc b/src/mainboard/cavium/cn8100_sff_evb/Makefile.inc
index c73bc33..bd2ea79 100644
--- a/src/mainboard/cavium/cn8100_sff_evb/Makefile.inc
+++ b/src/mainboard/cavium/cn8100_sff_evb/Makefile.inc
@@ -1,18 +1,13 @@
 ## SPDX-License-Identifier: GPL-2.0-only
 
 bootblock-y += bootblock.c
-bootblock-y += memlayout.ld
 
-romstage-y += memlayout.ld
 romstage-y += romstage.c
 romstage-y += bdk_devicetree.c
 
 ramstage-y += mainboard.c
-ramstage-y += memlayout.ld
 ramstage-y += bdk_devicetree.c
 
-verstage-y += memlayout.ld
-
 MB_DIR = src/mainboard/$(MAINBOARDDIR)
 
 LINUX_DTB = sff8104-linux.dtb
diff --git a/src/mainboard/cavium/cn8100_sff_evb/memlayout.ld b/src/mainboard/cavium/cn8100_sff_evb/memlayout.ld
deleted file mode 100644
index 9349362..0000000
--- a/src/mainboard/cavium/cn8100_sff_evb/memlayout.ld
+++ /dev/null
@@ -1 +0,0 @@
- #include <soc/memlayout.ld>
diff --git a/src/mainboard/emulation/qemu-aarch64/Kconfig b/src/mainboard/emulation/qemu-aarch64/Kconfig
index b8896d2..368f7f3 100644
--- a/src/mainboard/emulation/qemu-aarch64/Kconfig
+++ b/src/mainboard/emulation/qemu-aarch64/Kconfig
@@ -24,6 +24,10 @@
 	select MISSING_BOARD_RESET
 	select ARM64_USE_ARM_TRUSTED_FIRMWARE
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/mainboard/emulation/qemu-aarch64/memlayout.ld"
+
 config MAINBOARD_DIR
 	string
 	default "emulation/qemu-aarch64"
diff --git a/src/mainboard/emulation/qemu-aarch64/Makefile.inc b/src/mainboard/emulation/qemu-aarch64/Makefile.inc
index 754656f..15572ca 100644
--- a/src/mainboard/emulation/qemu-aarch64/Makefile.inc
+++ b/src/mainboard/emulation/qemu-aarch64/Makefile.inc
@@ -12,10 +12,6 @@
 romstage-y += mmio.c
 ramstage-y += mmio.c
 
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
-
 bootblock-y += bootblock_custom.S
 
 CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
diff --git a/src/mainboard/emulation/qemu-armv7/Kconfig b/src/mainboard/emulation/qemu-armv7/Kconfig
index 4af5843..64e5bb7 100644
--- a/src/mainboard/emulation/qemu-armv7/Kconfig
+++ b/src/mainboard/emulation/qemu-armv7/Kconfig
@@ -25,6 +25,10 @@
 	select MISSING_BOARD_RESET
 	select NO_MONOTONIC_TIMER
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/mainboard/emulation/qemu-armv7/memlayout.ld"
+
 config MAINBOARD_DIR
 	string
 	default "emulation/qemu-armv7"
diff --git a/src/mainboard/emulation/qemu-armv7/Makefile.inc b/src/mainboard/emulation/qemu-armv7/Makefile.inc
index 1b9e997..65fdfe1 100644
--- a/src/mainboard/emulation/qemu-armv7/Makefile.inc
+++ b/src/mainboard/emulation/qemu-armv7/Makefile.inc
@@ -15,7 +15,3 @@
 bootblock-y += mmio.c
 romstage-y += mmio.c
 ramstage-y += mmio.c
-
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/emulation/qemu-power8/Kconfig b/src/mainboard/emulation/qemu-power8/Kconfig
index aa3aceb..5dbea72 100644
--- a/src/mainboard/emulation/qemu-power8/Kconfig
+++ b/src/mainboard/emulation/qemu-power8/Kconfig
@@ -17,6 +17,10 @@
 	select BOOT_DEVICE_NOT_SPI_FLASH
 	select MISSING_BOARD_RESET
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/mainboard/emulation/qemu-power8/memlayout.ld"
+
 config MAINBOARD_DIR
 	string
 	default "emulation/qemu-power8"
diff --git a/src/mainboard/emulation/qemu-power8/Makefile.inc b/src/mainboard/emulation/qemu-power8/Makefile.inc
index b713df7..4011983 100644
--- a/src/mainboard/emulation/qemu-power8/Makefile.inc
+++ b/src/mainboard/emulation/qemu-power8/Makefile.inc
@@ -7,7 +7,3 @@
 ramstage-y += timer.c
 romstage-y += uart.c
 ramstage-y += uart.c
-
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/emulation/qemu-riscv/Kconfig b/src/mainboard/emulation/qemu-riscv/Kconfig
index 66aa599..5b556fc 100644
--- a/src/mainboard/emulation/qemu-riscv/Kconfig
+++ b/src/mainboard/emulation/qemu-riscv/Kconfig
@@ -30,6 +30,10 @@
 	select DRIVERS_UART_8250MEM
 	select RISCV_HAS_OPENSBI
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/mainboard/emulation/qemu-riscv/memlayout.ld"
+
 config MAINBOARD_DIR
 	string
 	default "emulation/qemu-riscv"
diff --git a/src/mainboard/emulation/qemu-riscv/Makefile.inc b/src/mainboard/emulation/qemu-riscv/Makefile.inc
index 7ca7e59..1a8342d 100644
--- a/src/mainboard/emulation/qemu-riscv/Makefile.inc
+++ b/src/mainboard/emulation/qemu-riscv/Makefile.inc
@@ -13,8 +13,4 @@
 ramstage-y += rom_media.c
 ramstage-y += clint.c
 
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
-
 CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
diff --git a/src/mainboard/emulation/spike-riscv/Kconfig b/src/mainboard/emulation/spike-riscv/Kconfig
index c46a047..3c1ae12 100644
--- a/src/mainboard/emulation/spike-riscv/Kconfig
+++ b/src/mainboard/emulation/spike-riscv/Kconfig
@@ -11,6 +11,10 @@
 	select BOOT_DEVICE_NOT_SPI_FLASH
 	select MISSING_BOARD_RESET
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/mainboard/emulation/spike-riscv/memlayout.ld"
+
 config MAINBOARD_DIR
 	string
 	default "emulation/spike-riscv"
diff --git a/src/mainboard/emulation/spike-riscv/Makefile.inc b/src/mainboard/emulation/spike-riscv/Makefile.inc
index 6d29116..fc5a7b3 100644
--- a/src/mainboard/emulation/spike-riscv/Makefile.inc
+++ b/src/mainboard/emulation/spike-riscv/Makefile.inc
@@ -10,7 +10,3 @@
 ramstage-y += uart.c
 ramstage-y += rom_media.c
 ramstage-y += clint.c
-
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/cheza/Makefile.inc b/src/mainboard/google/cheza/Makefile.inc
index e54aefb..949d775 100644
--- a/src/mainboard/google/cheza/Makefile.inc
+++ b/src/mainboard/google/cheza/Makefile.inc
@@ -1,24 +1,20 @@
 ## SPDX-License-Identifier: GPL-2.0-only
 
 bootblock-y += boardid.c
-bootblock-y += memlayout.ld
 bootblock-y += chromeos.c
 bootblock-y += bootblock.c
 bootblock-y += reset.c
 
 verstage-y += boardid.c
-verstage-y += memlayout.ld
 verstage-y += chromeos.c
 verstage-y += reset.c
 
 romstage-y += boardid.c
-romstage-y += memlayout.ld
 romstage-y += chromeos.c
 romstage-y += romstage.c
 romstage-y += reset.c
 
 ramstage-y += boardid.c
-ramstage-y += memlayout.ld
 ramstage-y += chromeos.c
 ramstage-y += mainboard.c
 ramstage-y += reset.c
diff --git a/src/mainboard/google/cheza/memlayout.ld b/src/mainboard/google/cheza/memlayout.ld
deleted file mode 100644
index 936c1a3..0000000
--- a/src/mainboard/google/cheza/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
- #include <soc/memlayout.ld>
diff --git a/src/mainboard/google/daisy/Makefile.inc b/src/mainboard/google/daisy/Makefile.inc
index 9faa2e0..4f5f87b 100644
--- a/src/mainboard/google/daisy/Makefile.inc
+++ b/src/mainboard/google/daisy/Makefile.inc
@@ -9,7 +9,3 @@
 
 ramstage-y += mainboard.c
 ramstage-y += chromeos.c
-
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/daisy/memlayout.ld b/src/mainboard/google/daisy/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/daisy/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/foster/Makefile.inc b/src/mainboard/google/foster/Makefile.inc
index 1b576a9..7deae3e 100644
--- a/src/mainboard/google/foster/Makefile.inc
+++ b/src/mainboard/google/foster/Makefile.inc
@@ -27,8 +27,3 @@
 ramstage-y += reset.c
 ramstage-y += chromeos.c
 ramstage-y += sdram_configs.c
-
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
-verstage-y += memlayout.ld
diff --git a/src/mainboard/google/foster/memlayout.ld b/src/mainboard/google/foster/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/foster/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/gale/Makefile.inc b/src/mainboard/google/gale/Makefile.inc
index 84b41e6..f23f804 100644
--- a/src/mainboard/google/gale/Makefile.inc
+++ b/src/mainboard/google/gale/Makefile.inc
@@ -9,7 +9,6 @@
 verstage-y += cdp.c
 verstage-y += chromeos.c
 verstage-y += blsp.c
-verstage-y += memlayout.ld
 verstage-y += reset.c
 verstage-y += verstage.c
 
@@ -28,7 +27,3 @@
 ramstage-y += mmu.c
 ramstage-y += reset.c
 ramstage-y += blsp.c
-
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/gale/memlayout.ld b/src/mainboard/google/gale/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/gale/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/gru/Makefile.inc b/src/mainboard/google/gru/Makefile.inc
index 8849162..b800945 100644
--- a/src/mainboard/google/gru/Makefile.inc
+++ b/src/mainboard/google/gru/Makefile.inc
@@ -2,22 +2,17 @@
 
 subdirs-y += sdram_params/
 
-decompressor-y += memlayout.ld
-
 bootblock-y += bootblock.c
 bootblock-y += chromeos.c
-bootblock-y += memlayout.ld
 bootblock-y += pwm_regulator.c
 bootblock-y += boardid.c
 bootblock-y += reset.c
 
 verstage-y += chromeos.c
-verstage-y += memlayout.ld
 verstage-y += reset.c
 
 romstage-y += boardid.c
 romstage-y += chromeos.c
-romstage-y += memlayout.ld
 romstage-y += pwm_regulator.c
 romstage-y += romstage.c
 romstage-y += reset.c
@@ -26,6 +21,5 @@
 ramstage-y += boardid.c
 ramstage-y += chromeos.c
 ramstage-y += mainboard.c
-ramstage-y += memlayout.ld
 ramstage-y += reset.c
 ramstage-y += sdram_configs.c  # Needed for ram_code()
diff --git a/src/mainboard/google/gru/memlayout.ld b/src/mainboard/google/gru/memlayout.ld
deleted file mode 100644
index 936c1a3..0000000
--- a/src/mainboard/google/gru/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
- #include <soc/memlayout.ld>
diff --git a/src/mainboard/google/kukui/Makefile.inc b/src/mainboard/google/kukui/Makefile.inc
index a2a147c..532712a 100644
--- a/src/mainboard/google/kukui/Makefile.inc
+++ b/src/mainboard/google/kukui/Makefile.inc
@@ -3,20 +3,16 @@
 
 bootblock-y += boardid.c
 bootblock-y += bootblock.c
-bootblock-y += memlayout.ld
 bootblock-y += reset.c
-decompressor-y += memlayout.ld
 
 verstage-y += chromeos.c
 verstage-y += early_init.c
 verstage-y += reset.c
 verstage-y += verstage.c
-verstage-y += memlayout.ld
 
 romstage-y += boardid.c
 romstage-y += chromeos.c
 romstage-y += early_init.c
-romstage-y += memlayout.ld
 romstage-y += reset.c
 romstage-y += romstage.c
 romstage-y += sdram_configs.c
@@ -24,7 +20,6 @@
 ramstage-y += boardid.c
 ramstage-y += chromeos.c
 ramstage-y += mainboard.c
-ramstage-y += memlayout.ld
 ramstage-$(CONFIG_BOARD_GOOGLE_FLAPJACK) += panel_flapjack.c
 ramstage-$(CONFIG_BOARD_GOOGLE_KAKADU) += panel_kakadu.c
 ramstage-$(CONFIG_BOARD_GOOGLE_KODAMA) += panel_kodama.c
diff --git a/src/mainboard/google/kukui/memlayout.ld b/src/mainboard/google/kukui/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/kukui/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/mistral/Makefile.inc b/src/mainboard/google/mistral/Makefile.inc
index ca191d1..48faadf 100644
--- a/src/mainboard/google/mistral/Makefile.inc
+++ b/src/mainboard/google/mistral/Makefile.inc
@@ -1,20 +1,16 @@
 
-bootblock-y += memlayout.ld
 bootblock-y += chromeos.c
 bootblock-y += reset.c
 bootblock-y += bootblock.c
 
-verstage-y += memlayout.ld
 verstage-y += chromeos.c
 verstage-y += reset.c
 verstage-y += verstage.c
 
-romstage-y += memlayout.ld
 romstage-y += chromeos.c
 romstage-y += reset.c
 romstage-y += romstage.c
 
-ramstage-y += memlayout.ld
 ramstage-y += chromeos.c
 ramstage-y += reset.c
 ramstage-y += mainboard.c
diff --git a/src/mainboard/google/mistral/memlayout.ld b/src/mainboard/google/mistral/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/mistral/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/nyan/Makefile.inc b/src/mainboard/google/nyan/Makefile.inc
index 124d412..190cfc5 100644
--- a/src/mainboard/google/nyan/Makefile.inc
+++ b/src/mainboard/google/nyan/Makefile.inc
@@ -29,8 +29,3 @@
 verstage-y += reset.c
 verstage-$(CONFIG_CHROMEOS) += chromeos.c
 verstage-y += early_configs.c
-
-bootblock-y += memlayout.ld
-verstage-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/nyan/memlayout.ld b/src/mainboard/google/nyan/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/nyan/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/nyan_big/Makefile.inc b/src/mainboard/google/nyan_big/Makefile.inc
index 5cf7356..b734b5b 100644
--- a/src/mainboard/google/nyan_big/Makefile.inc
+++ b/src/mainboard/google/nyan_big/Makefile.inc
@@ -28,8 +28,3 @@
 verstage-y += reset.c
 verstage-$(CONFIG_CHROMEOS) += chromeos.c
 verstage-y += early_configs.c
-
-bootblock-y += memlayout.ld
-verstage-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/nyan_big/memlayout.ld b/src/mainboard/google/nyan_big/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/nyan_big/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/nyan_blaze/Makefile.inc b/src/mainboard/google/nyan_blaze/Makefile.inc
index de582ba..54410f0 100644
--- a/src/mainboard/google/nyan_blaze/Makefile.inc
+++ b/src/mainboard/google/nyan_blaze/Makefile.inc
@@ -28,8 +28,3 @@
 ramstage-y += boardid.c
 ramstage-y += mainboard.c
 ramstage-$(CONFIG_CHROMEOS) += chromeos.c
-
-bootblock-y += memlayout.ld
-verstage-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/nyan_blaze/memlayout.ld b/src/mainboard/google/nyan_blaze/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/nyan_blaze/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/oak/Makefile.inc b/src/mainboard/google/oak/Makefile.inc
index 63ccc1e..79a80ee 100644
--- a/src/mainboard/google/oak/Makefile.inc
+++ b/src/mainboard/google/oak/Makefile.inc
@@ -1,23 +1,19 @@
 ## SPDX-License-Identifier: GPL-2.0-only
 
 bootblock-y += bootblock.c
-bootblock-y += memlayout.ld
 bootblock-y += chromeos.c
 bootblock-y += boardid.c
 bootblock-$(CONFIG_OAK_HAS_TPM2) += tpm_tis.c
 
 verstage-y += chromeos.c
-verstage-y += memlayout.ld
 verstage-$(CONFIG_OAK_HAS_TPM2) += tpm_tis.c
 
 romstage-y += chromeos.c
 romstage-y += romstage.c sdram_configs.c
-romstage-y += memlayout.ld
 romstage-y += boardid.c
 romstage-$(CONFIG_OAK_HAS_TPM2) += tpm_tis.c
 
 ramstage-y += mainboard.c
 ramstage-y += chromeos.c
-ramstage-y += memlayout.ld
 ramstage-y += boardid.c
 ramstage-$(CONFIG_OAK_HAS_TPM2) += tpm_tis.c
diff --git a/src/mainboard/google/oak/memlayout.ld b/src/mainboard/google/oak/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/oak/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/peach_pit/Makefile.inc b/src/mainboard/google/peach_pit/Makefile.inc
index 9faa2e0..4f5f87b 100644
--- a/src/mainboard/google/peach_pit/Makefile.inc
+++ b/src/mainboard/google/peach_pit/Makefile.inc
@@ -9,7 +9,3 @@
 
 ramstage-y += mainboard.c
 ramstage-y += chromeos.c
-
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/peach_pit/memlayout.ld b/src/mainboard/google/peach_pit/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/peach_pit/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/smaug/Makefile.inc b/src/mainboard/google/smaug/Makefile.inc
index 342e0dd..32c66b9 100644
--- a/src/mainboard/google/smaug/Makefile.inc
+++ b/src/mainboard/google/smaug/Makefile.inc
@@ -29,8 +29,3 @@
 ramstage-y += reset.c
 ramstage-y += pmic.c
 ramstage-y += sdram_configs.c
-
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
-verstage-y += memlayout.ld
diff --git a/src/mainboard/google/smaug/memlayout.ld b/src/mainboard/google/smaug/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/smaug/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/storm/Makefile.inc b/src/mainboard/google/storm/Makefile.inc
index 272c49b..b1bcacd 100644
--- a/src/mainboard/google/storm/Makefile.inc
+++ b/src/mainboard/google/storm/Makefile.inc
@@ -9,7 +9,6 @@
 verstage-y += cdp.c
 verstage-y += chromeos.c
 verstage-y += gsbi.c
-verstage-y += memlayout.ld
 verstage-y += reset.c
 
 romstage-y += romstage.c
@@ -26,7 +25,3 @@
 ramstage-y += mmu.c
 ramstage-y += reset.c
 ramstage-y += gsbi.c
-
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/storm/memlayout.ld b/src/mainboard/google/storm/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/storm/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/trogdor/Makefile.inc b/src/mainboard/google/trogdor/Makefile.inc
index 4a2b5d4..9a71ea5 100644
--- a/src/mainboard/google/trogdor/Makefile.inc
+++ b/src/mainboard/google/trogdor/Makefile.inc
@@ -1,23 +1,19 @@
 ## SPDX-License-Identifier: GPL-2.0-only
 
-bootblock-y += memlayout.ld
 bootblock-y += boardid.c
 bootblock-y += chromeos.c
 bootblock-y += bootblock.c
 
-verstage-y += memlayout.ld
 ifneq ($(CONFIG_BOARD_GOOGLE_BUBS),y)
 verstage-y += reset.c
 endif
 verstage-y += boardid.c
 verstage-y += chromeos.c
 
-romstage-y += memlayout.ld
 romstage-y += romstage.c
 romstage-y += boardid.c
 romstage-y += chromeos.c
 
-ramstage-y += memlayout.ld
 ramstage-y += mainboard.c
 ifneq ($(CONFIG_BOARD_GOOGLE_BUBS),y)
 ramstage-y += reset.c
diff --git a/src/mainboard/google/trogdor/memlayout.ld b/src/mainboard/google/trogdor/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/trogdor/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/veyron/Makefile.inc b/src/mainboard/google/veyron/Makefile.inc
index 76d141f..6c3b7f4 100644
--- a/src/mainboard/google/veyron/Makefile.inc
+++ b/src/mainboard/google/veyron/Makefile.inc
@@ -19,8 +19,3 @@
 ramstage-y += chromeos.c
 ramstage-y += mainboard.c
 ramstage-y += reset.c
-
-bootblock-y += memlayout.ld
-verstage-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/veyron/memlayout.ld b/src/mainboard/google/veyron/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/veyron/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/veyron_mickey/Makefile.inc b/src/mainboard/google/veyron_mickey/Makefile.inc
index 76d141f..6c3b7f4 100644
--- a/src/mainboard/google/veyron_mickey/Makefile.inc
+++ b/src/mainboard/google/veyron_mickey/Makefile.inc
@@ -19,8 +19,3 @@
 ramstage-y += chromeos.c
 ramstage-y += mainboard.c
 ramstage-y += reset.c
-
-bootblock-y += memlayout.ld
-verstage-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/veyron_mickey/memlayout.ld b/src/mainboard/google/veyron_mickey/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/veyron_mickey/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/veyron_rialto/Makefile.inc b/src/mainboard/google/veyron_rialto/Makefile.inc
index 76d141f..6c3b7f4 100644
--- a/src/mainboard/google/veyron_rialto/Makefile.inc
+++ b/src/mainboard/google/veyron_rialto/Makefile.inc
@@ -19,8 +19,3 @@
 ramstage-y += chromeos.c
 ramstage-y += mainboard.c
 ramstage-y += reset.c
-
-bootblock-y += memlayout.ld
-verstage-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/google/veyron_rialto/memlayout.ld b/src/mainboard/google/veyron_rialto/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/google/veyron_rialto/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/google/zork/Makefile.inc b/src/mainboard/google/zork/Makefile.inc
index 07628c1..ac828e2 100644
--- a/src/mainboard/google/zork/Makefile.inc
+++ b/src/mainboard/google/zork/Makefile.inc
@@ -11,7 +11,6 @@
 ramstage-y += sku_id.c
 
 ifeq ($(CONFIG_VBOOT_STARTS_BEFORE_BOOTBLOCK),y)
-verstage-y += memlayout.ld
 verstage-y += verstage.c
 else
 verstage-y += chromeos.c
diff --git a/src/mainboard/opencellular/elgon/Makefile.inc b/src/mainboard/opencellular/elgon/Makefile.inc
index 6b01982..c938289 100644
--- a/src/mainboard/opencellular/elgon/Makefile.inc
+++ b/src/mainboard/opencellular/elgon/Makefile.inc
@@ -1,18 +1,14 @@
 ## SPDX-License-Identifier: GPL-2.0-only
 
 bootblock-y += bootblock.c
-bootblock-y += memlayout.ld
 bootblock-y += death.c
 
-romstage-y += memlayout.ld
 romstage-y += romstage.c
 romstage-y += bdk_devicetree.c
 romstage-y += death.c
 
 ramstage-y += mainboard.c
-ramstage-y += memlayout.ld
 ramstage-y += bdk_devicetree.c
 ramstage-y += death.c
 
-verstage-y += memlayout.ld
 verstage-y += death.c
diff --git a/src/mainboard/opencellular/elgon/memlayout.ld b/src/mainboard/opencellular/elgon/memlayout.ld
deleted file mode 100644
index 9349362..0000000
--- a/src/mainboard/opencellular/elgon/memlayout.ld
+++ /dev/null
@@ -1 +0,0 @@
- #include <soc/memlayout.ld>
diff --git a/src/mainboard/sifive/hifive-unleashed/Makefile.inc b/src/mainboard/sifive/hifive-unleashed/Makefile.inc
index 02b8046..2a32df8 100644
--- a/src/mainboard/sifive/hifive-unleashed/Makefile.inc
+++ b/src/mainboard/sifive/hifive-unleashed/Makefile.inc
@@ -1,17 +1,13 @@
 # SPDX-License-Identifier: GPL-2.0-only
 
-bootblock-y += memlayout.ld
 bootblock-y += media.c
 
-romstage-y += memlayout.ld
 romstage-y += romstage.c
 romstage-y += media.c
 
-ramstage-y += memlayout.ld
 ramstage-y += fixup_fdt.c
 ramstage-y += media.c
 
-
 DTB=$(obj)/hifive-unleashed.dtb
 DTS=src/mainboard/sifive/hifive-unleashed/hifive-unleashed-a00.dts
 $(DTB): $(DTS)
diff --git a/src/mainboard/sifive/hifive-unleashed/memlayout.ld b/src/mainboard/sifive/hifive-unleashed/memlayout.ld
deleted file mode 100644
index 0f1fcec..0000000
--- a/src/mainboard/sifive/hifive-unleashed/memlayout.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <soc/memlayout.ld>
diff --git a/src/mainboard/ti/beaglebone/Makefile.inc b/src/mainboard/ti/beaglebone/Makefile.inc
index cf3fc5d..a703939 100644
--- a/src/mainboard/ti/beaglebone/Makefile.inc
+++ b/src/mainboard/ti/beaglebone/Makefile.inc
@@ -5,7 +5,3 @@
 romstage-y += romstage.c
 
 #ramstage-y += ramstage.c
-
-bootblock-y += memlayout.ld
-romstage-y += memlayout.ld
-ramstage-y += memlayout.ld
diff --git a/src/mainboard/ti/beaglebone/memlayout.ld b/src/mainboard/ti/beaglebone/memlayout.ld
deleted file mode 100644
index ff79e70..0000000
--- a/src/mainboard/ti/beaglebone/memlayout.ld
+++ /dev/null
@@ -1 +0,0 @@
-#include <cpu/ti/am335x/memlayout.ld>
diff --git a/src/soc/cavium/cn81xx/Kconfig b/src/soc/cavium/cn81xx/Kconfig
index f64350e..87edf45 100644
--- a/src/soc/cavium/cn81xx/Kconfig
+++ b/src/soc/cavium/cn81xx/Kconfig
@@ -14,6 +14,10 @@
 
 if SOC_CAVIUM_CN81XX
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/cavium/cn81xx/memlayout.ld"
+
 config VBOOT
 	select VBOOT_SEPARATE_VERSTAGE
 	select VBOOT_STARTS_IN_BOOTBLOCK
diff --git a/src/soc/cavium/cn81xx/include/soc/memlayout.ld b/src/soc/cavium/cn81xx/memlayout.ld
similarity index 100%
rename from src/soc/cavium/cn81xx/include/soc/memlayout.ld
rename to src/soc/cavium/cn81xx/memlayout.ld
diff --git a/src/soc/mediatek/mt8173/Kconfig b/src/soc/mediatek/mt8173/Kconfig
index 6476d42..15b833f 100644
--- a/src/soc/mediatek/mt8173/Kconfig
+++ b/src/soc/mediatek/mt8173/Kconfig
@@ -13,6 +13,10 @@
 
 if SOC_MEDIATEK_MT8173
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/mediatek/mt8173/memlayout.ld"
+
 config VBOOT
 	select VBOOT_MUST_REQUEST_DISPLAY
 	select VBOOT_STARTS_IN_BOOTBLOCK
diff --git a/src/soc/mediatek/mt8173/include/soc/memlayout.ld b/src/soc/mediatek/mt8173/memlayout.ld
similarity index 100%
rename from src/soc/mediatek/mt8173/include/soc/memlayout.ld
rename to src/soc/mediatek/mt8173/memlayout.ld
diff --git a/src/soc/mediatek/mt8183/Kconfig b/src/soc/mediatek/mt8183/Kconfig
index 46249be0..82827d1 100644
--- a/src/soc/mediatek/mt8183/Kconfig
+++ b/src/soc/mediatek/mt8183/Kconfig
@@ -11,6 +11,10 @@
 
 if SOC_MEDIATEK_MT8183
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/mediatek/mt8183/memlayout.ld"
+
 config VBOOT
 	select VBOOT_MUST_REQUEST_DISPLAY
 	select VBOOT_STARTS_IN_BOOTBLOCK
diff --git a/src/soc/mediatek/mt8183/include/soc/memlayout.ld b/src/soc/mediatek/mt8183/memlayout.ld
similarity index 100%
rename from src/soc/mediatek/mt8183/include/soc/memlayout.ld
rename to src/soc/mediatek/mt8183/memlayout.ld
diff --git a/src/soc/nvidia/tegra124/Kconfig b/src/soc/nvidia/tegra124/Kconfig
index c962aea..deca2cd 100644
--- a/src/soc/nvidia/tegra124/Kconfig
+++ b/src/soc/nvidia/tegra124/Kconfig
@@ -15,6 +15,10 @@
 
 if SOC_NVIDIA_TEGRA124
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/nvidia/tegra124/memlayout.ld"
+
 config VBOOT
 	select VBOOT_MUST_REQUEST_DISPLAY
 	select VBOOT_STARTS_IN_BOOTBLOCK
diff --git a/src/soc/nvidia/tegra124/include/soc/memlayout.ld b/src/soc/nvidia/tegra124/memlayout.ld
similarity index 100%
rename from src/soc/nvidia/tegra124/include/soc/memlayout.ld
rename to src/soc/nvidia/tegra124/memlayout.ld
diff --git a/src/soc/nvidia/tegra210/Kconfig b/src/soc/nvidia/tegra210/Kconfig
index 780fa18..32748f3 100644
--- a/src/soc/nvidia/tegra210/Kconfig
+++ b/src/soc/nvidia/tegra210/Kconfig
@@ -13,6 +13,10 @@
 
 if SOC_NVIDIA_TEGRA210
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/nvidia/tegra210/memlayout.ld"
+
 config VBOOT
 	select VBOOT_STARTS_IN_BOOTBLOCK
 	select VBOOT_SEPARATE_VERSTAGE
diff --git a/src/soc/nvidia/tegra210/include/soc/memlayout.ld b/src/soc/nvidia/tegra210/memlayout.ld
similarity index 100%
rename from src/soc/nvidia/tegra210/include/soc/memlayout.ld
rename to src/soc/nvidia/tegra210/memlayout.ld
diff --git a/src/soc/qualcomm/ipq40xx/Kconfig b/src/soc/qualcomm/ipq40xx/Kconfig
index ef80772..0eabb00 100644
--- a/src/soc/qualcomm/ipq40xx/Kconfig
+++ b/src/soc/qualcomm/ipq40xx/Kconfig
@@ -10,6 +10,10 @@
 
 if SOC_QC_IPQ40XX
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/qualcomm/ipq40xx/memlayout.ld"
+
 config GENERIC_UDELAY
 	def_bool n
 
diff --git a/src/soc/qualcomm/ipq40xx/include/soc/memlayout.ld b/src/soc/qualcomm/ipq40xx/memlayout.ld
similarity index 100%
rename from src/soc/qualcomm/ipq40xx/include/soc/memlayout.ld
rename to src/soc/qualcomm/ipq40xx/memlayout.ld
diff --git a/src/soc/qualcomm/ipq806x/Kconfig b/src/soc/qualcomm/ipq806x/Kconfig
index fa0fefe..7de2a99 100644
--- a/src/soc/qualcomm/ipq806x/Kconfig
+++ b/src/soc/qualcomm/ipq806x/Kconfig
@@ -11,6 +11,10 @@
 
 if SOC_QC_IPQ806X
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/qualcomm/ipq806x/memlayout.ld"
+
 config VBOOT
 	select VBOOT_STARTS_IN_BOOTBLOCK
 	select VBOOT_VBNV_FLASH
diff --git a/src/soc/qualcomm/ipq806x/include/soc/memlayout.ld b/src/soc/qualcomm/ipq806x/memlayout.ld
similarity index 100%
rename from src/soc/qualcomm/ipq806x/include/soc/memlayout.ld
rename to src/soc/qualcomm/ipq806x/memlayout.ld
diff --git a/src/soc/qualcomm/qcs405/Kconfig b/src/soc/qualcomm/qcs405/Kconfig
index 60d8e3a..0dc96ba 100644
--- a/src/soc/qualcomm/qcs405/Kconfig
+++ b/src/soc/qualcomm/qcs405/Kconfig
@@ -13,6 +13,10 @@
 
 if SOC_QUALCOMM_QCS405
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/qualcomm/qcs405/memlayout.ld"
+
 config VBOOT
 	select VBOOT_SEPARATE_VERSTAGE
 	select VBOOT_RETURN_FROM_VERSTAGE
diff --git a/src/soc/qualcomm/qcs405/include/soc/memlayout.ld b/src/soc/qualcomm/qcs405/memlayout.ld
similarity index 100%
rename from src/soc/qualcomm/qcs405/include/soc/memlayout.ld
rename to src/soc/qualcomm/qcs405/memlayout.ld
diff --git a/src/soc/qualcomm/sc7180/Kconfig b/src/soc/qualcomm/sc7180/Kconfig
index faf036e..d3dab7a 100644
--- a/src/soc/qualcomm/sc7180/Kconfig
+++ b/src/soc/qualcomm/sc7180/Kconfig
@@ -16,6 +16,10 @@
 
 if SOC_QUALCOMM_SC7180
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/qualcomm/sc7180/memlayout.ld"
+
 config VBOOT
 	select VBOOT_SEPARATE_VERSTAGE
 	select VBOOT_RETURN_FROM_VERSTAGE
diff --git a/src/soc/qualcomm/sc7180/include/soc/memlayout.ld b/src/soc/qualcomm/sc7180/memlayout.ld
similarity index 100%
rename from src/soc/qualcomm/sc7180/include/soc/memlayout.ld
rename to src/soc/qualcomm/sc7180/memlayout.ld
diff --git a/src/soc/qualcomm/sdm845/Kconfig b/src/soc/qualcomm/sdm845/Kconfig
index dbe025e..c93ec6c 100644
--- a/src/soc/qualcomm/sdm845/Kconfig
+++ b/src/soc/qualcomm/sdm845/Kconfig
@@ -12,6 +12,10 @@
 
 if SOC_QUALCOMM_SDM845
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/qualcomm/sdm845/memlayout.ld"
+
 config VBOOT
 	select VBOOT_SEPARATE_VERSTAGE
 	select VBOOT_RETURN_FROM_VERSTAGE
diff --git a/src/soc/qualcomm/sdm845/include/soc/memlayout.ld b/src/soc/qualcomm/sdm845/memlayout.ld
similarity index 100%
rename from src/soc/qualcomm/sdm845/include/soc/memlayout.ld
rename to src/soc/qualcomm/sdm845/memlayout.ld
diff --git a/src/soc/rockchip/rk3288/Kconfig b/src/soc/rockchip/rk3288/Kconfig
index 3198aa4..3dc9a9b 100644
--- a/src/soc/rockchip/rk3288/Kconfig
+++ b/src/soc/rockchip/rk3288/Kconfig
@@ -20,6 +20,10 @@
 
 if SOC_ROCKCHIP_RK3288
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/rockchip/rk3288/memlayout.ld"
+
 config VBOOT
 	select VBOOT_MUST_REQUEST_DISPLAY
 	select VBOOT_STARTS_IN_BOOTBLOCK
diff --git a/src/soc/rockchip/rk3288/include/soc/memlayout.ld b/src/soc/rockchip/rk3288/memlayout.ld
similarity index 100%
rename from src/soc/rockchip/rk3288/include/soc/memlayout.ld
rename to src/soc/rockchip/rk3288/memlayout.ld
diff --git a/src/soc/rockchip/rk3399/Kconfig b/src/soc/rockchip/rk3399/Kconfig
index 7e3c44b..4f7af9e 100644
--- a/src/soc/rockchip/rk3399/Kconfig
+++ b/src/soc/rockchip/rk3399/Kconfig
@@ -14,6 +14,10 @@
 
 if SOC_ROCKCHIP_RK3399
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/rockchip/rk3399/memlayout.ld"
+
 config VBOOT
 	select VBOOT_SEPARATE_VERSTAGE
 	select VBOOT_RETURN_FROM_VERSTAGE
diff --git a/src/soc/rockchip/rk3399/include/soc/memlayout.ld b/src/soc/rockchip/rk3399/memlayout.ld
similarity index 100%
rename from src/soc/rockchip/rk3399/include/soc/memlayout.ld
rename to src/soc/rockchip/rk3399/memlayout.ld
diff --git a/src/soc/samsung/exynos5250/Kconfig b/src/soc/samsung/exynos5250/Kconfig
index 680bd66..28a89fa 100644
--- a/src/soc/samsung/exynos5250/Kconfig
+++ b/src/soc/samsung/exynos5250/Kconfig
@@ -9,6 +9,10 @@
 
 if CPU_SAMSUNG_EXYNOS5250
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/samsung/exynos5250/memlayout.ld"
+
 config VBOOT
 	select VBOOT_STARTS_IN_ROMSTAGE
 
diff --git a/src/soc/samsung/exynos5250/include/soc/memlayout.ld b/src/soc/samsung/exynos5250/memlayout.ld
similarity index 100%
rename from src/soc/samsung/exynos5250/include/soc/memlayout.ld
rename to src/soc/samsung/exynos5250/memlayout.ld
diff --git a/src/soc/samsung/exynos5420/Kconfig b/src/soc/samsung/exynos5420/Kconfig
index 3af8e64..1b80ffc 100644
--- a/src/soc/samsung/exynos5420/Kconfig
+++ b/src/soc/samsung/exynos5420/Kconfig
@@ -11,6 +11,10 @@
 
 if CPU_SAMSUNG_EXYNOS5420
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/samsung/exynos5420/memlayout.ld"
+
 config VBOOT
 	select VBOOT_STARTS_IN_ROMSTAGE
 
diff --git a/src/soc/samsung/exynos5420/include/soc/memlayout.ld b/src/soc/samsung/exynos5420/memlayout.ld
similarity index 100%
rename from src/soc/samsung/exynos5420/include/soc/memlayout.ld
rename to src/soc/samsung/exynos5420/memlayout.ld
diff --git a/src/soc/sifive/fu540/Kconfig b/src/soc/sifive/fu540/Kconfig
index 64985bd..4aa4961 100644
--- a/src/soc/sifive/fu540/Kconfig
+++ b/src/soc/sifive/fu540/Kconfig
@@ -17,6 +17,10 @@
 
 if SOC_SIFIVE_FU540
 
+config MEMLAYOUT_LD_FILE
+	string
+	default "src/soc/sifive/fu540/memlayout.ld"
+
 config RISCV_ARCH
 	string
 	default "rv64imac"
diff --git a/src/soc/sifive/fu540/include/soc/memlayout.ld b/src/soc/sifive/fu540/memlayout.ld
similarity index 100%
rename from src/soc/sifive/fu540/include/soc/memlayout.ld
rename to src/soc/sifive/fu540/memlayout.ld