summaryrefslogtreecommitdiffstats
path: root/src/usr/fsi
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/fsi')
-rw-r--r--src/usr/fsi/fsidd.C140
1 files changed, 65 insertions, 75 deletions
diff --git a/src/usr/fsi/fsidd.C b/src/usr/fsi/fsidd.C
index 59d4f8438..694ccacca 100644
--- a/src/usr/fsi/fsidd.C
+++ b/src/usr/fsi/fsidd.C
@@ -56,34 +56,6 @@ TRAC_INIT(&g_trac_fsir, "FSIR", 4096); //4K
//#define TRACUCOMP(args...) TRACFCOMP(args)
#define TRACUCOMP(args...)
-//@todo - This should come from the target/attribute code somewhere
-uint64_t target_to_uint64(const TARGETING::Target* i_target)
-{
- uint64_t id = 0;
- if( i_target == NULL )
- {
- id = 0x0;
- }
- else if( i_target == TARGETING::MASTER_PROCESSOR_CHIP_TARGET_SENTINEL )
- {
- id = 0xFFFFFFFFFFFFFFFF;
- }
- else
- {
- // physical path, 3 nibbles per type/instance pair
- // TIITIITII... etc.
- TARGETING::EntityPath epath;
- i_target->tryGetAttr<TARGETING::ATTR_PHYS_PATH>(epath);
- for( uint32_t x = 0; x < epath.size(); x++ )
- {
- id = id << 12;
- id |= (uint64_t)((epath[x].type << 8) & 0xF00);
- id |= (uint64_t)(epath[x].instance & 0x0FF);
- }
- }
- return id;
-}
-
namespace FSI
{
@@ -116,7 +88,7 @@ errlHndl_t ddOp(DeviceFW::OperationType i_opType,
{
errlHndl_t l_err = NULL;
uint64_t i_addr = va_arg(i_args,uint64_t);
- TRACUCOMP( g_trac_fsi, "FSI::ddOp> i_addr=%llX, target=%llX", i_addr, target_to_uint64(i_target) );
+ TRACUCOMP( g_trac_fsi, "FSI::ddOp> i_addr=%llX, target=%.8X", i_addr, TARGETING::get_huid(i_target) );
do{
if( io_buflen != sizeof(uint32_t) )
@@ -331,28 +303,31 @@ errlHndl_t FsiDD::read(const TARGETING::Target* i_target,
uint64_t i_address,
uint32_t* o_buffer)
{
- TRACDCOMP(g_trac_fsi, "FsiDD::read(i_target=%llX,i_address=0x%llX)> ", target_to_uint64(i_target), i_address);
+ TRACDCOMP(g_trac_fsi, "FsiDD::read(i_target=%.8X,i_address=0x%llX)> ", TARGETING::get_huid(i_target), i_address);
errlHndl_t l_err = NULL;
do {
// verify slave is present before doing anything
if( !isSlavePresent(i_target) && (i_target != iv_master) )
{
- TRACFCOMP( g_trac_fsi, "FsiDD::read> Requested target was never detected during FSI Init : i_target=%llX, i_address=%.llX", target_to_uint64(i_target), i_address );
+ TRACFCOMP( g_trac_fsi, "FsiDD::read> Requested target was never detected during FSI Init : i_target=%.8X, i_address=%.llX", TARGETING::get_huid(i_target), i_address );
/*@
* @errortype
* @moduleid FSI::MOD_FSIDD_READ
* @reasoncode FSI::RC_TARGET_NEVER_DETECTED
- * @userdata1 Relative Absolute FSI Address
- * @userdata2 Target ID String...
+ * @userdata1 Relative FSI Address
+ * @userdata2[0:31] HUID of FSI Target
+ * @userdata2[32:63] HUID of FSI Master
* @devdesc FsiDD::read> Target was never detected during FSI Init
*/
l_err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
FSI::MOD_FSIDD_READ,
FSI::RC_TARGET_NEVER_DETECTED,
i_address,
- target_to_uint64(i_target));
+ TWO_UINT32_TO_UINT64(
+ TARGETING::get_huid(i_target),
+ TARGETING::get_huid(iv_master)));
l_err->collectTrace("FSI",1024);
break;
}
@@ -383,28 +358,31 @@ errlHndl_t FsiDD::write(const TARGETING::Target* i_target,
uint64_t i_address,
uint32_t* o_buffer)
{
- TRACDCOMP(g_trac_fsi, "FsiDD::write(i_target=%llX,i_address=0x%llX)> ", target_to_uint64(i_target), i_address);
+ TRACDCOMP(g_trac_fsi, "FsiDD::write(i_target=%.8X,i_address=0x%llX)> ", TARGETING::get_huid(i_target), i_address);
errlHndl_t l_err = NULL;
do {
// verify slave is present before doing anything
if( !isSlavePresent(i_target) && (i_target != iv_master) )
{
- TRACFCOMP( g_trac_fsi, "FsiDD::write> Requested target was never detected during FSI Init : i_target=%llX, i_address=%.llX", target_to_uint64(i_target), i_address );
+ TRACFCOMP( g_trac_fsi, "FsiDD::write> Requested target was never detected during FSI Init : i_target=%.8X, i_address=%.llX", TARGETING::get_huid(i_target), i_address );
/*@
* @errortype
* @moduleid FSI::MOD_FSIDD_WRITE
* @reasoncode FSI::RC_TARGET_NEVER_DETECTED
- * @userdata1 Relative Absolute FSI Address
- * @userdata2 Target ID String...
+ * @userdata1 Relative FSI Address
+ * @userdata2[0:31] HUID of FSI Target
+ * @userdata2[32:63] HUID of FSI Master
* @devdesc FsiDD::read> Target was never detected during FSI Init
*/
l_err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
FSI::MOD_FSIDD_WRITE,
FSI::RC_TARGET_NEVER_DETECTED,
i_address,
- target_to_uint64(i_target));
+ TWO_UINT32_TO_UINT64(
+ TARGETING::get_huid(i_target),
+ TARGETING::get_huid(iv_master)));
l_err->collectTrace("FSI",1024);
break;
}
@@ -736,7 +714,7 @@ errlHndl_t FsiDD::read(const FsiAddrInfo_t& i_addrInfo,
DEVICE_XSCOM_ADDRESS(opbaddr) );
if( l_err )
{
- TRACFCOMP(g_trac_fsi, "FsiDD::read> Error from device %11X : RC=%X", target_to_uint64(i_addrInfo.opbTarg), l_err->reasonCode() );
+ TRACFCOMP(g_trac_fsi, "FsiDD::read> Error from device %.8X : RC=%X", TARGETING::get_huid(i_addrInfo.opbTarg), l_err->reasonCode() );
break;
}
@@ -811,7 +789,7 @@ errlHndl_t FsiDD::write(const FsiAddrInfo_t& i_addrInfo,
DEVICE_XSCOM_ADDRESS(opbaddr) );
if( l_err )
{
- TRACFCOMP(g_trac_fsi, "FsiDD::write> Error from device %11X : RC=%X", target_to_uint64(i_addrInfo.opbTarg), l_err->reasonCode() );
+ TRACFCOMP(g_trac_fsi, "FsiDD::write> Error from device %.8X : RC=%X", TARGETING::get_huid(i_addrInfo.opbTarg), l_err->reasonCode() );
break;
}
@@ -1071,7 +1049,7 @@ errlHndl_t FsiDD::genFullFsiAddr(FsiAddrInfo_t& io_addrInfo)
//pull the FSI info out for this target
FsiChipInfo_t fsi_info = getFsiInfo( io_addrInfo.fsiTarg );
- TRACUCOMP( g_trac_fsi, "target=%llX : Link Id=%.8X", target_to_uint64(io_addrInfo.fsiTarg), fsi_info.linkid.id );
+ TRACUCOMP( g_trac_fsi, "target=%.8X : Link Id=%.8X", TARGETING::get_huid(io_addrInfo.fsiTarg), fsi_info.linkid.id );
//FSI master is the master proc, find the port
if( fsi_info.master == iv_master )
@@ -1082,7 +1060,7 @@ errlHndl_t FsiDD::genFullFsiAddr(FsiAddrInfo_t& io_addrInfo)
//verify this target has a valid FSI master
else if( TARGETING::FSI_MASTER_TYPE_CMFSI != fsi_info.type )
{
- TRACFCOMP( g_trac_fsi, "target=%llX : Master Type is not supported = %d", target_to_uint64(io_addrInfo.fsiTarg), fsi_info.type );
+ TRACFCOMP( g_trac_fsi, "target=%.8X : Master Type is not supported = %d", TARGETING::get_huid(io_addrInfo.fsiTarg), fsi_info.type );
/*@
* @errortype
* @moduleid FSI::MOD_FSIDD_GENFULLFSIADDR
@@ -1095,10 +1073,10 @@ errlHndl_t FsiDD::genFullFsiAddr(FsiAddrInfo_t& io_addrInfo)
* @devdesc FsiDD::genFullFsiAddr> Master Type is not supported
*/
l_err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- FSI::MOD_FSIDD_GENFULLFSIADDR,
- FSI::RC_FSI_NOT_SUPPORTED,
- target_to_uint64(io_addrInfo.fsiTarg),
- fsi_info.linkid.id );
+ FSI::MOD_FSIDD_GENFULLFSIADDR,
+ FSI::RC_FSI_NOT_SUPPORTED,
+ TARGETING::get_huid(io_addrInfo.fsiTarg),
+ fsi_info.linkid.id );
l_err->collectTrace("FSI",1024);
return l_err;
}
@@ -1114,12 +1092,13 @@ errlHndl_t FsiDD::genFullFsiAddr(FsiAddrInfo_t& io_addrInfo)
//check for invalid topology
if( mfsi_info.master != iv_master )
{
- TRACFCOMP( g_trac_fsi, "target=%llX : master=%llX : master's master=%llX : Cannot chain 2 masters", target_to_uint64(io_addrInfo.fsiTarg), target_to_uint64(fsi_info.master), target_to_uint64(mfsi_info.master), fsi_info.type );
+ TRACFCOMP( g_trac_fsi, "target=%.8X : master=%.8X : master's master=%.8X : Cannot chain 2 masters", TARGETING::get_huid(io_addrInfo.fsiTarg), TARGETING::get_huid(fsi_info.master), TARGETING::get_huid(mfsi_info.master), fsi_info.type );
/*@
* @errortype
* @moduleid FSI::MOD_FSIDD_GENFULLFSIADDR
* @reasoncode FSI::RC_INVALID_FSI_PATH_1
- * @userdata1 Target of FSI Operation
+ * @userdata1[0:31] Target of FSI Operation
+ * @userdata1[32:63] Target's FSI Master Chip
* @userdata2[0:7] Physical Node of FSI Master processor [target's master]
* @userdata2[8:15] Physical Position of FSI Master processor [target's master]
* @userdata2[16:23] FSI Master type (0=MFSI,1=CMFSI,2=NO_MASTER) [target's master]
@@ -1130,25 +1109,29 @@ errlHndl_t FsiDD::genFullFsiAddr(FsiAddrInfo_t& io_addrInfo)
* @userdata2[56:63] Slave link/port number [master's master]
* @devdesc FsiDD::genFullFsiAddr> Cannot chain 2 masters
*/
- l_err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- FSI::MOD_FSIDD_GENFULLFSIADDR,
- FSI::RC_INVALID_FSI_PATH_1,
- target_to_uint64(io_addrInfo.fsiTarg),
- TWO_UINT32_TO_UINT64(
- fsi_info.linkid.id,
- mfsi_info.linkid.id) );
+ l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ FSI::MOD_FSIDD_GENFULLFSIADDR,
+ FSI::RC_INVALID_FSI_PATH_1,
+ TWO_UINT32_TO_UINT64(
+ TARGETING::get_huid(io_addrInfo.fsiTarg),
+ TARGETING::get_huid(fsi_info.master)),
+ TWO_UINT32_TO_UINT64(
+ fsi_info.linkid.id,
+ mfsi_info.linkid.id) );
l_err->collectTrace("FSI",1024);
return l_err;
}
else if( TARGETING::FSI_MASTER_TYPE_MFSI != mfsi_info.type )
{
- TRACFCOMP( g_trac_fsi, "target=%llX : master=%llX, type=%d, port=%d", target_to_uint64(io_addrInfo.fsiTarg), target_to_uint64(fsi_info.master), fsi_info.type, fsi_info.port );
- TRACFCOMP( g_trac_fsi, "Master: target=%llX : master=%llX, type=%d, port=%d", target_to_uint64(fsi_info.master), target_to_uint64(mfsi_info.master), mfsi_info.type, mfsi_info.port );
+ TRACFCOMP( g_trac_fsi, "target=%.8X : master=%.8X, type=%d, port=%d", TARGETING::get_huid(io_addrInfo.fsiTarg), TARGETING::get_huid(fsi_info.master), fsi_info.type, fsi_info.port );
+ TRACFCOMP( g_trac_fsi, "Master: target=%.8X : master=%.8X, type=%d, port=%d", TARGETING::get_huid(fsi_info.master), TARGETING::get_huid(mfsi_info.master), mfsi_info.type, mfsi_info.port );
/*@
* @errortype
* @moduleid FSI::MOD_FSIDD_GENFULLFSIADDR
* @reasoncode FSI::RC_INVALID_FSI_PATH_2
- * @userdata1 Target of FSI Operation
+ * @userdata1[0:31] Target of FSI Operation
+ * @userdata1[32:63] Target's FSI Master Chip
* @userdata2[0:7] Physical Node of FSI Master processor [target's master]
* @userdata2[8:15] Physical Position of FSI Master processor [target's master]
* @userdata2[16:23] FSI Master type (0=MFSI,1=CMFSI,2=NO_MASTER) [target's master]
@@ -1159,13 +1142,16 @@ errlHndl_t FsiDD::genFullFsiAddr(FsiAddrInfo_t& io_addrInfo)
* @userdata2[56:63] Slave link/port number [master's master]
* @devdesc FsiDD::genFullFsiAddr> Invalid master type for the target's master
*/
- l_err = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- FSI::MOD_FSIDD_GENFULLFSIADDR,
- FSI::RC_INVALID_FSI_PATH_2,
- target_to_uint64(io_addrInfo.fsiTarg),
- TWO_UINT32_TO_UINT64(
- fsi_info.linkid.id,
- mfsi_info.linkid.id) );
+ l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ FSI::MOD_FSIDD_GENFULLFSIADDR,
+ FSI::RC_INVALID_FSI_PATH_2,
+ TWO_UINT32_TO_UINT64(
+ TARGETING::get_huid(io_addrInfo.fsiTarg),
+ TARGETING::get_huid(fsi_info.master)),
+ TWO_UINT32_TO_UINT64(
+ fsi_info.linkid.id,
+ mfsi_info.linkid.id) );
l_err->collectTrace("FSI",1024);
return l_err;
}
@@ -1250,12 +1236,16 @@ errlHndl_t FsiDD::initPort(FsiChipInfo_t i_fsiInfo,
}
TRACFCOMP( g_trac_fsi, "FsiDD::initPort> Slave %.8X is present", i_fsiInfo.linkid.id );
- // Do not initialize slave in VBU because they are already done
- // before we run
- //@todo - switch to SP-Capabilities Attribute (See Issue 35817)
- if( TARGETING::is_vpo() )
+ // Do not initialize slaves because they are already done
+ // before we run
+ TARGETING::Target * sys = NULL;
+ TARGETING::targetService().getTopLevelTarget( sys );
+ TARGETING::SpFunctions spfuncs;
+ if( sys
+ && sys->tryGetAttr<TARGETING::ATTR_SP_FUNCTIONS>(spfuncs)
+ && spfuncs.fsiSlaveInit )
{
- TRACFCOMP( g_trac_fsi, "FsiDD::initPort> Skipping Init for VPO" );
+ TRACFCOMP( g_trac_fsi, "FsiDD::initPort> Skipping Slave Init" );
o_enabled = true;
break;
}
@@ -1363,7 +1353,7 @@ errlHndl_t FsiDD::initMasterControl(const TARGETING::Target* i_master,
TARGETING::FSI_MASTER_TYPE i_type)
{
errlHndl_t l_err = NULL;
- TRACFCOMP( g_trac_fsi, ENTER_MRK"FsiDD::initMasterControl> Initializing Master %llX:%d", target_to_uint64(i_master), i_type );
+ TRACFCOMP( g_trac_fsi, ENTER_MRK"FsiDD::initMasterControl> Initializing Master %.8X:%d", TARGETING::get_huid(i_master), i_type );
do {
uint32_t databuf = 0;
@@ -1415,7 +1405,7 @@ errlHndl_t FsiDD::initMasterControl(const TARGETING::Target* i_master,
// Only looking at the top bits
uint64_t slave_index = getSlaveEnableIndex(i_master,i_type);
iv_slaves[slave_index] = (uint8_t)(databuf >> (32-MAX_SLAVE_PORTS));
- TRACFCOMP( g_trac_fsi, "FsiDD::initMasterControl> %llX:%d : Slave Detect = %.8X", target_to_uint64(i_master), i_type, databuf );
+ TRACFCOMP( g_trac_fsi, "FsiDD::initMasterControl> %.8X:%d : Slave Detect = %.8X", TARGETING::get_huid(i_master), i_type, databuf );
//Clear FSI Slave Interrupt on ports 0-7
databuf = 0x00000000;
@@ -1445,7 +1435,7 @@ errlHndl_t FsiDD::initMasterControl(const TARGETING::Target* i_master,
if( l_err )
{
- TRACFCOMP( g_trac_fsi, "FsiDD::initMasterControl> Error during initialization of Target %llX : RC=%llX", target_to_uint64(iv_master), l_err->reasonCode() );
+ TRACFCOMP( g_trac_fsi, "FsiDD::initMasterControl> Error during initialization of Target %.8X : RC=%llX", TARGETING::get_huid(iv_master), l_err->reasonCode() );
uint64_t slave_index = getSlaveEnableIndex(i_master,i_type);
iv_slaves[slave_index] = 0;
}
@@ -1599,7 +1589,7 @@ FsiDD::FsiChipInfo_t FsiDD::getFsiInfo( const TARGETING::Target* i_target )
}
}
- TRACUCOMP( g_trac_fsi, "getFsiInfo> i_target=%llX : master=%llX, type=%X", target_to_uint64(i_target), target_to_uint64(info.master), info.type );
+ TRACUCOMP( g_trac_fsi, "getFsiInfo> i_target=%.8X : master=%.8X, type=%X", TARGETING::get_huid(i_target), TARGETING::get_huid(info.master), info.type );
TRACUCOMP( g_trac_fsi, "getFsiInfo> port=%X, cascade=%X, flags=%X, linkid=%.8X", info.port, info.cascade, info.flags, info.port );
return info;
}
OpenPOWER on IntegriCloud