summaryrefslogtreecommitdiffstats
path: root/src/usr/i2c/i2c.C
diff options
context:
space:
mode:
authorRoland Veloz <rveloz@us.ibm.com>2018-09-26 00:51:53 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-12-06 19:18:15 -0600
commitb63c84765363b7bf4eea4a19d4cf5bba2533b63b (patch)
treea9e19493bf958bc47233af466f3106ecc4f2e22f /src/usr/i2c/i2c.C
parent082f9363ee8ea21647959637cf05a102fec4d24e (diff)
downloadtalos-hostboot-b63c84765363b7bf4eea4a19d4cf5bba2533b63b.tar.gz
talos-hostboot-b63c84765363b7bf4eea4a19d4cf5bba2533b63b.zip
Driver changes to support i2c mux
- Updated data structures gpioAddr_t, eeprom_addr_t, misc_args_t, nvdimm_addr_t and tpm_info_t with I2C MUX data members. Also added constructors to these structures to default there data members with the correct default info. - Updated macros DEVICE_I2C_PARMS, DEVICE_I2C_ADDRESS and DEVICE_I2C_ADDRESS_OFFSET to take the I2C MUX bus selector parameter and the I2C MUX entity path. - Added method i2cAccessMux to file i2c.H/.C that will setup the call for the I2C MUX. Method i2cCommonOP calls i2cAccessMux which then calls i2cCommonOp with appropriate parameters for the I2C MUX: i2cCommonOP -> i2cAccessMux -> i2cCommonOP. - Updated i2ctest.H with new I2C MUX params to get it to pass. RTC:191352 Change-Id: I6a70860eb2286bbd23d6157d72351b8adfa21aac Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/66651 Reviewed-by: Ilya Smirnov <ismirno@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Nicholas E. Bofferding <bofferdn@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@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/i2c/i2c.C')
-rwxr-xr-xsrc/usr/i2c/i2c.C606
1 files changed, 491 insertions, 115 deletions
diff --git a/src/usr/i2c/i2c.C b/src/usr/i2c/i2c.C
index 9d2e1d620..e74d9ecd4 100755
--- a/src/usr/i2c/i2c.C
+++ b/src/usr/i2c/i2c.C
@@ -40,6 +40,8 @@
#include <errl/errlentry.H>
#include <errl/errlmanager.H>
#include <errl/errludtarget.H>
+#include <errl/errludstring.H> // ERRORLOG::ErrlUserDetailsString
+#include <targeting/common/entitypath.H>
#include <targeting/common/targetservice.H>
#include <targeting/common/utilFilter.H>
#include <targeting/common/predicates/predicates.H>
@@ -56,9 +58,7 @@
#include <i2c/eepromif.H>
#include <i2c/tpmddif.H>
#include <i2c/nvdimmif.H>
-
-// TODO RTC 94872 Remove the following include in a future commit
-#include <initservice/initserviceif.H>
+#include <hwas/common/hwas.H> // HwasState
// ----------------------------------------------
// Globals
@@ -78,7 +78,6 @@ TRAC_INIT( & g_trac_i2cr, "I2CR", KILOBYTE );
//#define TRACUCOMP(args...) TRACFCOMP(args)
#define TRACUCOMP(args...)
-
// ----------------------------------------------
// Defines
// ----------------------------------------------
@@ -125,6 +124,15 @@ errlHndl_t i2cPerformOp( DeviceFW::OperationType i_opType,
int64_t i_accessType,
va_list i_args )
{
+ TRACUCOMP( g_trac_i2c, ENTER_MRK"i2cPerformOp() opType(%s), "
+ "i_target(0x%X), io_buffer(%p), io_buflen(%d), "
+ "i_accessType(%d)",
+ i_opType == DeviceFW::READ ? "READ" : "WRITE",
+ TARGETING::get_huid(i_target),
+ io_buffer,
+ io_buflen,
+ i_accessType);
+
errlHndl_t err = NULL;
// Get the input args our of the va_list
@@ -138,7 +146,6 @@ errlHndl_t i2cPerformOp( DeviceFW::OperationType i_opType,
// These are additional parms in the case an offset is passed in
// via va_list, as well
-
// Set both Host and FSI switches to 0 so that they get set later by
// attribute in i2cCommonOp()
args.switches.useHostI2C = 0;
@@ -164,7 +171,6 @@ errlHndl_t i2cPerformOp( DeviceFW::OperationType i_opType,
l_lockMutex,
args );
-
if( err )
{
TRACFCOMP(g_trac_i2c, "Locking the page FAILED");
@@ -202,30 +208,34 @@ errlHndl_t i2cPerformOp( DeviceFW::OperationType i_opType,
I2C_FAILURE_UNLOCKING_EEPROM_PAGE,
TARGETING::get_huid(i_target),
0x0,
- true /*Add HB SW Callout*/ );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
// TODO RTC 148705: Callout downstream DIMMs
err->collectTrace(I2C_COMP_NAME, 256 );
}
}
}
+ // Else this is not a page operation, call the normal common function
else
{
args.offset_length = va_arg( i_args, uint64_t);
+ uint8_t* temp = reinterpret_cast<uint8_t*>(va_arg(i_args, uint64_t));
+ args.i2cMuxBusSelector = va_arg( i_args, uint64_t);
+ args.i2cMuxPath = reinterpret_cast<const TARGETING::EntityPath*>(va_arg(i_args, uint64_t));
+
if ( args.offset_length != 0 )
{
- args.offset_buffer = reinterpret_cast<uint8_t*>
- (va_arg(i_args, uint64_t));
+ args.offset_buffer = temp;
+
}
- // Else, call the normal common function
- err = i2cCommonOp( i_opType,
- i_target,
- io_buffer,
- io_buflen,
- i_accessType,
- args );
- }
+ err = i2cCommonOp( i_opType,
+ i_target,
+ io_buffer,
+ io_buflen,
+ i_accessType,
+ args );
+ }
TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cPerformOp() - %s",
@@ -257,6 +267,8 @@ errlHndl_t host_i2cPerformOp( DeviceFW::OperationType i_opType,
int64_t i_accessType,
va_list i_args )
{
+ TRACUCOMP( g_trac_i2c, ENTER_MRK"host_i2cPerformOp()" );
+
errlHndl_t err = NULL;
// Get the input args our of the va_list
@@ -271,11 +283,13 @@ errlHndl_t host_i2cPerformOp( DeviceFW::OperationType i_opType,
// via va_list, as well
args.offset_length = va_arg( i_args, uint64_t);
+ uint8_t* temp = reinterpret_cast<uint8_t*>(va_arg(i_args, uint64_t));
+ args.i2cMuxBusSelector = va_arg( i_args, uint64_t);
+ args.i2cMuxPath = reinterpret_cast<const TARGETING::EntityPath*>(va_arg(i_args, uint64_t));
if ( args.offset_length != 0 )
{
- args.offset_buffer = reinterpret_cast<uint8_t*>
- (va_arg(i_args, uint64_t));
+ args.offset_buffer = temp;
}
// Set Host switch to 1 and FSI switch to 0
@@ -292,7 +306,7 @@ errlHndl_t host_i2cPerformOp( DeviceFW::OperationType i_opType,
args );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"host_i2cPerformOp() - %s",
((NULL == err) ? "No Error" : "With Error") );
@@ -322,6 +336,8 @@ errlHndl_t fsi_i2cPerformOp( DeviceFW::OperationType i_opType,
int64_t i_accessType,
va_list i_args )
{
+ TRACUCOMP( g_trac_i2c, ENTER_MRK"fsi_i2cPerformOp()" );
+
errlHndl_t err = NULL;
// Get the input args our of the va_list
@@ -336,11 +352,13 @@ errlHndl_t fsi_i2cPerformOp( DeviceFW::OperationType i_opType,
// via va_list, as well
args.offset_length = va_arg( i_args, uint64_t);
+ uint8_t* temp = reinterpret_cast<uint8_t*>(va_arg(i_args, uint64_t));
+ args.i2cMuxBusSelector = va_arg( i_args, uint64_t);
+ args.i2cMuxPath = reinterpret_cast<const TARGETING::EntityPath*>(va_arg(i_args, uint64_t));
if ( args.offset_length != 0 )
{
- args.offset_buffer = reinterpret_cast<uint8_t*>
- (va_arg(i_args, uint64_t));
+ args.offset_buffer = temp;
}
// Set FSI switch to 1 and Host switch to 0
@@ -357,7 +375,7 @@ errlHndl_t fsi_i2cPerformOp( DeviceFW::OperationType i_opType,
args );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"fsi_i2cPerformOp() - %s",
((NULL == err) ? "No Error" : "With Error") );
@@ -460,7 +478,7 @@ errlHndl_t i2cChooseEepromPage(TARGETING::Target * i_target,
I2C_INVALID_EEPROM_PAGE_REQUEST,
TARGETING::get_huid(i_target),
i_desiredPage,
- true );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
l_err->collectTrace( I2C_COMP_NAME, 256 );
}
}
@@ -518,7 +536,7 @@ errlHndl_t i2cPageSwitchOp( DeviceFW::OperationType i_opType,
I2C_MASTER_SENTINEL_TARGET,
i_opType,
0x0,
- true /*Add HB SW Callout*/ );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
l_err->collectTrace( I2C_COMP_NAME, 256);
@@ -555,7 +573,7 @@ errlHndl_t i2cPageSwitchOp( DeviceFW::OperationType i_opType,
I2C_INVALID_EEPROM_PAGE_MUTEX,
TARGETING::get_huid(i_target),
0x0,
- true /*Add HB SW Callout*/ );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
l_err->collectTrace( I2C_COMP_NAME, 256 );
break;
@@ -569,7 +587,7 @@ errlHndl_t i2cPageSwitchOp( DeviceFW::OperationType i_opType,
if( l_err )
{
TRACFCOMP(g_trac_i2c,
- "Error in i2cPageSwitchOp::i2cSetBusVariables()");
+ ERR_MRK"Error in i2cPageSwitchOp::i2cSetBusVariables()");
// Error means we need to unlock the page mutex prematurely
l_mutex_needs_unlock = true;
@@ -583,7 +601,7 @@ errlHndl_t i2cPageSwitchOp( DeviceFW::OperationType i_opType,
(page_array ) ) )
{
TRACFCOMP(g_trac_i2c,
- "i2cPageSwitchOp() - Cannot find ATTR_EEPROM_PAGE_ARRAY");
+ "i2cPageSwitchOp() - Cannot find ATTR_EEPROM_PAGE_ARRAY");
/*@
* @errortype
* @reasoncode I2C_ATTRIBUTE_NOT_FOUND
@@ -599,7 +617,7 @@ errlHndl_t i2cPageSwitchOp( DeviceFW::OperationType i_opType,
I2C_ATTRIBUTE_NOT_FOUND,
TARGETING::get_huid(i_target),
0x0,
- true );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
l_err->collectTrace( I2C_COMP_NAME, 256 );
l_mutex_needs_unlock = true;
break;
@@ -639,16 +657,29 @@ errlHndl_t i2cPageSwitchOp( DeviceFW::OperationType i_opType,
uint8_t * l_zeroBuffer = static_cast<uint8_t*>(malloc(l_zeroBuflen));
memset(l_zeroBuffer, 0, l_zeroBuflen);
-
TRACUCOMP(g_trac_i2c,"i2cPageSwitchOp args! \n"
"misc_args_t: port:%d / engine: %d: devAddr: %x: skip_mode_step(%d):\n"
"with_stop(%d): read_not_write(%d): bus_speed: %d: bit_rate_divisor: %d:\n"
- "polling_interval_ns: %d: timeout_count: %d: offset_length: %d",
+ "polling_interval_ns: %d: timeout_count: %d: offset_length: %d, ",
i_args.port, i_args.engine, i_args.devAddr, i_args.skip_mode_setup,
i_args.with_stop, i_args.read_not_write, i_args.bus_speed,
i_args.bit_rate_divisor, i_args.polling_interval_ns, i_args.timeout_count,
- i_args.offset_length );
+ i_args.offset_length);
+ // Printing mux info separately, if combined, nothing is displayed
+ if (i_args.i2cMuxPath)
+ {
+ char* l_muxPath = i_args.i2cMuxPath->toString();
+ TRACUCOMP(g_trac_i2c, "i2cPageSwitchOp(): muxSelector=0x%X, muxPath=%s",
+ i_args.i2cMuxBusSelector, l_muxPath);
+ free(l_muxPath);
+ l_muxPath = nullptr;
+ }
+ else
+ {
+ TRACUCOMP(g_trac_i2c, "i2cPageSwitchOp(): muxSelector=0x%X, muxPath=NULL",
+ i_args.i2cMuxBusSelector);
+ }
// Retry MAX_NACK_RETRIES so we can bypass nacks caused by a busy bus.
// Other Nack errors are expected and caused by the empty write
@@ -807,7 +838,7 @@ bool i2cPageUnlockOp( TARGETING::Target * i_target,
I2C_INVALID_EEPROM_PAGE_MUTEX,
TARGETING::get_huid(i_target),
0x0,
- true /*Add HB SW Callout*/ );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
l_err->collectTrace( I2C_COMP_NAME, 256 );
errlCommit(l_err, I2C_COMP_ID);
@@ -844,6 +875,217 @@ void i2cSetSwitches( TARGETING::Target * i_target,
return;
}
+
+
+/**
+*
+* @brief Retrieves the I2C MUX target from the given Entity Path
+*
+* @param [in] i_i2cMuxPath - the Entity Path for the I2C MUX
+*
+* @param [out] o_target - The I2C MUX target if Entity Path is found, valid and
+* functional, else this is set to nullptr
+*
+* @return errlHndl_t - NULL if successful, otherwise a pointer to the
+* error log.
+*
+*/
+// ------------------------------------------------------------------
+// i2cGetI2cMuxTarget
+// ------------------------------------------------------------------
+errlHndl_t i2cGetI2cMuxTarget ( const TARGETING::EntityPath & i_i2cMuxPath,
+ TARGETING::Target * &o_target )
+{
+ errlHndl_t l_err(nullptr);
+ o_target = nullptr;
+
+ TRACUCOMP( g_trac_i2c, ENTER_MRK"i2cGetI2cMuxTarget()" );
+
+ do
+ {
+ TARGETING::TargetService& l_targetService = TARGETING::targetService();
+
+ // Retrieve the I2C MUX target from path
+ o_target = l_targetService.toTarget(i_i2cMuxPath);
+
+ if ( nullptr == o_target )
+ {
+ char* l_muxPath = i_i2cMuxPath.toString();
+ TRACFCOMP( g_trac_i2c,
+ ERR_MRK "i2cGetI2cMuxTarget() - I2C MUX Entity Path (%s)"
+ " could not be converted to a target.",
+ l_muxPath );
+
+
+ /*@
+ * @errortype
+ * @reasoncode I2C_MUX_TARGET_NOT_FOUND
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid I2C_ACCESS_MUX
+ * @devdesc I2C mux path target is null
+ * @custdesc Unexpected boot firmware error
+ */
+ l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ I2C_ACCESS_MUX,
+ I2C_MUX_TARGET_NOT_FOUND,
+ 0,
+ 0,
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
+
+ // Collect the MUX entity path info
+ ERRORLOG::ErrlUserDetailsString(l_muxPath).addToLog(l_err);
+
+ // Release the mux memory
+ free(l_muxPath);
+ l_muxPath = nullptr;
+
+ l_err->collectTrace( I2C_COMP_NAME, 256);
+
+ break;
+ }
+
+ // Is the target functional
+ TARGETING::HwasState l_hwasState =
+ o_target->getAttr<TARGETING::ATTR_HWAS_STATE>();
+ if ( !l_hwasState.poweredOn ||
+ !l_hwasState.present ||
+ !l_hwasState.functional )
+ {
+ TRACFCOMP( g_trac_i2c,
+ ERR_MRK "i2cGetI2cMuxTarget() - I2C MUX target (0x%X) "
+ "is non functional.",
+ TARGETING::get_huid(o_target) );
+ /*@
+ * @errortype
+ * @reasoncode I2C_MUX_TARGET_NON_FUNCTIONAL
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid I2C_ACCESS_MUX
+ * @userdata1 I2C MUX Target Huid
+ * @devdesc I2C mux path target is not functional
+ * @custdesc Unexpected boot firmware error
+ */
+ l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ I2C_ACCESS_MUX,
+ I2C_MUX_TARGET_NON_FUNCTIONAL,
+ TARGETING::get_huid(o_target),
+ 0,
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
+
+ // Collect the MUX entity path info
+ char* l_muxPath = i_i2cMuxPath.toString();
+ ERRORLOG::ErrlUserDetailsString(l_muxPath).addToLog(l_err);
+ free(l_muxPath);
+ l_muxPath = nullptr;
+
+ l_err->collectTrace( I2C_COMP_NAME, 256);
+
+ // Don't return a non functional target
+ o_target = nullptr;
+
+ break;
+ }
+ } while( 0 );
+
+ TRACUCOMP( g_trac_i2c, EXIT_MRK"i2cGetI2cMuxTarget() - %s",
+ ((NULL == l_err) ? "No Error" : "With Error") );
+
+ return l_err;
+} // end i2cGetI2cMuxTarget
+
+
+/**
+*
+* @brief Retrieves the MUX target and sets the MUX to the given bus selector
+*
+* @param[in] i_masterTarget - I2C Master Target device
+*
+* @param[in] i_args - A copy of the structure containing arguments
+* needed for a command transaction.
+*
+* @pre i_masterTarget and i_args.i2cMuxPath must not be nullptrs;
+* i_args.i2cMuxBusSelector must not be I2C_MUX::NOT_APPLICABLE
+*
+* @return errlHndl_t - NULL if successful, otherwise a pointer to the
+* error log.
+*
+*/
+// ------------------------------------------------------------------
+// i2cAccessMux
+// ------------------------------------------------------------------
+errlHndl_t i2cAccessMux( TARGETING::TargetHandle_t i_masterTarget,
+ misc_args_t i_args /* make a copy */ )
+{
+ TRACUCOMP( g_trac_i2c,
+ ENTER_MRK"i2cAccessMux(): "
+ "e/p/devAddr= %d/%d/0x%x, offset=0x%x/%p",
+ i_args.engine, i_args.port, i_args.devAddr,
+ i_args.offset_length, i_args.offset_buffer );
+
+ // Printing mux info separately, if combined, nothing is displayed
+ if (i_args.i2cMuxPath)
+ {
+ char* l_muxPath = i_args.i2cMuxPath->toString();
+ TRACUCOMP(g_trac_i2c, "i2cAccessMux(): muxSelector=0x%X, muxPath=%s",
+ i_args.i2cMuxBusSelector, l_muxPath);
+ free(l_muxPath);
+ l_muxPath = nullptr;
+ }
+ else
+ {
+ TRACUCOMP(g_trac_i2c, "i2cAccessMux(): muxSelector=0x%X, muxPath=NULL",
+ i_args.i2cMuxBusSelector);
+ }
+
+ errlHndl_t l_err{nullptr};
+
+ do
+ {
+ TARGETING::TargetHandle_t l_i2cMuxTarget(nullptr);
+
+ l_err = i2cGetI2cMuxTarget(*(i_args.i2cMuxPath),
+ l_i2cMuxTarget);
+
+ // If an issue getting the MUX target, then return error
+ if (l_err)
+ {
+ break;
+ }
+
+ TARGETING::I2cMuxInfo l_muxData;
+
+ if (! (l_i2cMuxTarget->tryGetAttr<TARGETING::ATTR_I2C_MUX_INFO>(l_muxData)) )
+ {
+ TRACFCOMP(g_trac_i2c,
+ "i2cAccessMux(): get attributes failed");
+ break;
+ }
+
+ uint8_t l_muxSelector = i_args.i2cMuxBusSelector;
+ uint8_t *l_ptrMuxSelector = &l_muxSelector;
+ size_t l_muxSelectorSize = sizeof(l_muxSelector);
+
+ i_args.i2cMuxBusSelector = I2C_MUX::NOT_APPLICABLE;
+ l_err = DeviceFW::deviceOp(
+ DeviceFW::WRITE,
+ i_masterTarget,
+ l_ptrMuxSelector,
+ l_muxSelectorSize,
+ DEVICE_I2C_ADDRESS(l_muxData.port,
+ l_muxData.engine,
+ l_muxData.devAddr,
+ i_args.i2cMuxBusSelector,
+ i_args.i2cMuxPath));
+ } while (0);
+
+ TRACUCOMP( g_trac_i2c,
+ EXIT_MRK"i2cAccessMux() - %s",
+ ((NULL == l_err) ? "No Error" : "With Error") );
+
+ return l_err;
+} // i2cAccessMux
+
// ------------------------------------------------------------------
// i2cCommonOp
// ------------------------------------------------------------------
@@ -862,11 +1104,26 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cCommonOp(): i_opType=%d, aType=%d, "
- "p/e/devAddr= %d/%d/0x%x, len=%d, offset=%x/%p",
- (uint64_t) i_opType, i_accessType, i_args.port, i_args.engine,
+ "e/p/devAddr= %d/%d/0x%x, len=%d, offset=0x%x/%p",
+ static_cast<uint64_t>(i_opType), i_accessType, i_args.engine, i_args.port,
i_args.devAddr, io_buflen, i_args.offset_length,
i_args.offset_buffer);
+ // Printing mux info separately, if combined, nothing is displayed
+ if (i_args.i2cMuxPath)
+ {
+ char* l_muxPath = i_args.i2cMuxPath->toString();
+ TRACUCOMP(g_trac_i2c, "i2cCommonOp(): muxSelector=0x%X, muxPath=%s",
+ i_args.i2cMuxBusSelector, l_muxPath);
+ free(l_muxPath);
+ l_muxPath = nullptr;
+ }
+ else
+ {
+ TRACUCOMP(g_trac_i2c, "i2cCommonOp(): muxSelector=0x%X, muxPath=NULL",
+ i_args.i2cMuxBusSelector);
+ }
+
do
{
// Check for Master Sentinel chip
@@ -891,7 +1148,7 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
I2C_MASTER_SENTINEL_TARGET,
i_opType,
0x0,
- true /*Add HB SW Callout*/ );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
err->collectTrace( I2C_COMP_NAME, 256);
@@ -901,11 +1158,10 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
//Set Host vs Fsi switches if not done already
i2cSetSwitches(i_target, i_args);
-
// Get the mutex for the requested engine
mutex_success = i2cGetEngineMutex( i_target,
- i_args,
- engineLock );
+ i_args,
+ engineLock );
if( !mutex_success )
{
@@ -915,9 +1171,24 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
}
// Lock on this engine
- (void)mutex_lock( engineLock );
+ recursive_mutex_lock( engineLock );
mutex_needs_unlock = true;
+ if ( (I2C_MUX::NOT_APPLICABLE != i_args.i2cMuxBusSelector) &&
+ (nullptr != i_args.i2cMuxPath) )
+ {
+ err = i2cAccessMux(i_target, i_args );
+ }
+
+ if ( err )
+ {
+ TRACFCOMP(g_trac_i2c,
+ ERR_MRK"i2cCommonOp() - There is an issue accessing "
+ "the I2C MUX");
+
+ // Skip performing the actual I2C Operation
+ break;
+ }
// Calculate variables related to I2C Bus Speed in 'args' struct
err = i2cSetBusVariables( i_target, I2C_BUS_SPEED_FROM_MRW, i_args);
@@ -928,7 +1199,6 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
break;
}
-
/*******************************************************/
/* Perform the I2C Operation */
/*******************************************************/
@@ -994,9 +1264,7 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
newBufLen,
i_args );
-
free( newBuffer );
-
}
/***********************************************/
@@ -1064,7 +1332,7 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
I2C_INVALID_OP_TYPE,
i_opType,
userdata2,
- true /*Add HB SW Callout*/ );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
err->collectTrace( I2C_COMP_NAME, 256);
@@ -1081,14 +1349,13 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
i_args );
break;
}
-
} while( 0 );
// Check if we need to unlock the mutex
if ( mutex_needs_unlock == true )
{
// Unlock
- (void) mutex_unlock( engineLock );
+ recursive_mutex_unlock( engineLock );
TRACUCOMP( g_trac_i2c,
INFO_MRK"Unlocked engine: %d",
i_args.engine );
@@ -1097,7 +1364,6 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
// If there is an error, add FFDC
if ( err != NULL )
{
-
// Add parameter info to log
// @todo RTC 114298- update this for new parms/switches
I2C::UdI2CParms( i_opType,
@@ -1112,7 +1378,7 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
}
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cCommonOp() - %s",
((NULL == err) ? "No Error" : "With Error") );
@@ -1120,7 +1386,6 @@ errlHndl_t i2cCommonOp( DeviceFW::OperationType i_opType,
} // end i2cCommonOp
-
// ------------------------------------------------------------------
// i2cPresence
// ------------------------------------------------------------------
@@ -1182,15 +1447,13 @@ bool i2cPresence( TARGETING::Target * i_target,
INFO_MRK"Obtaining lock for engine: %d",
args.engine );
- (void)mutex_lock( engineLock );
+ recursive_mutex_lock( engineLock );
mutex_needs_unlock = true;
TRACUCOMP( g_trac_i2c,
INFO_MRK"Locked on engine: %d",
args.engine );
-
-
// Set I2C Mode (Host vs FSI) for the target
args.switches.useHostI2C = 0;
args.switches.useFsiI2C = 0;
@@ -1346,7 +1609,7 @@ bool i2cPresence( TARGETING::Target * i_target,
if ( mutex_needs_unlock == true )
{
// Unlock
- (void) mutex_unlock( engineLock );
+ recursive_mutex_unlock( engineLock );
TRACUCOMP( g_trac_i2c,
INFO_MRK"Unlocked engine: %d",
args.engine );
@@ -1381,12 +1644,28 @@ errlHndl_t i2cRead ( TARGETING::Target * i_target,
status_reg_t status;
fifo_reg_t fifo;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cRead()" );
TRACSCOMP( g_trac_i2cr,
- "I2C READ START : engine %.2X : port %.2X : devAddr %.2X : len %d",
- i_args.engine, i_args.port, i_args.devAddr, i_buflen );
+ "I2C READ START : engine %.2X : port %.2X : devAddr %.2X : "
+ "len %d",
+ i_args.engine, i_args.port, i_args.devAddr, i_buflen);
+
+ // Printing mux info separately, if combined, nothing is displayed
+ if (i_args.i2cMuxPath)
+ {
+ char* l_muxPath = i_args.i2cMuxPath->toString();
+ TRACSCOMP(g_trac_i2c, "i2cRead(): muxSelector=0x%X, muxPath=%s",
+ i_args.i2cMuxBusSelector, l_muxPath);
+ free(l_muxPath);
+ l_muxPath = nullptr;
+ }
+ else
+ {
+ TRACSCOMP(g_trac_i2c, "i2cRead(): muxSelector=0x%X, muxPath=NULL",
+ i_args.i2cMuxBusSelector);
+ }
do
{
@@ -1404,7 +1683,7 @@ errlHndl_t i2cRead ( TARGETING::Target * i_target,
for( bytesRead = 0; bytesRead < i_buflen; bytesRead++ )
{
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
INFO_MRK"Reading byte (%d) out of (%d)",
(bytesRead+1), i_buflen );
@@ -1519,8 +1798,23 @@ errlHndl_t i2cRead ( TARGETING::Target * i_target,
TRACUCOMP( g_trac_i2cr,
"I2C READ DATA : engine %.2X : port %.2x : "
"devAddr %.2X : byte %d : %.2X (0x%lx)",
- i_args.engine, i_args.port, i_args.devAddr, bytesRead,
- fifo.byte_0, fifo.value );
+ i_args.engine, i_args.port, i_args.devAddr,
+ bytesRead, fifo.byte_0, fifo.value );
+
+ // Printing mux info separately, if combined, nothing is displayed
+ if (i_args.i2cMuxPath)
+ {
+ char* l_muxPath = i_args.i2cMuxPath->toString();
+ TRACUCOMP(g_trac_i2c, "i2cRead(): muxSelector=0x%X, "
+ "muxPath=%s", i_args.i2cMuxBusSelector, l_muxPath);
+ free(l_muxPath);
+ l_muxPath = nullptr;
+ }
+ else
+ {
+ TRACUCOMP(g_trac_i2c, "i2cRead(): muxSelector=0x%X, "
+ "muxPath=NULL", i_args.i2cMuxBusSelector);
+ }
}
if( err )
@@ -1539,10 +1833,26 @@ errlHndl_t i2cRead ( TARGETING::Target * i_target,
} while( 0 );
TRACSCOMP( g_trac_i2cr,
- "I2C READ END : engine %.2X : port %.2x : devAddr %.2X : len %d",
+ "I2C READ END : engine %.2X : port %.2x : devAddr %.2X : "
+ "len %d",
i_args.engine, i_args.port, i_args.devAddr, i_buflen );
- TRACDCOMP( g_trac_i2c,
+ // Printing mux info separately, if combined, nothing is displayed
+ if (i_args.i2cMuxPath)
+ {
+ char* l_muxPath = i_args.i2cMuxPath->toString();
+ TRACSCOMP(g_trac_i2c, "i2cRead(): muxSelector=0x%X, muxPath=%s",
+ i_args.i2cMuxBusSelector, l_muxPath);
+ free(l_muxPath);
+ l_muxPath = nullptr;
+ }
+ else
+ {
+ TRACSCOMP(g_trac_i2c, "i2cRead(): muxSelector=0x%X, muxPath=NULL",
+ i_args.i2cMuxBusSelector);
+ }
+
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cRead()" );
return err;
@@ -1565,9 +1875,23 @@ errlHndl_t i2cWrite ( TARGETING::Target * i_target,
TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cWrite()" );
- TRACSCOMP( g_trac_i2cr,
- "I2C WRITE START : engine %.2X : port %.2X : devAddr %.2X : len %d",
- i_args.engine, i_args.port, i_args.devAddr, io_buflen );
+ TRACSCOMP( g_trac_i2c,
+ "I2C WRITE START : engine %.2X : port %.2x : devAddr %.2X : "
+ "len %d", i_args.engine, i_args.port, i_args.devAddr, io_buflen);
+
+ // Printing mux info separately, if combined, nothing is displayed
+ if (i_args.i2cMuxPath)
+ {
+ char* l_muxPath = i_args.i2cMuxPath->toString();
+ TRACSCOMP(g_trac_i2c, "i2cWrite(): muxSelector=0x%X, muxPath=%s",
+ i_args.i2cMuxBusSelector, l_muxPath);
+ free(l_muxPath);
+ }
+ else
+ {
+ TRACSCOMP(g_trac_i2c, "i2cWrite(): muxSelector=0x%X, muxPath=NULL",
+ i_args.i2cMuxBusSelector);
+ }
do
{
@@ -1635,8 +1959,8 @@ errlHndl_t i2cWrite ( TARGETING::Target * i_target,
} while( 0 );
TRACSCOMP( g_trac_i2cr,
- "I2C WRITE END : engine %.2X: port %.2X : devAddr %.2X : len %d",
- i_args.engine, i_args.port, i_args.devAddr, io_buflen );
+ "I2C WRITE END : engine %.2X: port %.2X : devAddr %.2X : "
+ "len %d", i_args.engine, i_args.port, i_args.devAddr, io_buflen);
TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cWrite()" );
@@ -1653,7 +1977,7 @@ errlHndl_t i2cSetup ( TARGETING::Target * i_target,
{
errlHndl_t err = NULL;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cSetup(): buf_len=%d, r_nw=%d, w_stop=%d, sms=%d",
i_buflen, i_args.read_not_write, i_args.with_stop,
i_args.skip_mode_setup);
@@ -1763,7 +2087,7 @@ errlHndl_t i2cSetup ( TARGETING::Target * i_target,
}
} while( 0 );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cSetup()" );
return err;
@@ -1866,7 +2190,7 @@ errlHndl_t i2cWaitForCmdComp ( TARGETING::Target * i_target,
{
errlHndl_t err = NULL;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cWaitForCmdComp()" );
// Define the registers that we'll use
@@ -1944,7 +2268,7 @@ errlHndl_t i2cWaitForCmdComp ( TARGETING::Target * i_target,
}
} while( 0 );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cWaitForCmdComp()" );
return err;
@@ -1959,7 +2283,7 @@ errlHndl_t i2cReadStatusReg ( TARGETING::Target * i_target,
{
errlHndl_t err = NULL;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cReadStatusReg()" );
do
@@ -1994,7 +2318,7 @@ errlHndl_t i2cReadStatusReg ( TARGETING::Target * i_target,
}
} while( 0 );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cReadStatusReg()" );
return err;
@@ -2013,7 +2337,7 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
bool busArbiLostFound = false;
uint64_t intRegVal = 0x0;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cCheckForErrors()" );
do
@@ -2224,7 +2548,7 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
} while( 0 );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cCheckForErrors()" );
return err;
@@ -2246,7 +2570,7 @@ errlHndl_t i2cWaitForFifoSpace ( TARGETING::Target * i_target,
// Define regs we'll be using
status_reg_t status;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cWaitForFifoSpace()" );
do
@@ -2334,7 +2658,7 @@ errlHndl_t i2cWaitForFifoSpace ( TARGETING::Target * i_target,
}
} while( 0 );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cWaitForFifoSpace()" );
return err;
@@ -2349,7 +2673,7 @@ errlHndl_t i2cSendStopSignal(TARGETING::Target * i_target,
errlHndl_t err = NULL;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cSendStopSignal" );
do
@@ -2433,7 +2757,7 @@ errlHndl_t i2cToggleClockLine(TARGETING::Target * i_target,
errlHndl_t err = NULL;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cToggleClockLine()" );
do
@@ -2494,7 +2818,7 @@ errlHndl_t i2cForceResetAndUnlock( TARGETING::Target * i_target,
// I2C Bus Speed Array
TARGETING::ATTR_I2C_BUS_SPEED_ARRAY_type speed_array;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cForceResetAndUnlock()" );
do
@@ -2523,7 +2847,7 @@ errlHndl_t i2cForceResetAndUnlock( TARGETING::Target * i_target,
I2C_ATTRIBUTE_NOT_FOUND,
TARGETING::get_huid(i_target),
0x0,
- true /*Add HB SW Callout*/ );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
err->collectTrace( I2C_COMP_NAME, 256);
@@ -2533,7 +2857,7 @@ errlHndl_t i2cForceResetAndUnlock( TARGETING::Target * i_target,
uint32_t l_numPorts = I2C_BUS_ATTR_MAX_PORT;
if (i_args.switches.useFsiI2C == 1)
{
- TRACDCOMP( g_trac_i2c,INFO_MRK
+ TRACUCOMP( g_trac_i2c,INFO_MRK
"Using FSI I2C, use numports: %d", FSI_MODE_MAX_PORT);
l_numPorts = FSI_MODE_MAX_PORT;
}
@@ -2582,8 +2906,27 @@ errlHndl_t i2cForceResetAndUnlock( TARGETING::Target * i_target,
"limitations. Disable diag mode on e2 = %d, "
"secure mode enabled = %d",
TARGETING::get_huid(i_target),
- i_args.engine, port,l_disable_diag_mode,
+ i_args.engine, port,
+ l_disable_diag_mode,
SECUREBOOT::enabled());
+
+ // Printing mux info separately, if combined, nothing is displayed
+ if (i_args.i2cMuxPath)
+ {
+ char* l_muxPath = i_args.i2cMuxPath->toString();
+ TRACFCOMP(g_trac_i2c, INFO_MRK"i2cForceResetAndUnlock(): "
+ "muxSelector=0x%X, muxPath=%s",
+ i_args.i2cMuxBusSelector, l_muxPath);
+ free(l_muxPath);
+ l_muxPath = nullptr;
+ }
+ else
+ {
+ TRACFCOMP(g_trac_i2c, INFO_MRK"i2cForceResetAndUnlock(): "
+ "muxSelector=0x%X, muxPath=NULL",
+ i_args.i2cMuxBusSelector);
+ }
+
continue;
}
}
@@ -2691,7 +3034,7 @@ errlHndl_t i2cReset ( TARGETING::Target * i_target,
{
errlHndl_t err = NULL;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cReset()" );
// Writing to the Status Register does a full I2C reset.
@@ -2742,7 +3085,7 @@ errlHndl_t i2cReset ( TARGETING::Target * i_target,
}
} while( 0 );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cReset()" );
return err;
@@ -2765,7 +3108,7 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
// I2C Bus Speed Array
TARGETING::ATTR_I2C_BUS_SPEED_ARRAY_type speed_array;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cSendSlaveStop()" );
do
@@ -2795,7 +3138,7 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
I2C_ATTRIBUTE_NOT_FOUND,
TARGETING::get_huid(i_target),
0x0,
- true /*Add HB SW Callout*/ );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
err->collectTrace( I2C_COMP_NAME, 256);
@@ -2805,7 +3148,7 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
uint32_t l_numPorts = I2C_BUS_ATTR_MAX_PORT;
if (i_args.switches.useFsiI2C == 1)
{
- TRACDCOMP( g_trac_i2c,INFO_MRK
+ TRACUCOMP( g_trac_i2c,INFO_MRK
"Using FSI I2C, use numports: %d", FSI_MODE_MAX_PORT);
l_numPorts = FSI_MODE_MAX_PORT;
}
@@ -2824,7 +3167,7 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
// presence detect here to remove this workaround
if ( (i_args.engine == 1) && (port >= 4) )
{
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
"Saw Errors resetting these devices, temporarily skipping engine: %d, port: %d",
i_args.engine, port);
continue;
@@ -2918,8 +3261,8 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
"Not seeing SCL (%d) high "
"after %d ns of polling (max=%d). "
"Full status register = 0x%.16llX. "
- "Inhibiting sending slave stop to e%/p% for "
- "HUID 0x%08X.",
+ "Inhibiting sending slave stop to e%/p%, "
+ "for HUID 0x%08X.",
status_reg.scl_input_level,
delay_ns,
I2C_RESET_POLL_DELAY_TOTAL_NS,
@@ -2927,6 +3270,24 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
i_args.engine,
port,
TARGETING::get_huid(i_target));
+
+ // Printing mux info separately, if combined, nothing is displayed
+ if (i_args.i2cMuxPath)
+ {
+ char* l_muxPath = i_args.i2cMuxPath->toString();
+ TRACFCOMP(g_trac_i2c, ERR_MRK"i2cSendSlaveStop(): "
+ "muxSelector=0x%X, muxPath=%s",
+ i_args.i2cMuxBusSelector, l_muxPath);
+ free(l_muxPath);
+ l_muxPath = nullptr;
+ }
+ else
+ {
+ TRACFCOMP(g_trac_i2c, ERR_MRK"i2cSendSlaveStop(): "
+ "muxSelector=0x%X, muxPath=NULL",
+ i_args.i2cMuxBusSelector);
+ }
+
continue;
}
@@ -2967,7 +3328,7 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
} while( 0 );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cSendSlaveStop()" );
return err;
@@ -2986,7 +3347,7 @@ errlHndl_t i2cGetInterrupts ( TARGETING::Target * i_target,
// Master Regs
interrupt_reg_t intreg;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cGetInterrupts()" );
do
@@ -3011,7 +3372,7 @@ errlHndl_t i2cGetInterrupts ( TARGETING::Target * i_target,
o_intRegValue = intreg.value;
} while( 0 );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cGetInterrupts( int reg val: %016llx)",
o_intRegValue );
@@ -3104,6 +3465,21 @@ errlHndl_t i2cSetBusVariables ( TARGETING::Target * i_target,
i_speed, io_args.bus_speed, io_args.bit_rate_divisor,
io_args.polling_interval_ns, io_args.timeout_count);
+ // Printing mux info separately, if combined, nothing is displayed
+ if (io_args.i2cMuxPath)
+ {
+ char* l_muxPath = io_args.i2cMuxPath->toString();
+ TRACUCOMP(g_trac_i2c, "i2cSetBusVariables(): muxSelector=0x%X, "
+ "muxPath=%s", io_args.i2cMuxBusSelector, l_muxPath);
+ free(l_muxPath);
+ l_muxPath = nullptr;
+ }
+ else
+ {
+ TRACUCOMP(g_trac_i2c, "i2cSetBusVariables(): muxSelector=0x%X, "
+ "muxPath=NULL", io_args.i2cMuxBusSelector);
+ }
+
TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cSetBusVariables()" );
@@ -3269,7 +3645,7 @@ errlHndl_t i2cProcessActiveMasters ( i2cProcessType i_processType,
TWO_UINT32_TO_UINT64(
i_processOperation,
i_processType),
- true /*Add HB SW Callout*/ );
+ ERRORLOG::ErrlEntry::ADD_SW_CALLOUT );
err->collectTrace( I2C_COMP_NAME, 256);
@@ -3316,7 +3692,7 @@ errlHndl_t i2cProcessActiveMasters ( i2cProcessType i_processType,
( engine != 0 ) &&
(io_args.switches.useFsiI2C == 1) )
{
- TRACDCOMP( g_trac_i2c,INFO_MRK
+ TRACUCOMP( g_trac_i2c,INFO_MRK
"Only reset engine 0 for FSI");
continue;
}
@@ -3325,7 +3701,7 @@ errlHndl_t i2cProcessActiveMasters ( i2cProcessType i_processType,
if ( ( engine == 0 ) &&
(io_args.switches.useHostI2C == 1) )
{
- TRACDCOMP( g_trac_i2c,INFO_MRK
+ TRACUCOMP( g_trac_i2c,INFO_MRK
"Never touch engine 0 for Host");
continue;
}
@@ -3345,7 +3721,7 @@ errlHndl_t i2cProcessActiveMasters ( i2cProcessType i_processType,
size_t l_numPorts = I2C_BUS_ATTR_MAX_PORT;
if (io_args.switches.useFsiI2C == 1)
{
- TRACDCOMP( g_trac_i2c,INFO_MRK
+ TRACUCOMP( g_trac_i2c,INFO_MRK
"Using FSI I2c, use numports: %d", FSI_MODE_MAX_PORT);
l_numPorts = FSI_MODE_MAX_PORT;
}
@@ -3413,7 +3789,7 @@ errlHndl_t i2cProcessActiveMasters ( i2cProcessType i_processType,
TRACUCOMP( g_trac_i2c,
INFO_MRK"i2cProcessActiveMasters: Obtaining lock for "
"engine: %d", engine );
- (void)mutex_lock( engineLock );
+ recursive_mutex_lock( engineLock );
mutex_needs_unlock = true;
TRACUCOMP( g_trac_i2c,INFO_MRK
"i2cProcessActiveMasters: Locked on engine: %d",
@@ -3579,7 +3955,7 @@ errlHndl_t i2cProcessActiveMasters ( i2cProcessType i_processType,
if ( mutex_needs_unlock == true )
{
// Unlock
- (void) mutex_unlock( engineLock );
+ recursive_mutex_unlock( engineLock );
TRACUCOMP( g_trac_i2c,INFO_MRK
"i2cProcessActiveMasters: Unlocked engine: %d",
engine );
@@ -3661,7 +4037,7 @@ errlHndl_t i2cSetupActiveMasters ( i2cProcessType i_setupType,
// ------------------------------------------------------------------
void i2cSetAccessMode( i2cSetAccessModeType i_setModeType )
{
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cSetAccessMode(): %d", i_setModeType );
TARGETING::I2cSwitches switches;
@@ -3728,7 +4104,7 @@ void i2cSetAccessMode( i2cSetAccessModeType i_setModeType )
INFO_MRK"Obtaining lock for engine: %d",
args.engine );
- (void)mutex_lock( engineLocks[engine] );
+ recursive_mutex_lock( engineLocks[engine] );
TRACUCOMP( g_trac_i2c,
INFO_MRK"Locked on engine: %d",
@@ -3754,7 +4130,7 @@ void i2cSetAccessMode( i2cSetAccessModeType i_setModeType )
tgt->setAttr<TARGETING::ATTR_I2C_SWITCHES>(switches);
- TRACFCOMP( g_trac_i2c,"i2cSetAccessMode: tgt=0x%X "
+ TRACUCOMP( g_trac_i2c,"i2cSetAccessMode: tgt=0x%X "
"I2C_SWITCHES updated: host=%d, fsi=%d",
TARGETING::get_huid(tgt), switches.useHostI2C,
switches.useFsiI2C);
@@ -3769,7 +4145,7 @@ void i2cSetAccessMode( i2cSetAccessModeType i_setModeType )
args.engine = engine;
if ( engineLocks[engine] != NULL )
{
- (void) mutex_unlock( engineLocks[engine] );
+ recursive_mutex_unlock( engineLocks[engine] );
TRACUCOMP( g_trac_i2c,
INFO_MRK"Unlocked engine: %d",
args.engine );
@@ -3779,7 +4155,7 @@ void i2cSetAccessMode( i2cSetAccessModeType i_setModeType )
} while( 0 );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cSetAccessMode");
return;
@@ -3797,7 +4173,7 @@ errlHndl_t i2cRegisterOp ( DeviceFW::OperationType i_opType,
{
errlHndl_t err = NULL;
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
ENTER_MRK"i2cRegisterOp()");
uint64_t op_addr = 0x0;
@@ -3866,7 +4242,7 @@ errlHndl_t i2cRegisterOp ( DeviceFW::OperationType i_opType,
i_args.switches.useFsiI2C, op_size,
i_reg, op_addr, (*io_data_64) );
- TRACDCOMP( g_trac_i2c,
+ TRACUCOMP( g_trac_i2c,
EXIT_MRK"i2cRegisterOp()" );
return err;
@@ -4126,19 +4502,19 @@ void getDeviceInfo( TARGETING::Target* i_i2cMaster,
for(auto const& i2cm : l_i2cInfo)
{
- TRACDCOMP(g_trac_i2c,"i2c loop - eng=%.8X", TARGETING::get_huid(pChipTarget));
+ TRACUCOMP(g_trac_i2c,"i2c loop - eng=%.8X", TARGETING::get_huid(pChipTarget));
/* I2C Busses */
std::list<EEPROM::EepromInfo_t>::iterator l_eep =
l_eepromInfo.begin();
while( l_eep != l_eepromInfo.end() )
{
- TRACDCOMP(g_trac_i2c,"eeprom loop - eng=%.8X, port=%.8X", TARGETING::get_huid(l_eep->i2cMaster), l_eep->engine );
+ TRACUCOMP(g_trac_i2c,"eeprom loop - eng=%.8X, port=%.8X", TARGETING::get_huid(l_eep->i2cMaster), l_eep->engine );
DeviceInfo_t l_currentDI;
//ignore the devices that aren't on the current target
if( l_eep->i2cMaster != pChipTarget )
{
- TRACDCOMP(g_trac_i2c,"skipping unmatched i2cmaster");
+ TRACUCOMP(g_trac_i2c,"skipping unmatched i2cmaster");
l_eep = l_eepromInfo.erase(l_eep);
continue;
}
@@ -4146,7 +4522,7 @@ void getDeviceInfo( TARGETING::Target* i_i2cMaster,
//skip the devices that are on a different engine
else if( l_eep->engine != i2cm.engine)
{
- TRACDCOMP(g_trac_i2c,"skipping umatched engine");
+ TRACUCOMP(g_trac_i2c,"skipping umatched engine");
++l_eep;
continue;
}
@@ -4185,7 +4561,7 @@ void getDeviceInfo( TARGETING::Target* i_i2cMaster,
break;
}
- TRACDCOMP(g_trac_i2c,"Adding addr=%X", l_eep->devAddr);
+ TRACUCOMP(g_trac_i2c,"Adding addr=0x%X", l_eep->devAddr);
o_deviceInfo.push_back(l_currentDI);
l_eep = l_eepromInfo.erase(l_eep);
} //end of eeprom iter
@@ -4239,20 +4615,20 @@ void getDeviceInfo( TARGETING::Target* i_i2cMaster,
#ifdef CONFIG_NVDIMM
for (auto& l_nv : l_nvdimmInfo)
{
- TRACDCOMP(g_trac_i2c,"nvdimm loop - eng=%.8X, port=%.8X", TARGETING::get_huid(l_nv.i2cMaster), l_nv.engine );
+ TRACUCOMP(g_trac_i2c,"nvdimm loop - eng=%.8X, port=%.8X", TARGETING::get_huid(l_nv.i2cMaster), l_nv.engine );
DeviceInfo_t l_currentDI;
//ignore the devices that aren't on the current target
if( l_nv.i2cMaster != pChipTarget )
{
- TRACDCOMP(g_trac_i2c,"skipping unmatched i2cmaster");
+ TRACUCOMP(g_trac_i2c,"skipping unmatched i2cmaster");
continue;
}
//skip the devices that are on a different engine
else if( l_nv.engine != i2cm.engine)
{
- TRACDCOMP(g_trac_i2c,"skipping umatched engine");
+ TRACUCOMP(g_trac_i2c,"skipping umatched engine");
continue;
}
@@ -4268,7 +4644,7 @@ void getDeviceInfo( TARGETING::Target* i_i2cMaster,
strcpy(l_currentDI.deviceLabel,
"?unknown,unknown,nvdimm,nvdimm");
- TRACDCOMP(g_trac_i2c,"Adding addr=%X", l_nv.devAddr);
+ TRACUCOMP(g_trac_i2c,"Adding addr=0x%X", l_nv.devAddr);
o_deviceInfo.push_back(l_currentDI);
} //end of nvdimm iter
#endif
OpenPOWER on IntegriCloud