summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorMario Scheithauer <mario.scheithauer@siemens.com>2017-11-21 13:52:53 +0100
committerDuncan Laurie <dlaurie@chromium.org>2017-11-21 17:01:01 +0000
commitf1eb0ea537af82dba7040586a5a4f4f249b4e63f (patch)
treee8d298fac60d6b744e0b8e955e744fdda1895ec8 /src/arch
parentece69f212375c6895e70e86fb3fd8d4c45f51cbf (diff)
arch/x86: Write ACPI DBG2 table only if the device has been enabled
The commit 93bbd41e (soc/intel: Enable ACPI DBG2 table generation) causes a crash on the mainboard mc_apl1. On this mainboard all internal SOC UARTs in the devicetree are switched off. As a result, no resources are allocated to the UARTs. The function find_resource() expects an existing resource. Otherwise, the CPU will stop. It should therefore not only be queried whether a device is present, but also whether it is enabled. Change-Id: I56ce44ae0cf77916fcb640f79fb8944fe33177cd Signed-off-by: Mario Scheithauer <mario.scheithauer@siemens.com> Reviewed-on: https://review.coreboot.org/22552 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/x86/acpi.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/arch/x86/acpi.c b/src/arch/x86/acpi.c
index 56f64084e8..601b6f0aa4 100644
--- a/src/arch/x86/acpi.c
+++ b/src/arch/x86/acpi.c
@@ -8,7 +8,7 @@
* Copyright (C) 2005-2009 coresystems GmbH
* Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>,
* Raptor Engineering
- * Copyright (C) 2016 Siemens AG
+ * Copyright (C) 2016-2017 Siemens AG
*
* ACPI FADT, FACS, and DSDT table support added by
* Nick Barker <nick.barker9@btinternet.com>, and those portions
@@ -734,6 +734,10 @@ unsigned long acpi_write_dbg2_pci_uart(acpi_rsdp_t *rsdp, unsigned long current,
printk(BIOS_ERR, "%s: Device not found\n", __func__);
return current;
}
+ if (!dev->enabled) {
+ printk(BIOS_INFO, "%s: Device not enabled\n", __func__);
+ return current;
+ }
res = find_resource(dev, PCI_BASE_ADDRESS_0);
if (!res) {
printk(BIOS_ERR, "%s: Unable to find resource for %s\n",