diff options
author | spashabk-in <shakeebbk@in.ibm.com> | 2017-07-10 07:02:12 -0500 |
---|---|---|
committer | Sachin Gupta <sgupta2m@in.ibm.com> | 2017-07-25 07:23:43 -0400 |
commit | 6422a18750b50ffbf4e2c58cf0ca96125ab99f34 (patch) | |
tree | f8b2a91e7856704f9fd1618e1b443d12b67831a9 /src/sbefw | |
parent | 41c2c1671a41f44f0a1942c9a75f7b8261e490f6 (diff) | |
download | talos-sbe-6422a18750b50ffbf4e2c58cf0ca96125ab99f34.tar.gz talos-sbe-6422a18750b50ffbf4e2c58cf0ca96125ab99f34.zip |
Secure memory window chip-op implementation
Change-Id: I42ff79a15cba235bfd9eb761194c0699c0943332
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43415
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>
Diffstat (limited to 'src/sbefw')
-rw-r--r-- | src/sbefw/sbe_host_intf.H | 28 | ||||
-rw-r--r-- | src/sbefw/sbecmdmemaccess.C | 35 | ||||
-rw-r--r-- | src/sbefw/sbecmdmemaccess.H | 18 | ||||
-rw-r--r-- | src/sbefw/sbecmdparser.C | 18 |
4 files changed, 92 insertions, 7 deletions
diff --git a/src/sbefw/sbe_host_intf.H b/src/sbefw/sbe_host_intf.H index 18112d04..f1e9bd52 100644 --- a/src/sbefw/sbe_host_intf.H +++ b/src/sbefw/sbe_host_intf.H @@ -34,7 +34,7 @@ #include <stdint.h> /** - * $Version: Conforms to HOST-SBE Interface Spec v0.5a + * $Version: Conforms to HOST-SBE Interface Spec v0.9b */ /* @@ -48,11 +48,12 @@ static const uint16_t SBE_SBEFW_HOST_MINOR_VERSION = 0; */ enum sbePsuCommandClass { - SBE_PSU_CMD_CLASS_UNKNOWN = 0, - SBE_PSU_CMD_CLASS_CORE_STATE = 0xD1, - SBE_PSU_CMD_CLASS_RING_ACCESS = 0xD3, - SBE_PSU_CMD_CLASS_CNTRL_TIMER = 0xD4, - SBE_PSU_CMD_CLASS_GENERIC = 0xD7, + SBE_PSU_CMD_CLASS_UNKNOWN = 0, + SBE_PSU_CMD_CLASS_CORE_STATE = 0xD1, + SBE_PSU_CMD_CLASS_RING_ACCESS = 0xD3, + SBE_PSU_CMD_CLASS_CNTRL_TIMER = 0xD4, + SBE_PSU_CMD_CLASS_SECURITY_CONTROL_MSG = 0xD6, + SBE_PSU_CMD_CLASS_GENERIC = 0xD7, }; /** @@ -83,6 +84,14 @@ enum sbePsuRingAccessMessages }; /** + * @brief enums for SBE-Host interface for unsecure memory regions commands + */ +enum sbePsuUpdateMemoryRegionMessages +{ + SBE_PSU_MSG_UPDATE_MEM_REGION = 0x01, +}; + +/** * @brief enums for SBE-Host interface for generic commands */ enum sbePsuGenericMessages @@ -115,4 +124,11 @@ enum sbePsuCntrlTimerFlags SBE_PSU_FLAGS_STOP_TIMER = 0x0002, }; +enum sbeUnsecureMemRegionControlFlags +{ + SBE_MEM_REGION_OPEN_RO = 0x0011, + SBE_MEM_REGION_OPEN_RW = 0x0012, + SBE_MEM_REGION_CLOSE = 0x0020, +}; + #endif // __SBEFW_SBE_HOST_INTF_H diff --git a/src/sbefw/sbecmdmemaccess.C b/src/sbefw/sbecmdmemaccess.C index d043fad4..911f9c4d 100644 --- a/src/sbefw/sbecmdmemaccess.C +++ b/src/sbefw/sbecmdmemaccess.C @@ -704,3 +704,38 @@ uint32_t sbeGetMem (uint8_t *i_pArg) return sbeMemAccess_Wrap (true); } +uint32_t sbeUpdateMemAccessRegion (uint8_t *i_pArg) +{ + #define SBE_FUNC "sbeManageMemAccessRegion" + SBE_ENTER(SBE_FUNC); + uint32_t rc = SBE_SEC_OPERATION_SUCCESSFUL; + uint32_t fapiRc = FAPI2_RC_SUCCESS; + sbeMemRegionReq_t req = {}; + + do + { + rc = sbeReadPsu2SbeMbxReg(SBE_HOST_PSU_MBOX_REG1, + (sizeof(req)/sizeof(uint64_t)), + (uint64_t*)&req, + true); + if(SBE_SEC_OPERATION_SUCCESSFUL != rc) + { + SBE_ERROR(SBE_FUNC "Failed to extract SBE_HOST_PSU_MBOX_REG1 and " + "SBE_HOST_PSU_MBOX_REG2"); + break; + } + + SBE_INFO(SBE_FUNC" Addr[0x%08x%08x] size[0x%08x] flags[0x%04x]", + SBE::higher32BWord(req.startAddress), + SBE::lower32BWord(req.startAddress), + req.size, + SBE_GLOBAL->sbePsu2SbeCmdReqHdr.flags); + } while(false); + + // Send the response + sbePSUSendResponse(SBE_GLOBAL->sbeSbe2PsuRespHdr, fapiRc, rc); + + SBE_EXIT(SBE_FUNC); + return rc; + #undef SBE_FUNC +} diff --git a/src/sbefw/sbecmdmemaccess.H b/src/sbefw/sbecmdmemaccess.H index a96fa306..8d4b2e4c 100644 --- a/src/sbefw/sbecmdmemaccess.H +++ b/src/sbefw/sbecmdmemaccess.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER sbe Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2016 */ +/* Contributors Listed Below - COPYRIGHT 2016,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -34,6 +34,22 @@ #include <stdint.h> +typedef struct +{ + uint64_t reserved:32; + uint64_t size:32; + uint64_t startAddress:64; +} sbeMemRegionReq_t; + +/** + * @brief sbeUpdateMemAccessRegion - manage the unsecure memory regions + * + * @param[in] i_pArg Buffer to be passed to the function (not used as of now) + * + * @return Rc from the FIFO access utility + */ +uint32_t sbeUpdateMemAccessRegion (uint8_t *i_pArg); + /** * @brief sbeGetMem : Implements SBE Get Memory ChipOp * diff --git a/src/sbefw/sbecmdparser.C b/src/sbefw/sbecmdparser.C index e161f003..d87f750a 100644 --- a/src/sbefw/sbecmdparser.C +++ b/src/sbefw/sbecmdparser.C @@ -273,6 +273,18 @@ static sbeCmdStruct_t g_sbePutRingFromImageCmdArray [] = PUT_HARDWARE_FENCED_STATE|SBE_FENCE_AT_QUIESCE, }, }; +// +////////////////////////////////////////////////////////////// +// @brief g_sbePsuGenericCmdArray +// +////////////////////////////////////////////////////////////// +static sbeCmdStruct_t g_sbePsuMemRegionCmdArray[] = +{ + {sbeUpdateMemAccessRegion, + SBE_PSU_MSG_UPDATE_MEM_REGION, + SBE_FENCE_AT_QUIESCE, + }, +}; ////////////////////////////////////////////////////////////// // @brief g_sbePsuGenericCmdArray @@ -381,6 +393,12 @@ uint8_t sbeGetCmdStructAttr (const uint8_t i_cmdClass, *o_ppCmd = (sbeCmdStruct_t*)g_sbePsuGenericCmdArray; break; + case SBE_PSU_CMD_CLASS_SECURITY_CONTROL_MSG: + l_numCmds = sizeof(g_sbePsuMemRegionCmdArray) / + sizeof(sbeCmdStruct_t); + *o_ppCmd = (sbeCmdStruct_t*)g_sbePsuMemRegionCmdArray; + break; + case SBE_PSU_CMD_CLASS_CNTRL_TIMER: l_numCmds = sizeof(g_sbeControlTimerCmdArray) / sizeof(sbeCmdStruct_t); |