summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorMike Baiocchi <mbaiocch@us.ibm.com>2018-02-12 13:42:19 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-02-13 17:09:41 -0500
commit0bfdbce84ec94859d13e35b537cdbb0c3240945c (patch)
treee666e43126628f6762baf01bdeb9de9df909584b /src/usr
parent2a7e12d18b20055c4a1edace45bbcf6eca73234e (diff)
downloadtalos-hostboot-0bfdbce84ec94859d13e35b537cdbb0c3240945c.tar.gz
talos-hostboot-0bfdbce84ec94859d13e35b537cdbb0c3240945c.zip
Update utilDeallocateTces and other TCE Cleanup
This commit removes the size parameter from utilDeallocateTces() as we should be able to use the token parameter to get back the saved size of the region. This commit also cleans up some other minor TCE issues and even fixes one I2C trace. Change-Id: I9ed5695d5ea13d89a22ace9593b5d9dc31a16736 RTC:168745 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53908 Reviewed-by: Nicholas E. Bofferding <bofferdn@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Reviewed-by: Marshall J. Wilks <mjwilks@us.ibm.com> Reviewed-by: ILYA SMIRNOV <ismirno@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr')
-rwxr-xr-xsrc/usr/i2c/i2c.C4
-rwxr-xr-xsrc/usr/targeting/common/xmltohb/attribute_types.xml2
-rw-r--r--src/usr/util/utillidmgr.C5
-rw-r--r--src/usr/util/utiltcemgr.C59
-rw-r--r--src/usr/util/utiltcemgr.H7
5 files changed, 34 insertions, 43 deletions
diff --git a/src/usr/i2c/i2c.C b/src/usr/i2c/i2c.C
index 3b90515db..95074f82d 100755
--- a/src/usr/i2c/i2c.C
+++ b/src/usr/i2c/i2c.C
@@ -2980,8 +2980,8 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
// Even though we don't see the Clock Line High, just
// trace a warning here and continue to send the 'stop' cmd
TRACFCOMP( g_trac_i2c, INFO_MRK"i2cSendSlaveStop(): "
- "Not seeing SCL High 0x%.16llX after 0x%X ns of "
- "polling (max=0x%X)",
+ "Not seeing SCL High 0x%.16llX after %d ns of "
+ "polling (max=%d)",
status_reg.value, delay_ns,
I2C_RESET_POLL_DELAY_TOTAL_NS );
}
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index 132436c19..90fb7b3db 100755
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -7456,7 +7456,7 @@ Selects which voltage level to place the Core and ECO domain PFETs upon Winkle e
<attribute>
<id>USE_TCES_FOR_DMAS</id>
<description>
-<!-- @TODO RTC 168745 Remove This Attribute -->
+<!-- @TODO RTC 187906 Remove This Attribute -->
Specifies whether or not the FSP is ready for Hostboot to enable TCEs
for DMAs for the given IPL. This is a temporary attribute which will
be used to phase-in TCE support.
diff --git a/src/usr/util/utillidmgr.C b/src/usr/util/utillidmgr.C
index 5f329b2d4..81d7f9516 100644
--- a/src/usr/util/utillidmgr.C
+++ b/src/usr/util/utillidmgr.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2017 */
+/* Contributors Listed Below - COPYRIGHT 2013,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -640,8 +640,7 @@ errlHndl_t UtilLidMgr::getLid(void* i_dest, size_t i_destSize)
if (tces_allocated)
{
// Use Preverification Location and Size
- auto tce_errl = TCE::utilDeallocateTces(tceToken,
- tceSize);
+ auto tce_errl = TCE::utilDeallocateTces(tceToken);
if(tce_errl)
{
diff --git a/src/usr/util/utiltcemgr.C b/src/usr/util/utiltcemgr.C
index e61ae4ca5..2f29fee63 100644
--- a/src/usr/util/utiltcemgr.C
+++ b/src/usr/util/utiltcemgr.C
@@ -93,11 +93,9 @@ errlHndl_t utilAllocateTces(const uint64_t i_startingAddress,
// Responsible for deallocating TCEs
//
/************************************************************************/
-errlHndl_t utilDeallocateTces(const uint32_t i_startingToken,
- const size_t i_size)
+errlHndl_t utilDeallocateTces(const uint32_t i_startingToken)
{
- return Singleton<UtilTceMgr>::instance().deallocateTces(i_startingToken,
- i_size);
+ return Singleton<UtilTceMgr>::instance().deallocateTces(i_startingToken);
};
@@ -213,7 +211,6 @@ errlHndl_t utilClosePayloadTces(void)
{
errlHndl_t errl = nullptr;
- size_t size=0x0;
uint32_t token=0x0;
do{
@@ -221,13 +218,11 @@ errlHndl_t utilClosePayloadTces(void)
TRACFCOMP(g_trac_tce,ENTER_MRK"utilClosePayloadTces()");
// Close PAYLOAD TCEs
- // -- size is a constant for PAYLOAD
- size = MCL_TMP_SIZE;
token = Singleton<UtilTceMgr>::instance().getToken(UtilTceMgr::PAYLOAD_TOKEN);
- errl = utilDeallocateTces(token, size);
+ errl = utilDeallocateTces(token);
if (errl)
{
- TRACFCOMP(g_trac_tce,"utilClosePayloadTces(): ERROR back from utilDeallocateTces() using token=0x%.8X, size=0x%llX", token, size);
+ TRACFCOMP(g_trac_tce,"utilClosePayloadTces(): ERROR back from utilDeallocateTces() using token=0x%.8X", token);
break;
}
@@ -243,13 +238,11 @@ errlHndl_t utilClosePayloadTces(void)
}
// Close HDAT TCEs
- // --size is a constant for HDAT
- size = HDAT_TMP_SIZE;
token = Singleton<UtilTceMgr>::instance().getToken(UtilTceMgr::HDAT_TOKEN);
- errl = utilDeallocateTces(token, size);
+ errl = utilDeallocateTces(token);
if (errl)
{
- TRACFCOMP(g_trac_tce,"utilClosePayloadTces(): ERROR back from utilDeallocateTces() using token=0x%.8X, size=0x%llX", token, size);
+ TRACFCOMP(g_trac_tce,"utilClosePayloadTces(): ERROR back from utilDeallocateTces() using token=0x%.8X", token);
break;
}
@@ -631,8 +624,10 @@ errlHndl_t UtilTceMgr::allocateTces(const uint64_t i_startingAddress,
// Calculate the number of TCE entries needed - rounding up
numTcesNeeded = ALIGN_PAGE(i_size)/PAGESIZE;
- // If more than the number of TCEs available error out
- if (numTcesNeeded > iv_tceEntryCount)
+ // If more than the number of TCEs available are expected or the
+ // size is too big then error out
+ if ((numTcesNeeded > iv_tceEntryCount) ||
+ (i_size > MAX_TCE_MEMORY_SPACE))
{
TRACFCOMP(g_trac_tce,ERR_MRK"UtilTceMgr::allocateTces: ERROR - Too many entries (0x%X) requested (>0x%X) (i_size=0x%X)", numTcesNeeded, iv_tceEntryCount, i_size);
@@ -643,7 +638,7 @@ errlHndl_t UtilTceMgr::allocateTces(const uint64_t i_startingAddress,
* @userdata1[0:31] Number of TCEs Needed
* @userdate1[32:64] Maximum Number of Tce Entries
* @userdata2 Size of the address space trying to get TCEs
- * @devdesc The size requested is too large for the table
+ * @devdesc The size requested is too large for the TCE table
* @custdesc A problem occurred during the IPL of the system
*/
errl = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
@@ -659,9 +654,6 @@ errlHndl_t UtilTceMgr::allocateTces(const uint64_t i_startingAddress,
break;
}
- // @TODO RTC 168745 additional error checking when iv_allocatedAddrs
- // will be updated to keep track of size, too
-
// Check to see if we've already allocated TCEs associated with
// this starting address
bool previouslyAllocated = false;
@@ -875,48 +867,47 @@ errlHndl_t UtilTceMgr::allocateTces(const uint64_t i_startingAddress,
// Responsible for deallocating TCE Entries
//
/*************************************************************************/
-errlHndl_t UtilTceMgr::deallocateTces(const uint32_t i_startingToken,
- const size_t i_size)
+errlHndl_t UtilTceMgr::deallocateTces(const uint32_t i_startingToken)
{
errlHndl_t errl = nullptr;
bool isContiguous = true;
uint32_t startingIndex = 0x0;
uint64_t startingAddress = 0x0;
+ size_t size = 0;
TceEntry_t *tablePtr = nullptr;
- TRACFCOMP(g_trac_tce,ENTER_MRK"UtilTceMgr::deallocateTces: Token = 0x%.8X for size = 0x%X", i_startingToken, i_size);
+ TRACFCOMP(g_trac_tce,ENTER_MRK"UtilTceMgr::deallocateTces: Token = 0x%.8X", i_startingToken);
do
{
// Assert if i_startingToken is not aligned on PAGESIZE
assert((i_startingToken % PAGESIZE) == 0, "UtilTceMgr::deallocateTces: i_startingToken (0x%.8X) is not page aligned", i_startingToken);
- // Assert if i_size is not greater than zero
- assert(i_size > 0, "UtilTceMgr::deallocateTces: i_size = %d, not greater than zero", i_size);
-
- // Get number of TCEs needed - rounding up
- uint32_t numTcesNeeded = ALIGN_PAGE(i_size)/PAGESIZE;
-
std::map<uint32_t, TceEntryInfo_t>::iterator map_itr
= iv_allocatedAddrs.find(i_startingToken);
if( map_itr == iv_allocatedAddrs.end() )
{
// Can't find this starting token. Trace that nothing happens,
// but do not create an error log
- TRACFCOMP(g_trac_tce,INFO_MRK"UtilTceMgr::deallocateTces: Can't find match of Starting Token = 0x%.16llX (size = 0x%X)", i_startingToken, i_size);
+ TRACFCOMP(g_trac_tce,INFO_MRK"UtilTceMgr::deallocateTces: Can't find match of Starting Token = 0x%.16llX", i_startingToken);
break;
}
else
{
startingIndex = (map_itr->first) / PAGESIZE;
startingAddress = map_itr->second.start_addr;
+ size = map_itr->second.size;
}
- TRACUCOMP(g_trac_tce,"UtilTceMgr::deallocateTces: numTcesNeeded=0x%X, startingAddress = 0x%X", numTcesNeeded, startingAddress);
- // @TODO RTC 168745 additional error checking when iv_allocatedAddrs
- // will be updated to keep track of size, too
+ // Assert if size is not greater than zero
+ assert(size > 0, "UtilTceMgr::deallocateTces: i_size = %d, not greater than zero", size);
+
+ // Get number of TCEs needed - rounding up
+ uint32_t numTcesNeeded = ALIGN_PAGE(size)/PAGESIZE;
+
+ TRACUCOMP(g_trac_tce,"UtilTceMgr::deallocateTces: size=0x%X, numTcesNeeded=0x%X, startingAddress = 0x%X", size, numTcesNeeded, startingAddress);
// startingIndex is larger than the max number of indexes avail
// --OR-- startingIndex and the number of TCEs needed exceeds the
@@ -1004,7 +995,7 @@ errlHndl_t UtilTceMgr::deallocateTces(const uint32_t i_startingToken,
Util::UTIL_TCE_DEALLOCATE,
Util::UTIL_TCE_ENTRY_NOT_CONTIGUOUS,
startingAddress,
- i_size,
+ size,
true /*Add HB SW Callout*/);
errl->collectTrace(UTILTCE_TRACE_NAME,KILOBYTE);
@@ -1015,7 +1006,7 @@ errlHndl_t UtilTceMgr::deallocateTces(const uint32_t i_startingToken,
}while(0);
- TRACFCOMP(g_trac_tce,"UtilTceMgr::deallocateTces: COMPLETE for Token = 0x%.8X, Addr = 0x%.16llX for size = 0x%X, errl=0x%X",i_startingToken, startingAddress, i_size, ERRL_GETRC_SAFE(errl));
+ TRACFCOMP(g_trac_tce,"UtilTceMgr::deallocateTces: COMPLETE for Token = 0x%.8X, Addr = 0x%.16llX for size = 0x%X, errl=0x%X",i_startingToken, startingAddress, size, ERRL_GETRC_SAFE(errl));
printIvMap(); //Debug
return errl;
diff --git a/src/usr/util/utiltcemgr.H b/src/usr/util/utiltcemgr.H
index 490f10e2e..c03d1d82c 100644
--- a/src/usr/util/utiltcemgr.H
+++ b/src/usr/util/utiltcemgr.H
@@ -136,11 +136,13 @@ class UtilTceMgr
void printIvMap() const;
- /** Max TCE Entries and Size for the TCE Table */
+ /** Max TCE Entries and Size for the TCE Table. */
+ /** And Max amount of Memory The TCEs can cover. */
enum
{
MAX_NUM_TCE_TABLE_ENTRIES = 0x080000, // 512k entries - HW Max
MAX_TCE_TABLE_SIZE = 0x400000, // 512k * 8 bytes/entry
+ MAX_TCE_MEMORY_SPACE = MAX_NUM_TCE_TABLE_ENTRIES * PAGESIZE,
};
/** Values related to PSIHB_SW_INTERFACES_t registers */
@@ -265,8 +267,7 @@ class UtilTceMgr
* - see utiltce.H for details
*
*/
- errlHndl_t deallocateTces(uint32_t i_startingToken,
- size_t i_size);
+ errlHndl_t deallocateTces(uint32_t i_startingToken);
/**
* @brief Responsible for disabling TCEs on the system, including
OpenPOWER on IntegriCloud