summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/import/chips/p9/procedures/hwp/initfiles/p9_obus_scom.C102
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9_fab_iovalid.C49
2 files changed, 131 insertions, 20 deletions
diff --git a/src/import/chips/p9/procedures/hwp/initfiles/p9_obus_scom.C b/src/import/chips/p9/procedures/hwp/initfiles/p9_obus_scom.C
index 1f072aeef..5c4595e42 100644
--- a/src/import/chips/p9/procedures/hwp/initfiles/p9_obus_scom.C
+++ b/src/import/chips/p9/procedures/hwp/initfiles/p9_obus_scom.C
@@ -41,12 +41,14 @@ constexpr uint64_t literal_0b100 = 0b100;
constexpr uint64_t literal_0b1100 = 0b1100;
constexpr uint64_t literal_0b000000 = 0b000000;
constexpr uint64_t literal_0b01 = 0b01;
+constexpr uint64_t literal_0x0 = 0x0;
constexpr uint64_t literal_0b010 = 0b010;
constexpr uint64_t literal_0b001 = 0b001;
constexpr uint64_t literal_0b0010 = 0b0010;
constexpr uint64_t literal_0b0001 = 0b0001;
constexpr uint64_t literal_0b101 = 0b101;
constexpr uint64_t literal_0b1000110 = 0b1000110;
+constexpr uint64_t literal_0b0000 = 0b0000;
constexpr uint64_t literal_0b0110 = 0b0110;
constexpr uint64_t literal_0b01111000 = 0b01111000;
constexpr uint64_t literal_0b01011010 = 0b01011010;
@@ -77,6 +79,12 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_EC_FEATURE_HW422471, TGT2, l_TGT2_ATTR_CHIP_EC_FEATURE_HW422471));
fapi2::ATTR_IO_O_CHANNEL_TYPE_Type l_TGT0_ATTR_IO_O_CHANNEL_TYPE;
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_IO_O_CHANNEL_TYPE, TGT0, l_TGT0_ATTR_IO_O_CHANNEL_TYPE));
+ fapi2::ATTR_PROC_FABRIC_LINK_ACTIVE_Type l_TGT0_ATTR_PROC_FABRIC_LINK_ACTIVE;
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PROC_FABRIC_LINK_ACTIVE, TGT0, l_TGT0_ATTR_PROC_FABRIC_LINK_ACTIVE));
+ fapi2::ATTR_OPTICS_CONFIG_MODE_Type l_TGT0_ATTR_OPTICS_CONFIG_MODE;
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_OPTICS_CONFIG_MODE, TGT0, l_TGT0_ATTR_OPTICS_CONFIG_MODE));
+ uint64_t l_def_OBUS_FBC_ENABLED = ((l_TGT0_ATTR_OPTICS_CONFIG_MODE == fapi2::ENUM_ATTR_OPTICS_CONFIG_MODE_SMP)
+ && l_TGT0_ATTR_PROC_FABRIC_LINK_ACTIVE);
fapi2::ATTR_CHIP_EC_FEATURE_SW387041_Type l_TGT2_ATTR_CHIP_EC_FEATURE_SW387041;
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_EC_FEATURE_SW387041, TGT2, l_TGT2_ATTR_CHIP_EC_FEATURE_SW387041));
fapi2::buffer<uint64_t> l_scom_buffer;
@@ -4964,6 +4972,31 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
FAPI_TRY(fapi2::putScom(TGT0, 0x8008180009010c3full, l_scom_buffer));
}
{
+ FAPI_TRY(fapi2::getScom( TGT0, 0x8008300009010c3full, l_scom_buffer ));
+
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<56, 4, 60, uint64_t>(literal_0x0 );
+ }
+
+ FAPI_TRY(fapi2::putScom(TGT0, 0x8008300009010c3full, l_scom_buffer));
+ }
+ {
+ FAPI_TRY(fapi2::getScom( TGT0, 0x8008400009010c3full, l_scom_buffer ));
+
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<48, 4, 60, uint64_t>(literal_0x0 );
+ }
+
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<52, 4, 60, uint64_t>(literal_0x0 );
+ }
+
+ FAPI_TRY(fapi2::putScom(TGT0, 0x8008400009010c3full, l_scom_buffer));
+ }
+ {
FAPI_TRY(fapi2::getScom( TGT0, 0x8008580009010c3full, l_scom_buffer ));
if (l_def_IS_HW)
@@ -5008,6 +5041,11 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
{
FAPI_TRY(fapi2::getScom( TGT0, 0x8008680009010c3full, l_scom_buffer ));
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<48, 4, 60, uint64_t>(literal_0x0 );
+ }
+
if (l_def_IS_HW)
{
l_scom_buffer.insert<60, 3, 61, uint64_t>(literal_0b100 );
@@ -5032,12 +5070,30 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
{
FAPI_TRY(fapi2::getScom( TGT0, 0x8008780009010c3full, l_scom_buffer ));
- if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<56, 4, 60, uint64_t>(literal_0x0 );
+ }
+
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<60, 4, 60, uint64_t>(literal_0x0 );
+ }
+
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<48, 4, 60, uint64_t>(literal_0b0000 );
+ }
+ else if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
{
l_scom_buffer.insert<48, 4, 60, uint64_t>(literal_0b0110 );
}
- if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<52, 4, 60, uint64_t>(literal_0b0000 );
+ }
+ else if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
{
l_scom_buffer.insert<52, 4, 60, uint64_t>(literal_0b0110 );
}
@@ -5047,12 +5103,30 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
{
FAPI_TRY(fapi2::getScom( TGT0, 0x8008800009010c3full, l_scom_buffer ));
- if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<60, 4, 60, uint64_t>(literal_0x0 );
+ }
+
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<56, 4, 60, uint64_t>(literal_0x0 );
+ }
+
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<48, 4, 60, uint64_t>(literal_0b0000 );
+ }
+ else if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
{
l_scom_buffer.insert<48, 4, 60, uint64_t>(literal_0b0110 );
}
- if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<52, 4, 60, uint64_t>(literal_0b0000 );
+ }
+ else if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
{
l_scom_buffer.insert<52, 4, 60, uint64_t>(literal_0b0110 );
}
@@ -5060,6 +5134,26 @@ fapi2::ReturnCode p9_obus_scom(const fapi2::Target<fapi2::TARGET_TYPE_OBUS>& TGT
FAPI_TRY(fapi2::putScom(TGT0, 0x8008800009010c3full, l_scom_buffer));
}
{
+ FAPI_TRY(fapi2::getScom( TGT0, 0x8008880009010c3full, l_scom_buffer ));
+
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<48, 4, 60, uint64_t>(literal_0x0 );
+ }
+
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<56, 4, 60, uint64_t>(literal_0x0 );
+ }
+
+ if ((l_def_IS_SIM && l_def_OBUS_FBC_ENABLED))
+ {
+ l_scom_buffer.insert<52, 4, 60, uint64_t>(literal_0x0 );
+ }
+
+ FAPI_TRY(fapi2::putScom(TGT0, 0x8008880009010c3full, l_scom_buffer));
+ }
+ {
FAPI_TRY(fapi2::getScom( TGT0, 0x8008d00009010c3full, l_scom_buffer ));
if (( ! l_TGT2_ATTR_CHIP_EC_FEATURE_OBUS_HW419305))
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9_fab_iovalid.C b/src/import/chips/p9/procedures/hwp/nest/p9_fab_iovalid.C
index f2b132579..4dad8bea9 100644
--- a/src/import/chips/p9/procedures/hwp/nest/p9_fab_iovalid.C
+++ b/src/import/chips/p9/procedures/hwp/nest/p9_fab_iovalid.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2015,2017 */
+/* Contributors Listed Below - COPYRIGHT 2015,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -82,6 +82,10 @@ const uint64_t TL_FRAMER4567_ERR_REG_OFFSET = 0x26;
const uint64_t TL_PARSER0123_ERR_REG_OFFSET = 0x27;
const uint64_t TL_PARSER4567_ERR_REG_OFFSET = 0x28;
+// DL polling constants
+const uint32_t DL_MAX_POLL_LOOPS = 100;
+const uint32_t DL_POLL_SIM_CYCLES = 10000000;
+const uint32_t DL_POLL_HW_DELAY_NS = 1000000;
//------------------------------------------------------------------------------
// Function definitions
@@ -464,6 +468,7 @@ fapi2::ReturnCode p9_fab_iovalid_link_validate(
fapi2::ATTR_LINK_TRAIN_Type l_loc_link_train;
bool l_dl_trained = false;
bool l_tl_trained = false;
+ uint32_t l_poll_loops = DL_MAX_POLL_LOOPS;
// obtain link endpoints for FFDC
FAPI_TRY(p9_fab_iovalid_get_link_endpoints(i_target,
@@ -479,23 +484,35 @@ fapi2::ReturnCode p9_fab_iovalid_link_validate(
l_loc_link_train),
"Error from FAPI_ATTR_GET (ATTR_LINK_TRAIN)");
- // validate DL training state
- FAPI_TRY(fapi2::getScom(i_target, i_loc_link_ctl.dl_fir_addr, l_dl_fir_reg),
- "Error from getScom (0x%.16llX)", i_loc_link_ctl.dl_fir_addr);
-
- if (l_loc_link_train == fapi2::ENUM_ATTR_LINK_TRAIN_BOTH)
- {
- l_dl_trained = l_dl_fir_reg.getBit<DL_FIR_LINK0_TRAINED_BIT>() &&
- l_dl_fir_reg.getBit<DL_FIR_LINK1_TRAINED_BIT>();
- }
- else if (l_loc_link_train == fapi2::ENUM_ATTR_LINK_TRAIN_EVEN_ONLY)
+ do
{
- l_dl_trained = l_dl_fir_reg.getBit<DL_FIR_LINK0_TRAINED_BIT>();
- }
- else
- {
- l_dl_trained = l_dl_fir_reg.getBit<DL_FIR_LINK1_TRAINED_BIT>();
+ // validate DL training state
+ FAPI_TRY(fapi2::getScom(i_target, i_loc_link_ctl.dl_fir_addr, l_dl_fir_reg),
+ "Error from getScom (0x%.16llX)", i_loc_link_ctl.dl_fir_addr);
+
+ if (l_loc_link_train == fapi2::ENUM_ATTR_LINK_TRAIN_BOTH)
+ {
+ l_dl_trained = l_dl_fir_reg.getBit<DL_FIR_LINK0_TRAINED_BIT>() &&
+ l_dl_fir_reg.getBit<DL_FIR_LINK1_TRAINED_BIT>();
+ }
+ else if (l_loc_link_train == fapi2::ENUM_ATTR_LINK_TRAIN_EVEN_ONLY)
+ {
+ l_dl_trained = l_dl_fir_reg.getBit<DL_FIR_LINK0_TRAINED_BIT>();
+ }
+ else
+ {
+ l_dl_trained = l_dl_fir_reg.getBit<DL_FIR_LINK1_TRAINED_BIT>();
+ }
+
+ if (!l_dl_trained)
+ {
+ FAPI_TRY(fapi2::delay(DL_POLL_HW_DELAY_NS, DL_POLL_SIM_CYCLES), "fapiDelay error");
+
+ }
+
+ l_poll_loops--;
}
+ while (l_poll_loops > 0 && !l_dl_trained);
FAPI_ASSERT(l_dl_trained,
fapi2::P9_FAB_IOVALID_DL_NOT_TRAINED_ERR()
OpenPOWER on IntegriCloud