[Skiboot] [PATCH v3 1/2] hdata/vpd: Rework vpd node creation logic

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Tue Oct 10 16:40:17 AEDT 2017


Presently we traverse SLCA structure to create various FRU nodes under /vpd
node. We assumed that children are always contiguous. It happened to be
contiguous in P8 and worked fine, but failed in P9 system. So it ended up
populating duplicate node under wrong parent. Also failed to populate some
of the nodes.

Unfortunately there is no way to reach all the children of a given parent
from parent node :-( Hence we have to rework vpd creation logic.

This patch goes through all the SLCA entries serially and creates vpd node.
Assumptions:
  - SLCA index is always serial (0..n)
  - When we traverse serially parent entry comes before child
  - Redundant resources are always consecutive
  - Populate node if SLCA has 'installed' and 'VPD collected' bit set

CC: Ananth N Mavinakayanahalli <ananth at linux.vnet.ibm.com>
Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
Reviewed-by: Oliver O'Halloran <oohall at gmail.com>
---
Changes in v3:
  - Fixed hdata test cases - Thanks Oliver

-Vasant
 hdata/hdata.h                |   1 +
 hdata/spira.c                |  11 +-
 hdata/test/p8-840-spira.dts  | 184 ++++++++++----------
 hdata/test/p81-811.spira.dts | 394 +++++++++++++++++++++----------------------
 hdata/vpd.c                  | 172 +++++++++----------
 5 files changed, 363 insertions(+), 399 deletions(-)

diff --git a/hdata/hdata.h b/hdata/hdata.h
index 2e4840f..ce3719a 100644
--- a/hdata/hdata.h
+++ b/hdata/hdata.h
@@ -27,6 +27,7 @@ extern bool pcia_parse(void);
 extern void fsp_parse(void);
 extern void bmc_parse(void);
 extern void io_parse(void);
+extern void dt_init_vpd_node(void);
 extern struct dt_node *dt_add_vpd_node(const struct HDIF_common_hdr *hdr,
 				       int indx_fru, int indx_vpd);
 extern void vpd_parse(void);
diff --git a/hdata/spira.c b/hdata/spira.c
index 58e365f..adaa604 100644
--- a/hdata/spira.c
+++ b/hdata/spira.c
@@ -1220,15 +1220,6 @@ static void dt_init_led_node(void)
 	assert(led_node);
 }
 
-static void dt_init_vpd_node(void)
-{
-	struct dt_node *dt_vpd;
-
-	dt_vpd = dt_new(dt_root, "vpd");
-	assert(dt_vpd);
-	dt_add_property_string(dt_vpd, "compatible", "ibm,opal-v3-vpd");
-}
-
 static void hostservices_parse(void)
 {
 	struct HDIF_common_hdr *hs_hdr;
@@ -1576,7 +1567,7 @@ int parse_hdat(bool is_opal)
 	/* Add any BMCs and enable the LPC UART */
 	bmc_parse();
 
-	/* Create /vpd node */
+	/* Create and populate /vpd node */
 	dt_init_vpd_node();
 
 	/* Create /ibm,opal/led node */
diff --git a/hdata/test/p8-840-spira.dts b/hdata/test/p8-840-spira.dts
index dbb3618..a384434 100644
--- a/hdata/test/p8-840-spira.dts
+++ b/hdata/test/p8-840-spira.dts
@@ -23,12 +23,12 @@
 	ibm,enabled-idle-states = "nap", "fast-sleep", "rvwinkle";
 
 	cpus {
-		phandle = <0x5>;
+		phandle = <0x22>;
 		#address-cells = <0x1>;
 		#size-cells = <0x0>;
 
 		PowerPC,POWER8 at 28 {
-			phandle = <0x6>;
+			phandle = <0x23>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x28>;
@@ -64,14 +64,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x7>;
+			l2-cache = <0x24>;
 			ibm,pir = <0x28>;
 			ibm,chip-id = <0x0>;
 			ibm,ppc-interrupt-server#s = <0x28 0x29 0x2a 0x2b 0x2c 0x2d 0x2e 0x2f>;
 		};
 
 		PowerPC,POWER8 at 60 {
-			phandle = <0xa>;
+			phandle = <0x27>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x60>;
@@ -107,14 +107,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0xb>;
+			l2-cache = <0x28>;
 			ibm,pir = <0x60>;
 			ibm,chip-id = <0x0>;
 			ibm,ppc-interrupt-server#s = <0x60 0x61 0x62 0x63 0x64 0x65 0x66 0x67>;
 		};
 
 		PowerPC,POWER8 at 68 {
-			phandle = <0xe>;
+			phandle = <0x2b>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x68>;
@@ -150,14 +150,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0xf>;
+			l2-cache = <0x2c>;
 			ibm,pir = <0x68>;
 			ibm,chip-id = <0x0>;
 			ibm,ppc-interrupt-server#s = <0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f>;
 		};
 
 		PowerPC,POWER8 at b0 {
-			phandle = <0x12>;
+			phandle = <0x2f>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0xb0>;
@@ -193,14 +193,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x13>;
+			l2-cache = <0x30>;
 			ibm,pir = <0xb0>;
 			ibm,chip-id = <0x1>;
 			ibm,ppc-interrupt-server#s = <0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7>;
 		};
 
 		PowerPC,POWER8 at e8 {
-			phandle = <0x16>;
+			phandle = <0x33>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0xe8>;
@@ -236,14 +236,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x17>;
+			l2-cache = <0x34>;
 			ibm,pir = <0xe8>;
 			ibm,chip-id = <0x1>;
 			ibm,ppc-interrupt-server#s = <0xe8 0xe9 0xea 0xeb 0xec 0xed 0xee 0xef>;
 		};
 
 		PowerPC,POWER8 at f0 {
-			phandle = <0x1a>;
+			phandle = <0x37>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0xf0>;
@@ -279,14 +279,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x1b>;
+			l2-cache = <0x38>;
 			ibm,pir = <0xf0>;
 			ibm,chip-id = <0x1>;
 			ibm,ppc-interrupt-server#s = <0xf0 0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7>;
 		};
 
 		l2-cache at 20000028 {
-			phandle = <0x7>;
+			phandle = <0x24>;
 			device_type = "cache";
 			reg = <0x20000028>;
 			status = "okay";
@@ -295,11 +295,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x8>;
+			l2-cache = <0x25>;
 		};
 
 		l2-cache at 20000060 {
-			phandle = <0xb>;
+			phandle = <0x28>;
 			device_type = "cache";
 			reg = <0x20000060>;
 			status = "okay";
@@ -308,11 +308,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0xc>;
+			l2-cache = <0x29>;
 		};
 
 		l2-cache at 20000068 {
-			phandle = <0xf>;
+			phandle = <0x2c>;
 			device_type = "cache";
 			reg = <0x20000068>;
 			status = "okay";
@@ -321,11 +321,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x10>;
+			l2-cache = <0x2d>;
 		};
 
 		l2-cache at 200000b0 {
-			phandle = <0x13>;
+			phandle = <0x30>;
 			device_type = "cache";
 			reg = <0x200000b0>;
 			status = "okay";
@@ -334,11 +334,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x14>;
+			l2-cache = <0x31>;
 		};
 
 		l2-cache at 200000e8 {
-			phandle = <0x17>;
+			phandle = <0x34>;
 			device_type = "cache";
 			reg = <0x200000e8>;
 			status = "okay";
@@ -347,11 +347,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x18>;
+			l2-cache = <0x35>;
 		};
 
 		l2-cache at 200000f0 {
-			phandle = <0x1b>;
+			phandle = <0x38>;
 			device_type = "cache";
 			reg = <0x200000f0>;
 			status = "okay";
@@ -360,11 +360,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x1c>;
+			l2-cache = <0x39>;
 		};
 
 		l3-cache at 30000028 {
-			phandle = <0x8>;
+			phandle = <0x25>;
 			device_type = "cache";
 			reg = <0x30000028>;
 			status = "okay";
@@ -376,7 +376,7 @@
 		};
 
 		l3-cache at 30000060 {
-			phandle = <0xc>;
+			phandle = <0x29>;
 			device_type = "cache";
 			reg = <0x30000060>;
 			status = "okay";
@@ -388,7 +388,7 @@
 		};
 
 		l3-cache at 30000068 {
-			phandle = <0x10>;
+			phandle = <0x2d>;
 			device_type = "cache";
 			reg = <0x30000068>;
 			status = "okay";
@@ -400,7 +400,7 @@
 		};
 
 		l3-cache at 300000b0 {
-			phandle = <0x14>;
+			phandle = <0x31>;
 			device_type = "cache";
 			reg = <0x300000b0>;
 			status = "okay";
@@ -412,7 +412,7 @@
 		};
 
 		l3-cache at 300000e8 {
-			phandle = <0x18>;
+			phandle = <0x35>;
 			device_type = "cache";
 			reg = <0x300000e8>;
 			status = "okay";
@@ -424,7 +424,7 @@
 		};
 
 		l3-cache at 300000f0 {
-			phandle = <0x1c>;
+			phandle = <0x39>;
 			device_type = "cache";
 			reg = <0x300000f0>;
 			status = "okay";
@@ -437,12 +437,12 @@
 	};
 
 	fsps {
-		phandle = <0x47>;
+		phandle = <0x46>;
 		#address-cells = <0x1>;
 		#size-cells = <0x0>;
 
 		fsp at 0 {
-			phandle = <0x48>;
+			phandle = <0x47>;
 			reg = <0x0>;
 			compatible = "ibm,fsp", "ibm,fsp2";
 			reg-offset = <0xb0011000>;
@@ -454,10 +454,10 @@
 	};
 
 	ibm,opal {
-		phandle = <0x3>;
+		phandle = <0x20>;
 
 		leds {
-			phandle = <0x4>;
+			phandle = <0x21>;
 			led-mode = "lightpath";
 
 			U78C9.001.WZS0CWX-D1 {
@@ -468,7 +468,7 @@
 	};
 
 	interrupt-controller at 3ffff80028000 {
-		phandle = <0x9>;
+		phandle = <0x26>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x28 0x8>;
 		interrupt-controller;
@@ -478,7 +478,7 @@
 	};
 
 	interrupt-controller at 3ffff80060000 {
-		phandle = <0xd>;
+		phandle = <0x2a>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x60 0x8>;
 		interrupt-controller;
@@ -488,7 +488,7 @@
 	};
 
 	interrupt-controller at 3ffff80068000 {
-		phandle = <0x11>;
+		phandle = <0x2e>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x68 0x8>;
 		interrupt-controller;
@@ -498,7 +498,7 @@
 	};
 
 	interrupt-controller at 3ffff80130000 {
-		phandle = <0x15>;
+		phandle = <0x32>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0xb0 0x8>;
 		interrupt-controller;
@@ -508,7 +508,7 @@
 	};
 
 	interrupt-controller at 3ffff80168000 {
-		phandle = <0x19>;
+		phandle = <0x36>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0xe8 0x8>;
 		interrupt-controller;
@@ -518,7 +518,7 @@
 	};
 
 	interrupt-controller at 3ffff80170000 {
-		phandle = <0x1d>;
+		phandle = <0x3a>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0xf0 0x8>;
 		interrupt-controller;
@@ -528,17 +528,17 @@
 	};
 
 	ipl-params {
-		phandle = <0x1e>;
+		phandle = <0x3b>;
 		#address-cells = <0x0>;
 		#size-cells = <0x0>;
 
 		fsp-serial {
-			phandle = <0x21>;
+			phandle = <0x3e>;
 			#address-cells = <0x1>;
 			#size-cells = <0x0>;
 
 			serial at 2a00 {
-				phandle = <0x22>;
+				phandle = <0x3f>;
 				reg = <0x2a00>;
 				ibm,loc-code = "U78C9.001.WZS0CWX-P1-C1-T1";
 				compatible = "ibm,fsp-serial";
@@ -546,7 +546,7 @@
 		};
 
 		ipl-params {
-			phandle = <0x20>;
+			phandle = <0x3d>;
 			#address-cells = <0x0>;
 			#size-cells = <0x0>;
 			cec-ipl-side = "temp";
@@ -556,11 +556,11 @@
 		};
 
 		platform-dump {
-			phandle = <0x23>;
+			phandle = <0x40>;
 		};
 
 		sys-params {
-			phandle = <0x1f>;
+			phandle = <0x3c>;
 			#address-cells = <0x0>;
 			#size-cells = <0x0>;
 			ibm,sys-model = " 41A";
@@ -568,7 +568,7 @@
 	};
 
 	memory at 0 {
-		phandle = <0x42>;
+		phandle = <0x41>;
 		device_type = "memory";
 		ibm,chip-id = <0x0>;
 		reg = <0x0 0x0 0x8 0x0>;
@@ -581,12 +581,12 @@
 		ibm,loc-code = "U8286.41A.TU00163";
 
 		root-node-vpd at a000 {
-			phandle = <0x24>;
+			phandle = <0x3>;
 			ibm,loc-code = "U8286.41A.TU00163";
 			fru-type = [56 56];
 
 			enclosure at 1e00 {
-				phandle = <0x27>;
+				phandle = <0x5>;
 				ibm,loc-code = "U78C9.001.WZS0CWX";
 				fru-type = [45 56];
 				ibm,vpd = <0x848c0052 0x54045649 0x4e494452 0x10492f4f 0x20424143 0x4b504c41 0x4e452020 0x20434501 0x31565a02 0x3031464e 0x7373459 0x34333434 0x504e0730 0x30453432 0x3431534e 0xc594c33 0x30554635 0x354e3030 0x36434304 0x32434435 0x50520821 0x0 0x48 0x45043030 0x30324354 0x480f300 0x26485702 0x74233 0x6000000 0x142 0x34010042 0x370c0000 0x0 0x0 0x5046 0x2000078 0x841c0052 0x54044c58 0x5230565a 0x230314c 0x58083100 0x4010030 0x435046 0x2000078 0x84440052 0x54045643 0x454e4452 0x6434543 0x20202053 0x4507575a 0x53304357 0x58544d08 0x20202020 0x20202020 0x46430837 0x3843392d 0x30303152 0x470400a0 0xb32c5242 0x4202020 0x20504603 0x78 0x0>;
@@ -601,19 +601,19 @@
 				description = "System planar 1S4U";
 
 				air-mover at 3a00 {
-					phandle = <0x3e>;
+					phandle = <0xd>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-A1";
 					fru-type = [41 4d];
 				};
 
 				air-mover at 3a01 {
-					phandle = <0x3f>;
+					phandle = <0xe>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-A2";
 					fru-type = [41 4d];
 				};
 
 				backplane at 800 {
-					phandle = <0x28>;
+					phandle = <0x6>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-P1";
 					fru-type = [42 50];
 					ibm,vpd = <0x848c0052 0x54045649 0x4e494452 0x10492f4f 0x20424143 0x4b504c41 0x4e452020 0x20434501 0x31565a02 0x3031464e 0x7373459 0x34333434 0x504e0730 0x30453432 0x3431534e 0xc594c33 0x30554635 0x354e3030 0x36434304 0x32434435 0x50520821 0x0 0x48 0x45043030 0x30324354 0x480f300 0x26485702 0x74233 0x6000000 0x142 0x34010042 0x370c0000 0x0 0x0 0x5046 0x2000078 0x841c0052 0x54044c58 0x5230565a 0x230314c 0x58083100 0x4010030 0x435046 0x2000078 0x0>;
@@ -628,7 +628,7 @@
 					description = "System planar 1S4U";
 
 					anchor-card at 500 {
-						phandle = <0x2f>;
+						phandle = <0x14>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-C13";
 						fru-type = [41 56];
 						ibm,vpd = <0x84cc0052 0x54045649 0x4e494452 0x10414e43 0x484f5220 0x20202020 0x20202020 0x20434501 0x31565a02 0x3031464e 0x7303045 0x32313532 0x504e0730 0x30453231 0x3438534e 0xc594c31 0x30424733 0x3132314e 0x4a434304 0x35324632 0x50520881 0x300000 0x48 0x45043030 0x31304354 0x440b400 0x485702 0x14233 0x6000000 0x142 0x34010042 0x370c0000 0x0 0x0 0x4239 0x3c435331 0x58150757 0x4e705f53 0x50f139a0 0xbf7efeb7 0x44d314d 0xd7cd74f2 0x862d884d 0x327cb552 0x79809378 0xa24d333e 0x6aed1eb8 0x49dab34d 0x344e1745 0x9bf468e9 0xa1504603 0x78 0x0>;
@@ -644,7 +644,7 @@
 					};
 
 					backplane-extender at 900 {
-						phandle = <0x29>;
+						phandle = <0x11>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-C1";
 						fru-type = [42 58];
 						ibm,vpd = <0x84800052 0x54045649 0x4e494452 0x104e4154 0x49564520 0x492f4f20 0x43415244 0x20434501 0x31565a02 0x3031464e 0x7303045 0x31393630 0x504e0730 0x30453338 0x3039534e 0xc594c31 0x30554635 0x3537304c 0x39434304 0x32423042 0x48450430 0x30303143 0x540480b5 0x4857 0x2000142 0x33060000 0x0 0x42340100 0x42370c00 0x0 0x0 0x50 0x46010078 0x0>;
@@ -659,38 +659,38 @@
 						description = "Native I/O Card";
 
 						serial-connector at 2a00 {
-							phandle = <0x2c>;
+							phandle = <0x1f>;
 							ibm,loc-code = "U78C9.001.WZS0CWX-P1-C1-T1";
 							fru-type = [43 53];
 						};
 
 						usb-connector at 2900 {
-							phandle = <0x2a>;
+							phandle = <0x1d>;
 							ibm,loc-code = "U78C9.001.WZS0CWX-P1-C1-T3";
 							fru-type = [43 55];
 						};
 
 						usb-connector at 2901 {
-							phandle = <0x2b>;
+							phandle = <0x1e>;
 							ibm,loc-code = "U78C9.001.WZS0CWX-P1-C1-T2";
 							fru-type = [43 55];
 						};
 					};
 
 					hmc-connector at 2d00 {
-						phandle = <0x34>;
+						phandle = <0x19>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-T3";
 						fru-type = [48 4d];
 					};
 
 					hmc-connector at 2d01 {
-						phandle = <0x35>;
+						phandle = <0x1a>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-T4";
 						fru-type = [48 4d];
 					};
 
 					ms-dimm at d000 {
-						phandle = <0x36>;
+						phandle = <0x1b>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-C16";
 						fru-type = [4d 53];
 						ibm,vpd = <0x84940052 0x54045649 0x4e494452 0x1049424d 0x20313647 0x42204d53 0x20202020 0x20434501 0x31565a02 0x3034464e 0x7343154 0x39353735 0x504e0734 0x31543935 0x3735534e 0xc594833 0x314d5333 0x41343031 0x31434304 0x33314530 0x50520849 0x0 0x1000053 0x5a073030 0x31363338 0x34484504 0x30303031 0x43540400 0x48 0x57020090 0x42330600 0x0 0x423401 0x42370c 0x0 0x0 0x0 0x50460078 0x0>;
@@ -709,7 +709,7 @@
 					};
 
 					ms-dimm at d002 {
-						phandle = <0x37>;
+						phandle = <0x1c>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-C18";
 						fru-type = [4d 53];
 						ibm,vpd = <0x84940052 0x54045649 0x4e494452 0x1049424d 0x20313647 0x42204d53 0x20202020 0x20434501 0x31565a02 0x3034464e 0x7343154 0x39353735 0x504e0734 0x31543935 0x3735534e 0xc594833 0x314d5533 0x41433143 0x50434304 0x33314530 0x50520849 0x0 0x1000053 0x5a073030 0x31363338 0x34484504 0x30303031 0x43540400 0x48 0x57020090 0x42330600 0x0 0x423401 0x42370c 0x0 0x0 0x0 0x50460078 0x0>;
@@ -728,7 +728,7 @@
 					};
 
 					processor at 1000 {
-						phandle = <0x2d>;
+						phandle = <0x12>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-C32";
 						fru-type = [50 46];
 						ibm,vpd = [84 8c 00 52 54 04 56 49 4e 49 44 52 10 30 36 2d 57 41 59 20 50 52 4f 43 20 43 55 4f 44 46 4e 07 30 30 46 58 35 32 33 50 4e 07 30 30 46 58 37 34 38 53 4e 0c 59 41 31 39 33 32 30 36 33 35 36 32 43 43 04 35 34 45 31 48 45 04 30 30 30 31 43 54 04 00 00 00 00 48 57 02 00 01 42 33 06 00 00 00 00 00 00 42 34 01 00 42 37 0c 00 00 00 00 00 00 00 00 00 00 00 00 50 52 08 35 00 30 01 44 00 80 01 56 5a 02 30 31 43 45 01 31 50 46 02 00 00 78 00];
@@ -745,7 +745,7 @@
 					};
 
 					processor at 1001 {
-						phandle = <0x2e>;
+						phandle = <0x13>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-C32";
 						fru-type = [50 46];
 						ibm,vpd = [84 8c 00 52 54 04 56 49 4e 49 44 52 10 30 36 2d 57 41 59 20 50 52 4f 43 20 43 55 4f 44 46 4e 07 30 30 46 58 35 32 33 50 4e 07 30 30 46 58 37 34 38 53 4e 0c 59 41 31 39 33 32 30 36 33 35 36 32 43 43 04 35 34 45 31 48 45 04 30 30 30 31 43 54 04 00 00 00 00 48 57 02 00 01 42 33 06 00 00 00 00 00 00 42 34 01 00 42 37 0c 00 00 00 00 00 00 00 00 00 00 00 00 50 52 08 35 00 30 01 44 00 80 01 56 5a 02 30 31 43 45 01 31 50 46 02 00 00 78 00];
@@ -762,56 +762,56 @@
 					};
 
 					usb-connector at 2902 {
-						phandle = <0x30>;
+						phandle = <0x15>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-T1";
 						fru-type = [43 55];
 					};
 
 					usb-connector at 2903 {
-						phandle = <0x31>;
+						phandle = <0x16>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-T2";
 						fru-type = [43 55];
 					};
 
 					usb-connector at 2904 {
-						phandle = <0x32>;
+						phandle = <0x17>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-T5";
 						fru-type = [43 55];
 					};
 
 					usb-connector at 2905 {
-						phandle = <0x33>;
+						phandle = <0x18>;
 						ibm,loc-code = "U78C9.001.WZS0CWX-P1-T6";
 						fru-type = [43 55];
 					};
 				};
 
 				dasd-backplane at 2400 {
-					phandle = <0x3a>;
+					phandle = <0x9>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-P2";
 					fru-type = [44 42];
 				};
 
 				dasd-backplane at 2401 {
-					phandle = <0x3b>;
+					phandle = <0xa>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-P2";
 					fru-type = [44 42];
 				};
 
 				enclosure-fault-led at a300 {
-					phandle = <0x41>;
+					phandle = <0x10>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-D1";
 					fru-type = [45 46];
 				};
 
 				enclosure-led at a200 {
-					phandle = <0x40>;
+					phandle = <0xf>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-D1";
 					fru-type = [45 49];
 				};
 
 				op-panel at 300 {
-					phandle = <0x39>;
+					phandle = <0x8>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-D1";
 					fru-type = [4f 50];
 					ibm,vpd = <0x84800052 0x54045649 0x4e494452 0x10434543 0x204f5020 0x50414e45 0x4c202020 0x20434501 0x31565a02 0x3032464e 0x7303045 0x31393636 0x504e0730 0x30453239 0x3532534e 0xc594c33 0x30554633 0x38453033 0x52434304 0x32423038 0x48450430 0x30303143 0x540480b5 0x4857 0x2000242 0x33060000 0x0 0x42340100 0x42370c00 0x0 0x0 0x50 0x46010078 0x0>;
@@ -827,19 +827,19 @@
 				};
 
 				power-supply at 3102 {
-					phandle = <0x3c>;
+					phandle = <0xb>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-E3";
 					fru-type = [50 53];
 				};
 
 				power-supply at 3103 {
-					phandle = <0x3d>;
+					phandle = <0xc>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-E4";
 					fru-type = [50 53];
 				};
 
 				service-processor at 200 {
-					phandle = <0x38>;
+					phandle = <0x7>;
 					ibm,loc-code = "U78C9.001.WZS0CWX-P1";
 					fru-type = [53 50];
 					ibm,vpd = <0x848c0052 0x54045649 0x4e494452 0x10492f4f 0x20424143 0x4b504c41 0x4e452020 0x20434501 0x31565a02 0x3031464e 0x7373459 0x34333434 0x504e0730 0x30453432 0x3431534e 0xc594c33 0x30554635 0x354e3030 0x36434304 0x32434435 0x50520821 0x0 0x48 0x45043030 0x30324354 0x480f300 0x26485702 0x74233 0x6000000 0x142 0x34010042 0x370c0000 0x0 0x0 0x5046 0x2000078 0x841c0052 0x54044c58 0x5230565a 0x230314c 0x58083100 0x4010030 0x435046 0x2000078 0x84500052 0x54045652 0x31304452 0x10465350 0x20202020 0x20202020 0x20202020 0x20464704 0x564e5350 0x44430f42 0x44203230 0x31323032 0x32303038 0x3030464c 0x14503120 0x20202020 0x20202020 0x20202020 0x20202020 0x20504603 0x78 0x84400052 0x54045657 0x31304452 0x10465350 0x20565731 0x30202020 0x20202020 0x20474420 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x50460078 0x0>;
@@ -855,14 +855,8 @@
 				};
 			};
 
-			root-node-vpd at a001 {
-				phandle = <0x25>;
-				ibm,loc-code = "U8286.41A.TU00163";
-				fru-type = [56 56];
-			};
-
 			system-vpd at 1c00 {
-				phandle = <0x26>;
+				phandle = <0x4>;
 				ibm,loc-code = "U8286.41A.TU00163";
 				fru-type = [53 56];
 			};
@@ -870,7 +864,7 @@
 	};
 
 	xscom at 3fc0000000000 {
-		phandle = <0x43>;
+		phandle = <0x42>;
 		ibm,chip-id = <0x0>;
 		ibm,proc-chip-id = <0x0>;
 		#address-cells = <0x1>;
@@ -888,20 +882,20 @@
 		ibm,mem-interleave-scope = <0x0>;
 
 		chiptod at 40000 {
-			phandle = <0x49>;
+			phandle = <0x48>;
 			reg = <0x40000 0x34>;
 			compatible = "ibm,power-chiptod", "ibm,power8-chiptod";
 			primary;
 		};
 
 		nx at 2010000 {
-			phandle = <0x4b>;
+			phandle = <0x4a>;
 			compatible = "ibm,power-nx", "ibm,power8-nx";
 			reg = <0x2010000 0x4000>;
 		};
 
 		pbcq at 2012000 {
-			phandle = <0x4d>;
+			phandle = <0x4c>;
 			reg = <0x200102 0x20000000 0x200109 0x5000000 0x3c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x0>;
@@ -912,7 +906,7 @@
 		};
 
 		pbcq at 2012400 {
-			phandle = <0x4e>;
+			phandle = <0x4d>;
 			reg = <0x240102 0x20000000 0x240109 0x5000000 0x403c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x1>;
@@ -923,7 +917,7 @@
 		};
 
 		psihb at 2010900 {
-			phandle = <0x44>;
+			phandle = <0x43>;
 			reg = <0x2010900 0x20>;
 			compatible = "ibm,power8-psihb-x", "ibm,psihb-x";
 			boot-link;
@@ -932,7 +926,7 @@
 	};
 
 	xscom at 3fc0800000000 {
-		phandle = <0x45>;
+		phandle = <0x44>;
 		ibm,chip-id = <0x1>;
 		ibm,proc-chip-id = <0x1>;
 		#address-cells = <0x1>;
@@ -950,20 +944,20 @@
 		ibm,mem-interleave-scope = <0x0>;
 
 		chiptod at 40000 {
-			phandle = <0x4a>;
+			phandle = <0x49>;
 			reg = <0x40000 0x34>;
 			compatible = "ibm,power-chiptod", "ibm,power8-chiptod";
 			secondary;
 		};
 
 		nx at 2010000 {
-			phandle = <0x4c>;
+			phandle = <0x4b>;
 			compatible = "ibm,power-nx", "ibm,power8-nx";
 			reg = <0x2010000 0x4000>;
 		};
 
 		pbcq at 2012000 {
-			phandle = <0x4f>;
+			phandle = <0x4e>;
 			reg = <0x200102 0x20000000 0x200109 0x5000000 0x3c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x0>;
@@ -974,7 +968,7 @@
 		};
 
 		pbcq at 2012400 {
-			phandle = <0x50>;
+			phandle = <0x4f>;
 			reg = <0x240102 0x20000000 0x240109 0x5000000 0x403c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x1>;
@@ -985,7 +979,7 @@
 		};
 
 		psihb at 2010900 {
-			phandle = <0x46>;
+			phandle = <0x45>;
 			reg = <0x2010900 0x20>;
 			compatible = "ibm,power8-psihb-x", "ibm,psihb-x";
 		};
diff --git a/hdata/test/p81-811.spira.dts b/hdata/test/p81-811.spira.dts
index b3d5a94..c0976e6 100644
--- a/hdata/test/p81-811.spira.dts
+++ b/hdata/test/p81-811.spira.dts
@@ -23,12 +23,12 @@
 	ibm,enabled-idle-states = "nap", "fast-sleep", "rvwinkle";
 
 	cpus {
-		phandle = <0x5>;
+		phandle = <0x2a>;
 		#address-cells = <0x1>;
 		#size-cells = <0x0>;
 
 		PowerPC,POWER8 at 20 {
-			phandle = <0x6>;
+			phandle = <0x2b>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x20>;
@@ -64,14 +64,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x7>;
+			l2-cache = <0x2c>;
 			ibm,pir = <0x20>;
 			ibm,chip-id = <0x0>;
 			ibm,ppc-interrupt-server#s = <0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27>;
 		};
 
 		PowerPC,POWER8 at 30 {
-			phandle = <0xa>;
+			phandle = <0x2f>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x30>;
@@ -107,14 +107,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0xb>;
+			l2-cache = <0x30>;
 			ibm,pir = <0x30>;
 			ibm,chip-id = <0x0>;
 			ibm,ppc-interrupt-server#s = <0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37>;
 		};
 
 		PowerPC,POWER8 at 60 {
-			phandle = <0xe>;
+			phandle = <0x33>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x60>;
@@ -150,14 +150,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0xf>;
+			l2-cache = <0x34>;
 			ibm,pir = <0x60>;
 			ibm,chip-id = <0x0>;
 			ibm,ppc-interrupt-server#s = <0x60 0x61 0x62 0x63 0x64 0x65 0x66 0x67>;
 		};
 
 		PowerPC,POWER8 at 68 {
-			phandle = <0x12>;
+			phandle = <0x37>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x68>;
@@ -193,14 +193,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x13>;
+			l2-cache = <0x38>;
 			ibm,pir = <0x68>;
 			ibm,chip-id = <0x0>;
 			ibm,ppc-interrupt-server#s = <0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f>;
 		};
 
 		PowerPC,POWER8 at 70 {
-			phandle = <0x16>;
+			phandle = <0x3b>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x70>;
@@ -236,14 +236,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x17>;
+			l2-cache = <0x3c>;
 			ibm,pir = <0x70>;
 			ibm,chip-id = <0x0>;
 			ibm,ppc-interrupt-server#s = <0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77>;
 		};
 
 		PowerPC,POWER8 at a8 {
-			phandle = <0x1a>;
+			phandle = <0x3f>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0xa8>;
@@ -279,14 +279,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x1b>;
+			l2-cache = <0x40>;
 			ibm,pir = <0xa8>;
 			ibm,chip-id = <0x1>;
 			ibm,ppc-interrupt-server#s = <0xa8 0xa9 0xaa 0xab 0xac 0xad 0xae 0xaf>;
 		};
 
 		PowerPC,POWER8 at b0 {
-			phandle = <0x1e>;
+			phandle = <0x43>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0xb0>;
@@ -322,14 +322,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x1f>;
+			l2-cache = <0x44>;
 			ibm,pir = <0xb0>;
 			ibm,chip-id = <0x1>;
 			ibm,ppc-interrupt-server#s = <0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7>;
 		};
 
 		PowerPC,POWER8 at e0 {
-			phandle = <0x22>;
+			phandle = <0x47>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0xe0>;
@@ -365,14 +365,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x23>;
+			l2-cache = <0x48>;
 			ibm,pir = <0xe0>;
 			ibm,chip-id = <0x1>;
 			ibm,ppc-interrupt-server#s = <0xe0 0xe1 0xe2 0xe3 0xe4 0xe5 0xe6 0xe7>;
 		};
 
 		PowerPC,POWER8 at e8 {
-			phandle = <0x26>;
+			phandle = <0x4b>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0xe8>;
@@ -408,14 +408,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x27>;
+			l2-cache = <0x4c>;
 			ibm,pir = <0xe8>;
 			ibm,chip-id = <0x1>;
 			ibm,ppc-interrupt-server#s = <0xe8 0xe9 0xea 0xeb 0xec 0xed 0xee 0xef>;
 		};
 
 		PowerPC,POWER8 at f0 {
-			phandle = <0x2a>;
+			phandle = <0x4f>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0xf0>;
@@ -451,14 +451,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x2b>;
+			l2-cache = <0x50>;
 			ibm,pir = <0xf0>;
 			ibm,chip-id = <0x1>;
 			ibm,ppc-interrupt-server#s = <0xf0 0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7>;
 		};
 
 		PowerPC,POWER8 at 828 {
-			phandle = <0x2e>;
+			phandle = <0x53>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x828>;
@@ -494,14 +494,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x2f>;
+			l2-cache = <0x54>;
 			ibm,pir = <0x828>;
 			ibm,chip-id = <0x10>;
 			ibm,ppc-interrupt-server#s = <0x828 0x829 0x82a 0x82b 0x82c 0x82d 0x82e 0x82f>;
 		};
 
 		PowerPC,POWER8 at 830 {
-			phandle = <0x32>;
+			phandle = <0x57>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x830>;
@@ -537,14 +537,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x33>;
+			l2-cache = <0x58>;
 			ibm,pir = <0x830>;
 			ibm,chip-id = <0x10>;
 			ibm,ppc-interrupt-server#s = <0x830 0x831 0x832 0x833 0x834 0x835 0x836 0x837>;
 		};
 
 		PowerPC,POWER8 at 860 {
-			phandle = <0x36>;
+			phandle = <0x5b>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x860>;
@@ -580,14 +580,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x37>;
+			l2-cache = <0x5c>;
 			ibm,pir = <0x860>;
 			ibm,chip-id = <0x10>;
 			ibm,ppc-interrupt-server#s = <0x860 0x861 0x862 0x863 0x864 0x865 0x866 0x867>;
 		};
 
 		PowerPC,POWER8 at 868 {
-			phandle = <0x3a>;
+			phandle = <0x5f>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x868>;
@@ -623,14 +623,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x3b>;
+			l2-cache = <0x60>;
 			ibm,pir = <0x868>;
 			ibm,chip-id = <0x10>;
 			ibm,ppc-interrupt-server#s = <0x868 0x869 0x86a 0x86b 0x86c 0x86d 0x86e 0x86f>;
 		};
 
 		PowerPC,POWER8 at 870 {
-			phandle = <0x3e>;
+			phandle = <0x63>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x870>;
@@ -666,14 +666,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x3f>;
+			l2-cache = <0x64>;
 			ibm,pir = <0x870>;
 			ibm,chip-id = <0x10>;
 			ibm,ppc-interrupt-server#s = <0x870 0x871 0x872 0x873 0x874 0x875 0x876 0x877>;
 		};
 
 		PowerPC,POWER8 at 8a0 {
-			phandle = <0x42>;
+			phandle = <0x67>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x8a0>;
@@ -709,14 +709,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x43>;
+			l2-cache = <0x68>;
 			ibm,pir = <0x8a0>;
 			ibm,chip-id = <0x11>;
 			ibm,ppc-interrupt-server#s = <0x8a0 0x8a1 0x8a2 0x8a3 0x8a4 0x8a5 0x8a6 0x8a7>;
 		};
 
 		PowerPC,POWER8 at 8a8 {
-			phandle = <0x46>;
+			phandle = <0x6b>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x8a8>;
@@ -752,14 +752,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x47>;
+			l2-cache = <0x6c>;
 			ibm,pir = <0x8a8>;
 			ibm,chip-id = <0x11>;
 			ibm,ppc-interrupt-server#s = <0x8a8 0x8a9 0x8aa 0x8ab 0x8ac 0x8ad 0x8ae 0x8af>;
 		};
 
 		PowerPC,POWER8 at 8b0 {
-			phandle = <0x4a>;
+			phandle = <0x6f>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x8b0>;
@@ -795,14 +795,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x4b>;
+			l2-cache = <0x70>;
 			ibm,pir = <0x8b0>;
 			ibm,chip-id = <0x11>;
 			ibm,ppc-interrupt-server#s = <0x8b0 0x8b1 0x8b2 0x8b3 0x8b4 0x8b5 0x8b6 0x8b7>;
 		};
 
 		PowerPC,POWER8 at 8e8 {
-			phandle = <0x4e>;
+			phandle = <0x73>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x8e8>;
@@ -838,14 +838,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x4f>;
+			l2-cache = <0x74>;
 			ibm,pir = <0x8e8>;
 			ibm,chip-id = <0x11>;
 			ibm,ppc-interrupt-server#s = <0x8e8 0x8e9 0x8ea 0x8eb 0x8ec 0x8ed 0x8ee 0x8ef>;
 		};
 
 		PowerPC,POWER8 at 8f0 {
-			phandle = <0x52>;
+			phandle = <0x77>;
 			device_type = "cpu";
 			status = "okay";
 			reg = <0x8f0>;
@@ -881,14 +881,14 @@
 			i-cache-sets = <0x4>;
 			d-cache-sets = <0x8>;
 			performance-monitor = <0x0 0x1>;
-			l2-cache = <0x53>;
+			l2-cache = <0x78>;
 			ibm,pir = <0x8f0>;
 			ibm,chip-id = <0x11>;
 			ibm,ppc-interrupt-server#s = <0x8f0 0x8f1 0x8f2 0x8f3 0x8f4 0x8f5 0x8f6 0x8f7>;
 		};
 
 		l2-cache at 20000020 {
-			phandle = <0x7>;
+			phandle = <0x2c>;
 			device_type = "cache";
 			reg = <0x20000020>;
 			status = "okay";
@@ -897,11 +897,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x8>;
+			l2-cache = <0x2d>;
 		};
 
 		l2-cache at 20000030 {
-			phandle = <0xb>;
+			phandle = <0x30>;
 			device_type = "cache";
 			reg = <0x20000030>;
 			status = "okay";
@@ -910,11 +910,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0xc>;
+			l2-cache = <0x31>;
 		};
 
 		l2-cache at 20000060 {
-			phandle = <0xf>;
+			phandle = <0x34>;
 			device_type = "cache";
 			reg = <0x20000060>;
 			status = "okay";
@@ -923,11 +923,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x10>;
+			l2-cache = <0x35>;
 		};
 
 		l2-cache at 20000068 {
-			phandle = <0x13>;
+			phandle = <0x38>;
 			device_type = "cache";
 			reg = <0x20000068>;
 			status = "okay";
@@ -936,11 +936,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x14>;
+			l2-cache = <0x39>;
 		};
 
 		l2-cache at 20000070 {
-			phandle = <0x17>;
+			phandle = <0x3c>;
 			device_type = "cache";
 			reg = <0x20000070>;
 			status = "okay";
@@ -949,11 +949,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x18>;
+			l2-cache = <0x3d>;
 		};
 
 		l2-cache at 200000a8 {
-			phandle = <0x1b>;
+			phandle = <0x40>;
 			device_type = "cache";
 			reg = <0x200000a8>;
 			status = "okay";
@@ -962,11 +962,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x1c>;
+			l2-cache = <0x41>;
 		};
 
 		l2-cache at 200000b0 {
-			phandle = <0x1f>;
+			phandle = <0x44>;
 			device_type = "cache";
 			reg = <0x200000b0>;
 			status = "okay";
@@ -975,11 +975,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x20>;
+			l2-cache = <0x45>;
 		};
 
 		l2-cache at 200000e0 {
-			phandle = <0x23>;
+			phandle = <0x48>;
 			device_type = "cache";
 			reg = <0x200000e0>;
 			status = "okay";
@@ -988,11 +988,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x24>;
+			l2-cache = <0x49>;
 		};
 
 		l2-cache at 200000e8 {
-			phandle = <0x27>;
+			phandle = <0x4c>;
 			device_type = "cache";
 			reg = <0x200000e8>;
 			status = "okay";
@@ -1001,11 +1001,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x28>;
+			l2-cache = <0x4d>;
 		};
 
 		l2-cache at 200000f0 {
-			phandle = <0x2b>;
+			phandle = <0x50>;
 			device_type = "cache";
 			reg = <0x200000f0>;
 			status = "okay";
@@ -1014,11 +1014,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x2c>;
+			l2-cache = <0x51>;
 		};
 
 		l2-cache at 20000828 {
-			phandle = <0x2f>;
+			phandle = <0x54>;
 			device_type = "cache";
 			reg = <0x20000828>;
 			status = "okay";
@@ -1027,11 +1027,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x30>;
+			l2-cache = <0x55>;
 		};
 
 		l2-cache at 20000830 {
-			phandle = <0x33>;
+			phandle = <0x58>;
 			device_type = "cache";
 			reg = <0x20000830>;
 			status = "okay";
@@ -1040,11 +1040,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x34>;
+			l2-cache = <0x59>;
 		};
 
 		l2-cache at 20000860 {
-			phandle = <0x37>;
+			phandle = <0x5c>;
 			device_type = "cache";
 			reg = <0x20000860>;
 			status = "okay";
@@ -1053,11 +1053,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x38>;
+			l2-cache = <0x5d>;
 		};
 
 		l2-cache at 20000868 {
-			phandle = <0x3b>;
+			phandle = <0x60>;
 			device_type = "cache";
 			reg = <0x20000868>;
 			status = "okay";
@@ -1066,11 +1066,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x3c>;
+			l2-cache = <0x61>;
 		};
 
 		l2-cache at 20000870 {
-			phandle = <0x3f>;
+			phandle = <0x64>;
 			device_type = "cache";
 			reg = <0x20000870>;
 			status = "okay";
@@ -1079,11 +1079,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x40>;
+			l2-cache = <0x65>;
 		};
 
 		l2-cache at 200008a0 {
-			phandle = <0x43>;
+			phandle = <0x68>;
 			device_type = "cache";
 			reg = <0x200008a0>;
 			status = "okay";
@@ -1092,11 +1092,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x44>;
+			l2-cache = <0x69>;
 		};
 
 		l2-cache at 200008a8 {
-			phandle = <0x47>;
+			phandle = <0x6c>;
 			device_type = "cache";
 			reg = <0x200008a8>;
 			status = "okay";
@@ -1105,11 +1105,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x48>;
+			l2-cache = <0x6d>;
 		};
 
 		l2-cache at 200008b0 {
-			phandle = <0x4b>;
+			phandle = <0x70>;
 			device_type = "cache";
 			reg = <0x200008b0>;
 			status = "okay";
@@ -1118,11 +1118,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x4c>;
+			l2-cache = <0x71>;
 		};
 
 		l2-cache at 200008e8 {
-			phandle = <0x4f>;
+			phandle = <0x74>;
 			device_type = "cache";
 			reg = <0x200008e8>;
 			status = "okay";
@@ -1131,11 +1131,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x50>;
+			l2-cache = <0x75>;
 		};
 
 		l2-cache at 200008f0 {
-			phandle = <0x53>;
+			phandle = <0x78>;
 			device_type = "cache";
 			reg = <0x200008f0>;
 			status = "okay";
@@ -1144,11 +1144,11 @@
 			i-cache-sets = <0x8>;
 			d-cache-size = <0x80000>;
 			i-cache-size = <0x80000>;
-			l2-cache = <0x54>;
+			l2-cache = <0x79>;
 		};
 
 		l3-cache at 30000020 {
-			phandle = <0x8>;
+			phandle = <0x2d>;
 			device_type = "cache";
 			reg = <0x30000020>;
 			status = "okay";
@@ -1160,7 +1160,7 @@
 		};
 
 		l3-cache at 30000030 {
-			phandle = <0xc>;
+			phandle = <0x31>;
 			device_type = "cache";
 			reg = <0x30000030>;
 			status = "okay";
@@ -1172,7 +1172,7 @@
 		};
 
 		l3-cache at 30000060 {
-			phandle = <0x10>;
+			phandle = <0x35>;
 			device_type = "cache";
 			reg = <0x30000060>;
 			status = "okay";
@@ -1184,7 +1184,7 @@
 		};
 
 		l3-cache at 30000068 {
-			phandle = <0x14>;
+			phandle = <0x39>;
 			device_type = "cache";
 			reg = <0x30000068>;
 			status = "okay";
@@ -1196,7 +1196,7 @@
 		};
 
 		l3-cache at 30000070 {
-			phandle = <0x18>;
+			phandle = <0x3d>;
 			device_type = "cache";
 			reg = <0x30000070>;
 			status = "okay";
@@ -1208,7 +1208,7 @@
 		};
 
 		l3-cache at 300000a8 {
-			phandle = <0x1c>;
+			phandle = <0x41>;
 			device_type = "cache";
 			reg = <0x300000a8>;
 			status = "okay";
@@ -1220,7 +1220,7 @@
 		};
 
 		l3-cache at 300000b0 {
-			phandle = <0x20>;
+			phandle = <0x45>;
 			device_type = "cache";
 			reg = <0x300000b0>;
 			status = "okay";
@@ -1232,7 +1232,7 @@
 		};
 
 		l3-cache at 300000e0 {
-			phandle = <0x24>;
+			phandle = <0x49>;
 			device_type = "cache";
 			reg = <0x300000e0>;
 			status = "okay";
@@ -1244,7 +1244,7 @@
 		};
 
 		l3-cache at 300000e8 {
-			phandle = <0x28>;
+			phandle = <0x4d>;
 			device_type = "cache";
 			reg = <0x300000e8>;
 			status = "okay";
@@ -1256,7 +1256,7 @@
 		};
 
 		l3-cache at 300000f0 {
-			phandle = <0x2c>;
+			phandle = <0x51>;
 			device_type = "cache";
 			reg = <0x300000f0>;
 			status = "okay";
@@ -1268,7 +1268,7 @@
 		};
 
 		l3-cache at 30000828 {
-			phandle = <0x30>;
+			phandle = <0x55>;
 			device_type = "cache";
 			reg = <0x30000828>;
 			status = "okay";
@@ -1280,7 +1280,7 @@
 		};
 
 		l3-cache at 30000830 {
-			phandle = <0x34>;
+			phandle = <0x59>;
 			device_type = "cache";
 			reg = <0x30000830>;
 			status = "okay";
@@ -1292,7 +1292,7 @@
 		};
 
 		l3-cache at 30000860 {
-			phandle = <0x38>;
+			phandle = <0x5d>;
 			device_type = "cache";
 			reg = <0x30000860>;
 			status = "okay";
@@ -1304,7 +1304,7 @@
 		};
 
 		l3-cache at 30000868 {
-			phandle = <0x3c>;
+			phandle = <0x61>;
 			device_type = "cache";
 			reg = <0x30000868>;
 			status = "okay";
@@ -1316,7 +1316,7 @@
 		};
 
 		l3-cache at 30000870 {
-			phandle = <0x40>;
+			phandle = <0x65>;
 			device_type = "cache";
 			reg = <0x30000870>;
 			status = "okay";
@@ -1328,7 +1328,7 @@
 		};
 
 		l3-cache at 300008a0 {
-			phandle = <0x44>;
+			phandle = <0x69>;
 			device_type = "cache";
 			reg = <0x300008a0>;
 			status = "okay";
@@ -1340,7 +1340,7 @@
 		};
 
 		l3-cache at 300008a8 {
-			phandle = <0x48>;
+			phandle = <0x6d>;
 			device_type = "cache";
 			reg = <0x300008a8>;
 			status = "okay";
@@ -1352,7 +1352,7 @@
 		};
 
 		l3-cache at 300008b0 {
-			phandle = <0x4c>;
+			phandle = <0x71>;
 			device_type = "cache";
 			reg = <0x300008b0>;
 			status = "okay";
@@ -1364,7 +1364,7 @@
 		};
 
 		l3-cache at 300008e8 {
-			phandle = <0x50>;
+			phandle = <0x75>;
 			device_type = "cache";
 			reg = <0x300008e8>;
 			status = "okay";
@@ -1376,7 +1376,7 @@
 		};
 
 		l3-cache at 300008f0 {
-			phandle = <0x54>;
+			phandle = <0x79>;
 			device_type = "cache";
 			reg = <0x300008f0>;
 			status = "okay";
@@ -1389,12 +1389,12 @@
 	};
 
 	fsps {
-		phandle = <0x8c>;
+		phandle = <0x8b>;
 		#address-cells = <0x1>;
 		#size-cells = <0x0>;
 
 		fsp at 0 {
-			phandle = <0x8d>;
+			phandle = <0x8c>;
 			reg = <0x0>;
 			compatible = "ibm,fsp", "ibm,fsp2";
 			reg-offset = <0xb0011000>;
@@ -1406,21 +1406,21 @@
 	};
 
 	ibm,opal {
-		phandle = <0x3>;
+		phandle = <0x28>;
 
 		leds {
-			phandle = <0x4>;
+			phandle = <0x29>;
 			led-mode = "lightpath";
 
 			U8247.22L.1010C8A {
-				phandle = <0x9e>;
+				phandle = <0x9d>;
 				led-types = "attention";
 			};
 		};
 	};
 
 	interrupt-controller at 3ffff80020000 {
-		phandle = <0x9>;
+		phandle = <0x2e>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x20 0x8>;
 		interrupt-controller;
@@ -1430,7 +1430,7 @@
 	};
 
 	interrupt-controller at 3ffff80030000 {
-		phandle = <0xd>;
+		phandle = <0x32>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x30 0x8>;
 		interrupt-controller;
@@ -1440,7 +1440,7 @@
 	};
 
 	interrupt-controller at 3ffff80060000 {
-		phandle = <0x11>;
+		phandle = <0x36>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x60 0x8>;
 		interrupt-controller;
@@ -1450,7 +1450,7 @@
 	};
 
 	interrupt-controller at 3ffff80068000 {
-		phandle = <0x15>;
+		phandle = <0x3a>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x68 0x8>;
 		interrupt-controller;
@@ -1460,7 +1460,7 @@
 	};
 
 	interrupt-controller at 3ffff80070000 {
-		phandle = <0x19>;
+		phandle = <0x3e>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x70 0x8>;
 		interrupt-controller;
@@ -1470,7 +1470,7 @@
 	};
 
 	interrupt-controller at 3ffff80128000 {
-		phandle = <0x1d>;
+		phandle = <0x42>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0xa8 0x8>;
 		interrupt-controller;
@@ -1480,7 +1480,7 @@
 	};
 
 	interrupt-controller at 3ffff80130000 {
-		phandle = <0x21>;
+		phandle = <0x46>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0xb0 0x8>;
 		interrupt-controller;
@@ -1490,7 +1490,7 @@
 	};
 
 	interrupt-controller at 3ffff80160000 {
-		phandle = <0x25>;
+		phandle = <0x4a>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0xe0 0x8>;
 		interrupt-controller;
@@ -1500,7 +1500,7 @@
 	};
 
 	interrupt-controller at 3ffff80168000 {
-		phandle = <0x29>;
+		phandle = <0x4e>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0xe8 0x8>;
 		interrupt-controller;
@@ -1510,7 +1510,7 @@
 	};
 
 	interrupt-controller at 3ffff80170000 {
-		phandle = <0x2d>;
+		phandle = <0x52>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0xf0 0x8>;
 		interrupt-controller;
@@ -1520,7 +1520,7 @@
 	};
 
 	interrupt-controller at 3ffff80828000 {
-		phandle = <0x31>;
+		phandle = <0x56>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x828 0x8>;
 		interrupt-controller;
@@ -1530,7 +1530,7 @@
 	};
 
 	interrupt-controller at 3ffff80830000 {
-		phandle = <0x35>;
+		phandle = <0x5a>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x830 0x8>;
 		interrupt-controller;
@@ -1540,7 +1540,7 @@
 	};
 
 	interrupt-controller at 3ffff80860000 {
-		phandle = <0x39>;
+		phandle = <0x5e>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x860 0x8>;
 		interrupt-controller;
@@ -1550,7 +1550,7 @@
 	};
 
 	interrupt-controller at 3ffff80868000 {
-		phandle = <0x3d>;
+		phandle = <0x62>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x868 0x8>;
 		interrupt-controller;
@@ -1560,7 +1560,7 @@
 	};
 
 	interrupt-controller at 3ffff80870000 {
-		phandle = <0x41>;
+		phandle = <0x66>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x870 0x8>;
 		interrupt-controller;
@@ -1570,7 +1570,7 @@
 	};
 
 	interrupt-controller at 3ffff80920000 {
-		phandle = <0x45>;
+		phandle = <0x6a>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x8a0 0x8>;
 		interrupt-controller;
@@ -1580,7 +1580,7 @@
 	};
 
 	interrupt-controller at 3ffff80928000 {
-		phandle = <0x49>;
+		phandle = <0x6e>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x8a8 0x8>;
 		interrupt-controller;
@@ -1590,7 +1590,7 @@
 	};
 
 	interrupt-controller at 3ffff80930000 {
-		phandle = <0x4d>;
+		phandle = <0x72>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x8b0 0x8>;
 		interrupt-controller;
@@ -1600,7 +1600,7 @@
 	};
 
 	interrupt-controller at 3ffff80968000 {
-		phandle = <0x51>;
+		phandle = <0x76>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x8e8 0x8>;
 		interrupt-controller;
@@ -1610,7 +1610,7 @@
 	};
 
 	interrupt-controller at 3ffff80970000 {
-		phandle = <0x55>;
+		phandle = <0x7a>;
 		compatible = "ibm,ppc-xicp", "IBM,power8-icp";
 		ibm,interrupt-server-ranges = <0x8f0 0x8>;
 		interrupt-controller;
@@ -1620,17 +1620,17 @@
 	};
 
 	ipl-params {
-		phandle = <0x56>;
+		phandle = <0x7b>;
 		#address-cells = <0x0>;
 		#size-cells = <0x0>;
 
 		fsp-serial {
-			phandle = <0x59>;
+			phandle = <0x7e>;
 			#address-cells = <0x1>;
 			#size-cells = <0x0>;
 
 			serial at 2a00 {
-				phandle = <0x5a>;
+				phandle = <0x7f>;
 				reg = <0x2a00>;
 				ibm,loc-code = "U78CB.001.WZS00AL-P1-C1-T1";
 				compatible = "ibm,fsp-serial";
@@ -1638,7 +1638,7 @@
 		};
 
 		ipl-params {
-			phandle = <0x58>;
+			phandle = <0x7d>;
 			#address-cells = <0x0>;
 			#size-cells = <0x0>;
 			cec-ipl-side = "perm";
@@ -1648,11 +1648,11 @@
 		};
 
 		platform-dump {
-			phandle = <0x5b>;
+			phandle = <0x80>;
 		};
 
 		sys-params {
-			phandle = <0x57>;
+			phandle = <0x7c>;
 			#address-cells = <0x0>;
 			#size-cells = <0x0>;
 			ibm,sys-model = " 22L";
@@ -1660,14 +1660,14 @@
 	};
 
 	memory at 0 {
-		phandle = <0x82>;
+		phandle = <0x81>;
 		device_type = "memory";
 		ibm,chip-id = <0x0>;
 		reg = <0x0 0x0 0x10 0x0>;
 	};
 
 	memory at 1000000000 {
-		phandle = <0x83>;
+		phandle = <0x82>;
 		device_type = "memory";
 		ibm,chip-id = <0x10>;
 		reg = <0x10 0x0 0x10 0x0>;
@@ -1680,24 +1680,24 @@
 		ibm,loc-code = "U8247.22L.1010C8A";
 
 		root-node-vpd at a000 {
-			phandle = <0x5c>;
+			phandle = <0x3>;
 			ibm,loc-code = "U8247.22L.1010C8A";
 			fru-type = [56 56];
 
 			enclosure-fault-led at a300 {
-				phandle = <0x81>;
+				phandle = <0x7>;
 				ibm,loc-code = "U78CB.001.WZS00AL";
 				fru-type = [45 46];
 			};
 
 			enclosure-led at a200 {
-				phandle = <0x80>;
+				phandle = <0x6>;
 				ibm,loc-code = "U78CB.001.WZS00AL";
 				fru-type = [45 49];
 			};
 
 			enclosure at 1e00 {
-				phandle = <0x5f>;
+				phandle = <0x5>;
 				ibm,loc-code = "U78CB.001.WZS00AL";
 				fru-type = [45 56];
 				ibm,vpd = <0x848c0052 0x54045649 0x4e494452 0x10492f4f 0x20424143 0x4b504c41 0x4e452020 0x20434501 0x31565a02 0x3032464e 0x7303045 0x32303232 0x504e0730 0x30453339 0x3937534e 0xc594c31 0x30554634 0x324c3031 0x33434304 0x32434436 0x50520821 0x0 0x48 0x45043030 0x30324354 0x480f300 0x26485702 0x44233 0x6000000 0x142 0x34010042 0x370c0000 0x0 0x0 0x5046 0x2000078 0x841c0052 0x54044c58 0x5230565a 0x230314c 0x58083100 0x4010030 0x425046 0x2000078 0x84440052 0x54045643 0x454e4452 0x6434543 0x20202053 0x4507575a 0x53303041 0x4c544d08 0x20202020 0x20202020 0x46430837 0x3843422d 0x30303152 0x47040000 0x5242 0x4202020 0x20504603 0x78 0x0>;
@@ -1712,43 +1712,43 @@
 				description = "System planar 2S2U";
 
 				air-mover at 3a00 {
-					phandle = <0x7a>;
+					phandle = <0xf>;
 					ibm,loc-code = "U78CB.001.WZS00AL-A1";
 					fru-type = [41 4d];
 				};
 
 				air-mover at 3a01 {
-					phandle = <0x7b>;
+					phandle = <0x10>;
 					ibm,loc-code = "U78CB.001.WZS00AL-A3";
 					fru-type = [41 4d];
 				};
 
 				air-mover at 3a02 {
-					phandle = <0x7c>;
+					phandle = <0x11>;
 					ibm,loc-code = "U78CB.001.WZS00AL-A4";
 					fru-type = [41 4d];
 				};
 
 				air-mover at 3a03 {
-					phandle = <0x7d>;
+					phandle = <0x12>;
 					ibm,loc-code = "U78CB.001.WZS00AL-A6";
 					fru-type = [41 4d];
 				};
 
 				air-mover at 3a04 {
-					phandle = <0x7e>;
+					phandle = <0x13>;
 					ibm,loc-code = "U78CB.001.WZS00AL-A2";
 					fru-type = [41 4d];
 				};
 
 				air-mover at 3a05 {
-					phandle = <0x7f>;
+					phandle = <0x14>;
 					ibm,loc-code = "U78CB.001.WZS00AL-A5";
 					fru-type = [41 4d];
 				};
 
 				backplane at 800 {
-					phandle = <0x60>;
+					phandle = <0x8>;
 					ibm,loc-code = "U78CB.001.WZS00AL-P1";
 					fru-type = [42 50];
 					ibm,vpd = <0x848c0052 0x54045649 0x4e494452 0x10492f4f 0x20424143 0x4b504c41 0x4e452020 0x20434501 0x31565a02 0x3032464e 0x7303045 0x32303232 0x504e0730 0x30453339 0x3937534e 0xc594c31 0x30554634 0x324c3031 0x33434304 0x32434436 0x50520821 0x0 0x48 0x45043030 0x30324354 0x480f300 0x26485702 0x44233 0x6000000 0x142 0x34010042 0x370c0000 0x0 0x0 0x5046 0x2000078 0x841c0052 0x54044c58 0x5230565a 0x230314c 0x58083100 0x4010030 0x425046 0x2000078 0x0>;
@@ -1763,7 +1763,7 @@
 					description = "System planar 2S2U";
 
 					anchor-card at 500 {
-						phandle = <0x69>;
+						phandle = <0x1a>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-C13";
 						fru-type = [41 56];
 						ibm,vpd = <0x84cc0052 0x54045649 0x4e494452 0x10414e43 0x484f5220 0x20202020 0x20202020 0x20434501 0x31565a02 0x3031464e 0x7303045 0x33343237 0x504e0730 0x30453231 0x3438534e 0xc594c31 0x30313134 0x32523030 0x30434304 0x35323444 0x50520881 0x300000 0x48 0x45043030 0x31304354 0x440b400 0x485702 0x14233 0x6000000 0x142 0x34010042 0x370c0000 0x0 0x0 0x4239 0x3c435340 0x55110351 0xdd6da253 0x5049652f 0x45748f7b 0x44d31c5 0x31833edf 0x1e75724d 0x328d48c1 0xb4246b02 0xee4d3367 0xb454d848 0x9f3a254d 0x340dadc4 0x4124b5ed 0xd5504603 0x78 0x0>;
@@ -1779,7 +1779,7 @@
 					};
 
 					backplane-extender at 900 {
-						phandle = <0x61>;
+						phandle = <0x15>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-C1";
 						fru-type = [42 58];
 						ibm,vpd = <0x84800052 0x54045649 0x4e494452 0x104e4154 0x49564520 0x492f4f20 0x43415244 0x20434501 0x31565a02 0x3031464e 0x7303045 0x32313634 0x504e0730 0x30453338 0x3131534e 0xc594c31 0x30554634 0x324c3030 0x31434304 0x32423042 0x48450430 0x30303143 0x540480b5 0x4857 0x2000142 0x33060000 0x0 0x42340100 0x42370c00 0x0 0x0 0x50 0x46010078 0x0>;
@@ -1794,38 +1794,38 @@
 						description = "Native I/O Card";
 
 						serial-connector at 2a00 {
-							phandle = <0x64>;
+							phandle = <0x27>;
 							ibm,loc-code = "U78CB.001.WZS00AL-P1-C1-T1";
 							fru-type = [43 53];
 						};
 
 						usb-connector at 2901 {
-							phandle = <0x62>;
+							phandle = <0x25>;
 							ibm,loc-code = "U78CB.001.WZS00AL-P1-C1-T2";
 							fru-type = [43 55];
 						};
 
 						usb-connector at 2904 {
-							phandle = <0x63>;
+							phandle = <0x26>;
 							ibm,loc-code = "U78CB.001.WZS00AL-P1-C1-T3";
 							fru-type = [43 55];
 						};
 					};
 
 					ethernet-connector at 2800 {
-						phandle = <0x6a>;
+						phandle = <0x1b>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-T1 ";
 						fru-type = [43 45];
 					};
 
 					ethernet-connector at 2801 {
-						phandle = <0x6b>;
+						phandle = <0x1c>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-T2 ";
 						fru-type = [43 45];
 					};
 
 					ms-dimm at d000 {
-						phandle = <0x70>;
+						phandle = <0x21>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-C16";
 						fru-type = [4d 53];
 						ibm,vpd = <0x84940052 0x54045649 0x4e494452 0x1049424d 0x20333247 0x42204d53 0x20202020 0x20434501 0x31565a02 0x3132464e 0x730304a 0x41363634 0x504e0730 0x304a4136 0x3634534e 0xc594831 0x304d5534 0x32443141 0x39434304 0x33314539 0x50520849 0x0 0x1000053 0x5a073030 0x33323736 0x38484504 0x30303031 0x43540400 0x48 0x57020100 0x42330600 0x0 0x423401 0x42370c 0x0 0x0 0x0 0x50460078 0x0>;
@@ -1844,7 +1844,7 @@
 					};
 
 					ms-dimm at d002 {
-						phandle = <0x71>;
+						phandle = <0x22>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-C18";
 						fru-type = [4d 53];
 						ibm,vpd = <0x84940052 0x54045649 0x4e494452 0x1049424d 0x20333247 0x42204d53 0x20202020 0x20434501 0x31565a02 0x3132464e 0x730304a 0x41363634 0x504e0730 0x304a4136 0x3634534e 0xc594831 0x304d5534 0x32443141 0x36434304 0x33314539 0x50520849 0x0 0x1000053 0x5a073030 0x33323736 0x38484504 0x30303031 0x43540400 0x48 0x57020100 0x42330600 0x0 0x423401 0x42370c 0x0 0x0 0x0 0x50460078 0x0>;
@@ -1863,7 +1863,7 @@
 					};
 
 					ms-dimm at d008 {
-						phandle = <0x72>;
+						phandle = <0x23>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-C24";
 						fru-type = [4d 53];
 						ibm,vpd = <0x84940052 0x54045649 0x4e494452 0x1049424d 0x20333247 0x42204d53 0x20202020 0x20434501 0x31565a02 0x3132464e 0x730304a 0x41363634 0x504e0730 0x304a4136 0x3634534e 0xc594831 0x304d5534 0x32433137 0x54434304 0x33314539 0x50520849 0x0 0x1000053 0x5a073030 0x33323736 0x38484504 0x30303031 0x43540400 0x48 0x57020100 0x42330600 0x0 0x423401 0x42370c 0x0 0x0 0x0 0x50460078 0x0>;
@@ -1882,7 +1882,7 @@
 					};
 
 					ms-dimm at d00a {
-						phandle = <0x73>;
+						phandle = <0x24>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-C26";
 						fru-type = [4d 53];
 						ibm,vpd = <0x84940052 0x54045649 0x4e494452 0x1049424d 0x20333247 0x42204d53 0x20202020 0x20434501 0x31565a02 0x3132464e 0x730304a 0x41363634 0x504e0730 0x304a4136 0x3634534e 0xc594831 0x304d5534 0x32433141 0x48434304 0x33314539 0x50520849 0x0 0x1000053 0x5a073030 0x33323736 0x38484504 0x30303031 0x43540400 0x48 0x57020100 0x42330600 0x0 0x423401 0x42370c 0x0 0x0 0x0 0x50460078 0x0>;
@@ -1901,7 +1901,7 @@
 					};
 
 					processor at 1000 {
-						phandle = <0x65>;
+						phandle = <0x16>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-C32";
 						fru-type = [50 46];
 						ibm,vpd = [84 8c 00 52 54 04 56 49 4e 49 44 52 10 31 30 2d 57 41 59 20 50 52 4f 43 20 43 55 4f 44 46 4e 07 30 30 46 58 35 31 38 50 4e 07 30 30 46 58 37 34 30 53 4e 0c 59 41 31 39 33 32 30 39 36 39 35 31 43 43 04 35 34 45 38 48 45 04 30 30 30 31 43 54 04 00 00 00 00 48 57 02 00 01 42 33 06 00 00 00 00 00 00 42 34 01 00 42 37 0c 00 00 00 00 00 00 00 00 00 00 00 00 50 52 08 35 00 50 01 22 00 80 01 56 5a 02 30 31 43 45 01 31 50 46 02 00 00 78 00];
@@ -1918,7 +1918,7 @@
 					};
 
 					processor at 1001 {
-						phandle = <0x66>;
+						phandle = <0x17>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-C32";
 						fru-type = [50 46];
 						ibm,vpd = [84 8c 00 52 54 04 56 49 4e 49 44 52 10 31 30 2d 57 41 59 20 50 52 4f 43 20 43 55 4f 44 46 4e 07 30 30 46 58 35 31 38 50 4e 07 30 30 46 58 37 34 30 53 4e 0c 59 41 31 39 33 32 30 39 36 39 35 31 43 43 04 35 34 45 38 48 45 04 30 30 30 31 43 54 04 00 00 00 00 48 57 02 00 01 42 33 06 00 00 00 00 00 00 42 34 01 00 42 37 0c 00 00 00 00 00 00 00 00 00 00 00 00 50 52 08 35 00 50 01 22 00 80 01 56 5a 02 30 31 43 45 01 31 50 46 02 00 00 78 00];
@@ -1935,7 +1935,7 @@
 					};
 
 					processor at 1002 {
-						phandle = <0x67>;
+						phandle = <0x18>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-C33";
 						fru-type = [50 46];
 						ibm,vpd = [84 8c 00 52 54 04 56 49 4e 49 44 52 10 31 30 2d 57 41 59 20 50 52 4f 43 20 43 55 4f 44 46 4e 07 30 30 46 58 35 31 38 50 4e 07 30 30 46 58 37 34 30 53 4e 0c 59 41 31 39 33 32 30 39 36 39 35 30 43 43 04 35 34 45 38 48 45 04 30 30 30 31 43 54 04 00 00 00 00 48 57 02 00 01 42 33 06 00 00 00 00 00 00 42 34 01 00 42 37 0c 00 00 00 00 00 00 00 00 00 00 00 00 50 52 08 35 00 50 01 22 00 80 01 56 5a 02 30 31 43 45 01 31 50 46 02 00 00 78 00];
@@ -1952,7 +1952,7 @@
 					};
 
 					processor at 1003 {
-						phandle = <0x68>;
+						phandle = <0x19>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-C33";
 						fru-type = [50 46];
 						ibm,vpd = [84 8c 00 52 54 04 56 49 4e 49 44 52 10 31 30 2d 57 41 59 20 50 52 4f 43 20 43 55 4f 44 46 4e 07 30 30 46 58 35 31 38 50 4e 07 30 30 46 58 37 34 30 53 4e 0c 59 41 31 39 33 32 30 39 36 39 35 30 43 43 04 35 34 45 38 48 45 04 30 30 30 31 43 54 04 00 00 00 00 48 57 02 00 01 42 33 06 00 00 00 00 00 00 42 34 01 00 42 37 0c 00 00 00 00 00 00 00 00 00 00 00 00 50 52 08 35 00 50 01 22 00 80 01 56 5a 02 30 31 43 45 01 31 50 46 02 00 00 78 00];
@@ -1969,44 +1969,44 @@
 					};
 
 					usb-connector at 2900 {
-						phandle = <0x6c>;
+						phandle = <0x1d>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-T5";
 						fru-type = [43 55];
 					};
 
 					usb-connector at 2902 {
-						phandle = <0x6d>;
+						phandle = <0x1e>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-T6";
 						fru-type = [43 55];
 					};
 
 					usb-connector at 2903 {
-						phandle = <0x6e>;
+						phandle = <0x1f>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-T3";
 						fru-type = [43 55];
 					};
 
 					usb-connector at 2905 {
-						phandle = <0x6f>;
+						phandle = <0x20>;
 						ibm,loc-code = "U78CB.001.WZS00AL-P1-T4";
 						fru-type = [43 55];
 					};
 				};
 
 				dasd-backplane at 2400 {
-					phandle = <0x76>;
+					phandle = <0xb>;
 					ibm,loc-code = "U78CB.001.WZS00AL-P2";
 					fru-type = [44 42];
 				};
 
 				dasd-backplane at 2401 {
-					phandle = <0x77>;
+					phandle = <0xc>;
 					ibm,loc-code = "U78CB.001.WZS00AL-P2";
 					fru-type = [44 42];
 				};
 
 				op-panel at 300 {
-					phandle = <0x75>;
+					phandle = <0xa>;
 					ibm,loc-code = "U78CB.001.WZS00AL-D1";
 					fru-type = [4f 50];
 					ibm,vpd = <0x84800052 0x54045649 0x4e494452 0x10434543 0x204f5020 0x50414e45 0x4c202020 0x20434501 0x31565a02 0x3032464e 0x7303045 0x31393636 0x504e0730 0x30453337 0x3730534e 0xc594c31 0x30554634 0x31383030 0x46434304 0x32423038 0x48450430 0x30303143 0x540480b5 0x4857 0x2000342 0x33060000 0x0 0x42340100 0x42370c00 0x0 0x0 0x50 0x46010078 0x0>;
@@ -2022,19 +2022,19 @@
 				};
 
 				power-supply at 3100 {
-					phandle = <0x78>;
+					phandle = <0xd>;
 					ibm,loc-code = "U78CB.001.WZS00AL-E1";
 					fru-type = [50 53];
 				};
 
 				power-supply at 3101 {
-					phandle = <0x79>;
+					phandle = <0xe>;
 					ibm,loc-code = "U78CB.001.WZS00AL-E2";
 					fru-type = [50 53];
 				};
 
 				service-processor at 200 {
-					phandle = <0x74>;
+					phandle = <0x9>;
 					ibm,loc-code = "U78CB.001.WZS00AL-P1";
 					fru-type = [53 50];
 					ibm,vpd = <0x848c0052 0x54045649 0x4e494452 0x10492f4f 0x20424143 0x4b504c41 0x4e452020 0x20434501 0x31565a02 0x3032464e 0x7303045 0x32303232 0x504e0730 0x30453339 0x3937534e 0xc594c31 0x30554634 0x324c3031 0x33434304 0x32434436 0x50520821 0x0 0x48 0x45043030 0x30324354 0x480f300 0x26485702 0x44233 0x6000000 0x142 0x34010042 0x370c0000 0x0 0x0 0x5046 0x2000078 0x841c0052 0x54044c58 0x5230565a 0x230314c 0x58083100 0x4010030 0x425046 0x2000078 0x84500052 0x54045652 0x31304452 0x10465350 0x20202020 0x20202020 0x20202020 0x20464704 0x564e5350 0x44430f42 0x44203230 0x31323038 0x32333038 0x3030464c 0x14503120 0x20202020 0x20202020 0x20202020 0x20202020 0x20504603 0x78 0x84400052 0x54045657 0x31304452 0x10465350 0x20565731 0x30202020 0x20202020 0x20474420 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x50460078 0x0>;
@@ -2050,14 +2050,8 @@
 				};
 			};
 
-			root-node-vpd at a001 {
-				phandle = <0x5d>;
-				ibm,loc-code = "U8247.22L.1010C8A";
-				fru-type = [56 56];
-			};
-
 			system-vpd at 1c00 {
-				phandle = <0x5e>;
+				phandle = <0x4>;
 				ibm,loc-code = "U8247.22L.1010C8A";
 				fru-type = [53 56];
 			};
@@ -2065,7 +2059,7 @@
 	};
 
 	xscom at 3fc0000000000 {
-		phandle = <0x84>;
+		phandle = <0x83>;
 		ibm,chip-id = <0x0>;
 		ibm,proc-chip-id = <0x0>;
 		#address-cells = <0x1>;
@@ -2083,20 +2077,20 @@
 		ibm,mem-interleave-scope = <0x0>;
 
 		chiptod at 40000 {
-			phandle = <0x8e>;
+			phandle = <0x8d>;
 			reg = <0x40000 0x34>;
 			compatible = "ibm,power-chiptod", "ibm,power8-chiptod";
 			primary;
 		};
 
 		nx at 2010000 {
-			phandle = <0x92>;
+			phandle = <0x91>;
 			compatible = "ibm,power-nx", "ibm,power8-nx";
 			reg = <0x2010000 0x4000>;
 		};
 
 		pbcq at 2012000 {
-			phandle = <0x96>;
+			phandle = <0x95>;
 			reg = <0x200102 0x20000000 0x200109 0x5000000 0x3c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x0>;
@@ -2107,7 +2101,7 @@
 		};
 
 		pbcq at 2012400 {
-			phandle = <0x97>;
+			phandle = <0x96>;
 			reg = <0x240102 0x20000000 0x240109 0x5000000 0x403c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x1>;
@@ -2118,7 +2112,7 @@
 		};
 
 		psihb at 2010900 {
-			phandle = <0x85>;
+			phandle = <0x84>;
 			reg = <0x2010900 0x20>;
 			compatible = "ibm,power8-psihb-x", "ibm,psihb-x";
 			boot-link;
@@ -2127,7 +2121,7 @@
 	};
 
 	xscom at 3fc0800000000 {
-		phandle = <0x86>;
+		phandle = <0x85>;
 		ibm,chip-id = <0x1>;
 		ibm,proc-chip-id = <0x1>;
 		#address-cells = <0x1>;
@@ -2145,19 +2139,19 @@
 		ibm,mem-interleave-scope = <0x0>;
 
 		chiptod at 40000 {
-			phandle = <0x8f>;
+			phandle = <0x8e>;
 			reg = <0x40000 0x34>;
 			compatible = "ibm,power-chiptod", "ibm,power8-chiptod";
 		};
 
 		nx at 2010000 {
-			phandle = <0x93>;
+			phandle = <0x92>;
 			compatible = "ibm,power-nx", "ibm,power8-nx";
 			reg = <0x2010000 0x4000>;
 		};
 
 		pbcq at 2012000 {
-			phandle = <0x98>;
+			phandle = <0x97>;
 			reg = <0x200102 0x20000000 0x200109 0x5000000 0x3c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x0>;
@@ -2168,7 +2162,7 @@
 		};
 
 		pbcq at 2012400 {
-			phandle = <0x99>;
+			phandle = <0x98>;
 			reg = <0x240102 0x20000000 0x240109 0x5000000 0x403c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x1>;
@@ -2179,14 +2173,14 @@
 		};
 
 		psihb at 2010900 {
-			phandle = <0x87>;
+			phandle = <0x86>;
 			reg = <0x2010900 0x20>;
 			compatible = "ibm,power8-psihb-x", "ibm,psihb-x";
 		};
 	};
 
 	xscom at 3fc8000000000 {
-		phandle = <0x88>;
+		phandle = <0x87>;
 		ibm,chip-id = <0x10>;
 		ibm,proc-chip-id = <0x2>;
 		#address-cells = <0x1>;
@@ -2204,20 +2198,20 @@
 		ibm,mem-interleave-scope = <0x0>;
 
 		chiptod at 40000 {
-			phandle = <0x90>;
+			phandle = <0x8f>;
 			reg = <0x40000 0x34>;
 			compatible = "ibm,power-chiptod", "ibm,power8-chiptod";
 			secondary;
 		};
 
 		nx at 2010000 {
-			phandle = <0x94>;
+			phandle = <0x93>;
 			compatible = "ibm,power-nx", "ibm,power8-nx";
 			reg = <0x2010000 0x4000>;
 		};
 
 		pbcq at 2012000 {
-			phandle = <0x9a>;
+			phandle = <0x99>;
 			reg = <0x200102 0x20000000 0x200109 0x5000000 0x3c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x0>;
@@ -2228,7 +2222,7 @@
 		};
 
 		psihb at 2010900 {
-			phandle = <0x89>;
+			phandle = <0x88>;
 			reg = <0x2010900 0x20>;
 			compatible = "ibm,power8-psihb-x", "ibm,psihb-x";
 			status = "ok";
@@ -2236,7 +2230,7 @@
 	};
 
 	xscom at 3fc8800000000 {
-		phandle = <0x8a>;
+		phandle = <0x89>;
 		ibm,chip-id = <0x11>;
 		ibm,proc-chip-id = <0x3>;
 		#address-cells = <0x1>;
@@ -2254,19 +2248,19 @@
 		ibm,mem-interleave-scope = <0x0>;
 
 		chiptod at 40000 {
-			phandle = <0x91>;
+			phandle = <0x90>;
 			reg = <0x40000 0x34>;
 			compatible = "ibm,power-chiptod", "ibm,power8-chiptod";
 		};
 
 		nx at 2010000 {
-			phandle = <0x95>;
+			phandle = <0x94>;
 			compatible = "ibm,power-nx", "ibm,power8-nx";
 			reg = <0x2010000 0x4000>;
 		};
 
 		pbcq at 2012000 {
-			phandle = <0x9b>;
+			phandle = <0x9a>;
 			reg = <0x200102 0x20000000 0x200109 0x5000000 0x3c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x0>;
@@ -2277,7 +2271,7 @@
 		};
 
 		pbcq at 2012400 {
-			phandle = <0x9c>;
+			phandle = <0x9b>;
 			reg = <0x240102 0x20000000 0x240109 0x5000000 0x403c0109 0x15000000>;
 			compatible = "ibm,power8-pbcq";
 			ibm,phb-index = <0x1>;
@@ -2288,7 +2282,7 @@
 		};
 
 		psihb at 2010900 {
-			phandle = <0x8b>;
+			phandle = <0x8a>;
 			reg = <0x2010900 0x20>;
 			compatible = "ibm,power8-psihb-x", "ibm,psihb-x";
 		};
diff --git a/hdata/vpd.c b/hdata/vpd.c
index 836869a..df9e1bf 100644
--- a/hdata/vpd.c
+++ b/hdata/vpd.c
@@ -211,9 +211,6 @@ static const char *vpd_map_name(const char *vpd_name)
 	return "Unknown";
 }
 
-static struct dt_node *dt_create_vpd_node(struct dt_node *parent,
-					  const struct slca_entry *entry);
-
 static const struct card_info *card_info_lookup(char *ccin)
 {
 	int i;
@@ -340,85 +337,92 @@ static bool valid_child_entry(const struct slca_entry *entry)
 	return false;
 }
 
-static void vpd_add_children(struct dt_node *parent, uint16_t slca_index)
+void vpd_data_parse(struct dt_node *node, const void *fruvpd, u32 fruvpd_sz)
 {
-	const struct slca_entry *s_entry, *child;
-	uint16_t current_child_index, max_index;
-
-	s_entry = slca_get_entry(slca_index);
-	if (!s_entry || (s_entry->nr_child == 0))
-		return;
-
-	/*
-	 * This slca_entry has children. Parse the children array
-	 * and add nodes for valid entries.
-	 *
-	 * A child entry is valid if all of the following criteria is met
-	 *	a. SLCA_INSTALL_INSTALLED is set in s_entry->install_indic
-	 *	b. SLCA_VPD_COLLECTED is set in s_entry->vpd_collected
-	 *	c. The SLCA is not a duplicate entry.
-	 */
-
-	/* current_index tracks where we are right now in the array */
-	current_child_index = be16_to_cpu(s_entry->child_index);
-
-	/* max_index tracks how far down the array we must traverse */
-	max_index = be16_to_cpu(s_entry->child_index)
-				+ be16_to_cpu(s_entry->nr_child);
-
-	while (current_child_index < max_index) {
-		child = slca_get_entry(current_child_index);
-		if (!child)
-			return;
+	if (vpd_find_record(fruvpd, fruvpd_sz, "OPFR", NULL))
+		vpd_opfr_parse(node, fruvpd, fruvpd_sz);
+	else
+		vpd_vini_parse(node, fruvpd, fruvpd_sz);
+}
 
-		if (valid_child_entry(child)) {
-			struct dt_node *node;
+/* Create the /vpd node and add its children */
+void dt_init_vpd_node(void)
+{
+	const char *name, *p_name;
+	int count, index;
+	uint64_t addr, p_addr;
+	struct dt_node *dt_vpd;
+	struct HDIF_common_hdr *slca_hdr;
+	struct dt_node *parent, *node;
+	const struct slca_entry *entry, *p_entry;
 
-			node = dt_create_vpd_node(parent, child);
-			if (!node)
-				return;
-		}
+	dt_vpd = dt_new(dt_root, "vpd");
+	assert(dt_vpd);
+	dt_add_property_string(dt_vpd, "compatible", "ibm,opal-v3-vpd");
 
-		/* Skip dups -- currently we presume dups are contiguous */
-		if (child->nr_dups > 0)
-			current_child_index += child->nr_dups;
-		current_child_index++;
+	slca_hdr = get_hdif(&spira.ntuples.slca, SLCA_HDIF_SIG);
+	if (!slca_hdr) {
+		prerror("SLCA Invalid\n");
+		return;
 	}
-	return;
-}
-
-/* Create the vpd node and add its children */
-static struct dt_node *dt_create_vpd_node(struct dt_node *parent,
-					  const struct slca_entry *entry)
-{
-	struct dt_node *node;
-	const char *name;
-	uint64_t addr;
 
-	name = vpd_map_name(entry->fru_id);
-	addr = (uint64_t)be16_to_cpu(entry->rsrc_id);
-	node = dt_new_addr(parent, name, addr);
-	if (!node) {
-		prerror("VPD: Creating node at %s@%"PRIx64" failed\n", name, addr);
-		return NULL;
+	count = HDIF_get_iarray_size(slca_hdr, SLCA_IDATA_ARRAY);
+	if (count < 0) {
+		prerror("SLCA: Can't find SLCA array size!\n");
+		return;
 	}
 
-	/* Add location code */
-	slca_vpd_add_loc_code(node, be16_to_cpu(entry->my_index));
-	/* Add FRU label */
-	dt_add_property(node, "fru-type", entry->fru_id, 2);
-	/* Recursively add children */
-	vpd_add_children(node, be16_to_cpu(entry->my_index));
+	for (index = 0; index < count; index++) {
+		/* Get SLCA entry */
+		entry = slca_get_entry(index);
+		if (!entry)
+			goto next_entry;
+
+		/*
+		 * A child entry is valid if all of the following criteria is met
+		 *   a. SLCA_INSTALL_INSTALLED is set in s_entry->install_indic
+		 *   b. SLCA_VPD_COLLECTED is set in s_entry->vpd_collected
+		 *   c. The SLCA is not a duplicate entry.
+		 */
+		if (!valid_child_entry(entry))
+			goto next_entry;
+
+		name = vpd_map_name(entry->fru_id);
+		addr = be16_to_cpu(entry->rsrc_id);
+		/* Check node is already created or not */
+		if (dt_find_by_name_addr(dt_vpd, name, addr))
+			goto next_entry;
+
+		/* Get parent node */
+		if (index == SLCA_ROOT_INDEX) {
+			parent = dt_vpd;
+		} else {
+			p_entry = slca_get_entry(be16_to_cpu(entry->parent_index));
+			if (!p_entry)
+				goto next_entry;
+			p_name = vpd_map_name(p_entry->fru_id);
+			p_addr = be16_to_cpu(p_entry->rsrc_id);
+			parent = dt_find_by_name_addr(dt_vpd, p_name, p_addr);
+		}
+		if (!parent)
+			goto next_entry;
+
+		node = dt_new_addr(parent, name, addr);
+		if (!node) {
+			prerror("VPD: Creating node at %s@%"PRIx64" failed\n",
+				name, addr);
+			goto next_entry;
+		}
 
-	return node;
-}
+		/* Add location code */
+		slca_vpd_add_loc_code(node, be16_to_cpu(entry->my_index));
+		/* Add FRU label */
+		dt_add_property(node, "fru-type", entry->fru_id, 2);
 
-void vpd_data_parse(struct dt_node *node, const void *fruvpd, u32 fruvpd_sz)
-{
-	if (vpd_find_record(fruvpd, fruvpd_sz, "OPFR", NULL))
-		vpd_opfr_parse(node, fruvpd, fruvpd_sz);
-	else
-		vpd_vini_parse(node, fruvpd, fruvpd_sz);
+next_entry:
+		/* Skip dups -- dups are contiguous */
+		index += entry->nr_dups;
+	}
 }
 
 struct dt_node *dt_add_vpd_node(const struct HDIF_common_hdr *hdr,
@@ -428,7 +432,6 @@ struct dt_node *dt_add_vpd_node(const struct HDIF_common_hdr *hdr,
 	unsigned int fruvpd_sz, fru_id_sz;
 	const struct slca_entry *entry;
 	struct dt_node *dt_vpd, *node;
-	static bool first = true;
 	const void *fruvpd;
 	const char *name;
 	uint64_t addr;
@@ -447,20 +450,6 @@ struct dt_node *dt_add_vpd_node(const struct HDIF_common_hdr *hdr,
 	if (!dt_vpd)
 		return NULL;
 
-	if (first) {
-		entry = slca_get_entry(SLCA_ROOT_INDEX);
-		if (!entry) {
-			prerror("VPD: Could not find the slca root entry\n");
-			return NULL;
-		}
-
-		node = dt_create_vpd_node(dt_vpd, entry);
-		if (!node)
-			return NULL;
-
-		first = false;
-	}
-
 	entry = slca_get_entry(be16_to_cpu(fru_id->slca_index));
 	if (!entry)
 		return NULL;
@@ -484,14 +473,9 @@ struct dt_node *dt_add_vpd_node(const struct HDIF_common_hdr *hdr,
 	 * corresponding slca entry which we would have used to populate the vpd
 	 * tree during the 'first' pass above so that we just need to perform
 	 * VINI parse and add the vpd data..
-	 * Still, we consider this case and create fresh node under '/vpd' if
-	 * 'node' not found.
 	 */
-	if (!node) {
-		node = dt_create_vpd_node(dt_vpd, entry);
-		if (!node)
-			return NULL;
-	}
+	if (!node)
+		return NULL;
 
 	/* Parse VPD fields, ensure that it has not been added already */
 	if (vpd_valid(fruvpd, fruvpd_sz)
-- 
2.9.3



More information about the Skiboot mailing list