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} );