diff --git a/src/import/chips/p9/procedures/hwp/io/p9_io_xbus_read_erepair.C b/src/import/chips/p9/procedures/hwp/io/p9_io_xbus_read_erepair.C index 10992eb35c3..cbae9d67d29 100644 --- a/src/import/chips/p9/procedures/hwp/io/p9_io_xbus_read_erepair.C +++ b/src/import/chips/p9/procedures/hwp/io/p9_io_xbus_read_erepair.C @@ -30,7 +30,7 @@ /// *HWP HWP Backup Owner : Gary Peterson /// *HWP FW Owner : Jamie Knight /// *HWP Team : IO -/// *HWP Level : 1 +/// *HWP Level : 2 /// *HWP Consumed by : FSP:HB ///---------------------------------------------------------------------------- /// @@ -50,6 +50,8 @@ // Includes // ---------------------------------------------------------------------------- #include "p9_io_xbus_read_erepair.H" +#include "p9_io_gcr.H" +#include "p9_io_regs.H" // ---------------------------------------------------------------------------- // Procedure Function @@ -58,22 +60,54 @@ /** * @brief A HWP that runs Read eRepair. This procedure reads the current bad - * lanes and passes by reference the lane numbers in a vector - * @param[in] i_target Reference to Target - * @param[out] o_bad_lanes Vector of bad lanes + * lanes and passes by reference the lane numbers in a vector. + * @param[in] i_target Reference to Target + * @param[in] i_clock_group Clock Group of Target + * @param[out] o_bad_lanes Vector of bad lanes * @retval ReturnCode */ fapi2::ReturnCode p9_io_xbus_read_erepair(const fapi2::Target < fapi2::TARGET_TYPE_XBUS >& i_target, + const uint8_t& i_clock_group, std::vector< uint8_t >& o_bad_lanes) { FAPI_IMP("Entering..."); - fapi2::ReturnCode rc = 0; -#if 0 + + fapi2::ReturnCode rc = fapi2::FAPI2_RC_SUCCESS; + const uint16_t BAD_LANES_3PLUS = 3; + const uint16_t BAD_LANES_2 = 2; + const uint16_t BAD_LANES_1 = 1; + const uint16_t BAD_LANES_0 = 0; + Register < EDIP_RX_GLBSM_STAT9_E_PG > rx_bad_lanes_reg; + + o_bad_lanes.clear(); + + FAPI_TRY(rx_bad_lanes_reg.read(i_target, i_clock_group), "Reading Bad Lane Code Failed."); + FAPI_DBG( "Bad Lane Code: %d", rx_bad_lanes_reg.get() ); + + switch( rx_bad_lanes_reg.get() ) + { + case BAD_LANES_3PLUS: + FAPI_DBG( "Bad Lane: Three or more bad lanes found." ); + + case BAD_LANES_2: + FAPI_DBG( "Bad Lane 2: %d", rx_bad_lanes_reg.get() ); + o_bad_lanes.push_back( (uint8_t)rx_bad_lanes_reg.get() ); + + case BAD_LANES_1: + FAPI_DBG( "Bad Lane 1: %d", rx_bad_lanes_reg.get() ); + o_bad_lanes.push_back( (uint8_t)rx_bad_lanes_reg.get() ); + break; + + case BAD_LANES_0: + FAPI_DBG( "No Bad Lanes" ); + + default: + break; + } fapi_try_exit: -#endif FAPI_IMP("Exiting..."); - return fapi2::FAPI2_RC_SUCCESS; + return fapi2::current_err; } diff --git a/src/import/chips/p9/procedures/hwp/io/p9_io_xbus_read_erepair.H b/src/import/chips/p9/procedures/hwp/io/p9_io_xbus_read_erepair.H index c8f2f637de3..24b84e0b43a 100644 --- a/src/import/chips/p9/procedures/hwp/io/p9_io_xbus_read_erepair.H +++ b/src/import/chips/p9/procedures/hwp/io/p9_io_xbus_read_erepair.H @@ -27,7 +27,7 @@ /// *HWP HWP Backup Owner : Gary Peterson /// *HWP FW Owner : Jamie Knight /// *HWP Team : IO -/// *HWP Level : 1 +/// *HWP Level : 2 /// *HWP Consumed by : FSP:HB ///---------------------------------------------------------------------------- @@ -41,7 +41,7 @@ // function pointer typedef definition for HWP call support typedef fapi2::ReturnCode (*p9_io_xbus_read_erepair_FP_t) -(const fapi2::Target < fapi2::TARGET_TYPE_XBUS >&, std::vector< uint8_t >&); +(const fapi2::Target < fapi2::TARGET_TYPE_XBUS >&, const uint8_t&, std::vector< uint8_t >&); extern "C" @@ -49,12 +49,14 @@ extern "C" /** * @brief A HWP that runs Read eRepair. This procedure reads the current bad * lanes and passes by reference the lane numbers in a vector - * @param[in] i_target Reference to Target - * @param[out] o_bad_lanes Vector of bad lanes + * @param[in] i_target Reference to Target + * @param[in] i_clock_group Clock Group of Target + * @param[out] o_bad_lanes Vector of bad lanes * @retval ReturnCode */ fapi2::ReturnCode p9_io_xbus_read_erepair(const fapi2::Target< fapi2::TARGET_TYPE_XBUS >& i_target, + const uint8_t& i_clock_group, std::vector< uint8_t >& o_bad_lanes); } // extern "C"