summaryrefslogtreecommitdiffstats
path: root/src/hwpf/src/plat
diff options
context:
space:
mode:
Diffstat (limited to 'src/hwpf/src/plat')
-rw-r--r--src/hwpf/src/plat/plat_hw_access.C31
-rw-r--r--src/hwpf/src/plat/target.C30
2 files changed, 60 insertions, 1 deletions
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<fapi2::TARGET_TYPE_PHB> target_name(createPlatTargetHandle<fapi2::TARGET_TYPE_PHB>(i));
+
+ fapi2::Target<fapi2::TARGET_TYPE_PERV>
+ l_pciTarget((plat_getTargetHandleByChipletNumber<TARGET_TYPE_PERV>(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<plat_target_handle_t&>(target_name.operator ()()).setPresent();
+ static_cast<plat_target_handle_t&>(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;
OpenPOWER on IntegriCloud