summaryrefslogtreecommitdiffstats
path: root/ArmVirtPkg/Library/NorFlashKvmtoolLib/NorFlashKvmtool.c
diff options
context:
space:
mode:
Diffstat (limited to 'ArmVirtPkg/Library/NorFlashKvmtoolLib/NorFlashKvmtool.c')
-rw-r--r--ArmVirtPkg/Library/NorFlashKvmtoolLib/NorFlashKvmtool.c38
1 files changed, 34 insertions, 4 deletions
diff --git a/ArmVirtPkg/Library/NorFlashKvmtoolLib/NorFlashKvmtool.c b/ArmVirtPkg/Library/NorFlashKvmtoolLib/NorFlashKvmtool.c
index 43f5858644..2beeefdd27 100644
--- a/ArmVirtPkg/Library/NorFlashKvmtoolLib/NorFlashKvmtool.c
+++ b/ArmVirtPkg/Library/NorFlashKvmtoolLib/NorFlashKvmtool.c
@@ -1,7 +1,7 @@
/** @file
An instance of the NorFlashPlatformLib for Kvmtool platform.
- Copyright (c) 2020, ARM Ltd. All rights reserved.<BR>
+ Copyright (c) 2020 - 2023, Arm Ltd. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -228,7 +228,7 @@ NorFlashPlatformLibConstructor (
CONST CHAR8 *Label;
UINT32 LabelLen;
- if (mNorFlashDeviceCount != 0) {
+ if ((mNorFlashDeviceCount != 0) || PcdGetBool (PcdEmuVariableNvModeEnable)) {
return EFI_SUCCESS;
}
@@ -337,9 +337,39 @@ NorFlashPlatformLibConstructor (
}
if (mNorFlashDevices[UefiVarStoreIndex].DeviceBaseAddress != 0) {
- return SetupVariableStore (&mNorFlashDevices[UefiVarStoreIndex]);
+ Status = SetupVariableStore (&mNorFlashDevices[UefiVarStoreIndex]);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((
+ DEBUG_ERROR,
+ "ERROR: Failed to setup variable store, Status = %r\n",
+ Status
+ ));
+ ASSERT (0);
+ }
+ } else {
+ DEBUG ((
+ DEBUG_ERROR,
+ "ERROR: Invalid Flash device Base address\n"
+ ));
+ ASSERT (0);
+ Status = EFI_NOT_FOUND;
+ }
+ } else {
+ // No Flash device found fallback to Runtime Variable Emulation.
+ DEBUG ((
+ DEBUG_INFO,
+ "INFO: No Flash device found fallback to Runtime Variable Emulation.\n"
+ ));
+ Status = PcdSetBoolS (PcdEmuVariableNvModeEnable, TRUE);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((
+ DEBUG_ERROR,
+ "ERROR: Failed to set PcdEmuVariableNvModeEnable, Status = %r\n",
+ Status
+ ));
+ ASSERT (0);
}
}
- return EFI_NOT_FOUND;
+ return Status;
}