From f0cc20d3a251e14890c8d39bce29e38b9d6899c4 Mon Sep 17 00:00:00 2001 From: Santosh Puranik Date: Wed, 22 Mar 2017 07:14:44 -0500 Subject: Support for TARGET_TYPE_PHB Change-Id: Id4c2407655c38325431eff256aa10f3b0b48fff2 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/38281 Tested-by: Jenkins Server Tested-by: FSP CI Jenkins Reviewed-by: Sachin Gupta --- src/hwpf/include/plat/plat_target.H | 12 +++++++++++- src/hwpf/include/plat/plat_target_parms.H | 9 +++++++-- src/hwpf/include/plat/target.H | 8 +++++++- src/hwpf/src/plat/plat_hw_access.C | 31 ++++++++++++++++++++++++++++++ src/hwpf/src/plat/target.C | 30 ++++++++++++++++++++++++++++- src/tools/scripts/ppeParseAttributeInfo.pl | 2 +- 6 files changed, 86 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/hwpf/include/plat/plat_target.H b/src/hwpf/include/plat/plat_target.H index 45a213a5..88d7e231 100644 --- a/src/hwpf/include/plat/plat_target.H +++ b/src/hwpf/include/plat/plat_target.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER sbe Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2016 */ +/* Contributors Listed Below - COPYRIGHT 2015,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -40,8 +40,10 @@ static const uint8_t CORES_PER_QUAD = 4; static const uint8_t EX_PER_QUAD = 2; static const uint8_t CORES_PER_EX = 2; +static const uint8_t N2_CHIPLET = 4; static const uint8_t N3_CHIPLET = 5; static const uint8_t MCS_PER_MCBIST = 2; +static const uint8_t PCI0_CHIPLET = 0x0D; // // Define what a platform handle looks like. For Hostboot, @@ -61,6 +63,7 @@ namespace fapi2 PPE_TARGET_TYPE_PERV = 0x20, PPE_TARGET_TYPE_MCBIST = 0x40, PPE_TARGET_TYPE_SYSTEM = 0x80, + PPE_TARGET_TYPE_PHB = 0x100, PPE_TARGET_TYPE_ALL = 0xFFF, } plat_target_type_t; @@ -267,6 +270,13 @@ namespace fapi2 l_handle.fields.type = PPE_TARGET_TYPE_MCS; l_handle.fields.type_target_num = i_plat_argument; } + else if(K & TARGET_TYPE_PHB) + { + l_handle.fields.chiplet_num = (0 == i_plat_argument) ? PCI0_CHIPLET : + (((i_plat_argument / 3) + 1) + PCI0_CHIPLET); + l_handle.fields.type = PPE_TARGET_TYPE_PHB; + l_handle.fields.type_target_num = i_plat_argument; + } else if(K == TARGET_TYPE_ALL) { l_handle.fields.chiplet_num = i_plat_argument; diff --git a/src/hwpf/include/plat/plat_target_parms.H b/src/hwpf/include/plat/plat_target_parms.H index 730f10da..79d9edf0 100644 --- a/src/hwpf/include/plat/plat_target_parms.H +++ b/src/hwpf/include/plat/plat_target_parms.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER sbe Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2016 */ +/* Contributors Listed Below - COPYRIGHT 2012,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -70,8 +70,12 @@ CONST_UINT32_T(EX_TARGET_COUNT, 12); CONST_UINT32_T(MCS_TARGET_OFFSET, EX_TARGET_OFFSET + EX_TARGET_COUNT); CONST_UINT32_T(MCS_TARGET_COUNT, 4); +// PHB Targets +CONST_UINT32_T(PHB_TARGET_OFFSET, MCS_TARGET_OFFSET + MCS_TARGET_COUNT); +CONST_UINT32_T(PHB_TARGET_COUNT, 6); + // System Target -CONST_UINT32_T(SYSTEM_TARGET_OFFSET, MCS_TARGET_OFFSET + MCS_TARGET_COUNT); +CONST_UINT32_T(SYSTEM_TARGET_OFFSET, PHB_TARGET_OFFSET + PHB_TARGET_COUNT); CONST_UINT32_T(SYSTEM_TARGET_COUNT, 1); CONST_UINT32_T(MCAST_TARGET_OFFSET, SYSTEM_TARGET_OFFSET + SYSTEM_TARGET_COUNT); @@ -87,6 +91,7 @@ CONST_UINT32_T(TARGET_COUNT, CHIP_TARGET_COUNT + PERV_TARGET_COUNT + EX_TARGET_COUNT + MCS_TARGET_COUNT + + PHB_TARGET_COUNT + SYSTEM_TARGET_COUNT + MCAST_TARGET_COUNT); diff --git a/src/hwpf/include/plat/target.H b/src/hwpf/include/plat/target.H index b262ae8c..3bdfc4dc 100644 --- a/src/hwpf/include/plat/target.H +++ b/src/hwpf/include/plat/target.H @@ -114,6 +114,12 @@ namespace fapi2 return PPE_TARGET_TYPE_MCS; } + template<> + constexpr plat_target_type_t fapiTargetTypeToPlatTargetType() + { + return PPE_TARGET_TYPE_PHB; + } + template<> constexpr plat_target_type_t fapiTargetTypeToPlatTargetType() { @@ -181,7 +187,7 @@ namespace fapi2 constexpr TargetType TARGET_TYPE_PROC_CHILDREN = TARGET_TYPE_EQ | TARGET_TYPE_PERV | TARGET_TYPE_EX | TARGET_TYPE_MCBIST | TARGET_TYPE_CORE | - TARGET_TYPE_MCS | TARGET_TYPE_PROC_CHIP; + TARGET_TYPE_MCS | TARGET_TYPE_PROC_CHIP | TARGET_TYPE_PHB; static_assert((( ((K & TARGET_TYPE_PROC_CHILDREN) != TARGET_TYPE_NONE) || diff --git a/src/hwpf/src/plat/plat_hw_access.C b/src/hwpf/src/plat/plat_hw_access.C index 07580d50..a87e864a 100644 --- a/src/hwpf/src/plat/plat_hw_access.C +++ b/src/hwpf/src/plat/plat_hw_access.C @@ -205,6 +205,37 @@ static uint32_t getEffectiveAddress(const plat_target_handle_t &i_target, const l_addr.iv_chiplet = i_target.fields.chiplet_num; l_addr.iv_satId = (2 * (i_target.getTargetInstance() % 2)); break; + case PPE_TARGET_TYPE_PHB: + if(l_addr.iv_chiplet == N2_CHIPLET) + { + if (i_target.getTargetInstance() == 0) + { + l_addr.iv_ring = 0x3; + l_addr.iv_satId = ((l_addr.iv_satId < 4) ? (1) : (4)); + } + else + { + l_addr.iv_ring = (0x3 + (i_target.getTargetInstance() / 3) + 1) & 0xF; + l_addr.iv_satId = ((l_addr.iv_satId < 4) ? (1) : (4)) + + ((i_target.getTargetInstance() % 2) ? (0) : (1)) + + (2 * (i_target.getTargetInstance() / 5)); + } + } + else + { + l_addr.iv_chiplet = i_target.fields.chiplet_num; + if (i_target.getTargetInstance() == 0) + { + l_addr.iv_satId = ((l_addr.iv_satId < 4) ? (1) : (4)); + } + else + { + l_addr.iv_satId = (((l_addr.iv_satId < 4) ? (1) : (4)) + + ((i_target.getTargetInstance() % 2) ? (0) : (1)) + + (2 * (i_target.getTargetInstance() / 5))); + } + } + break; default: if(0 != i_target.getAddressOverlay()) { diff --git a/src/hwpf/src/plat/target.C b/src/hwpf/src/plat/target.C index dbf8413b..3532f521 100644 --- a/src/hwpf/src/plat/target.C +++ b/src/hwpf/src/plat/target.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER sbe Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2016 */ +/* Contributors Listed Below - COPYRIGHT 2012,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -135,6 +135,9 @@ namespace fapi2 case PPE_TARGET_TYPE_MCS: l_targetType = TARGET_TYPE_MCS; break; + case PPE_TARGET_TYPE_PHB: + l_targetType = TARGET_TYPE_PHB; + break; case PPE_TARGET_TYPE_CORE | PPE_TARGET_TYPE_PERV: l_targetType = TARGET_TYPE_CORE; break; @@ -589,6 +592,31 @@ fapi_try_exit: G_vec_targets.at(l_beginning_offset+i) = revle32((fapi2::plat_target_handle_t)(target_name.get())); } + /* + * PHB Targets + */ + l_beginning_offset = PHB_TARGET_OFFSET; + for (uint32_t i = 0; i < PHB_TARGET_COUNT; ++i) + { + fapi2::Target target_name(createPlatTargetHandle(i)); + + fapi2::Target + l_pciTarget((plat_getTargetHandleByChipletNumber(target_name.getChipletNumber()))); + + constexpr uint16_t l_pciPgArray[] = {0xE1FD, 0xE0FD, 0xE07D}; + uint16_t l_attrPg = 0; + + FAPI_ATTR_GET(fapi2::ATTR_PG, l_pciTarget, l_attrPg); + + if(l_pciPgArray[target_name.getChipletNumber() - PCI0_CHIPLET] == l_attrPg) + { + static_cast(target_name.operator ()()).setPresent(); + static_cast(target_name.operator ()()).setFunctional(true); + } + + G_vec_targets.at(l_beginning_offset+i) = revle32((fapi2::plat_target_handle_t)(target_name.get())); + } + fapi_try_exit: return fapi2::current_err; diff --git a/src/tools/scripts/ppeParseAttributeInfo.pl b/src/tools/scripts/ppeParseAttributeInfo.pl index c3f213cd..0ac913cf 100755 --- a/src/tools/scripts/ppeParseAttributeInfo.pl +++ b/src/tools/scripts/ppeParseAttributeInfo.pl @@ -495,7 +495,7 @@ foreach my $entr (@{$entries->{entry}}) { # Consider only supported target types. The rest are ignored if($targType ~~ ["TARGET_TYPE_PROC_CHIP", "TARGET_TYPE_SYSTEM", "TARGET_TYPE_CORE", "TARGET_TYPE_MCS", "TARGET_TYPE_PERV", - "TARGET_TYPE_EQ", "TARGET_TYPE_EX"]) + "TARGET_TYPE_EQ", "TARGET_TYPE_EX", "TARGET_TYPE_PHB"]) { if($targetTypeCount != 0) { -- cgit v1.2.1