summaryrefslogtreecommitdiff
path: root/src/soc/amd/cezanne
diff options
context:
space:
mode:
authorFelix Held <felix-coreboot@felixheld.de>2021-02-14 22:45:48 +0100
committerFelix Held <felix-coreboot@felixheld.de>2021-02-16 00:08:06 +0000
commit4ef37ae68d14e91eca5ca08fe4b7b9df970e1fbe (patch)
treebad79eda2964ec93375ef41fd3ca15e39fa07192 /src/soc/amd/cezanne
parent15f84cc33bd6a7180a2252ac9fae914d2118dbec (diff)
soc/amd/cezanne/data_fabric: add ACPI names and SSDT entries
Additionally to the PCI IDs of Cezanne it also handles the Renoir ones. The main difference between those two is that Renoir has two core complexes while Cezanne only has one core complex. I haven't seen incompatible changes between those two though, so for example the fabric IDs are the same and the one that's only present in Renoir is just not used in Cezanne. Also adding the ACPI parts for those don't have anything to do with those differences. Signed-off-by: Felix Held <felix-coreboot@felixheld.de> Change-Id: I3b2517bc15d872f41183a33857333f1972ff2cb9 Reviewed-on: https://review.coreboot.org/c/coreboot/+/50706 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
Diffstat (limited to 'src/soc/amd/cezanne')
-rw-r--r--src/soc/amd/cezanne/data_fabric.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/soc/amd/cezanne/data_fabric.c b/src/soc/amd/cezanne/data_fabric.c
index b4bf61818b..d603c8a132 100644
--- a/src/soc/amd/cezanne/data_fabric.c
+++ b/src/soc/amd/cezanne/data_fabric.c
@@ -1,8 +1,12 @@
/* SPDX-License-Identifier: GPL-2.0-only */
+#include <acpi/acpi_device.h>
#include <amdblocks/data_fabric.h>
#include <console/console.h>
#include <cpu/x86/lapic_def.h>
+#include <device/device.h>
+#include <device/pci.h>
+#include <device/pci_ids.h>
#include <soc/data_fabric.h>
#include <soc/iomap.h>
#include <types.h>
@@ -93,3 +97,72 @@ void data_fabric_set_mmio_np(void)
data_fabric_print_mmio_conf();
}
+
+static const char *data_fabric_acpi_name(const struct device *dev)
+{
+ switch (dev->device) {
+ case PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF0:
+ case PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF0:
+ return "DFD0";
+ case PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF1:
+ case PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF1:
+ return "DFD1";
+ case PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF2:
+ case PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF2:
+ return "DFD2";
+ case PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF3:
+ case PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF3:
+ return "DFD3";
+ case PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF4:
+ case PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF4:
+ return "DFD4";
+ case PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF5:
+ case PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF5:
+ return "DFD5";
+ case PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF6:
+ case PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF6:
+ return "DFD6";
+ case PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF7:
+ case PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF7:
+ return "DFD7";
+ default:
+ printk(BIOS_ERR, "%s: Unhandled device id 0x%x\n", __func__, dev->device);
+ }
+
+ return NULL;
+}
+
+static struct device_operations data_fabric_ops = {
+ .read_resources = noop_read_resources,
+ .set_resources = noop_set_resources,
+ .acpi_name = data_fabric_acpi_name,
+ .acpi_fill_ssdt = acpi_device_write_pci_dev,
+};
+
+static const unsigned short pci_device_ids[] = {
+ /* Renoir DF devices */
+ PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF0,
+ PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF1,
+ PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF2,
+ PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF3,
+ PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF4,
+ PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF5,
+ PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF6,
+ PCI_DEVICE_ID_AMD_FAM17H_MODEL60H_DF7,
+ /* Cezanne DF devices */
+ PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF0,
+ PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF1,
+ PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF2,
+ PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF3,
+ PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF4,
+ PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF5,
+ PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF6,
+ PCI_DEVICE_ID_AMD_FAM19H_MODEL51H_DF7,
+ 0
+};
+
+static const struct pci_driver data_fabric_driver __pci_driver = {
+ .ops = &data_fabric_ops,
+ .vendor = PCI_VENDOR_ID_AMD,
+ .devices = pci_device_ids,
+};