aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/x86/Kconfig4
-rw-r--r--src/arch/x86/Makefile.inc17
-rw-r--r--src/arch/x86/boot/acpi.c7
3 files changed, 28 insertions, 0 deletions
diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig
index 1e35846087..88b259297c 100644
--- a/src/arch/x86/Kconfig
+++ b/src/arch/x86/Kconfig
@@ -134,3 +134,7 @@ config HPET_ADDRESS
config ID_SECTION_OFFSET
hex
default 0x80
+
+config COMPILE_IN_DSDT
+ bool "compile in DSDT and use that over DSDT in CBFS"
+ default n
diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc
index 02c29c4483..eaab2de96c 100644
--- a/src/arch/x86/Makefile.inc
+++ b/src/arch/x86/Makefile.inc
@@ -245,6 +245,23 @@ endif # CONFIG_ARCH_ROMSTAGE_X86_32 / CONFIG_ARCH_ROMSTAGE_X86_64
ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32)$(CONFIG_ARCH_RAMSTAGE_X86_64),y)
+ifeq ($(CONFIG_COMPILE_IN_DSDT),y)
+ramstage-srcs += $(obj)/dsdt.aml
+
+ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
+target-objcopy=-O elf32-i386 -B i386
+endif
+ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_64),y)
+target-objcopy=-O elf64-x86_64 -B x86_64
+endif
+
+define ramstage-objs_aml_template
+$(call src-to-obj,ramstage,$(1).aml): $(1).aml
+ @printf " OBJCOPY $$(subst $$(obj)/,,$$(@))\n"
+ cd $$(dir $$@) && $$(OBJCOPY_ramstage) -I binary $$(target-objcopy) $$(notdir $$<) $$(notdir $$@)
+endef
+endif
+
ramstage-srcs += $(wildcard src/mainboard/$(MAINBOARDDIR)/mainboard.c)
ifeq ($(CONFIG_GENERATE_MP_TABLE),y)
ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/mptable.c),)
diff --git a/src/arch/x86/boot/acpi.c b/src/arch/x86/boot/acpi.c
index 208411edba..cf33e40ff3 100644
--- a/src/arch/x86/boot/acpi.c
+++ b/src/arch/x86/boot/acpi.c
@@ -757,9 +757,16 @@ unsigned long write_acpi_tables(unsigned long start)
if (fw)
return fw;
+#if CONFIG_COMPILE_IN_DSDT
+ extern char _binary_dsdt_aml_start;
+ extern char _binary_dsdt_aml_end;
+ dsdt_file = (acpi_header_t *)&_binary_dsdt_aml_start;
+ dsdt_size = (size_t)(&_binary_dsdt_aml_end - &_binary_dsdt_aml_start);
+#else
dsdt_file = cbfs_boot_map_with_leak(
CONFIG_CBFS_PREFIX "/dsdt.aml",
CBFS_TYPE_RAW, &dsdt_size);
+#endif
if (!dsdt_file) {
printk(BIOS_ERR, "No DSDT file, skipping ACPI tables\n");
return current;