Chip Data XML for TOD fault errors

Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
Change-Id: I92fbf438f6efd167c9e83ca4a861fa3ac00547c5
diff --git a/test/simulator/simulator.cpp b/test/simulator/simulator.cpp
index 6bc3106..bca2b99 100644
--- a/test/simulator/simulator.cpp
+++ b/test/simulator/simulator.cpp
@@ -79,8 +79,7 @@
     IsolationData isoData{};
     isolate(iv_chipList, isoData);
 
-    /* TODO: Currently used for debug. Eventually, we want this and the
-     *       signature list written to file.
+    /* TODO: Currently used for debug. Eventually, we want this written to file.
     for (const auto& e : isoData.getRegisterDump())
     {
         HEI_INF("Chip: %s", (const char*)e.first.getChip());
@@ -102,6 +101,15 @@
     std::sort(iv_expSigList.begin(), iv_expSigList.end());
     std::sort(givenSigList.begin(), givenSigList.end());
 
+    /* TODO: Currently used for debug. Eventually, we want this written to file.
+    for (const auto& s : givenSigList)
+    {
+        HEI_INF("Signature: %s 0x%04x %u %u %u",
+                (const char*)s.getChip().getChip(), s.getId(), s.getInstance(),
+                s.getBit(), s.getAttnType());
+    }
+    */
+
     ASSERT_TRUE(std::equal(givenSigList.begin(), givenSigList.end(),
                            iv_expSigList.begin()));
 
diff --git a/test/simulator/testcases/meson.build b/test/simulator/testcases/meson.build
index 601a2f1..6aabb36 100644
--- a/test/simulator/testcases/meson.build
+++ b/test/simulator/testcases/meson.build
@@ -4,5 +4,6 @@
     'exp20_foxhound7.cpp',
     'exp20_tlx_err_rpt_1.cpp',
     'omi_dl_fatal.cpp',
+    'tod_fault.cpp',
 )
 
diff --git a/test/simulator/testcases/tod_fault.cpp b/test/simulator/testcases/tod_fault.cpp
new file mode 100644
index 0000000..1d03883
--- /dev/null
+++ b/test/simulator/testcases/tod_fault.cpp
@@ -0,0 +1,26 @@
+#include "simulator.hpp"
+
+START_TEST_CASE(tod_fault)
+
+CHIP(proc0, P10_20)
+
+START_ITERATION
+
+REG_SCOM(proc0, 0x570F001C, 0x4000000000000000) // GLOBAL_CS_FIR[1]
+REG_SCOM(proc0, 0x570F001B, 0x4000000000000000) // GLOBAL_RE_FIR[1]
+REG_SCOM(proc0, 0x01040000, 0x0800000000000000) // TP_CHIPLET_CS_FIR[4]
+REG_SCOM(proc0, 0x01040001, 0x0800000000000000) // TP_CHIPLET_RE_FIR[4]
+REG_SCOM(proc0, 0x01040100, 0x0000007000000000) // TP_LOCAL_FIR[25:27]
+REG_SCOM(proc0, 0x01040103, 0x0000001000000000) // TP_LOCAL_FIR_MASK
+REG_SCOM(proc0, 0x01040107, 0x0000002000000000) // TP_LOCAL_FIR_ACT1
+
+REG_SCOM(proc0, 0x00040030, 0xf000000000000000) // TOD_ERROR
+REG_SCOM(proc0, 0x00040032, 0xc000000000000000) // TOD_ERROR_MASK
+REG_SCOM(proc0, 0x00040033, 0xa000000000000000) // TOD_ERROR_ROUTING
+
+EXP_SIG(proc0, 0x7d9b, 0, 3, CHECKSTOP)
+EXP_SIG(proc0, 0xdf2a, 0, 26, RECOVERABLE)
+
+END_ITERATION
+
+END_TEST_CASE
diff --git a/xml/p10/node_tod_error.xml b/xml/p10/node_tod_error.xml
new file mode 100644
index 0000000..c4713c8
--- /dev/null
+++ b/xml/p10/node_tod_error.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<attn_node model_ec="P10_10,P10_20" name="TOD_ERROR" reg_type="SCOM">
+
+    <rule attn_type="CS" node_inst="0">
+        <!-- TOD_ERROR & ~TOD_ERROR_MASK & ~TOD_ERROR_ROUTING -->
+        <expr type="and">
+            <expr type="reg" value1="TOD_ERROR" />
+            <expr type="not">
+                <expr type="reg" value1="TOD_ERROR_MASK" />
+            </expr>
+            <expr type="not">
+                <expr type="reg" value1="TOD_ERROR_ROUTING" />
+            </expr>
+        </expr>
+    </rule>
+
+    <rule attn_type="RE" node_inst="0">
+        <!-- TOD_ERROR & ~TOD_ERROR_MASK & ~TOD_ERROR_ROUTING -->
+        <expr type="and">
+            <expr type="reg" value1="TOD_ERROR" />
+            <expr type="not">
+                <expr type="reg" value1="TOD_ERROR_MASK" />
+            </expr>
+            <expr type="not">
+                <expr type="reg" value1="TOD_ERROR_ROUTING" />
+            </expr>
+        </expr>
+    </rule>
+
+    <rule attn_type="UCS" node_inst="0">
+        <!-- TOD_ERROR & ~TOD_ERROR_MASK & ~TOD_ERROR_ROUTING -->
+        <expr type="and">
+            <expr type="reg" value1="TOD_ERROR" />
+            <expr type="not">
+                <expr type="reg" value1="TOD_ERROR_MASK" />
+            </expr>
+            <expr type="not">
+                <expr type="reg" value1="TOD_ERROR_ROUTING" />
+            </expr>
+        </expr>
+    </rule>
+
+    <rule attn_type="SPA" node_inst="0">
+        <!-- TOD_ERROR & ~TOD_ERROR_MASK & ~TOD_ERROR_ROUTING -->
+        <expr type="and">
+            <expr type="reg" value1="TOD_ERROR" />
+            <expr type="not">
+                <expr type="reg" value1="TOD_ERROR_MASK" />
+            </expr>
+            <expr type="not">
+                <expr type="reg" value1="TOD_ERROR_ROUTING" />
+            </expr>
+        </expr>
+    </rule>
+
+    <rule attn_type="HA" node_inst="0">
+        <!-- TOD_ERROR & ~TOD_ERROR_MASK & ~TOD_ERROR_ROUTING -->
+        <expr type="and">
+            <expr type="reg" value1="TOD_ERROR" />
+            <expr type="not">
+                <expr type="reg" value1="TOD_ERROR_MASK" />
+            </expr>
+            <expr type="not">
+                <expr type="reg" value1="TOD_ERROR_ROUTING" />
+            </expr>
+        </expr>
+    </rule>
+
+    <bit pos="0">M_PATH_CONTROL_REG_DATA_PARITY_ERROR</bit>
+    <bit pos="1">M_PATH_0_PARITY_ERROR</bit>
+    <bit pos="2">M_PATH_1_PARITY_ERROR</bit>
+    <bit pos="3">PCRP0_DATA_PARITY_ERROR</bit>
+    <bit pos="4">PCRP1_DATA_PARITY_ERROR</bit>
+    <bit pos="5">SCRP0_DATA_PARITY_ERROR</bit>
+    <bit pos="6">SCRP1_DATA_PARITY_ERROR</bit>
+    <bit pos="7">SPCR_DATA_PARITY_ERROR</bit>
+    <bit pos="8">IPCR_DATA_PARITY_ERROR</bit>
+    <bit pos="9">PSMSCR_DATA_PARITY_ERROR</bit>
+    <bit pos="10">S_PATH_0_PARITY_ERROr</bit>
+    <bit pos="11">REG_0X08_DATA_PARITY_ERROR</bit>
+    <bit pos="12">M_PATH_STATUS_REG_DATA_PARITY_ERROR</bit>
+    <bit pos="13">S_PATH_STATUS_REG_DATA_PARITY_ERROR</bit>
+    <bit pos="14">M_PATH_0_STEP_CHECK_ERROR</bit>
+    <bit pos="15">M_PATH_1_STEP_CHECK_ERROR</bit>
+    <bit pos="16">S_PATH_0_STEP_CHECK_ERROR</bit>
+    <bit pos="17">I_PATH_STEP_CHECK_ERROR</bit>
+    <bit pos="18">PSS HAMMING DISTANCE</bit>
+    <bit pos="19">MISC_RESET_REG_DATA_PARITY_ERROR</bit>
+    <bit pos="20">S_PATH_0_PARITY_ERROR</bit>
+    <bit pos="21">S_PATH_1_STEP_CHECK_ERROR</bit>
+    <bit pos="22">I_PATH_DELAY_STEP_CHECK_PARITY_ERROR</bit>
+    <bit pos="23">REG_0X0C DATA_PARITY ERROR</bit>
+    <bit pos="24">REG_0X11_0X12_0X13_0X14_0X15_0X16_DATA_PARITY_ERROR</bit>
+    <bit pos="25">REG_0X17_0X18_0X21_0X22_DATA_PARITY_ERROR</bit>
+    <bit pos="26">REG_0X1D_0X1E_0X1F_DATA_PARITY_ERROR</bit>
+    <bit pos="27">TIMER_VALUE_REG_DATA_PARITY_ERROR</bit>
+    <bit pos="28">LOW_ORDER_STEP_REG_DATA_PARITY_ERROR</bit>
+    <bit pos="29">FSM_REG_DATA_PARITY_ERROR</bit>
+    <bit pos="30">RX_TTYPE_CONTROL_REG_DATA_PARITY_ERROR</bit>
+    <bit pos="31">REG_0X30_0X31_0X32_0X33_DATA_PARITY_ERROR</bit>
+    <bit pos="32">CHIP_CONTROL_REG_DATA_PARITY_ERROR</bit>
+    <bit pos="33">I_PATH_SYNC_CHECK_ERROR</bit>
+    <bit pos="34">I_PATH_FSM_STATE_PARITY_ERROR</bit>
+    <bit pos="35">I_PATH_TIME_REG_PARITY_ERROR</bit>
+    <bit pos="36">I_PATH_TIME_REG_OVERFLOW</bit>
+    <bit pos="37">WOF_LOW_ORDER_STEP_COUNTER_PARITY_ERROR</bit>
+    <bit pos="38:43">RX_TTYPE_1</bit>
+    <bit pos="44">PIB_SLAVE_ADDR_INVALID_ERROR</bit>
+    <bit pos="45">PIB_SLAVE_WRITE_INVALID_ERROR</bit>
+    <bit pos="46">PIB_SLAVE_READ_INVALID_ERROR</bit>
+    <bit pos="47">PIB_SLAVE_ADDR_PARITY_ERROR</bit>
+    <bit pos="48">PIB_SLAVE_DATA_PARITY_ERROR</bit>
+    <bit pos="49">TTYPE_CONTROL_REG_DATA_PARITY_ERROR</bit>
+    <bit pos="50:52">PIB_MASTER_RSP_INFO_ERROR</bit>
+    <bit pos="53">RX_TTYPE_INVALID_ERROR</bit>
+    <bit pos="54">RX_TTYPE_4_DATA_PARITY_ERROR</bit>
+    <bit pos="55">PIB_MASTER_REQUEST_ERROR</bit>
+    <bit pos="56">PIB_RESET_DURING_PIB_ACCESS_ERROR</bit>
+    <bit pos="57">EXTERNAL_XSTOP_ERROR</bit>
+    <bit pos="58:63">SPARE_ERROR</bit>
+</attn_node>
diff --git a/xml/p10/node_tp_local_fir.xml b/xml/p10/node_tp_local_fir.xml
index d9dafa5..a3e0709 100644
--- a/xml/p10/node_tp_local_fir.xml
+++ b/xml/p10/node_tp_local_fir.xml
@@ -107,6 +107,124 @@
         <instance reg_inst="39" addr="0x270F001F" />
     </register>
 
+    <register name="TOD_M_PATH_CTRL">
+        <instance reg_inst="0" addr="0x00040000" />
+    </register>
+
+    <register name="TOD_PRI_PORT_0_CTRL">
+        <instance reg_inst="0" addr="0x00040001" />
+    </register>
+
+    <register name="TOD_PRI_PORT_1_CTRL">
+        <instance reg_inst="0" addr="0x00040002" />
+    </register>
+
+    <register name="TOD_SEC_PORT_0_CTRL">
+        <instance reg_inst="0" addr="0x00040003" />
+    </register>
+
+    <register name="TOD_SEC_PORT_1_CTRL">
+        <instance reg_inst="0" addr="0x00040004" />
+    </register>
+
+    <register name="TOD_S_PATH_CTRL">
+        <instance reg_inst="0" addr="0x00040005" />
+    </register>
+
+    <register name="TOD_I_PATH_CTRL">
+        <instance reg_inst="0" addr="0x00040006" />
+    </register>
+
+    <register name="TOD_PSS_MSS_CTRL">
+        <instance reg_inst="0" addr="0x00040007" />
+    </register>
+
+    <register name="TOD_PSS_MSS_STATUS">
+        <instance reg_inst="0" addr="0x00040008" />
+    </register>
+
+    <register name="TOD_M_PATH_STATUS">
+        <instance reg_inst="0" addr="0x00040009" />
+    </register>
+
+    <register name="TOD_S_PATH_STATUS">
+        <instance reg_inst="0" addr="0x0004000A" />
+    </register>
+
+    <register name="TOD_M_PATH_0_STEP_STEER">
+        <instance reg_inst="0" addr="0x0004000E" />
+    </register>
+
+    <register name="TOD_M_PATH_1_STEP_STEER">
+        <instance reg_inst="0" addr="0x0004000F" />
+    </register>
+
+    <register name="TOD_CHIP_CTRL">
+        <instance reg_inst="0" addr="0x00040010" />
+    </register>
+
+    <register name="TOD_TRACE_DATA_1">
+        <instance reg_inst="0" addr="0x0004001D" />
+    </register>
+
+    <register name="TOD_TRACE_DATA_2">
+        <instance reg_inst="0" addr="0x0004001E" />
+    </register>
+
+    <register name="TOD_TRACE_DATA_3">
+        <instance reg_inst="0" addr="0x0004001F" />
+    </register>
+
+    <register name="TOD_FSM">
+        <instance reg_inst="0" addr="0x00040024" />
+    </register>
+
+    <register name="TOD_TX_TTYPE_CTRL">
+        <instance reg_inst="0" addr="0x00040027" />
+    </register>
+
+    <register name="TOD_RX_TTYPE_CTRL">
+        <instance reg_inst="0" addr="0x00040029" />
+    </register>
+
+    <register name="TOD_ERROR">
+        <instance reg_inst="0" addr="0x00040030" />
+    </register>
+
+    <register name="TOD_ERROR_MASK">
+        <instance reg_inst="0" addr="0x00040032" />
+    </register>
+
+    <register name="TOD_ERROR_ROUTING">
+        <instance reg_inst="0" addr="0x00040033" />
+    </register>
+
+    <capture_group node_inst="0">
+        <capture_register reg_inst="0" reg_name="TOD_M_PATH_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_PRI_PORT_0_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_PRI_PORT_1_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_SEC_PORT_0_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_SEC_PORT_1_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_S_PATH_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_I_PATH_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_PSS_MSS_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_PSS_MSS_STATUS" />
+        <capture_register reg_inst="0" reg_name="TOD_M_PATH_STATUS" />
+        <capture_register reg_inst="0" reg_name="TOD_S_PATH_STATUS" />
+        <capture_register reg_inst="0" reg_name="TOD_M_PATH_0_STEP_STEER" />
+        <capture_register reg_inst="0" reg_name="TOD_M_PATH_1_STEP_STEER" />
+        <capture_register reg_inst="0" reg_name="TOD_CHIP_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_TRACE_DATA_1" />
+        <capture_register reg_inst="0" reg_name="TOD_TRACE_DATA_2" />
+        <capture_register reg_inst="0" reg_name="TOD_TRACE_DATA_3" />
+        <capture_register reg_inst="0" reg_name="TOD_FSM" />
+        <capture_register reg_inst="0" reg_name="TOD_TX_TTYPE_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_RX_TTYPE_CTRL" />
+        <capture_register reg_inst="0" reg_name="TOD_ERROR" />
+        <capture_register reg_inst="0" reg_name="TOD_ERROR_MASK" />
+        <capture_register reg_inst="0" reg_name="TOD_ERROR_ROUTING" />
+    </capture_group>
+
     <bit pos="0">CFIR - Parity or PCB access error</bit>
     <bit pos="1">CPLT_CTRL - PCB access error</bit>
     <bit pos="2">CC - PCB access error</bit>
@@ -132,7 +250,7 @@
     <bit pos="22">ITR - PCB error</bit>
     <bit pos="23">PCB Master - timeout</bit>
     <bit pos="24">I2CM - Parity errors</bit>
-    <bit pos="25">TOD - any error</bit>
+    <bit pos="25" child_node="TOD_ERROR">TOD - any error</bit>
     <bit pos="26">TOD - access error PIB</bit>
     <bit pos="27">TOD - Error reported from PHYP</bit>
     <bit pos="28" child_node="PLL_UNLOCK">PCB slave error</bit>