diff options
author | Santosh Puranik <santosh.puranik@in.ibm.com> | 2016-07-18 05:27:58 -0500 |
---|---|---|
committer | Gregory S. Still <stillgs@us.ibm.com> | 2016-07-18 12:23:36 -0400 |
commit | b06df3e99d5c2a1f2ada40206c9f317cbe2f1b6f (patch) | |
tree | 0c3df08484d4f43ca715dbb946bfe5525e866acf /hwpf/src | |
parent | fb90c414ce973311513a531e58bfd31b54d3004a (diff) | |
download | talos-sbe-b06df3e99d5c2a1f2ada40206c9f317cbe2f1b6f.tar.gz talos-sbe-b06df3e99d5c2a1f2ada40206c9f317cbe2f1b6f.zip |
Update to plat_getTargetHandleByChipletNumber
Templatized to take in a fapi2 Target type
Change-Id: Icd55f82e6c8dd0bed92eb245678722ec15f12617
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/27127
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
Diffstat (limited to 'hwpf/src')
-rw-r--r-- | hwpf/src/plat/target.C | 56 |
1 files changed, 34 insertions, 22 deletions
diff --git a/hwpf/src/plat/target.C b/hwpf/src/plat/target.C index b1a7a7a6..61d8d00b 100644 --- a/hwpf/src/plat/target.C +++ b/hwpf/src/plat/target.C @@ -267,7 +267,8 @@ fapi_try_exit: { fapi2::Target<fapi2::TARGET_TYPE_MCS> target_name((fapi2::plat_target_handle_t)i); - fapi2::Target<fapi2::TARGET_TYPE_PERV> l_nestTarget((plat_getTargetHandleByChipletNumber(N3_CHIPLET - (MCS_PER_MCBIST * (i / MCS_PER_MCBIST))))); + fapi2::Target<fapi2::TARGET_TYPE_PERV> + l_nestTarget((plat_getTargetHandleByChipletNumber<TARGET_TYPE_PERV>(N3_CHIPLET - (MCS_PER_MCBIST * (i / MCS_PER_MCBIST))))); uint32_t l_attrPg = 0; @@ -368,35 +369,46 @@ fapi_try_exit: return fapi2::current_err; } - /// @brief Function to return a platform target handle, given the chiplet - // number - // @param i_chipletNumber The chiplet number of the target - // @return Platform target handle - // @note The caller can use the platform target handle to construct a - // Target of it's choice. Ex: - // fapi2::Target<fapi2::TARGET_TYPE_CORE> - // l_core(plat_getTargetHandleByChipletNumber(0x20); + // Get the plat target handle by chiplet number - For PERV and EQ targets + template<TargetType K> plat_target_handle_t plat_getTargetHandleByChipletNumber( const uint8_t i_chipletNumber) { + static_assert((K == TARGET_TYPE_EQ) || (K == TARGET_TYPE_PERV), + "Invalid target type"); assert(((i_chipletNumber > 0) && - (i_chipletNumber < (EQ_CHIPLET_OFFSET + EQ_TARGET_COUNT))) || - ((i_chipletNumber >= CORE_CHIPLET_OFFSET) && + (i_chipletNumber < (EQ_CHIPLET_OFFSET + EQ_TARGET_COUNT)))) + + uint32_t l_idx = (i_chipletNumber - NEST_GROUP1_CHIPLET_OFFSET) + + NEST_GROUP1_TARGET_OFFSET; + return G_vec_targets[l_idx]; + } + + // Get the plat target handle by chiplet number - For CORE targets + template<> + plat_target_handle_t plat_getTargetHandleByChipletNumber<TARGET_TYPE_CORE>( + const uint8_t i_chipletNumber) + { + assert(((i_chipletNumber >= CORE_CHIPLET_OFFSET) && (i_chipletNumber < (CORE_CHIPLET_OFFSET + CORE_TARGET_COUNT)))); - uint32_t l_idx = 0; + uint32_t l_idx = (i_chipletNumber - CORE_CHIPLET_OFFSET) + + CORE_TARGET_OFFSET; - if(i_chipletNumber < (EQ_CHIPLET_OFFSET + EQ_TARGET_COUNT)) - { - l_idx = (i_chipletNumber - NEST_GROUP1_CHIPLET_OFFSET) + - NEST_GROUP1_TARGET_OFFSET; - } - else - { - l_idx = (i_chipletNumber - CORE_CHIPLET_OFFSET) + - CORE_TARGET_OFFSET; - } return G_vec_targets[l_idx]; } + // Get the plat target handle by chiplet number - For EX targets + template<> + plat_target_handle_t plat_getTargetHandleByChipletNumber<TARGET_TYPE_EX>( + const uint8_t i_chipletNumber) + { + assert(((i_chipletNumber >= CORE_CHIPLET_OFFSET) && + (i_chipletNumber < (CORE_CHIPLET_OFFSET + CORE_TARGET_COUNT)))); + + uint32_t l_idx = ((i_chipletNumber - CORE_CHIPLET_OFFSET) / 2) + + EX_TARGET_OFFSET; + + return G_vec_targets[l_idx]; + } } // fapi2 |