Update XML for new Explorer levels

Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
Change-Id: I2a79d0dc217241605cb798a3386d77b9aa59f33c
diff --git a/test/simulator/simulator.cpp b/test/simulator/simulator.cpp
index b95027d..e994eba 100644
--- a/test/simulator/simulator.cpp
+++ b/test/simulator/simulator.cpp
@@ -11,6 +11,9 @@
 const std::map<SimulatorData::SimChipType, const char*>
     SimulatorData::cv_chipPath = {
         {SAMPLE, "../test/simulator/sample_data/sample.cdb"},
+        {EXPLORER_11, "chip_data_explorer_11.cdb"},
+        {EXPLORER_20, "chip_data_explorer_20.cdb"},
+        {P10_10, "chip_data_p10_10.cdb"},
 };
 
 //------------------------------------------------------------------------------
diff --git a/test/simulator/simulator.hpp b/test/simulator/simulator.hpp
index 0a22911..c308fda 100644
--- a/test/simulator/simulator.hpp
+++ b/test/simulator/simulator.hpp
@@ -43,7 +43,10 @@
     /** The list of supported chip types for the simulator. */
     enum SimChipType
     {
-        SAMPLE = 0xdeadbeef,
+        SAMPLE      = 0xdeadbeef,
+        EXPLORER_11 = 0x60d20011,
+        EXPLORER_20 = 0x60d20020,
+        P10_10      = 0x20da0010,
     };
 
   private:
diff --git a/xml/build_chip_data_binary b/xml/build_chip_data_binary
index aa82ea3..c6dc0c7 100755
--- a/xml/build_chip_data_binary
+++ b/xml/build_chip_data_binary
@@ -28,8 +28,9 @@
 # This is a map of all currently supported models/ECs and their IDs.
 my $SUPPORTED_MODEL_EC =
 {
-    EXPLORER_10 => 0x160D2000, # Explorer Chip DD1.0
-    P10_10      => 0x120DA049, # P10 Chip DD1.0
+    EXPLORER_11 => 0x60D20011, # Explorer Chip DD1.0
+    EXPLORER_20 => 0x60D20020, # Explorer Chip DD1.0
+    P10_10      => 0x20DA0010, # P10 Chip DD1.0
 };
 
 # All models/ECs that may exist in the XML, but no longer needs to be built.
@@ -362,18 +363,22 @@
         # Each register will keep track of its type.
         $r->{reg_type} = $node->{reg_type};
 
-        if ( defined $regs->{$r->{name}} )
+        for my $model_ec ( __expandModelEc($node->{model_ec}) )
         {
-            # This register already exists so check the contents for accuracy
-            unless ( __dirtyCompare($r, $regs->{$r->{name}}) )
+            if ( defined $regs->{$model_ec}->{$r->{name}} )
             {
-                FAIL("Duplicate register: $r->{name}");
+                # This register already exists so check the contents for
+                # accuracy
+                unless ( __dirtyCompare($r, $regs->{$model_ec}->{$r->{name}}) )
+                {
+                    FAIL("Duplicate register: $r->{name}");
+                }
             }
-        }
-        else
-        {
-            # Add this node's register to the master register list.
-            $regs->{$r->{name}} = $r;
+            else
+            {
+                # Add this node's register to the master register list.
+                $regs->{$model_ec}->{$r->{name}} = $r;
+            }
         }
     }
 
@@ -633,15 +638,19 @@
                 # currently is no comment for some bits.
                 $b->{content} = "" unless ( defined $b->{content} );
 
-                # Check if this signature already exists.
-                if ( defined $sigs->{$n}->{$ni}->{$p} and
-                     $b->{content} ne $sigs->{$n}->{$ni}->{$p} )
+                for my $model_ec ( __expandModelEc($node->{model_ec}) )
                 {
-                    FAIL("Duplicate signature for $n $ni $p");
-                }
+                    # Check if this signature already exists.
+                    if ( defined $sigs->{$model_ec}->{$n}->{$ni}->{$p} and
+                        $b->{content} ne $sigs->{$model_ec}->{$n}->{$ni}->{$p} )
+                    {
+                        FAIL("Duplicate signature for $n $ni $p");
+                    }
 
-                # Get the signatures for each node, instance, and bit position.
-                $sigs->{$n}->{$ni}->{$p} = $b->{content};
+                    # Get the signatures for each node, instance, and bit
+                    # position.
+                    $sigs->{$model_ec}->{$n}->{$ni}->{$p} = $b->{content};
+                }
 
                 # Move onto the next instance unless a child node exists.
                 next unless ( defined $b->{child_node} );
@@ -753,15 +762,22 @@
                 $node_dups->{$model_ec}->{$node->{name}} = 1;
             }
 
-            # Some nodes contain the <local_fir> shorthand element. <register>
-            # elements will need to be extracted for a master register list.
-            # Also, some minor data checking, etc.
+            # Initialize the master list of registers and signatures of this
+            # model/EC, if necessary.
 
-            $regs->{$model_ec} = {} unless ( defined $regs->{ $model_ec} );
-            $sigs->{$model_ec} = {} unless ( defined $sigs->{ $model_ec} );
+            $regs->{$model_ec} = {} unless ( defined $regs->{$model_ec} );
+            $sigs->{$model_ec} = {} unless ( defined $sigs->{$model_ec} );
+        }
 
-            __normalizeNode( $node, $regs->{$model_ec}, $sigs->{$model_ec} );
+        # The same node content will be used for each model/EC characterized by
+        # this node. There is some normalization that needs to happen because of
+        # shorthand elements, like <local_fir>, and some error checking. This
+        # only needs to be done once per node, not per model/EC.
+        __normalizeNode( $node, $regs, $sigs );
 
+        # Push the node data for each model/EC.
+        for my $model_ec ( __expandModelEc($node->{model_ec}) )
+        {
             push @{$data->{$model_ec}->{node}}, $node;
         }
     }
diff --git a/xml/chip_data_xml.md b/xml/chip_data_xml.md
index 5b85467..96cbfed 100644
--- a/xml/chip_data_xml.md
+++ b/xml/chip_data_xml.md
@@ -412,7 +412,8 @@
 
 | Value         | Description          |
 |---------------|----------------------|
-| `EXPLORER_10` | Explorer chip EC 1.0 |
+| `EXPLORER_11` | Explorer chip EC 1.1 |
+| `EXPLORER_20` | Explorer chip EC 2.0 |
 | `P10_10`      | P10 chip EC 1.0      |
 
 ### 3.4) Supported Attention Types
diff --git a/xml/explorer/chip_explorer.xml b/xml/explorer/chip_explorer.xml
index 8b46d74..df092fa 100644
--- a/xml/explorer/chip_explorer.xml
+++ b/xml/explorer/chip_explorer.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<chip name="Explorer" model_ec="EXPLORER_10">
+<chip name="Explorer" model_ec="EXPLORER_11,EXPLORER_20">
 
     <attn_tree attn_type="UCS" root_node="CHIPLET_OCMB_FIR"     node_inst="0" />
     <attn_tree attn_type="RE"  root_node="CHIPLET_OCMB_FIR"     node_inst="0" />
diff --git a/xml/explorer/node_chiplet_ocmb_fir.xml b/xml/explorer/node_chiplet_ocmb_fir.xml
index d195c84..fd6aed7 100644
--- a/xml/explorer/node_chiplet_ocmb_fir.xml
+++ b/xml/explorer/node_chiplet_ocmb_fir.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<attn_node name="CHIPLET_OCMB_FIR" model_ec="EXPLORER_10" reg_type="SCOM">
+<attn_node name="CHIPLET_OCMB_FIR" model_ec="EXPLORER_11,EXPLORER_20" reg_type="SCOM">
 
     <register name="CHIPLET_OCMB_CS_FIR">
         <instance reg_inst="0" addr="0x08040000" />
diff --git a/xml/explorer/node_chiplet_ocmb_spa_fir.xml b/xml/explorer/node_chiplet_ocmb_spa_fir.xml
index f53240d..ed32ca9 100644
--- a/xml/explorer/node_chiplet_ocmb_spa_fir.xml
+++ b/xml/explorer/node_chiplet_ocmb_spa_fir.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<attn_node name="CHIPLET_OCMB_SPA_FIR" model_ec="EXPLORER_10" reg_type="SCOM">
+<attn_node name="CHIPLET_OCMB_SPA_FIR" model_ec="EXPLORER_11,EXPLORER_20" reg_type="SCOM">
 
     <register name="CHIPLET_OCMB_SPA_FIR">
         <instance reg_inst="0" addr="0x08040004" />
diff --git a/xml/explorer/node_mcbistfir.xml b/xml/explorer/node_mcbistfir.xml
index 66ca8d7..a4c7623 100644
--- a/xml/explorer/node_mcbistfir.xml
+++ b/xml/explorer/node_mcbistfir.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<attn_node name="MCBISTFIR" model_ec="EXPLORER_10" reg_type="SCOM">
+<attn_node name="MCBISTFIR" model_ec="EXPLORER_11,EXPLORER_20" reg_type="SCOM">
 
     <local_fir name="MCBISTFIR" config="W">
         <instance reg_inst="0" addr="0x08011800" />
diff --git a/xml/explorer/node_mmiofir.xml b/xml/explorer/node_mmiofir.xml
index 7d64d7e..469140f 100644
--- a/xml/explorer/node_mmiofir.xml
+++ b/xml/explorer/node_mmiofir.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<attn_node name="MMIOFIR" model_ec="EXPLORER_10" reg_type="SCOM">
+<attn_node name="MMIOFIR" model_ec="EXPLORER_11,EXPLORER_20" reg_type="SCOM">
 
     <local_fir name="MMIOFIR" config="W">
         <instance reg_inst="0" addr="0x08010870" />
diff --git a/xml/explorer/node_ocmb_lfir.xml b/xml/explorer/node_ocmb_lfir.xml
index cd62fc3..7cb4543 100644
--- a/xml/explorer/node_ocmb_lfir.xml
+++ b/xml/explorer/node_ocmb_lfir.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<attn_node name="OCMB_LFIR" model_ec="EXPLORER_10" reg_type="SCOM">
+<attn_node name="OCMB_LFIR" model_ec="EXPLORER_11,EXPLORER_20" reg_type="SCOM">
 
     <local_fir name="OCMB_LFIR" config="">
         <instance reg_inst="0" addr="0x0804000a" />
diff --git a/xml/explorer/node_omidlfir.xml b/xml/explorer/node_omidlfir.xml
index 061c698..0a243e4 100644
--- a/xml/explorer/node_omidlfir.xml
+++ b/xml/explorer/node_omidlfir.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<attn_node name="OMIDLFIR" model_ec="EXPLORER_10" reg_type="SCOM">
+<attn_node name="OMIDLFIR" model_ec="EXPLORER_11,EXPLORER_20" reg_type="SCOM">
 
     <local_fir name="OMIDLFIR" config="W">
         <instance reg_inst="0" addr="0x08012800" />
diff --git a/xml/explorer/node_rdffir.xml b/xml/explorer/node_rdffir.xml
index c6a942c..6c56d11 100644
--- a/xml/explorer/node_rdffir.xml
+++ b/xml/explorer/node_rdffir.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<attn_node name="RDFFIR" model_ec="EXPLORER_10" reg_type="SCOM">
+<attn_node name="RDFFIR" model_ec="EXPLORER_11,EXPLORER_20" reg_type="SCOM">
 
     <local_fir name="RDFFIR" config="W">
         <instance reg_inst="0" addr="0x08011c00" />
diff --git a/xml/explorer/node_srqfir.xml b/xml/explorer/node_srqfir.xml
index 2541838..7e86d48 100644
--- a/xml/explorer/node_srqfir.xml
+++ b/xml/explorer/node_srqfir.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<attn_node name="SRQFIR" model_ec="EXPLORER_10" reg_type="SCOM">
+<attn_node name="SRQFIR" model_ec="EXPLORER_11,EXPLORER_20" reg_type="SCOM">
 
     <local_fir name="SRQFIR" config="W">
         <instance reg_inst="0" addr="0x08011400" />
diff --git a/xml/explorer/node_tlxfir.xml b/xml/explorer/node_tlxfir.xml
index 11b02cd..d3be87f 100644
--- a/xml/explorer/node_tlxfir.xml
+++ b/xml/explorer/node_tlxfir.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<attn_node name="TLXFIR" model_ec="EXPLORER_10" reg_type="SCOM">
+<attn_node name="TLXFIR" model_ec="EXPLORER_11,EXPLORER_20" reg_type="SCOM">
 
     <local_fir name="TLXFIR" config="W">
         <instance reg_inst="0" addr="0x08012400" />
diff --git a/xml/meson.build b/xml/meson.build
index 23a9ca0..fd4420c 100644
--- a/xml/meson.build
+++ b/xml/meson.build
@@ -19,7 +19,8 @@
 
     'explorer' :
     [
-        'chip_data_explorer_10.cdb',
+        'chip_data_explorer_11.cdb',
+        'chip_data_explorer_20.cdb',
     ],
 }