@@ -945,26 +945,27 @@ errlHndl_t i2cRead ( TARGETING::Target * i_target,
945945 TRACFCOMP ( g_trac_i2c ,
946946 ERR_MRK "i2cRead() - Timed out waiting for data in FIFO!" );
947947
948- uint64_t userdata2 = i_args .port ;
949- userdata2 = (userdata2 << 16 ) | i_args .engine ;
950- userdata2 = (userdata2 << 16 ) | i_args .devAddr ;
951-
952948 /*@
953949 * @errortype
954950 * @reasoncode I2C_FIFO_TIMEOUT
955951 * @severity ERRL_SEV_UNRECOVERABLE
956952 * @moduleid I2C_READ
957- * @userdata1 Status Register Value
958- * @userdata2[0:31] Master Port
959- * @userdata2[32:47] Master Engine
960- * @userdata2[48:63] Slave Device Address
953+ * @userdata1[0:31] Status Register Value
954+ * @userdata1[32:63] Master Target
955+ * @userdata2[0:7] Master Engine
956+ * @userdata2[8:15] Master Port
957+ * @userdata2[16:31] Slave Device Address
958+ * @userdata2[32:47] Bus Speed
959+ * @userdata2[48:63] Bit Rate Devisor
961960 * @devdesc Timed out waiting for data in FIFO to read
962961 */
963962 err = new ERRORLOG ::ErrlEntry ( ERRORLOG ::ERRL_SEV_UNRECOVERABLE ,
964963 I2C_READ ,
965964 I2C_FIFO_TIMEOUT ,
966- status .value ,
967- userdata2 );
965+ I2C_SET_USER_DATA_1 (
966+ status ,
967+ i_target ),
968+ I2C_SET_USER_DATA_2 (i_args ));
968969
969970 // For now limited in what we can call out:
970971 // Could be an issue with Processor or its bus
@@ -1291,7 +1292,6 @@ errlHndl_t i2cWaitForCmdComp ( TARGETING::Target * i_target,
12911292 misc_args_t & i_args )
12921293{
12931294 errlHndl_t err = NULL ;
1294- uint64_t engine = i_args .engine ;
12951295
12961296 TRACDCOMP ( g_trac_i2c ,
12971297 ENTER_MRK "i2cWaitForCmdComp()" );
@@ -1330,18 +1330,25 @@ errlHndl_t i2cWaitForCmdComp ( TARGETING::Target * i_target,
13301330
13311331 /*@
13321332 * @errortype
1333- * @reasoncode I2C_CMD_COMP_TIMEOUT
1334- * @severity ERRL_SEV_UNRECOVERABLE
1335- * @moduleid I2C_WAIT_FOR_CMD_COMP
1336- * @userdata1 Status Register Value
1337- * @userdata2 Master Engine
1338- * @devdesc Timed out waiting for command complete.
1333+ * @reasoncode I2C_CMD_COMP_TIMEOUT
1334+ * @severity ERRL_SEV_UNRECOVERABLE
1335+ * @moduleid I2C_WAIT_FOR_CMD_COMP
1336+ * @userdata1[0:31] Status Register Value
1337+ * @userdata1[32:63] Master Target
1338+ * @userdata2[0:7] Master Engine
1339+ * @userdata2[8:15] Master Port
1340+ * @userdata2[16:31] Slave Device Address
1341+ * @userdata2[32:47] Bus Speed
1342+ * @userdata2[48:63] Bit Rate Devisor
1343+ * @devdesc Timed out waiting for command complete.
13391344 */
13401345 err = new ERRORLOG ::ErrlEntry ( ERRORLOG ::ERRL_SEV_UNRECOVERABLE ,
13411346 I2C_WAIT_FOR_CMD_COMP ,
13421347 I2C_CMD_COMP_TIMEOUT ,
1343- status .value ,
1344- engine );
1348+ I2C_SET_USER_DATA_1 (
1349+ status ,
1350+ i_target ),
1351+ I2C_SET_USER_DATA_2 (i_args ));
13451352
13461353
13471354 // For now limited in what we can call out:
@@ -1527,30 +1534,19 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
15271534 TRACFCOMP ( g_trac_i2c ,
15281535 ERR_MRK "i2cCheckForErrors() - Error(s) found" );
15291536
1530- // Combine the status registers
1531- uint64_t userdata1 = (0xFFFFFFFF00000000 & i_statusVal .value );
1532- userdata1 |= ( 0xFFFFFFFF00000000 & intRegVal ) >> 32 ;
1533-
1534-
1535- // Combine multiple input arguments
1536- uint64_t userdata2 = 0 ;
1537- userdata2 = static_cast < uint64_t > (i_args .engine ) << 56 ;
1538- userdata2 |= static_cast < uint64_t > (i_args .port ) << 48 ;
1539- userdata2 |= static_cast < uint64_t > (i_args .bit_rate_divisor ) << 32 ;
1540- userdata2 |= TARGETING ::get_huid (i_target );
15411537
15421538 /*@
15431539 * @errortype
15441540 * @reasoncode I2C_HW_ERROR_FOUND
15451541 * @severity ERRL_SEV_UNRECOVERABLE
15461542 * @moduleid I2C_CHECK_FOR_ERRORS
1547- * @userdata1[0:31 Status Register Value
1548- * @userdata1[32:63] Interrupt Register Value (only valid in
1549- * Interrupt case)
1550- * @userdata2[0:7 ] I2C Master Engine
1551- * @userdata2[8:15] I2C Master Port
1552- * @userdata2[16:31] I2C Mode Register Bit Rate Divisor
1553- * @userdata2[32 :63] I2C Master Target HUID
1543+ * @userdata1[0:31] Status Register Value
1544+ * @userdata1[32:63] Master Target
1545+ * @userdata2[0:7] Master Engine
1546+ * @userdata2[8:15 ] Master Port
1547+ * @userdata2[16:31] Slave Device Address
1548+ * @userdata2[32:47] Bus Speed
1549+ * @userdata2[48 :63] Bit Rate Devisor
15541550 * @devdesc Error was found in I2C status register.
15551551 * Check userdata to determine what the error was.
15561552 * @custdesc A problem occurred during the IPL of the system:
@@ -1559,8 +1555,10 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
15591555 err = new ERRORLOG ::ErrlEntry ( ERRORLOG ::ERRL_SEV_UNRECOVERABLE ,
15601556 I2C_CHECK_FOR_ERRORS ,
15611557 I2C_HW_ERROR_FOUND ,
1562- userdata1 ,
1563- userdata2 );
1558+ I2C_SET_USER_DATA_1 (
1559+ i_statusVal ,
1560+ i_target ),
1561+ I2C_SET_USER_DATA_2 (i_args ));
15641562
15651563 // For now limited in what we can call out:
15661564 // Could be an issue with Processor or its bus
@@ -1587,11 +1585,16 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
15871585
15881586 /*@
15891587 * @errortype
1590- * @reasoncode I2C_NACK_ONLY_FOUND
1591- * @severity ERRL_SEV_UNRECOVERABLE
1592- * @moduleid I2C_CHECK_FOR_ERRORS
1593- * @userdata1 Status Register Value
1594- * @userdata2 Interrupt Register Value
1588+ * @reasoncode I2C_NACK_ONLY_FOUND
1589+ * @severity ERRL_SEV_UNRECOVERABLE
1590+ * @moduleid I2C_CHECK_FOR_ERRORS
1591+ * @userdata1[0:31] Status Register Value
1592+ * @userdata1[32:63] Master Target
1593+ * @userdata2[0:7] Master Engine
1594+ * @userdata2[8:15] Master Port
1595+ * @userdata2[16:31] Slave Device Address
1596+ * @userdata2[32:47] Bus Speed
1597+ * @userdata2[48:63] Bit Rate Devisor
15951598 * @devdesc a NACK Error was found in the I2C status
15961599 * register.
15971600 * @custdesc A problem occurred during the IPL of the system:
@@ -1601,8 +1604,10 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
16011604 err = new ERRORLOG ::ErrlEntry ( ERRORLOG ::ERRL_SEV_UNRECOVERABLE ,
16021605 I2C_CHECK_FOR_ERRORS ,
16031606 I2C_NACK_ONLY_FOUND ,
1604- i_statusVal .value ,
1605- intRegVal );
1607+ I2C_SET_USER_DATA_1 (
1608+ i_statusVal ,
1609+ i_target ),
1610+ I2C_SET_USER_DATA_2 (i_args ));
16061611
16071612 // For now limited in what we can call out:
16081613 // Could be an issue with Processor or its bus
@@ -1628,11 +1633,16 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
16281633
16291634 /*@
16301635 * @errortype
1631- * @reasoncode I2C_ARBITRATION_LOST_ONLY_FOUND
1632- * @severity ERRL_SEV_UNRECOVERABLE
1633- * @moduleid I2C_CHECK_FOR_ERRORS
1634- * @userdata1 Status Register Value
1635- * @userdata2 Interrupt Register Value
1636+ * @reasoncode I2C_ARBITRATION_LOST_ONLY_FOUND
1637+ * @severity ERRL_SEV_UNRECOVERABLE
1638+ * @moduleid I2C_CHECK_FOR_ERRORS
1639+ * @userdata1[0:31] Status Register Value
1640+ * @userdata1[32:63] Master Target
1641+ * @userdata2[0:7] Master Engine
1642+ * @userdata2[8:15] Master Port
1643+ * @userdata2[16:31] Slave Device Address
1644+ * @userdata2[32:47] Bus Speed
1645+ * @userdata2[48:63] Bit Rate Devisor
16361646 * @devdesc Bus Arbitration Lost Error was found in
16371647 * the I2C status register.
16381648 * @custdesc A problem occurred during the IPL of the system:
@@ -1642,8 +1652,10 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
16421652 err = new ERRORLOG ::ErrlEntry ( ERRORLOG ::ERRL_SEV_UNRECOVERABLE ,
16431653 I2C_CHECK_FOR_ERRORS ,
16441654 I2C_ARBITRATION_LOST_ONLY_FOUND ,
1645- i_statusVal .value ,
1646- intRegVal );
1655+ I2C_SET_USER_DATA_1 (
1656+ i_statusVal ,
1657+ i_target ),
1658+ I2C_SET_USER_DATA_2 (i_args ));
16471659
16481660 // For now limited in what we can call out:
16491661 // Could be an issue with Processor or its bus
@@ -1734,18 +1746,25 @@ errlHndl_t i2cWaitForFifoSpace ( TARGETING::Target * i_target,
17341746
17351747 /*@
17361748 * @errortype
1737- * @reasoncode I2C_FIFO_TIMEOUT
1738- * @severity ERRL_SEV_UNRECOVERABLE
1739- * @moduleid I2C_WRITE
1740- * @userdata1 Status Register Value
1741- * @userdata2 <UNUSED>
1749+ * @reasoncode I2C_FIFO_TIMEOUT
1750+ * @severity ERRL_SEV_UNRECOVERABLE
1751+ * @moduleid I2C_WRITE
1752+ * @userdata1[0:31] Status Register Value
1753+ * @userdata1[32:63] Master Target
1754+ * @userdata2[0:7] Master Engine
1755+ * @userdata2[8:15] Master Port
1756+ * @userdata2[16:31] Slave Device Address
1757+ * @userdata2[32:47] Bus Speed
1758+ * @userdata2[48:63] Bit Rate Devisor
17421759 * @devdesc Timed out waiting for space to write into FIFO.
17431760 */
17441761 err = new ERRORLOG ::ErrlEntry ( ERRORLOG ::ERRL_SEV_UNRECOVERABLE ,
17451762 I2C_WRITE ,
17461763 I2C_FIFO_TIMEOUT ,
1747- status .value ,
1748- 0x0 );
1764+ I2C_SET_USER_DATA_1 (
1765+ status ,
1766+ i_target ),
1767+ I2C_SET_USER_DATA_2 (i_args ));
17491768
17501769 // For now limited in what we can call out:
17511770 // Could be an issue with Processor or its bus
@@ -3161,4 +3180,30 @@ void getMasterInfo( const TARGETING::Target* i_chip,
31613180 }
31623181}
31633182
3183+ /**
3184+ * @brief Utility Function to capture error log user data consisting of
3185+ * the I2C Master Status Register and the I2C Master Target HUID
3186+ */
3187+ uint64_t I2C_SET_USER_DATA_1 ( status_reg_t status_reg ,
3188+ TARGETING ::Target * tgt )
3189+ {
3190+ return TWO_UINT32_TO_UINT64 ( TO_UINT32 ( status_reg .value >> 32 ),
3191+ TARGETING ::get_huid (tgt ) );
3192+ }
3193+
3194+ /**
3195+ * @brief Utility Function to capture error log user data consisting of
3196+ * the I2C variables relating to the I2C Master
3197+ */
3198+ uint64_t I2C_SET_USER_DATA_2 ( misc_args_t args )
3199+ {
3200+
3201+ return FOUR_UINT16_TO_UINT64 (
3202+ TWO_UINT8_TO_UINT16 (args .engine , args .port ),
3203+ args .devAddr & 0x000000000000FFFF ,
3204+ args .bus_speed & 0x000000000000FFFF ,
3205+ args .bit_rate_divisor );
3206+ }
3207+
3208+
31643209} // end namespace I2C
0 commit comments