summaryrefslogtreecommitdiffstats
path: root/src/sbefw
diff options
context:
space:
mode:
authorspashabk-in <shakeebbk@in.ibm.com>2018-06-26 04:31:51 -0500
committerSachin Gupta <sgupta2m@in.ibm.com>2018-07-12 05:16:02 -0400
commitddefd501a212999266bbf7f1de603bd7a894ce3b (patch)
treea0e9a57c6863933bc811af7df5b90edb63059b33 /src/sbefw
parent5e3c66327088a9c2f099d80277e461e866784755 (diff)
downloadtalos-sbe-ddefd501a212999266bbf7f1de603bd7a894ce3b.tar.gz
talos-sbe-ddefd501a212999266bbf7f1de603bd7a894ce3b.zip
Suspend async task on quiesce SBE
Change-Id: Icfe25bdd137c1f30a8a1c210fa6d935612d61e68 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/61358 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com> (cherry picked from commit 98d57c57fdd8ca52b4f7a71345ba5d4322a3aff9) Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/62204
Diffstat (limited to 'src/sbefw')
-rw-r--r--src/sbefw/app/common/sbecmdgeneric.C49
1 files changed, 30 insertions, 19 deletions
diff --git a/src/sbefw/app/common/sbecmdgeneric.C b/src/sbefw/app/common/sbecmdgeneric.C
index cebd4015..1e14a2d9 100644
--- a/src/sbefw/app/common/sbecmdgeneric.C
+++ b/src/sbefw/app/common/sbecmdgeneric.C
@@ -434,21 +434,26 @@ uint32_t sbeFifoQuiesce( uint8_t *i_pArg )
rc = sbeUpFifoDeq_mult (len, NULL);
CHECK_SBE_RC_AND_BREAK_IF_NOT_SUCCESS(rc);
+ // Suspend async task
+ int pkRc = pk_thread_suspend(&SBE_GLOBAL->sbeAsyncCommandProcessor_thread);
+ if (pkRc != PK_OK)
+ {
+ SBE_ERROR(SBE_FUNC "async thread suspend failed");
+ respHdr.setStatus( SBE_PRI_GENERIC_EXECUTION_FAILURE,
+ SBE_SEC_OS_FAILURE);
+ break;
+ }
+
// Set Quiesce State
(void)SbeRegAccess::theSbeRegAccess().stateTransition(
SBE_QUIESCE_EVENT);
- rc = sbeDsSendRespHdr(respHdr);
- if(rc != SBE_SEC_OPERATION_SUCCESSFUL)
- {
- SBE_ERROR(SBE_FUNC "sbeDsSendRespHdr failed");
- // Not Breaking here since we can't revert back on the set state
- }
}while(0);
- if( rc )
+ rc = sbeDsSendRespHdr(respHdr);
+ if(rc != SBE_SEC_OPERATION_SUCCESSFUL)
{
- SBE_ERROR( SBE_FUNC"Failed. rc[0x%X]", rc);
+ SBE_ERROR( SBE_FUNC"sbeDsSendRespHdr failed. rc[0x%X]", rc);
}
return rc;
#undef SBE_FUNC
@@ -473,24 +478,30 @@ uint32_t sbePsuQuiesce( uint8_t *i_pArg )
break;
}
+ // Suspend async task
+ int pkRc = pk_thread_suspend(&SBE_GLOBAL->sbeAsyncCommandProcessor_thread);
+ if (pkRc == PK_OK)
+ {
+ SBE_ERROR(SBE_FUNC "async thread suspend failed");
+ SBE_GLOBAL->sbeSbe2PsuRespHdr.setStatus(
+ SBE_PRI_GENERIC_EXECUTION_FAILURE,
+ SBE_SEC_OS_FAILURE);
+ break;
+ }
+
// Set Quiesce State
(void)SbeRegAccess::theSbeRegAccess().stateTransition(
SBE_QUIESCE_EVENT);
- rc = sbeWriteSbe2PsuMbxReg(SBE_HOST_PSU_MBOX_REG4,
- (uint64_t*)(&SBE_GLOBAL->sbeSbe2PsuRespHdr),
- (sizeof(SBE_GLOBAL->sbeSbe2PsuRespHdr)/sizeof(uint64_t)),
- true);
- if(rc != SBE_SEC_OPERATION_SUCCESSFUL)
- {
- SBE_ERROR(SBE_FUNC" Failed to write SBE_HOST_PSU_MBOX_REG4");
- // Not Breaking here since we can't revert back on the set state
- }
}while(0);
- if( rc )
+ rc = sbeWriteSbe2PsuMbxReg(SBE_HOST_PSU_MBOX_REG4,
+ (uint64_t*)(&SBE_GLOBAL->sbeSbe2PsuRespHdr),
+ (sizeof(SBE_GLOBAL->sbeSbe2PsuRespHdr)/sizeof(uint64_t)),
+ true);
+ if(rc != SBE_SEC_OPERATION_SUCCESSFUL)
{
- SBE_ERROR( SBE_FUNC"Failed. rc[0x%X]", rc);
+ SBE_ERROR( SBE_FUNC"Failed to write SBE_HOST_PSU_MBOX_REG4. rc[0x%X]", rc);
}
return rc;
#undef SBE_FUNC
OpenPOWER on IntegriCloud