Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 1 | #***************************************************************************** |
| 2 | # |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 3 | # 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 Dawson | d786843 | 2019-11-25 11:47:32 -0700 | [diff] [blame] | 27 | ifeq ($(CONFIG_SOC_AMD_STONEYRIDGE),y) |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 28 | # AGESA V5 Files |
| 29 | |
| 30 | AGESA_ROOT = $(call strip_quotes,$(CONFIG_AGESA_BINARY_PI_VENDORCODE_PATH)) |
| 31 | |
Martin Roth | ece69f2 | 2017-11-16 22:34:26 -0700 | [diff] [blame] | 32 | BINARY_PI_INC = -I$(AGESA_ROOT) |
| 33 | BINARY_PI_INC += -I$(AGESA_ROOT)/binaryPI |
| 34 | BINARY_PI_INC += -I$(AGESA_ROOT)/Include |
| 35 | BINARY_PI_INC += -I$(AGESA_ROOT)/Lib |
| 36 | BINARY_PI_INC += -I$(AGESA_ROOT)/Proc |
| 37 | BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/Common |
| 38 | BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/CPU |
| 39 | BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/CPU/Family |
| 40 | BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/Fch |
| 41 | BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/Fch/Common |
Martin Roth | ece69f2 | 2017-11-16 22:34:26 -0700 | [diff] [blame] | 42 | |
Martin Roth | 2413918 | 2017-11-16 16:00:53 -0700 | [diff] [blame] | 43 | AGESA_INC = -I$(obj) |
Martin Roth | ece69f2 | 2017-11-16 22:34:26 -0700 | [diff] [blame] | 44 | AGESA_INC += $(BINARY_PI_INC) |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 45 | |
| 46 | AGESA_INC += -I$(src)/soc/amd/stoneyridge/include |
Aaron Durbin | 49ec3f0 | 2017-12-12 10:01:06 -0700 | [diff] [blame] | 47 | AGESA_INC += -I$(src)/soc/amd/common/block/include |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 48 | |
| 49 | AGESA_INC += -I$(src)/arch/x86/include |
| 50 | AGESA_INC += -I$(src)/include |
| 51 | AGESA_INC += -I$(src)/commonlib/include |
| 52 | AGESA_INC += -I$(VBOOT_SOURCE)/firmware/include |
| 53 | |
Martin Roth | ece69f2 | 2017-11-16 22:34:26 -0700 | [diff] [blame] | 54 | AGESA_CFLAGS += -march=amdfam10 -fno-strict-aliasing -D__LIBAGESA__ |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 55 | |
Martin Roth | ece69f2 | 2017-11-16 22:34:26 -0700 | [diff] [blame] | 56 | CC_bootblock := $(CC_bootblock) $(BINARY_PI_INC) |
| 57 | CC_romstage := $(CC_romstage) $(BINARY_PI_INC) |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 58 | CC_postcar:= $(CC_postcar) -I$(AGESA_ROOT)/binaryPI |
Martin Roth | ece69f2 | 2017-11-16 22:34:26 -0700 | [diff] [blame] | 59 | CC_ramstage := $(CC_ramstage) $(BINARY_PI_INC) |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 60 | |
| 61 | ####################################################################### |
| 62 | |
| 63 | define create_agesa_cp_template |
| 64 | # $1 AGESA source file |
| 65 | |
| 66 | $(agesa_src_path)/$(notdir $1): $1 |
| 67 | @printf " AGESA Copying $$(notdir $1) => $$(@D)\n" |
| 68 | if [ ! -r $(agesa_src_path)/$(notdir $1) ]; then \ |
| 69 | cp -f $1 $$(@D); \ |
| 70 | fi |
| 71 | |
| 72 | $(call src-to-obj,libagesa,$1): $(agesa_src_path)/$(notdir $1) $(obj)/config.h $(src)/include/kconfig.h |
| 73 | @printf " CC $$(subst $(obj)/,,$$(@))\n" |
Julius Werner | 98eeb96 | 2019-12-11 15:47:42 -0800 | [diff] [blame] | 74 | $(CC_libagesa) -c -MMD $(CFLAGS_libagesa) $(AGESA_CFLAGS) \ |
| 75 | $(AGESA_INC) \ |
| 76 | -include $(src)/include/kconfig.h \ |
| 77 | -include $(src)/include/rules.h \ |
| 78 | -include $(src)/commonlib/bsd/include/commonlib/bsd/compiler.h \ |
| 79 | -o $$@ \ |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 80 | $(agesa_src_path)/$(notdir $1) |
| 81 | |
| 82 | endef |
| 83 | |
Martin Roth | 744104e | 2017-11-12 09:59:37 -0700 | [diff] [blame] | 84 | agesa_raw_files += $(wildcard $(AGESA_ROOT)/Lib/*.[cS]) |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 85 | |
| 86 | agesa_raw_files += $(wildcard $(AGESA_ROOT)/binaryPI/*.[cS]) |
| 87 | |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 88 | classes-$(CONFIG_CPU_AMD_AGESA_BINARY_PI) += libagesa |
| 89 | |
| 90 | ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32),y) |
| 91 | $(eval $(call create_class_compiler,libagesa,x86_32)) |
| 92 | else |
| 93 | $(eval $(call create_class_compiler,libagesa,x86_64)) |
| 94 | endif |
| 95 | |
| 96 | agesa_src_files := $(strip $(sort $(foreach file,$(strip $(agesa_raw_files)),$(call strip_quotes,$(file))))) |
| 97 | agesa_output_path := $(obj)/libagesa |
| 98 | agesa_src_path := $(agesa_output_path) |
| 99 | agesa_dirs := $(sort $(abspath $(dir $(call src-to-obj,libagesa,$(agesa_src_files))))) |
| 100 | |
| 101 | additional-dirs += $(agesa_src_path) $(agesa_dirs) |
| 102 | |
| 103 | $(foreach file,$(strip $(agesa_src_files)),$(eval $(call create_agesa_cp_template,$(file)))) |
| 104 | |
| 105 | $(agesa_output_path)/libagesa.a: $(call src-to-obj,libagesa,$(agesa_src_files)) |
| 106 | @printf " AGESA $(subst $(obj)/,,$(@))\n" |
| 107 | $(AR_libagesa) rcs $@ $+ |
| 108 | |
| 109 | bootblock-libs += $(agesa_output_path)/libagesa.a |
| 110 | romstage-libs += $(agesa_output_path)/libagesa.a |
| 111 | ramstage-libs += $(agesa_output_path)/libagesa.a |
| 112 | |
| 113 | ####################################################################### |
| 114 | |
Marshall Dawson | fd6fb28 | 2019-11-25 17:53:29 -0700 | [diff] [blame] | 115 | warn_no_agesa: |
| 116 | printf "\n\t** WARNING **\n" |
| 117 | printf "coreboot has been built with no AGESA support. Successfully " |
| 118 | printf "booting this image will be impossible.\n\n" |
| 119 | |
Marshall Dawson | 19be7b5 | 2020-01-02 15:38:59 -0700 | [diff] [blame] | 120 | PHONY+=warn_no_agesa |
Marshall Dawson | fd6fb28 | 2019-11-25 17:53:29 -0700 | [diff] [blame] | 121 | |
Justin TerAvest | 9226195 | 2017-12-22 15:15:02 -0700 | [diff] [blame] | 122 | ifeq ($(CONFIG_AGESA_SPLIT_MEMORY_FILES), y) |
Aaron Durbin | 931ed7f | 2017-12-22 17:13:17 -0700 | [diff] [blame] | 123 | |
| 124 | # convert input elf to rmodule |
| 125 | AGESA_POST_MEM_INPUT_ELF = $(call strip_quotes,$(CONFIG_AGESA_POST_MEMORY_BINARY_PI_FILE)) |
Marshall Dawson | fd6fb28 | 2019-11-25 17:53:29 -0700 | [diff] [blame] | 126 | |
| 127 | # If no post-mem file then also skip pre-mem file |
Patrick Georgi | a1d668e | 2019-12-12 16:25:28 +0100 | [diff] [blame] | 128 | ifeq ($(AGESA_POST_MEM_INPUT_ELF),) |
Marshall Dawson | fd6fb28 | 2019-11-25 17:53:29 -0700 | [diff] [blame] | 129 | files_added:: warn_no_agesa |
| 130 | else |
Aaron Durbin | 931ed7f | 2017-12-22 17:13:17 -0700 | [diff] [blame] | 131 | AGESA_POST_MEM_ELF = $(objcbfs)/$(patsubst %.elf,%.debug,$(notdir $(AGESA_POST_MEM_INPUT_ELF))) |
| 132 | AGESA_POST_MEM_ELF_RMOD = $(AGESA_POST_MEM_ELF).rmod |
| 133 | |
| 134 | $(AGESA_POST_MEM_ELF): $(AGESA_POST_MEM_INPUT_ELF) |
| 135 | cp $< $@ |
| 136 | |
| 137 | $(AGESA_POST_MEM_ELF_RMOD): $(AGESA_POST_MEM_ELF) |
| 138 | |
Justin TerAvest | 9226195 | 2017-12-22 15:15:02 -0700 | [diff] [blame] | 139 | cbfs-files-$(CONFIG_CPU_AMD_AGESA_BINARY_PI) += $(CONFIG_AGESA_PRE_MEMORY_CBFS_NAME) |
| 140 | $(CONFIG_AGESA_PRE_MEMORY_CBFS_NAME)-file := $(CONFIG_AGESA_PRE_MEMORY_BINARY_PI_FILE) |
| 141 | $(CONFIG_AGESA_PRE_MEMORY_CBFS_NAME)-type := stage |
| 142 | $(CONFIG_AGESA_PRE_MEMORY_CBFS_NAME)-options := --xip |
| 143 | # 4KiB alignment to handle any interior alignment. Current AGESA only has |
| 144 | # 64 byte alignment. |
| 145 | $(CONFIG_AGESA_PRE_MEMORY_CBFS_NAME)-align := 4096 |
| 146 | |
| 147 | cbfs-files-$(CONFIG_CPU_AMD_AGESA_BINARY_PI) += $(CONFIG_AGESA_POST_MEMORY_CBFS_NAME) |
Aaron Durbin | 931ed7f | 2017-12-22 17:13:17 -0700 | [diff] [blame] | 148 | $(CONFIG_AGESA_POST_MEMORY_CBFS_NAME)-file := $(AGESA_POST_MEM_ELF_RMOD) |
Justin TerAvest | 9226195 | 2017-12-22 15:15:02 -0700 | [diff] [blame] | 149 | $(CONFIG_AGESA_POST_MEMORY_CBFS_NAME)-type := stage |
Aaron Durbin | 931ed7f | 2017-12-22 17:13:17 -0700 | [diff] [blame] | 150 | $(CONFIG_AGESA_POST_MEMORY_CBFS_NAME)-compression := $(CBFS_COMPRESS_FLAG) |
Marshall Dawson | fd6fb28 | 2019-11-25 17:53:29 -0700 | [diff] [blame] | 151 | |
| 152 | endif # AGESA_POST_MEM_INPUT_ELF == "" |
| 153 | |
| 154 | else # CONFIG_AGESA_SPLIT_MEMORY_FILES |
| 155 | |
| 156 | AGESA_BINARYPI_INPUT_FILE = $(call strip_quotes,$(CONFIG_AGESA_BINARY_PI_FILE)) |
| 157 | ifeq ($(AGESA_BINARYPI_INPUT_FILE),) |
| 158 | files_added:: warn_no_agesa |
Justin TerAvest | 9226195 | 2017-12-22 15:15:02 -0700 | [diff] [blame] | 159 | else |
| 160 | |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 161 | cbfs-files-$(CONFIG_CPU_AMD_AGESA_BINARY_PI) += $(CONFIG_AGESA_CBFS_NAME) |
Marshall Dawson | fd6fb28 | 2019-11-25 17:53:29 -0700 | [diff] [blame] | 162 | $(CONFIG_AGESA_CBFS_NAME)-file := $(AGESA_BINARYPI_INPUT_FILE) |
Justin TerAvest | 9226195 | 2017-12-22 15:15:02 -0700 | [diff] [blame] | 163 | |
Aaron Durbin | 02b43aa | 2017-12-12 14:56:41 -0700 | [diff] [blame] | 164 | ifeq ($(CONFIG_AGESA_BINARY_PI_AS_STAGE),y) |
| 165 | $(CONFIG_AGESA_CBFS_NAME)-type := stage |
| 166 | $(CONFIG_AGESA_CBFS_NAME)-options := --xip |
| 167 | # 4KiB alignment to handle any interior alignment. Current AGESA only has |
| 168 | # 64 byte alignment. |
| 169 | $(CONFIG_AGESA_CBFS_NAME)-align := 4096 |
| 170 | else |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 171 | $(CONFIG_AGESA_CBFS_NAME)-type := raw |
| 172 | $(CONFIG_AGESA_CBFS_NAME)-position := $(CONFIG_AGESA_BINARY_PI_LOCATION) |
Furquan Shaikh | 6c8ba9b | 2020-11-20 22:26:38 -0800 | [diff] [blame] | 173 | regions-for-file-$(CONFIG_AGESA_CBFS_NAME) = COREBOOT |
Justin TerAvest | 9226195 | 2017-12-22 15:15:02 -0700 | [diff] [blame] | 174 | endif # CONFIG_AGESA_BINARY_PI_AS_STAGE |
| 175 | |
Marshall Dawson | fd6fb28 | 2019-11-25 17:53:29 -0700 | [diff] [blame] | 176 | endif # AGESA_BINARYPI_INPUT_FILE == "" |
Justin TerAvest | 9226195 | 2017-12-22 15:15:02 -0700 | [diff] [blame] | 177 | endif # CONFIG_AGESA_SPLIT_MEMORY_FILES |
Martin Roth | 059988d | 2017-11-11 20:06:19 -0700 | [diff] [blame] | 178 | |
| 179 | endif |