diff options
Diffstat (limited to 'src/usr/hwpf/hwp/tod_init/proc_tod_utils/proc_tod_utils.C')
-rw-r--r-- | src/usr/hwpf/hwp/tod_init/proc_tod_utils/proc_tod_utils.C | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/src/usr/hwpf/hwp/tod_init/proc_tod_utils/proc_tod_utils.C b/src/usr/hwpf/hwp/tod_init/proc_tod_utils/proc_tod_utils.C new file mode 100644 index 000000000..271e71e73 --- /dev/null +++ b/src/usr/hwpf/hwp/tod_init/proc_tod_utils/proc_tod_utils.C @@ -0,0 +1,188 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hwpf/hwp/tod_init/proc_tod_utils/proc_tod_utils.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2013 */ +/* */ +/* 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_tod_utils.C,v 1.4 2012/10/23 19:17:00 jklazyns Exp $ +//------------------------------------------------------------------------------ +// *! (C) Copyright International Business Machines Corp. 2012 +// *! All Rights Reserved -- Property of IBM +// *! *** IBM Confidential *** +// *! +// *! TITLE : proc_tod_utils.C +// *! +// *! DESCRIPTION : TOD helper functions; not called directly, but used by other +// *! FAPI procedures +// *! +// *! OWNER NAME : Nick Klazynski Email: jklazyns@us.ibm.com +// *! BACKUP NAME : Email: +// *! +// *! ADDITIONAL COMMENTS : +// *! +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +// Includes +//------------------------------------------------------------------------------ +#include "proc_tod_utils.H" +#include "p8_scom_addresses.H" + +//------------------------------------------------------------------------------ +// Function definitions +//------------------------------------------------------------------------------ + +extern "C" +{ + +//------------------------------------------------------------------------------ +// function: proc_tod_utils_get_tfmr_reg +// +// parameters: i_target => chip target +// o_tfmr_val => TFMR value read +// returns: FAPI_RC_SUCCESS if TFMR read is successful +// else FAPI or ECMD error is sent through +// +//------------------------------------------------------------------------------ +fapi::ReturnCode proc_tod_utils_get_tfmr_reg( + const fapi::Target& i_target, + ecmdDataBufferBase& o_tfmr_val) +{ + fapi::ReturnCode rc; + ecmdDataBufferBase data(64); + uint32_t rc_ecmd = 0; + + FAPI_INF("proc_tod_utils_get_tfmr_reg: Start"); + + do + { + //FAPI_DBG("proc_tod_utils_get_tfmr_reg: Setting SPR_MODE to LPAR0/T0"); + rc_ecmd |= data.flushTo0(); + rc_ecmd |= data.setBit(SPR_MODE_REG_MODE_SPRC_WR_EN); + rc_ecmd |= data.setBit(SPR_MODE_REG_MODE_SPRC0_SEL); + rc_ecmd |= data.setBit(SPR_MODE_REG_MODE_SPRC_T0_SEL); + if (rc_ecmd) + { + FAPI_ERR("proc_tod_utils_get_tfmr_reg: Error 0x%08X in ecmdDataBuffer setup for EX_PERV_SPR_MODE_10013281 SCOM.", rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + rc = fapiPutScom(i_target, EX_PERV_SPR_MODE_10013281, data); + if (!rc.ok()) + { + FAPI_ERR("proc_tod_utils_get_tfmr_reg: fapiPutScom error for EX_PERV_SPR_MODE_10013281 SCOM."); + break; + } + //FAPI_DBG("proc_tod_utils_get_tfmr_reg: Setting SPRC to T0's TMFR"); + rc_ecmd |= data.flushTo0(); + rc_ecmd |= data.insertFromRight(SPRC_REG_SEL_TFMR_T0,SPRC_REG_SEL,SPRC_REG_SEL_LEN); + if (rc_ecmd) + { + FAPI_ERR("proc_tod_utils_get_tfmr_reg: Error 0x%08X in ecmdDataBuffer setup for EX_PERV_L0_SCOM_SPRC_10013280 SCOM.", rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + rc = fapiPutScom(i_target, EX_PERV_L0_SCOM_SPRC_10013280, data); + if (!rc.ok()) + { + FAPI_ERR("proc_tod_utils_get_tfmr_reg: fapiPutScom error for EX_PERV_L0_SCOM_SPRC_10013280 SCOM."); + break; + } + + //FAPI_DBG("proc_tod_utils_get_tfmr_reg: Reading SPRD for T0's TMFR"); + rc = fapiGetScom(i_target, EX_PERV_SPRD_L0_100132A3, o_tfmr_val); + if (!rc.ok()) + { + FAPI_ERR("proc_tod_utils_get_tfmr_reg: fapiGetScom error for EX_PERV_SPRD_L0_100132A3 SCOM."); + break; + } + + } while(0); + + FAPI_INF("proc_tod_utils_get_tfmr_reg: End"); + return rc; +} + +//------------------------------------------------------------------------------ +// function: proc_tod_utils_set_tfmr_reg +// +// parameters: i_target => chip target +// i_tfmr_val => TFMR value to write +// returns: FAPI_RC_SUCCESS if TFMR write is successful +// else FAPI or ECMD error is sent through +// +//------------------------------------------------------------------------------ +fapi::ReturnCode proc_tod_utils_set_tfmr_reg( + const fapi::Target& i_target, + ecmdDataBufferBase& i_tfmr_val) +{ + fapi::ReturnCode rc; + ecmdDataBufferBase data(64); + uint32_t rc_ecmd = 0; + + FAPI_INF("proc_tod_utils_set_tfmr_reg: Start"); + + do + { + //FAPI_DBG("proc_tod_utils_set_tfmr_reg: Setting SPR_MODE to LPAR0/T0"); + rc_ecmd |= data.flushTo0(); + rc_ecmd |= data.setBit(SPR_MODE_REG_MODE_SPRC_WR_EN); + rc_ecmd |= data.setBit(SPR_MODE_REG_MODE_SPRC0_SEL); + rc_ecmd |= data.setBit(SPR_MODE_REG_MODE_SPRC_T0_SEL); + if (rc_ecmd) + { + FAPI_ERR("proc_tod_utils_set_tfmr_reg: Error 0x%08X in ecmdDataBuffer setup for EX_PERV_SPR_MODE_10013281 SCOM.", rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + rc = fapiPutScom(i_target, EX_PERV_SPR_MODE_10013281, data); + if (!rc.ok()) + { + FAPI_ERR("proc_tod_utils_set_tfmr_reg: fapiPutScom error for EX_PERV_SPR_MODE_10013281 SCOM."); + break; + } + //FAPI_DBG("proc_tod_utils_set_tfmr_reg: Setting SPRC to T0's TMFR"); + rc_ecmd |= data.flushTo0(); + rc_ecmd |= data.insertFromRight(SPRC_REG_SEL_TFMR_T0,SPRC_REG_SEL,SPRC_REG_SEL_LEN); + if (rc_ecmd) + { + FAPI_ERR("proc_tod_utils_set_tfmr_reg: Error 0x%08X in ecmdDataBuffer setup for EX_PERV_L0_SCOM_SPRC_10013280 SCOM.", rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + rc = fapiPutScom(i_target, EX_PERV_L0_SCOM_SPRC_10013280, data); + if (!rc.ok()) + { + FAPI_ERR("proc_tod_utils_set_tfmr_reg: fapiPutScom error for EX_PERV_L0_SCOM_SPRC_10013280 SCOM."); + break; + } + //FAPI_DBG("proc_tod_utils_set_tfmr_reg: Writing SPRD to set T0's TMFR"); + rc = fapiPutScom(i_target, EX_PERV_SPRD_L0_100132A3, i_tfmr_val); + if (!rc.ok()) + { + FAPI_ERR("proc_tod_utils_set_tfmr_reg: fapiGetScom error for EX_PERV_SPRD_L0_100132A3 SCOM."); + break; + } + } while(0); + + FAPI_INF("proc_tod_utils_set_tfmr_reg: End"); + return rc; +} + +} // extern "C" |