summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/dmi_training
diff options
context:
space:
mode:
authorMike Jones <mjjones@us.ibm.com>2012-04-25 16:14:35 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-04-26 09:16:13 -0500
commit9127ffae0b4f3a655c2d0da74b9f5e11270d1326 (patch)
tree004e3a273b497c744351c968084f7f89a166b6a2 /src/usr/hwpf/hwp/dmi_training
parent4157b5631a1bbfcc7f9f95480b54e9ade7abce7d (diff)
downloadtalos-hostboot-9127ffae0b4f3a655c2d0da74b9f5e11270d1326.tar.gz
talos-hostboot-9127ffae0b4f3a655c2d0da74b9f5e11270d1326.zip
HWP: proc_cen_framelock update
04/11/2012 Joe McGill requested that we pick up an update to this HWP. Target changed from proc_chip to MCS to avoid address translation in HWP. And some other minor changes. Only dmi_training.C is Hostboot code that needs to be reviewed. The other HWP files were already reviewed in the hwp_review_centaur project. Change-Id: I1a4f0583693b405a4e7b1bca42107173b472b5fa Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/941 Tested-by: Jenkins Server Reviewed-by: Van H. Lee <vanlee@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/dmi_training')
-rw-r--r--src/usr/hwpf/hwp/dmi_training/dmi_training.C99
-rw-r--r--src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.C449
-rw-r--r--src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.H56
-rw-r--r--src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock_errors.xml8
4 files changed, 213 insertions, 399 deletions
diff --git a/src/usr/hwpf/hwp/dmi_training/dmi_training.C b/src/usr/hwpf/hwp/dmi_training/dmi_training.C
index 1ab3e494c..305a17325 100644
--- a/src/usr/hwpf/hwp/dmi_training/dmi_training.C
+++ b/src/usr/hwpf/hwp/dmi_training/dmi_training.C
@@ -294,55 +294,35 @@ void call_host_attnlisten_cen( void *io_pArgs )
void call_proc_cen_framelock( void *io_pArgs )
{
- fapi::ReturnCode l_fapirc;
+ errlHndl_t l_errl = NULL;
proc_cen_framelock_args l_args;
- TARGETING::TargetService& l_targetService = targetService();
- uint8_t l_cpuNum = 0;
// Use PredicateIsFunctional to filter only functional chips
TARGETING::PredicateIsFunctional l_isFunctional;
-
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_cen_framework entry" );
- TARGETING::PredicateCTM l_procChipFilter( CLASS_CHIP, TYPE_PROC );
- TARGETING::PredicatePostfixExpr l_functionalAndProcChipFilter;
- l_functionalAndProcChipFilter.push(&l_procChipFilter).push(&l_isFunctional).And();
- TARGETING::TargetRangeFilter l_cpuFilter(
- l_targetService.begin(),
- l_targetService.end(),
- &l_functionalAndProcChipFilter );
-
- for ( l_cpuNum=0; l_cpuFilter; ++l_cpuFilter, l_cpuNum++ )
- {
- // make a local copy of the CPU target
- const TARGETING::Target* l_cpu_target = *l_cpuFilter;
-
// get the mcs chiplets associated with this cpu
TARGETING::PredicateCTM l_mcsChipFilter(CLASS_UNIT, TYPE_MCS);
TARGETING::PredicatePostfixExpr l_functionalAndMcsChipFilter;
l_functionalAndMcsChipFilter.push(&l_mcsChipFilter).push(&l_isFunctional).And();
- TARGETING::TargetHandleList l_mcsTargetList;
- l_targetService.getAssociated(
- l_mcsTargetList,
- l_cpu_target,
- TARGETING::TargetService::CHILD,
- TARGETING::TargetService::IMMEDIATE,
- &l_functionalAndMcsChipFilter );
- for ( uint8_t j=0; j < l_mcsTargetList.size(); j++ )
+ TARGETING::TargetRangeFilter l_mcsFilter(
+ TARGETING::targetService().begin(),
+ TARGETING::targetService().end(),
+ &l_functionalAndMcsChipFilter );
+
+ for ( ; l_mcsFilter ; ++l_mcsFilter )
{
// make a local copy of the MCS target
- const TARGETING::Target* l_mcs_target = l_mcsTargetList[j];
-
- uint8_t l_mcsNum = l_mcs_target->getAttr<ATTR_CHIP_UNIT>();
+ const TARGETING::Target* l_mcs_target = *l_mcsFilter ;
// find all the Centaurs that are associated with this MCS
TARGETING::PredicateCTM l_membufChipFilter(CLASS_CHIP, TYPE_MEMBUF);
TARGETING::PredicatePostfixExpr l_functionalAndMembufChipFilter;
l_functionalAndMembufChipFilter.push(&l_membufChipFilter).push(&l_isFunctional).And();
TARGETING::TargetHandleList l_memTargetList;
- l_targetService.getAssociated(l_memTargetList,
+ TARGETING::targetService().getAssociated(l_memTargetList,
l_mcs_target,
TARGETING::TargetService::CHILD_BY_AFFINITY,
TARGETING::TargetService::ALL,
@@ -353,21 +333,17 @@ void call_proc_cen_framelock( void *io_pArgs )
// make a local copy of the MEMBUF target
const TARGETING::Target* l_mem_target = l_memTargetList[k];
-
// fill out the args struct.
- l_args.mcs_pu = l_mcsNum;
- l_args.in_error_state = false;
- l_args.channel_init_timeout = CHANNEL_INIT_TIMEOUT_NO_TIMEOUT;
- l_args.frtl_auto_not_manual = true;
- l_args.frtl_manual_pu = 0;
- l_args.frtl_manual_mem = 0;
-
- // Create compatable FAPI Targets from the vanilla targets,
- // and invoke the HWP.
- fapi::Target l_fapiCpuTarget(
- TARGET_TYPE_PROC_CHIP,
+ l_args.in_error_state = false;
+ l_args.channel_init_timeout = CHANNEL_INIT_TIMEOUT_NO_TIMEOUT;
+ l_args.frtl_auto_not_manual = true;
+ l_args.frtl_manual_pu = 0;
+ l_args.frtl_manual_mem = 0;
+
+ fapi::Target l_fapiMcsTarget(
+ TARGET_TYPE_MCS_CHIPLET,
reinterpret_cast<void *>
- ( const_cast<TARGETING::Target*>(l_cpu_target) )
+ ( const_cast<TARGETING::Target*>(l_mcs_target) )
);
fapi::Target l_fapiMemTarget(
TARGET_TYPE_MEMBUF_CHIP,
@@ -375,49 +351,30 @@ void call_proc_cen_framelock( void *io_pArgs )
(const_cast<TARGETING::Target*>(l_mem_target))
);
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "===== Call proc_cen_framelock HWP( cpu 0x%x, mcs 0x%x, mem 0x%x ) : ",
- l_cpuNum,
- l_mcsNum,
- l_memNum );
EntityPath l_path;
- l_path = l_cpu_target->getAttr<ATTR_PHYS_PATH>();
- l_path.dump();
l_path = l_mcs_target->getAttr<ATTR_PHYS_PATH>();
l_path.dump();
l_path = l_mem_target->getAttr<ATTR_PHYS_PATH>();
l_path.dump();
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "===== " );
-
- // finally!
- l_fapirc = proc_cen_framelock(
- l_fapiCpuTarget,
- l_fapiMemTarget,
- l_args );
- if ( l_fapirc == fapi::FAPI_RC_SUCCESS )
+ FAPI_INVOKE_HWP( l_errl,
+ proc_cen_framelock,
+ l_fapiMcsTarget,
+ l_fapiMemTarget,
+ l_args );
+ if ( l_errl )
{
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : proc_cen_framelock HWP( cpu 0x%x, mcs 0x%x, mem 0x%x ) ",
- l_cpuNum,
- l_mcsNum,
- l_memNum );
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR : proc_cen_framelock" );
+ errlCommit( l_errl, HWPF_COMP_ID );
}
else
{
- /**
- * @todo fapi error - just print out for now...
- */
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR %d : proc_cen_framelock HWP( cpu 0x%x, mcs 0x%x, mem 0x%x )",
- static_cast<uint32_t>(l_fapirc),
- l_cpuNum,
- l_mcsNum,
- l_memNum );
+ "SUCCESS : proc_cen_framelock " );
}
} // end mem
} // end mcs
- } // end cpu
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_cen_framework exit" );
diff --git a/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.C b/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.C
index dd4cd80bf..60bd52146 100644
--- a/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.C
+++ b/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.C
@@ -1,7 +1,7 @@
// IBM_PROLOG_BEGIN_TAG
// This is an automatically generated prolog.
//
-// $Source: src/usr/HWPs/dmi_training/proc_cen_framelock.C $
+// $Source: src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.C $
//
// IBM CONFIDENTIAL
//
@@ -20,7 +20,7 @@
// Origin: 30
//
// IBM_PROLOG_END
-// $Id: proc_cen_framelock.C,v 1.2 2012/01/06 23:44:48 jmcgill Exp $
+// $Id: proc_cen_framelock.C,v 1.5 2012/04/11 06:23:54 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_cen_framelock.C,v $
//------------------------------------------------------------------------------
// *|
@@ -28,7 +28,7 @@
// *! All Rights Reserved -- Property of IBM
// *! *** IBM Confidential ***
// *|
-// *! TITLE : proc_cen_framelock.H
+// *! TITLE : proc_cen_framelock.C
// *! DESCRIPTION : Run framelock and FRTL (FAPI)
// *!
// *! OWNER NAME : Irving Baysah Email: baysah@us.ibm.com
@@ -49,67 +49,6 @@ extern "C"
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
-// function: utility subroutine to create proper SCOM address for P8 MCI
-// resource given base SCOM address (associated with MCS0) and target
-// MCS chiplet offset
-// parameters: i_base_addr => base SCOM address (associated with MCS0) for
-// desired MCI resource
-// i_mcs => MCS target chiplet offset to operate on
-// o_xlate_addr => translated SCOM address for desired MCI resource
-// returns: FAPI_RC_SUCCESS if address translation was successful,
-// else RC_PROC_CEN_FRAMELOCK_INTERNAL_ERR if MCS target chiplet offset
-// is out of range or base
-// address is unsupported
-//------------------------------------------------------------------------------
-fapi::ReturnCode proc_cen_framelock_translate_mci_scom_addr(
- const uint32_t& i_base_addr,
- const uint8_t& i_mcs,
- uint32_t& o_xlate_addr)
-{
- fapi::ReturnCode rc;
-
- // validate that MCS offset is in range
- if (i_mcs > PROC_CEN_FRAMELOCK_MAX_MCS_OFFSET)
- {
- FAPI_ERR(
- "proc_cen_framelock_translate_mci_scom_addr: Out of range value %d presented for MCS offset argument value!",
- i_mcs);
- const uint8_t & ERR_DATA = i_mcs;
- FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_INTERNAL_ERR);
- }
- // check that base address matches one of the supported addresses
- else if ((i_base_addr != MCI_FIR_0x02011840) &&
- (i_base_addr != MCI_CFG_0x0201184A) &&
- (i_base_addr != MCI_STAT_0x0201184B))
- {
- FAPI_ERR(
- "proc_cen_framelock_translate_mci_scom_addr: Unsupported base SCOM address value 0x%x presented for translation!",
- i_base_addr);
- const uint32_t & ERR_DATA = i_base_addr;
- FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_INTERNAL_ERR);
- }
- else
- {
- // perform SCOM address translation
- o_xlate_addr = i_base_addr;
-
- // add base offset for MC
- o_xlate_addr += ((i_mcs / 2) * 0x100);
- if ((i_mcs / 2) > 1)
- {
- o_xlate_addr += 0x200;
- }
-
- // add offset for odd MCS numbers
- if (i_mcs % 2)
- {
- o_xlate_addr += 0x80;
- }
- }
- return rc;
-}
-
-//------------------------------------------------------------------------------
// function: utility subroutine to clear the Centaur MBI Status Register
// parameters: i_mem_target => Centaur target
// returns: FAPI_RC_SUCCESS if operation was successful, else error
@@ -119,16 +58,16 @@ fapi::ReturnCode proc_cen_framelock_clear_cen_mbi_stat_reg(
{
fapi::ReturnCode rc;
ecmdDataBufferBase zero_data(64);
-
+
FAPI_DBG("proc_cen_framelock_clear_cen_mbi_stat_reg: Start");
-
+
rc = fapiPutScom(i_mem_target, MBI_STAT_0x0201080B, zero_data);
-
+
if (rc)
{
- FAPI_ERR("proc_cen_framelock_clear_cen_mbi_stat_reg: fapiPutScom error");
+ FAPI_ERR("proc_cen_framelock_clear_cen_mbi_stat_reg: fapiPutScom error (MBI_STAT_0x0201080B)");
}
-
+
return rc;
}
@@ -143,16 +82,16 @@ fapi::ReturnCode proc_cen_framelock_get_cen_mbi_stat_reg(
ecmdDataBufferBase& o_data)
{
fapi::ReturnCode rc;
-
+
FAPI_DBG("proc_cen_framelock_get_cen_mbi_stat_reg: Start");
-
+
rc = fapiGetScom(i_mem_target, MBI_STAT_0x0201080B, o_data);
-
+
if (rc)
{
- FAPI_ERR("proc_cen_framelock_get_cen_mbi_stat_reg: fapiGetScom error");
+ FAPI_ERR("proc_cen_framelock_get_cen_mbi_stat_reg: fapiGetScom error (MBI_STAT_0x0201080B)");
}
-
+
return rc;
}
@@ -166,16 +105,16 @@ fapi::ReturnCode proc_cen_framelock_clear_cen_mbi_fir_reg(
{
fapi::ReturnCode rc;
ecmdDataBufferBase zero_data(64);
-
+
FAPI_DBG("proc_cen_framelock_clear_cen_mbi_fir_reg: Start");
-
+
rc = fapiPutScom(i_mem_target, MBI_FIR_0x02010800, zero_data);
-
+
if (rc)
{
- FAPI_ERR("proc_cen_framelock_clear_cen_mbi_fir_reg: fapiPutScom error");
+ FAPI_ERR("proc_cen_framelock_clear_cen_mbi_fir_reg: fapiPutScom error (MBI_FIR_0x02010800)");
}
-
+
return rc;
}
@@ -190,22 +129,21 @@ fapi::ReturnCode proc_cen_framelock_get_cen_mbi_fir_reg(
ecmdDataBufferBase& o_data)
{
fapi::ReturnCode rc;
-
+
FAPI_DBG("proc_cen_framelock_get_cen_mbi_fir_reg: Start");
-
+
rc = fapiGetScom(i_mem_target, MBI_FIR_0x02010800, o_data);
-
if (rc)
{
- FAPI_ERR("proc_cen_framelock_get_cen_mbi_fir_reg: fapiGetScom error");
+ FAPI_ERR("proc_cen_framelock_get_cen_mbi_fir_reg: fapiGetScom error (MBI_FIR_0x02010800)");
}
-
+
return rc;
}
//------------------------------------------------------------------------------
// function: utility subroutine to clear the P8 MCI Status Register
-// parameters: i_pu_target => P8 target
+// parameters: i_pu_target => P8 MCS chip unit target
// i_args => proc_cen_framelock HWP argumemt structure
// returns: FAPI_RC_SUCCESS if operation was successful, else error
//------------------------------------------------------------------------------
@@ -215,32 +153,22 @@ fapi::ReturnCode proc_cen_framelock_clear_pu_mci_stat_reg(
{
fapi::ReturnCode rc;
ecmdDataBufferBase zero_data(64);
- uint32_t mci_xlate_scom_addr = 0;
-
+
FAPI_DBG("proc_cen_framelock_clear_pu_mci_stat_reg: Start");
- rc = proc_cen_framelock_translate_mci_scom_addr(MCI_STAT_0x0201184B,
- i_args.mcs_pu,
- mci_xlate_scom_addr);
+
+ rc = fapiPutScom(i_pu_target, MCI_STAT_0x0201184B, zero_data);
+
if (rc)
{
- FAPI_ERR("proc_cen_framelock_clear_pu_mci_stat_reg: xlate error");
+ FAPI_ERR("proc_cen_framelock_clear_pu_mci_stat_reg: fapiPutScom error (MCI_STAT_0x0201184B)");
}
- else
- {
- rc = fapiPutScom(i_pu_target, mci_xlate_scom_addr, zero_data);
-
- if (rc)
- {
- FAPI_ERR("proc_cen_framelock_clear_pu_mci_stat_reg: fapiPutScom error");
- }
- }
-
- return rc;
+
+ return rc;
}
//------------------------------------------------------------------------------
// function: utility subroutine to get the P8 MCI Status Register
-// parameters: i_pu_target => P8 target
+// parameters: i_pu_target => P8 MCS chip unit target
// i_args => proc_cen_framelock HWP argumemt structure
// o_data => Output data
// returns: FAPI_RC_SUCCESS if operation was successful, else error
@@ -251,32 +179,21 @@ fapi::ReturnCode proc_cen_framelock_get_pu_mci_stat_reg(
ecmdDataBufferBase& o_data)
{
fapi::ReturnCode rc;
- uint32_t mci_xlate_scom_addr = 0;
-
+
FAPI_DBG("proc_cen_framelock_get_pu_mci_stat_reg: Start");
- rc = proc_cen_framelock_translate_mci_scom_addr(MCI_STAT_0x0201184B,
- i_args.mcs_pu,
- mci_xlate_scom_addr);
+
+ rc = fapiGetScom(i_pu_target, MCI_STAT_0x0201184B, o_data);
+
if (rc)
{
- FAPI_ERR("proc_cen_framelock_get_pu_mci_stat_reg: xlate error");
+ FAPI_ERR("proc_cen_framelock_get_pu_mci_stat_reg: fapiGetScom error (MCI_STAT_0x0201184B)");
}
- else
- {
- rc = fapiGetScom(i_pu_target, mci_xlate_scom_addr, o_data);
-
- if (rc)
- {
- FAPI_ERR("proc_cen_framelock_get_pu_mci_stat_reg: fapiGetScom error");
- }
- }
-
- return rc;
+ return rc;
}
//------------------------------------------------------------------------------
// function: utility subroutine to clear the P8 MCI FIR Register
-// parameters: i_pu_target => P8 target
+// parameters: i_pu_target => P8 MCS chip unit target
// i_args => proc_cen_framelock HWP argumemt structure
// returns: FAPI_RC_SUCCESS if operation was successful, else error
//------------------------------------------------------------------------------
@@ -286,33 +203,22 @@ fapi::ReturnCode proc_cen_framelock_clear_pu_mci_fir_reg(
{
fapi::ReturnCode rc;
ecmdDataBufferBase zero_data(64);
- uint32_t mci_xlate_scom_addr = 0;
-
+
FAPI_DBG("proc_cen_framelock_clear_pu_mci_fir_reg: Start");
- rc = proc_cen_framelock_translate_mci_scom_addr(MCI_FIR_0x02011840,
- i_args.mcs_pu,
- mci_xlate_scom_addr);
+
+ rc = fapiPutScom(i_pu_target, MCI_FIR_0x02011840, zero_data);
if (rc)
{
- FAPI_ERR("proc_cen_framelock_clear_pu_mci_fir_reg: xlate error");
+ FAPI_ERR("proc_cen_framelock_clear_pu_mci_fir_reg: fapiPutScom error (MCI_FIR_0x02011840)");
}
- else
- {
- rc = fapiPutScom(i_pu_target, mci_xlate_scom_addr, zero_data);
-
- if (rc)
- {
- FAPI_ERR("proc_cen_framelock_clear_pu_mci_fir_reg: fapiPutScom error");
- }
- }
-
+
return rc;
}
//------------------------------------------------------------------------------
// function: utility subroutine to get the P8 MCI FIR Register
-// parameters: i_pu_target => P8 target
+// parameters: i_pu_target => P8 MCS chip unit target
// i_args => proc_cen_framelock HWP argumemt structure
// o_data => output data
// returns: FAPI_RC_SUCCESS if operation was successful, else error
@@ -323,33 +229,23 @@ fapi::ReturnCode proc_cen_framelock_get_pu_mci_fir_reg(
ecmdDataBufferBase& o_data)
{
fapi::ReturnCode rc;
- uint32_t mci_xlate_scom_addr = 0;
-
+
FAPI_DBG("proc_cen_framelock_get_pu_mci_fir_reg: Start");
- rc = proc_cen_framelock_translate_mci_scom_addr(MCI_FIR_0x02011840,
- i_args.mcs_pu,
- mci_xlate_scom_addr);
+
+ rc = fapiGetScom(i_pu_target, MCI_FIR_0x02011840, o_data);
+
if (rc)
{
- FAPI_ERR("proc_cen_framelock_get_pu_mci_fir_reg: xlate error");
- }
- else
- {
- rc = fapiGetScom(i_pu_target, mci_xlate_scom_addr, o_data);
-
- if (rc)
- {
- FAPI_ERR("proc_cen_framelock_get_pu_mci_fir_reg: fapiGetScom error");
- }
+ FAPI_ERR("proc_cen_framelock_get_pu_mci_fir_reg: fapiGetScom error (MCI_FIR_0x02011840)");
}
-
- return rc;
+
+ return rc;
}
//------------------------------------------------------------------------------
// function: utility subroutine to set the Centaur MBI Config Register
// parameters: i_mem_target => Centaur target
-// i_data => Input data
+// i_data => Input data
// i_mask => Input mask
// returns: FAPI_RC_SUCCESS if operation was successful, else error
//------------------------------------------------------------------------------
@@ -359,22 +255,22 @@ fapi::ReturnCode proc_cen_framelock_set_cen_mbi_cfg_reg(
ecmdDataBufferBase& i_mask)
{
fapi::ReturnCode rc;
-
+
FAPI_DBG("proc_cen_framelock_set_cen_mbi_cfg_reg: Start");
rc = fapiPutScomUnderMask(i_mem_target, MBI_CFG_0x0201080A, i_data, i_mask);
-
+
if (rc)
{
- FAPI_ERR("proc_cen_framelock_set_cen_mbi_cfg_reg: fapiPutScomUnderMask error");
+ FAPI_ERR("proc_cen_framelock_set_cen_mbi_cfg_reg: fapiPutScomUnderMask error (MBI_CFG_0x0201080A)");
}
-
- return rc;
+
+ return rc;
}
//------------------------------------------------------------------------------
// function: utility subroutine to set the P8 MCI Config Register
-// parameters: i_pu_target => P8 target
-// i_data => Input data
+// parameters: i_pu_target => P8 MCS chip unit target
+// i_data => Input data
// i_mask => Input mask
// i_args => proc_cen_framelock HWP argumemt structure
// returns: FAPI_RC_SUCCESS if operation was successful, else error
@@ -386,35 +282,23 @@ fapi::ReturnCode proc_cen_framelock_set_pu_mci_cfg_reg(
const proc_cen_framelock_args& i_args)
{
fapi::ReturnCode rc;
- uint32_t mci_xlate_scom_addr = 0;
-
+
FAPI_DBG("proc_cen_framelock_set_pu_mci_cfg_reg: Start");
- rc = proc_cen_framelock_translate_mci_scom_addr(MCI_CFG_0x0201184A,
- i_args.mcs_pu,
- mci_xlate_scom_addr);
+
+ rc = fapiPutScomUnderMask(i_pu_target, MCI_CFG_0x0201184A, i_data, i_mask);
if (rc)
{
- FAPI_ERR("proc_cen_framelock_set_pu_mci_cfg_reg: xlate error");
- }
- else
- {
- rc = fapiPutScomUnderMask(i_pu_target, mci_xlate_scom_addr, i_data,
- i_mask);
-
- if (rc)
- {
- FAPI_ERR("proc_cen_framelock_set_pu_mci_cfg_reg: fapiPutScomUnderMask error");
- }
+ FAPI_ERR("proc_cen_framelock_set_pu_mci_cfg_reg: fapiPutScomUnderMask error (MCI_CFG_0x0201184A)");
}
-
+
return rc;
}
//------------------------------------------------------------------------------
-// function: utility subroutine to claer the P8 and Centaur Status/FIR Registers
-// parameters: i_pu_target => P8 target
-// i_mem_target => Centaur target
+// function: utility subroutine to clear the P8 and Centaur Status/FIR Registers
+// parameters: i_pu_target => P8 MCS chip unit target
+// i_mem_target => Centaur target
// i_args => proc_cen_framelock HWP argumemt structure
// returns: FAPI_RC_SUCCESS if operation was successful, else error
//------------------------------------------------------------------------------
@@ -424,7 +308,7 @@ fapi::ReturnCode proc_cen_framelock_clear_stat_fir_regs(
const proc_cen_framelock_args& i_args)
{
fapi::ReturnCode rc;
-
+
FAPI_DBG("proc_cen_framelock_clear_stat_fir_regs: Start");
do
@@ -440,16 +324,16 @@ fapi::ReturnCode proc_cen_framelock_clear_stat_fir_regs(
// Clear Centaur MBI FIR Register
rc = proc_cen_framelock_clear_cen_mbi_fir_reg(i_mem_target);
-
+
if (rc)
{
FAPI_ERR("proc_cen_framelock_clear_stat_fir_regs: Error from proc_cen_framelock_clear_cen_mbi_fir_reg");
break;
}
-
+
// Clear P8 MCI Status Register
rc = proc_cen_framelock_clear_pu_mci_stat_reg(i_pu_target, i_args);
-
+
if (rc)
{
FAPI_ERR("proc_cen_framelock_clear_stat_fir_regs: Error from proc_cen_framelock_clear_pu_mci_stat_reg");
@@ -458,30 +342,28 @@ fapi::ReturnCode proc_cen_framelock_clear_stat_fir_regs(
// Clear P8 MCI FIR Register
rc = proc_cen_framelock_clear_pu_mci_fir_reg(i_pu_target, i_args);
-
+
if (rc)
{
FAPI_ERR("proc_cen_framelock_clear_stat_fir_regs: Error from proc_cen_framelock_clear_pu_mci_fir_reg");
break;
}
-
+
} while(0);
-
- return rc;
+
+ return rc;
}
//------------------------------------------------------------------------------
// function: utility subroutine to initiate P8/Centaur framelock operation and
// poll for completion
-// parameters: i_pu_target => P8 chip target
+// parameters: i_pu_target => P8 MCS chip unit target
// i_mem_target => Centaur chip target
// i_args => proc_cen_framelock HWP argumemt structure
// returns: FAPI_RC_SUCCESS if framelock sequence completes successfully,
-// RC_PROC_CEN_FRAMELOCK_INTERNAL_ERR
-// if internal program logic error is encountered,
// RC_PROC_CEN_FRAMELOCK_FL_CEN_FIR_ERR
// RC_PROC_CEN_FRAMELOCK_FL_P8_FIR_ERR
-// if MCI/MBI FIR is set during framelock operation,
+// if MCI/MBI FIR is set during framelock operation,
// RC_PROC_CEN_FRAMELOCK_FL_CEN_FAIL_ERR
// RC_PROC_CEN_FRAMELOCK_FL_P8_FAIL_ERR
// if MCI/MBI indicates framelock operation failure
@@ -532,10 +414,10 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
{
FAPI_ERR("proc_cen_framelock_run_framelock: Error 0x%x setting up data buffers to force framelock",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_cen_mbi_cfg_reg(i_mem_target, data,
mask);
if (rc)
@@ -563,10 +445,10 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
{
FAPI_ERR("proc_cen_framelock_run_framelock: Error 0x%x setting up data buffers to set init timeout",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_pu_mci_cfg_reg(i_pu_target, data, mask,
i_args);
if (rc)
@@ -584,12 +466,12 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
{
FAPI_ERR("proc_cen_framelock_run_framelock: Error 0x%x setting up data buffers to initiate framelock",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_pu_mci_cfg_reg(i_pu_target, data, mask,
- i_args);
+ i_args);
if (rc)
{
FAPI_ERR("proc_cen_framelock_run_framelock: Error writing P8 MCI Configuration register to initiate framelock");
@@ -599,27 +481,27 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
// poll until framelock operation is finished, a timeout is deemed to
// have occurred, or an error is detected
uint8_t polls = 0;
-
+
while (1)
{
// Read Centaur MBI Status Register
rc = proc_cen_framelock_get_cen_mbi_stat_reg(i_mem_target,
- mbi_stat);
+ mbi_stat);
if (rc)
{
FAPI_ERR("proc_cen_framelock_run_framelock: Error reading Centaur MBI Status Register");
break;
}
-
+
// Read Centaur MBI FIR Register
rc = proc_cen_framelock_get_cen_mbi_fir_reg(i_mem_target, mbi_fir);
-
+
if (rc)
{
FAPI_ERR("proc_cen_framelock_run_framelock: Error reading Centaur MBI FIR Register");
break;
}
-
+
// Read P8 MCI Status Register
rc = proc_cen_framelock_get_pu_mci_stat_reg(i_pu_target, i_args,
mci_stat);
@@ -628,7 +510,7 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
FAPI_ERR("proc_cen_framelock_run_framelock: Error reading P8 MCI Status Register");
break;
}
-
+
// Read P8 MCI FIR Register
rc = proc_cen_framelock_get_pu_mci_fir_reg(i_pu_target, i_args,
mci_fir);
@@ -637,7 +519,7 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
FAPI_ERR("proc_cen_framelock_run_framelock: Error reading P8 MCI FIR Register");
break;
}
-
+
// Fail if any Centaur FIR bits are set
if (mbi_fir.getDoubleWord(0))
{
@@ -647,20 +529,18 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_FL_CEN_FIR_ERR);
break;
}
-
+
// Fail if any P8 FIR bits are set
if (mci_fir.getDoubleWord(0))
{
- // TODO: seeing FIR[25] set on e8052+cen050 model due to flush
- // state parity error fixed in future P8 models, skip check for
- // now
- FAPI_ERR("TODO. IGNORING. proc_cen_framelock_run_framelock: Framelock fail. P8 MCI FIR bit on (0x%llx)",
+
+ FAPI_ERR("proc_cen_framelock_run_framelock: Framelock fail. P8 MCI FIR bit on (0x%llx)",
mci_fir.getDoubleWord(0));
- //ecmdDataBufferBase & FIR_REG = mci_fir;
- //FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_FL_P8_FIR_ERR);
- //break;
+ ecmdDataBufferBase & FIR_REG = mci_fir;
+ FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_FL_P8_FIR_ERR);
+ break;
}
-
+
// Fail if Centaur FAIL bit set
if (mbi_stat.isBitSet(MBI_STAT_FRAMELOCK_FAIL_BIT))
{
@@ -668,7 +548,7 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_FL_CEN_FAIL_ERR);
break;
}
-
+
// Fail if P8 FAIL bit set
if (mci_stat.isBitSet(MCI_STAT_FRAMELOCK_FAIL_BIT))
{
@@ -676,7 +556,7 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_FL_P8_FAIL_ERR);
break;
}
-
+
// Success if Centaur and P8 PASS bits set
if ((mbi_stat.isBitSet(MBI_STAT_FRAMELOCK_PASS_BIT)) &&
(mci_stat.isBitSet(MCI_STAT_FRAMELOCK_PASS_BIT)))
@@ -684,7 +564,7 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
FAPI_DBG("proc_cen_framelock_run_framelock: Framelock completed successfully!");
break;
}
-
+
if (polls >= PROC_CEN_FRAMELOCK_MAX_FRAMELOCK_POLLS)
{
// Loop count has expired, timeout
@@ -703,27 +583,25 @@ fapi::ReturnCode proc_cen_framelock_run_framelock(
{
// polls left, keep waiting for pass/fail bits to come on
polls++;
- FAPI_DBG("proc_cen_framelock_run_framelock: Loop %d of %d ...\n",
+ FAPI_DBG("proc_cen_framelock_run_framelock: Loop %d of %d ...",
polls, PROC_CEN_FRAMELOCK_MAX_FRAMELOCK_POLLS);
}
}
} while (0);
-
+
return rc;
}
//------------------------------------------------------------------------------
// function: utility subroutine to initiate P8/Centaur FRTL (frame round trip
// latency) determination and check for completion
-// parameters: i_pu_target => P8 chip target
+// parameters: i_pu_target => P8 MCS chip unit target
// i_mem_target => Centaur chip target
// i_args => proc_cen_framelock HWP argumemt structure
// returns: FAPI_RC_SUCCESS if FRTL sequence completes successfully,
-// RC_PROC_CEN_FRAMELOCK_INTERNAL_ERR
-// if internal program logic error is encountered,
// RC_PROC_CEN_FRAMELOCK_FRTL_CEN_FIR_ERR
// RC_PROC_CEN_FRAMELOCK_FRTL_P8_FIR_ERR
-// if MCI/MBI FIR is set during FRTL operation,
+// if MCI/MBI FIR is set during FRTL operation,
// RC_PROC_CEN_FRAMELOCK_FRTL_CEN_FAIL_ERR
// RC_PROC_CEN_FRAMELOCK_FRTL_P8_FAIL_ERR
// if MCI/MBI indicates FRTL operation failure,
@@ -766,7 +644,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
if (i_args.frtl_auto_not_manual)
{
// Auto mode
-
+
// if error state is set, force FRTL bit in Centaur MBI
// Configuration Register
if (i_args.in_error_state)
@@ -779,10 +657,10 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error 0x%x setting up data buffers to force FRTL",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_cen_mbi_cfg_reg(i_mem_target, data,
mask);
if (rc)
@@ -810,10 +688,10 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error 0x%x setting up data buffers to set init timeout",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_pu_mci_cfg_reg(i_pu_target, data, mask,
i_args);
if (rc)
@@ -831,12 +709,12 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error 0x%x setting up data buffers to initiate FRTL",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_pu_mci_cfg_reg(i_pu_target, data, mask,
- i_args);
+ i_args);
if (rc)
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error writing P8 MCI Configuration register to initiate FRTL");
@@ -846,7 +724,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
// Poll until FRTL operation is finished, a timeout is deemed to
// have occurred, or an error is detected
uint8_t polls = 0;
-
+
while (1)
{
// Read Centaur MBI Status Register
@@ -857,7 +735,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
FAPI_ERR("proc_cen_framelock_run_frtl: Error reading Centaur MBI Status Register");
break;
}
-
+
// Read Centaur MBI FIR Register
rc = proc_cen_framelock_get_cen_mbi_fir_reg(i_mem_target,
mbi_fir);
@@ -866,7 +744,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
FAPI_ERR("proc_cen_framelock_run_frtl: Error reading Centaur MBI FIR Register");
break;
}
-
+
// Read P8 MCI Status Register
rc = proc_cen_framelock_get_pu_mci_stat_reg(i_pu_target, i_args,
mci_stat);
@@ -875,7 +753,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
FAPI_ERR("proc_cen_framelock_run_frtl: Error reading P8 MCI Status Register");
break;
}
-
+
// Read P8 MCI FIR Register
rc = proc_cen_framelock_get_pu_mci_fir_reg(i_pu_target, i_args,
mci_fir);
@@ -884,7 +762,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
FAPI_ERR("proc_cen_framelock_run_frtl: Error reading P8 MCI FIR Register");
break;
}
-
+
// Fail if any Centaur FIR bits are set
if (mbi_fir.getDoubleWord(0))
{
@@ -895,21 +773,18 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
RC_PROC_CEN_FRAMELOCK_FRTL_CEN_FIR_ERR);
break;
}
-
+
// Fail if any P8 FIR bits are set
if (mci_fir.getDoubleWord(0))
{
- // TODO: seeing FIR[25] set on e8052+cen050 model due to
- // flush state parity error fixed in future P8 models, skip
- // check for now
- FAPI_ERR("TODO. IGNORING. proc_cen_framelock_run_frtl: FRTL fail (auto). P8 MCI FIR bit on (0x%llx)",
+ FAPI_ERR("proc_cen_framelock_run_frtl: FRTL fail (auto). P8 MCI FIR bit on (0x%llx)",
mci_fir.getDoubleWord(0));
- //ecmdDataBufferBase & FIR_REG = mci_fir;
- //FAPI_SET_HWP_ERROR(rc,
- // RC_PROC_CEN_FRAMELOCK_FRTL_P8_FIR_ERR);
- //break;
+ ecmdDataBufferBase & FIR_REG = mci_fir;
+ FAPI_SET_HWP_ERROR(rc,
+ RC_PROC_CEN_FRAMELOCK_FRTL_P8_FIR_ERR);
+ break;
}
-
+
// Fail if Centaur FAIL bit set
if (mbi_stat.isBitSet(MBI_STAT_FRTL_FAIL_BIT))
{
@@ -918,7 +793,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
RC_PROC_CEN_FRAMELOCK_FRTL_CEN_FAIL_ERR);
break;
}
-
+
// Fail if P8 FAIL bit set
if (mci_stat.isBitSet(MCI_STAT_FRTL_FAIL_BIT))
{
@@ -927,7 +802,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
RC_PROC_CEN_FRAMELOCK_FRTL_P8_FAIL_ERR);
break;
}
-
+
// Success if Centaur and P8 PASS bits set
if ((mbi_stat.isBitSet(MBI_STAT_FRTL_PASS_BIT)) &&
(mci_stat.isBitSet(MCI_STAT_FRTL_PASS_BIT)))
@@ -935,7 +810,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
FAPI_DBG("proc_cen_framelock_run_frtl: FRTL (auto) completed successfully!");
break;
}
-
+
if (polls >= PROC_CEN_FRAMELOCK_MAX_FRTL_POLLS)
{
// Loop count has expired, timeout
@@ -984,10 +859,10 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error 0x%x setting up data buffers to disable Centaur auto FRTL mode",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_cen_mbi_cfg_reg(i_mem_target, data,
mask);
if (rc)
@@ -1007,7 +882,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_INVALID_ARGS);
break;
}
-
+
rc_ecmd |= data.flushTo0();
rc_ecmd |= mask.flushTo0();
rc_ecmd |= data.insertFromRight(
@@ -1020,15 +895,15 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
MBI_CFG_MANUAL_FRTL_START_BIT,
(MBI_CFG_MANUAL_FRTL_END_BIT -
MBI_CFG_MANUAL_FRTL_START_BIT + 1));
-
+
if (rc_ecmd)
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error 0x%x setting up data buffers to set Centaur manual FRTL value",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_cen_mbi_cfg_reg(i_mem_target, data,
mask);
if (rc)
@@ -1047,10 +922,10 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
{
FAPI_ERR( "proc_cen_framelock_run_frtl: Error 0x%x setting up data buffers to set Centaur manual FRTL done",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_cen_mbi_cfg_reg(i_mem_target, data,
mask);
if (rc)
@@ -1079,10 +954,10 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error 0x%x setting up data buffers to disable P8 auto FRTL mode",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_pu_mci_cfg_reg(i_pu_target, data, mask,
i_args);
if (rc)
@@ -1113,15 +988,15 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
MCI_CFG_MANUAL_FRTL_START_BIT,
(MCI_CFG_MANUAL_FRTL_END_BIT -
MCI_CFG_MANUAL_FRTL_START_BIT + 1));
-
+
if (rc_ecmd)
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error 0x%x setting up data buffers to set P8 manual FRTL value",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_pu_mci_cfg_reg(i_pu_target, data, mask,
i_args);
if (rc)
@@ -1139,10 +1014,10 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error 0x%x setting up data buffers to write P8 manual FRTL done",
rc_ecmd);
- rc = rc_ecmd;
+ rc.setEcmdError(rc_ecmd);
break;
}
-
+
rc = proc_cen_framelock_set_pu_mci_cfg_reg(i_pu_target, data, mask,
i_args);
if (rc)
@@ -1150,10 +1025,10 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
FAPI_ERR("proc_cen_framelock_run_frtl: Error writing P8 MCI Configuration register to set manual FRTL done");
break;
}
-
+
// Read Centaur MBI FIR Register
rc = proc_cen_framelock_get_cen_mbi_fir_reg(i_mem_target, mbi_fir);
-
+
if (rc)
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error reading Centaur MBI FIR Register");
@@ -1163,7 +1038,7 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
// Read P8 MCI FIR Register
rc = proc_cen_framelock_get_pu_mci_fir_reg(i_pu_target, i_args,
mci_fir);
-
+
if (rc)
{
FAPI_ERR("proc_cen_framelock_run_frtl: Error reading P8 MCI FIR Register");
@@ -1179,23 +1054,20 @@ fapi::ReturnCode proc_cen_framelock_run_frtl(
FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_FL_CEN_FIR_ERR);
break;
}
-
+
// Fail if any P8 FIR bits are set
if (mci_fir.getDoubleWord(0))
{
- // TODO: seeing FIR[25] set on e8052+cen050 model due to flush
- // state parity error fixed in future P8 models, skip check for
- // now
- FAPI_ERR("TODO. IGNORING. proc_cen_framelock_run_frtl: FRTL fail (manual). P8 MCI FIR bit on (0x%llx)",
+ FAPI_ERR("proc_cen_framelock_run_frtl: FRTL fail (manual). P8 MCI FIR bit on (0x%llx)",
mci_fir.getDoubleWord(0));
- //ecmdDataBufferBase & FIR_REG = mci_fir;
- //FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_FL_P8_FIR_ERR);
- //break;
+ ecmdDataBufferBase & FIR_REG = mci_fir;
+ FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_FL_P8_FIR_ERR);
+ break;
}
}
-
+
} while (0);
-
+
return rc;
}
@@ -1214,15 +1086,6 @@ fapi::ReturnCode proc_cen_framelock(const fapi::Target& i_pu_target,
do
{
// validate arguments
- if (i_args.mcs_pu > PROC_CEN_FRAMELOCK_MAX_MCS_OFFSET)
- {
- FAPI_ERR("proc_cen_framelock: Out of range value %d presented for P8 MCS offset argument value!",
- i_args.mcs_pu);
- const proc_cen_framelock_args & ARGS = i_args;
- FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_INVALID_ARGS);
- break;
- }
-
if (i_args.frtl_manual_mem > MBI_CFG_MANUAL_FRTL_FIELD_MASK)
{
FAPI_ERR("proc_cen_framelock: Out of range value %d presented for manual FRTL mem argument value!",
@@ -1231,7 +1094,7 @@ fapi::ReturnCode proc_cen_framelock(const fapi::Target& i_pu_target,
FAPI_SET_HWP_ERROR(rc, RC_PROC_CEN_FRAMELOCK_INVALID_ARGS);
break;
}
-
+
if (i_args.frtl_manual_pu > MCI_CFG_MANUAL_FRTL_FIELD_MASK)
{
FAPI_ERR("proc_cen_framelock: Out of range value %d presented for manual FRTL pu argument value!",
@@ -1248,14 +1111,14 @@ fapi::ReturnCode proc_cen_framelock(const fapi::Target& i_pu_target,
{
break;
}
-
+
// execute FRTL
rc = proc_cen_framelock_run_frtl(i_pu_target, i_mem_target, i_args);
if (rc)
{
break;
}
-
+
} while (0);
// mark HWP exit
diff --git a/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.H b/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.H
index 47b176c7f..43b038840 100644
--- a/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.H
+++ b/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.H
@@ -1,7 +1,7 @@
// IBM_PROLOG_BEGIN_TAG
// This is an automatically generated prolog.
//
-// $Source: src/usr/HWPs/dmi_training/proc_cen_framelock.H $
+// $Source: src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock.H $
//
// IBM CONFIDENTIAL
//
@@ -20,7 +20,7 @@
// Origin: 30
//
// IBM_PROLOG_END
-// $Id: proc_cen_framelock.H,v 1.3 2012/01/06 23:44:51 jmcgill Exp $
+// $Id: proc_cen_framelock.H,v 1.5 2012/04/11 06:24:13 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_cen_framelock.H,v $
//------------------------------------------------------------------------------
// *|
@@ -35,6 +35,13 @@
// *!
// *! ADDITIONAL COMMENTS :
// *!
+// *! Runs EDI frame lock procedure and FRTL (frame round trip latency)
+// *! calculation. Once frame lock is achieved, CRC checking is enabled,
+// *! idle frames will be transmitted in both directions, and host can issue
+// *! inband configuration accesses.
+// *!
+// *! Prerequisites: DMI training is complete & EDI fence bit has been lowered.
+// *!
//------------------------------------------------------------------------------
#ifndef _PROC_CEN_FRAMELOCK_H_
@@ -64,7 +71,6 @@ enum proc_cen_framelock_channel_init_timeout
// structure to represent HWP arguments
struct proc_cen_framelock_args
{
- uint8_t mcs_pu; // MCS offset on P8 chip target to operate on
bool in_error_state; // apply error state overrides to framelock/auto FRTL?
proc_cen_framelock_channel_init_timeout channel_init_timeout;
// channel init timeout value to program for framelock/
@@ -87,20 +93,17 @@ typedef fapi::ReturnCode
// Constant definitions
//------------------------------------------------------------------------------
-// maximum MCS offset supported by P8 chip design
-const uint8_t PROC_CEN_FRAMELOCK_MAX_MCS_OFFSET = 7;
-
// framelock/FRTL polling constants
const uint8_t PROC_CEN_FRAMELOCK_MAX_FRAMELOCK_POLLS = 5;
const uint8_t PROC_CEN_FRAMELOCK_MAX_FRTL_POLLS = 5;
// P8 MCI Configuration Register field/bit definitions
-const uint32_t MCI_CFG_START_FRAMELOCK_BIT = 7;
-const uint32_t MCI_CFG_START_FRTL_BIT = 8;
-const uint32_t MCI_CFG_AUTO_FRTL_DISABLE_BIT = 9;
-const uint32_t MCI_CFG_MANUAL_FRTL_START_BIT = 10;
-const uint32_t MCI_CFG_MANUAL_FRTL_END_BIT = 16;
-const uint32_t MCI_CFG_MANUAL_FRTL_DONE_BIT = 17;
+const uint32_t MCI_CFG_START_FRAMELOCK_BIT = 7;
+const uint32_t MCI_CFG_START_FRTL_BIT = 8;
+const uint32_t MCI_CFG_AUTO_FRTL_DISABLE_BIT = 9;
+const uint32_t MCI_CFG_MANUAL_FRTL_START_BIT = 10;
+const uint32_t MCI_CFG_MANUAL_FRTL_END_BIT = 16;
+const uint32_t MCI_CFG_MANUAL_FRTL_DONE_BIT = 17;
const uint32_t MCI_CFG_CHANNEL_INIT_TIMEOUT_START_BIT = 35;
const uint32_t MCI_CFG_CHANNEL_INIT_TIMEOUT_END_BIT = 36;
@@ -110,27 +113,27 @@ const uint32_t MCI_CFG_CHANNEL_INIT_TIMEOUT_FIELD_MASK = 0x3;
// P8 MCI Status Register field/bit definitions
const uint32_t MCI_STAT_FRAMELOCK_PASS_BIT = 0;
const uint32_t MCI_STAT_FRAMELOCK_FAIL_BIT = 1;
-const uint32_t MCI_STAT_FRTL_PASS_BIT = 2;
-const uint32_t MCI_STAT_FRTL_FAIL_BIT = 3;
+const uint32_t MCI_STAT_FRTL_PASS_BIT = 2;
+const uint32_t MCI_STAT_FRTL_FAIL_BIT = 3;
// Centaur MBI Configuration Register field/bit defintions
-const uint32_t MBI_CFG_FORCE_FRAMELOCK_BIT = 7;
-const uint32_t MBI_CFG_FORCE_FRTL_BIT = 8;
-const uint32_t MBI_CFG_AUTO_FRTL_DISABLE_BIT = 9;
-const uint32_t MBI_CFG_MANUAL_FRTL_START_BIT = 10;
-const uint32_t MBI_CFG_MANUAL_FRTL_END_BIT = 16;
-const uint32_t MBI_CFG_MANUAL_FRTL_DONE_BIT = 17;
+const uint32_t MBI_CFG_FORCE_FRAMELOCK_BIT = 7;
+const uint32_t MBI_CFG_FORCE_FRTL_BIT = 8;
+const uint32_t MBI_CFG_AUTO_FRTL_DISABLE_BIT = 9;
+const uint32_t MBI_CFG_MANUAL_FRTL_START_BIT = 10;
+const uint32_t MBI_CFG_MANUAL_FRTL_END_BIT = 16;
+const uint32_t MBI_CFG_MANUAL_FRTL_DONE_BIT = 17;
const uint32_t MBI_CFG_CHANNEL_INIT_TIMEOUT_START_BIT = 35;
-const uint32_t MBI_CFG_CHANNEL_INIT_TIMEOUT_END_BIT = 36;
+const uint32_t MBI_CFG_CHANNEL_INIT_TIMEOUT_END_BIT = 36;
const uint8_t MBI_CFG_MANUAL_FRTL_FIELD_MASK = 0x7F;
-const uint32_t MBI_CFG_CHANNEL_INIT_TIMEOUT_FIELD_MASK = 0x3;
+const uint32_t MBI_CFG_CHANNEL_INIT_TIMEOUT_FIELD_MASK = 0x3;
// Centaur MBI Status Register field/bit definitions
const uint32_t MBI_STAT_FRAMELOCK_PASS_BIT = 0;
const uint32_t MBI_STAT_FRAMELOCK_FAIL_BIT = 1;
-const uint32_t MBI_STAT_FRTL_PASS_BIT = 2;
-const uint32_t MBI_STAT_FRTL_FAIL_BIT = 3;
+const uint32_t MBI_STAT_FRTL_PASS_BIT = 2;
+const uint32_t MBI_STAT_FRTL_FAIL_BIT = 3;
extern "C"
{
@@ -141,14 +144,12 @@ extern "C"
// function: FAPI proc_cen_framelock HWP entry point, execute P8/Centaur
// framelock and FRTL operations
-// parameters: i_pu_target => P8 chip target
+// parameters: i_pu_target => P8 MCS chip unit target
// i_mem_target => Centaur chip target
// i_args => proc_cen_framelock HWP argumemt structure
// returns: FAPI_RC_SUCCESS if framelock/FRTL sequence completes successfully,
// RC_PROC_CEN_FRAMELOCK_INVALID_ARGS
// if invalid/out of range arguments are presented in i_args,
-// RC_PROC_CEN_FRAMELOCK_INTERNAL_ERR
-// if internal program logic error is encountered,
// RC_PROC_CEN_FRAMELOCK_FL_CEN_FIR_ERR
// if Centaur MBI FIR is set during framelock operation,
// RC_PROC_CEN_FRAMELOCK_FL_P8_FIR_ERR
@@ -171,7 +172,6 @@ extern "C"
// RC_PROC_CEN_FRAMELOCK_FRTL_TIMEOUT_ERR
// if MCI/MBI does not post pass/fail indication after FRTL
// operation is started,
-//
// else FAPI getscom/putscom return code for failing operation
fapi::ReturnCode proc_cen_framelock(const fapi::Target& i_pu_target,
const fapi::Target& i_mem_target,
diff --git a/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock_errors.xml b/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock_errors.xml
index bfa5fa5c7..39b4ce147 100644
--- a/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock_errors.xml
+++ b/src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock_errors.xml
@@ -1,7 +1,7 @@
<!-- IBM_PROLOG_BEGIN_TAG
This is an automatically generated prolog.
- $Source: src/usr/HWPs/dmi_training/proc_cen_framelock_errors.xml $
+ $Source: src/usr/hwpf/hwp/dmi_training/proc_cen_framelock/proc_cen_framelock_errors.xml $
IBM CONFIDENTIAL
@@ -30,12 +30,6 @@
</hwpError>
<!-- *********************************************************************** -->
<hwpError>
- <rc>RC_PROC_CEN_FRAMELOCK_INTERNAL_ERR</rc>
- <description>Unexpected internal program logic error.</description>
- <ffdc>ERR_DATA</ffdc>
- </hwpError>
- <!-- *********************************************************************** -->
- <hwpError>
<rc>RC_PROC_CEN_FRAMELOCK_FL_CEN_FIR_ERR</rc>
<description>Framelock sequence set FIR bit in Centaur MBI FIR Register.</description>
<ffdc>FIR_REG</ffdc>
OpenPOWER on IntegriCloud