/** @file NorFlashDxe.c\r
\r
- Copyright (c) 2011 - 2020, Arm Limited. All rights reserved.<BR>\r
+ Copyright (c) 2011 - 2021, Arm Limited. All rights reserved.<BR>\r
\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
\r
for (Index = 0; Index < mNorFlashDeviceCount; Index++) {\r
// Check if this NOR Flash device contain the variable storage region\r
- ContainVariableStorage =\r
- (NorFlashDevices[Index].RegionBaseAddress <= PcdGet32 (PcdFlashNvStorageVariableBase)) &&\r
- (PcdGet32 (PcdFlashNvStorageVariableBase) + PcdGet32 (PcdFlashNvStorageVariableSize) <= NorFlashDevices[Index].RegionBaseAddress + NorFlashDevices[Index].Size);\r
+\r
+ if (PcdGet64 (PcdFlashNvStorageVariableBase64) != 0) {\r
+ ContainVariableStorage =\r
+ (NorFlashDevices[Index].RegionBaseAddress <= PcdGet64 (PcdFlashNvStorageVariableBase64)) &&\r
+ (PcdGet64 (PcdFlashNvStorageVariableBase64) + PcdGet32 (PcdFlashNvStorageVariableSize) <=\r
+ NorFlashDevices[Index].RegionBaseAddress + NorFlashDevices[Index].Size);\r
+ } else {\r
+ ContainVariableStorage =\r
+ (NorFlashDevices[Index].RegionBaseAddress <= PcdGet32 (PcdFlashNvStorageVariableBase)) &&\r
+ (PcdGet32 (PcdFlashNvStorageVariableBase) + PcdGet32 (PcdFlashNvStorageVariableSize) <=\r
+ NorFlashDevices[Index].RegionBaseAddress + NorFlashDevices[Index].Size);\r
+ }\r
\r
Status = NorFlashCreateInstance (\r
NorFlashDevices[Index].DeviceBaseAddress,\r
EFI_MEMORY_UC | EFI_MEMORY_RUNTIME);\r
ASSERT_EFI_ERROR (Status);\r
\r
- mFlashNvStorageVariableBase = PcdGet32 (PcdFlashNvStorageVariableBase);\r
+ mFlashNvStorageVariableBase = (FixedPcdGet64 (PcdFlashNvStorageVariableBase64) != 0) ?\r
+ FixedPcdGet64 (PcdFlashNvStorageVariableBase64) : FixedPcdGet32 (PcdFlashNvStorageVariableBase);\r
\r
// Set the index of the first LBA for the FVB\r
- Instance->StartLba = (PcdGet32 (PcdFlashNvStorageVariableBase) - Instance->RegionBaseAddress) / Instance->Media.BlockSize;\r
+ Instance->StartLba = (mFlashNvStorageVariableBase - Instance->RegionBaseAddress) / Instance->Media.BlockSize;\r
\r
BootMode = GetBootModeHob ();\r
if (BootMode == BOOT_WITH_DEFAULT_SETTINGS) {\r
#\r
# Component description file for NorFlashDxe module\r
#\r
-# Copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2021, Arm Limited. All rights reserved.<BR>\r
#\r
# SPDX-License-Identifier: BSD-2-Clause-Patent\r
#\r
gEfiDiskIoProtocolGuid\r
\r
[Pcd.common]\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize\r
\r
/*++ @file NorFlashFvbDxe.c\r
\r
- Copyright (c) 2011 - 2020, ARM Ltd. All rights reserved.<BR>\r
+ Copyright (c) 2011 - 2021, Arm Limited. All rights reserved.<BR>\r
\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
UINTN HeadersLength;\r
EFI_FIRMWARE_VOLUME_HEADER *FirmwareVolumeHeader;\r
VARIABLE_STORE_HEADER *VariableStoreHeader;\r
+ UINT32 NvStorageFtwSpareSize;\r
+ UINT32 NvStorageFtwWorkingSize;\r
+ UINT32 NvStorageVariableSize;\r
+ UINT64 NvStorageFtwSpareBase;\r
+ UINT64 NvStorageFtwWorkingBase;\r
+ UINT64 NvStorageVariableBase;\r
\r
HeadersLength = sizeof(EFI_FIRMWARE_VOLUME_HEADER) + sizeof(EFI_FV_BLOCK_MAP_ENTRY) + sizeof(VARIABLE_STORE_HEADER);\r
Headers = AllocateZeroPool(HeadersLength);\r
\r
+ NvStorageFtwWorkingSize = PcdGet32 (PcdFlashNvStorageFtwWorkingSize);\r
+ NvStorageFtwSpareSize = PcdGet32 (PcdFlashNvStorageFtwSpareSize);\r
+ NvStorageVariableSize = PcdGet32 (PcdFlashNvStorageVariableSize);\r
+\r
+ NvStorageFtwSpareBase = (PcdGet64 (PcdFlashNvStorageFtwSpareBase64) != 0) ?\r
+ PcdGet64 (PcdFlashNvStorageFtwSpareBase64) : PcdGet32 (PcdFlashNvStorageFtwSpareBase);\r
+ NvStorageFtwWorkingBase = (PcdGet64 (PcdFlashNvStorageFtwWorkingBase64) != 0) ?\r
+ PcdGet64 (PcdFlashNvStorageFtwWorkingBase64) : PcdGet32 (PcdFlashNvStorageFtwWorkingBase);\r
+ NvStorageVariableBase = (PcdGet64 (PcdFlashNvStorageVariableBase64) != 0) ?\r
+ PcdGet64 (PcdFlashNvStorageVariableBase64) : PcdGet32 (PcdFlashNvStorageVariableBase);\r
+\r
// FirmwareVolumeHeader->FvLength is declared to have the Variable area AND the FTW working area AND the FTW Spare contiguous.\r
- ASSERT(PcdGet32(PcdFlashNvStorageVariableBase) + PcdGet32(PcdFlashNvStorageVariableSize) == PcdGet32(PcdFlashNvStorageFtwWorkingBase));\r
- ASSERT(PcdGet32(PcdFlashNvStorageFtwWorkingBase) + PcdGet32(PcdFlashNvStorageFtwWorkingSize) == PcdGet32(PcdFlashNvStorageFtwSpareBase));\r
+ if ((NvStorageVariableBase + NvStorageVariableSize) != NvStorageFtwWorkingBase) {\r
+ DEBUG ((DEBUG_ERROR, "%a: NvStorageFtwWorkingBase is not contiguous with NvStorageVariableBase region\n",\r
+ __FUNCTION__));\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ if ((NvStorageFtwWorkingBase + NvStorageFtwWorkingSize) != NvStorageFtwSpareBase) {\r
+ DEBUG ((DEBUG_ERROR, "%a: NvStorageFtwSpareBase is not contiguous with NvStorageFtwWorkingBase region\n",\r
+ __FUNCTION__));\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
\r
// Check if the size of the area is at least one block size\r
- ASSERT((PcdGet32(PcdFlashNvStorageVariableSize) > 0) && (PcdGet32(PcdFlashNvStorageVariableSize) / Instance->Media.BlockSize > 0));\r
- ASSERT((PcdGet32(PcdFlashNvStorageFtwWorkingSize) > 0) && (PcdGet32(PcdFlashNvStorageFtwWorkingSize) / Instance->Media.BlockSize > 0));\r
- ASSERT((PcdGet32(PcdFlashNvStorageFtwSpareSize) > 0) && (PcdGet32(PcdFlashNvStorageFtwSpareSize) / Instance->Media.BlockSize > 0));\r
+ if ((NvStorageVariableSize <= 0) || (NvStorageVariableSize / Instance->Media.BlockSize <= 0)) {\r
+ DEBUG ((DEBUG_ERROR, "%a: NvStorageVariableSize is 0x%x, should be atleast one block size\n", __FUNCTION__,\r
+ NvStorageVariableSize));\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ if ((NvStorageFtwWorkingSize <= 0) || (NvStorageFtwWorkingSize / Instance->Media.BlockSize <= 0)) {\r
+ DEBUG ((DEBUG_ERROR, "%a: NvStorageFtwWorkingSize is 0x%x, should be atleast one block size\n", __FUNCTION__,\r
+ NvStorageFtwWorkingSize));\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ if ((NvStorageFtwSpareSize <= 0) || (NvStorageFtwSpareSize / Instance->Media.BlockSize <= 0)) {\r
+ DEBUG ((DEBUG_ERROR, "%a: NvStorageFtwSpareSize is 0x%x, should be atleast one block size\n", __FUNCTION__,\r
+ NvStorageFtwSpareSize));\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
\r
// Ensure the Variable area Base Addresses are aligned on a block size boundaries\r
- ASSERT(PcdGet32(PcdFlashNvStorageVariableBase) % Instance->Media.BlockSize == 0);\r
- ASSERT(PcdGet32(PcdFlashNvStorageFtwWorkingBase) % Instance->Media.BlockSize == 0);\r
- ASSERT(PcdGet32(PcdFlashNvStorageFtwSpareBase) % Instance->Media.BlockSize == 0);\r
+ if ((NvStorageVariableBase % Instance->Media.BlockSize != 0) ||\r
+ (NvStorageFtwWorkingBase % Instance->Media.BlockSize != 0) ||\r
+ (NvStorageFtwSpareBase % Instance->Media.BlockSize != 0)) {\r
+ DEBUG ((DEBUG_ERROR, "%a: NvStorage Base addresses must be aligned to block size boundaries", __FUNCTION__));\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
\r
//\r
// EFI_FIRMWARE_VOLUME_HEADER\r
/** @file NorFlashStandaloneMm.c\r
\r
- Copyright (c) 2011 - 2020, Arm Limited. All rights reserved.<BR>\r
+ Copyright (c) 2011 - 2021, Arm Limited. All rights reserved.<BR>\r
Copyright (c) 2020, Linaro, Ltd. All rights reserved.<BR>\r
\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
for (Index = 0; Index < mNorFlashDeviceCount; Index++) {\r
// Check if this NOR Flash device contain the variable storage region\r
- ContainVariableStorage =\r
- (NorFlashDevices[Index].RegionBaseAddress <= PcdGet32 (PcdFlashNvStorageVariableBase)) &&\r
- (PcdGet32 (PcdFlashNvStorageVariableBase) + PcdGet32 (PcdFlashNvStorageVariableSize) <= NorFlashDevices[Index].RegionBaseAddress + NorFlashDevices[Index].Size);\r
+\r
+ if (PcdGet64 (PcdFlashNvStorageVariableBase64) != 0) {\r
+ ContainVariableStorage =\r
+ (NorFlashDevices[Index].RegionBaseAddress <= PcdGet64 (PcdFlashNvStorageVariableBase64)) &&\r
+ (PcdGet64 (PcdFlashNvStorageVariableBase64) + PcdGet32 (PcdFlashNvStorageVariableSize) <=\r
+ NorFlashDevices[Index].RegionBaseAddress + NorFlashDevices[Index].Size);\r
+ } else {\r
+ ContainVariableStorage =\r
+ (NorFlashDevices[Index].RegionBaseAddress <= PcdGet32 (PcdFlashNvStorageVariableBase)) &&\r
+ (PcdGet32 (PcdFlashNvStorageVariableBase) + PcdGet32 (PcdFlashNvStorageVariableSize) <=\r
+ NorFlashDevices[Index].RegionBaseAddress + NorFlashDevices[Index].Size);\r
+ }\r
\r
Status = NorFlashCreateInstance (\r
NorFlashDevices[Index].DeviceBaseAddress,\r
\r
ASSERT((Instance != NULL));\r
\r
- mFlashNvStorageVariableBase = PcdGet32 (PcdFlashNvStorageVariableBase);\r
\r
+ mFlashNvStorageVariableBase = (FixedPcdGet64 (PcdFlashNvStorageVariableBase64) != 0) ?\r
+ FixedPcdGet64 (PcdFlashNvStorageVariableBase64) : FixedPcdGet32 (PcdFlashNvStorageVariableBase);\r
// Set the index of the first LBA for the FVB\r
- Instance->StartLba = (PcdGet32 (PcdFlashNvStorageVariableBase) - Instance->RegionBaseAddress) / Instance->Media.BlockSize;\r
+ Instance->StartLba = (mFlashNvStorageVariableBase - Instance->RegionBaseAddress) / Instance->Media.BlockSize;\r
\r
// Determine if there is a valid header at the beginning of the NorFlash\r
Status = ValidateFvHeader (Instance);\r
#\r
# Component description file for NorFlashStandaloneMm module\r
#\r
-# Copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2021, Arm Limited. All rights reserved.<BR>\r
# Copyright (c) 2020, Linaro, Ltd. All rights reserved.<BR>\r
#\r
# SPDX-License-Identifier: BSD-2-Clause-Patent\r
gEfiSmmFirmwareVolumeBlockProtocolGuid\r
\r
[Pcd.common]\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize\r
\r