[coreboot-gerrit] New patch to review for coreboot: ACPI: Make DMAR flags settable

Nico Huber (nico.h@gmx.de) gerrit at coreboot.org
Mon Oct 26 15:43:03 CET 2015


Nico Huber (nico.h at gmx.de) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/12191

-gerrit

commit bbe0e045f42d6ee1112c20dcfa94ded96040acb3
Author: Nico Huber <nico.huber at secunet.com>
Date:   Mon Oct 26 11:51:25 2015 +0100

    ACPI: Make DMAR flags settable
    
    Add a parameter to acpi_create_dmar() for the flags field and define
    flags given by the spec [1].
    
    [1] Intel Virtualization Technology for Directed I/O
        Architecture Specification
        Document-Number: D51397
    
    Change-Id: I03ae32f13bb0061bd3b9bef607db175d9b0bc5e1
    Signed-off-by: Nico Huber <nico.huber at secunet.com>
---
 src/arch/x86/acpi.c               | 4 ++--
 src/arch/x86/include/arch/acpi.h  | 7 ++++++-
 src/northbridge/intel/gm45/acpi.c | 2 +-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/arch/x86/acpi.c b/src/arch/x86/acpi.c
index 417a322..1570dc8 100644
--- a/src/arch/x86/acpi.c
+++ b/src/arch/x86/acpi.c
@@ -389,7 +389,7 @@ void acpi_create_srat(acpi_srat_t *srat,
 	header->checksum = acpi_checksum((void *)srat, header->length);
 }
 
-void acpi_create_dmar(acpi_dmar_t *dmar,
+void acpi_create_dmar(acpi_dmar_t *dmar, enum dmar_flags flags,
 		      unsigned long (*acpi_fill_dmar) (unsigned long))
 {
 	acpi_header_t *header = &(dmar->header);
@@ -407,7 +407,7 @@ void acpi_create_dmar(acpi_dmar_t *dmar,
 	header->revision = 1;
 
 	dmar->host_address_width = 40 - 1; /* FIXME: == MTRR size? */
-	dmar->flags = 0;
+	dmar->flags = flags;
 
 	current = acpi_fill_dmar(current);
 
diff --git a/src/arch/x86/include/arch/acpi.h b/src/arch/x86/include/arch/acpi.h
index 28f650c..eff3666 100644
--- a/src/arch/x86/include/arch/acpi.h
+++ b/src/arch/x86/include/arch/acpi.h
@@ -224,6 +224,11 @@ enum {
 	DRHD_INCLUDE_PCI_ALL = 1
 };
 
+enum dmar_flags {
+	DMAR_INTR_REMAP		= 1,
+	DMAR_X2APIC_OPT_OUT	= 2,
+};
+
 typedef struct dmar_entry {
 	u16 type;
 	u16 length;
@@ -547,7 +552,7 @@ void acpi_create_mcfg(acpi_mcfg_t *mcfg);
 
 void acpi_create_facs(acpi_facs_t *facs);
 
-void acpi_create_dmar(acpi_dmar_t *dmar,
+void acpi_create_dmar(acpi_dmar_t *dmar, enum dmar_flags flags,
 		      unsigned long (*acpi_fill_dmar) (unsigned long));
 unsigned long acpi_create_dmar_drhd(unsigned long current, u8 flags,
 				    u16 segment, u32 bar);
diff --git a/src/northbridge/intel/gm45/acpi.c b/src/northbridge/intel/gm45/acpi.c
index b1cb773..d16aabf 100644
--- a/src/northbridge/intel/gm45/acpi.c
+++ b/src/northbridge/intel/gm45/acpi.c
@@ -120,7 +120,7 @@ unsigned long northbridge_write_acpi_tables(device_t device,
 
 	printk(BIOS_DEBUG, "ACPI:     * DMAR\n");
 	dmar = (acpi_dmar_t *) current;
-	acpi_create_dmar(dmar, acpi_fill_dmar);
+	acpi_create_dmar(dmar, 0, acpi_fill_dmar);
 	current += dmar->header.length;
 	ALIGN_CURRENT;
 	acpi_add_table(rsdp, dmar);



More information about the coreboot-gerrit mailing list