combine signature and node field in PEL parser output

Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
Change-Id: I4c67205081c74fa865f616f94ccbbe25ac0b42a0
diff --git a/xml/parse_chip_data_xml b/xml/parse_chip_data_xml
index 5e970c3..b75eb39 100755
--- a/xml/parse_chip_data_xml
+++ b/xml/parse_chip_data_xml
@@ -1145,31 +1145,49 @@
 
     # IMPORTANT: All hash keys with hex values must be lowercase.
 
-    my $nodes = {};
     my $regs  = {};
     my $sigs  = {};
 
+    # Get the signature data.
     for my $s ( @{$sig_list} )
     {
-        my $n = sprintf('%04x', __hash(2, $s->{name}));
-        my $i = sprintf('%02x', $s->{inst});
-        my $b = sprintf('%02x', $s->{bit});
+        # Format is:
+        #   { id : [ name, { bit : desc, ... } ], ... }
 
-        if ( exists($nodes->{$n}) and $nodes->{$n} ne $s->{name} )
+        # The ID is a 2-byte hash of the node name (lowercase).
+        my $id = sprintf('%04x', __hash(2, $s->{name}));
+
+        if ( exists($sigs->{$id}) )
         {
-            FAIL("Node hash collision for $n: $nodes->{$n} and $s->{name}");
+            # Check for hash collisions.
+            if ($sigs->{$id}->[0] ne $s->{name} )
+            {
+                FAIL("Node hash collision for $id: $sigs->{$id}->[0] " .
+                     "and $s->{name}");
+            }
+        }
+        else
+        {
+            # Initialize this node.
+            $sigs->{$id} = [ $s->{name}, {} ];
         }
 
-        $nodes->{$n} = $s->{name};
-
-        if ( exists($sigs->{$n}->{$b}) and $sigs->{$n}->{$b} ne $s->{desc} )
+        # Check for signature collisions.
+        if ( exists($sigs->{$id}->[1]->{$s->{bit}}) )
         {
-            FAIL("Multiple signatures for $s->{name} bit $s->{bit}:\n" .
-                 "  $sigs->{$n}->{$b}\n" .
-                 "  $s->{desc}");
+            # Check for signature collisions.
+            if ( $sigs->{$id}->[1]->{$s->{bit}} ne $s->{desc} )
+            {
+                FAIL("Multiple signatures for $s->{name} bit $s->{bit}:\n" .
+                     "  $sigs->{$id}->[1]->{$s->{bit}}\n" .
+                     "  $s->{desc}");
+            }
         }
-
-        $sigs->{$n}->{$b} = $s->{desc};
+        else
+        {
+            # Set the signature for this bit.
+            $sigs->{$id}->[1]->{$s->{bit}} = $s->{desc};
+        }
     }
 
     # Get the register data.
@@ -1206,10 +1224,9 @@
 
     my $data =
     {
-        'model_ec'  => sprintf('%08x', $SUPPORTED_MODEL_EC->{$model_ec}),
-        'node_name' => $nodes,
-        'registers' => $regs,
-        'signature' => $sigs,
+        'model_ec'   => sprintf('%08x', $SUPPORTED_MODEL_EC->{$model_ec}),
+        'registers'  => $regs,
+        'signatures' => $sigs,
     };
 
     print $fh to_json( $data, {utf8 => 1, pretty => 1, canonical => 1} );