summaryrefslogtreecommitdiff
path: root/src/cpu/x86/smm/Makefile.mk
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/x86/smm/Makefile.mk')
-rw-r--r--src/cpu/x86/smm/Makefile.mk77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/cpu/x86/smm/Makefile.mk b/src/cpu/x86/smm/Makefile.mk
new file mode 100644
index 0000000000..dbe9c75262
--- /dev/null
+++ b/src/cpu/x86/smm/Makefile.mk
@@ -0,0 +1,77 @@
+## SPDX-License-Identifier: GPL-2.0-only
+
+ramstage-y += smm_module_loader.c
+ramstage-$(CONFIG_SMM_PCI_RESOURCE_STORE) += pci_resource_store.c
+
+smm-$(CONFIG_SMM_PCI_RESOURCE_STORE) += pci_resource_store.c
+
+ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
+$(eval $(call create_class_compiler,smm,x86_32))
+$(eval $(call create_class_compiler,smmstub,x86_32))
+else
+$(eval $(call create_class_compiler,smm,x86_64))
+$(eval $(call create_class_compiler,smmstub,x86_64))
+endif
+
+smmstub-generic-ccopts += -D__SMM__
+smm-generic-ccopts += -D__SMM__
+smm-c-deps+=$$(OPTION_TABLE_H)
+
+$(obj)/smm/smm.o: $$(smm-objs) $(COMPILER_RT_smm)
+ $(LD_smm) -nostdlib -r -o $@ $(COMPILER_RT_FLAGS_smm) --whole-archive --start-group $(filter-out %.ld, $(smm-objs)) --no-whole-archive $(COMPILER_RT_smm) --end-group
+
+# change to the target path because objcopy will use the path name in its
+# ELF symbol names.
+$(call src-to-obj,ramstage,$(obj)/cpu/x86/smm/smm.manual): $(obj)/smm/smm
+ @printf " OBJCOPY $(subst $(obj)/,,$(@))\n"
+ cd $(dir $<); $(OBJCOPY_smm) -I binary $(notdir $<) $(target-objcopy) $(abspath $@)
+
+ifeq ($(CONFIG_HAVE_SMI_HANDLER),y)
+ramstage-srcs += $(obj)/cpu/x86/smm/smm.manual
+endif
+
+smm-y += save_state.c
+
+ramstage-y += tseg_region.c
+romstage-y += tseg_region.c
+postcar-y += tseg_region.c
+
+ifeq ($(CONFIG_PARALLEL_MP),y)
+
+smmstub-y += smm_stub.S
+
+smm-y += smm_module_handler.c
+
+ramstage-srcs += $(obj)/cpu/x86/smm/smmstub.manual
+
+# SMM Stub Module. The stub is used as a trampoline for relocation and normal
+# SMM handling.
+$(obj)/smmstub/smmstub.o: $$(smmstub-objs) $(COMPILER_RT_smmstub)
+ $(LD_smmstub) -nostdlib -r -o $@ $(COMPILER_RT_FLAGS_smmstub) --whole-archive --start-group $(smmstub-objs) --no-whole-archive $(COMPILER_RT_smmstub) --end-group
+
+# Link the SMM stub module with a 0-byte heap.
+ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
+$(eval $(call rmodule_link,$(obj)/smmstub/smmstub.elf, $(obj)/smmstub/smmstub.o, 0,x86_32))
+else
+$(eval $(call rmodule_link,$(obj)/smmstub/smmstub.elf, $(obj)/smmstub/smmstub.o, 0,x86_64))
+endif
+
+$(obj)/smmstub/smmstub: $(obj)/smmstub/smmstub.elf.rmod
+ $(OBJCOPY_smmstub) -O binary $< $@
+
+$(call src-to-obj,ramstage,$(obj)/cpu/x86/smm/smmstub.manual): $(obj)/smmstub/smmstub
+ @printf " OBJCOPY $(subst $(obj)/,,$(@))\n"
+ cd $(dir $<); $(OBJCOPY_smmstub) -I binary $(notdir $<) $(target-objcopy) $(abspath $@)
+
+# C-based SMM handler.
+
+ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
+$(eval $(call rmodule_link,$(obj)/smm/smm.elf, $(obj)/smm/smm.o, 0,x86_32))
+else
+$(eval $(call rmodule_link,$(obj)/smm/smm.elf, $(obj)/smm/smm.o, 0,x86_64))
+endif
+
+$(obj)/smm/smm: $(obj)/smm/smm.elf.rmod
+ $(OBJCOPY_smm) -O binary $< $@
+
+endif