diff options
Diffstat (limited to 'src/usr/hwpf/hwp/bus_training/proc_fab_smp.C')
| -rw-r--r-- | src/usr/hwpf/hwp/bus_training/proc_fab_smp.C | 288 |
1 files changed, 288 insertions, 0 deletions
diff --git a/src/usr/hwpf/hwp/bus_training/proc_fab_smp.C b/src/usr/hwpf/hwp/bus_training/proc_fab_smp.C new file mode 100644 index 000000000..8f97676d8 --- /dev/null +++ b/src/usr/hwpf/hwp/bus_training/proc_fab_smp.C @@ -0,0 +1,288 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwpf/hwp/bus_training/proc_fab_smp.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ +// $Id: proc_fab_smp.C,v 1.7 2012/09/24 05:00:12 jmcgill Exp $ +// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_fab_smp.C,v $ +//------------------------------------------------------------------------------ +// *| +// *! (C) Copyright International Business Machines Corp. 2011 +// *! All Rights Reserved -- Property of IBM +// *! *** IBM Confidential *** +// *| +// *! TITLE : proc_fab_smp.C +// *! DESCRIPTION : Common fabric structure defintions/utility functions (FAPI) +// *! +// *! OWNER NAME : Joe McGill Email: jmcgill@us.ibm.com +// *! +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +// Includes +//------------------------------------------------------------------------------ +#include "proc_fab_smp.H" + +extern "C" { + + +//------------------------------------------------------------------------------ +// Function definitions +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +// function: utility function to read & return fabric node ID attribute +// parameters: i_target => pointer to chip target +// o_node_id => structure encapsulating node ID value +// returns: FAPI_RC_SUCCESS if attribute read is successful & value is valid, +// RC_PROC_FAB_SMP_FABRIC_NODE_ID_ATTR_ERR if attribute value is +// invalid, +// else FAPI_ATTR_GET return code +//------------------------------------------------------------------------------ +fapi::ReturnCode proc_fab_smp_get_node_id_attr( + const fapi::Target* i_target, + proc_fab_smp_node_id& o_node_id) +{ + // return code + fapi::ReturnCode rc; + // temporary attribute storage used to build procedure data structures + uint8_t node_id_attr; + + // mark function entry + FAPI_DBG("proc_fab_smp_get_node_id_attr: Start"); + + do + { + // retrieve node ID attribute + rc = FAPI_ATTR_GET(ATTR_FABRIC_NODE_ID, + i_target, + node_id_attr); + if (!rc.ok()) + { + FAPI_ERR("proc_fab_smp_get_node_id_attr: Error querying ATTR_FABRIC_NODE_ID"); + break; + } + + // print attribute value + FAPI_DBG("proc_fab_smp_get_node_id_attr: ATTR_FABRIC_NODE_ID = 0x%X", + node_id_attr); + + // translate to output value + switch (node_id_attr) + { + case 0: + o_node_id = FBC_NODE_ID_0; + break; + case 1: + o_node_id = FBC_NODE_ID_1; + break; + case 2: + o_node_id = FBC_NODE_ID_2; + break; + case 3: + o_node_id = FBC_NODE_ID_3; + break; + case 4: + o_node_id = FBC_NODE_ID_4; + break; + case 5: + o_node_id = FBC_NODE_ID_5; + break; + case 6: + o_node_id = FBC_NODE_ID_6; + break; + case 7: + o_node_id = FBC_NODE_ID_7; + break; + default: + FAPI_ERR("proc_fab_smp_get_node_id_attr: Invalid fabric node ID attribute value 0x%02X", + node_id_attr); + const uint8_t& ATTR_DATA = node_id_attr; + FAPI_SET_HWP_ERROR(rc, + RC_PROC_FAB_SMP_FABRIC_NODE_ID_ATTR_ERR); + break; + } + } while(0); + + // mark function exit + FAPI_DBG("proc_fab_smp_get_node_id_attr: End"); + return rc; +} + + +//------------------------------------------------------------------------------ +// function: utility function to read & return fabric chip ID attribute +// parameters: i_target => pointer to chip target +// o_chip_id => structure encapsulating chip ID value +// returns: FAPI_RC_SUCCESS if attribute read is successful & value is valid, +// RC_PROC_FAB_SMP_FABRIC_CHIP_ID_ATTR_ERR if attribute value is +// invalid, +// else FAPI_ATTR_GET return code +//------------------------------------------------------------------------------ +fapi::ReturnCode proc_fab_smp_get_chip_id_attr( + const fapi::Target* i_target, + proc_fab_smp_chip_id& o_chip_id) +{ + // return code + fapi::ReturnCode rc; + // temporary attribute storage used to build procedure data structures + uint8_t chip_id_attr; + + // mark function entry + FAPI_DBG("proc_fab_smp_get_chip_id_attr: Start"); + + do + { + // retrieve chip ID attribute + rc = FAPI_ATTR_GET(ATTR_FABRIC_CHIP_ID, + i_target, + chip_id_attr); + if (!rc.ok()) + { + FAPI_ERR("proc_fab_smp_get_chip_id_attr: Error querying ATTR_FABRIC_CHIP_ID"); + break; + } + + // print attribute value + FAPI_DBG("proc_fab_smp_get_chip_id_attr: ATTR_FABRIC_CHIP_ID = 0x%X", + chip_id_attr); + + // translate to output value + switch (chip_id_attr) + { + case 0: + o_chip_id = FBC_CHIP_ID_0; + break; + case 1: + o_chip_id = FBC_CHIP_ID_1; + break; + case 2: + o_chip_id = FBC_CHIP_ID_2; + break; + case 3: + o_chip_id = FBC_CHIP_ID_3; + break; + case 4: + o_chip_id = FBC_CHIP_ID_4; + break; + case 5: + o_chip_id = FBC_CHIP_ID_5; + break; + case 6: + o_chip_id = FBC_CHIP_ID_6; + break; + case 7: + o_chip_id = FBC_CHIP_ID_7; + break; + default: + FAPI_ERR("proc_fab_smp_get_chip_id_attr: Invalid fabric chip ID attribute value 0x%02X", + chip_id_attr); + const uint8_t& ATTR_DATA = chip_id_attr; + FAPI_SET_HWP_ERROR(rc, + RC_PROC_FAB_SMP_FABRIC_CHIP_ID_ATTR_ERR); + break; + } + } while(0); + + // mark function exit + FAPI_DBG("proc_fab_smp_get_chip_id_attr: End"); + return rc; +} + + +//------------------------------------------------------------------------------ +// function: utility function to read & return PCIe/DSMP mux attribute values +// parameters: i_target => pointer to chip target +// o_pcie_not_f_link => vector of boolean values representing state +// of PCIe/DSMP mux settings (one value per +// foreign link, true=PCIe function, false= +// DSMP function) +// returns: FAPI_RC_SUCCESS if attribute read is successful & value is valid, +// RC_PROC_FAB_SMP_PCIE_NOT_F_LINK_ATTR_ERR if attribute value is +// invalid, +// else FAPI_ATTR_GET return code +//------------------------------------------------------------------------------ +fapi::ReturnCode proc_fab_smp_get_pcie_dsmp_mux_attrs( + const fapi::Target* i_target, + bool o_pcie_not_f_link[PROC_FAB_SMP_NUM_F_LINKS]) +{ + // return code + fapi::ReturnCode rc; + // temporary attribute storage used to build procedure data structures + uint8_t pcie_not_f_link_attr[PROC_FAB_SMP_NUM_F_LINKS]; + + // mark function entry + FAPI_DBG("proc_fab_smp_get_pcie_dsmp_mux_attrs: Start"); + + do + { + // retrieve PCIe/DSMP mux attributes + rc = FAPI_ATTR_GET(ATTR_PROC_PCIE_NOT_F_LINK, + i_target, + pcie_not_f_link_attr); + if (!rc.ok()) + { + FAPI_ERR("proc_fab_smp_get_pcie_dsmp_mux_attrs: Error querying ATTR_PROC_PCIE_NOT_F_LINK"); + break; + } + + // loop over all links + for (uint8_t l = 0; + l < PROC_FAB_SMP_NUM_F_LINKS; + l++) + { + // print attribute value + FAPI_DBG("proc_fab_smp_get_pcie_dsmp_mux_attrs: ATTR_PROC_PCIE_NOT_F_LINK[%d] = 0x%X", + l, pcie_not_f_link_attr[l]); + + // validate attribute value + switch (pcie_not_f_link_attr[l]) + { + case 0: + o_pcie_not_f_link[l] = false; + break; + case 1: + o_pcie_not_f_link[l] = true; + break; + default: + FAPI_ERR("proc_fab_smp_get_pcie_dsmp_mux_attrs: Invalid PCIe/DSMP mux attribute value 0x%02X", + pcie_not_f_link_attr[l]); + const uint8_t& ATTR_DATA = pcie_not_f_link_attr[l]; + FAPI_SET_HWP_ERROR(rc, + RC_PROC_FAB_SMP_PCIE_NOT_F_LINK_ATTR_ERR); + break; + } + if (!rc.ok()) + { + break; + } + } + } while(0); + + // mark function exit + FAPI_DBG("proc_fab_smp_get_pcie_dsmp_mux_attrs: End"); + return rc; +} + + + +} // extern "C" |

