summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/tod_init/proc_tod_utils/proc_tod_utils.C
diff options
context:
space:
mode:
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.C188
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"
OpenPOWER on IntegriCloud