diff --git a/core/interrupts.c b/core/interrupts.c
index db39267..7109fae 100644
--- a/core/interrupts.c
+++ b/core/interrupts.c
@@ -143,7 +143,7 @@ struct dt_node *add_ics_node(void)
 	dt_add_property_strings(ics, "compatible", "IBM,ppc-xics",
 				"IBM,opal-xics");
 	dt_add_property_cells(ics, "#address-cells", 0);
-	dt_add_property_cells(ics, "#interrupt-cells", 1);
+	dt_add_property_cells(ics, "#interrupt-cells", 2);
 	dt_add_property_string(ics, "device_type",
 			       "PowerPC-Interrupt-Source-Controller");
 	dt_add_property(ics, "interrupt-controller", NULL, 0);
diff --git a/doc/device-tree.txt b/doc/device-tree.txt
index a231d53..742ff43 100644
--- a/doc/device-tree.txt
+++ b/doc/device-tree.txt
@@ -305,7 +305,6 @@
 		compatible = "IBM,ppc-xicp", "IBM,power8-icp";
 		interrupt-controller;
 		#address-cells = <0x0>;
-		#interrupt-cells = <0x1>;
 		device_type = "PowerPC-External-Interrupt-Presentation";
 
 		/*
diff --git a/hdata/test/p8-840-spira.dt b/hdata/test/p8-840-spira.dt
index 8746bea..324b616 100644
--- a/hdata/test/p8-840-spira.dt
+++ b/hdata/test/p8-840-spira.dt
@@ -548,7 +548,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8002d00000000000000010000003ffff8002e00000000000000010000003ffff
   8002f0000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80060000
@@ -560,7 +559,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8006500000000000000010000003ffff8006600000000000000010000003ffff
   800670000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80068000
@@ -572,7 +570,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8006d00000000000000010000003ffff8006e00000000000000010000003ffff
   8006f0000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80130000
@@ -584,7 +581,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8013500000000000000010000003ffff8013600000000000000010000003ffff
   801370000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80168000
@@ -596,7 +592,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8016d00000000000000010000003ffff8016e00000000000000010000003ffff
   8016f0000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80170000
@@ -608,7 +603,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8017500000000000000010000003ffff8017600000000000000010000003ffff
   801770000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: ipl-params
diff --git a/hdata/test/p81-811.spira.dt b/hdata/test/p81-811.spira.dt
index 068152c..5b792b4 100644
--- a/hdata/test/p81-811.spira.dt
+++ b/hdata/test/p81-811.spira.dt
@@ -1453,7 +1453,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8002500000000000000010000003ffff8002600000000000000010000003ffff
   800270000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80030000
@@ -1465,7 +1464,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8003500000000000000010000003ffff8003600000000000000010000003ffff
   800370000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80060000
@@ -1477,7 +1475,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8006500000000000000010000003ffff8006600000000000000010000003ffff
   800670000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80068000
@@ -1489,7 +1486,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8006d00000000000000010000003ffff8006e00000000000000010000003ffff
   8006f0000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80070000
@@ -1501,7 +1497,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8007500000000000000010000003ffff8007600000000000000010000003ffff
   800770000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80128000
@@ -1513,7 +1508,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8012d00000000000000010000003ffff8012e00000000000000010000003ffff
   8012f0000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80130000
@@ -1525,7 +1519,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8013500000000000000010000003ffff8013600000000000000010000003ffff
   801370000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80160000
@@ -1537,7 +1530,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8016500000000000000010000003ffff8016600000000000000010000003ffff
   801670000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80168000
@@ -1549,7 +1541,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8016d00000000000000010000003ffff8016e00000000000000010000003ffff
   8016f0000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80170000
@@ -1561,7 +1552,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8017500000000000000010000003ffff8017600000000000000010000003ffff
   801770000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80828000
@@ -1573,7 +1563,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8082d00000000000000010000003ffff8082e00000000000000010000003ffff
   8082f0000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80830000
@@ -1585,7 +1574,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8083500000000000000010000003ffff8083600000000000000010000003ffff
   808370000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80860000
@@ -1597,7 +1585,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8086500000000000000010000003ffff8086600000000000000010000003ffff
   808670000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80868000
@@ -1609,7 +1596,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8086d00000000000000010000003ffff8086e00000000000000010000003ffff
   8086f0000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80870000
@@ -1621,7 +1607,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8087500000000000000010000003ffff8087600000000000000010000003ffff
   808770000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80920000
@@ -1633,7 +1618,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8092500000000000000010000003ffff8092600000000000000010000003ffff
   809270000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80928000
@@ -1645,7 +1629,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8092d00000000000000010000003ffff8092e00000000000000010000003ffff
   8092f0000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80930000
@@ -1657,7 +1640,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8093500000000000000010000003ffff8093600000000000000010000003ffff
   809370000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80968000
@@ -1669,7 +1651,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8096d00000000000000010000003ffff8096e00000000000000010000003ffff
   8096f0000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: interrupt-controller@3ffff80970000
@@ -1681,7 +1662,6 @@ prop: ibm,enabled-idle-states size: 24 val: 6e617000666173742d736c65657000727677
   0010000003ffff8097500000000000000010000003ffff8097600000000000000010000003ffff
   809770000000000000001000
   prop: #address-cells size: 4 val: 00000000
-  prop: #interrupt-cells size: 4 val: 00000001
   prop: device_type size: 40 val: 506f77657250432d45787465726e616c2d496e746572727570742d50726573656e746174696f
   6e00
   node: ipl-params
diff --git a/hw/npu.c b/hw/npu.c
index f535f8a..34b4f26 100644
--- a/hw/npu.c
+++ b/hw/npu.c
@@ -1760,15 +1760,19 @@ static void npu_add_phb_properties(struct npu *p)
         dt_add_property_cells(np, "interrupt-parent", icsp);
 
         /* DLPL Interrupts */
-        p->phb.lstate.int_size = 1;
-        p->phb.lstate.int_val[0][0] = p->base_lsi + NPU_LSI_INT_DL0;
-        p->phb.lstate.int_val[1][0] = p->base_lsi + NPU_LSI_INT_DL1;
-        p->phb.lstate.int_val[2][0] = p->base_lsi + NPU_LSI_INT_DL2;
-        p->phb.lstate.int_val[3][0] = p->base_lsi + NPU_LSI_INT_DL3;
-        p->phb.lstate.int_parent[0] = icsp;
-        p->phb.lstate.int_parent[1] = icsp;
-        p->phb.lstate.int_parent[2] = icsp;
-        p->phb.lstate.int_parent[3] = icsp;
+	p->phb.lstate.int_size = 2;
+	p->phb.lstate.int_val[0][0] = p->base_lsi + NPU_LSI_INT_DL0;
+	p->phb.lstate.int_val[0][1] = 1;
+	p->phb.lstate.int_val[1][0] = p->base_lsi + NPU_LSI_INT_DL1;
+	p->phb.lstate.int_val[1][1] = 1;
+	p->phb.lstate.int_val[2][0] = p->base_lsi + NPU_LSI_INT_DL2;
+	p->phb.lstate.int_val[2][1] = 1;
+	p->phb.lstate.int_val[3][0] = p->base_lsi + NPU_LSI_INT_DL3;
+	p->phb.lstate.int_val[3][1] = 1;
+	p->phb.lstate.int_parent[0] = icsp;
+	p->phb.lstate.int_parent[1] = icsp;
+	p->phb.lstate.int_parent[2] = icsp;
+	p->phb.lstate.int_parent[3] = icsp;
 
 	/* Due to the way the emulated PCI devices are structured in
 	 * the device tree the core PCI layer doesn't do this for
diff --git a/hw/p7ioc-phb.c b/hw/p7ioc-phb.c
index 96554c8..6f5a6ab 100644
--- a/hw/p7ioc-phb.c
+++ b/hw/p7ioc-phb.c
@@ -2617,11 +2617,15 @@ static void p7ioc_pcie_add_node(struct p7ioc_phb *p)
 	 * PCI code based on the content of this structure:
 	 */
 	lsibase = p->buid_lsi << 4;
-	p->phb.lstate.int_size = 1;
+	p->phb.lstate.int_size = 2;
 	p->phb.lstate.int_val[0][0] = lsibase + PHB_LSI_PCIE_INTA;
+	p->phb.lstate.int_val[0][1] = 1;
 	p->phb.lstate.int_val[1][0] = lsibase + PHB_LSI_PCIE_INTB;
+	p->phb.lstate.int_val[1][1] = 1;
 	p->phb.lstate.int_val[2][0] = lsibase + PHB_LSI_PCIE_INTC;
+	p->phb.lstate.int_val[2][1] = 1;
 	p->phb.lstate.int_val[3][0] = lsibase + PHB_LSI_PCIE_INTD;
+	p->phb.lstate.int_val[3][1] = 1;
 	p->phb.lstate.int_parent[0] = icsp;
 	p->phb.lstate.int_parent[1] = icsp;
 	p->phb.lstate.int_parent[2] = icsp;
diff --git a/hw/p7ioc.c b/hw/p7ioc.c
index 85a0a51..e690200 100644
--- a/hw/p7ioc.c
+++ b/hw/p7ioc.c
@@ -629,7 +629,7 @@ static void p7ioc_create_hub(struct dt_node *np)
 	dt_add_property_cells(np, "ibm,opal-hubid", 0, id);
 
 	/* XXX Fixme: how many RGC interrupts ? */
-	dt_add_property_cells(np, "interrupts", ioc->rgc_buid << 4);
+	dt_add_property_cells(np, "interrupts", ioc->rgc_buid << 4, 1);
 	dt_add_property_cells(np, "interrupt-base", ioc->rgc_buid << 4);
 
 	/* XXX What about ibm,opal-mmio-real ? */
diff --git a/hw/phb3.c b/hw/phb3.c
index b792bdc..8e4c544 100644
--- a/hw/phb3.c
+++ b/hw/phb3.c
@@ -4248,11 +4248,15 @@ static void phb3_add_properties(struct phb3 *p)
 	 * PCI code based on the content of this structure:
 	 */
 	lsibase = p->base_lsi;
-	p->phb.lstate.int_size = 1;
+	p->phb.lstate.int_size = 2;
 	p->phb.lstate.int_val[0][0] = lsibase + PHB3_LSI_PCIE_INTA;
+	p->phb.lstate.int_val[0][1] = 1;
 	p->phb.lstate.int_val[1][0] = lsibase + PHB3_LSI_PCIE_INTB;
+	p->phb.lstate.int_val[1][1] = 1;
 	p->phb.lstate.int_val[2][0] = lsibase + PHB3_LSI_PCIE_INTC;
+	p->phb.lstate.int_val[2][1] = 1;
 	p->phb.lstate.int_val[3][0] = lsibase + PHB3_LSI_PCIE_INTD;
+	p->phb.lstate.int_val[3][1] = 1;
 	p->phb.lstate.int_parent[0] = icsp;
 	p->phb.lstate.int_parent[1] = icsp;
 	p->phb.lstate.int_parent[2] = icsp;
diff --git a/hw/phb4.c b/hw/phb4.c
index 31b340f..cf5742b 100644
--- a/hw/phb4.c
+++ b/hw/phb4.c
@@ -2923,11 +2923,15 @@ static void phb4_add_properties(struct phb4 *p)
 	 * PCI code based on the content of this structure:
 	 */
 	lsibase = p->base_lsi;
-	p->phb.lstate.int_size = 1;
+	p->phb.lstate.int_size = 2;
 	p->phb.lstate.int_val[0][0] = lsibase + PHB4_LSI_PCIE_INTA;
+	p->phb.lstate.int_val[0][1] = 1;
 	p->phb.lstate.int_val[1][0] = lsibase + PHB4_LSI_PCIE_INTB;
+	p->phb.lstate.int_val[1][1] = 1;
 	p->phb.lstate.int_val[2][0] = lsibase + PHB4_LSI_PCIE_INTC;
+	p->phb.lstate.int_val[2][1] = 1;
 	p->phb.lstate.int_val[3][0] = lsibase + PHB4_LSI_PCIE_INTD;
+	p->phb.lstate.int_val[3][1] = 1;
 	p->phb.lstate.int_parent[0] = icsp;
 	p->phb.lstate.int_parent[1] = icsp;
 	p->phb.lstate.int_parent[2] = icsp;
diff --git a/hw/psi.c b/hw/psi.c
index 0823ec8..46e059a 100644
--- a/hw/psi.c
+++ b/hw/psi.c
@@ -783,7 +783,7 @@ static void psi_create_mm_dtnode(struct psi *psi)
 		dt_add_property_strings(np, "compatible", "ibm,psi");
 	}
 	dt_add_property_cells(np, "interrupt-parent", get_ics_phandle());
-	dt_add_property_cells(np, "interrupts", psi->interrupt);
+	dt_add_property_cells(np, "interrupts", psi->interrupt, 1);
 	dt_add_property_cells(np, "ibm,chip-id", psi->chip_id);
 }
 
diff --git a/platforms/rhesus/rhesus.c b/platforms/rhesus/rhesus.c
index a3af777..a6c3f76 100644
--- a/platforms/rhesus/rhesus.c
+++ b/platforms/rhesus/rhesus.c
@@ -199,7 +199,7 @@ static void rhesus_dt_fixup_uart(struct dt_node *lpc, bool has_irq)
 	if (has_irq) {
 		uint32_t chip_id = dt_get_chip_id(lpc);
 		uint32_t irq = get_psi_interrupt(chip_id) + P8_IRQ_PSI_HOST_ERR;
-		dt_add_property_cells(uart, "interrupts", irq);
+		dt_add_property_cells(uart, "interrupts", irq, 1);
 		dt_add_property_cells(uart, "interrupt-parent",
 				      get_ics_phandle());
 	}
