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> Reviewed-on: https://review.coreboot.org/c/coreboot/+/38863 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
parent
2f55726609
commit
1ac2cc253b
|
@ -162,12 +162,33 @@ static const char *name_from_hid(const char *hid)
|
||||||
|
|
||||||
void superio_common_fill_ssdt_generator(struct device *dev)
|
void superio_common_fill_ssdt_generator(struct device *dev)
|
||||||
{
|
{
|
||||||
|
if (!dev || !dev->bus || !dev->bus->dev) {
|
||||||
|
printk(BIOS_CRIT, "BUG: Invalid argument in %s!\n", __func__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const char *scope = acpi_device_scope(dev);
|
const char *scope = acpi_device_scope(dev);
|
||||||
const char *name = acpi_device_name(dev);
|
const char *name = acpi_device_name(dev);
|
||||||
const u8 ldn = dev->path.pnp.device & 0xff;
|
const u8 ldn = dev->path.pnp.device & 0xff;
|
||||||
const u8 vldn = (dev->path.pnp.device >> 8) & 0x7;
|
const u8 vldn = (dev->path.pnp.device >> 8) & 0x7;
|
||||||
const char *hid;
|
const char *hid;
|
||||||
|
|
||||||
|
/* Validate devicetree settings */
|
||||||
|
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");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!scope || !name) {
|
if (!scope || !name) {
|
||||||
printk(BIOS_ERR, "%s: Missing ACPI path/scope\n", dev_path(dev));
|
printk(BIOS_ERR, "%s: Missing ACPI path/scope\n", dev_path(dev));
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue