diff options
Diffstat (limited to 'src/hwpf/target.C')
-rw-r--r-- | src/hwpf/target.C | 46 |
1 files changed, 37 insertions, 9 deletions
diff --git a/src/hwpf/target.C b/src/hwpf/target.C index 8d6da3fe..fcd21dcb 100644 --- a/src/hwpf/target.C +++ b/src/hwpf/target.C @@ -181,6 +181,9 @@ fapi_try_exit: case PPE_TARGET_TYPE_MCS: l_targetType = TARGET_TYPE_MCS; break; + case PPE_TARGET_TYPE_MI: + l_targetType = TARGET_TYPE_MI; + break; case PPE_TARGET_TYPE_PHB: l_targetType = TARGET_TYPE_PHB; break; @@ -202,6 +205,9 @@ fapi_try_exit: case PPE_TARGET_TYPE_MCBIST | PPE_TARGET_TYPE_PERV: l_targetType = TARGET_TYPE_MCBIST; break; + case PPE_TARGET_TYPE_MC | PPE_TARGET_TYPE_PERV: + l_targetType = TARGET_TYPE_MC; + break; case PPE_TARGET_TYPE_NONE: case PPE_TARGET_TYPE_ALL: default: @@ -457,6 +463,9 @@ fapi_try_exit: fapi2::ReturnCode plat_TargetsInit() { bool b_present = false; + uint8_t l_chipName = fapi2::ENUM_ATTR_NAME_NONE; + plat_target_handle_t l_platHandle; + // Copy fixed section from SEEPROM to PIBMEM G_sbe_attrs.G_system_attrs = G_system_attributes; @@ -499,6 +508,8 @@ fapi_try_exit: // created. FAPI_TRY(plat_AttrInit()); + FAPI_TRY(FAPI_ATTR_GET_PRIVILEGED(fapi2::ATTR_NAME, plat_getChipTarget(), l_chipName)); + /* * Nest Targets - group 1 */ @@ -515,21 +526,29 @@ fapi_try_exit: } /* - * Memory Controller Synchronous (MCBIST) Targets + * Memory Controller Synchronous (MCBIST/MC) Targets */ + // Note: MCBIST/MC have the same offset and counts, so the loop just + // uses MCBIST constants l_beginning_offset = MCBIST_TARGET_OFFSET; for (uint32_t i = 0; i < MCBIST_TARGET_COUNT; ++i) { - fapi2::Target<fapi2::TARGET_TYPE_MCBIST> target_name((createPlatTargetHandle<fapi2::TARGET_TYPE_MCBIST>(i))); - fapi2::Target<fapi2::TARGET_TYPE_PERV> l_perv = target_name.getParent<fapi2::TARGET_TYPE_PERV>(); + if(fapi2::ENUM_ATTR_NAME_CUMULUS == l_chipName) + { + l_platHandle = createPlatTargetHandle<fapi2::TARGET_TYPE_MC>(i); + } + else if(fapi2::ENUM_ATTR_NAME_NIMBUS == l_chipName) + { + l_platHandle = createPlatTargetHandle<fapi2::TARGET_TYPE_MCBIST>(i); + } + fapi2::Target<fapi2::TARGET_TYPE_PERV> l_perv(l_platHandle); // Determine if the chiplet is present and, thus, functional // via partial good attributes FAPI_TRY(plat_TargetPresent(l_perv, b_present)); G_vec_targets.at(l_beginning_offset+i) = (fapi2::plat_target_handle_t)(l_perv.get()); - } /* @@ -617,13 +636,22 @@ fapi_try_exit: } /* - * MCS Targets + * MCS/MI Targets */ + // Note: MCS/MI have the same offset and counts, so the loop just uses + // MCS constants l_beginning_offset = MCS_TARGET_OFFSET; for (uint32_t i = 0; i < MCS_TARGET_COUNT; ++i) { - fapi2::Target<fapi2::TARGET_TYPE_MCS> target_name(createPlatTargetHandle<fapi2::TARGET_TYPE_MCS>(i)); + if(fapi2::ENUM_ATTR_NAME_CUMULUS == l_chipName) + { + l_platHandle = createPlatTargetHandle<fapi2::TARGET_TYPE_MI>(i); + } + else if(fapi2::ENUM_ATTR_NAME_NIMBUS == l_chipName) + { + l_platHandle = createPlatTargetHandle<fapi2::TARGET_TYPE_MCS>(i); + } fapi2::Target<fapi2::TARGET_TYPE_PERV> l_nestTarget((plat_getTargetHandleByChipletNumber<TARGET_TYPE_PERV>(N3_CHIPLET - (MCS_PER_MCBIST * (i / MCS_PER_MCBIST))))); @@ -645,11 +673,11 @@ fapi_try_exit: if(0 == l_attrPg) { - static_cast<plat_target_handle_t&>(target_name.operator ()()).setPresent(); - static_cast<plat_target_handle_t&>(target_name.operator ()()).setFunctional(true); + l_platHandle.setPresent(); + l_platHandle.setFunctional(true); } - G_vec_targets.at(l_beginning_offset+i) = (fapi2::plat_target_handle_t)(target_name.get()); + G_vec_targets.at(l_beginning_offset+i) = l_platHandle; } /* |