diff options
author | Sumit Kumar <sumit_kumar@in.ibm.com> | 2016-01-27 00:57:27 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-10-11 22:36:55 -0400 |
commit | 5f5036753835bb6972661988a19408782a8658e8 (patch) | |
tree | 5dda5a3386dc82b55c3d76e54fe3d3b79e724c36 /src/import/chips/p9/procedures/hwp/io | |
parent | 865ed6cc78d1f685c10998c0c7be04fa150a9d3f (diff) | |
download | talos-hostboot-5f5036753835bb6972661988a19408782a8658e8.tar.gz talos-hostboot-5f5036753835bb6972661988a19408782a8658e8.zip |
Erepair HWP p9_io_erepair procedure
- Added clock group parameter in api to identify the higher/lower
order bus width of XBUS-X0 & X1
- Added AccessorHwpFuncs
Change-Id: Id00219cc437e4949f2bcbdb239d46d9e1db36ed0
Original-Change-Id: Ieb9b1072ed73b26b321ec16f0742271f48aff810
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/10587
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48244
Tested-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/io')
-rwxr-xr-x | src/import/chips/p9/procedures/hwp/io/p9_io_erepairAccessorHwpFuncs.H | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/src/import/chips/p9/procedures/hwp/io/p9_io_erepairAccessorHwpFuncs.H b/src/import/chips/p9/procedures/hwp/io/p9_io_erepairAccessorHwpFuncs.H new file mode 100755 index 000000000..28e976aaf --- /dev/null +++ b/src/import/chips/p9/procedures/hwp/io/p9_io_erepairAccessorHwpFuncs.H @@ -0,0 +1,276 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/import/chips/p9/procedures/hwp/io/p9_io_erepairAccessorHwpFuncs.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2015,2017 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ +/// +/// @file p9_io_erepairAccessorHwpFuncs.H +/// @brief FW Team utility functions that access fabric and memory eRepair data. +/// +//---------------------------------------------------------------------------- + + +#ifndef P9_IO_EREPAIRACCESSORHWPFUNCS_H_ +#define P9_IO_EREPAIRACCESSORHWPFUNCS_H_ + +#include <fapi2.H> +#include <algorithm> + +const uint8_t EREPAIR_MAX_CENTAUR_PER_MCS = 1; + +typedef fapi2::ReturnCode (*getLanes_t)( + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_tgtHandle, + const uint8_t i_clkGroup, + std::vector<uint8_t>& o_txFailLanes, + std::vector<uint8_t>& o_rxFailLanes); + +typedef fapi2::ReturnCode (*setLanes_t)( + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_tgtHandle, + const uint8_t i_clkGroup, + const std::vector<uint8_t>& i_txFailLanes, + const std::vector<uint8_t>& i_rxFailLanes); + +/** + * @brief FW Team Utility function that gets eRepair data from the VPD + * This function gets the eRepair data from both the Field VPD + * and the Manufacturing VPD. + * + * @param[in] i_endp_target Reference to X-Bus or O-Bus or MCS or memBuf Target + * @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..] + * @param[out] o_txFailLanes Reference to a Vector that will contain the fail + * lanes read from the VPD for Drive side + * @param[out] o_rxFailLanes Reference to a Vector that will contain the fail + * lanes read from the VPD for Receive side + * @return ReturnCode + * + */ +fapi2::ReturnCode erepairGetFailedLanes( + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_endp_target, + const uint8_t i_clkGroup, + std::vector<uint8_t>& o_txFailLanes, + std::vector<uint8_t>& o_rxFailLanes); + +/** + * @brief FW Team Utility function that gets eRepair data + * + * This is a wrapper function for the Accessor HWP which reads failed lane + * numbers from the Field VPD + * + * @param[in] i_endp_target Reference to X-Bus or O-Bus or MCS or memBuf Target + * @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..] + * @param[out] o_txFailLanes Reference to a Vector that will contain the fail + * lanes read from the Field VPD for Drive side + * @param[out] o_rxFailLanes Reference to a Vector that will contain the fail + * lanes read from the Field VPD for Receive side + * @return ReturnCode + * + */ +fapi2::ReturnCode erepairGetFieldFailedLanes( + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_endp_target, + const uint8_t i_clkGroup, + std::vector<uint8_t>& o_txFailLanes, + std::vector<uint8_t>& o_rxFailLanes); + +/** + * @brief FW Team Utility function that gets eRepair data + * + * This is a wrapper function for the Accessor HWP which reads failed lane + * numbers from the Manufacturing VPD + * + * @param[in] i_endp_target Reference to X-Bus or O-Bus or MCS or memBuf Target + * @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..] + * @param[out] o_txFailLanes Reference to a Vector that will contain the fail + * lanes read from the Mnfg VPD for Drive side + * @param[out] o_rxFailLanes Reference to a Vector that will contain the fail + * lanes read from the Mnfg VPD for Receive side + * @return ReturnCode + * + */ +fapi2::ReturnCode erepairGetMnfgFailedLanes( + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_endp_target, + const uint8_t i_clkGroup, + std::vector<uint8_t>& o_txFailLanes, + std::vector<uint8_t>& o_rxFailLanes); + +/** + * @brief FW Team Utility function that sets eRepair data in the VPD. + * This functions sets the eRepair data to either the Field VPD + * or the Manufacturing VPD depending on whether the IPL was done + * in normal mode or Manufacturing mode. + * It writes eRepair data to the VPD of both the endpoint targets + * passed as arguments. + * + * @param[in] i_txEndp_target Reference to X-Bus or O-Bus or MCS or memBuf + * Target. This is the peer target of + * i_rxEndp_target + * @param[in] i_rxEndp_target Reference to X-Bus or O-Bus or MCS or memBuf + * Target. This is the target on which the + * badlanes were found + * @param[in] i_rxFailLanes Vector that will contain the fail lanes + * to be written to VPD for Receive side + * @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..] + * @param[out] o_thresholdExceed If TRUE, indicates that the eRepair threshold + * has exceeded, FALSE otherwise. + * + * @return ReturnCode + */ +fapi2::ReturnCode erepairSetFailedLanes( + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_txEndp_target, + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_rxEndp_target, + const std::vector<uint8_t>& i_rxFailLanes, + const uint8_t i_clkGroup, + bool& o_thresholdExceed); + +/** + * @brief FW Team Utility function that sets eRepair data in Field VPD + * + * This is a wrapper function for the Accessor HWP which writes failed lane + * numbers to the Field VPD + * + * @param[in] i_endp_target Reference to X-Bus or O-Bus or MCS or memBuf Target + * @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..] + * @param[in] i_txFailLanes Vector that will contain the fail lane + * to be written to Field VPD for Drive side + * @param[in] i_rxFailLanes Vector that will contain the fail lanes + * to be written to Field VPD for Receive side + * + * @return ReturnCode + */ +fapi2::ReturnCode erepairSetFieldFailedLanes( + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_endp_target, + const uint8_t i_clkGroup, + const std::vector<uint8_t>& i_txFailLanes, + const std::vector<uint8_t>& i_rxFailLanes); + +/** + * @brief FW Team Utility function that sets eRepair data in Manufacturing VPD + * + * This is a wrapper function for the Accessor HWP which writes failed lane + * numbers to the Manufacturing VPD + * + * @param[in] i_endp_target Reference to X-Bus or O-Bus or MCS or memBuf Target + * @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..] + * @param[in] i_txFailLanes Vector that will contain the fail lane + * to be written to Mnfg VPD for Drive side + * @param[in] i_rxFailLanes Vector that will contain the fail lanes + * to be written to Mnfg VPD for Receive side + * + * @return ReturnCode + */ +fapi2::ReturnCode erepairSetMnfgFailedLanes( + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_endp_target, + const uint8_t i_clkGroup, + const std::vector<uint8_t>& i_txFailLanes, + const std::vector<uint8_t>& i_rxFailLanes); + +/** + * @brief Function which retrieves the lanes that need to be restored for the + * given end point targets + * + * This function is called by the iStep dispatcher during the Restore Repair + * iStep for Fabric buses and DMI buses. The caller need to make sure that the + * first and fourth arguments are the endpoint targets of a Fabric bus or + * DMI bus. + * It calls the wrapper functions of Accessor HWP to read the fail lane data + * recorded in the VPD on both the ends and verifies that there are matching + * records on both the ends. If matching fail lanes are not found, the + * corresponding fail lane data is invalidated using the wrapper Accessor HWP + * that writes data to the VPD. + * + * @param [in] i_endp1_target Reference to X-Bus or O-Bus or MCS Target + * @param [in] i_endp2_target Reference to X-Bus or O-Bus or MCS Target + * @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..] + * @param [out] o_endp1_txFaillanes Reference to vector that will have the + * fail lane numbers that need to be restored + * for the Tx side of the target passed + * as first param + * @param [out] o_endp1_rxFaillanes Reference to vector that will have the + * fail lane numbers that need to be restored + * for the Rx side of the target passed + * as first param + * @param [out] o_endp2_txFaillanes Reference to vector that will have the + * fail lane numbers that need to be restored + * for the Tx side of the target passed + * as fourth param + * @param [out] o_endp2_rxFaillanes Reference to vector that will have the + * fail lane numbers that need to be restored + * for the Rx side of the target passed + * as fourth param + * + * @return ReturnCode + * + */ + +fapi2::ReturnCode erepairGetRestoreLanes( + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_endp1_target, + const fapi2::Target < fapi2::TARGET_TYPE_XBUS | + fapi2::TARGET_TYPE_OBUS | + fapi2::TARGET_TYPE_MEMBUF_CHIP | + fapi2::TARGET_TYPE_MCS_CHIPLET | + fapi2::TARGET_TYPE_MCS > &i_endp2_target, + const uint8_t i_clkGroup, + std::vector<uint8_t>& o_endp1_txFaillanes, + std::vector<uint8_t>& o_endp1_rxFaillanes, + std::vector<uint8_t>& o_endp2_txFaillanes, + std::vector<uint8_t>& o_endp2_rxFaillanes); + +#endif |