Patrick Rudolph has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/38863 )
Change subject: superio/common: Validate devicetree ......................................................................
superio/common: Validate devicetree
As the SSDT generator for LDNs expects a "parent" PNP device for proper ACPI code generation, validate that it is present.
Make sure the devicetree looks as expected and print a BUG message if that's not the case.
Tested on HP Z220: No BUG message was printed.
Change-Id: I6cbcba8ac86a2a837e23055fdd7e529f9b3277a2 Signed-off-by: Patrick Rudolph patrick.rudolph@9elements.com --- M src/superio/common/ssdt.c 1 file changed, 15 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/63/38863/1
diff --git a/src/superio/common/ssdt.c b/src/superio/common/ssdt.c index 7aa24ea..945d0a6 100644 --- a/src/superio/common/ssdt.c +++ b/src/superio/common/ssdt.c @@ -168,6 +168,21 @@ const u8 vldn = (dev->path.pnp.device >> 8) & 0x7; const char *hid;
+ /* Validate devicetree settings */ + if (dev && dev->bus && dev->bus->dev) { + bool bug = false; + if (dev->bus->dev->path.type != DEVICE_PATH_PNP) { + bug = true; + printk(BIOS_CRIT, "BUG: Parent of device %s is not a PNP device\n", + dev_path(dev)); + } else if (dev->bus->dev->path.pnp.port != dev->path.pnp.port) { + bug = true; + printk(BIOS_CRIT, "BUG: Parent of device %s has wrong I/O port\n", + dev_path(dev)); + } + if (bug) + printk(BIOS_CRIT, "BUG: Check your devicetree!\n"); + } if (!scope || !name) { printk(BIOS_ERR, "%s: Missing ACPI path/scope\n", dev_path(dev)); return;