pnp_device: don't treat missing PNP_MSC devicetree entry as error

Change-Id: I8da01cd462225b633bf2043ab33b35aeddc8d55a
Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Reviewed-on: https://review.coreboot.org/27668
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
diff --git a/src/device/pnp_device.c b/src/device/pnp_device.c
index 09a2748..e56b00d 100644
--- a/src/device/pnp_device.c
+++ b/src/device/pnp_device.c
@@ -118,9 +118,21 @@
 static void pnp_set_resource(struct device *dev, struct resource *resource)
 {
 	if (!(resource->flags & IORESOURCE_ASSIGNED)) {
-		printk(BIOS_ERR, "ERROR: %s %02lx %s size: 0x%010llx "
-		       "not assigned\n", dev_path(dev), resource->index,
-		       resource_type(resource), resource->size);
+		/* The PNP_MSC super IO registers have the IRQ flag set. If no
+		   value is assigned in the devicetree, the corresponding
+		   PNP_MSC register doesn't get written, which should be printed
+		   as warning and not as error. */
+		if (resource->flags & IORESOURCE_IRQ &&
+		    (resource->index != PNP_IDX_IRQ0) &&
+		    (resource->index != PNP_IDX_IRQ1))
+			printk(BIOS_WARNING, "WARNING: %s %02lx %s size: "
+			       "0x%010llx not assigned\n", dev_path(dev),
+			       resource->index, resource_type(resource),
+			       resource->size);
+		else
+			printk(BIOS_ERR, "ERROR: %s %02lx %s size: 0x%010llx "
+			       "not assigned\n", dev_path(dev), resource->index,
+			       resource_type(resource), resource->size);
 		return;
 	}