MdeModulePkg/FaultTolerantWriteDxe: Don't check for address alignment
WorkSpaceAddress and SpareAreaAddress point into MMIO, which isn't always aligned. Remove the check for block alignment to avoid false assertions. Signed-off-by: Sean Rhodes <sean@starlabs.systems> Change-Id: Ia1c1f44b6a0e7f32cac0d7806e74d729e5d83a6d
This commit is contained in:
committed by
Tim Crawford
parent
0f49a3fc87
commit
35dde2452d
@@ -1119,8 +1119,8 @@ FindFvbForFtw (
|
|||||||
// To get the LBA of work space
|
// To get the LBA of work space
|
||||||
//
|
//
|
||||||
for (LbaIndex = 1; LbaIndex <= NumberOfBlocks; LbaIndex += 1) {
|
for (LbaIndex = 1; LbaIndex <= NumberOfBlocks; LbaIndex += 1) {
|
||||||
if ( (FtwDevice->WorkSpaceAddress >= (FvbBaseAddress + BlockSize * (LbaIndex - 1)))
|
if (FtwDevice->WorkSpaceAddress - FvbBaseAddress >= BlockSize * (LbaIndex - 1) &&
|
||||||
&& (FtwDevice->WorkSpaceAddress < (FvbBaseAddress + BlockSize * LbaIndex)))
|
(FtwDevice->WorkSpaceAddress - FvbBaseAddress) / BlockSize >= LbaIndex - 1)
|
||||||
{
|
{
|
||||||
FtwDevice->FtwWorkSpaceLba = LbaIndex - 1;
|
FtwDevice->FtwWorkSpaceLba = LbaIndex - 1;
|
||||||
//
|
//
|
||||||
@@ -1132,12 +1132,10 @@ FindFvbForFtw (
|
|||||||
FtwDevice->NumberOfWorkSpaceBlock = FTW_BLOCKS (FtwDevice->FtwWorkSpaceBase + FtwDevice->FtwWorkSpaceSize, FtwDevice->WorkBlockSize);
|
FtwDevice->NumberOfWorkSpaceBlock = FTW_BLOCKS (FtwDevice->FtwWorkSpaceBase + FtwDevice->FtwWorkSpaceSize, FtwDevice->WorkBlockSize);
|
||||||
if (FtwDevice->FtwWorkSpaceSize >= FtwDevice->WorkBlockSize) {
|
if (FtwDevice->FtwWorkSpaceSize >= FtwDevice->WorkBlockSize) {
|
||||||
//
|
//
|
||||||
// Check the alignment of work space address and length, they should be block size aligned when work space size is larger than one block size.
|
// Check the alignment of work space length, it should be block size aligned when work space size is larger than one block size.
|
||||||
//
|
//
|
||||||
if (((FtwDevice->WorkSpaceAddress & (FtwDevice->WorkBlockSize - 1)) != 0) ||
|
if ((FtwDevice->WorkSpaceLength & (FtwDevice->WorkBlockSize - 1)) != 0) {
|
||||||
((FtwDevice->WorkSpaceLength & (FtwDevice->WorkBlockSize - 1)) != 0))
|
DEBUG ((EFI_D_ERROR, "Ftw: Work space length is not block size aligned when work space size is larger than one block size\n"));
|
||||||
{
|
|
||||||
DEBUG ((DEBUG_ERROR, "Ftw: Work space address or length is not block size aligned when work space size is larger than one block size\n"));
|
|
||||||
FreePool (HandleBuffer);
|
FreePool (HandleBuffer);
|
||||||
ASSERT (FALSE);
|
ASSERT (FALSE);
|
||||||
return EFI_ABORTED;
|
return EFI_ABORTED;
|
||||||
@@ -1182,12 +1180,10 @@ FindFvbForFtw (
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check the alignment of spare area address and length, they should be block size aligned
|
// Check the alignment of spare area length, it should be block size aligned
|
||||||
//
|
//
|
||||||
if (((FtwDevice->SpareAreaAddress & (FtwDevice->SpareBlockSize - 1)) != 0) ||
|
if ((FtwDevice->SpareAreaLength & (FtwDevice->SpareBlockSize - 1)) != 0) {
|
||||||
((FtwDevice->SpareAreaLength & (FtwDevice->SpareBlockSize - 1)) != 0))
|
DEBUG ((EFI_D_ERROR, "Ftw: Spare area address or length is not block size aligned\n"));
|
||||||
{
|
|
||||||
DEBUG ((DEBUG_ERROR, "Ftw: Spare area address or length is not block size aligned\n"));
|
|
||||||
FreePool (HandleBuffer);
|
FreePool (HandleBuffer);
|
||||||
//
|
//
|
||||||
// Report Status Code EFI_SW_EC_ABORTED.
|
// Report Status Code EFI_SW_EC_ABORTED.
|
||||||
|
Reference in New Issue
Block a user