mirror of https://github.com/acidanthera/audk.git
OvmfPkg/QemuFlashFvbServicesRuntimeDxe: refine flash detection
Flash can be write-protected in qemu (which is usually the case for code). In case the variable store flash block is configured read-only ovmf wouldn't be able to store EFI variables there, so not setting up fvb in that case (and fallhack to emulation) is the better option. It'll avoid problems later due to flash writes failing. The patch tries to write back the original value read earlier, so flash content doesn't change in case the write succeeds. But the status we read back after the attempt to write will tell us whenever flash is writable or not. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
4e5a804222
commit
578a715cfc
|
@ -114,9 +114,17 @@ QemuFlashDetected (
|
|||
DEBUG ((DEBUG_INFO, "QemuFlashDetected => FD behaves as RAM\n"));
|
||||
*Ptr = OriginalUint8;
|
||||
} else if (ProbeUint8 == CLEARED_ARRAY_STATUS) {
|
||||
DEBUG ((DEBUG_INFO, "QemuFlashDetected => FD behaves as FLASH\n"));
|
||||
FlashDetected = TRUE;
|
||||
*Ptr = READ_ARRAY_CMD;
|
||||
*Ptr = WRITE_BYTE_CMD;
|
||||
*Ptr = OriginalUint8;
|
||||
*Ptr = READ_STATUS_CMD;
|
||||
ProbeUint8 = *Ptr;
|
||||
*Ptr = READ_ARRAY_CMD;
|
||||
if (ProbeUint8 & 0x10 /* programming error */) {
|
||||
DEBUG ((DEBUG_INFO, "QemuFlashDetected => FD behaves as FLASH, write-protected\n"));
|
||||
} else {
|
||||
DEBUG ((DEBUG_INFO, "QemuFlashDetected => FD behaves as FLASH, writable\n"));
|
||||
FlashDetected = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue