From 94bdad69c456d4eae0b68acf5b327b5774713786 Mon Sep 17 00:00:00 2001 From: Chris Steffen Date: Wed, 17 May 2017 09:41:54 -0500 Subject: DMI I/O Checkin Change-Id: Ib73ba11ecf5811a313ecfe7d6e0e385b12cc2bee Original-Change-Id: I9b9326ea8bc9d9734e74c170dfebbd9aaf73fb6f Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40666 Tested-by: Jenkins Server Tested-by: Hostboot CI Reviewed-by: Gary A. Peterson Reviewed-by: Richard J. Knight Reviewed-by: Matt K. Light Reviewed-by: Jennifer A. Stofer Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59947 Tested-by: Jenkins OP Build CI Reviewed-by: Daniel M. Crowell --- .../procedures/hwp/io/p9_io_cen_read_erepair.C | 118 +++++++++++++++++++++ .../procedures/hwp/io/p9_io_cen_read_erepair.H | 65 ++++++++++++ .../procedures/hwp/io/p9_io_cen_read_erepair.mk | 27 +++++ .../p9/procedures/hwp/io/p9_io_dmi_read_erepair.C | 117 ++++++++++++++++++++ .../p9/procedures/hwp/io/p9_io_dmi_read_erepair.H | 65 ++++++++++++ .../p9/procedures/hwp/io/p9_io_dmi_read_erepair.mk | 26 +++++ 6 files changed, 418 insertions(+) create mode 100644 src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.C create mode 100644 src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.H create mode 100644 src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.mk create mode 100644 src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.C create mode 100644 src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.H create mode 100644 src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.mk diff --git a/src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.C b/src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.C new file mode 100644 index 000000000..6c5f2f5f8 --- /dev/null +++ b/src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.C @@ -0,0 +1,118 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2015,2018 */ +/* [+] 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_cen_read_erepair.C +/// @brief Read eRepair. +///---------------------------------------------------------------------------- +/// *HWP HWP Owner : Chris Steffen +/// *HWP HWP Backup Owner : Gary Peterson +/// *HWP FW Owner : Jamie Knight +/// *HWP Team : IO +/// *HWP Level : 2 +/// *HWP Consumed by : FSP:HB +///---------------------------------------------------------------------------- +/// +/// @verbatim +/// High-level procedure flow: +/// +/// A HWP that runs Read eRepair. This procedure reads the current bad +/// lanes and passes by reference the lane numbers in a vector. +/// +/// Procedure Prereq: +/// - System clocks are running. +/// +/// @endverbatim +///---------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- +// Includes +// ---------------------------------------------------------------------------- +#include "p9_io_cen_read_erepair.H" +#include "p9_io_scom.H" +#include "p9_io_regs.H" + +// ---------------------------------------------------------------------------- +// Procedure Function +// ---------------------------------------------------------------------------- + + +/** + * @brief A HWP that runs Read eRepair. This procedure reads the current bad + * lanes and passes by reference the lane numbers in a vector. The rx vectors + * will return to the caller (PRD or e-repair) the bad lane numbers on this + * endpoint. The caller will duplicate the found rx bad lanes to the + * corresponding tx bad lanes on the connected target. + * @param[in] i_target Reference to Target + * @param[out] o_bad_lanes Vector of bad lanes + * @retval ReturnCode + */ +fapi2::ReturnCode p9_io_cen_read_erepair( + const fapi2::Target < fapi2::TARGET_TYPE_MEMBUF_CHIP >& i_target, + std::vector< uint8_t >& o_bad_lanes) +{ + FAPI_IMP("p9_io_cen_read_erepair: Entering."); + const uint8_t GRP0 = 0; + const uint8_t LN0 = 0; + 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; + uint64_t l_data = 0; + + o_bad_lanes.clear(); + + // TODO CHANGE TO EDI REGISTERS + FAPI_TRY(io::read(EDIP_RX_GLBSM_STAT9_E_PG, i_target, GRP0, LN0, l_data), + "Reading Bad Lane Code Failed."); + + FAPI_DBG("Bad Lane Code: %d", io::get(EDIP_RX_BAD_LANE_CODE, l_data)); + + switch(io::get(EDIP_RX_BAD_LANE_CODE, l_data)) + { + case BAD_LANES_3PLUS: + FAPI_DBG("Bad Lane: Three or more bad lanes found."); + + // We will intentionally fall through to collect bad lane 1 & 2. + case BAD_LANES_2: + FAPI_DBG("Bad Lane 2: %d", io::get(EDIP_RX_BAD_LANE2, l_data)); + o_bad_lanes.push_back((uint8_t)io::get(EDIP_RX_BAD_LANE2, l_data)); + + // We will intentionally fall through to collect bad lane 1. + case BAD_LANES_1: + FAPI_DBG("Bad Lane 1: %d", io::get(EDIP_RX_BAD_LANE1, l_data)); + o_bad_lanes.push_back((uint8_t)io::get(EDIP_RX_BAD_LANE1, l_data)); + break; + + case BAD_LANES_0: + FAPI_DBG("No Bad Lanes"); + + default: + break; + } + +fapi_try_exit: + FAPI_IMP("p9_io_cen_read_erepair: Exiting."); + return fapi2::current_err; +} diff --git a/src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.H b/src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.H new file mode 100644 index 000000000..e5d843844 --- /dev/null +++ b/src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.H @@ -0,0 +1,65 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2015,2018 */ +/* [+] 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 */ +///---------------------------------------------------------------------------- +/// *HWP HWP Owner : Chris Steffen +/// *HWP HWP Backup Owner : Gary Peterson +/// *HWP FW Owner : Jamie Knight +/// *HWP Team : IO +/// *HWP Level : 2 +/// *HWP Consumed by : FSP:HB +///---------------------------------------------------------------------------- + +#ifndef _P9_IO_CEN_READ_EREPAIR_H_ +#define _P9_IO_CEN_READ_EREPAIR_H_ + +// ---------------------------------------------------------------------------- +// Includes +// ---------------------------------------------------------------------------- +#include + +// function pointer typedef definition for HWP call support +typedef fapi2::ReturnCode (*p9_io_cen_read_erepair_FP_t) +(const fapi2::Target < fapi2::TARGET_TYPE_MEMBUF_CHIP >&, std::vector< uint8_t >&); + + +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. The rx vectors + * will return to the caller ( PRD or e-repair ) the bad lane numbers on this + * endpoint. The caller will duplicate the found rx bad lanes to the + * corresponding tx bad lanes on the connected target. + * @param[in] i_target Reference to Target + * @param[out] o_bad_lanes Vector of bad lanes + * @retval ReturnCode + */ + fapi2::ReturnCode + p9_io_cen_read_erepair(const fapi2::Target< fapi2::TARGET_TYPE_MEMBUF_CHIP >& i_target, + std::vector< uint8_t >& o_bad_lanes); + +} // extern "C" + +#endif // _P9_IO_CEN_READ_EREPAIR_H_ diff --git a/src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.mk b/src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.mk new file mode 100644 index 000000000..e20d9ab53 --- /dev/null +++ b/src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.mk @@ -0,0 +1,27 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/import/chips/centaur/procedures/hwp/io/p9_io_cen_read_erepair.mk $ +# +# OpenPOWER HostBoot Project +# +# Contributors Listed Below - COPYRIGHT 2015,2018 +# [+] 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 +PROCEDURE=p9_io_cen_read_erepair +$(call ADD_MODULE_SRCDIR,$(PROCEDURE),$(ROOTPATH)/chips/p9/procedures/hwp/io/) +$(call BUILD_PROCEDURE) diff --git a/src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.C b/src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.C new file mode 100644 index 000000000..9dced0f35 --- /dev/null +++ b/src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.C @@ -0,0 +1,117 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2015,2018 */ +/* [+] 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_dmi_read_erepair.C +/// @brief Read eRepair. +///---------------------------------------------------------------------------- +/// *HWP HWP Owner : Chris Steffen +/// *HWP HWP Backup Owner : Gary Peterson +/// *HWP FW Owner : Jamie Knight +/// *HWP Team : IO +/// *HWP Level : 2 +/// *HWP Consumed by : FSP:HB +///---------------------------------------------------------------------------- +/// +/// @verbatim +/// High-level procedure flow: +/// +/// A HWP that runs Read eRepair. This procedure reads the current bad +/// lanes and passes by reference the lane numbers in a vector. +/// +/// Procedure Prereq: +/// - System clocks are running. +/// +/// @endverbatim +///---------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- +// Includes +// ---------------------------------------------------------------------------- +#include "p9_io_dmi_read_erepair.H" +#include "p9_io_scom.H" +#include "p9_io_regs.H" + +// ---------------------------------------------------------------------------- +// Procedure Function +// ---------------------------------------------------------------------------- + + +/** + * @brief A HWP that runs Read eRepair. This procedure reads the current bad + * lanes and passes by reference the lane numbers in a vector. The rx vectors + * will return to the caller (PRD or e-repair) the bad lane numbers on this + * endpoint. The caller will duplicate the found rx bad lanes to the + * corresponding tx bad lanes on the connected target. + * @param[in] i_target Reference to Target + * @param[out] o_bad_lanes Vector of bad lanes + * @retval ReturnCode + */ +fapi2::ReturnCode p9_io_dmi_read_erepair( + const fapi2::Target < fapi2::TARGET_TYPE_DMI >& i_target, + std::vector< uint8_t >& o_bad_lanes) +{ + FAPI_IMP("p9_io_dmi_read_erepair: Entering."); + const uint8_t GRP3 = 3; + const uint8_t LN0 = 0; + 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; + uint64_t l_data = 0; + + o_bad_lanes.clear(); + + FAPI_TRY(io::read(EDIP_RX_GLBSM_STAT9_E_PG, i_target, GRP3, LN0, l_data), + "Reading Bad Lane Code Failed."); + + FAPI_DBG("Bad Lane Code: %d", io::get(EDIP_RX_BAD_LANE_CODE, l_data)); + + switch(io::get(EDIP_RX_BAD_LANE_CODE, l_data)) + { + case BAD_LANES_3PLUS: + FAPI_DBG("Bad Lane: Three or more bad lanes found."); + + // We will intentionally fall through to collect bad lane 1 & 2. + case BAD_LANES_2: + FAPI_DBG("Bad Lane 2: %d", io::get(EDIP_RX_BAD_LANE2, l_data)); + o_bad_lanes.push_back((uint8_t)io::get(EDIP_RX_BAD_LANE2, l_data)); + + // We will intentionally fall through to collect bad lane 1. + case BAD_LANES_1: + FAPI_DBG("Bad Lane 1: %d", io::get(EDIP_RX_BAD_LANE1, l_data)); + o_bad_lanes.push_back((uint8_t)io::get(EDIP_RX_BAD_LANE1, l_data)); + break; + + case BAD_LANES_0: + FAPI_DBG("No Bad Lanes"); + + default: + break; + } + +fapi_try_exit: + FAPI_IMP("p9_io_dmi_read_erepair: Exiting."); + return fapi2::current_err; +} diff --git a/src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.H b/src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.H new file mode 100644 index 000000000..bcdfb0b8a --- /dev/null +++ b/src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.H @@ -0,0 +1,65 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2015,2018 */ +/* [+] 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 */ +///---------------------------------------------------------------------------- +/// *HWP HWP Owner : Chris Steffen +/// *HWP HWP Backup Owner : Gary Peterson +/// *HWP FW Owner : Jamie Knight +/// *HWP Team : IO +/// *HWP Level : 2 +/// *HWP Consumed by : FSP:HB +///---------------------------------------------------------------------------- + +#ifndef _P9_IO_DMI_READ_EREPAIR_H_ +#define _P9_IO_DMI_READ_EREPAIR_H_ + +// ---------------------------------------------------------------------------- +// Includes +// ---------------------------------------------------------------------------- +#include + +// function pointer typedef definition for HWP call support +typedef fapi2::ReturnCode (*p9_io_dmi_read_erepair_FP_t) +(const fapi2::Target < fapi2::TARGET_TYPE_DMI >&, std::vector< uint8_t >&); + + +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. The rx vectors + * will return to the caller ( PRD or e-repair ) the bad lane numbers on this + * endpoint. The caller will duplicate the found rx bad lanes to the + * corresponding tx bad lanes on the connected target. + * @param[in] i_target Reference to Target + * @param[out] o_bad_lanes Vector of bad lanes + * @retval ReturnCode + */ + fapi2::ReturnCode + p9_io_dmi_read_erepair(const fapi2::Target< fapi2::TARGET_TYPE_XBUS >& i_target, + std::vector< uint8_t >& o_bad_lanes); + +} // extern "C" + +#endif // _P9_IO_DMI_READ_EREPAIR_H_ diff --git a/src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.mk b/src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.mk new file mode 100644 index 000000000..cca19c233 --- /dev/null +++ b/src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.mk @@ -0,0 +1,26 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/import/chips/p9/procedures/hwp/io/p9_io_dmi_read_erepair.mk $ +# +# OpenPOWER HostBoot Project +# +# Contributors Listed Below - COPYRIGHT 2015,2018 +# [+] 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 +PROCEDURE=p9_io_dmi_read_erepair +$(call BUILD_PROCEDURE) -- cgit v1.2.1