summaryrefslogtreecommitdiffstats
path: root/resources/libreboot/patch/coreboot/33fb4cf0ffb01be8bcb6b488872c87eb50e7d77f/grub/kgpe-d16/0112-arch-x86-acpi-Add-IVRS-table-generation-routines.patch
diff options
context:
space:
mode:
authorFrancis Rowe <info@gluglug.org.uk>2016-01-02 17:10:32 (EST)
committer Francis Rowe <info@gluglug.org.uk>2016-01-04 15:28:39 (EST)
commitd1f408f3725aa02bc1d76c4c6aadb4697bd073c0 (patch)
tree7eed036543ae1f8c57b56825880a722a8efbedf1 /resources/libreboot/patch/coreboot/33fb4cf0ffb01be8bcb6b488872c87eb50e7d77f/grub/kgpe-d16/0112-arch-x86-acpi-Add-IVRS-table-generation-routines.patch
parent91aec7e72005dcda72d19f2d024a02d8c0f86590 (diff)
downloadlibreboot-d1f408f3725aa02bc1d76c4c6aadb4697bd073c0.zip
libreboot-d1f408f3725aa02bc1d76c4c6aadb4697bd073c0.tar.gz
libreboot-d1f408f3725aa02bc1d76c4c6aadb4697bd073c0.tar.bz2
Use different coreboot revisions and patches per board
The release archives will be bigger, but this is a necessary change that makes libreboot development easier. At present, there are boards maintained in libreboot by different people. By doing it this way, that becomes much easier. This is in contrast to the present situation, where a change to one board potentially affects all other boards, especially when updating to a new version of coreboot. Coreboot-libre scripts, download scripts, build scripts - everything. The entire build system has been modified to reflect this change of development. For reasons of consistency, cbfstool and nvramtool are no longer included in the util archives.
Diffstat (limited to 'resources/libreboot/patch/coreboot/33fb4cf0ffb01be8bcb6b488872c87eb50e7d77f/grub/kgpe-d16/0112-arch-x86-acpi-Add-IVRS-table-generation-routines.patch')
-rw-r--r--resources/libreboot/patch/coreboot/33fb4cf0ffb01be8bcb6b488872c87eb50e7d77f/grub/kgpe-d16/0112-arch-x86-acpi-Add-IVRS-table-generation-routines.patch121
1 files changed, 121 insertions, 0 deletions
diff --git a/resources/libreboot/patch/coreboot/33fb4cf0ffb01be8bcb6b488872c87eb50e7d77f/grub/kgpe-d16/0112-arch-x86-acpi-Add-IVRS-table-generation-routines.patch b/resources/libreboot/patch/coreboot/33fb4cf0ffb01be8bcb6b488872c87eb50e7d77f/grub/kgpe-d16/0112-arch-x86-acpi-Add-IVRS-table-generation-routines.patch
new file mode 100644
index 0000000..dd83072
--- /dev/null
+++ b/resources/libreboot/patch/coreboot/33fb4cf0ffb01be8bcb6b488872c87eb50e7d77f/grub/kgpe-d16/0112-arch-x86-acpi-Add-IVRS-table-generation-routines.patch
@@ -0,0 +1,121 @@
+From 5152908b5fd0983ed36b2a5e35ebcf510cd31727 Mon Sep 17 00:00:00 2001
+From: Timothy Pearson <tpearson@raptorengineeringinc.com>
+Date: Tue, 11 Aug 2015 17:48:32 -0500
+Subject: [PATCH 112/143] arch/x86/acpi: Add IVRS table generation routines
+
+Change-Id: Ia5d97d01dc9ddc45f81d998d126d592a915b4a75
+Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com>
+---
+ src/arch/x86/acpi.c | 25 +++++++++++++++++++++++++
+ src/arch/x86/include/arch/acpi.h | 31 +++++++++++++++++++++++++++++++
+ 2 files changed, 56 insertions(+)
+
+diff --git a/src/arch/x86/acpi.c b/src/arch/x86/acpi.c
+index 417a322..e73e5f2 100644
+--- a/src/arch/x86/acpi.c
++++ b/src/arch/x86/acpi.c
+@@ -6,6 +6,7 @@
+ *
+ * Copyright (C) 2004 SUSE LINUX AG
+ * Copyright (C) 2005-2009 coresystems GmbH
++ * Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>, Raptor Engineering
+ *
+ * ACPI FADT, FACS, and DSDT table support added by
+ * Nick Barker <nick.barker9@btinternet.com>, and those portions
+@@ -506,6 +507,30 @@ void acpi_create_hpet(acpi_hpet_t *hpet)
+ header->checksum = acpi_checksum((void *)hpet, sizeof(acpi_hpet_t));
+ }
+
++void acpi_create_ivrs(acpi_ivrs_t *ivrs,
++ unsigned long (*acpi_fill_ivrs)(acpi_ivrs_t* ivrs_struct, unsigned long current))
++{
++ acpi_header_t *header = &(ivrs->header);
++ unsigned long current = (unsigned long)ivrs + sizeof(acpi_ivrs_t);
++
++ memset((void *)ivrs, 0, sizeof(acpi_ivrs_t));
++
++ /* Fill out header fields. */
++ memcpy(header->signature, "IVRS", 4);
++ memcpy(header->oem_id, OEM_ID, 6);
++ memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
++ memcpy(header->asl_compiler_id, ASLC, 4);
++
++ header->length = sizeof(acpi_ivrs_t);
++ header->revision = 1; /* ACPI 1.0: N/A, ACPI 2.0/3.0/4.0: 1 */
++
++ current = acpi_fill_ivrs(ivrs, current);
++
++ /* (Re)calculate length and checksum. */
++ header->length = current - (unsigned long)ivrs;
++ header->checksum = acpi_checksum((void *)ivrs, header->length);
++}
++
+ unsigned long acpi_write_hpet(device_t device, unsigned long current, acpi_rsdp_t *rsdp)
+ {
+ acpi_hpet_t *hpet;
+diff --git a/src/arch/x86/include/arch/acpi.h b/src/arch/x86/include/arch/acpi.h
+index 28f650c..7d583b8 100644
+--- a/src/arch/x86/include/arch/acpi.h
++++ b/src/arch/x86/include/arch/acpi.h
+@@ -4,6 +4,7 @@
+ * Copyright (C) 2004 SUSE LINUX AG
+ * Copyright (C) 2004 Nick Barker
+ * Copyright (C) 2008-2009 coresystems GmbH
++ * Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>, Raptor Engineering
+ * (Written by Stefan Reinauer <stepan@coresystems.de>)
+ *
+ * This program is free software; you can redistribute it and/or modify
+@@ -194,6 +195,32 @@ typedef struct acpi_madt {
+ u32 flags; /* Multiple APIC flags */
+ } __attribute__ ((packed)) acpi_madt_t;
+
++typedef struct acpi_ivrs_info {
++} __attribute__ ((packed)) acpi_ivrs_info_t;
++
++/* IVRS IVHD (I/O Virtualization Hardware Definition Block) */
++typedef struct acpi_ivrs_ivhd {
++ uint8_t type;
++ uint8_t flags;
++ uint16_t length;
++ uint16_t device_id;
++ uint16_t capability_offset;
++ uint32_t iommu_base_low;
++ uint32_t iommu_base_high;
++ uint16_t pci_segment_group;
++ uint16_t iommu_info;
++ uint32_t efr;
++ uint8_t entry[0];
++} __attribute__ ((packed)) acpi_ivrs_ivhd_t;
++
++/* IVRS (I/O Virtualization Reporting Structure) */
++typedef struct acpi_ivrs {
++ struct acpi_table_header header;
++ uint32_t iv_info;
++ uint32_t reserved[2];
++ struct acpi_ivrs_ivhd ivhd;
++} __attribute__ ((packed)) acpi_ivrs_t;
++
+ enum dev_scope_type {
+ SCOPE_PCI_ENDPOINT = 1,
+ SCOPE_PCI_SUB = 2,
+@@ -497,6 +524,7 @@ unsigned long fw_cfg_acpi_tables(unsigned long start);
+ unsigned long write_acpi_tables(unsigned long addr);
+ unsigned long acpi_fill_madt(unsigned long current);
+ unsigned long acpi_fill_mcfg(unsigned long current);
++unsigned long acpi_fill_ivrs_ioapic(acpi_ivrs_t* ivrs, unsigned long current);
+ void acpi_create_ssdt_generator(acpi_header_t *ssdt, const char *oem_table_id);
+ void acpi_create_fadt(acpi_fadt_t *fadt,acpi_facs_t *facs, void *dsdt);
+ #if IS_ENABLED(CONFIG_COMMON_FADT)
+@@ -535,6 +563,9 @@ void acpi_create_srat(acpi_srat_t *srat,
+ void acpi_create_slit(acpi_slit_t *slit,
+ unsigned long (*acpi_fill_slit)(unsigned long current));
+
++void acpi_create_ivrs(acpi_ivrs_t *ivrs,
++ unsigned long (*acpi_fill_ivrs)(acpi_ivrs_t* ivrs_struct, unsigned long current));
++
+ #if ENV_RAMSTAGE
+ void acpi_create_hpet(acpi_hpet_t *hpet);
+ unsigned long acpi_write_hpet(device_t device, unsigned long start, acpi_rsdp_t *rsdp);
+--
+1.7.9.5
+