diff options
Diffstat (limited to 'src/usr/i2c')
-rwxr-xr-x | src/usr/i2c/test/tpmddtest.H | 7 | ||||
-rwxr-xr-x | src/usr/i2c/tpmdd.C | 39 |
2 files changed, 43 insertions, 3 deletions
diff --git a/src/usr/i2c/test/tpmddtest.H b/src/usr/i2c/test/tpmddtest.H index 4053245a6..14c22d6c4 100755 --- a/src/usr/i2c/test/tpmddtest.H +++ b/src/usr/i2c/test/tpmddtest.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015 */ +/* Contributors Listed Below - COPYRIGHT 2015,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -38,7 +38,7 @@ #include <devicefw/driverif.H> #include <i2c/tpmddreasoncodes.H> #include <targeting/common/commontargeting.H> -#include "secureboot/trustedbootif.H" +#include <secureboot/trustedbootif.H> #include "i2ctest.H" #include "../tpmdd.H" #include "../../secureboot/trusted/trustedTypes.H" @@ -381,7 +381,8 @@ class TPMDDTest: public CxxTest::TestSuite 0) ); if( NULL == err || - err->reasonCode() != TPM_DEVICE_NOT_AVAILABLE) + (err->reasonCode() != TPM_DEVICE_NOT_AVAILABLE && + err->reasonCode() != TPM_BUS_SPEED_LOOKUP_FAIL)) { fails++; TS_FAIL( "testTPMInvalidChip - TpmBackup : Error " diff --git a/src/usr/i2c/tpmdd.C b/src/usr/i2c/tpmdd.C index 24a49552b..d2b777cb0 100755 --- a/src/usr/i2c/tpmdd.C +++ b/src/usr/i2c/tpmdd.C @@ -1260,6 +1260,45 @@ errlHndl_t tpmReadAttributes ( TARGETING::Target * i_target, } + // Lookup bus speed + TARGETING::ATTR_I2C_BUS_SPEED_ARRAY_type speeds; + if( io_tpmInfo.i2cTarget-> + tryGetAttr<TARGETING::ATTR_I2C_BUS_SPEED_ARRAY>(speeds) && + (io_tpmInfo.engine < I2C_BUS_MAX_ENGINE(speeds)) && + (io_tpmInfo.port < I2C_BUS_MAX_PORT(speeds)) ) + { + io_tpmInfo.busFreq = speeds[io_tpmInfo.engine][io_tpmInfo.port]; + io_tpmInfo.busFreq *= 1000; //convert KHz->Hz + } + else + { + TRACFCOMP( g_trac_tpmdd, + ERR_MRK"tpmReadAttributes() - BUS SPEED LOOKUP FAIL"); + + /*@ + * @errortype + * @reasoncode TPM_BUS_SPEED_LOOKUP_FAIL + * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE + * @moduleid TPMDD_READATTRIBUTES + * @userdata1 HUID of target + * @userdata2 Address Offset Size + * @devdesc Invalid address offset size + */ + err = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_UNRECOVERABLE, + TPMDD_READATTRIBUTES, + TPM_BUS_SPEED_LOOKUP_FAIL, + TARGETING::get_huid(i_target), + tpmData.byteAddrOffset, + true /*Add HB SW Callout*/ ); + + err->collectTrace( TPMDD_COMP_NAME ); + + break; + + } + + } while( 0 ); TRACUCOMP(g_trac_tpmdd,"tpmReadAttributes() tgt=0x%X, %d/%d/0x%X " |