ArmPlatformPkg: Enable support for flash in 64-bit address space
The existing NOR Flash DXE and StandaloneMm driver supports NOR flash devices connected in the 32-bit address space. Extend these drivers to allow NOR flash devices connected to 64-bit address space to be usable as well. Also, convert the base address and size sanity check from ASSERT() to if condition so that even if the firmware is build in release mode, it can return error if the parameter(s) is/are invalid. Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subramaniam@arm.com> Tested-by: Masahisa Kojima <masahisa.kojima@linaro.org> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
This commit is contained in:
committed by
mergify[bot]
parent
e9c5ff3d27
commit
8015f3f6d4
@@ -1,6 +1,6 @@
|
||||
/** @file NorFlashDxe.c
|
||||
|
||||
Copyright (c) 2011 - 2020, Arm Limited. All rights reserved.<BR>
|
||||
Copyright (c) 2011 - 2021, Arm Limited. All rights reserved.<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@@ -343,9 +343,18 @@ NorFlashInitialise (
|
||||
|
||||
for (Index = 0; Index < mNorFlashDeviceCount; Index++) {
|
||||
// Check if this NOR Flash device contain the variable storage region
|
||||
ContainVariableStorage =
|
||||
(NorFlashDevices[Index].RegionBaseAddress <= PcdGet32 (PcdFlashNvStorageVariableBase)) &&
|
||||
(PcdGet32 (PcdFlashNvStorageVariableBase) + PcdGet32 (PcdFlashNvStorageVariableSize) <= NorFlashDevices[Index].RegionBaseAddress + NorFlashDevices[Index].Size);
|
||||
|
||||
if (PcdGet64 (PcdFlashNvStorageVariableBase64) != 0) {
|
||||
ContainVariableStorage =
|
||||
(NorFlashDevices[Index].RegionBaseAddress <= PcdGet64 (PcdFlashNvStorageVariableBase64)) &&
|
||||
(PcdGet64 (PcdFlashNvStorageVariableBase64) + PcdGet32 (PcdFlashNvStorageVariableSize) <=
|
||||
NorFlashDevices[Index].RegionBaseAddress + NorFlashDevices[Index].Size);
|
||||
} else {
|
||||
ContainVariableStorage =
|
||||
(NorFlashDevices[Index].RegionBaseAddress <= PcdGet32 (PcdFlashNvStorageVariableBase)) &&
|
||||
(PcdGet32 (PcdFlashNvStorageVariableBase) + PcdGet32 (PcdFlashNvStorageVariableSize) <=
|
||||
NorFlashDevices[Index].RegionBaseAddress + NorFlashDevices[Index].Size);
|
||||
}
|
||||
|
||||
Status = NorFlashCreateInstance (
|
||||
NorFlashDevices[Index].DeviceBaseAddress,
|
||||
@@ -413,10 +422,11 @@ NorFlashFvbInitialize (
|
||||
EFI_MEMORY_UC | EFI_MEMORY_RUNTIME);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
mFlashNvStorageVariableBase = PcdGet32 (PcdFlashNvStorageVariableBase);
|
||||
mFlashNvStorageVariableBase = (FixedPcdGet64 (PcdFlashNvStorageVariableBase64) != 0) ?
|
||||
FixedPcdGet64 (PcdFlashNvStorageVariableBase64) : FixedPcdGet32 (PcdFlashNvStorageVariableBase);
|
||||
|
||||
// Set the index of the first LBA for the FVB
|
||||
Instance->StartLba = (PcdGet32 (PcdFlashNvStorageVariableBase) - Instance->RegionBaseAddress) / Instance->Media.BlockSize;
|
||||
Instance->StartLba = (mFlashNvStorageVariableBase - Instance->RegionBaseAddress) / Instance->Media.BlockSize;
|
||||
|
||||
BootMode = GetBootModeHob ();
|
||||
if (BootMode == BOOT_WITH_DEFAULT_SETTINGS) {
|
||||
|
Reference in New Issue
Block a user