summaryrefslogtreecommitdiffstats
path: root/src/sbefw
diff options
context:
space:
mode:
Diffstat (limited to 'src/sbefw')
-rw-r--r--src/sbefw/sbecmdiplcontrol.C43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/sbefw/sbecmdiplcontrol.C b/src/sbefw/sbecmdiplcontrol.C
index 28a705f3..55d86547 100644
--- a/src/sbefw/sbecmdiplcontrol.C
+++ b/src/sbefw/sbecmdiplcontrol.C
@@ -44,6 +44,7 @@
#include "fapi2.H"
#include "p9_misc_scom_addresses_fld.H"
+#include "p9n2_quad_scom_addresses.H"
// Pervasive HWP Header Files ( istep 2)
#include <p9_sbe_attr_setup.H>
#include <p9_sbe_tp_chiplet_init1.H>
@@ -210,6 +211,9 @@ ReturnCode updatePhbFunctionalState( void );
//Utility function to clear crest error latch
ReturnCode resetCrespErrLatch( void );
+//Utility function to mask special attention
+inline ReturnCode maskSpecialAttn( const Target<TARGET_TYPE_CORE>& i_target );
+
#ifdef SEEPROM_IMAGE
// Using function pointer to force long call.
p9_sbe_select_ex_FP_t p9_sbe_select_ex_hwp = &p9_sbe_select_ex;
@@ -260,7 +264,8 @@ static istepMap_t g_istepMpiplStartPtrTbl[MPIPL_START_MAX_SUBSTEPS] =
// Call suspend powerman
{ &istepWithProc, { .procHwp = &p9_suspend_powman }},
// Find all the child cores within proc and call hwp to know the
- // scom state and call instruction control
+ // scom state and call instruction control. Also mask spl attention
+ // from core.
{ &istepWithCoreState, { .coreScomStateHwp = &p9_query_core_access_state }},
// Reset the TPM and clear the TPM deconfig bit, it's not a
// procedure but local SBE function
@@ -1074,6 +1079,13 @@ ReturnCode istepWithCoreState( sbeIstepHwp_t i_hwp)
break;
}
}while(++l_thread < SMT4_THREAD_MAX);
+
+ l_rc = maskSpecialAttn(l_coreTgt);
+ if( l_rc != FAPI2_RC_SUCCESS)
+ {
+ SBE_ERROR(SBE_FUNC "maskSpecialAttn failed");
+ break;
+ }
}
}
SBE_EXIT(SBE_FUNC);
@@ -1235,6 +1247,7 @@ ReturnCode istepStartMpipl( sbeIstepHwp_t i_hwp)
SBE_ERROR(SBE_FUNC "resetCrespErrLatch failed");
break;
}
+
}while(0);
SBE_EXIT(SBE_FUNC);
@@ -1561,6 +1574,34 @@ ReturnCode resetCrespErrLatch( void )
#undef SBE_FUNC
}
+//----------------------------------------------------------------------------
+inline ReturnCode maskSpecialAttn( const Target<TARGET_TYPE_CORE>& i_target )
+{
+#define SBE_FUNC "maskSpecialAttn "
+ SBE_ENTER(SBE_FUNC);
+ ReturnCode rc = FAPI2_RC_SUCCESS;
+ do
+ {
+ uint64_t maskData = 0;
+ const uint64_t ecMask = 0xffc0000000000000;
+ rc = getscom_abs_wrap (&i_target, P9N2_EX_SPA_MASK, &maskData );
+ if( rc )
+ {
+ SBE_ERROR(SBE_FUNC" Failed to read P9N2_EX_SPA_MASK");
+ break;
+ }
+ maskData = maskData | ecMask;
+ rc = putscom_abs_wrap (&i_target, P9N2_EX_SPA_MASK, maskData );
+ if( rc )
+ {
+ SBE_ERROR(SBE_FUNC" Failed to write P9N2_EX_SPA_MASK");
+ break;
+ }
+ }while(0);
+ SBE_EXIT(SBE_FUNC);
+ return rc;
+#undef SBE_FUNC
+}
///////////////////////////////////////////////////////////////////////
// @brief sbeHandleSuspendIO Sbe suspend IO function
//
OpenPOWER on IntegriCloud