diff options
author | Mike Baiocchi <baiocchi@us.ibm.com> | 2015-02-25 20:54:35 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-03-01 15:41:40 -0600 |
commit | 89cfb2021343c7e90f067e8a2ea4d5d4a1f9b928 (patch) | |
tree | 672403022dee423a8a53e06abbb114a70f0656a7 /src | |
parent | a91a8f7b3d35490845272e839e372329114df7a4 (diff) | |
download | talos-hostboot-89cfb2021343c7e90f067e8a2ea4d5d4a1f9b928.tar.gz talos-hostboot-89cfb2021343c7e90f067e8a2ea4d5d4a1f9b928.zip |
Remove Early I2C Reset Masters on Power Systems
This commit removes the call for i2cResetActiveMasters() during istep
6.3 host_init_fsi for POWER Systems. This call was attempting to
reset the Slace Processors' FSI-based I2C Engines and was intermittently
causing problems. It was determined this call was not needed for POWER
systems as the FSP should have the system initialized properly for Hostboot.
Change-Id: Ic6087ecd5ae82ea6a2807017e1d584e8c4072f9f
CQ: SW296222
Backport: release-fips830
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/16017
Tested-by: Jenkins Server
Reviewed-by: Nicholas E. Bofferding <bofferdn@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/usr/hwas/hostbootIstep.C | 12 | ||||
-rwxr-xr-x | src/usr/i2c/i2c.C | 36 |
2 files changed, 34 insertions, 14 deletions
diff --git a/src/usr/hwas/hostbootIstep.C b/src/usr/hwas/hostbootIstep.C index 9df0c4390..df994cba7 100644 --- a/src/usr/hwas/hostbootIstep.C +++ b/src/usr/hwas/hostbootIstep.C @@ -105,11 +105,15 @@ void* host_init_fsi( void *io_pArgs ) break; } - l_errl = I2C::i2cResetActiveMasters(I2C::I2C_ALL, false); - if (l_errl) + // Only reset the I2C Masters if FSP is not running + if ( !INITSERVICE::spBaseServicesEnabled() ) { - // Commit this error - errlCommit( l_errl, HWPF_COMP_ID ); + l_errl = I2C::i2cResetActiveMasters(I2C::I2C_ALL, false); + if (l_errl) + { + // Commit this error + errlCommit( l_errl, HWPF_COMP_ID ); + } } } while (0); diff --git a/src/usr/i2c/i2c.C b/src/usr/i2c/i2c.C index 6cc3bdf95..bc4bb7bfd 100755 --- a/src/usr/i2c/i2c.C +++ b/src/usr/i2c/i2c.C @@ -1525,24 +1525,40 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target, TRACFCOMP( g_trac_i2c, ERR_MRK"i2cCheckForErrors() - Error(s) found" ); + // Combine the status registers + uint64_t userdata1 = (0xFFFFFFFF00000000 & i_statusVal.value); + userdata1 |= ( 0xFFFFFFFF00000000 & intRegVal) >> 32; + + + // Combine multiple input arguments + uint64_t userdata2 = 0; + userdata2 = static_cast<uint64_t>(i_args.engine) << 56; + userdata2 |= static_cast<uint64_t>(i_args.port) << 48; + userdata2 |= static_cast<uint64_t>(i_args.bit_rate_divisor) << 32; + userdata2 |= TARGETING::get_huid(i_target); + /*@ * @errortype - * @reasoncode I2C_HW_ERROR_FOUND - * @severity ERRL_SEV_UNRECOVERABLE - * @moduleid I2C_CHECK_FOR_ERRORS - * @userdata1 Status Register Value - * @userdata2 Interrupt Register Value (only valid in - * Interrupt case) - * @devdesc Error was found in I2C status register. - * Check userdata1 to determine what the error was. + * @reasoncode I2C_HW_ERROR_FOUND + * @severity ERRL_SEV_UNRECOVERABLE + * @moduleid I2C_CHECK_FOR_ERRORS + * @userdata1[0:31 Status Register Value + * @userdata1[32:63] Interrupt Register Value (only valid in + * Interrupt case) + * @userdata2[0:7] I2C Master Engine + * @userdata2[8:15] I2C Master Port + * @userdata2[16:31] I2C Mode Register Bit Rate Divisor + * @userdata2[32:63] I2C Master Target HUID + * @devdesc Error was found in I2C status register. + * Check userdata to determine what the error was. * @custdesc A problem occurred during the IPL of the system: * An error was found in the I2C status register. */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, I2C_CHECK_FOR_ERRORS, I2C_HW_ERROR_FOUND, - i_statusVal.value, - intRegVal ); + userdata1, + userdata2); // For now limited in what we can call out: // Could be an issue with Processor or its bus |