diff options
| author | Chris Engel <cjengel@us.ibm.com> | 2016-07-13 16:10:54 -0500 |
|---|---|---|
| committer | William G. Hoffa <wghoffa@us.ibm.com> | 2016-08-22 13:47:05 -0400 |
| commit | b692f91c173ca684b557b8f76d268720e58b36a4 (patch) | |
| tree | 6f100e0f80e5bc60b69824441e266e1da69e6760 /src/usr/i2c | |
| parent | 984f7f35a02e4894c8cb448223bea8d53b64f459 (diff) | |
| download | blackbird-hostboot-b692f91c173ca684b557b8f76d268720e58b36a4.tar.gz blackbird-hostboot-b692f91c173ca684b557b8f76d268720e58b36a4.zip | |
Trustedboot support for using TPM target
Change-Id: I362085fd81663b9b8ec56ed9e0670cf71fc851e4
RTC: 153386
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/28482
Reviewed-by: Christopher J. Engel <cjengel@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/i2c')
| -rwxr-xr-x | src/usr/i2c/test/tpmddtest.H | 249 | ||||
| -rwxr-xr-x | src/usr/i2c/tpmdd.C | 452 | ||||
| -rwxr-xr-x | src/usr/i2c/tpmdd.H | 22 |
3 files changed, 288 insertions, 435 deletions
diff --git a/src/usr/i2c/test/tpmddtest.H b/src/usr/i2c/test/tpmddtest.H index 14c22d6c4..b2e58eca6 100755 --- a/src/usr/i2c/test/tpmddtest.H +++ b/src/usr/i2c/test/tpmddtest.H @@ -56,43 +56,45 @@ class TPMDDTest: public CxxTest::TestSuite public: /** - * @brief Retrieve a node target to test with + * @brief Retrieve a TPM target to test with */ - TARGETING::Target* getTestTarget( tpm_chip_types_t i_chip ) + TARGETING::Target* getTestTarget() { - TARGETING::TargetService& tS = TARGETING::targetService(); TARGETING::Target* testTarget = NULL; - tS.getMasterNodeTarget( testTarget ); - - assert(testTarget != NULL); + TARGETING::TargetHandleList tpmList; + TARGETING::getAllChips(tpmList, + TARGETING::TYPE_TPM, + true); // only functional + if (tpmList.size() > 0) + { + testTarget = tpmList[0]; - TRACFCOMP( g_trac_tpmdd, - "getTestTarget node tgt=0x%X chip=%d", - TARGETING::get_huid(testTarget), - i_chip); + TRACFCOMP( g_trac_tpmdd, + "getTestTarget tpm tgt=0x%08X", + TARGETING::get_huid(testTarget)); - // Let's see if the requested chip is functional - tpm_info_t tpmInfo; - tpmInfo.chip = i_chip; - errlHndl_t err = tpmReadAttributes (testTarget, tpmInfo); + // Let's see if the requested chip is functional + tpm_info_t tpmInfo; + memset(&tpmInfo, 0, sizeof(tpm_info_t)); + errlHndl_t err = tpmReadAttributes (testTarget, tpmInfo); - if (NULL != err) - { - testTarget = NULL; - delete err; - } - else if (!tpmInfo.tpmEnabled) - { - TRACFCOMP(g_trac_tpmdd, "getTestTarget - " - "Chip %d not enabled", - i_chip); - testTarget = NULL; - } - else - { - TRACFCOMP(g_trac_tpmdd, "getTestTarget - " - "Chip %d enabled", - i_chip); + if (NULL != err) + { + testTarget = NULL; + delete err; + err = NULL; + } + else if (!tpmInfo.tpmEnabled) + { + TRACFCOMP(g_trac_tpmdd, "getTestTarget - " + "Chip not enabled"); + testTarget = NULL; + } + else + { + TRACFCOMP(g_trac_tpmdd, "getTestTarget - " + "Chip enabled"); + } } return testTarget; @@ -113,8 +115,8 @@ class TPMDDTest: public CxxTest::TestSuite do { - // Get a node Target - TARGETING::Target* testTarget = getTestTarget(TPM_PRIMARY); + // Get a TPM Target + TARGETING::Target* testTarget = getTestTarget(); if (NULL == testTarget) { continue; @@ -124,8 +126,7 @@ class TPMDDTest: public CxxTest::TestSuite err = deviceRead(testTarget, &data, dataSize, - DEVICE_TPM_ADDRESS( TPM_PRIMARY, - TPM_OP_READVENDORID, + DEVICE_TPM_ADDRESS( TPM_OP_READVENDORID, 0) ); if( NULL != err ) @@ -178,8 +179,8 @@ class TPMDDTest: public CxxTest::TestSuite do { - // Get a node Target - TARGETING::Target* testTarget = getTestTarget(TPM_PRIMARY); + // Get a TPM Target + TARGETING::Target* testTarget = getTestTarget(); if (NULL == testTarget) { continue; @@ -189,8 +190,7 @@ class TPMDDTest: public CxxTest::TestSuite err = deviceRead(testTarget, &data, dataSize, - DEVICE_TPM_ADDRESS( TPM_PRIMARY, - TPM_OP_LASTOP, + DEVICE_TPM_ADDRESS( TPM_OP_LASTOP, 0) ); if( NULL == err ) @@ -215,8 +215,7 @@ class TPMDDTest: public CxxTest::TestSuite testTarget, &data, dataSize, - DEVICE_TPM_ADDRESS( TPM_PRIMARY, - TPM_OP_READVENDORID, + DEVICE_TPM_ADDRESS( TPM_OP_READVENDORID, 0) ); if( NULL == err ) @@ -260,8 +259,8 @@ class TPMDDTest: public CxxTest::TestSuite do { - // Get a node Target - TARGETING::Target* testTarget = getTestTarget(TPM_PRIMARY); + // Get a TPM Target + TARGETING::Target* testTarget = getTestTarget(); if (NULL == testTarget) { continue; @@ -273,8 +272,7 @@ class TPMDDTest: public CxxTest::TestSuite err = deviceRead(testTarget, &data, dataSize, - DEVICE_TPM_ADDRESS( TPM_PRIMARY, - TPM_OP_READVENDORID, + DEVICE_TPM_ADDRESS( TPM_OP_READVENDORID, 0) ); if( NULL == err || @@ -307,107 +305,6 @@ class TPMDDTest: public CxxTest::TestSuite /** - * @brief TPM Invalid Chip Test - * This test will pass in an invalid chip identifier which should - * result in an error being returned. - */ - void testTPMInvalidChip ( void ) - { - errlHndl_t err = NULL; - int64_t fails = 0, num_ops = 0; - uint64_t data = 0x0ull; - size_t dataSize = sizeof(data); - - TRACFCOMP( g_trac_tpmdd, - "testTPMInvalidChip - Start" ); - - do - { - - // Get a processor Target instead of a node target - TARGETING::TargetService& tS = TARGETING::targetService(); - TARGETING::Target* testTarget = NULL; - tS.masterProcChipTargetHandle( testTarget ); - assert(testTarget != NULL); - - num_ops++; - err = deviceRead(testTarget, - &data, - dataSize, - DEVICE_TPM_ADDRESS( TPM_PRIMARY, - TPM_OP_READVENDORID, - 0) ); - - if( NULL == err ) - { - fails++; - TS_FAIL( "testTPMInvalidChip - ProcTarget: Error should've " - "resulted in using processor target!" ); - } - else - { - TRACUCOMP(g_trac_tpmdd, "testTPMInvalidChip - " - "ProcTarget: Error log returned as expected. " - "RC=0x%x ", - err->reasonCode() ); - delete err; - err = NULL; - } - - - - // Attempt operation against the backup TPM - tS.getMasterNodeTarget( testTarget ); - assert(testTarget != NULL); - - // Skip this target if target is non-functional - if(!testTarget->getAttr<TARGETING::ATTR_HWAS_STATE>() - .functional) - { - continue; - } - - // Many systems don't have a backup TPM, if not configured - // test TPM presence against it - if (getTestTarget(TPM_BACKUP) == NULL) - { - - num_ops++; - err = deviceRead(testTarget, - &data, - dataSize, - DEVICE_TPM_ADDRESS( TPM_BACKUP, - TPM_OP_READVENDORID, - 0) ); - - if( NULL == err || - (err->reasonCode() != TPM_DEVICE_NOT_AVAILABLE && - err->reasonCode() != TPM_BUS_SPEED_LOOKUP_FAIL)) - { - fails++; - TS_FAIL( "testTPMInvalidChip - TpmBackup : Error " - "should've " - "resulted in using backup TPM target!" ); - } - else - { - TRACUCOMP(g_trac_tpmdd, "testTPMInvalidChip - " - "TpmBackup : Error log returned as expected. " - "RC=0x%X ", - err->reasonCode() ); - delete err; - err = NULL; - } - } - - } while( 0 ); - - TRACFCOMP( g_trac_tpmdd, - "testTPMInvalidChip - End: %d/%d fails", - fails, num_ops ); - } - - /** * @brief TPM Presence Test */ void testTPMPresence ( void ) @@ -421,7 +318,7 @@ class TPMDDTest: public CxxTest::TestSuite do { - // Get a processor Target instead of a node target + // Get a processor Target instead of a tpm target TARGETING::TargetService& tS = TARGETING::targetService(); TARGETING::Target* testTarget = NULL; tS.masterProcChipTargetHandle( testTarget ); @@ -437,8 +334,7 @@ class TPMDDTest: public CxxTest::TestSuite num_ops++; // Test with invalid proc target - presence = TPMDD::tpmPresence(testTarget, - TPM_PRIMARY); + presence = TPMDD::tpmPresence(testTarget); if( presence == true ) { fails++; @@ -452,46 +348,13 @@ class TPMDDTest: public CxxTest::TestSuite } - tS.getMasterNodeTarget( testTarget ); - assert(testTarget != NULL); - - // Skip this target if target is non-functional - if(!testTarget->getAttr<TARGETING::ATTR_HWAS_STATE>() - .functional) - { - continue; - } - - - // Many systems don't have a backup TPM, if not configured - // test TPM presence against it - if (getTestTarget(TPM_BACKUP) == NULL) - { - - num_ops++; - // Attempt operation against the backup TPM - presence = TPMDD::tpmPresence(testTarget, - TPM_BACKUP); - if( presence == true ) - { - fails++; - TS_FAIL( "testTPMPresence - TPMBackup: Error when " - "using backup TPM!, false presence" ); - } - else - { - TRACUCOMP(g_trac_tpmdd, "testTPMPresence - " - "TPMBackup: False returned as expected. "); - } - } - + testTarget = getTestTarget(); - if (getTestTarget(TPM_PRIMARY) != NULL) + if (NULL != testTarget) { // Now test with valid primary target num_ops++; - presence = TPMDD::tpmPresence(testTarget, - TPM_PRIMARY); + presence = TPMDD::tpmPresence(testTarget); if( presence == false ) { fails++; @@ -530,8 +393,8 @@ class TPMDDTest: public CxxTest::TestSuite do { - // Get a node Target - TARGETING::Target* testTarget = getTestTarget(TPM_PRIMARY); + // Get a TPM Target + TARGETING::Target* testTarget = getTestTarget(); if (NULL == testTarget) { continue; @@ -559,8 +422,7 @@ class TPMDDTest: public CxxTest::TestSuite err = deviceRead(testTarget, &data, dataSize, - DEVICE_TPM_ADDRESS( TPM_PRIMARY, - TPM_OP_TRANSMIT, + DEVICE_TPM_ADDRESS( TPM_OP_TRANSMIT, cmdSize) ); TRUSTEDBOOT::TPM2_BaseOut* resp = @@ -618,8 +480,8 @@ class TPMDDTest: public CxxTest::TestSuite do { - // Get a node Target - TARGETING::Target* testTarget = getTestTarget(TPM_PRIMARY); + // Get a TPM Target + TARGETING::Target* testTarget = getTestTarget(); if (NULL == testTarget) { continue; @@ -648,9 +510,8 @@ class TPMDDTest: public CxxTest::TestSuite err = deviceRead(testTarget, &data, dataSize, - DEVICE_TPM_ADDRESS( TPM_PRIMARY, - TPM_OP_TRANSMIT, - cmdSize) ); + DEVICE_TPM_ADDRESS(TPM_OP_TRANSMIT, + cmdSize) ); if( NULL == err || err->reasonCode() != TPM_OVERFLOW_ERROR) diff --git a/src/usr/i2c/tpmdd.C b/src/usr/i2c/tpmdd.C index 8c0b5319a..4581d0265 100755 --- a/src/usr/i2c/tpmdd.C +++ b/src/usr/i2c/tpmdd.C @@ -77,10 +77,14 @@ namespace TPMDD static const size_t MAX_BYTE_ADDR = 2; static const size_t TPM_MAX_NACK_RETRIES = 2; -// Register the perform Op with the routing code for Nodes. +// Register the perform Op with the routing code for TPM +DEVICE_REGISTER_ROUTE(DeviceFW::READ, + DeviceFW::PRESENT, + TARGETING::TYPE_TPM, + tpmPresenceDetect); DEVICE_REGISTER_ROUTE( DeviceFW::WILDCARD, DeviceFW::TPM, - DeviceFW::WILDCARD, + TARGETING::TYPE_TPM, tpmPerformOp ); @@ -99,7 +103,6 @@ errlHndl_t tpmPerformOp( DeviceFW::OperationType i_opType, uint64_t commandSize = 0; bool unlock = false; - tpmInfo.chip = va_arg( i_args, uint64_t ); tpmInfo.operation = ((TPMDD::tpm_op_types_t)va_arg( i_args, uint64_t )); commandSize = va_arg( i_args, uint64_t ); @@ -107,8 +110,8 @@ errlHndl_t tpmPerformOp( DeviceFW::OperationType i_opType, ENTER_MRK"tpmPerformOp()" ); TRACUCOMP (g_trac_tpmdd, ENTER_MRK"tpmPerformOp(): " - "i_opType=%d, chip=%d, operation=%d, buflen=%d, cmdlen=%d", - (uint64_t) i_opType, tpmInfo.chip, tpmInfo.operation, io_buflen, + "i_opType=%d, operation=%d, buflen=%d, cmdlen=%d", + (uint64_t) i_opType, tpmInfo.operation, io_buflen, commandSize); do @@ -127,8 +130,8 @@ errlHndl_t tpmPerformOp( DeviceFW::OperationType i_opType, { TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmPerformOp(): TPM requested not enabled!" - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d", - tpmInfo.chip, tpmInfo.port, + "p/e/dA=%d/%d/0x%X, OP=%d", + tpmInfo.port, tpmInfo.engine, tpmInfo.devAddr, tpmInfo.operation); /*@ @@ -136,15 +139,15 @@ errlHndl_t tpmPerformOp( DeviceFW::OperationType i_opType, * @reasoncode TPM_DEVICE_NOT_AVAILABLE * @severity ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_PERFORM_OP - * @userdata1 Operation Type - * @userdata2 Chip to Access + * @userdata1 TPM + * @userdata2 Operation Type * @devdesc Invalid operation type. */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, TPMDD_PERFORM_OP, TPM_DEVICE_NOT_AVAILABLE, + TARGETING::get_huid(i_target), i_opType, - tpmInfo.chip, true /*Add HB SW Callout*/ ); err->collectTrace( TPMDD_COMP_NAME ); @@ -169,9 +172,9 @@ errlHndl_t tpmPerformOp( DeviceFW::OperationType i_opType, { TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmPerformOp(): Operation Overflow! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "blen=%d", - tpmInfo.chip, tpmInfo.port, + tpmInfo.port, tpmInfo.engine, tpmInfo.devAddr, tpmInfo.operation, io_buflen); @@ -181,8 +184,9 @@ errlHndl_t tpmPerformOp( DeviceFW::OperationType i_opType, * @reasoncode TPM_OVERFLOW_ERROR * @severity ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_PERFORM_OP - * @userdata1 Operation - * @userdata2 Buffer Length (in Bytes) + * @userdata1 TPM + * @userdata2[0-31] Operation + * @userdata2[32-63] Buffer Length (in Bytes) * @devdesc TPM buffer length > 4 for read vendor op * @custdesc A problem occurred during the IPL of the * system: TPM buffer is too large. @@ -190,8 +194,10 @@ errlHndl_t tpmPerformOp( DeviceFW::OperationType i_opType, err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, TPMDD_PERFORM_OP, TPM_OVERFLOW_ERROR, - tpmInfo.operation, - io_buflen, + TARGETING::get_huid(i_target), + TWO_UINT32_TO_UINT64( + tpmInfo.operation, + io_buflen ), true /*Add HB SW Callout*/ ); err->collectTrace( TPMDD_COMP_NAME ); @@ -236,8 +242,8 @@ errlHndl_t tpmPerformOp( DeviceFW::OperationType i_opType, { TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmPerformOp(): Invalid TPM Operation!" - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, Type=%d", - tpmInfo.chip, tpmInfo.port, + "p/e/dA=%d/%d/0x%X, OP=%d, Type=%d", + tpmInfo.port, tpmInfo.engine, tpmInfo.devAddr, tpmInfo.operation, i_opType); @@ -246,15 +252,15 @@ errlHndl_t tpmPerformOp( DeviceFW::OperationType i_opType, * @reasoncode TPM_INVALID_OPERATION * @severity ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_PERFORM_OP - * @userdata1 Operation Type - * @userdata2 Chip to Access + * @userdata1 TPM + * @userdata2 Operation Type * @devdesc Invalid operation type. */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, TPMDD_PERFORM_OP, TPM_INVALID_OPERATION, + TARGETING::get_huid(i_target), i_opType, - tpmInfo.chip, true /*Add HB SW Callout*/ ); err->collectTrace( TPMDD_COMP_NAME ); @@ -281,22 +287,19 @@ errlHndl_t tpmPerformOp( DeviceFW::OperationType i_opType, //------------------------------------------------------------------- //tpmPresence //------------------------------------------------------------------- -bool tpmPresence ( TARGETING::Target * i_target, - tpm_chip_types_t i_chip) +bool tpmPresence ( TARGETING::Target * i_target) { TRACDCOMP(g_trac_tpmdd, ENTER_MRK"tpmPresence()"); TRACUCOMP(g_trac_tpmdd, ENTER_MRK"tpmPresence() : " - "node tgt=0x%X chip=%d", - TARGETING::get_huid(i_target), - i_chip); + "tpm tgt=0x%X ", + TARGETING::get_huid(i_target)); errlHndl_t err = NULL; bool l_present = true; tpm_info_t tpmInfo; - tpmInfo.chip = i_chip; tpmInfo.offset = 0; do { @@ -347,9 +350,8 @@ bool tpmPresence ( TARGETING::Target * i_target, { TRACUCOMP(g_trac_tpmdd, ERR_MRK"tpmPresence : ReadVendorID failed!" - "node tgt=0x%X C-p/e/dA=%d-%d/%d/0x%X RC=0x%X", + "tpm tgt=0x%X p/e/dA=%d/%d/0x%X RC=0x%X", TARGETING::get_huid(i_target), - tpmInfo.chip, tpmInfo.port, tpmInfo.engine, static_cast<uint64_t>(tpmInfo.devAddr), @@ -366,10 +368,9 @@ bool tpmPresence ( TARGETING::Target * i_target, { TRACUCOMP(g_trac_tpmdd, ERR_MRK"tpmPresence : ReadVendorID mismatch!" - "node tgt=0x%X C-p/e/dA=%d-%d/%d/0x%X" + "tpm tgt=0x%X p/e/dA=%d/%d/0x%X" " found ID=0x%X exp ID=0x%X", TARGETING::get_huid(i_target), - tpmInfo.chip, tpmInfo.port, tpmInfo.engine, static_cast<uint64_t>(tpmInfo.devAddr), @@ -399,9 +400,8 @@ bool tpmPresence ( TARGETING::Target * i_target, { TRACUCOMP(g_trac_tpmdd, ERR_MRK"tpmPresence : ReadFamilyID failed!" - "node tgt=0x%X C-p/e/dA=%d-%d/%d/0x%X RC=0x%X", + "tpm tgt=0x%X p/e/dA=%d/%d/0x%X RC=0x%X", TARGETING::get_huid(i_target), - tpmInfo.chip, tpmInfo.port, tpmInfo.engine, static_cast<uint64_t>(tpmInfo.devAddr), @@ -418,10 +418,9 @@ bool tpmPresence ( TARGETING::Target * i_target, { TRACUCOMP(g_trac_tpmdd, ERR_MRK"tpmPresence : FamilyID mismatch!" - "node tgt=0x%X C-p/e/dA=%d-%d/%d/0x%X" + "tpm tgt=0x%X p/e/dA=%d/%d/0x%X" " found ID=0x%X exp ID=0x%X", TARGETING::get_huid(i_target), - tpmInfo.chip, tpmInfo.port, tpmInfo.engine, static_cast<uint64_t>(tpmInfo.devAddr), @@ -434,10 +433,9 @@ bool tpmPresence ( TARGETING::Target * i_target, { TRACFCOMP(g_trac_tpmdd, INFO_MRK"tpmPresence : TPM Detected!" - " node tgt=0x%X C-p/e/dA=%d-%d/%d/0x%X" + " tpm tgt=0x%X p/e/dA=%d/%d/0x%X" " Vendor ID=0x%X, Family ID=0x%X", TARGETING::get_huid(i_target), - tpmInfo.chip, tpmInfo.port, tpmInfo.engine, static_cast<uint64_t>(tpmInfo.devAddr), @@ -454,12 +452,47 @@ bool tpmPresence ( TARGETING::Target * i_target, TRACDCOMP(g_trac_tpmdd, EXIT_MRK"tpmPresence() : presence : %d", l_present); TRACUCOMP(g_trac_tpmdd, EXIT_MRK"tpmPresence() : " - "node tgt=0x%X chip=%d presence=%d", - TARGETING::get_huid(i_target), - i_chip, l_present); + "tpm tgt=0x%X presence=%d", + TARGETING::get_huid(i_target), l_present); return l_present; } +errlHndl_t tpmPresenceDetect(DeviceFW::OperationType i_opType, + TARGETING::Target* i_target, + void* io_buffer, + size_t& io_buflen, + int64_t i_accessType, + va_list i_args) +{ + errlHndl_t err = NULL; + if (unlikely(io_buflen < sizeof(bool))) + { + TRACFCOMP(g_trac_tpmdd, + ERR_MRK "tpmPresenceDetect> Invalid data length: %d", + io_buflen); + /*@ + * @errortype + * @moduleid TPMDD_TPMPRESENCEDETECT + * @reasoncode TPM_INVALID_OPERATION + * @userdata1 Data Length + * @devdesc presenceDetect> Invalid data length (!= 1 bytes) + * @custdesc Problem occurred during TPM presence detection + */ + err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE, + TPMDD_TPMPRESENCEDETECT, + TPM_INVALID_OPERATION, + TO_UINT64(io_buflen), + true /*SW error*/); + io_buflen = 0; + } else { + bool present = tpmPresence (i_target); + memcpy(io_buffer, &present, sizeof(present)); + io_buflen = sizeof(present); + } + return err; + +} + // ------------------------------------------------------------------ // tpmRead // ------------------------------------------------------------------ @@ -479,8 +512,8 @@ errlHndl_t tpmRead ( void * o_buffer, do { TRACUCOMP( g_trac_tpmdd, - "TPM READ START : Chip: %02d : Offset %.2X : Len %d", - i_tpmInfo.chip, i_tpmInfo.offset, i_buflen ); + "TPM READ START : Offset %.2X : Len %d", + i_tpmInfo.offset, i_buflen ); err = tpmPrepareAddress( &byteAddr, byteAddrSize, @@ -518,9 +551,9 @@ errlHndl_t tpmRead ( void * o_buffer, { TRACFCOMP(g_trac_tpmdd, ERR_MRK"tpmRead(): I2C Read-Offset failed! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "offset=0x%X, aS=%d, len=%d", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, i_tpmInfo.offset, byteAddrSize, i_buflen); @@ -545,9 +578,9 @@ errlHndl_t tpmRead ( void * o_buffer, { TRACFCOMP(g_trac_tpmdd, ERR_MRK"tpmRead(): I2C Read failed! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "len=%d", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, i_buflen); @@ -566,9 +599,9 @@ errlHndl_t tpmRead ( void * o_buffer, { // Only retry on NACK failures: break from retry loop TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmRead(): Non-Nack! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "Error: rc=0x%X, No Retry (retry=%d)", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, err->reasonCode(), retry); @@ -591,10 +624,10 @@ errlHndl_t tpmRead ( void * o_buffer, TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmRead(): NACK Error! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "rc=0x%X, eid=0x%X, " "retry/MAX=%d/%d. Save error and retry", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, err_NACK->reasonCode(), @@ -608,11 +641,11 @@ errlHndl_t tpmRead ( void * o_buffer, // Add data to original NACK error TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmRead(): Another NACK Error! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "rc=0x%X, eid=0x%X, " "plid=0x%X, retry/MAX=%d/%d. " "Delete error and retry", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, err->reasonCode(), err->eid(), err->plid(), @@ -634,10 +667,10 @@ errlHndl_t tpmRead ( void * o_buffer, { TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmRead(): No More Retries! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "Error rc=0x%X, eid=%d, " "retry/MAX=%d/%d. Returning Error", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, err->reasonCode(), err->eid(), @@ -685,9 +718,8 @@ errlHndl_t tpmRead ( void * o_buffer, TRACUCOMP( g_trac_tpmdd, - "TPM READ END : Chip: %02d : " - "Offset %.2X : Len %d : %016llx", - i_tpmInfo.chip, i_tpmInfo.offset, i_buflen, + "TPM READ END : Offset %.2X : Len %d : %016llx", + i_tpmInfo.offset, i_buflen, *(reinterpret_cast<uint64_t*>(o_buffer)) ); } while( 0 ); @@ -716,9 +748,8 @@ errlHndl_t tpmWrite ( void * i_buffer, do { TRACUCOMP( g_trac_tpmdd, - "TPM WRITE START : Chip: %02d : " - "Offset %.2X : Len %d : %016llx", - i_tpmInfo.chip, i_tpmInfo.offset, + "TPM WRITE START : Offset %.2X : Len %d : %016llx", + i_tpmInfo.offset, i_buflen, *(reinterpret_cast<uint64_t*>(i_buffer)) ); @@ -758,9 +789,9 @@ errlHndl_t tpmWrite ( void * i_buffer, { TRACFCOMP(g_trac_tpmdd, ERR_MRK"tpmWrite(): I2C Write-Offset! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, ", + "p/e/dA=%d/%d/0x%X, OP=%d, ", "offset=0x%X, aS=%d, len=%d", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, i_tpmInfo.offset, byteAddrSize, i_buflen); @@ -785,9 +816,9 @@ errlHndl_t tpmWrite ( void * i_buffer, { TRACFCOMP(g_trac_tpmdd, ERR_MRK"tpmWrite(): I2C Write failed! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "len=%d", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, i_buflen); @@ -806,9 +837,9 @@ errlHndl_t tpmWrite ( void * i_buffer, { // Only retry on NACK failures: break from retry loop TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmWrite(): Non-Nack " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "Error: rc=0x%X, No Retry (retry=%d)", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, err->reasonCode(), retry); @@ -831,10 +862,10 @@ errlHndl_t tpmWrite ( void * i_buffer, TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmWrite(): NACK Error! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "rc=0x%X, eid=0x%X, " "retry/MAX=%d/%d. Save error and retry", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, err_NACK->reasonCode(), @@ -848,11 +879,11 @@ errlHndl_t tpmWrite ( void * i_buffer, // Add data to original NACK error TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmWrite(): Another NACK Error! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "rc=0x%X, eid=0x%X " "plid=0x%X, retry/MAX=%d/%d. " "Delete error and retry", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, err->reasonCode(), err->eid(), err->plid(), @@ -874,10 +905,10 @@ errlHndl_t tpmWrite ( void * i_buffer, { TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmWrite(): No More Retries! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "Error rc=0x%X, eid=%d, " "retry/MAX=%d/%d. Returning Error", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, err->reasonCode(), err->eid(), @@ -922,9 +953,8 @@ errlHndl_t tpmWrite ( void * i_buffer, TRACSCOMP( g_trac_tpmdd, - "TPM WRITE END : Chip: %02d : " - "Offset %.2X : Len %d", - i_tpmInfo.chip, i_tpmInfo.offset, i_buflen); + "TPM WRITE END : Offset %.2X : Len %d", + i_tpmInfo.offset, i_buflen); } while( 0 ); @@ -952,9 +982,7 @@ errlHndl_t tpmTransmit ( void * io_buffer, { TRACUCOMP( g_trac_tpmdd, - "TPM TRANSMIT START : Chip: %02d : " - "BufLen %d : CmdLen %d : %016llx", - i_tpmInfo.chip, + "TPM TRANSMIT START : BufLen %d : CmdLen %d : %016llx", io_buflen, i_commandlen, *(reinterpret_cast<uint64_t*>(io_buffer)) ); @@ -1011,9 +1039,7 @@ errlHndl_t tpmTransmit ( void * io_buffer, } while( 0 ); TRACUCOMP( g_trac_tpmdd, - "TPM TRANSMIT END : Chip: %02d : " - "BufLen %d : CmdLen %d : %016llx", - i_tpmInfo.chip, + "TPM TRANSMIT END : BufLen %d : CmdLen %d : %016llx", io_buflen, i_commandlen, *(reinterpret_cast<uint64_t*>(io_buffer)) ); @@ -1068,18 +1094,18 @@ errlHndl_t tpmPrepareAddress ( void * io_buffer, * @reasoncode TPM_INVALID_DEVICE_TYPE * @severity ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_PREPAREADDRESS - * @userdata1 Address Size (aka Device Type) - * @userdata2 TPM chip + * @userdata1 TPM + * @userdata2 Address Size (aka Device Type) * @devdesc The Device type not supported (addrSize) * @custdesc A problem was detected during the IPL of * the system: Device type not supported. */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, - TPMDD_PREPAREADDRESS, - TPM_INVALID_DEVICE_TYPE, - i_tpmInfo.addrSize, - i_tpmInfo.chip, - true /*Add HB SW Callout*/ ); + TPMDD_PREPAREADDRESS, + TPM_INVALID_DEVICE_TYPE, + TARGETING::get_huid(i_tpmInfo.tpmTarget), + i_tpmInfo.addrSize, + true /*Add HB SW Callout*/ ); err->collectTrace( TPMDD_COMP_NAME ); @@ -1102,80 +1128,24 @@ errlHndl_t tpmReadAttributes ( TARGETING::Target * i_target, tpm_info_t & io_tpmInfo ) { errlHndl_t err = NULL; - bool fail_reading_attribute = false; TRACDCOMP( g_trac_tpmdd, ENTER_MRK"tpmReadAttributes()" ); // These variables will be used to hold the TPM attribute data - TARGETING::TpmPrimaryInfo tpmData; + TARGETING::TpmInfo tpmData; do { - switch (io_tpmInfo.chip ) - { - case TPM_PRIMARY: - if( !( i_target-> - tryGetAttr<TARGETING::ATTR_TPM_PRIMARY_INFO> - ( tpmData ) ) ) - - { - fail_reading_attribute = true; - } - break; - - case TPM_BACKUP: - - if( !(i_target-> - tryGetAttr<TARGETING::ATTR_TPM_BACKUP_INFO> - ( reinterpret_cast< - TARGETING::ATTR_TPM_BACKUP_INFO_type&> - ( tpmData) ) ) ) - { - fail_reading_attribute = true; - } - break; - - default: - TRACFCOMP( g_trac_tpmdd,ERR_MRK"tpmReadAttributes() - " - "Invalid chip %d tgt=0x%X to read attributes from!", - io_tpmInfo.chip, - TARGETING::get_huid(i_target)); + if( !( i_target-> + tryGetAttr<TARGETING::ATTR_TPM_INFO> + ( tpmData ) ) ) - /*@ - * @errortype - * @reasoncode TPM_INVALID_CHIP - * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE - * @moduleid TPMDD_READATTRIBUTES - * @userdata1 TPM Chip - * @userdata2 HUID of target - * @devdesc Invalid TPM chip to access - */ - err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE, - TPMDD_READATTRIBUTES, - TPM_INVALID_CHIP, - io_tpmInfo.chip, - TARGETING::get_huid(i_target), - true /*Add HB SW Callout*/ ); - - err->collectTrace( TPMDD_COMP_NAME ); - - break; - } - - if (NULL != err) - { - break; - } - - // Check if Attribute Data was found - if( fail_reading_attribute == true ) { TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmReadAttributes() - ERROR reading " - "attributes for chip %d, tgt=0x%X!", - io_tpmInfo.chip, + "attributes for tgt=0x%X!", TARGETING::get_huid(i_target)); /*@ @@ -1184,15 +1154,14 @@ errlHndl_t tpmReadAttributes ( TARGETING::Target * i_target, * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_READATTRIBUTES * @userdata1 HUID of target - * @userdata2 TPM chip + * @userdata2 0 * @devdesc TPM attribute was not found */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, TPMDD_READATTRIBUTES, TPM_ATTR_INFO_NOT_FOUND, - TARGETING::get_huid(i_target), - io_tpmInfo.chip); + TARGETING::get_huid(i_target)); // Could be FSP or HB code's fault err->addProcedureCallout(HWAS::EPUB_PRC_HB_CODE, @@ -1213,6 +1182,7 @@ errlHndl_t tpmReadAttributes ( TARGETING::Target * i_target, io_tpmInfo.engine = tpmData.engine; io_tpmInfo.i2cMasterPath = tpmData.i2cMasterPath; io_tpmInfo.tpmEnabled = tpmData.tpmEnabled; + io_tpmInfo.tpmTarget = i_target; // Convert attribute info to tpm_addr_size_t enum if ( tpmData.byteAddrOffset == 0x2 ) @@ -1374,8 +1344,7 @@ errlHndl_t tpmGetI2CMasterTarget ( TARGETING::Target * i_target, * @reasoncode TPM_I2C_MASTER_PATH_ERROR * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_GETI2CMASTERTARGET - * @userdata1[00:31] Attribute Chip Type Enum - * @userdata1[32:63] HUID of target + * @userdata1 HUID of target * @userdata2 Compressed Entity Path * @devdesc I2C master entity path doesn't exist. */ @@ -1383,9 +1352,7 @@ errlHndl_t tpmGetI2CMasterTarget ( TARGETING::Target * i_target, ERRORLOG::ERRL_SEV_UNRECOVERABLE, TPMDD_GETI2CMASTERTARGET, TPM_I2C_MASTER_PATH_ERROR, - TWO_UINT32_TO_UINT64( - io_tpmInfo.chip, - TARGETING::get_huid(i_target) ), + TARGETING::get_huid(i_target), l_epCompressed, true /*Add HB SW Callout*/ ); @@ -1428,17 +1395,14 @@ errlHndl_t tpmGetI2CMasterTarget ( TARGETING::Target * i_target, * @reasoncode TPM_TARGET_NULL * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_GETI2CMASTERTARGET - * @userdata1[00:31] Attribute Chip Type Enum - * @userdata1[32:63] HUID of target + * @userdata1 HUID of target * @userdata2 Compressed Entity Path * @devdesc I2C master path target is null. */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, TPMDD::TPMDD_GETI2CMASTERTARGET, TPMDD::TPM_TARGET_NULL, - TWO_UINT32_TO_UINT64( - io_tpmInfo.chip, - TARGETING::get_huid(i_target) ), + TARGETING::get_huid(i_target), l_epCompressed, true /*Add HB SW Callout*/ ); @@ -1514,8 +1478,8 @@ errlHndl_t tpmReadSTSRegValid ( tpm_info_t i_tpmInfo, { TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmReadSTSRegValid(): Timeout! " - "C-p/e/dA=%d-%d/%d/0x%X, %02X", - i_tpmInfo.chip, i_tpmInfo.port, + "p/e/dA=%d/%d/0x%X, %02X", + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, o_stsReg.value); @@ -1524,18 +1488,21 @@ errlHndl_t tpmReadSTSRegValid ( tpm_info_t i_tpmInfo, * @reasoncode TPM_TIMEOUT * @severity ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_READSTSREGVALID - * @userdata1 Operation - * @userdata2 STS Reg + * @userdata1 TPM + * @userdata2[0:31] Operation + * @userdata2[32:63] STS Reg * @devdesc TPM timeout waiting for stsValid * @custdesc A problem occurred during the IPL of the * system: TPM timeout */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, - TPMDD_READSTSREGVALID, - TPM_TIMEOUT, - i_tpmInfo.operation, - o_stsReg.value, - true /*Add HB SW Callout*/ ); + TPMDD_READSTSREGVALID, + TPM_TIMEOUT, + TARGETING::get_huid(i_tpmInfo.tpmTarget), + TWO_UINT32_TO_UINT64( + i_tpmInfo.operation, + o_stsReg.value), + true /*Add HB SW Callout*/ ); err->collectTrace( TPMDD_COMP_NAME ); break; @@ -1621,26 +1588,27 @@ errlHndl_t tpmPollForCommandReady( tpm_info_t i_tpmInfo) TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmPollForCommandReady() - " "Timeout polling for command ready! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "STS=0x%X", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, stsReg.value ); /*@ * @errortype - * @reasoncode TPM_TIMEOUT - * @severity ERRL_SEV_UNRECOVERABLE - * @moduleid TPMDD_POLLFORCOMMMANDREADY - * @userdata1 Attribute Chip Type Enum - * @userdata2 STS Reg - * @devdesc Timeout waiting for TPM to enter command ready state. + * @reasoncode TPM_TIMEOUT + * @severity ERRL_SEV_UNRECOVERABLE + * @moduleid TPMDD_POLLFORCOMMMANDREADY + * @userdata1 TPM + * @userdata2 STS Reg + * @devdesc Timeout waiting for TPM to enter command ready state. + * @custdesc TPM operation failure */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, TPMDD_POLLFORCOMMMANDREADY, TPM_TIMEOUT, - i_tpmInfo.chip, + TARGETING::get_huid(i_tpmInfo.tpmTarget), stsReg.value, true /*Add HB SW Callout*/ ); @@ -1712,9 +1680,9 @@ errlHndl_t tpmPollForDataAvail( tpm_info_t i_tpmInfo) TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmPollForDataAvail() - " "Timeout polling for dataAvail! " - "C-p/e/dA=%d-%d/%d/0x%X, OP=%d, " + "p/e/dA=%d/%d/0x%X, OP=%d, " "STS=0x%X", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_tpmInfo.operation, stsReg.value ); @@ -1723,15 +1691,16 @@ errlHndl_t tpmPollForDataAvail( tpm_info_t i_tpmInfo) * @reasoncode TPM_TIMEOUT * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_POLLFORDATAAVAIL - * @userdata1 Attribute Chip Type Enum + * @userdata1 TPM * @userdata2 STS Reg * @devdesc Timeout waiting for TPM data available. + * @custdesc TPM operation failure */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, TPMDD_POLLFORDATAAVAIL, TPM_TIMEOUT, - i_tpmInfo.chip, + TARGETING::get_huid(i_tpmInfo.tpmTarget), stsReg.value, true /*Add HB SW Callout*/ ); @@ -1875,9 +1844,9 @@ errlHndl_t tpmWriteFifo( tpm_info_t i_tpmInfo, // TPM is not expecting more data, we overflowed TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmWriteFifo(): Data Overflow! " - "C-p/e/dA=%d-%d/%d/0x%X, blen=%d, " + "p/e/dA=%d/%d/0x%X, blen=%d, " "clen=%d", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_buflen, curByte); @@ -1886,22 +1855,21 @@ errlHndl_t tpmWriteFifo( tpm_info_t i_tpmInfo, * @reasoncode TPM_OVERFLOW_ERROR * @severity ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_WRITEFIFO - * @userdata1[0:31] Current byte - * @userdata1[32:63] Buffer Length (in Bytes) - * @userdata2 8 bytes of command buffer + * @userdata1 TPM + * @userdata2[0:31] Current byte + * @userdata2[32:63] Buffer Length (in Bytes) * @devdesc TPM expected less data during FIFO write * @custdesc A problem occurred during the IPL of the * system: TPM overflow */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, - TPMDD_WRITEFIFO, - TPM_OVERFLOW_ERROR, - TWO_UINT32_TO_UINT64( - curByte, - i_buflen ), - *(reinterpret_cast<uint64_t*> - (i_buffer)), - true /*Add HB SW Callout*/ ); + TPMDD_WRITEFIFO, + TPM_OVERFLOW_ERROR, + TARGETING::get_huid(i_tpmInfo.tpmTarget), + TWO_UINT32_TO_UINT64( + curByte, + i_buflen ), + true /*Add HB SW Callout*/ ); err->collectTrace( TPMDD_COMP_NAME ); } @@ -1962,9 +1930,9 @@ errlHndl_t tpmWriteFifo( tpm_info_t i_tpmInfo, { TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmWriteFifo(): Timeout! " - "C-p/e/dA=%d-%d/%d/0x%X, blen=%d, " + "p/e/dA=%d/%d/0x%X, blen=%d, " "clen=%d", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_buflen, curByte); @@ -1973,9 +1941,9 @@ errlHndl_t tpmWriteFifo( tpm_info_t i_tpmInfo, * @reasoncode TPM_TIMEOUT * @severity ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_WRITEFIFO - * @userdata1[0:31] Current Byte - * @userdata1[32:63] Buffer Length (in Bytes) - * @userdata2 8 bytes of command buffer + * @userdata1 TPM + * @userdata2[0:31] Current Byte + * @userdata2[32:63] Buffer Length (in Bytes) * @devdesc TPM timeout writing to FIFO * @custdesc A problem occurred during the IPL of the * system: TPM timeout @@ -1983,11 +1951,10 @@ errlHndl_t tpmWriteFifo( tpm_info_t i_tpmInfo, err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, TPMDD_WRITEFIFO, TPM_TIMEOUT, + TARGETING::get_huid(i_tpmInfo.tpmTarget), TWO_UINT32_TO_UINT64( curByte, i_buflen ), - *(reinterpret_cast<uint64_t*> - (i_buffer)), true /*Add HB SW Callout*/ ); err->collectTrace( TPMDD_COMP_NAME ); @@ -2005,9 +1972,9 @@ errlHndl_t tpmWriteFifo( tpm_info_t i_tpmInfo, // TPM is expecting more data even though we think we are done TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmWriteFifo(): Data Underflow! " - "C-p/e/dA=%d-%d/%d/0x%X, blen=%d, " + "p/e/dA=%d/%d/0x%X, blen=%d, " "clen=%d", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, i_buflen, curByte); @@ -2016,22 +1983,21 @@ errlHndl_t tpmWriteFifo( tpm_info_t i_tpmInfo, * @reasoncode TPM_UNDERFLOW_ERROR * @severity ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_WRITEFIFO - * @userdata1[0:31] Current Byte - * @userdata1[32:63] Buffer Length (in Bytes) - * @userdata2 8 bytes of command buffer + * @userdata1 TPM + * @userdata2[0:31] Current Byte + * @userdata2[32:63] Buffer Length (in Bytes) * @devdesc TPM expected more data during FIFO write * @custdesc A problem occurred during the IPL of the * system: TPM underflow */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, - TPMDD_WRITEFIFO, - TPM_UNDERFLOW_ERROR, - TWO_UINT32_TO_UINT64( - curByte, - i_buflen ), - *(reinterpret_cast<uint64_t*> - (i_buffer)), - true /*Add HB SW Callout*/ ); + TPMDD_WRITEFIFO, + TPM_UNDERFLOW_ERROR, + TARGETING::get_huid(i_tpmInfo.tpmTarget), + TWO_UINT32_TO_UINT64( + curByte, + i_buflen ), + true /*Add HB SW Callout*/ ); err->collectTrace( TPMDD_COMP_NAME ); } @@ -2083,9 +2049,9 @@ errlHndl_t tpmReadFifo( tpm_info_t i_tpmInfo, // TPM is expecting more data even though we think we are done TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmReadFifo(): Data Overflow! " - "C-p/e/dA=%d-%d/%d/0x%X, blen=%d, " + "p/e/dA=%d/%d/0x%X, blen=%d, " "clen=%d", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, io_buflen, curByte + burstCount); @@ -2094,22 +2060,24 @@ errlHndl_t tpmReadFifo( tpm_info_t i_tpmInfo, * @reasoncode TPM_OVERFLOW_ERROR * @severity ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_READFIFO - * @userdata1[0:31] Operation - * @userdata1[32:63] Buffer Length (in Bytes) - * @userdata2 Current Byte + * @userdata1 TPM + * @userdata2[0:15] Operation + * @userdata2[16:31] Current Byte + * @userdata2[32:63] Buffer Length (in Bytes) * @devdesc TPM provided more data during FIFO read * then buffer space provided * @custdesc A problem occurred during the IPL of the * system: TPM overflow */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, - TPMDD_READFIFO, - TPM_OVERFLOW_ERROR, - TWO_UINT32_TO_UINT64( - i_tpmInfo.operation, - io_buflen ), - curByte, - true /*Add HB SW Callout*/ ); + TPMDD_READFIFO, + TPM_OVERFLOW_ERROR, + TARGETING::get_huid(i_tpmInfo.tpmTarget), + TWO_UINT32_TO_UINT64( + TWO_UINT16_TO_UINT32(i_tpmInfo.operation, + curByte), + io_buflen), + true /*Add HB SW Callout*/ ); err->collectTrace( TPMDD_COMP_NAME ); break; @@ -2144,9 +2112,9 @@ errlHndl_t tpmReadFifo( tpm_info_t i_tpmInfo, { TRACFCOMP( g_trac_tpmdd, ERR_MRK"tpmReadFifo(): Timeout! " - "C-p/e/dA=%d-%d/%d/0x%X, blen=%d, " + "p/e/dA=%d/%d/0x%X, blen=%d, " "clen=%d", - i_tpmInfo.chip, i_tpmInfo.port, + i_tpmInfo.port, i_tpmInfo.engine, i_tpmInfo.devAddr, io_buflen, curByte); @@ -2155,21 +2123,23 @@ errlHndl_t tpmReadFifo( tpm_info_t i_tpmInfo, * @reasoncode TPM_TIMEOUT * @severity ERRL_SEV_UNRECOVERABLE * @moduleid TPMDD_READFIFO - * @userdata1[0:31] Operation - * @userdata1[32:63] Buffer Length (in Bytes) - * @userdata2 Current Byte + * @userdata1 TPM + * @userdata2[0:15] Operation + * @userdata2[16:31] Current Byte + * @userdata2[32:63] Buffer Length (in Bytes) * @devdesc TPM timeout writing to FIFO * @custdesc A problem occurred during the IPL of the * system: TPM timeout */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, - TPMDD_READ, - TPM_TIMEOUT, - TWO_UINT32_TO_UINT64( - i_tpmInfo.operation, - io_buflen ), - curByte, - true /*Add HB SW Callout*/ ); + TPMDD_READ, + TPM_TIMEOUT, + TARGETING::get_huid(i_tpmInfo.tpmTarget), + TWO_UINT32_TO_UINT64( + TWO_UINT16_TO_UINT32(i_tpmInfo.operation, + curByte), + io_buflen), + true /*Add HB SW Callout*/ ); err->collectTrace( TPMDD_COMP_NAME ); } diff --git a/src/usr/i2c/tpmdd.H b/src/usr/i2c/tpmdd.H index 1daee5ab6..2529288d7 100755 --- a/src/usr/i2c/tpmdd.H +++ b/src/usr/i2c/tpmdd.H @@ -466,6 +466,28 @@ errlHndl_t tpmWriteFifo( tpm_info_t i_tpmInfo, errlHndl_t tpmReadFifo( tpm_info_t i_tpmInfo, void * o_buffer, size_t & io_buflen); +/** + * @brief Performs a presence detect operation on a TPM Chip. + * This is used for the discoverTargets path and called TPMDD::tpmPresence + * + * @param[in] i_opType Operation type, see DeviceFW::OperationType + * in driverif.H + * @param[in] i_target Presence detect target + * @param[in/out] io_buffer Read: Pointer to output data storage + * Write: Pointer to input data storage + * @param[in/out] io_buflen Input: size of io_buffer (in bytes, always 1) + * Output: Success = 1, Failure = 0 + * @param[in] i_accessType DeviceFW::AccessType enum (userif.H) + * @param[in] i_args This is an argument list for DD framework. + * In this function, there are no arguments. + * @return errlHndl_t + */ +errlHndl_t tpmPresenceDetect(DeviceFW::OperationType i_opType, + TARGETING::Target* i_target, + void* io_buffer, + size_t& io_buflen, + int64_t i_accessType, + va_list i_args); }; // end TPMDD namespace |

