summaryrefslogtreecommitdiffstats
path: root/src/hwpf
diff options
context:
space:
mode:
Diffstat (limited to 'src/hwpf')
-rw-r--r--src/hwpf/include/plat/plat_target.H12
-rw-r--r--src/hwpf/include/plat/plat_target_parms.H9
-rw-r--r--src/hwpf/include/plat/target.H8
-rw-r--r--src/hwpf/src/plat/plat_hw_access.C31
-rw-r--r--src/hwpf/src/plat/target.C30
5 files changed, 85 insertions, 5 deletions
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
@@ -115,6 +115,12 @@ namespace fapi2
}
template<>
+ constexpr plat_target_type_t fapiTargetTypeToPlatTargetType<TARGET_TYPE_PHB>()
+ {
+ return PPE_TARGET_TYPE_PHB;
+ }
+
+ template<>
constexpr plat_target_type_t fapiTargetTypeToPlatTargetType<TARGET_TYPE_MCBIST>()
{
return PPE_TARGET_TYPE_MCBIST;
@@ -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<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