diff options
-rw-r--r-- | src/arch/x86/Kconfig | 4 | ||||
-rw-r--r-- | src/arch/x86/Makefile.inc | 17 | ||||
-rw-r--r-- | src/arch/x86/boot/acpi.c | 7 |
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; |