diff options
Diffstat (limited to 'src/import/chips/common/utils/imageProcs/common_ringId.C')
-rw-r--r-- | src/import/chips/common/utils/imageProcs/common_ringId.C | 820 |
1 files changed, 105 insertions, 715 deletions
diff --git a/src/import/chips/common/utils/imageProcs/common_ringId.C b/src/import/chips/common/utils/imageProcs/common_ringId.C index d52c92072..c568468f8 100644 --- a/src/import/chips/common/utils/imageProcs/common_ringId.C +++ b/src/import/chips/common/utils/imageProcs/common_ringId.C @@ -34,7 +34,6 @@ namespace CEN_RID }; #include <p9_infrastruct_help.H> - // These strings must adhere precisely to the enum of PpeType. const char* ppeTypeName[] = { "SBE", "CME", @@ -76,7 +75,7 @@ static int get_ipl_ring_path_param( RingVariant_t i_ringVariant, char*& o_ringPa if (o_ringPath == NULL) { - MY_ERR("get_ipl_ring_path_param(): IPL env parm for ringVariant=%d not set\n", + MY_ERR("get_ipl_ring_path_param(): IPL env parm for ringVariant=0x%x not set.\n", i_ringVariant); return INFRASTRUCT_RC_ENV_ERROR; } @@ -119,7 +118,7 @@ static int get_runtime_ring_path_param( RingVariant_t i_ringVariant, char*& o_ri if (o_ringPath == NULL) { - MY_ERR("get_runtime_ring_path_param(): RUNTIME env parm for ringVariant(=%d) not set\n", + MY_ERR("get_runtime_ring_path_param(): RUNTIME env parm for ringVariant=0x%x not set.\n", i_ringVariant); return INFRASTRUCT_RC_ENV_ERROR; } @@ -155,7 +154,8 @@ int ringid_get_raw_ring_file_path( uint32_t i_magic, } else { - MY_ERR("Invalid ringVariant(=%d) for TOR magic=0x%08x\n", i_ringVariant, i_magic); + MY_ERR("Invalid ringVariant(=%d) for TOR magic=0x%08x\n", + i_ringVariant, i_magic); rc = TOR_INVALID_VARIANT; } @@ -186,7 +186,8 @@ int ringid_get_raw_ring_file_path( uint32_t i_magic, } else { - MY_ERR("Invalid ringVariant(=%d) for TOR magic=0x%08x\n", i_ringVariant, i_magic); + MY_ERR("Invalid ringVariant(=%d) for TOR magic=0x%08x\n", + i_ringVariant, i_magic); rc = TOR_INVALID_VARIANT; } @@ -207,7 +208,8 @@ int ringid_get_raw_ring_file_path( uint32_t i_magic, } else { - MY_ERR("Invalid ringVariant(=%d) for TOR magic=0x%08x\n", i_ringVariant, i_magic); + MY_ERR("Invalid ringVariant(=%d) for TOR magic=0x%08x\n", + i_ringVariant, i_magic); rc = TOR_INVALID_VARIANT; } @@ -226,7 +228,7 @@ int ringid_get_raw_ring_file_path( uint32_t i_magic, } else { - MY_ERR("Unsupported value of TOR magic(=0x%08x)\n", i_magic); + MY_ERR("Unsupported value of TOR magic(=0x%X)\n", i_magic); rc = TOR_INVALID_MAGIC_NUMBER; } @@ -239,26 +241,27 @@ int ringid_get_raw_ring_file_path( uint32_t i_magic, #endif // End of ifndef __HOSTBOOT_MODULE -int ringid_get_num_ring_ids( ChipId_t i_chipId, - RingId_t* o_numRingIds ) +int ringid_get_noof_ring_ids( ChipType_t i_chipType, + RingId_t* o_numRingIds) { int rc = INFRASTRUCT_RC_SUCCESS; - switch (i_chipId) + switch (i_chipType) { - case CID_P9N: - case CID_P9C: - case CID_P9A: + case CT_P9N: + case CT_P9C: + case CT_P9A: *o_numRingIds = P9_RID::NUM_RING_IDS; break; - case CID_CEN: + case CT_CEN: *o_numRingIds = CEN_RID::NUM_RING_IDS; break; default: - MY_ERR("ringid_get_num_ring_ids(): Unsupported chipId(=%d) supplied\n", i_chipId); - rc = TOR_INVALID_CHIP_ID; + MY_ERR("ringid_get_noof_ring_ids(): Unsupported chipType (=%d) supplied", + i_chipType); + rc = TOR_INVALID_CHIPTYPE; break; } @@ -266,108 +269,116 @@ int ringid_get_num_ring_ids( ChipId_t i_chipId, } -int ringid_get_num_chiplets( ChipId_t i_chipId, - uint32_t i_torMagic, - uint8_t* o_numChiplets ) +int ringid_get_ring_list( ChipType_t i_chipType, + RingId_t i_ringId, + GenRingIdList** o_ringIdList) { - switch (i_chipId) + int rc = INFRASTRUCT_RC_SUCCESS; + + switch (i_chipType) { - case CID_P9N: - case CID_P9C: - case CID_P9A: + case CT_P9N: + case CT_P9C: + case CT_P9A: + *o_ringIdList = P9_RID::_ringid_get_ring_list(i_ringId); + break; + + case CT_CEN: + *o_ringIdList = CEN_RID::_ringid_get_ring_list(i_ringId); + break; + + default: + MY_ERR("ringid_get_ring_list(): Unsupported chipType (=%d) supplied", + i_chipType); + rc = TOR_INVALID_CHIPTYPE; + break; + } + + return rc; +} + + +int ringid_get_noof_chiplets( ChipType_t i_chipType, + uint32_t i_torMagic, + uint8_t* o_numChiplets ) +{ + switch (i_chipType) + { + case CT_P9N: + case CT_P9C: + case CT_P9A: if ( i_torMagic == TOR_MAGIC_SBE || i_torMagic == TOR_MAGIC_OVRD || i_torMagic == TOR_MAGIC_OVLY ) { - *o_numChiplets = P9_RID::SBE_NUM_CHIPLETS; + *o_numChiplets = P9_RID::SBE_NOOF_CHIPLETS; } else if ( i_torMagic == TOR_MAGIC_CME ) { - *o_numChiplets = P9_RID::CME_NUM_CHIPLETS; + *o_numChiplets = P9_RID::CME_NOOF_CHIPLETS; } else if ( i_torMagic == TOR_MAGIC_SGPE ) { - *o_numChiplets = P9_RID::SGPE_NUM_CHIPLETS; + *o_numChiplets = P9_RID::SGPE_NOOF_CHIPLETS; } else { - MY_ERR("ringid_get_num_chiplets(): Invalid torMagic(=0x%08x) for chipId(=CID_P9x=%d)\n", i_torMagic, i_chipId); + MY_ERR("Invalid torMagic (=0x%08x) for chipType (=CT_P9x=%d)\n", i_torMagic, i_chipType); return TOR_INVALID_MAGIC_NUMBER; } break; - case CID_CEN: + case CT_CEN: if ( i_torMagic == TOR_MAGIC_CEN || i_torMagic == TOR_MAGIC_OVRD ) { - *o_numChiplets = CEN_RID::CEN_NUM_CHIPLETS; + *o_numChiplets = CEN_RID::CEN_NOOF_CHIPLETS; } else { - MY_ERR("Invalid torMagic(=0x%08x) for chipId(=CID_CEN)\n", i_torMagic); + MY_ERR("Invalid torMagic (=0x%08x) for chipType (=CT_CEN)\n", i_torMagic); return TOR_INVALID_MAGIC_NUMBER; } break; default: - MY_ERR("Invalid chipId(=%d)\n", i_chipId); - return TOR_INVALID_CHIP_ID; + MY_ERR("Invalid chipType (=0x%02x)\n", i_chipType); + return TOR_INVALID_CHIPTYPE; } return TOR_SUCCESS; } -int ringid_get_ringProps( ChipId_t i_chipId, - RingProperties_t** o_ringProps ) -{ - int rc = INFRASTRUCT_RC_SUCCESS; - - switch (i_chipId) - { - case CID_P9N: - case CID_P9C: - case CID_P9A: - *o_ringProps = (RingProperties_t*)&P9_RID::RING_PROPERTIES; - break; - - case CID_CEN: - *o_ringProps = (RingProperties_t*)&CEN_RID::RING_PROPERTIES; - break; - - default: - MY_ERR("ringid_get_ringProps(): Unsupported chipId (=%d) supplied\n", i_chipId); - rc = TOR_INVALID_CHIP_ID; - break; - } - - return rc; -} - - -int ringid_get_chipletProps( ChipId_t i_chipId, - uint32_t i_torMagic, - uint8_t i_torVersion, - ChipletType_t i_chipletType, - ChipletData_t** o_chipletData, - uint8_t* o_numVariants ) +int ringid_get_properties( ChipType_t i_chipType, + uint32_t i_torMagic, + uint8_t i_torVersion, + ChipletType_t i_chipletType, + ChipletData_t** o_chipletData, + GenRingIdList** o_ringIdListCommon, + GenRingIdList** o_ringIdListInstance, + RingVariantOrder** o_ringVariantOrder, + RingProperties_t** o_ringProps, + uint8_t* o_numVariants ) { - switch (i_chipId) + switch (i_chipType) { - case CID_P9N: - case CID_P9C: - case CID_P9A: + case CT_P9N: + case CT_P9C: + case CT_P9A: if ( i_torMagic == TOR_MAGIC_SBE || i_torMagic == TOR_MAGIC_OVRD || i_torMagic == TOR_MAGIC_OVLY ) { P9_RID::ringid_get_chiplet_properties( i_chipletType, - o_chipletData); - - *o_numVariants = (*o_chipletData)->numCommonRingVariants; + o_chipletData, + o_ringIdListCommon, + o_ringIdListInstance, + o_ringVariantOrder, + o_numVariants); if ( i_torVersion < 7 && (i_chipletType == P9_RID::EQ_TYPE || i_chipletType == P9_RID::EC_TYPE) ) @@ -384,7 +395,10 @@ int ringid_get_chipletProps( ChipId_t i_chipId, else if ( i_torMagic == TOR_MAGIC_CME ) { *o_chipletData = (ChipletData_t*)&P9_RID::EC::g_chipletData; - *o_numVariants = (*o_chipletData)->numCommonRingVariants; + *o_ringIdListCommon = (GenRingIdList*)P9_RID::EC::RING_ID_LIST_COMMON; + *o_ringIdListInstance = (GenRingIdList*)P9_RID::EC::RING_ID_LIST_INSTANCE; + *o_ringVariantOrder = (RingVariantOrder*)P9_RID::EC::RING_VARIANT_ORDER; + *o_numVariants = P9_RID::EC::g_chipletData.iv_num_common_ring_variants; if (i_torVersion < 7) { @@ -394,7 +408,10 @@ int ringid_get_chipletProps( ChipId_t i_chipId, else if ( i_torMagic == TOR_MAGIC_SGPE ) { *o_chipletData = (ChipletData_t*)&P9_RID::EQ::g_chipletData; - *o_numVariants = (*o_chipletData)->numCommonRingVariants; + *o_ringIdListCommon = (GenRingIdList*)P9_RID::EQ::RING_ID_LIST_COMMON; + *o_ringIdListInstance = (GenRingIdList*)P9_RID::EQ::RING_ID_LIST_INSTANCE; + *o_ringVariantOrder = (RingVariantOrder*)P9_RID::EQ::RING_VARIANT_ORDER; + *o_numVariants = P9_RID::EQ::g_chipletData.iv_num_common_ring_variants; if (i_torVersion < 7) { @@ -403,21 +420,25 @@ int ringid_get_chipletProps( ChipId_t i_chipId, } else { - MY_ERR("Invalid torMagic(=0x%08x) for chipId=CID_P9x=%d\n", i_torMagic, i_chipId); + MY_ERR("Invalid torMagic (=0x%08x) for chipType=CT_P9x=%d\n", i_torMagic, i_chipType); return TOR_INVALID_MAGIC_NUMBER; } + *o_ringProps = (RingProperties_t*)P9_RID::RING_PROPERTIES; + break; - case CID_CEN: + case CT_CEN: if ( i_torMagic == TOR_MAGIC_CEN || i_torMagic == TOR_MAGIC_OVRD ) { CEN_RID::ringid_get_chiplet_properties( i_chipletType, - o_chipletData); - - *o_numVariants = (*o_chipletData)->numCommonRingVariants; + o_chipletData, + o_ringIdListCommon, + o_ringIdListInstance, + o_ringVariantOrder, + o_numVariants); if ( i_torMagic == TOR_MAGIC_OVRD) { @@ -426,650 +447,19 @@ int ringid_get_chipletProps( ChipId_t i_chipId, } else { - MY_ERR("Invalid torMagic(=0x%08x) for chipId=CID_CEN\n", i_torMagic); - return TOR_INVALID_MAGIC_NUMBER; - } - - break; - - default: - MY_ERR("Invalid chipId(=%d)\n", i_chipId); - return TOR_INVALID_CHIP_ID; - - } - - return TOR_SUCCESS; -} - - -int ringid_get_scanScomAddr( ChipId_t i_chipId, - RingId_t i_ringId, - uint32_t* o_scanScomAddr ) -{ - int rc = INFRASTRUCT_RC_SUCCESS; - uint32_t l_scanScomAddr = UNDEFINED_SCOM_ADDR; - - switch (i_chipId) - { - case CID_P9N: - case CID_P9C: - case CID_P9A: - if (i_ringId >= P9_RID::NUM_RING_IDS) - { - MY_ERR("ringid_get_scanScomAddr(): ringId(=0x%x) >= NUM_RING_IDS(=0x%x) not" - " allowed\n", - i_ringId, P9_RID::NUM_RING_IDS); - rc = TOR_INVALID_RING_ID; - break; - } - - l_scanScomAddr = P9_RID::RING_PROPERTIES[i_ringId].scanScomAddr; - break; - - case CID_CEN: - if (i_ringId >= CEN_RID::NUM_RING_IDS) - { - MY_ERR("ringid_get_scanScomAddr(): ringId(=0x%x) >= NUM_RING_IDS(=0x%x) not" - " allowed\n", - i_ringId, CEN_RID::NUM_RING_IDS); - rc = TOR_INVALID_RING_ID; - break; - } - - l_scanScomAddr = CEN_RID::RING_PROPERTIES[i_ringId].scanScomAddr; - break; - - default: - MY_ERR("ringid_get_scanScomAddr(): Unsupported chipId (=%d) supplied\n", i_chipId); - rc = TOR_INVALID_CHIP_ID; - break; - } - - *o_scanScomAddr = l_scanScomAddr; - - return rc; -} - - -int ringid_get_ringClass( ChipId_t i_chipId, - RingId_t i_ringId, - RingClass_t* o_ringClass ) -{ - int rc = INFRASTRUCT_RC_SUCCESS; - RingClass_t l_ringClass = UNDEFINED_RING_CLASS; - - switch (i_chipId) - { - case CID_P9N: - case CID_P9C: - case CID_P9A: - if (i_ringId >= P9_RID::NUM_RING_IDS) - { - MY_ERR("ringid_get_ringClass(): ringId(=0x%x) >= NUM_RING_IDS(=0x%x) not allowed\n", - i_ringId, P9_RID::NUM_RING_IDS); - rc = TOR_INVALID_RING_ID; - break; - } - - l_ringClass = P9_RID::RING_PROPERTIES[i_ringId].ringClass; - break; - - case CID_CEN: - if (i_ringId >= CEN_RID::NUM_RING_IDS) - { - MY_ERR("ringid_get_ringClass(): ringId(=0x%x) >= NUM_RING_IDS(=0x%x) not allowed\n", - i_ringId, CEN_RID::NUM_RING_IDS); - rc = TOR_INVALID_RING_ID; - break; - } - - l_ringClass = CEN_RID::RING_PROPERTIES[i_ringId].ringClass; - break; - - default: - MY_ERR("ringid_get_ringClass(): Unsupported chipId (=%d) supplied\n", i_chipId); - rc = TOR_INVALID_CHIP_ID; - break; - } - - *o_ringClass = l_ringClass; - - return rc; -} - - -int ringid_check_ringId( ChipId_t i_chipId, - RingId_t i_ringId ) -{ - int rc = INFRASTRUCT_RC_SUCCESS; - - switch (i_chipId) - { - case CID_P9N: - case CID_P9C: - case CID_P9A: - if ( i_ringId >= P9_RID::NUM_RING_IDS && i_ringId != UNDEFINED_RING_ID ) - { - MY_ERR("ringid_check_ringId(): ringId(=0x%x) >= NUM_RING_IDS(=0x%x) not allowed\n", - i_ringId, P9_RID::NUM_RING_IDS); - rc = TOR_INVALID_RING_ID; - break; - } - - break; - - case CID_CEN: - if ( i_ringId >= CEN_RID::NUM_RING_IDS && i_ringId != UNDEFINED_RING_ID ) - { - MY_ERR("ringid_check_ringId(): ringId(=0x%x) >= NUM_RING_IDS(=0x%x) not allowed\n", - i_ringId, CEN_RID::NUM_RING_IDS); - rc = TOR_INVALID_RING_ID; - break; - } - - break; - - default: - MY_ERR("ringid_check_ringId(): Unsupported chipId (=%d) supplied\n", i_chipId); - rc = TOR_INVALID_CHIP_ID; - break; - } - - return rc; -} - - -int ringid_get_chipletIndex( ChipId_t i_chipId, - uint32_t i_torMagic, - ChipletType_t i_chipletType, - ChipletType_t* o_chipletIndex ) -{ - int rc = INFRASTRUCT_RC_SUCCESS; - - switch (i_chipId) - { - case CID_P9N: - case CID_P9C: - case CID_P9A: - if ( i_torMagic == TOR_MAGIC_SBE || - i_torMagic == TOR_MAGIC_OVRD || - i_torMagic == TOR_MAGIC_OVLY ) - { - if ( i_chipletType < P9_RID::SBE_NUM_CHIPLETS ) - { - *o_chipletIndex = i_chipletType; - } - else - { - rc = TOR_INVALID_CHIPLET_TYPE; - } - } - else if ( i_torMagic == TOR_MAGIC_CME ) - { - if ( i_chipletType == P9_RID::EC_TYPE ) - { - *o_chipletIndex = 0; - } - else - { - rc = TOR_INVALID_CHIPLET_TYPE; - } - } - else if ( i_torMagic == TOR_MAGIC_SGPE ) - { - if ( i_chipletType == P9_RID::EQ_TYPE ) - { - *o_chipletIndex = 0; - } - else - { - rc = TOR_INVALID_CHIPLET_TYPE; - } - } - else - { - MY_ERR("Invalid torMagic(=0x%08x) for chipId=CID_P9x=%d\n", i_torMagic, i_chipId); - return TOR_INVALID_MAGIC_NUMBER; - } - - break; - - case CID_CEN: - if ( i_torMagic == TOR_MAGIC_CEN || - i_torMagic == TOR_MAGIC_OVRD ) - { - if ( i_chipletType < CEN_RID::CEN_NUM_CHIPLETS ) - { - *o_chipletIndex = i_chipletType; - } - else - { - rc = TOR_INVALID_CHIPLET_TYPE; - } - } - else - { - MY_ERR("Invalid torMagic(=0x%08x) for chipId=CID_CEN\n", i_torMagic); + MY_ERR("Invalid torMagic (=0x%08x) for chipType=CT_CEN\n", i_torMagic); return TOR_INVALID_MAGIC_NUMBER; } - break; - - default: - MY_ERR("ringid_get_chipletIndex(): Unsupported chipId (=%d) supplied\n", i_chipId); - rc = TOR_INVALID_CHIP_ID; - break; - } - - return rc; -} - - -#if !defined(__PPE__) && !defined(NO_STD_LIB_IN_PPE) && !defined(__HOSTBOOT_MODULE) && !defined(FIPSODE) - -// The following defines are needed by the initCompiler and so it's practical to use C++ -// features. - -// ** Important ** -// If updates are made to the below three maps, corresponding updates to the two -// maps in ./tools/ifCompiler/initCompiler/initCompiler.y may also have to be made. -// @TODO: RTC192378 -// For P10 we should have just the two maps from initCompiler.y. And they should -// be located in central place like ./chips/common/utils/imageProcs/infrastructure. - -// Mapping from our [InfraStructure's} chipId to the chipType name -std::map <ChipId_t, std::string> chipIdIsMap -{ - { UNDEFINED_CHIP_ID, "" }, - { (ChipId_t)CID_CEN, "cen" }, - { (ChipId_t)CID_P9N, "p9n" }, - { (ChipId_t)CID_P9C, "p9c" }, - { (ChipId_t)CID_P9A, "p9a" } -}; - -// Mapping from chipType name to our [InfraStructure's} chipId (revers of above map) -std::map <std::string, ChipId_t> chipTypeIsMap -{ - { "", UNDEFINED_CHIP_ID }, - { "cen", (ChipId_t)CID_CEN }, - { "p9n", (ChipId_t)CID_P9N }, - { "p9c", (ChipId_t)CID_P9C }, - { "p9a", (ChipId_t)CID_P9A } -}; - -// Mapping from InitCompiler's chipId to InfraStructure's chipId -std::map <uint8_t, ChipId_t> chipIdIcToIsMap -{ - { 0x0, UNDEFINED_CHIP_ID }, - { 0x3, (ChipId_t)CID_CEN }, - { 0x5, (ChipId_t)CID_P9N }, - { 0x6, (ChipId_t)CID_P9C }, - { 0x7, (ChipId_t)CID_P9A } -}; - -int ringidGetRootRingId( ChipId_t i_chipId, - uint32_t i_scanScomAddr, - RingId_t& o_ringId, - bool i_bTest ) -{ - int rc = INFRASTRUCT_RC_SUCCESS; - RingProperties_t* ringProps = NULL; - RingId_t numRingIds = UNDEFINED_RING_ID; - RingId_t iRingId = UNDEFINED_RING_ID; // ringId loop counter - RingId_t l_ringId = UNDEFINED_RING_ID; - bool bFound = false; + *o_ringProps = (RingProperties_t*)CEN_RID::RING_PROPERTIES; - switch (i_chipId) - { - case CID_P9N: - case CID_P9C: - case CID_P9A: - ringProps = (RingProperties_t*)&P9_RID::RING_PROPERTIES; - numRingIds = P9_RID::NUM_RING_IDS; - break; - - case CID_CEN: - ringProps = (RingProperties_t*)&CEN_RID::RING_PROPERTIES; - numRingIds = CEN_RID::NUM_RING_IDS; break; default: - MY_ERR("ringidGetRootRingId(): Unsupported chipId (=%d) supplied\n", i_chipId); - rc = TOR_INVALID_CHIP_ID; - break; - } + MY_ERR("Invalid chipType (=0x%02x)\n", i_chipType); + return TOR_INVALID_CHIPTYPE; - if (!rc) - { - for ( iRingId = 0; iRingId < numRingIds; iRingId++ ) - { - if ( ringProps[iRingId].scanScomAddr == i_scanScomAddr ) - { - if ( ringProps[iRingId].ringClass & RCLS_ROOT_RING ) - { - if (bFound) - { - MY_ERR("ringidGetRootRingId(): Two rings w/same addr cannot both be" - " ROOT_RING. Fix RING_PROPERTIES list for chipId=%d at ringId=0x%x" - " and ringId=0x%x\n", - i_chipId, l_ringId, iRingId); - rc = INFRASTRUCT_RC_CODE_BUG; - l_ringId = UNDEFINED_RING_ID; - break; - } - else - { - l_ringId = iRingId; - bFound = true; - - if (!i_bTest) - { - // Stop testing and break out of ringId loop - break; - } - - // Continue testing to see if duplicate root rings found - } - } - } - } } - if (!rc && !bFound) - { - MY_DBG("ringidGetRootRingId(): Did not find match for scanScomAddr=0x%08x for chipId=%d." - " (Note, l_ringId=0x%x better be equal to UNDEFINED_RING_ID=0x%x)\n", - i_scanScomAddr, i_chipId, l_ringId, UNDEFINED_RING_ID); - rc = TOR_SCOM_ADDR_NOT_FOUND; - } - - o_ringId = l_ringId; - - return rc; -} - - -int ringidGetRingId1( ChipId_t i_chipId, - std::string i_ringName, - RingId_t& o_ringId, - bool i_bTest ) -{ - int rc = INFRASTRUCT_RC_SUCCESS; - RingProperties_t* ringProps = NULL; - RingId_t numRingIds = UNDEFINED_RING_ID; - RingId_t iRingId = UNDEFINED_RING_ID; // ringId loop counter - RingId_t l_ringId = UNDEFINED_RING_ID; - bool bFound = false; - - switch (i_chipId) - { - case CID_P9N: - case CID_P9C: - case CID_P9A: - ringProps = (RingProperties_t*)&P9_RID::RING_PROPERTIES; - numRingIds = P9_RID::NUM_RING_IDS; - break; - - case CID_CEN: - ringProps = (RingProperties_t*)&CEN_RID::RING_PROPERTIES; - numRingIds = CEN_RID::NUM_RING_IDS; - break; - - default: - MY_ERR("ringidGetRingId1(): Unsupported chipId (=%d) supplied\n", i_chipId); - rc = TOR_INVALID_CHIP_ID; - break; - } - - if (!rc) - { - for ( iRingId = 0; iRingId < numRingIds; iRingId++ ) - { - if ( !(i_ringName.compare(ringProps[iRingId].ringName)) ) - { - if (bFound) - { - MY_ERR("ringidGetRingId1(): Two rings cannot have the same ringName=%s. Fix" - " RING_PROPERTIES list for chipId=%d at ringId=0x%x and ringId=0x%x\n", - i_ringName.c_str(), i_chipId, l_ringId, iRingId); - rc = INFRASTRUCT_RC_CODE_BUG; - l_ringId = UNDEFINED_RING_ID; - break; - } - else - { - l_ringId = iRingId; - bFound = true; - - if (!i_bTest) - { - // Stop testing and break our of ringId loop - break; - } - - // Continue testing to see if duplicate ringNames found - } - } - } - } - - if (!rc && !bFound) - { - MY_DBG("ringidGetRingId1(): Did not find match to ringName=%s for chipId=%d." - " (Note, l_ringId=0x%x better be equal to UNDEFINED_RING_ID=0x%x)\n", - i_ringName.c_str(), i_chipId, l_ringId, UNDEFINED_RING_ID); - rc = TOR_RING_NAME_NOT_FOUND; - } - - o_ringId = l_ringId; - - return rc; -} - - -int ringidGetRingId2( ChipId_t i_chipId, - uint32_t i_torMagic, - ChipletType_t i_chipletType, // Ignored if only one chiplet in torMagic - uint8_t i_idxRing, // The effective ring index within chiplet's - // common or instance ring section - MyBool_t i_bInstCase, - RingId_t& o_ringId, - bool i_bTest ) -{ - int rc = INFRASTRUCT_RC_SUCCESS; - ChipletType_t l_chipletType = UNDEFINED_CHIPLET_TYPE; - RingProperties_t* ringProps = NULL; - RingId_t numRingIds = UNDEFINED_RING_ID; - RingId_t iRingId = UNDEFINED_RING_ID; // ringId loop counter - RingId_t l_ringId = UNDEFINED_RING_ID; - uint8_t l_idxRing = INVALID_RING_OFFSET; - bool bFound = false; - bool bOverlap = false; - - // First, select the main ring list we need (P9's or Centaur's). And while we're at it, - // convert input chipletType, which can be ignored for ring sections (i.e. torMagic) - // with only one chiplet, to a valid chipletType - switch (i_chipId) - { - case CID_P9N: - case CID_P9C: - case CID_P9A: - ringProps = (RingProperties_t*)&P9_RID::RING_PROPERTIES; - numRingIds = P9_RID::NUM_RING_IDS; - - if ( i_torMagic == TOR_MAGIC_SBE || - i_torMagic == TOR_MAGIC_OVRD || - i_torMagic == TOR_MAGIC_OVLY ) - { - l_chipletType = i_chipletType; - } - else if ( i_torMagic == TOR_MAGIC_CME ) - { - l_chipletType = P9_RID::EC_TYPE; - } - else if ( i_torMagic == TOR_MAGIC_SGPE ) - { - l_chipletType = P9_RID::EQ_TYPE; - } - else - { - MY_ERR("Invalid torMagic(=0x%08x) for chipId=CID_P9x=%d\n", i_torMagic, i_chipId); - return TOR_INVALID_MAGIC_NUMBER; - } - - break; - - case CID_CEN: - ringProps = (RingProperties_t*)&CEN_RID::RING_PROPERTIES; - numRingIds = CEN_RID::NUM_RING_IDS; - - if ( i_torMagic == TOR_MAGIC_CEN || - i_torMagic == TOR_MAGIC_OVRD ) - { - l_chipletType = CEN_RID::CEN_TYPE; - } - else - { - MY_ERR("Invalid torMagic(=0x%08x) for chipId=CID_CEN\n", i_torMagic); - return TOR_INVALID_MAGIC_NUMBER; - } - - break; - - default: - MY_ERR("ringidGetRingId2(): Unsupported chipId (=%d) supplied\n", i_chipId); - rc = TOR_INVALID_CHIP_ID; - break; - } - - // Second, convert effective input ring index (which has no instance marker) to the - // common/instance specific index - l_idxRing = i_bInstCase ? - i_idxRing | INSTANCE_RING_MARK : - i_idxRing; - - if (!rc) - { - for ( iRingId = 0; iRingId < numRingIds; iRingId++ ) - { - if ( ringProps[iRingId].chipletType == l_chipletType && - ringProps[iRingId].idxRing == l_idxRing ) - { - if (bFound) - { - // Allow ring index overlap between a root and a non-root ring - // and let the non-root (i.e., the bucket ring) "win" - if ( !bOverlap && - ( (ringProps[iRingId].ringClass & RCLS_ROOT_RING) != - (ringProps[l_ringId].ringClass & RCLS_ROOT_RING) ) ) - { - if ( (ringProps[iRingId].ringClass & RCLS_ROOT_RING) != RCLS_ROOT_RING ) - { - l_ringId = iRingId; - } - else - { - // Keep l_ringId as is since it must already be the non-root ring - } - - bOverlap = true; // Indicate we found an overlap match - - if (!i_bTest) - { - // Stop testing and break our of ringId loop - break; - } - } - else - { - MY_ERR("ringidGetRingId2(): Two root, or two non-root, rings within a" - " chiplet (chipletType=%d) cannot have the same ring index" - " (idxRing=%d, bInst=%d). Fix RING_PROPERTIES list for chipId=%d" - " at ringId=0x%x and ringId=0x%x\n", - l_chipletType, i_idxRing, i_bInstCase, i_chipId, l_ringId, iRingId); - rc = INFRASTRUCT_RC_CODE_BUG; - l_ringId = UNDEFINED_RING_ID; - break; - } - } - else - { - l_ringId = iRingId; - bFound = true; // Indicate we found a first match - - // Continue searching for ring index overlap due to bucket ring or code bug - } - } - } - } - - if (!rc && !bFound) - { - MY_ERR("ringidGetRingId2(): Could not find a match for (chipId,chipletType,idxRing,bInst) =" - " (%d, %d, %d, %d). Fix RING_PROPERTIES list for chipId=%d (Note, l_ringId=0x%x" - " better be equal to UNDEFINED_RING_ID=0x%x)\n", - i_chipId, l_chipletType, i_idxRing, i_bInstCase, - i_chipId, l_ringId, UNDEFINED_RING_ID); - rc = INFRASTRUCT_RC_CODE_BUG; - } - - o_ringId = l_ringId; - - return rc; -} - - -int ringidGetRingName( ChipId_t i_chipId, - RingId_t i_ringId, - std::string& o_ringName ) -{ - int rc = INFRASTRUCT_RC_SUCCESS; - std::string l_ringName; - - switch (i_chipId) - { - case CID_P9N: - case CID_P9C: - case CID_P9A: - if (i_ringId >= P9_RID::NUM_RING_IDS) - { - MY_ERR("ringidGetRingName(): ringId(=0x%x) >= NUM_RING_IDS(=0x%x) not allowed\n", - i_ringId, P9_RID::NUM_RING_IDS); - rc = TOR_INVALID_RING_ID; - break; - } - - l_ringName = (std::string)P9_RID::RING_PROPERTIES[i_ringId].ringName; - break; - - case CID_CEN: - if (i_ringId >= CEN_RID::NUM_RING_IDS) - { - MY_ERR("ringidGetRingName(): ringId(=0x%x) >= NUM_RING_IDS(=0x%x) not allowed\n", - i_ringId, CEN_RID::NUM_RING_IDS); - rc = TOR_INVALID_RING_ID; - break; - } - - l_ringName = (std::string)CEN_RID::RING_PROPERTIES[i_ringId].ringName; - break; - - default: - MY_ERR("ringidGetRingName(): Unsupported chipId (=%d) supplied\n", i_chipId); - rc = TOR_INVALID_CHIP_ID; - break; - } - - o_ringName = l_ringName; - - return rc; -} - -int ringidGetRingClass( ChipId_t i_chipId, - RingId_t i_ringId, - RingClass_t& o_ringClass ) -{ - return (ringid_get_ringClass(i_chipId, i_ringId, &o_ringClass)); + return TOR_SUCCESS; } - -#endif // __PPE__ && NO_STD_LIB_IN_PPE |