mirror of https://github.com/acidanthera/audk.git
ArmVirtPkg: Fallback to variable emulation if no CFI is found
The kvmtool option '--flash <flash filename>' is used to launch a guests VM with a CFI flash device that maps the flash file specified at the command line. However, kvmtool allows guest VMs to be launched without a CFI flash device. In such scenarios the firmware can utilize the emulated variable storage for UEFI variables. To support this the PCD gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable must be set to TRUE. Therefore, update the NorFlashKvmtoolLib to fallback to variable emulation if a CFI device is not detected. Also improve the error logging. Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
parent
0e5aecfed1
commit
84d0b21d18
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
An instance of the NorFlashPlatformLib for Kvmtool platform.
|
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
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ NorFlashPlatformLibConstructor (
|
||||||
CONST CHAR8 *Label;
|
CONST CHAR8 *Label;
|
||||||
UINT32 LabelLen;
|
UINT32 LabelLen;
|
||||||
|
|
||||||
if (mNorFlashDeviceCount != 0) {
|
if ((mNorFlashDeviceCount != 0) || PcdGetBool (PcdEmuVariableNvModeEnable)) {
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,9 +337,39 @@ NorFlashPlatformLibConstructor (
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mNorFlashDevices[UefiVarStoreIndex].DeviceBaseAddress != 0) {
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
## @file
|
## @file
|
||||||
# Nor Flash library for Kvmtool.
|
# Nor Flash library for Kvmtool.
|
||||||
#
|
#
|
||||||
# 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
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
#
|
#
|
||||||
##
|
##
|
||||||
|
@ -39,6 +39,7 @@
|
||||||
gArmTokenSpaceGuid.PcdFvBaseAddress
|
gArmTokenSpaceGuid.PcdFvBaseAddress
|
||||||
gArmTokenSpaceGuid.PcdFvSize
|
gArmTokenSpaceGuid.PcdFvSize
|
||||||
|
|
||||||
|
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase
|
||||||
|
|
Loading…
Reference in New Issue