diff options
author | Raja Das <rajadas2@in.ibm.com> | 2017-01-16 00:00:47 -0600 |
---|---|---|
committer | Sachin Gupta <sgupta2m@in.ibm.com> | 2017-08-24 10:35:31 -0400 |
commit | c3afb3dd153def1859993cfe022fb729cdd1021f (patch) | |
tree | 4468f751ef48d070da78b00836c6c2acbb908c80 /src/sbefw/sbecmdgeneric.C | |
parent | 586e1f21d00994b77ecc757c71fbc0592721b74a (diff) | |
download | talos-sbe-c3afb3dd153def1859993cfe022fb729cdd1021f.tar.gz talos-sbe-c3afb3dd153def1859993cfe022fb729cdd1021f.zip |
HB Addr Stash chip-op
Change-Id: I6ffd7bedc7c1456839d063429467dccecf1aa826
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/34903
Reviewed-by: Shakeeb A. Pasha B K <shakeebbk@in.ibm.com>
Reviewed-by: AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/sbefw/sbecmdgeneric.C')
-rw-r--r-- | src/sbefw/sbecmdgeneric.C | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/src/sbefw/sbecmdgeneric.C b/src/sbefw/sbecmdgeneric.C index bffb67db..6a99199d 100644 --- a/src/sbefw/sbecmdgeneric.C +++ b/src/sbefw/sbecmdgeneric.C @@ -277,9 +277,53 @@ uint32_t sbeSetFFDCAddr(uint8_t *i_pArg) #undef SBE_FUNC } -#endif //__SBEFW_SEEPROM__ +//---------------------------------------------------------------------------- +uint32_t sbeStashKeyAddrPair( uint8_t *i_pArg ) +{ + #define SBE_FUNC "sbeStashKeyAddrPair" + SBE_ENTER(SBE_FUNC); + uint32_t rc = SBE_SEC_OPERATION_SUCCESSFUL; + uint32_t fapiRc = FAPI2_RC_SUCCESS; + do + { + stashMsg_t l_stashMsg; + // Send Ack to Host via SBE_SBE2PSU_DOORBELL_SET_BIT1, once both + // key/addr is extracted out of MBOX_REG1 and MBOX_REG2 + rc = sbeReadPsu2SbeMbxReg(SBE_HOST_PSU_MBOX_REG1, + (sizeof(stashMsg_t)/sizeof(uint64_t)), + (uint64_t*)&l_stashMsg, true); + if(SBE_SEC_OPERATION_SUCCESSFUL != rc) + { + SBE_ERROR(SBE_FUNC" Failed to extract " + "SBE_HOST_PSU_MBOX_REG1/SBE_HOST_PSU_MBOX_REG2"); + break; + } + + SBE_INFO(SBE_FUNC "Key[0x%08X] Addr[0x%08X %08X]", + l_stashMsg.key, SBE::higher32BWord(l_stashMsg.addr), + SBE::lower32BWord(l_stashMsg.addr)); + + // Update the Key-Addr Pair in local Memory + bool update = SBE_GLOBAL->sbeKeyAddrPair.updatePair(l_stashMsg.key, + l_stashMsg.addr); + if(false == update) + { + // Update RC to indicate Host that Stash memory is full + SBE_GLOBAL->sbeSbe2PsuRespHdr.setStatus( + SBE_PRI_GENERIC_EXECUTION_FAILURE, + SBE_SEC_INPUT_BUFFER_OVERFLOW); + break; + } + }while(0); + + // Send the response + sbePSUSendResponse(SBE_GLOBAL->sbeSbe2PsuRespHdr, fapiRc, rc); + + SBE_EXIT(SBE_FUNC); + return rc; + #undef SBE_FUNC +} -#ifndef __SBEFW_SEEPROM__ //---------------------------------------------------------------------------- uint32_t sbeSetSystemFabricMap( uint8_t *i_pArg ) { @@ -318,7 +362,9 @@ uint32_t sbeSetSystemFabricMap( uint8_t *i_pArg ) return l_rc; #undef SBE_FUNC } +#endif //__SBEFW_SEEPROM__ +#ifndef __SBEFW_SEEPROM__ //---------------------------------------------------------------------------- uint32_t sbeFifoQuiesce( uint8_t *i_pArg ) { |