diff options
-rw-r--r-- | src/usr/targeting/attroverride/README.attr_override | 142 | ||||
-rwxr-xr-x | src/usr/targeting/attroverride/attrTextToBinaryBlob.C | 160 | ||||
-rwxr-xr-x | src/usr/targeting/attroverride/attrTextToBinaryBlob.H | 42 |
3 files changed, 279 insertions, 65 deletions
diff --git a/src/usr/targeting/attroverride/README.attr_override b/src/usr/targeting/attroverride/README.attr_override index da323e2c1..b87e5fddc 100644 --- a/src/usr/targeting/attroverride/README.attr_override +++ b/src/usr/targeting/attroverride/README.attr_override @@ -25,6 +25,90 @@ the user would like to override along with their new values. ATTR_ATTRIBUTE_2 <datatype> <value in hex> ATTR_ATTRIBUTE_3 <datatype> <value in hex> CONST +###Target String Syntax: + + <target string> + ** System Target Line Format ** + <system string> + + ** Unit Target Line Format ** + <system string> || [:nz] || + :<chip type> || [.<chip unit type>] || + :<chip position> || [:<unit position>] + + ** Unit Target Line Alternate Format** + <chip type> || [.<chip unit type>] || + : <system string> || [:nz] || + :<chip position> || [:<unit position>] + + + <system string> + *** System Target Line *** + kx:sy[:] note: x=0, y=0 + + note : additional obsolete forms have beeng grandfathered in: + + blank note: interpreted as k0:s0 + kx:nz:sy[:] note: x=0, y=0, z=0 or all + + *** Unit Target Line *** + kx:sy[:] note: x=0, y=0 + + note : additional obsolete forms have beeng grandfathered in: + + kx:nz:sy[:] note: x=0, y=0 + z may be : + - single digit 0-9 + - comma separated list of digits 0-9 + -- 2 or more items in list + -- no ordering dependencies + e.g. 0,4 + e.g. 5,3,9 + - all + + nz : optional node number term + z may be : + - single digit 0-9 + - comma separated list of digits 0-9 + -- 2 or more items in list + -- no ordering dependencies + e.g. 0,4 + e.g. 5,3,9 + - all + + <chip type> + definitions : + src/usr/targeting/attroverride/attrTextToBinaryBlob.C + AttrOverrideSyncConstants::CHIP_TYPE_TARG_STR_TO_TYPE + e.g. p9n, pu, dimm + + <chip unit type> + definitions : + src/usr/targeting/attroverride/attrTextToBinaryBlob.C + AttrOverrideSyncConstants::CHIP_UNIT_TYPE_TARG_STR_TO_TYPE + e.g. ex, mca, obus + + <chip position> + pw + note : w may be : + - single number 0 - 65,534 + - comma separated list of digits 0 - 65,534 + -- 2 or more items in list + -- no ordering dependencies + e.g. 0,4 + e.g. 5,3,9 + - all + + <unit position> + cv + note : v may be : + - single number 0 - 254 + - comma separated list of digits 0 - 254 + -- 2 or more items in list + -- no ordering dependencies + e.g. 0,4 + e.g. 5,3,9 + - all ####Examples @@ -33,21 +117,21 @@ the user would like to override along with their new values. CLEAR - target = k0:n0:s0: + target = k0:s0 ATTR_SCRATCH_UINT8_1 0x12 ATTR_SCRATCH_UINT32_1 0x12345678 ATTR_SCRATCH_UINT64_1 0x8000000000000001 CONST - target = k0:n0:s0:centaur:p06 + target = k0:s0:n0:centaur:p06 ATTR_MSS_CACHE_ENABLE 0x0 CONST - target = k0:n0:s0:centaur.mba:p06:c1 + target = k0:s0:n0:centaur.mba:p06:c1 ATTR_MSS_FREQ 0x00000640 CONST ATTR_MSS_VOLT_VDDR_MILLIVOLTS 0x00000546 CONST ATTR_EFF_CEN_DRV_IMP_CNTL[0] OHM15 CONST ATTR_EFF_CEN_DRV_IMP_CNTL[1] OHM15 CONST - target = k0:n0:s0:centaur.mba:pall:call + target = k0:s0:n0:centaur.mba:pall:call ATTR_MSS_DIMM_MFG_ID_CODE[0][0] 0x12345678 ATTR_MSS_DIMM_MFG_ID_CODE[0][1] 0x12345678 ATTR_MSS_DIMM_MFG_ID_CODE[1][0] 0x12345678 @@ -57,25 +141,24 @@ the user would like to override along with their new values. #####Other target examples: - System Target: - - target - - target = k0:n0:s0 - - target = k0:n0:s0: + - target = k0:s0 + - target = k0:s0: - DIMM Target - - target = k0:n0:s0:dimm:p06 + - target = k0:s0:n0:dimm:p06 - Multiple DIMM Targets - - target = k0:n0:s0:dimm:p2,4 + - target = k0:s0:n0:dimm:p2,4 - - All p8 chips - - target = k0:n0:s0:p8:pall + - All p9 chips + - target = k0:s0:n0:p9:pall - All MCS chiplets: - - target = k0:n0:s0:p8.mcs:pall:call + - target = k0:s0:n0:p9.mcs:pall:call - - Node number specified (Brazos only, for Tuleta, always use n0) - - target = k0:n1:s0:dimm:p06 - - target = k0:nall:s0:dimm:p06 + - Node number specified + - target = k0:s0:n1:dimm:p06 + - target = k0:s0:nall:dimm:p06 ###Rules: @@ -86,36 +169,9 @@ the user would like to override along with their new values. - You may want to have CLEAR as the first line of an overrides file to clear all overrides before applying the new set. - - Lines starting with "target = k0:n0:s0:" specify the target for all + - Lines starting with "target = k0:s0" specify the target for all following attributes until the next target line. - - The next part of the line specifies the target type - - - p8.ex (EX (core) unit takes chip position and unit position) - - p8.mcs (MCS unit takes chip position and unit position) - - p8.xbus (XBUS unit takes chip position and unit position) - - p8.abus (ABUS unit takes chip position and unit position) - - centaur.mba (MBA unit takes chip position and unit position) - - centaur (takes chip position only) - - p8 (takes chip position only) - - dimm (takes dimm position only) - - else system target is assumed - - - - The next part of the line specifies the target position (for units - this is the parent chip position) - - - :p0 or :p1 or :p1,3 or :p511 or :pall etc (note that 'all' - specifies an override for all Targets of the specified type) - - - - The next part of the line specified the target unit position (only - applicable to targets) - - - :c0 or :c1 or :c1,2 or :call etc (note that 'all' specifies - an override for all Targets of the specified type) - - - Lines starting with "ATTR_" specify attribute overrides - There are 2 or 3 columns, they must be separated by one or more diff --git a/src/usr/targeting/attroverride/attrTextToBinaryBlob.C b/src/usr/targeting/attroverride/attrTextToBinaryBlob.C index 7205ad854..eb8a923e7 100755 --- a/src/usr/targeting/attroverride/attrTextToBinaryBlob.C +++ b/src/usr/targeting/attroverride/attrTextToBinaryBlob.C @@ -596,7 +596,9 @@ bool AttrTextToBinaryBlob::attrFileTargetLineToData( l_line = l_line.substr(0, l_nextWhiteSpacePos); } - // remove the single trailing colon + // if all that remains is a single ':' char + // then remove it and continue (e.g started with k0:s0:<blanks>) + // otherwise the ':' is part of a parameter term if ( (l_line.size() == 1) && (l_line.substr(0, 1) == ":") ) { @@ -604,7 +606,8 @@ bool AttrTextToBinaryBlob::attrFileTargetLineToData( } // Figure out the node number - if (0 == l_line.find(TARGET_NODE_HEADER_STR)) + size_t l_nPosn = l_line.find(TARGET_NODE_HEADER_STR); + if (0 == l_nPosn) { l_line = l_line.substr(strlen(TARGET_NODE_HEADER_STR)); @@ -675,7 +678,6 @@ bool AttrTextToBinaryBlob::attrFileTargetLineToData( TargStrToType* chip_type_first = NULL; TargStrToType* chip_type_last = NULL; - TargStrToType* item = NULL; if( l_colon_pos != std::string::npos) { @@ -739,11 +741,20 @@ bool AttrTextToBinaryBlob::attrFileTargetLineToData( l_sysTarget = true; } - // For a non-system target, // figure out the position and unit position if (l_sysTarget == false) { + if (l_nPosn == std::string::npos) + { + // missing n term, need to add a default label + o_targetLabels.push_back(l_label); + } + else + { + // (labels already exist) + } + // Figure out the target's position if (0 == l_line.find(TARGET_POS_HEADER_STR)) { @@ -1083,6 +1094,7 @@ bool AttrTextToBinaryBlob::convertTargLine( const std::string & i_line, do { size_t l_kPosn = l_line.find( "k", 0); + size_t l_kColonPosn = l_line.find( ":k", 0); size_t l_sPosn = l_line.find( ":s", 0); if (l_line.find_first_not_of(" \t", 6) == std::string::npos) @@ -1109,13 +1121,6 @@ bool AttrTextToBinaryBlob::convertTargLine( const std::string & i_line, break; } - else if ( (l_sPosn == (l_kPosn + 2)) ) - { - // kx:sy new format, no conversion needed - o_convertedLine = i_line; - break; - } - else if ( l_kPosn > l_sPosn ) { // out of order parms, cant convert @@ -1128,6 +1133,123 @@ bool AttrTextToBinaryBlob::convertTargLine( const std::string & i_line, break; } + else if ( l_kColonPosn != std::string::npos ) + { + // (a parameter preceeds k term) + + size_t eqPos = l_line.find( "=", 0); + + if (eqPos == std::string::npos) + { + // missing =, cant convert + o_convertedLine = i_line; + printf("convertTargLine : Error : " + "Missing = , cannot convert : %s \n", + o_convertedLine.c_str() ); + + l_rc = true; + break; + } + + // preAmble may be <chiptype> || [.<chip unit type>] || : + size_t l_preAmbleStart = l_line.find_first_not_of(" \t", eqPos+1); + + // remove trailing colon and prepend colon + size_t l_preAmbleLen = (l_kColonPosn - l_preAmbleStart); + std::string l_preAmble = ":" + + l_line.substr( l_preAmbleStart, l_preAmbleLen ); + + // k0:s0 term ( or k0:nz:s0 ) is next + size_t l_sysStrLen = (l_sPosn + 3) - (l_kColonPosn + 1); + std::string l_sysStr = l_line.substr( l_kColonPosn + 1, + l_sysStrLen ); + + std::string l_nStr; + l_nStr.clear(); + + // check for non standard k0:nz:s0 format + size_t l_nStart = l_sysStr.find(":n", 0); + + if (l_nStart != std::string::npos) + { + // extract n term and compress system string + std::string l_nPrefix = l_sysStr.substr(0, l_nStart); + + size_t l_nPost = l_sysStr.find(":", (l_nStart + 1)); + std::string l_nPostfix; + l_nPostfix.clear(); + + if ( l_nPost != std::string::npos ) + { + // extract n string & post fix + l_nStr = l_sysStr.substr(l_nStart, (l_nPost - l_nStart)); + l_nPostfix = l_sysStr.substr( l_nPost, l_sysStr.size() ); + } + else + { + // extract n string, no post fix + l_nStr = l_sysStr.substr(l_nStart, l_sysStr.size()); + } + + // rebuild the system string + l_sysStr = l_nPrefix + l_nPostfix + l_nStr; + l_nStr.clear(); + } // end extract n term + + std::string l_trlStr; + l_trlStr.clear(); + + // look for next term + size_t l_trlStart = l_line.find( ":", l_sPosn + 3); + + if (l_trlStart != std::string::npos) + { + // step over optional :n term + if (l_line.substr( l_trlStart, 2) == ":n") + { + // locate the end of the n term + l_nStart = l_trlStart; + l_trlStart = l_line.find( ":", l_nStart + 1); + + if ( l_trlStart != std::string::npos) + { + // create n and trl strings + l_nStr = l_line.substr( l_nStart, + (l_trlStart - l_nStart)); + + l_trlStr = l_line.substr( l_trlStart, l_line.size() ); + } + else + { + // no trl string, create n string + l_nStr = l_line.substr( l_nStart, l_line.size() ); + } + } // end step over n term + else + { + // no n string, create trl string + l_trlStr = l_line.substr( l_trlStart, l_line.size() ); + } + } // end no trailer found + + // assemble the converted line + o_convertedLine = ( "target = " + l_sysStr + l_nStr + + l_preAmble + l_trlStr ); + + printf("convertTargLine : Info : " + "Target Line converted to : %s \n", + o_convertedLine.c_str() ); + + break; + } + + else if ( l_sPosn == (l_kPosn + 2) ) + { + // kx:sy new format, no conversion needed + o_convertedLine = i_line; + break; + } + else { // (old format) @@ -1136,6 +1258,9 @@ bool AttrTextToBinaryBlob::convertTargLine( const std::string & i_line, // (old format, convert to new format. see header file) // locate k & s term strings + // "overflow" is the position right after the term string + // and is the beginning of the next term string + // std::string::npos occurs when no "next" term string size_t l_kPosn_overflow = l_line.find( ":", l_kPosn+1); size_t l_kStrSize = (l_kPosn_overflow != std::string::npos) ? (l_kPosn_overflow - l_kPosn) : (l_line.size() - l_kPosn); @@ -1539,6 +1664,8 @@ AttrTextToBinaryBlob::TargetTypeRc } // Optional end Term exists, check n parm value(s) + // step over the k0:s0:n chars then isolate the + // size/value of the n parm size_t l_nValStartPosn = 7; size_t l_nValOverflowPosn = l_line.find( ":", l_nValStartPosn ); @@ -1725,9 +1852,11 @@ bool AttrTextToBinaryBlob::validateBinaryXlate( const uint8_t * i_buffer, tank, pad, termLen ); printf("validateBinaryXlate: Attribute Hdr: " - "ID = %.8X Target Type = %.8X Positon = %.4X " - "Unit Position = %.2X node = %.1X flags = %.1X " - "Parm Length = %.8X\n", + "ID = %.8X Target Type = %.8X \n" + " Positon = %.4X" + " Unit Position = %.2X node = %.1X \n" + " flags = %.1X" + " Parm Length = %.8X\n", attrId, targetType, pos, unitPos, node, flags, valSize); if // parm value exists @@ -1823,6 +1952,9 @@ bool AttrTextToBinaryBlob::attrTextToBinaryBlob( std::ifstream& i_file, l_attrString.clear(); l_attrLines.clear(); + // line feed before "target" string + printf("\n"); + do { // Read next line. diff --git a/src/usr/targeting/attroverride/attrTextToBinaryBlob.H b/src/usr/targeting/attroverride/attrTextToBinaryBlob.H index 9f1174315..ee12f61e6 100755 --- a/src/usr/targeting/attroverride/attrTextToBinaryBlob.H +++ b/src/usr/targeting/attroverride/attrTextToBinaryBlob.H @@ -74,12 +74,28 @@ namespace AttrTextToBinaryBlob * --------------------------------------- * The format of a Unit Target Line is : * - * <system string> || [:nz] || :<chip type> || [.<chip unit type>] || - * :<target position> || [:<unit position>] + * target = <system string> || [:nz] || + * :<chip type> || [.<chip unit type>] || + * :<chip position> || [:<unit position>] * - * note : x = 0 - * note : Y = 0 - * note : z may be : + * Examples: + * target = k0:s0:centaur:p06 // no optional fields + * target = k0:s0:n0:centaur.mba:p00:c0 // all optional fields + * + * ---- OR ---- + * target = <chip type> || [.<chip unit type>] || + * : <system string> || [:nz] || + * :<chip position> || [:<unit position>] + * + * Examples: + * target = centaur:k0:s0:p06 // no optional fields + * target = centaur.mba:k0:s0:n0:p00:c0 // all optional fields + * + * + * <system string> is defined above; x=0, y=0 + * + * nz : optional node number term + * z may be : * - single digit 0-9 * - comma separated list of digits 0-9 * -- 2 or more items in list @@ -88,7 +104,6 @@ namespace AttrTextToBinaryBlob * e.g. 5,3,9 * - all * - * * <chip type> * definitions : * src/usr/targeting/attroverride/attrTextToBinaryBlob.C @@ -101,7 +116,7 @@ namespace AttrTextToBinaryBlob * AttrOverrideSyncConstants::CHIP_UNIT_TYPE_TARG_STR_TO_TYPE * e.g. ex, mca, obus * - * <target position> + * <chip position> * pw * note : w may be : * - single number 0 - 65,534 @@ -168,6 +183,17 @@ namespace AttrTextToBinaryBlob * target = k0:s0:n0,6,9:centaur.mba:p06:c1 * ATTR_MSS_FREQ 0x00000640 CONST * + * ATTR_MSS_VOLT_VDDR_MILLIVOLTS 0x00000546 u32 CONST + * + * target = k0:s0:nall:p9:pall + * ATTR_VOLTAGE_EXT_VDD_BIAS_ULTRATURBO -5 CONST + * + * target = k0:s0:n4:centaur:p06 + * ATTR_MSS_FREQ 0x00000345 CONST + * + * target = k0:s0:n0,6,9:centaur.mba:p06:c1 + * ATTR_MSS_FREQ 0x00000640 CONST + * */ @@ -304,7 +330,7 @@ namespace AttrTextToBinaryBlob * Structure for target's identification * * node Target Node Number - * targetPos Target Position + * targetPos Target Position (chip position) * unitPos Target Unit Position */ struct target_label |