[coreboot-gerrit] Patch set updated for coreboot: ACPI: Add code to include ATSR structure in DMAR table

Werner Zeh (werner.zeh@siemens.com) gerrit at coreboot.org
Thu Jul 28 10:11:08 CEST 2016


Werner Zeh (werner.zeh at siemens.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/15911

-gerrit

commit 32d9c61b49e34897b225aff5791b6770f151a598
Author: Werner Zeh <werner.zeh at siemens.com>
Date:   Wed Jul 27 06:56:36 2016 +0200

    ACPI: Add code to include ATSR structure in DMAR table
    
    When creating DMAR table one needs to report all PCI root ports in the
    scope of a ATSR structure. Add code to create this ATS reporting
    structure. In addition, a function to fix up the size of the ATSR
    structure is added as this is a new type and using the function
    acpi_dmar_drhd_fixup() can lead to confusion.
    
    Change-Id: Idc3f6025f597048151f0fd5ea6be04843041e1ab
    Signed-off-by: Werner Zeh <werner.zeh at siemens.com>
---
 src/arch/x86/acpi.c              | 20 ++++++++++++++++++++
 src/arch/x86/include/arch/acpi.h | 12 ++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/src/arch/x86/acpi.c b/src/arch/x86/acpi.c
index 3661297..7d78f04 100644
--- a/src/arch/x86/acpi.c
+++ b/src/arch/x86/acpi.c
@@ -7,6 +7,7 @@
  * Copyright (C) 2004 SUSE LINUX AG
  * Copyright (C) 2005-2009 coresystems GmbH
  * Copyright (C) 2015 Timothy Pearson <tpearson at raptorengineeringinc.com>, Raptor Engineering
+ * Copyright (C) 2016 Siemens AG
  *
  * ACPI FADT, FACS, and DSDT table support added by
  * Nick Barker <nick.barker9 at btinternet.com>, and those portions
@@ -433,12 +434,31 @@ unsigned long acpi_create_dmar_drhd(unsigned long current, u8 flags,
 	return drhd->length;
 }
 
+unsigned long acpi_create_dmar_atsr(unsigned long current, u8 flags,
+	u16 segment)
+{
+	dmar_atsr_entry_t *atsr = (dmar_atsr_entry_t *)current;
+	memset(atsr, 0, sizeof(*atsr));
+	atsr->type = DMAR_ATSR;
+	atsr->length = sizeof(*atsr); /* will be fixed up later */
+	atsr->flags = flags;
+	atsr->segment = segment;
+
+	return atsr->length;
+}
+
 void acpi_dmar_drhd_fixup(unsigned long base, unsigned long current)
 {
 	dmar_entry_t *drhd = (dmar_entry_t *)base;
 	drhd->length = current - base;
 }
 
+void acpi_dmar_atsr_fixup(unsigned long base, unsigned long current)
+{
+	dmar_atsr_entry_t *atsr = (dmar_atsr_entry_t *)base;
+	atsr->length = current - base;
+}
+
 static unsigned long acpi_create_dmar_drhd_ds(unsigned long current,
 	enum dev_scope_type type, u8 enumeration_id, u8 bus, u8 dev, u8 fn)
 {
diff --git a/src/arch/x86/include/arch/acpi.h b/src/arch/x86/include/arch/acpi.h
index dfbffb3..b27dfff 100644
--- a/src/arch/x86/include/arch/acpi.h
+++ b/src/arch/x86/include/arch/acpi.h
@@ -5,6 +5,7 @@
  * Copyright (C) 2004 Nick Barker
  * Copyright (C) 2008-2009 coresystems GmbH
  * Copyright (C) 2015 Timothy Pearson <tpearson at raptorengineeringinc.com>, Raptor Engineering
+ * Copyright (C) 2016 Siemens AG
  * (Written by Stefan Reinauer <stepan at coresystems.de>)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -285,6 +286,14 @@ typedef struct dmar_entry {
 	u64 bar;
 } __attribute__ ((packed)) dmar_entry_t;
 
+typedef struct dmar_atsr_entry {
+	u16 type;
+	u16 length;
+	u8 flags;
+	u8 reserved;
+	u16 segment;
+} __attribute__ ((packed)) dmar_atsr_entry_t;
+
 /* DMAR (DMA Remapping Reporting Structure) */
 typedef struct acpi_dmar {
 	struct acpi_table_header header;
@@ -607,7 +616,10 @@ 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);
+unsigned long acpi_create_dmar_atsr(unsigned long current, u8 flags,
+				    u16 segment);
 void acpi_dmar_drhd_fixup(unsigned long base, unsigned long current);
+void acpi_dmar_atsr_fixup(unsigned long base, unsigned long current);
 unsigned long acpi_create_dmar_drhd_ds_pci(unsigned long current,
 					   u8 bus, u8 dev, u8 fn);
 unsigned long acpi_create_dmar_drhd_ds_ioapic(unsigned long current,



More information about the coreboot-gerrit mailing list