Skip to content

Commit

Permalink
Erepair HWP p9_io_erepair procedure
Browse files Browse the repository at this point in the history
- 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>
  • Loading branch information
sumitk56 authored and dcrowell77 committed Oct 12, 2017
1 parent 865ed6c commit 5f50367
Showing 1 changed file with 276 additions and 0 deletions.
276 changes: 276 additions & 0 deletions 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

0 comments on commit 5f50367

Please sign in to comment.