blob: 2ac4987e00835844993072b9fbbb535f10f7ce22 [file] [log] [blame]
Martin Roth059988d2017-11-11 20:06:19 -07001#*****************************************************************************
2#
Martin Roth059988d2017-11-11 20:06:19 -07003# Redistribution and use in source and binary forms, with or without
4# modification, are permitted provided that the following conditions are met:
5# * Redistributions of source code must retain the above copyright
6# notice, this list of conditions and the following disclaimer.
7# * Redistributions in binary form must reproduce the above copyright
8# notice, this list of conditions and the following disclaimer in the
9# documentation and/or other materials provided with the distribution.
10# * Neither the name of Advanced Micro Devices, Inc. nor the names of
11# its contributors may be used to endorse or promote products derived
12# from this software without specific prior written permission.
13#
14# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17# DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
18# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24#
25#*****************************************************************************
26
Marshall Dawsond7868432019-11-25 11:47:32 -070027ifeq ($(CONFIG_SOC_AMD_STONEYRIDGE),y)
Martin Roth059988d2017-11-11 20:06:19 -070028# AGESA V5 Files
29
30AGESA_ROOT = $(call strip_quotes,$(CONFIG_AGESA_BINARY_PI_VENDORCODE_PATH))
31
Martin Rothece69f22017-11-16 22:34:26 -070032BINARY_PI_INC = -I$(AGESA_ROOT)
33BINARY_PI_INC += -I$(AGESA_ROOT)/binaryPI
34BINARY_PI_INC += -I$(AGESA_ROOT)/Include
Martin Rothece69f22017-11-16 22:34:26 -070035BINARY_PI_INC += -I$(AGESA_ROOT)/Proc
36BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/Common
37BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/CPU
38BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/CPU/Family
39BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/Fch
40BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/Fch/Common
Martin Rothece69f22017-11-16 22:34:26 -070041
Martin Roth24139182017-11-16 16:00:53 -070042AGESA_INC = -I$(obj)
Martin Rothece69f22017-11-16 22:34:26 -070043AGESA_INC += $(BINARY_PI_INC)
Martin Roth059988d2017-11-11 20:06:19 -070044
45AGESA_INC += -I$(src)/soc/amd/stoneyridge/include
Aaron Durbin49ec3f02017-12-12 10:01:06 -070046AGESA_INC += -I$(src)/soc/amd/common/block/include
Martin Roth059988d2017-11-11 20:06:19 -070047
48AGESA_INC += -I$(src)/arch/x86/include
49AGESA_INC += -I$(src)/include
50AGESA_INC += -I$(src)/commonlib/include
51AGESA_INC += -I$(VBOOT_SOURCE)/firmware/include
52
Martin Rothece69f22017-11-16 22:34:26 -070053AGESA_CFLAGS += -march=amdfam10 -fno-strict-aliasing -D__LIBAGESA__
Martin Roth059988d2017-11-11 20:06:19 -070054
Martin Rothece69f22017-11-16 22:34:26 -070055CC_bootblock := $(CC_bootblock) $(BINARY_PI_INC)
56CC_romstage := $(CC_romstage) $(BINARY_PI_INC)
Martin Roth059988d2017-11-11 20:06:19 -070057CC_postcar:= $(CC_postcar) -I$(AGESA_ROOT)/binaryPI
Martin Rothece69f22017-11-16 22:34:26 -070058CC_ramstage := $(CC_ramstage) $(BINARY_PI_INC)
Martin Roth059988d2017-11-11 20:06:19 -070059
60#######################################################################
61
62define create_agesa_cp_template
63# $1 AGESA source file
64
65$(agesa_src_path)/$(notdir $1): $1
66 @printf " AGESA Copying $$(notdir $1) => $$(@D)\n"
67 if [ ! -r $(agesa_src_path)/$(notdir $1) ]; then \
68 cp -f $1 $$(@D); \
69 fi
70
71$(call src-to-obj,libagesa,$1): $(agesa_src_path)/$(notdir $1) $(obj)/config.h $(src)/include/kconfig.h
72 @printf " CC $$(subst $(obj)/,,$$(@))\n"
Julius Werner98eeb962019-12-11 15:47:42 -080073 $(CC_libagesa) -c -MMD $(CFLAGS_libagesa) $(AGESA_CFLAGS) \
74 $(AGESA_INC) \
75 -include $(src)/include/kconfig.h \
76 -include $(src)/include/rules.h \
77 -include $(src)/commonlib/bsd/include/commonlib/bsd/compiler.h \
78 -o $$@ \
Martin Roth059988d2017-11-11 20:06:19 -070079 $(agesa_src_path)/$(notdir $1)
80
81endef
82
Martin Roth744104e2017-11-12 09:59:37 -070083agesa_raw_files += $(wildcard $(AGESA_ROOT)/Lib/*.[cS])
Martin Roth059988d2017-11-11 20:06:19 -070084
85agesa_raw_files += $(wildcard $(AGESA_ROOT)/binaryPI/*.[cS])
86
Arthur Heymans81a4fef2022-11-01 23:33:45 +010087classes-y += libagesa
Martin Roth059988d2017-11-11 20:06:19 -070088
89ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32),y)
90$(eval $(call create_class_compiler,libagesa,x86_32))
91else
92$(eval $(call create_class_compiler,libagesa,x86_64))
93endif
94
95agesa_src_files := $(strip $(sort $(foreach file,$(strip $(agesa_raw_files)),$(call strip_quotes,$(file)))))
96agesa_output_path := $(obj)/libagesa
97agesa_src_path := $(agesa_output_path)
98agesa_dirs := $(sort $(abspath $(dir $(call src-to-obj,libagesa,$(agesa_src_files)))))
99
100additional-dirs += $(agesa_src_path) $(agesa_dirs)
101
102$(foreach file,$(strip $(agesa_src_files)),$(eval $(call create_agesa_cp_template,$(file))))
103
104$(agesa_output_path)/libagesa.a: $(call src-to-obj,libagesa,$(agesa_src_files))
105 @printf " AGESA $(subst $(obj)/,,$(@))\n"
106 $(AR_libagesa) rcs $@ $+
107
108bootblock-libs += $(agesa_output_path)/libagesa.a
109romstage-libs += $(agesa_output_path)/libagesa.a
110ramstage-libs += $(agesa_output_path)/libagesa.a
111
112#######################################################################
113
Marshall Dawsonfd6fb282019-11-25 17:53:29 -0700114warn_no_agesa:
115 printf "\n\t** WARNING **\n"
116 printf "coreboot has been built with no AGESA support. Successfully "
117 printf "booting this image will be impossible.\n\n"
118
Marshall Dawson19be7b52020-01-02 15:38:59 -0700119PHONY+=warn_no_agesa
Marshall Dawsonfd6fb282019-11-25 17:53:29 -0700120
Justin TerAvest92261952017-12-22 15:15:02 -0700121ifeq ($(CONFIG_AGESA_SPLIT_MEMORY_FILES), y)
Aaron Durbin931ed7f2017-12-22 17:13:17 -0700122
123# convert input elf to rmodule
124AGESA_POST_MEM_INPUT_ELF = $(call strip_quotes,$(CONFIG_AGESA_POST_MEMORY_BINARY_PI_FILE))
Marshall Dawsonfd6fb282019-11-25 17:53:29 -0700125
126# If no post-mem file then also skip pre-mem file
Patrick Georgia1d668e2019-12-12 16:25:28 +0100127ifeq ($(AGESA_POST_MEM_INPUT_ELF),)
Marshall Dawsonfd6fb282019-11-25 17:53:29 -0700128files_added:: warn_no_agesa
129else
Aaron Durbin931ed7f2017-12-22 17:13:17 -0700130AGESA_POST_MEM_ELF = $(objcbfs)/$(patsubst %.elf,%.debug,$(notdir $(AGESA_POST_MEM_INPUT_ELF)))
131AGESA_POST_MEM_ELF_RMOD = $(AGESA_POST_MEM_ELF).rmod
132
133$(AGESA_POST_MEM_ELF): $(AGESA_POST_MEM_INPUT_ELF)
134 cp $< $@
135
136$(AGESA_POST_MEM_ELF_RMOD): $(AGESA_POST_MEM_ELF)
137
Arthur Heymans81a4fef2022-11-01 23:33:45 +0100138cbfs-files-y += $(CONFIG_AGESA_PRE_MEMORY_CBFS_NAME)
Justin TerAvest92261952017-12-22 15:15:02 -0700139$(CONFIG_AGESA_PRE_MEMORY_CBFS_NAME)-file := $(CONFIG_AGESA_PRE_MEMORY_BINARY_PI_FILE)
140$(CONFIG_AGESA_PRE_MEMORY_CBFS_NAME)-type := stage
141$(CONFIG_AGESA_PRE_MEMORY_CBFS_NAME)-options := --xip
142# 4KiB alignment to handle any interior alignment. Current AGESA only has
143# 64 byte alignment.
144$(CONFIG_AGESA_PRE_MEMORY_CBFS_NAME)-align := 4096
145
Arthur Heymans81a4fef2022-11-01 23:33:45 +0100146cbfs-files-y += $(CONFIG_AGESA_POST_MEMORY_CBFS_NAME)
Aaron Durbin931ed7f2017-12-22 17:13:17 -0700147$(CONFIG_AGESA_POST_MEMORY_CBFS_NAME)-file := $(AGESA_POST_MEM_ELF_RMOD)
Justin TerAvest92261952017-12-22 15:15:02 -0700148$(CONFIG_AGESA_POST_MEMORY_CBFS_NAME)-type := stage
Aaron Durbin931ed7f2017-12-22 17:13:17 -0700149$(CONFIG_AGESA_POST_MEMORY_CBFS_NAME)-compression := $(CBFS_COMPRESS_FLAG)
Marshall Dawsonfd6fb282019-11-25 17:53:29 -0700150
151endif # AGESA_POST_MEM_INPUT_ELF == ""
152
153else # CONFIG_AGESA_SPLIT_MEMORY_FILES
154
155AGESA_BINARYPI_INPUT_FILE = $(call strip_quotes,$(CONFIG_AGESA_BINARY_PI_FILE))
156ifeq ($(AGESA_BINARYPI_INPUT_FILE),)
157files_added:: warn_no_agesa
Justin TerAvest92261952017-12-22 15:15:02 -0700158else
159
Arthur Heymans81a4fef2022-11-01 23:33:45 +0100160cbfs-files-y += $(CONFIG_AGESA_CBFS_NAME)
Marshall Dawsonfd6fb282019-11-25 17:53:29 -0700161$(CONFIG_AGESA_CBFS_NAME)-file := $(AGESA_BINARYPI_INPUT_FILE)
Justin TerAvest92261952017-12-22 15:15:02 -0700162
Aaron Durbin02b43aa2017-12-12 14:56:41 -0700163ifeq ($(CONFIG_AGESA_BINARY_PI_AS_STAGE),y)
164$(CONFIG_AGESA_CBFS_NAME)-type := stage
165$(CONFIG_AGESA_CBFS_NAME)-options := --xip
166# 4KiB alignment to handle any interior alignment. Current AGESA only has
167# 64 byte alignment.
168$(CONFIG_AGESA_CBFS_NAME)-align := 4096
169else
Martin Roth059988d2017-11-11 20:06:19 -0700170$(CONFIG_AGESA_CBFS_NAME)-type := raw
171$(CONFIG_AGESA_CBFS_NAME)-position := $(CONFIG_AGESA_BINARY_PI_LOCATION)
Furquan Shaikh6c8ba9b2020-11-20 22:26:38 -0800172regions-for-file-$(CONFIG_AGESA_CBFS_NAME) = COREBOOT
Justin TerAvest92261952017-12-22 15:15:02 -0700173endif # CONFIG_AGESA_BINARY_PI_AS_STAGE
174
Marshall Dawsonfd6fb282019-11-25 17:53:29 -0700175endif # AGESA_BINARYPI_INPUT_FILE == ""
Justin TerAvest92261952017-12-22 15:15:02 -0700176endif # CONFIG_AGESA_SPLIT_MEMORY_FILES
Martin Roth059988d2017-11-11 20:06:19 -0700177
178endif