diff options
author | Ben Gass <bgass@us.ibm.com> | 2017-12-05 16:23:32 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-01-13 14:04:08 -0500 |
commit | 15569e9de5a894884968a4cb284d90659874357f (patch) | |
tree | ffb6747299e8ffffdcfcf49c97335761f8796f7e /src | |
parent | f230133c8502ad16a4e3b2bf9cf0bdd813caab60 (diff) | |
download | talos-hostboot-15569e9de5a894884968a4cb284d90659874357f.tar.gz talos-hostboot-15569e9de5a894884968a4cb284d90659874357f.zip |
Shorten A-link timers for sim. Add polling for A-link training.
Change-Id: Iad63bc098741d328c4ccf90268b3817f4cf67858
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/50536
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Joseph J. McGill <jmcgill@us.ibm.com>
Reviewed-by: Thi N. Tran <thi@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/50548
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/import/chips/p9/procedures/hwp/initfiles/p9_obus_scom.C | 102 | ||||
-rw-r--r-- | src/import/chips/p9/procedures/hwp/nest/p9_fab_iovalid.C | 49 |
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() |