summaryrefslogtreecommitdiffstats
path: root/src/sbefw/sbeSecureMemRegionManager.C
diff options
context:
space:
mode:
authorspashabk-in <shakeebbk@in.ibm.com>2017-11-27 04:43:18 -0600
committerSachin Gupta <sgupta2m@in.ibm.com>2018-01-03 00:22:11 -0500
commit819a606d9c583ccfa1ca7852a4bae42efb5da53e (patch)
tree9d9f0945dd4a7adc400ad9f941f0399396df203b /src/sbefw/sbeSecureMemRegionManager.C
parentb99e4a419eecff1dbc488324e11aa0a3e31aa368 (diff)
downloadtalos-sbe-819a606d9c583ccfa1ca7852a4bae42efb5da53e.tar.gz
talos-sbe-819a606d9c583ccfa1ca7852a4bae42efb5da53e.zip
[SBE-code-re-org][1] sbefw - core and app folders
Create a core and app folder inside sbefw Change-Id: I4ee04eb5d6623a2272a20f5dd8b02ef795757b2e Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/50185 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>
Diffstat (limited to 'src/sbefw/sbeSecureMemRegionManager.C')
-rw-r--r--src/sbefw/sbeSecureMemRegionManager.C188
1 files changed, 0 insertions, 188 deletions
diff --git a/src/sbefw/sbeSecureMemRegionManager.C b/src/sbefw/sbeSecureMemRegionManager.C
deleted file mode 100644
index 822ee040..00000000
--- a/src/sbefw/sbeSecureMemRegionManager.C
+++ /dev/null
@@ -1,188 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/sbefw/sbeSecureMemRegionManager.C $ */
-/* */
-/* OpenPOWER sbe Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2017 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-#include "sbeSecureMemRegionManager.H"
-#include "sbetrace.H"
-#include "sbeutil.H"
-#include "sbeglobals.H"
-
-#ifndef __SBEFW_SEEPROM__
-SBESecureMemRegionManager mainStoreSecMemRegionManager(
- &SBE_GLOBAL->mainMemRegions[0],
- MAX_MAIN_STORE_REGIONS);
-SBEOccSramSecMemRegionManager occSramSecRegionManager(
- &SBE_GLOBAL->occSramRegions[0],
- MAX_OCC_SRAM_REGIONS);
-
-secureMemRegion_t SBESecureMemRegionManager::getPartialRegionSize(
- const secureMemRegion_t i_region)
-{
- secureMemRegion_t ret = {};
- for(size_t i = 0; i < iv_regionsOpenCnt; i++)
- {
- uint64_t minStartAddr = i_region.startAddress < iv_memRegions[i].startAddress ?
- i_region.startAddress : iv_memRegions[i].startAddress;
- uint64_t iRegionEndAddress = i_region.startAddress + i_region.size - 1;
- uint64_t existingRegionEndAddress = iv_memRegions[i].startAddress + iv_memRegions[i].size - 1;
- uint64_t maxEndAddr = iRegionEndAddress >= existingRegionEndAddress ?
- iRegionEndAddress : existingRegionEndAddress;
-
- // detect overlap
- if((maxEndAddr - minStartAddr + 1) < (i_region.size + iv_memRegions[i].size))
- {
- ret = iv_memRegions[i];
- // Give preference to first region
- if(i_region.startAddress >= iv_memRegions[i].startAddress &&
- i_region.startAddress < (iv_memRegions[i].startAddress +
- iv_memRegions[i].size))
- {
- // Return the existing window to the extent of input window
- ret.startAddress = i_region.startAddress;
- ret.size = iv_memRegions[i].startAddress + iv_memRegions[i].size
- - i_region.startAddress;
- if(ret.size > i_region.size)
- ret.size = i_region.size;
- break;
- }
- }
- }
- return ret;
-}
-
-#endif //__SBEFW_SEEPROM__
-#ifdef __SBEFW_SEEPROM__
-
-// Public functions
-sbeSecondaryResponse SBESecureMemRegionManager::add(const uint64_t i_startAddr,
- const uint32_t i_size,
- const uint8_t i_mode)
-{
- #define SBE_FUNC "SBESecureMemRegionManager::add"
- sbeSecondaryResponse rc = SBE_SEC_OPERATION_SUCCESSFUL;
- do
- {
- if(getPartialRegionSize({i_startAddr, i_size, i_mode}).mode)
- {
- SBE_ERROR(SBE_FUNC" SBE_SEC_MEM_REGION_AMEND_ATTEMPTED");
- rc = SBE_SEC_MEM_REGION_AMEND_ATTEMPTED;
- break;
- }
- if(iv_regionsOpenCnt >= iv_maxRegions)
- {
- SBE_ERROR(SBE_FUNC" SBE_SEC_MAXIMUM_MEM_REGION_EXCEEDED");
- rc = SBE_SEC_MAXIMUM_MEM_REGION_EXCEEDED;
- break;
- }
- SBE_INFO(SBE_FUNC" Adding region Mem[0x%08X%08X], size[0x%08X]",
- SBE::higher32BWord(i_startAddr),
- SBE::lower32BWord(i_startAddr),
- i_size);
- iv_memRegions[iv_regionsOpenCnt++] = {i_startAddr, i_size, i_mode};
- SBE_INFO(SBE_FUNC" after addition iv_regionsOpenCnt [%d]",
- iv_regionsOpenCnt);
- } while(0);
- return rc;
- #undef SBE_FUNC
-}
-
-sbeSecondaryResponse SBESecureMemRegionManager::remove(const uint64_t i_startAddr)
-{
- #define SBE_FUNC "SBESecureMemRegionManager::remove";
- size_t i = 0;
- sbeSecondaryResponse rc = SBE_SEC_OPERATION_SUCCESSFUL;
- for(; i < iv_regionsOpenCnt; i++)
- {
- if(i_startAddr == iv_memRegions[i].startAddress)
- {
- break;
- }
- }
- if(i < iv_regionsOpenCnt)
- {
- SBE_INFO(SBE_FUNC" Deleting region i[%d], Mem[0x%08X%08X], size[0x%08X]",
- i,
- SBE::higher32BWord(iv_memRegions[i].startAddress),
- SBE::lower32BWord(iv_memRegions[i].startAddress),
- iv_memRegions[i].size);
- // Remove the empty slot and maintain contiguous list
- for(size_t j = i; j < iv_regionsOpenCnt-1; j++)
- {
- iv_memRegions[j].startAddress = iv_memRegions[j+1].startAddress;
- iv_memRegions[j].size = iv_memRegions[j+1].size;
- iv_memRegions[j].mode = iv_memRegions[j+1].mode;
- }
-
- iv_regionsOpenCnt--;
- SBE_INFO(SBE_FUNC" After deletion : iv_regionsOpenCnt[%d]", iv_regionsOpenCnt);
- }
- else
- {
- SBE_ERROR(SBE_FUNC" SBE_SEC_MEM_REGION_NOT_FOUND");
- rc = SBE_SEC_MEM_REGION_NOT_FOUND;
- }
- return rc;
- #undef SBE_FUNC
-}
-
-#endif //__SBEFW_SEEPROM__
-#ifndef __SBEFW_SEEPROM__
-
-sbeSecondaryResponse SBESecureMemRegionManager::isAccessAllowed(
- secureMemRegion_t i_region)
-{
- #define SBE_FUNC "SBESecureMemRegionManager::isAccessAllowed"
- sbeSecondaryResponse rc = SBE_SEC_OPERATION_SUCCESSFUL;
- if(SBE_GLOBAL->sbeFWSecurityEnabled)
- {
- while(i_region.size > 0)
- {
- secureMemRegion_t foundregion = getPartialRegionSize(i_region);
- // Check if the found region has allowable access level
- // and that the region overlap is from the beginning itself
- if((i_region.mode & foundregion.mode) &&
- (i_region.startAddress == foundregion.startAddress))
- {
- SBE_INFO(SBE_FUNC" foundRegion Mem[0x%08X%08X], size[0x%08X]",
- SBE::higher32BWord(foundregion.startAddress),
- SBE::lower32BWord(foundregion.startAddress),
- foundregion.size);
- i_region.size -= foundregion.size;
- i_region.startAddress += foundregion.size;
- }
- else
- {
- SBE_ERROR(SBE_FUNC" Non secure access to memory blocked "
- "Addr[0x%08X%08X] Size[0x%08X]",
- SBE::higher32BWord(i_region.startAddress),
- SBE::lower32BWord(i_region.startAddress),
- i_region.size);
- rc = SBE_SEC_BLACKLISTED_MEM_ACCESS;
- break;
- }
- }
- }
- return rc;
- #undef SBE_FUNC
-}
-#endif //__SBEFW_SEEPROM__
OpenPOWER on IntegriCloud