summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChris Engel <cjengel@us.ibm.com>2016-07-13 16:10:54 -0500
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2016-08-22 13:47:05 -0400
commitb692f91c173ca684b557b8f76d268720e58b36a4 (patch)
tree6f100e0f80e5bc60b69824441e266e1da69e6760 /src
parent984f7f35a02e4894c8cb448223bea8d53b64f459 (diff)
downloadtalos-hostboot-b692f91c173ca684b557b8f76d268720e58b36a4.tar.gz
talos-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')
-rw-r--r--src/include/usr/devicefw/userif.H6
-rw-r--r--src/include/usr/i2c/tpmddif.H18
-rw-r--r--src/include/usr/i2c/tpmddreasoncodes.H1
-rw-r--r--src/include/usr/secureboot/trustedbootif.H14
-rw-r--r--src/usr/devtree/bld_devtree.C13
-rw-r--r--src/usr/hwas/common/hwas.C3
-rwxr-xr-xsrc/usr/i2c/test/tpmddtest.H249
-rwxr-xr-xsrc/usr/i2c/tpmdd.C452
-rwxr-xr-xsrc/usr/i2c/tpmdd.H22
-rwxr-xr-xsrc/usr/secureboot/trusted/test/trustedbootTest.H64
-rw-r--r--src/usr/secureboot/trusted/tpmLogMgr.C12
-rw-r--r--src/usr/secureboot/trusted/trustedTypes.H3
-rw-r--r--src/usr/secureboot/trusted/trustedboot.C158
-rw-r--r--src/usr/secureboot/trusted/trustedboot.H14
-rw-r--r--src/usr/secureboot/trusted/trustedbootUtils.C7
-rw-r--r--src/usr/targeting/common/Targets.pm12
-rw-r--r--src/usr/targeting/common/xmltohb/attribute_types.xml124
-rw-r--r--src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml14
-rwxr-xr-xsrc/usr/targeting/common/xmltohb/target_types.xml2
-rw-r--r--src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml25
20 files changed, 511 insertions, 702 deletions
diff --git a/src/include/usr/devicefw/userif.H b/src/include/usr/devicefw/userif.H
index 970a747a6..59e812d8a 100644
--- a/src/include/usr/devicefw/userif.H
+++ b/src/include/usr/devicefw/userif.H
@@ -304,15 +304,13 @@ namespace DeviceFW
/**
* Construct the device addressing parameters for the TPM device ops.
- * @param[in] i_tpm_enum The chip number of the TPM to access. See
- * tpm_chip_types_t in tpmddif.H
* @param[in] i_tpm_operation The TPM operation to perform. See
* tpm_op_types_t in tpmddif.H
* @param[in] i_command_len Command length to write during transmit
* operations
*/
- #define DEVICE_TPM_ADDRESS( i_tpm_enum, i_tpm_op, i_command_len )\
- DeviceFW::TPM, static_cast<uint64_t>(( i_tpm_enum )),\
+ #define DEVICE_TPM_ADDRESS( i_tpm_op, i_command_len )\
+ DeviceFW::TPM,\
static_cast<uint64_t>(( i_tpm_op )),\
static_cast<uint64_t>(( i_command_len ))
diff --git a/src/include/usr/i2c/tpmddif.H b/src/include/usr/i2c/tpmddif.H
index fe8bd0c4a..67602c2be 100644
--- a/src/include/usr/i2c/tpmddif.H
+++ b/src/include/usr/i2c/tpmddif.H
@@ -29,17 +29,6 @@ namespace TPMDD
{
/**
- * @brief Enumerations to select TPM
-*/
-enum tpm_chip_types_t
-{
- TPM_PRIMARY = 0,
- TPM_BACKUP = 1,
- LAST_CHIP_TYPE,
- FIRST_CHIP_TYPE = TPM_PRIMARY
-};
-
-/**
* @brief TPM Operation to perform
*/
enum tpm_op_types_t
@@ -68,12 +57,12 @@ struct tpm_info_t
{
tpm_op_types_t operation; ///< TPM operation to perform
TARGETING::EntityPath i2cMasterPath; ///< I2C Master path
- TARGETING::Target * i2cTarget; ///< I2C Target
+ TARGETING::Target * i2cTarget; ///< I2C Master Target
+ TARGETING::Target * tpmTarget; ///< TPM Target
uint64_t busFreq; ///< Bus speed in Hz
uint8_t port; ///< I2C Master port
uint8_t engine; ///< I2C Master engine
- uint8_t chip; ///< Chip target, primary/backup
uint8_t tpmEnabled; ///< TPM attribute defined as available
uint8_t devAddr; ///< I2C Address
size_t offset; ///< TPM Device register offset
@@ -90,8 +79,7 @@ struct tpm_info_t
*
* @return true if device is present
*/
-bool tpmPresence ( TARGETING::Target * i_target,
- tpm_chip_types_t i_chip );
+bool tpmPresence ( TARGETING::Target * i_target);
/**
* @brief this function will read all of the associated attributes needed
diff --git a/src/include/usr/i2c/tpmddreasoncodes.H b/src/include/usr/i2c/tpmddreasoncodes.H
index 7bd2df1cf..d9abeec67 100644
--- a/src/include/usr/i2c/tpmddreasoncodes.H
+++ b/src/include/usr/i2c/tpmddreasoncodes.H
@@ -59,6 +59,7 @@ enum tpmModuleId
TPMDD_WRITEFIFO = 0x09,
TPMDD_READFIFO = 0x0A,
TPMDD_READSTSREGVALID = 0x0B,
+ TPMDD_TPMPRESENCEDETECT = 0x0C,
};
/**
diff --git a/src/include/usr/secureboot/trustedbootif.H b/src/include/usr/secureboot/trustedbootif.H
index 27dd1e8d4..21ab262a6 100644
--- a/src/include/usr/secureboot/trustedbootif.H
+++ b/src/include/usr/secureboot/trustedbootif.H
@@ -42,11 +42,21 @@ namespace TRUSTEDBOOT
{
struct _TpmLogMgr;
+ /// Enumerations to select TPM
+ typedef enum
+ {
+ TPM_PRIMARY = 0,
+ TPM_BACKUP = 1,
+ LAST_CHIP_TYPE,
+ FIRST_CHIP_TYPE = TPM_PRIMARY
+ } TPM_role;
+
+
/// Track system TPM status
struct TpmTarget
{
- TARGETING::Target* nodeTarget; ///< Node target ptr
- TPMDD::tpm_chip_types_t chip; ///< Chip Pri vs Backup
+ TARGETING::Target* tpmTarget; ///< TPM target ptr
+ TPM_role role; ///< Pri vs Backup
uint8_t initAttempted:1;///< Has TPM init been run
uint8_t available:1; ///< Is TPM physically in system
uint8_t failed:1; ///< Is TPM currently failed
diff --git a/src/usr/devtree/bld_devtree.C b/src/usr/devtree/bld_devtree.C
index bdadb35eb..ee2b15505 100644
--- a/src/usr/devtree/bld_devtree.C
+++ b/src/usr/devtree/bld_devtree.C
@@ -486,8 +486,7 @@ void add_i2c_info( const TARGETING::Target* i_targ,
{
// Lookup i2c info for the TPM
- tpmInfo.chip = tpm->chip;
- err = TPMDD::tpmReadAttributes(tpm->nodeTarget, tpmInfo);
+ err = TPMDD::tpmReadAttributes(tpm->tpmTarget, tpmInfo);
if (NULL != err)
{
// Unable to get info we skip this guy
@@ -557,17 +556,16 @@ void add_i2c_info( const TARGETING::Target* i_targ,
dtOffset_t l_tpmNode = i_dt->addNode( l_busNode,
"tpm",
tpmInfo.devAddr >> 1 );
- TRACFCOMP( g_trac_devtree, "TPM NODE %X", l_tpmNode );
i_dt->addPropertyCell32(l_tpmNode, "reg",
tpmInfo.devAddr >> 1);
char l_label[30];
- switch (tpm->chip)
+ switch (tpm->role)
{
- case TPMDD::TPM_PRIMARY:
+ case TRUSTEDBOOT::TPM_PRIMARY:
sprintf( l_label, "tpm" );
break;
- case TPMDD::TPM_BACKUP:
+ case TRUSTEDBOOT::TPM_BACKUP:
sprintf( l_label, "tpm-backup" );
break;
default:
@@ -1310,8 +1308,7 @@ void load_tpmlog(devTree * i_dt, uint64_t& io_address)
// We need to build the devtree path to find this TPM node
// Lookup i2c info for the TPM
- l_tpmInfo.chip = l_tpm->chip;
- l_errl = TPMDD::tpmReadAttributes(l_tpm->nodeTarget, l_tpmInfo);
+ l_errl = TPMDD::tpmReadAttributes(l_tpm->tpmTarget, l_tpmInfo);
if (l_errl)
{
errlCommit(l_errl, DEVTREE_COMP_ID);
diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C
index 0daea5577..ec565272c 100644
--- a/src/usr/hwas/common/hwas.C
+++ b/src/usr/hwas/common/hwas.C
@@ -293,7 +293,8 @@ errlHndl_t discoverTargets()
uint16_t pgData[VPD_CP00_PG_DATA_LENGTH / sizeof(uint16_t)];
bzero(pgData, sizeof(pgData));
- if (pTarget->getAttr<ATTR_CLASS>() == CLASS_CHIP)
+ if (pTarget->getAttr<ATTR_CLASS>() == CLASS_CHIP &&
+ pTarget->getAttr<ATTR_TYPE>() != TYPE_TPM)
{
// read Chip ID/EC data from these physical chips
errl = platReadIDEC(pTarget);
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
diff --git a/src/usr/secureboot/trusted/test/trustedbootTest.H b/src/usr/secureboot/trusted/test/trustedbootTest.H
index e8b062ad7..e46a8ff4f 100755
--- a/src/usr/secureboot/trusted/test/trustedbootTest.H
+++ b/src/usr/secureboot/trusted/test/trustedbootTest.H
@@ -38,6 +38,9 @@
#include <errl/errlentry.H>
#include <i2c/tpmddif.H>
#include <secureboot/trustedbootif.H>
+#include <targeting/common/predicates/predicates.H>
+#include <targeting/common/attributes.H>
+#include <targeting/common/utilFilter.H>
#include "../trustedTypes.H"
#include "../trustedboot.H"
#include "../trustedbootCmds.H"
@@ -691,7 +694,6 @@ class TrustedBootTest: public CxxTest::TestSuite
*/
TRUSTEDBOOT::TpmTarget getTestTarget()
{
- TARGETING::TargetService& tS = TARGETING::targetService();
TRUSTEDBOOT::TpmTarget target;
TPMDD::tpm_info_t tpmInfo;
@@ -699,37 +701,41 @@ class TrustedBootTest: public CxxTest::TestSuite
target.initAttempted = true;
target.failed = false;
- tS.getMasterNodeTarget( target.nodeTarget );
-
- assert(target.nodeTarget != NULL);
+ TARGETING::TargetHandleList tpmList;
+ TARGETING::getAllChips(tpmList,
+ TARGETING::TYPE_TPM,
+ false);
+ if (tpmList.size() > 0)
+ {
+ target.tpmTarget = tpmList[0];
- TRACFCOMP( g_trac_trustedboot,
- "getTestTarget node tgt=0x%X chip=%d",
- TARGETING::get_huid(target.nodeTarget));
+ TRACFCOMP( g_trac_trustedboot,
+ "getTestTarget tpm tgt=0x%X",
+ TARGETING::get_huid(target.tpmTarget));
- // Let's see if the requested chip is functional
- target.chip = TPMDD::TPM_PRIMARY;
- tpmInfo.chip = TPMDD::TPM_PRIMARY;
- errlHndl_t err = tpmReadAttributes (target.nodeTarget,
- tpmInfo);
+ // Let's see if the requested chip is functional
+ target.role = TPM_PRIMARY;
+ errlHndl_t err = tpmReadAttributes (target.tpmTarget,
+ tpmInfo);
- if (NULL != err)
- {
- target.failed = true;
- delete err;
- }
- else if (!tpmInfo.tpmEnabled)
- {
- TRACFCOMP(g_trac_trustedboot, "getTestTarget - "
- "Chip %d not enabled",
- tpmInfo.chip);
- target.failed = true;
- }
- else
- {
- TRACFCOMP(g_trac_trustedboot, "getTestTarget - "
- "Chip %d enabled",
- target.chip);
+ if (NULL != err)
+ {
+ target.failed = true;
+ delete err;
+ }
+ else if (!tpmInfo.tpmEnabled)
+ {
+ TRACFCOMP(g_trac_trustedboot, "getTestTarget - "
+ "Chip %d not enabled",
+ target.role);
+ target.failed = true;
+ }
+ else
+ {
+ TRACFCOMP(g_trac_trustedboot, "getTestTarget - "
+ "Chip %d enabled",
+ target.role);
+ }
}
return target;
diff --git a/src/usr/secureboot/trusted/tpmLogMgr.C b/src/usr/secureboot/trusted/tpmLogMgr.C
index b291d935f..89ab41a8a 100644
--- a/src/usr/secureboot/trusted/tpmLogMgr.C
+++ b/src/usr/secureboot/trusted/tpmLogMgr.C
@@ -83,6 +83,7 @@ namespace TRUSTEDBOOT
* @userdata1 0
* @userdata2 0
* @devdesc TPM log buffer init failure.
+ * @custdesc TPM log buffer init failure.
*/
err = tpmCreateErrorLog( MOD_TPMLOGMGR_INITIALIZE,
RC_TPMLOGMGR_INIT_FAIL, 0, 0);
@@ -177,6 +178,7 @@ namespace TRUSTEDBOOT
* @userdata1 0
* @userdata2 0
* @devdesc TPM log header entry is missing.
+ * @custdesc TPM log invalid format
*/
err = tpmCreateErrorLog(MOD_TPMLOGMGR_INITIALIZEEXISTLOG,
RC_TPMLOGMGR_LOGWALKFAIL,
@@ -235,13 +237,16 @@ namespace TRUSTEDBOOT
* @reasoncode RC_TPMLOGMGR_ADDEVENT_FAIL
* @severity ERRL_SEV_UNRECOVERABLE
* @moduleid MOD_TPMLOGMGR_ADDEVENT
- * @userdata1 Log buffer NULL
- * @userdata2[0:31] Current Log Size
+ * @userdata1[0:31] Max log size
+ * @userdata1[32:63] Log buffer NULL
+ * @userdata2[0:31] Current Log Size
* @userdata2[32:63] New entry size
* @devdesc TPM log buffer add failure.
+ * @custdesc TPM log overflow
*/
err = tpmCreateErrorLog( MOD_TPMLOGMGR_ADDEVENT,
RC_TPMLOGMGR_ADDEVENT_FAIL,
+ (uint64_t)val->logMaxSize << 32 |
(NULL == val->newEventPtr ? 0 : 1),
(uint64_t)val->logSize << 32 |
newLogSize);
@@ -264,7 +269,8 @@ namespace TRUSTEDBOOT
* @moduleid MOD_TPMLOGMGR_ADDEVENT
* @userdata1 0
* @userdata2 0
- * @devdesc log buffer malloc failure.
+ * @devdesc log buffer marshal failure.
+ * @custdesc TPM log operation failure
*/
err = tpmCreateErrorLog( MOD_TPMLOGMGR_ADDEVENT,
RC_TPMLOGMGR_ADDEVENTMARSH_FAIL,
diff --git a/src/usr/secureboot/trusted/trustedTypes.H b/src/usr/secureboot/trusted/trustedTypes.H
index 00effcd1c..dd42ccaae 100644
--- a/src/usr/secureboot/trusted/trustedTypes.H
+++ b/src/usr/secureboot/trusted/trustedTypes.H
@@ -71,9 +71,6 @@ namespace TRUSTEDBOOT
/// Common static values
enum
{
- MAX_SYSTEM_TPMS = 2,
- TPM_MASTER_INDEX = 0, ///< Index into tpm array for master chip
- TPM_BACKUP_INDEX = 1, ///< Index for backup TPM
MAX_TPM_LOG_MSG = 128, ///< Maximum log message size
HASH_COUNT = 2, ///< Maximum # of digests
diff --git a/src/usr/secureboot/trusted/trustedboot.C b/src/usr/secureboot/trusted/trustedboot.C
index f2776adfd..618fb81cc 100644
--- a/src/usr/secureboot/trusted/trustedboot.C
+++ b/src/usr/secureboot/trusted/trustedboot.C
@@ -83,9 +83,9 @@ errlHndl_t getTpmLogDevtreeInfo(TpmTarget & i_target,
{
errlHndl_t err = NULL;
TRACUCOMP( g_trac_trustedboot,
- ENTER_MRK"getTpmLogDevtreeInfo() Chip:%d Addr:%lX %lX",
- i_target.chip, io_logAddr
- ,(uint64_t)(i_target.logMgr));
+ ENTER_MRK"getTpmLogDevtreeInfo() tgt=0x%X Addr:%lX %lX",
+ TARGETING::get_huid(i_target.tpmTarget),
+ io_logAddr ,(uint64_t)(i_target.logMgr));
o_allocationSize = 0;
@@ -108,9 +108,10 @@ void setTpmDevtreeInfo(TpmTarget & i_target,
uint32_t i_i2cMasterOffset)
{
TRACUCOMP( g_trac_trustedboot,
- ENTER_MRK"setTpmLogDevtreeOffset() Chip:%d "
+ ENTER_MRK"setTpmLogDevtreeOffset() tgt=0x%X "
"Xscom:%lX Master:%X",
- i_target.chip, i_xscomAddr, i_i2cMasterOffset);
+ TARGETING::get_huid(i_target.tpmTarget),
+ i_xscomAddr, i_i2cMasterOffset);
if (NULL != i_target.logMgr)
{
@@ -154,36 +155,92 @@ void* host_update_master_tpm( void *io_pArgs )
do
{
- // Get a node Target
TARGETING::TargetService& tS = TARGETING::targetService();
- TARGETING::Target* nodeTarget = NULL;
- tS.getMasterNodeTarget( nodeTarget );
- if (nodeTarget == NULL)
- break;
+ TARGETING::Target* procTarget = NULL;
+ err = tS.queryMasterProcChipTargetHandle( procTarget );
- // Skip this target if target is non-functional
- if(!nodeTarget->getAttr<TARGETING::ATTR_HWAS_STATE>(). \
- functional)
+ if (NULL != err)
{
- continue;
+ break;
}
+ // Now get all TPM's to setup our array
+ TARGETING::TargetHandleList tpmList;
+ TARGETING::getAllChips(tpmList,
+ TARGETING::TYPE_TPM,
+ true); // ONLY FUNCTIONAL
+
+ // Currently we only support a MAX of two TPMS
+ assert(tpmList.size() <= 2, "Too many TPMs found");
+
mutex_lock( &(systemTpms.tpm[TPM_MASTER_INDEX].tpmMutex) );
+ mutex_lock( &(systemTpms.tpm[TPM_BACKUP_INDEX].tpmMutex) );
unlock = true;
+ systemTpms.tpm[TPM_MASTER_INDEX].role = TPM_PRIMARY;
+ systemTpms.tpm[TPM_BACKUP_INDEX].role = TPM_BACKUP;
+
+ if (0 == tpmList.size())
+ {
+ TRACFCOMP( g_trac_trustedboot,
+ "No TPM Targets found");
+ systemTpms.tpm[TPM_MASTER_INDEX].initAttempted = true;
+ systemTpms.tpm[TPM_MASTER_INDEX].available = false;
+ systemTpms.tpm[TPM_BACKUP_INDEX].initAttempted = true;
+ systemTpms.tpm[TPM_BACKUP_INDEX].available = false;
+ }
+ else
+ {
+ // Loop through the TPMs and figure out if they are attached
+ // to the master or alternate processor
+ TPMDD::tpm_info_t tpmData;
+ size_t tpmIdx = TPM_MASTER_INDEX;
+ for (size_t tpmNum = 0; tpmNum < tpmList.size(); tpmNum++)
+ {
+ memset(&tpmData, 0, sizeof(tpmData));
+ errlHndl_t readErr = tpmReadAttributes(tpmList[tpmNum],
+ tpmData);
+ if (NULL != readErr)
+ {
+ // We are just looking for configured TPMs here
+ // so we ignore any errors
+ delete readErr;
+ readErr = NULL;
+ }
+ else
+ {
+ // Is the i2c master of this TPM also the master proc?
+ tpmIdx = (tpmData.i2cTarget == procTarget) ?
+ TPM_MASTER_INDEX : TPM_BACKUP_INDEX;
+
+ if (NULL != systemTpms.tpm[tpmIdx].tpmTarget)
+ {
+ TRACFCOMP( g_trac_trustedboot,
+ "Duplicate TPM target found %d",tpmIdx);
+ }
+ else
+ {
+ systemTpms.tpm[tpmIdx].tpmTarget = tpmList[tpmNum];
+ systemTpms.tpm[tpmIdx].available = true;
+ }
+ }
+
+ }
+ }
+
if (!systemTpms.tpm[TPM_MASTER_INDEX].failed &&
- TPMDD::tpmPresence(nodeTarget, TPMDD::TPM_PRIMARY))
+ systemTpms.tpm[TPM_MASTER_INDEX].available &&
+ NULL != systemTpms.tpm[TPM_MASTER_INDEX].tpmTarget &&
+ TPMDD::tpmPresence(systemTpms.tpm[TPM_MASTER_INDEX].tpmTarget))
{
// Initialize the TPM, this will mark it as non-functional on fail
- tpmInitialize(systemTpms.tpm[TPM_MASTER_INDEX],
- nodeTarget,
- TPMDD::TPM_PRIMARY);
+ tpmInitialize(systemTpms.tpm[TPM_MASTER_INDEX]);
}
else
{
- // TPM doesn't exist in the system
+ // Master TPM doesn't exist in the system
systemTpms.tpm[TPM_MASTER_INDEX].initAttempted = true;
systemTpms.tpm[TPM_MASTER_INDEX].available = false;
}
@@ -220,14 +277,14 @@ void* host_update_master_tpm( void *io_pArgs )
* @reasoncode RC_TPM_EXISTENCE_FAIL
* @severity ERRL_SEV_UNRECOVERABLE
* @moduleid MOD_HOST_UPDATE_MASTER_TPM
- * @userdata1 node
+ * @userdata1 0
* @userdata2 0
* @devdesc No TPMs found in system.
*/
err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE,
MOD_HOST_UPDATE_MASTER_TPM,
RC_TPM_EXISTENCE_FAIL,
- TARGETING::get_huid(nodeTarget),
+ 0,
0,
true /*Add HB SW Callout*/ );
@@ -238,31 +295,36 @@ void* host_update_master_tpm( void *io_pArgs )
// Lastly we will check on the backup TPM and see if it is enabled
// in the attributes at least
- TPMDD::tpm_info_t tpmInfo;
- tpmInfo.chip = TPMDD::TPM_BACKUP;
- errlHndl_t tmpErr = TPMDD::tpmReadAttributes(nodeTarget, tpmInfo);
- if (NULL != tmpErr)
+ if (NULL == systemTpms.tpm[TPM_BACKUP_INDEX].tpmTarget)
{
- // We don't want to log this error we will just assume
- // the backup doesn't exist
- delete tmpErr;
- tmpErr = NULL;
TRACUCOMP( g_trac_trustedboot,
- "host_update_master_tpm() tgt=0x%X "
+ "host_update_master_tpm() "
"Marking backup TPM unavailable "
- "due to attribute fail",
- TARGETING::get_huid(nodeTarget));
+ "due to attribute fail");
systemTpms.tpm[TPM_BACKUP_INDEX].available = false;
systemTpms.tpm[TPM_BACKUP_INDEX].initAttempted = true;
}
- else if (!tpmInfo.tpmEnabled)
+ else
{
- TRACUCOMP( g_trac_trustedboot,
- "host_update_master_tpm() tgt=0x%X "
- "Marking backup TPM unavailable",
- TARGETING::get_huid(nodeTarget));
- systemTpms.tpm[TPM_BACKUP_INDEX].available = false;
- systemTpms.tpm[TPM_BACKUP_INDEX].initAttempted = true;
+ TPMDD::tpm_info_t tpmInfo;
+ memset(&tpmInfo, 0, sizeof(tpmInfo));
+ errlHndl_t tmpErr = TPMDD::tpmReadAttributes(
+ systemTpms.tpm[TPM_BACKUP_INDEX].tpmTarget,
+ tpmInfo);
+ if (NULL != tmpErr || !tpmInfo.tpmEnabled)
+ {
+ TRACUCOMP( g_trac_trustedboot,
+ "host_update_master_tpm() "
+ "Marking backup TPM unavailable");
+ systemTpms.tpm[TPM_BACKUP_INDEX].available = false;
+ systemTpms.tpm[TPM_BACKUP_INDEX].initAttempted = true;
+ if (NULL != tmpErr)
+ {
+ // Ignore attribute read failure
+ delete tmpErr;
+ tmpErr = NULL;
+ }
+ }
}
} while ( 0 );
@@ -270,6 +332,7 @@ void* host_update_master_tpm( void *io_pArgs )
if( unlock )
{
mutex_unlock(&(systemTpms.tpm[TPM_MASTER_INDEX].tpmMutex));
+ mutex_unlock(&(systemTpms.tpm[TPM_BACKUP_INDEX].tpmMutex));
}
if (NULL == err)
@@ -304,28 +367,22 @@ void* host_update_master_tpm( void *io_pArgs )
}
-void tpmInitialize(TRUSTEDBOOT::TpmTarget & io_target,
- TARGETING::Target* i_nodeTarget,
- TPMDD::tpm_chip_types_t i_chip)
+void tpmInitialize(TRUSTEDBOOT::TpmTarget & io_target)
{
errlHndl_t err = NULL;
TRACDCOMP( g_trac_trustedboot,
ENTER_MRK"tpmInitialize()" );
TRACUCOMP( g_trac_trustedboot,
- ENTER_MRK"tpmInitialize() tgt=0x%X chip=%d",
- TARGETING::get_huid(io_target.nodeTarget),
- io_target.chip);
+ ENTER_MRK"tpmInitialize() tgt=0x%X",
+ TARGETING::get_huid(io_target.tpmTarget));
do
{
// TPM Initialization sequence
- io_target.nodeTarget = i_nodeTarget;
- io_target.chip = i_chip;
io_target.initAttempted = true;
- io_target.available = true;
io_target.failed = false;
// TPM_STARTUP
@@ -626,9 +683,8 @@ void tpmMarkFailed(TpmTarget * io_target)
TRACFCOMP( g_trac_trustedboot,
ENTER_MRK"tpmMarkFailed() Marking TPM as failed : "
- "tgt=0x%X chip=%d",
- TARGETING::get_huid(io_target->nodeTarget),
- io_target->chip);
+ "tgt=0x%X",
+ TARGETING::get_huid(io_target->tpmTarget));
io_target->failed = true;
/// @todo RTC:125287 Add fail marker to TPM log and disable TPM access
diff --git a/src/usr/secureboot/trusted/trustedboot.H b/src/usr/secureboot/trusted/trustedboot.H
index 930444f77..e3d987231 100644
--- a/src/usr/secureboot/trusted/trustedboot.H
+++ b/src/usr/secureboot/trusted/trustedboot.H
@@ -55,6 +55,14 @@ extern trace_desc_t* g_trac_trustedboot;
namespace TRUSTEDBOOT
{
+/// Common static values
+enum
+{
+ MAX_SYSTEM_TPMS = 2,
+ TPM_MASTER_INDEX = 0, ///< Index into tpm array for master chip
+ TPM_BACKUP_INDEX = 1, ///< Index for backup TPM
+};
+
/// Class object to store system TPM information
class SystemTpms
{
@@ -75,12 +83,8 @@ public:
/**
* @brief Initialize the targeted TPM
* @param[in/out] io_target Current TPM target structure
- * @param[in] i_nodeTarget Node Target
- * @param[in] i_chip Chip to initialize
*/
-void tpmInitialize(TRUSTEDBOOT::TpmTarget & io_target,
- TARGETING::Target* i_nodeTarget,
- TPMDD::tpm_chip_types_t i_chip);
+void tpmInitialize(TRUSTEDBOOT::TpmTarget & io_target);
/**
* @brief Verify a functional TPM still exists in the system
diff --git a/src/usr/secureboot/trusted/trustedbootUtils.C b/src/usr/secureboot/trusted/trustedbootUtils.C
index 5f140382c..90915030d 100644
--- a/src/usr/secureboot/trusted/trustedbootUtils.C
+++ b/src/usr/secureboot/trusted/trustedbootUtils.C
@@ -63,12 +63,11 @@ errlHndl_t tpmTransmit(TpmTarget * io_target,
do
{
// Send to the TPM
- err = deviceRead(io_target->nodeTarget,
+ err = deviceRead(io_target->tpmTarget,
io_buffer,
i_bufsize,
- DEVICE_TPM_ADDRESS( io_target->chip,
- TPMDD::TPM_OP_TRANSMIT,
- i_cmdSize));
+ DEVICE_TPM_ADDRESS(TPMDD::TPM_OP_TRANSMIT,
+ i_cmdSize));
if (NULL != err)
{
break;
diff --git a/src/usr/targeting/common/Targets.pm b/src/usr/targeting/common/Targets.pm
index 102b9a025..6107f0790 100644
--- a/src/usr/targeting/common/Targets.pm
+++ b/src/usr/targeting/common/Targets.pm
@@ -395,6 +395,7 @@ sub buildAffinity
{
my $self = shift;
my $node = -1;
+ my $tpm = -1;
my $proc = -1;
my $node_phys = "";
my $node_aff = "";
@@ -434,6 +435,17 @@ sub buildAffinity
$self->setHuid($target, 0, $node);
$self->setAttribute($target, "ENTITY_INSTANCE",$node);
}
+ elsif ($type eq "TPM")
+ {
+ $tpm++;
+ $self->{targeting}{SYS}[0]{NODES}[$node]{TPMS}[$tpm]{KEY} = $target;
+ $self->setAttribute($target, "AFFINITY_PATH",
+ "affinity:sys-0/node-$node/tpm-$tpm");
+ $self->setAttribute($target, "PHYS_PATH",
+ "physical:sys-0/node-$node/tpm-$tpm");
+ $self->setHuid($target, 0, $tpm);
+ $self->setAttribute($target, "ENTITY_INSTANCE",$tpm);
+ }
elsif ($type eq "PROC")
{
$proc++;
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index a28dbe786..33916fe69 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -1873,130 +1873,6 @@
</attribute>
<attribute>
- <id>TPM_PRIMARY_INFO</id>
- <description>Information needed to address the TPM slaves</description>
- <complexType>
- <description>Structure to define the addressing for an I2C
- TPM.</description>
- <field>
- <name>tpmEnabled</name>
- <description>Boolean indicating whether this TPM is available
- in the system</description>
- <type>uint8_t</type>
- <default>0x1</default>
- </field>
- <field>
- <name>i2cMasterPath</name>
- <description>Entity path to the chip that contains the I2C
- master</description>
- <type>EntityPath</type>
- <default>physical:sys-0</default>
- </field>
- <field>
- <name>port</name>
- <description>Port from the I2C Master device. This is a 6-bit
- value.</description>
- <type>uint8_t</type>
- <default>0x01</default>
- </field>
- <field>
- <name>devAddrLocality0</name>
- <description>Device address on the I2C bus for Locality 0.
- This is a 7-bit value, but then shifted 1
- bit left.</description>
- <type>uint8_t</type>
- <default>0xAE</default>
- </field>
- <field>
- <name>devAddrLocality4</name>
- <description>Device address on the I2C bus for Locality 4.
- This is a 7-bit value, but then shifted 1
- bit left.</description>
- <type>uint8_t</type>
- <default>0xFF</default>
- </field>
- <field>
- <name>engine</name>
- <description>I2C master engine. This is a 2-bit
- value.</description>
- <type>uint8_t</type>
- <default>0x00</default>
- </field>
- <field>
- <name>byteAddrOffset</name>
- <description>The number of bytes a device requires to set its
- internal address/offset.</description>
- <type>uint8_t</type>
- <default>0x01</default>
- </field>
- </complexType>
- <persistency>non-volatile</persistency>
- <readable/>
-</attribute>
-
-<attribute>
- <id>TPM_BACKUP_INFO</id>
- <description>Information needed to address the TPM slaves</description>
- <complexType>
- <description>Structure to define the addressing for an I2C
- TPM device.</description>
- <field>
- <name>tpmEnabled</name>
- <description>Boolean indicating whether this TPM is available
- in the system</description>
- <type>uint8_t</type>
- <default>0x0</default>
- </field>
- <field>
- <name>i2cMasterPath</name>
- <description>Entity path to the chip that contains the I2C
- master</description>
- <type>EntityPath</type>
- <default>physical:sys-0</default>
- </field>
- <field>
- <name>port</name>
- <description>Port from the I2C Master device. This is a 6-bit
- value.</description>
- <type>uint8_t</type>
- <default>0x01</default>
- </field>
- <field>
- <name>devAddrLocality0</name>
- <description>Device address on the I2C bus for Locality 0.
- This is a 7-bit value, but then shifted 1
- bit left.</description>
- <type>uint8_t</type>
- <default>0xAE</default>
- </field>
- <field>
- <name>devAddrLocality4</name>
- <description>Device address on the I2C bus for Locality 4.
- This is a 7-bit value, but then shifted 1
- bit left.</description>
- <type>uint8_t</type>
- <default>0xFF</default>
- </field>
- <field>
- <name>engine</name>
- <description>I2C master engine. This is a 2-bit
- value.</description>
- <type>uint8_t</type>
- <default>0x00</default>
- </field>
- <field>
- <name>byteAddrOffset</name>
- <description>The number of bytes a device requires to set its
- internal address/offset.</description>
- <type>uint8_t</type>
- <default>0x01</default>
- </field>
- </complexType>
- <persistency>non-volatile</persistency>
- <readable/>
-</attribute>
-
-<attribute>
<id>EC</id>
<description>attribute indicating the chip target's EC level</description>
<simpleType>
diff --git a/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml b/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml
index c92780f04..1d27fd973 100644
--- a/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml
+++ b/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml
@@ -163,19 +163,6 @@
<id>ORDINAL_ID</id>
<default>0</default>
</attribute>
- <attribute>
- <id>TPM_PRIMARY_INFO</id>
- <default>
- <field><id>tpmEnabled</id><value>1</value></field>
- <field><id>i2cMasterPath</id>
- <value>physical:sys-0/node-0/proc-0</value></field>
- <field><id>port</id><value>0</value></field>
- <field><id>devAddrLocality0</id><value>0xAE</value></field>
- <field><id>devAddrLocality4</id><value>0xFF</value></field>
- <field><id>engine</id><value>2</value></field>
- <field><id>byteAddrOffset</id><value>0x01</value></field>
- </default>
- </attribute>
</targetInstance>
<!-- TPMs for node 0 -->
@@ -183,6 +170,7 @@
<targetInstance>
<id>sys0node0tpm0</id>
<type>chip-tpm-cectpm</type>
+ <attribute><id>HUID</id><default>0x00310001</default></attribute>
<attribute><id>POSITION</id><default>0</default></attribute>
<attribute>
<id>PHYS_PATH</id>
diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
index 3751ba486..511f1f25a 100755
--- a/src/usr/targeting/common/xmltohb/target_types.xml
+++ b/src/usr/targeting/common/xmltohb/target_types.xml
@@ -839,8 +839,6 @@
</attribute>
<attribute><id>CDM_DOMAIN</id><default>NODE</default></attribute>
<attribute><id>FRU_ID</id></attribute>
- <attribute><id>TPM_PRIMARY_INFO</id></attribute>
- <attribute><id>TPM_BACKUP_INFO</id></attribute>
<attribute><id>MSS_VOLT_VPP_SLOPE_EFF_CONFIG</id></attribute>
<attribute><id>MSS_VOLT_VPP_INTERCEPT_EFF_CONFIG</id></attribute>
<attribute><id>MSS_VOLT_DDR3_VDDR_SLOPE_EFF_CONFIG</id></attribute>
diff --git a/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml b/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml
index 4bdfd3527..78fee6d6c 100644
--- a/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml
+++ b/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml
@@ -154,12 +154,31 @@
<id>ORDINAL_ID</id>
<default>0</default>
</attribute>
+</targetInstance>
+
+<!-- TPMs for node 0 -->
+
+<targetInstance>
+ <id>sys0node0tpm0</id>
+ <type>chip-tpm-cectpm</type>
+ <attribute><id>HUID</id><default>0x00310001</default></attribute>
+ <attribute><id>POSITION</id><default>0</default></attribute>
+ <attribute>
+ <id>PHYS_PATH</id>
+ <default>physical:sys-0/node-0/tpm-0</default>
+ </attribute>
+ <attribute>
+ <id>AFFINITY_PATH</id>
+ <default>affinity:sys-0/node-0/tpm-0</default>
+ </attribute>
<attribute>
- <id>TPM_PRIMARY_INFO</id>
+ <id>TPM_INFO</id>
<default>
<field><id>tpmEnabled</id><value>1</value></field>
- <field><id>i2cMasterPath</id>
- <value>physical:sys-0/node-0/proc-0</value></field>
+ <field>
+ <id>i2cMasterPath</id>
+ <value>physical:sys-0/node-0/proc-0</value>
+ </field>
<field><id>port</id><value>0</value></field>
<field><id>devAddrLocality0</id><value>0xAE</value></field>
<field><id>devAddrLocality4</id><value>0xFF</value></field>
OpenPOWER on IntegriCloud