[coreboot-gerrit] Patch set updated for coreboot: 7da593e Make DSDT a file in CBFS rather than embedding it into ramstage.

Vladimir Serbinenko (phcoder@gmail.com) gerrit at coreboot.org
Sun May 31 12:45:05 CEST 2015


Vladimir Serbinenko (phcoder at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10385

-gerrit

commit 7da593e3af2275a2e812590ebca80030dcf34294
Author: Vladimir Serbinenko <phcoder at gmail.com>
Date:   Sun May 31 12:31:59 2015 +0200

    Make DSDT a file in CBFS rather than embedding it into ramstage.
    
    Makes it cleaner by putting AML into separate file rather than having
    an array in C code.
    
    Change-Id: Ia5d6b50ad9dabdb97ed05c837dc3ccc48b8f490f
    Signed-off-by: Vladimir Serbinenko <phcoder at gmail.com>
---
 Makefile.inc                                       | 14 ++++++------
 src/arch/x86/Makefile.inc                          | 14 +-----------
 src/arch/x86/boot/acpi.c                           | 25 ++++++++++++++++------
 src/mainboard/amd/serengeti_cheetah/Makefile.inc   |  3 +++
 src/mainboard/amd/serengeti_cheetah/acpi_tables.c  | 19 ++++++++++------
 .../amd/serengeti_cheetah_fam10/Makefile.inc       |  4 ++++
 .../amd/serengeti_cheetah_fam10/acpi_tables.c      | 21 ++++++++++--------
 src/mainboard/iwill/dk8_htx/Makefile.inc           |  4 ++++
 src/mainboard/iwill/dk8_htx/acpi_tables.c          | 16 ++++++--------
 9 files changed, 69 insertions(+), 51 deletions(-)

diff --git a/Makefile.inc b/Makefile.inc
index 49e1ba3..3e28709 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -169,15 +169,15 @@ endef
 
 #######################################################################
 # Add handler to compile ACPI's ASL
-define ramstage-objs_asl_template
-$$(call src-to-obj,ramstage,$(1).asl): $(1).asl $(obj)/config.h
+define asl_template
+$(call strip_quotes,$(CONFIG_CBFS_PREFIX))/$(1).aml-file = $(obj)/$(1).aml
+$(call strip_quotes,$(CONFIG_CBFS_PREFIX))/$(1).aml-type = raw
+$(call strip_quotes,$(CONFIG_CBFS_PREFIX))/$(1).aml-compression = none
+cbfs-files-y += $(call strip_quotes,$(CONFIG_CBFS_PREFIX))/$(1).aml
+$(obj)/$(1).aml: $(src)/mainboard/$(MAINBOARDDIR)/$(1).asl $(obj)/config.h
 	@printf "    IASL       $$(subst $(top)/,,$$(@))\n"
 	$(CC_ramstage) -x assembler-with-cpp -E -MMD -MT $$(@) $$(CPPFLAGS_ramstage) -D__ACPI__ -P -include $(src)/include/kconfig.h -I$(obj) -I$(src) -I$(src)/include -I$(src)/arch/$(ARCHDIR-$(ARCH-ramstage-y))/include -I$(src)/mainboard/$(MAINBOARDDIR) $$< -o $$@
-	cd $$(dir $$@); $(IASL) -p $$(notdir $$@) -tc $$(notdir $$@)
-	mv $$(basename $$@).hex $$(basename $$@).c
-	$(CC_ramstage) $$(CFLAGS_ramstage) $$(CPPFLAGS_ramstage) $$(if $$(subst dsdt,,$$(basename $$(notdir $(1)))), -DAmlCode=AmlCode_$$(basename $$(notdir $(1)))) -c -o $$@ $$(basename $$@).c
-	# keep %.o: %.c rule from catching the temporary .c file after a make clean
-	mv $$(basename $$@).c $$(basename $$@).hex
+	cd $$(dir $$@); $(IASL) -p $$(notdir $$@) $$(notdir $$@)
 endef
 
 #######################################################################
diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc
index 49caef5..5da5a4a 100644
--- a/src/arch/x86/Makefile.inc
+++ b/src/arch/x86/Makefile.inc
@@ -262,19 +262,7 @@ ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/reset.c
 endif
 ifeq ($(CONFIG_HAVE_ACPI_TABLES),y)
 ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/acpi_tables.c
-ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/dsdt.asl
-ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/ssdt2.asl),)
-ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/ssdt2.asl
-endif
-ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/ssdt3.asl),)
-ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/ssdt3.asl
-endif
-ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/ssdt4.asl),)
-ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/ssdt4.asl
-endif
-ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/ssdt5.asl),)
-ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/ssdt5.asl
-endif
+$(eval $(call asl_template,dsdt))
 ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/fadt.c),)
 ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/fadt.c
 endif
diff --git a/src/arch/x86/boot/acpi.c b/src/arch/x86/boot/acpi.c
index 4ce5ed6..9c75008 100644
--- a/src/arch/x86/boot/acpi.c
+++ b/src/arch/x86/boot/acpi.c
@@ -723,8 +723,6 @@ void acpi_create_fadt(acpi_fadt_t *fadt,acpi_facs_t *facs, void *dsdt)
 }
 #endif
 
-extern const unsigned char AmlCode[];
-
 unsigned long __attribute__ ((weak)) fw_cfg_acpi_tables(unsigned long start)
 {
 	return 0;
@@ -741,13 +739,13 @@ unsigned long write_acpi_tables(unsigned long start)
 	acpi_facs_t *facs;
 	acpi_header_t *slic_file, *slic;
 	acpi_header_t *ssdt;
-	acpi_header_t *dsdt;
+	acpi_header_t *dsdt_file, *dsdt;
 	acpi_mcfg_t *mcfg;
 	acpi_tcpa_t *tcpa;
 	acpi_madt_t *madt;
 	struct device *dev;
 	unsigned long fw;
-	size_t slic_size;
+	size_t slic_size, dsdt_size;
 	char oem_id[6], oem_table_id[8];
 
 	current = start;
@@ -759,6 +757,21 @@ unsigned long write_acpi_tables(unsigned long start)
 	if (fw)
 		return fw;
 
+	dsdt_file = cbfs_get_file_content(CBFS_DEFAULT_MEDIA,
+				     CONFIG_CBFS_PREFIX "/dsdt.aml",
+				     CBFS_TYPE_RAW, &dsdt_size);
+	if (!dsdt_file) {
+		printk(BIOS_ERR, "No DSDT file, skipping ACPI tables\n");
+		return current;
+	}
+
+	if (dsdt_file->length > dsdt_size
+	    || dsdt_file->length < sizeof (acpi_header_t)
+	    || memcmp(dsdt_file->signature, "DSDT", 4) != 0) {
+		printk(BIOS_ERR, "Invalid DSDT file, skipping ACPI tables\n");
+		return current;
+	}
+
 	slic_file = cbfs_get_file_content(CBFS_DEFAULT_MEDIA,
 				     CONFIG_CBFS_PREFIX "/slic",
 				     CBFS_TYPE_RAW, &slic_size);
@@ -805,7 +818,7 @@ unsigned long write_acpi_tables(unsigned long start)
 
 	printk(BIOS_DEBUG, "ACPI:    * DSDT\n");
 	dsdt = (acpi_header_t *) current;
-	memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
+	memcpy(dsdt, dsdt_file, sizeof(acpi_header_t));
 	if (dsdt->length >= sizeof(acpi_header_t)) {
 		current += sizeof(acpi_header_t);
 
@@ -816,7 +829,7 @@ unsigned long write_acpi_tables(unsigned long start)
 			}
 		current = (unsigned long) acpigen_get_current();
 		memcpy((char *)current,
-		       (char *)&AmlCode + sizeof(acpi_header_t),
+		       (char *)dsdt_file + sizeof(acpi_header_t),
 		       dsdt->length - sizeof(acpi_header_t));
 		current += dsdt->length - sizeof(acpi_header_t);
 
diff --git a/src/mainboard/amd/serengeti_cheetah/Makefile.inc b/src/mainboard/amd/serengeti_cheetah/Makefile.inc
new file mode 100644
index 0000000..876b3ed
--- /dev/null
+++ b/src/mainboard/amd/serengeti_cheetah/Makefile.inc
@@ -0,0 +1,3 @@
+$(eval $(call asl_template,ssdt2))
+$(eval $(call asl_template,ssdt3))
+$(eval $(call asl_template,ssdt4))
diff --git a/src/mainboard/amd/serengeti_cheetah/acpi_tables.c b/src/mainboard/amd/serengeti_cheetah/acpi_tables.c
index 168793e..14ef938 100644
--- a/src/mainboard/amd/serengeti_cheetah/acpi_tables.c
+++ b/src/mainboard/amd/serengeti_cheetah/acpi_tables.c
@@ -17,14 +17,11 @@
 #include <cpu/x86/msr.h>
 #include <cpu/amd/mtrr.h>
 #include <cpu/amd/amdk8_sysconf.h>
+#include <cbfs.h>
 #include "northbridge/amd/amdk8/acpi.h"
 #include "mb_sysconf.h"
 #include "mainboard.h"
 
-extern const unsigned char AmlCode_ssdt2[];
-extern const unsigned char AmlCode_ssdt3[];
-extern const unsigned char AmlCode_ssdt4[];
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	u32 gsi_base=0x18;
@@ -127,6 +124,7 @@ unsigned long mainboard_write_acpi_tables(unsigned long start, acpi_rsdp_t *rsdp
 	unsigned long current;
 	acpi_header_t *ssdtx;
 	const void *p;
+	size_t p_size;
 
 	int i;
 
@@ -139,6 +137,7 @@ unsigned long mainboard_write_acpi_tables(unsigned long start, acpi_rsdp_t *rsdp
 	//same htio, but different position? We may have to copy, change HCIN, and recalculate the checknum and add_table
 
 	for(i=1;i<sysconf.hc_possible_num;i++) {  // 0: is hc sblink
+		const char *file_name;
 		if((sysconf.pci1234[i] & 1) != 1 ) continue;
 		u8 c;
 		if(i<7) {
@@ -152,17 +151,23 @@ unsigned long mainboard_write_acpi_tables(unsigned long start, acpi_rsdp_t *rsdp
 		ssdtx = (acpi_header_t *)current;
 		switch(sysconf.hcid[i]) {
 		case 1: //8132
-			p = &AmlCode_ssdt2;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt2.aml";
 			break;
 		case 2: //8151
-			p = &AmlCode_ssdt3;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt3.aml";
 			break;
 		case 3: //8131
-			p = &AmlCode_ssdt4;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt4.aml";
 			break;
 		default:
 			continue;
 		}
+		p = cbfs_get_file_content(CBFS_DEFAULT_MEDIA,
+					  file_name,
+					  CBFS_TYPE_RAW, &p_size);
+		if (!p || p_size < sizeof(acpi_header_t))
+			continue;
+
 		memcpy(ssdtx, p, sizeof(acpi_header_t));
 		current += ssdtx->length;
 		memcpy(ssdtx, p, ssdtx->length);
diff --git a/src/mainboard/amd/serengeti_cheetah_fam10/Makefile.inc b/src/mainboard/amd/serengeti_cheetah_fam10/Makefile.inc
new file mode 100644
index 0000000..e826e81
--- /dev/null
+++ b/src/mainboard/amd/serengeti_cheetah_fam10/Makefile.inc
@@ -0,0 +1,4 @@
+$(eval $(call asl_template,ssdt2))
+$(eval $(call asl_template,ssdt3))
+$(eval $(call asl_template,ssdt4))
+$(eval $(call asl_template,ssdt5))
diff --git a/src/mainboard/amd/serengeti_cheetah_fam10/acpi_tables.c b/src/mainboard/amd/serengeti_cheetah_fam10/acpi_tables.c
index 8c24528..cc932d2 100644
--- a/src/mainboard/amd/serengeti_cheetah_fam10/acpi_tables.c
+++ b/src/mainboard/amd/serengeti_cheetah_fam10/acpi_tables.c
@@ -26,15 +26,11 @@
 #include <cpu/x86/msr.h>
 #include <cpu/amd/mtrr.h>
 #include <cpu/amd/amdfam10_sysconf.h>
+#include <cbfs.h>
 
 #include "mb_sysconf.h"
 #include "mainboard.h"
 
-extern const unsigned char AmlCode_ssdt2[];
-extern const unsigned char AmlCode_ssdt3[];
-extern const unsigned char AmlCode_ssdt4[];
-extern const unsigned char AmlCode_ssdt5[];
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	u32 gsi_base=0x18;
@@ -136,6 +132,7 @@ unsigned long mainboard_write_acpi_tables(unsigned long current,
 {
 	acpi_header_t *ssdtx;
 	const void *p;
+	size_t p_size;
 
 	int i;
 
@@ -145,6 +142,7 @@ unsigned long mainboard_write_acpi_tables(unsigned long current,
 	change HCIN, and recalculate the checknum and add_table */
 
 	for(i=1;i<sysconf.hc_possible_num;i++) {  // 0: is hc sblink
+		const char *file_name;
 		if((sysconf.pci1234[i] & 1) != 1 ) continue;
 		u8 c;
 		if(i<7) {
@@ -158,18 +156,23 @@ unsigned long mainboard_write_acpi_tables(unsigned long current,
 		ssdtx = (acpi_header_t *)current;
 		switch(sysconf.hcid[i]) {
 		case 1:
-			p = &AmlCode_ssdt2;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt2.aml";
 			break;
 		case 2:
-			p = &AmlCode_ssdt3;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt3.aml";
 			break;
 		case 3: //8131
-			p = &AmlCode_ssdt4;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt4.aml";
 			break;
 		default:
 			//HTX no io apic
-			p = &AmlCode_ssdt5;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt5.aml";
 		}
+		p = cbfs_get_file_content(CBFS_DEFAULT_MEDIA,
+					  file_name,
+					  CBFS_TYPE_RAW, &p_size);
+		if (!p || p_size < sizeof(acpi_header_t))
+			continue;
 		memcpy(ssdtx, p, sizeof(acpi_header_t));
 		current += ssdtx->length;
 		memcpy(ssdtx, p, ssdtx->length);
diff --git a/src/mainboard/iwill/dk8_htx/Makefile.inc b/src/mainboard/iwill/dk8_htx/Makefile.inc
new file mode 100644
index 0000000..e826e81
--- /dev/null
+++ b/src/mainboard/iwill/dk8_htx/Makefile.inc
@@ -0,0 +1,4 @@
+$(eval $(call asl_template,ssdt2))
+$(eval $(call asl_template,ssdt3))
+$(eval $(call asl_template,ssdt4))
+$(eval $(call asl_template,ssdt5))
diff --git a/src/mainboard/iwill/dk8_htx/acpi_tables.c b/src/mainboard/iwill/dk8_htx/acpi_tables.c
index e1c5c80..61745d1 100644
--- a/src/mainboard/iwill/dk8_htx/acpi_tables.c
+++ b/src/mainboard/iwill/dk8_htx/acpi_tables.c
@@ -20,11 +20,7 @@
 #include "northbridge/amd/amdk8/acpi.h"
 #include "mb_sysconf.h"
 #include "mainboard.h"
-
-extern const unsigned char AmlCode_ssdt2[];
-extern const unsigned char AmlCode_ssdt3[];
-extern const unsigned char AmlCode_ssdt4[];
-extern const unsigned char AmlCode_ssdt5[];
+#include <cbfs.h>
 
 unsigned long acpi_fill_madt(unsigned long current)
 {
@@ -134,6 +130,7 @@ unsigned long mainboard_write_acpi_tables(unsigned long start, acpi_rsdp_t *rsdp
 	unsigned long current;
 	acpi_header_t *ssdtx;
 	const void *p;
+	size_t p_size;
 
 	int i;
 
@@ -146,6 +143,7 @@ unsigned long mainboard_write_acpi_tables(unsigned long start, acpi_rsdp_t *rsdp
         //same htio, but different position? We may have to copy, change HCIN, and recalculate the checknum and add_table
 
         for(i=1;i<sysconf.hc_possible_num;i++) {  // 0: is hc sblink
+		const char *file_name;
                 if((sysconf.pci1234[i] & 1) != 1 ) continue;
                 uint8_t c;
                 if(i<7) {
@@ -159,17 +157,17 @@ unsigned long mainboard_write_acpi_tables(unsigned long start, acpi_rsdp_t *rsdp
                 ssdtx = (acpi_header_t *)current;
                 switch(sysconf.hcid[i]) {
                 case 1: //8132
-                        p = &AmlCode_ssdt2;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt2.aml";
                         break;
                 case 2: //8151
-                        p = &AmlCode_ssdt3;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt3.aml";
                         break;
 		case 3: //8131
-                        p = &AmlCode_ssdt4;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt4.aml";
                         break;
                 default:
 			//HTX no io apic
-                        p = &AmlCode_ssdt5;
+			file_name = CONFIG_CBFS_PREFIX "/ssdt5.aml";
 			break;
                 }
 		memcpy(ssdtx, p, sizeof(acpi_header_t));



More information about the coreboot-gerrit mailing list