blob: 6499283c0854cf9b41148c64443e69f07ed7f410 [file] [log] [blame]
Patrick Georgi0a3d4e02020-03-04 14:39:09 +01001## SPDX-License-Identifier: GPL-2.0-only
Furquan Shaikh2af76f42014-04-28 16:39:40 -07002
3################################################################################
4# Take care of subdirectories
5################################################################################
6
Julius Werner7dcf9d52015-10-16 13:10:02 -07007subdirs-y += armv8/
Furquan Shaikh2af76f42014-04-28 16:39:40 -07008
9################################################################################
10# ARM specific options
11################################################################################
12
Julius Wernerfffee872016-03-07 17:55:43 -080013ifeq ($(CONFIG_ARCH_RAMSTAGE_ARM64),y)
14check-ramstage-overlap-regions += postram_cbfs_cache stack ttb
15endif
16
Furquan Shaikh2af76f42014-04-28 16:39:40 -070017################################################################################
18# bootblock
19################################################################################
20
21ifeq ($(CONFIG_ARCH_BOOTBLOCK_ARM64),y)
22
Julius Werner99f46832018-05-16 14:14:04 -070023decompressor-y += boot.c
24bootblock-y += boot.c
25decompressor-y += div0.c
Furquan Shaikh2af76f42014-04-28 16:39:40 -070026bootblock-y += div0.c
Julius Werner99f46832018-05-16 14:14:04 -070027decompressor-y += eabi_compat.c
28bootblock-y += eabi_compat.c
Furquan Shaikh2af76f42014-04-28 16:39:40 -070029
Julius Werner87feced2020-09-29 19:23:36 -070030decompressor-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c
T Michael Turney3775f1c2018-04-24 10:15:46 -070031bootblock-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c
Furquan Shaikh668316b2014-08-30 21:59:11 -070032bootblock-y += transition.c transition_asm.S
Benjamin Doronf27b22a2023-06-14 18:43:59 -040033ifneq ($(CONFIG_ARM64_CURRENT_EL),3)
34bootblock-y += smc.c smc_asm.S
35endif
Furquan Shaikh668316b2014-08-30 21:59:11 -070036
Julius Werner99f46832018-05-16 14:14:04 -070037decompressor-y += memset.S
Furquan Shaikh464f5ca2015-06-08 10:31:55 -070038bootblock-y += memset.S
Julius Werner99f46832018-05-16 14:14:04 -070039decompressor-y += memcpy.S
Furquan Shaikh464f5ca2015-06-08 10:31:55 -070040bootblock-y += memcpy.S
Julius Werner99f46832018-05-16 14:14:04 -070041decompressor-y += memmove.S
Furquan Shaikh464f5ca2015-06-08 10:31:55 -070042bootblock-y += memmove.S
Furquan Shaikh2af76f42014-04-28 16:39:40 -070043
44# Build the bootblock
45
Julius Wernerec5e5e02014-08-20 15:29:56 -070046$(objcbfs)/bootblock.debug: $$(bootblock-objs) $(obj)/config.h
Furquan Shaikh2af76f42014-04-28 16:39:40 -070047 @printf " LINK $(subst $(obj)/,,$(@))\n"
Furquan Shaikh46514c22020-06-11 11:59:07 -070048 $(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))
Furquan Shaikh2af76f42014-04-28 16:39:40 -070049
Julius Werner99f46832018-05-16 14:14:04 -070050$(objcbfs)/decompressor.debug: $$(decompressor-objs) $(obj)/config.h
51 @printf " LINK $(subst $(obj)/,,$(@))\n"
Furquan Shaikh46514c22020-06-11 11:59:07 -070052 $(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))
Julius Werner99f46832018-05-16 14:14:04 -070053
Furquan Shaikh2af76f42014-04-28 16:39:40 -070054endif # CONFIG_ARCH_BOOTBLOCK_ARM64
55
Furquan Shaikh6f33f0a2014-10-02 16:43:19 -070056###############################################################################
57# verification stage
58###############################################################################
59
60ifeq ($(CONFIG_ARCH_VERSTAGE_ARM64),y)
61
Julius Wernere91d1702017-03-20 15:32:15 -070062$(objcbfs)/verstage.debug: $$(verstage-objs)
Furquan Shaikh6f33f0a2014-10-02 16:43:19 -070063 @printf " LINK $(subst $(obj)/,,$(@))\n"
Furquan Shaikh46514c22020-06-11 11:59:07 -070064 $(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))
Furquan Shaikh6f33f0a2014-10-02 16:43:19 -070065
Aaron Durbinbc409332015-05-08 15:52:52 -050066verstage-y += boot.c
Furquan Shaikh6f33f0a2014-10-02 16:43:19 -070067verstage-y += div0.c
68verstage-y += eabi_compat.c
T Michael Turney3775f1c2018-04-24 10:15:46 -070069verstage-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c
Julius Werner2f891a02017-03-20 15:38:02 -070070verstage-y += memset.S
71verstage-y += memcpy.S
72verstage-y += memmove.S
Furquan Shaikh6f33f0a2014-10-02 16:43:19 -070073
Itamarab0df6d2015-07-31 17:10:46 +080074verstage-y += transition.c transition_asm.S
Benjamin Doronf27b22a2023-06-14 18:43:59 -040075ifneq ($(CONFIG_ARM64_CURRENT_EL),3)
76verstage-y += smc.c smc_asm.S
77endif
Itamarab0df6d2015-07-31 17:10:46 +080078
Furquan Shaikh6f33f0a2014-10-02 16:43:19 -070079endif # CONFIG_ARCH_VERSTAGE_ARM64
80
Furquan Shaikh2af76f42014-04-28 16:39:40 -070081################################################################################
82# romstage
83################################################################################
84
85ifeq ($(CONFIG_ARCH_ROMSTAGE_ARM64),y)
86
Aaron Durbinb3847e62015-03-20 15:55:08 -050087romstage-y += boot.c
Furquan Shaikh2af76f42014-04-28 16:39:40 -070088romstage-y += div0.c
Furquan Shaikh2af76f42014-04-28 16:39:40 -070089romstage-y += eabi_compat.c
T Michael Turney3775f1c2018-04-24 10:15:46 -070090romstage-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c
Furquan Shaikh464f5ca2015-06-08 10:31:55 -070091romstage-y += memset.S
92romstage-y += memcpy.S
93romstage-y += memmove.S
Asami Doi06993ee2019-08-07 13:40:53 +090094romstage-y += ramdetect.c
Julius Werner5d6593a2018-08-10 16:13:26 -070095romstage-y += romstage.c
Furquan Shaikh668316b2014-08-30 21:59:11 -070096romstage-y += transition.c transition_asm.S
Benjamin Doronf27b22a2023-06-14 18:43:59 -040097ifneq ($(CONFIG_ARM64_CURRENT_EL),3)
98romstage-y += smc.c smc_asm.S
99endif
Furquan Shaikh2af76f42014-04-28 16:39:40 -0700100
Furquan Shaikh464f5ca2015-06-08 10:31:55 -0700101rmodules_arm64-y += memset.S
102rmodules_arm64-y += memcpy.S
103rmodules_arm64-y += memmove.S
Furquan Shaikha742ef12014-07-23 11:41:59 -0700104rmodules_arm64-y += eabi_compat.c
105
Julius Wernerec5e5e02014-08-20 15:29:56 -0700106$(objcbfs)/romstage.debug: $$(romstage-objs)
Furquan Shaikh2af76f42014-04-28 16:39:40 -0700107 @printf " LINK $(subst $(obj)/,,$(@))\n"
Furquan Shaikh46514c22020-06-11 11:59:07 -0700108 $(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))
Furquan Shaikh2af76f42014-04-28 16:39:40 -0700109
110endif # CONFIG_ARCH_ROMSTAGE_ARM64
111
112################################################################################
113# ramstage
114################################################################################
115
116ifeq ($(CONFIG_ARCH_RAMSTAGE_ARM64),y)
117
Furquan Shaikh2af76f42014-04-28 16:39:40 -0700118ramstage-y += div0.c
Furquan Shaikh2af76f42014-04-28 16:39:40 -0700119ramstage-y += eabi_compat.c
120ramstage-y += boot.c
Benjamin Doronf27b22a2023-06-14 18:43:59 -0400121ramstage-$(CONFIG_GENERATE_SMBIOS_TABLES) += smbios.c
Furquan Shaikh2af76f42014-04-28 16:39:40 -0700122ramstage-y += tables.c
Asami Doi06993ee2019-08-07 13:40:53 +0900123ramstage-y += ramdetect.c
T Michael Turney3775f1c2018-04-24 10:15:46 -0700124ramstage-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c
Furquan Shaikh464f5ca2015-06-08 10:31:55 -0700125ramstage-y += memset.S
126ramstage-y += memcpy.S
127ramstage-y += memmove.S
Julius Werner0a8da742019-08-02 12:45:24 -0700128ramstage-$(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE) += bl31.c
Furquan Shaikh668316b2014-08-30 21:59:11 -0700129ramstage-y += transition.c transition_asm.S
Benjamin Doronf27b22a2023-06-14 18:43:59 -0400130ifneq ($(CONFIG_ARM64_CURRENT_EL),3)
131ramstage-y += smc.c smc_asm.S
132endif
Patrick Rudolpha892cde2018-04-19 14:39:07 +0200133ramstage-$(CONFIG_PAYLOAD_FIT_SUPPORT) += fit_payload.c
Maximilian Brune44bbf6c2023-09-18 17:41:15 +0200134ramstage-$(CONFIG_HAVE_ACPI_TABLES) += acpi.c
Maximilian Bruneb3e336c2023-09-16 19:49:39 +0200135ramstage-y += dma.c
Furquan Shaikh668316b2014-08-30 21:59:11 -0700136
Furquan Shaikh464f5ca2015-06-08 10:31:55 -0700137rmodules_arm64-y += memset.S
138rmodules_arm64-y += memcpy.S
139rmodules_arm64-y += memmove.S
Furquan Shaikhfbff9082014-07-22 15:59:16 -0700140rmodules_arm64-y += eabi_compat.c
T Michael Turney3775f1c2018-04-24 10:15:46 -0700141rmodules_arm64-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c
Furquan Shaikhabde3b52014-08-26 15:39:51 -0700142
Marc Jones17b9c192015-01-16 13:45:23 -0700143ramstage-srcs += $(wildcard src/mainboard/$(MAINBOARDDIR)/mainboard.c)
Furquan Shaikh2af76f42014-04-28 16:39:40 -0700144
145# Build the ramstage
146
Julius Wernerec5e5e02014-08-20 15:29:56 -0700147$(objcbfs)/ramstage.debug: $$(ramstage-objs)
Furquan Shaikh2af76f42014-04-28 16:39:40 -0700148 @printf " CC $(subst $(obj)/,,$(@))\n"
Furquan Shaikh46514c22020-06-11 11:59:07 -0700149 $(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))
Furquan Shaikh2af76f42014-04-28 16:39:40 -0700150
Julius Werner745a75f2015-05-11 16:45:56 -0700151# Build ARM Trusted Firmware (BL31)
152
153ifeq ($(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE),y)
154
Patrick Rudolphd308ed32018-07-20 09:08:42 +0200155ifeq ($(CONFIG_ARM64_BL31_EXTERNAL_FILE),"")
156
Julius Werner745a75f2015-05-11 16:45:56 -0700157BL31_SOURCE := $(top)/3rdparty/arm-trusted-firmware
Julius Werner50e76702016-10-29 00:10:53 -0700158BL31_BUILD := $(abspath $(obj)/3rdparty/arm-trusted-firmware)
159BL31_TARGET := $(BL31_BUILD)/bl31/bl31.elf
Julius Werner745a75f2015-05-11 16:45:56 -0700160
Julius Werner745a75f2015-05-11 16:45:56 -0700161ifeq ($(V),1)
162BL31_MAKEARGS += V=1
163endif
164
Julius Werner91ebbfd2017-07-25 13:55:43 -0700165# Build ARM TF in debug mode (with assertions) if coreboot has hard assertions
166ifeq ($(CONFIG_FATAL_ASSERTS),y)
Julius Werner745a75f2015-05-11 16:45:56 -0700167BL31_MAKEARGS += DEBUG=1
Yu-Ping Wu6d169aa2023-07-03 16:06:36 +0800168endif # CONFIG_FATAL_ASSERTS
Julius Werner745a75f2015-05-11 16:45:56 -0700169
Julius Werner91ebbfd2017-07-25 13:55:43 -0700170# ARM TF's VERBOSE (50) is *very* spammy, so default to INFO (40)
171BL31_MAKEARGS += LOG_LEVEL=40
172
173# Always enable crash reporting, even on a release build
174BL31_MAKEARGS += CRASH_REPORTING=1
175
176# Enable coreboot-specific features like CBMEM console support
177BL31_MAKEARGS += COREBOOT=1
178
Julius Werner745a75f2015-05-11 16:45:56 -0700179# Avoid build/release|build/debug distinction by overriding BUILD_PLAT directly
Julius Werner50e76702016-10-29 00:10:53 -0700180BL31_MAKEARGS += BUILD_PLAT="$(BL31_BUILD)"
181
182# Force making .d files and output directories even though target is not 'bl31'
183BL31_MAKEARGS += IS_ANYTHING_TO_BUILD=1
Julius Werner745a75f2015-05-11 16:45:56 -0700184
Patrick Georgidcc3ecc2016-01-28 15:00:54 +0100185# Set a consistent build timestamp: the same coreboot has
Nico Hubercccb2d72020-02-09 12:09:18 +0100186BL31_MAKEARGS += BUILD_MESSAGE_TIMESTAMP='"$(shell sed -n 's/^.define COREBOOT_BUILD\>.*"\(.*\)".*/\1/p' $(obj)/build.h)"'
Patrick Georgidcc3ecc2016-01-28 15:00:54 +0100187
Martin Roth76b8c0e2017-03-23 09:37:01 -0600188BL31_CFLAGS := -fno-pic -fno-stack-protector -Wno-deprecated-declarations -Wno-unused-function
Yidi Lin3d807d22024-05-04 17:25:33 +0800189BL31_LDFLAGS := -Wl,--emit-relocs
Julius Werner745a75f2015-05-11 16:45:56 -0700190
Patrick Georgi2268b3b2015-06-29 22:13:53 +0200191BL31 := $(obj)/bl31.elf
Julius Werner745a75f2015-05-11 16:45:56 -0700192
Patrick Georgidcc3ecc2016-01-28 15:00:54 +0100193$(BL31): $(obj)/build.h
Patrick Georgi78a5f222017-01-30 15:29:34 +0100194 printf " MAKE $(subst $(obj)/,,$(@))\n"
Yidi Lin3d807d22024-05-04 17:25:33 +0800195 +unset AS AR CC CPP OC OD LD; \
Yidi Lin7e3cabe2024-05-04 17:18:44 +0800196 CROSS_COMPILE="$(CROSS_COMPILE_arm64)" \
Julius Werner745a75f2015-05-11 16:45:56 -0700197 CFLAGS="$(BL31_CFLAGS)" \
198 LDFLAGS="$(BL31_LDFLAGS)" \
Martin Roth80c314d2016-12-29 19:55:28 -0700199 $(MAKE) -C $(BL31_SOURCE) $(BL31_MAKEARGS) $(BL31_TARGET) DISABLE_PEDANTIC=1
Julius Werner50e76702016-10-29 00:10:53 -0700200 mv $(BL31_TARGET) $@
Julius Werner745a75f2015-05-11 16:45:56 -0700201
202.PHONY: $(BL31)
203
Patrick Rudolphd308ed32018-07-20 09:08:42 +0200204else
205
206BL31 := $(call strip_quotes,$(CONFIG_ARM64_BL31_EXTERNAL_FILE))
207
208endif # CONFIG_ARM64_BUILD_ARM_TRUSTED_FIRMWARE
209
210
Patrick Georgi6dc85702015-11-30 22:44:53 +0100211BL31_CBFS := $(CONFIG_CBFS_PREFIX)/bl31
Julius Werner745a75f2015-05-11 16:45:56 -0700212$(BL31_CBFS)-file := $(BL31)
Ronald G. Minnichc6d13492018-05-15 18:05:07 -0700213$(BL31_CBFS)-type := payload
Julius Werner745a75f2015-05-11 16:45:56 -0700214$(BL31_CBFS)-compression := $(CBFS_COMPRESS_FLAG)
215cbfs-files-y += $(BL31_CBFS)
216
Julius Wernerfffee872016-03-07 17:55:43 -0800217check-ramstage-overlap-files += $(BL31_CBFS)
218
Furquan Shaikha384c282015-05-28 12:13:51 -0700219ifeq ($(CONFIG_ARM64_USE_SECURE_OS),y)
220
221SECURE_OS_FILE := $(CONFIG_ARM64_SECURE_OS_FILE)
Patrick Georgi6dc85702015-11-30 22:44:53 +0100222SECURE_OS_FILE_CBFS := $(CONFIG_CBFS_PREFIX)/secure_os
Furquan Shaikha384c282015-05-28 12:13:51 -0700223$(SECURE_OS_FILE_CBFS)-file := $(SECURE_OS_FILE)
224$(SECURE_OS_FILE_CBFS)-type := stage
225cbfs-files-y += $(SECURE_OS_FILE_CBFS)
226
Julius Wernerfffee872016-03-07 17:55:43 -0800227check-ramstage-overlap-files += $(SECURE_OS_FILE_CBFS)
228
Furquan Shaikha384c282015-05-28 12:13:51 -0700229endif # CONFIG_ARM64_USE_SECURE_OS
230
Julius Werner745a75f2015-05-11 16:45:56 -0700231endif # CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE
232
Furquan Shaikh2af76f42014-04-28 16:39:40 -0700233endif # CONFIG_ARCH_RAMSTAGE_ARM64