summaryrefslogtreecommitdiff
path: root/src/soc/intel
diff options
context:
space:
mode:
authorWerner Zeh <werner.zeh@siemens.com>2018-12-14 13:09:12 +0100
committerPatrick Georgi <pgeorgi@google.com>2019-01-28 13:42:08 +0000
commitd12530cb838c4fa2d503d27c9ea19e8ffb515725 (patch)
tree67a52e3d19334a5349fd846a262683dc687ff13c /src/soc/intel
parent251514d986ea9b978f4608d1994ca3307f1b51aa (diff)
downloadcoreboot-d12530cb838c4fa2d503d27c9ea19e8ffb515725.tar.xz
intelblocks/systemagent: Add ACPI table generation hook
In preparation of generating DMAR tables, provide the hook in SoC scope for the systemagent to write ACPI tables. The complete functionality is SoC-specific. Therefore the entry hook is defined as a weak function which can be overridden by SoC code. If the SoC does not have support for generating DMAR tables this hook will do no harm. Change-Id: I1333ae2b79f1a855e6f3bb39bf534da170ddc9e1 Signed-off-by: Werner Zeh <werner.zeh@siemens.com> Reviewed-on: https://review.coreboot.org/c/30989 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de>
Diffstat (limited to 'src/soc/intel')
-rw-r--r--src/soc/intel/common/block/include/intelblocks/acpi.h5
-rw-r--r--src/soc/intel/common/block/systemagent/systemagent.c12
2 files changed, 17 insertions, 0 deletions
diff --git a/src/soc/intel/common/block/include/intelblocks/acpi.h b/src/soc/intel/common/block/include/intelblocks/acpi.h
index 029174f1ff..e615ccd213 100644
--- a/src/soc/intel/common/block/include/intelblocks/acpi.h
+++ b/src/soc/intel/common/block/include/intelblocks/acpi.h
@@ -81,6 +81,11 @@ uint32_t acpi_fill_soc_wake(uint32_t generic_pm1_en,
/* Chipset specific settings for filling up fadt table */
void soc_fill_fadt(acpi_fadt_t *fadt);
+/* Chipset specific settings for filling up dmar table */
+unsigned long sa_write_acpi_tables(struct device *dev,
+ unsigned long current,
+ struct acpi_rsdp *rsdp);
+
/* Return the polarity flag for SCI IRQ */
int soc_madt_sci_irq_polarity(int sci);
diff --git a/src/soc/intel/common/block/systemagent/systemagent.c b/src/soc/intel/common/block/systemagent/systemagent.c
index a85bcaba90..299cc5f03a 100644
--- a/src/soc/intel/common/block/systemagent/systemagent.c
+++ b/src/soc/intel/common/block/systemagent/systemagent.c
@@ -2,6 +2,7 @@
* This file is part of the coreboot project.
*
* Copyright (C) 2017-2018 Intel Corporation.
+ * Copyright (C) 2019 Siemens AG
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,6 +19,7 @@
#include <device/device.h>
#include <device/pci.h>
#include <device/pci_ids.h>
+#include <intelblocks/acpi.h>
#include <intelblocks/systemagent.h>
#include <soc/iomap.h>
#include <soc/pci_devs.h>
@@ -48,6 +50,13 @@ __weak size_t soc_reserved_mmio_size(void)
return 0;
}
+__weak unsigned long sa_write_acpi_tables(struct device *dev,
+ unsigned long current,
+ struct acpi_rsdp *rsdp)
+{
+ return current;
+}
+
/*
* Add all known fixed MMIO ranges that hang off the host bridge/memory
* controller device.
@@ -283,6 +292,9 @@ static struct device_operations systemagent_ops = {
.enable_resources = pci_dev_enable_resources,
.init = soc_systemagent_init,
.ops_pci = &pci_dev_ops_pci,
+#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)
+ .write_acpi_tables = sa_write_acpi_tables,
+#endif
};
static const unsigned short systemagent_ids[] = {