[nb|sb]/amd/[amdfam10|sb700]: Add LPC bridge ACPI names for NB/SB

Adds the necessary plumbing for acpi_device_path() to find the LPC
bridge on the AMD Family10h/15h northbridges and SB700 southbridge.

This is necessary for TPM support since the acpi path to the LPC bridge
doesn't match the built-in default in tpm.c

This is a port of GIT hash d8a2c1fb by Tobias Diedrich.

BUG=https://ticket.coreboot.org/issues/102
Change-Id: I1c514e335e194b2864599e5419cfaee830b94e38
Signed-off-by: Timothy Pearson <tpearson@raptorengineering.com>
Reviewed-on: https://review.coreboot.org/19282
Tested-by: build bot (Jenkins)
Tested-by: Raptor Engineering Automated Test Stand <noreply@raptorengineeringinc.com>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Timothy Pearson 2017-04-13 17:08:18 -05:00
parent 79a27ac8b8
commit 0f3a18ad28
2 changed files with 35 additions and 2 deletions

View File

@ -2,7 +2,7 @@
* This file is part of the coreboot project. * This file is part of the coreboot project.
* *
* Copyright (C) 2016 Damien Zammit <damien@zamaudio.com> * Copyright (C) 2016 Damien Zammit <damien@zamaudio.com>
* Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>, Raptor Engineering * Copyright (C) 2015 - 2017 Timothy Pearson <tpearson@raptorengineering.com>, Raptor Engineering
* Copyright (C) 2007 Advanced Micro Devices, Inc. * Copyright (C) 2007 Advanced Micro Devices, Inc.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -644,6 +644,13 @@ static void mcf0_control_init(struct device *dev)
{ {
} }
#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)
static const char *amdfam10_northbridge_acpi_name(struct device *dev)
{
return "";
}
#endif
static struct device_operations northbridge_operations = { static struct device_operations northbridge_operations = {
.read_resources = amdfam10_read_resources, .read_resources = amdfam10_read_resources,
.set_resources = amdfam10_set_resources, .set_resources = amdfam10_set_resources,
@ -653,6 +660,7 @@ static struct device_operations northbridge_operations = {
#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES) #if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)
.write_acpi_tables = northbridge_write_acpi_tables, .write_acpi_tables = northbridge_write_acpi_tables,
.acpi_fill_ssdt_generator = northbridge_acpi_write_vars, .acpi_fill_ssdt_generator = northbridge_acpi_write_vars,
.acpi_name = amdfam10_northbridge_acpi_name,
#endif #endif
.enable = 0, .enable = 0,
.ops_pci = 0, .ops_pci = 0,
@ -1302,6 +1310,16 @@ static int amdfam10_get_smbios_data(device_t dev, int *handle, unsigned long *cu
} }
#endif #endif
#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)
static const char *amdfam10_domain_acpi_name(struct device *dev)
{
if (dev->path.type == DEVICE_PATH_DOMAIN)
return "PCI0";
return NULL;
}
#endif
static struct device_operations pci_domain_ops = { static struct device_operations pci_domain_ops = {
.read_resources = amdfam10_domain_read_resources, .read_resources = amdfam10_domain_read_resources,
.set_resources = amdfam10_domain_set_resources, .set_resources = amdfam10_domain_set_resources,
@ -1309,6 +1327,9 @@ static struct device_operations pci_domain_ops = {
.init = NULL, .init = NULL,
.scan_bus = amdfam10_domain_scan_bus, .scan_bus = amdfam10_domain_scan_bus,
.ops_pci_bus = pci_bus_default_ops, .ops_pci_bus = pci_bus_default_ops,
#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)
.acpi_name = amdfam10_domain_acpi_name,
#endif
#if CONFIG_GENERATE_SMBIOS_TABLES #if CONFIG_GENERATE_SMBIOS_TABLES
.get_smbios_data = amdfam10_get_smbios_data, .get_smbios_data = amdfam10_get_smbios_data,
#endif #endif

View File

@ -271,6 +271,17 @@ static void southbridge_acpi_fill_ssdt_generator(device_t device) {
amd_generate_powernow(ACPI_CPU_CONTROL, 6, 1); amd_generate_powernow(ACPI_CPU_CONTROL, 6, 1);
} }
static const char *lpc_acpi_name(struct device *dev) {
if (dev->path.type != DEVICE_PATH_PCI)
return NULL;
switch (dev->path.pci.devfn) {
case PCI_DEVFN(0x14, 3):
return "LPC";
}
return NULL;
}
#endif #endif
@ -283,7 +294,8 @@ static struct device_operations lpc_ops = {
.set_resources = sb700_lpc_set_resources, .set_resources = sb700_lpc_set_resources,
.enable_resources = sb700_lpc_enable_resources, .enable_resources = sb700_lpc_enable_resources,
#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES) #if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)
.write_acpi_tables = acpi_write_hpet, .acpi_name = lpc_acpi_name,
.write_acpi_tables = acpi_write_hpet,
.acpi_fill_ssdt_generator = southbridge_acpi_fill_ssdt_generator, .acpi_fill_ssdt_generator = southbridge_acpi_fill_ssdt_generator,
#endif #endif
.init = lpc_init, .init = lpc_init,