summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/perv/p9_sbe_nest_initf.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/perv/p9_sbe_nest_initf.C')
-rw-r--r--src/import/chips/p9/procedures/hwp/perv/p9_sbe_nest_initf.C150
1 files changed, 124 insertions, 26 deletions
diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_nest_initf.C b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_nest_initf.C
index a3169936..39037604 100644
--- a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_nest_initf.C
+++ b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_nest_initf.C
@@ -40,6 +40,7 @@
#include "p9_sbe_nest_initf.H"
#include "p9_perv_scom_addresses.H"
#include "p9_perv_scom_addresses_fld.H"
+#include "p9_const_common.H"
#include <p9_ring_id.h>
fapi2::ReturnCode p9_sbe_nest_initf(const
@@ -48,6 +49,12 @@ fapi2::ReturnCode p9_sbe_nest_initf(const
FAPI_INF("Entering ...");
uint8_t l_attr_chip_unit_pos = 0;
fapi2::buffer<uint16_t> l_read_attr;
+#if 0
+ bool mc01_iom01 = false;
+ bool mc01_iom23 = false;
+ bool mc23_iom01 = false;
+ bool mc23_iom23 = false;
+#endif
for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_PERV>(fapi2::TARGET_STATE_FUNCTIONAL))
{
@@ -55,20 +62,53 @@ fapi2::ReturnCode p9_sbe_nest_initf(const
FAPI_DBG("ATTR_PG Value : %#04lx", l_read_attr);
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_UNIT_POS, l_chplt_trgt, l_attr_chip_unit_pos));
- if (l_attr_chip_unit_pos == 0x2)/* N0 Chiplet */
+#if 0
+
+ if((l_attr_chip_unit_pos == MC01_CHIPLET_ID) && (!l_read_attr.getBit<6>()))
{
- FAPI_DBG("Scan n0_cxa_fure ring");
- FAPI_TRY(fapi2::putRing(i_target_chip, n0_cxa0_fure),
- "Error from putRing (n0_cxa0_fure)");
+ mc01_iom01 = true;
+ }
+
+ if((l_attr_chip_unit_pos == MC01_CHIPLET_ID) && (!l_read_attr.getBit<7>()))
+ {
+ mc01_iom23 = true;
+ }
+
+ if((l_attr_chip_unit_pos == MC23_CHIPLET_ID) && (!l_read_attr.getBit<6>()))
+ {
+ mc23_iom01 = true;
+ }
+
+ if((l_attr_chip_unit_pos == MC23_CHIPLET_ID) && (!l_read_attr.getBit<7>()))
+ {
+ mc23_iom23 = true;
+ }
+
+#endif
+
+ if (l_attr_chip_unit_pos == N0_CHIPLET_ID)/* N0 Chiplet */
+ {
+
+ if (!l_read_attr.getBit<6>()) //Check cxa0 is enable
+ {
+ FAPI_DBG("Scan n0_cxa_fure ring");
+ FAPI_TRY(fapi2::putRing(i_target_chip, n0_cxa0_fure),
+ "Error from putRing (n0_cxa0_fure)");
+ }
+
FAPI_DBG("Scan n0_fure ring");
FAPI_TRY(fapi2::putRing(i_target_chip, n0_fure),
"Error from putRing (n0_fure)");
- FAPI_DBG("Scan n0_nx_fure ring");
- FAPI_TRY(fapi2::putRing(i_target_chip, n0_nx_fure),
- "Error from putRing (n0_nx_fure)");
+
+ if (!l_read_attr.getBit<5>()) //Check nx is enable
+ {
+ FAPI_DBG("Scan n0_nx_fure ring");
+ FAPI_TRY(fapi2::putRing(i_target_chip, n0_nx_fure),
+ "Error from putRing (n0_nx_fure)");
+ }
}
- if (l_attr_chip_unit_pos == 0x3)/* N1 Chiplet */
+ if (l_attr_chip_unit_pos == N1_CHIPLET_ID)/* N1 Chiplet */
{
FAPI_DBG("Scan n1_fure ring");
FAPI_TRY(fapi2::putRing(i_target_chip, n1_fure),
@@ -96,20 +136,29 @@ fapi2::ReturnCode p9_sbe_nest_initf(const
}
}
- if (l_attr_chip_unit_pos == 0x4)/* N2 Chiplet */
+ if (l_attr_chip_unit_pos == N2_CHIPLET_ID)/* N2 Chiplet */
{
- FAPI_DBG("Scan n2_cxa1_fure ring");
- FAPI_TRY(fapi2::putRing(i_target_chip, n2_cxa1_fure),
- "Error from putRing (n2_cxa1_fure)");
+
+ if (!l_read_attr.getBit<5>()) //Check cxa1 is enable
+ {
+ FAPI_DBG("Scan n2_cxa1_fure ring");
+ FAPI_TRY(fapi2::putRing(i_target_chip, n2_cxa1_fure),
+ "Error from putRing (n2_cxa1_fure)");
+ }
+
FAPI_DBG("Scan n2_fure ring");
FAPI_TRY(fapi2::putRing(i_target_chip, n2_fure),
"Error from putRing (n2_fure)");
- FAPI_DBG("Scan n2_psi_fure ring");
- FAPI_TRY(fapi2::putRing(i_target_chip, n2_psi_fure),
- "Error from putRing (n2_psi_fure)");
+
+ if (!l_read_attr.getBit<9>()) //Check iopsi is enable
+ {
+ FAPI_DBG("Scan n2_psi_fure ring");
+ FAPI_TRY(fapi2::putRing(i_target_chip, n2_psi_fure),
+ "Error from putRing (n2_psi_fure)");
+ }
}
- if (l_attr_chip_unit_pos == 0x05)/* N3 Chiplet */
+ if (l_attr_chip_unit_pos == N3_CHIPLET_ID)/* N3 Chiplet */
{
FAPI_DBG("Scan n3_fure ring");
FAPI_TRY(fapi2::putRing(i_target_chip, n3_fure),
@@ -122,34 +171,83 @@ fapi2::ReturnCode p9_sbe_nest_initf(const
"Error from putRing (n3_mcs01_fure)");
}
- FAPI_DBG("Scan n3_np_fure ring");
- FAPI_TRY(fapi2::putRing(i_target_chip, n3_np_fure),
- "Error from putRing (n3_np_fure)");
+ if (!l_read_attr.getBit<7>()) //Check npu is enable
+ {
+ FAPI_DBG("Scan n3_np_fure ring");
+ FAPI_TRY(fapi2::putRing(i_target_chip, n3_np_fure),
+ "Error from putRing (n3_np_fure)");
+ }
}
}
for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_MCBIST>(fapi2::TARGET_STATE_FUNCTIONAL))
{
FAPI_TRY(fapi2::putRing(l_chplt_trgt, mc_fure));
+ }
+
#if 0
+
+ // mcbist0
+ for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_MCBIST>
+ (fapi2::TARGET_FILTER_MC_WEST, fapi2::TARGET_STATE_FUNCTIONAL))
+ {
{
// MC IOMxx FURE rings require deterministic scan enable
// no current plan to scan these during mainline IPL, but recipe is below if needed
fapi2::buffer<uint64_t> l_data64;
l_data64.setBit<PERV_1_CPLT_CTRL0_TC_UNIT_DETERMINISTIC_TEST_ENABLE_DC>();
FAPI_TRY(fapi2::putScom(l_chplt_trgt, PERV_MC01_CPLT_CTRL0_OR, l_data64));
- FAPI_DBG("Scan mc_iom01_fure ring");
- FAPI_TRY(fapi2::putRing(l_chplt_trgt, mc_iom01_fure),
- "Error from putRing (mc_iom01_fure)");
- FAPI_DBG("Scan mc_iom23_fure ring");
- FAPI_TRY(fapi2::putRing(l_chplt_trgt, mc_iom23_fure),
- "Error from putRing (mc_iom23_fure)");
+
+ if ( mc01_iom01 )
+ {
+ FAPI_DBG("Scan mc_iom01_fure ring");
+ FAPI_TRY(fapi2::putRing(l_chplt_trgt, mc_iom01_fure),
+ "Error from putRing (mc_iom01_fure)");
+ }
+
+ if( mc01_iom23 )
+ {
+ FAPI_DBG("Scan mc_iom23_fure ring");
+ FAPI_TRY(fapi2::putRing(l_chplt_trgt, mc_iom23_fure),
+ "Error from putRing (mc_iom23_fure)");
+ }
+
FAPI_TRY(fapi2::putScom(l_chplt_trgt, PERV_MC01_CPLT_CTRL0_CLEAR, l_data64));
}
-#endif
+ }
+ // mcbist1
+ for (auto& l_chplt_trgt : i_target_chip.getChildren<fapi2::TARGET_TYPE_MCBIST>
+ (fapi2::TARGET_FILTER_MC_EAST, fapi2::TARGET_STATE_FUNCTIONAL))
+ {
+ {
+ // MC IOMxx FURE rings require deterministic scan enable
+ // no current plan to scan these during mainline IPL, but recipe is below if needed
+ fapi2::buffer<uint64_t> l_data64;
+ l_data64.setBit<PERV_1_CPLT_CTRL0_TC_UNIT_DETERMINISTIC_TEST_ENABLE_DC>();
+ FAPI_TRY(fapi2::putScom(l_chplt_trgt, PERV_MC01_CPLT_CTRL0_OR, l_data64));
+
+ if ( mc23_iom01 )
+ {
+ FAPI_DBG("Scan mc_iom01_fure ring");
+ FAPI_TRY(fapi2::putRing(l_chplt_trgt, mc_iom01_fure),
+ "Error from putRing (mc_iom01_fure)");
+ }
+
+ if( mc23_iom23 )
+ {
+ FAPI_DBG("Scan mc_iom23_fure ring");
+ FAPI_TRY(fapi2::putRing(l_chplt_trgt, mc_iom23_fure),
+ "Error from putRing (mc_iom23_fure)");
+ }
+
+ FAPI_TRY(fapi2::putScom(l_chplt_trgt, PERV_MC01_CPLT_CTRL0_CLEAR, l_data64));
+ }
}
+#endif
+
+
fapi_try_exit:
FAPI_INF("Exiting ...");
return fapi2::current_err;
OpenPOWER on IntegriCloud