summaryrefslogtreecommitdiffstats
path: root/src/sbefw
diff options
context:
space:
mode:
authorspashabk-in <shakeebbk@in.ibm.com>2017-07-10 07:02:12 -0500
committerSachin Gupta <sgupta2m@in.ibm.com>2017-07-25 07:23:43 -0400
commit6422a18750b50ffbf4e2c58cf0ca96125ab99f34 (patch)
treef8b2a91e7856704f9fd1618e1b443d12b67831a9 /src/sbefw
parent41c2c1671a41f44f0a1942c9a75f7b8261e490f6 (diff)
downloadtalos-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.H28
-rw-r--r--src/sbefw/sbecmdmemaccess.C35
-rw-r--r--src/sbefw/sbecmdmemaccess.H18
-rw-r--r--src/sbefw/sbecmdparser.C18
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);
OpenPOWER on IntegriCloud