[edk2-devel] [PATCH 2/2] uefi-sct/SctPkg: Correct BBTestEraseBlocks behavior (EFI_BLOCK_IO_PROTOCOL)
Chen, ArvinX
arvinx.chen at intel.com
Mon Nov 2 09:59:50 UTC 2020
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3022
The storage device erase behavior may have two possibilities:
1.Write all data into "0"
2.Write all data into "1"
but now tool behavior can only check case 1 (Write all data into "0"),
so we need add the other case into SCT tool to correct the test behavior.
Cc: G Edhaya Chandran <Edhaya.Chandran at arm.com>
Cc: Eric Jin <eric.jin at intel.com>
Signed-off-by: ArvinX Chen <arvinx.chen at intel.com>
---
.../BlackBoxTest/EraseBlockBBTestFunction.c | 55 +++++++++++++++----
1 file changed, 43 insertions(+), 12 deletions(-)
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBlockBBTestFunction.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBlockBBTestFunction.c
index cbf43e1d..dbbb70c6 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBlockBBTestFunction.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/EraseBlock/BlackBoxTest/EraseBlockBBTestFunction.c
@@ -71,6 +71,7 @@ BBTestEraseBlocksFunctionTest (
UINT64 Index;
UINTN Index1;
UINTN Remainder;
+ UINT64 EraseCounter;
EFI_ERASE_BLOCK_TOKEN Token;
EFI_BLOCK_IO2_TOKEN BlockIo2Token;
@@ -223,26 +224,41 @@ BBTestEraseBlocksFunctionTest (
// Read the data with 0, the first/last block should not be erased
ReadStatus = BlockIo->ReadBlocks (BlockIo, MediaId, Lba, BufferSize, (VOID*)Buffer2);
if (ReadStatus == EFI_SUCCESS) {
- for (Index1 = 0; Index1 < BlockSize; Index1++) {
- if (Buffer2[Index1] != 0) {
+ for (Index1 = 0, EraseCounter = 0; Index1 < BlockSize; Index1++) {
+ if (Buffer2[Index1] != 0x00 && Buffer2[Index1] != 0xFF) {
IsZero1 = FALSE;
break;
+ } else if (Buffer2[Index1] == 0x00) {
+ EraseCounter++;
}
}
+ if (EraseCounter!=0 && EraseCounter!=BlockSize) {
+ IsZero1 = FALSE;
+ }
- for (Index1 = BlockSize; Index1 < BufferSize - BlockSize; Index1++) {
- if (Buffer2[Index1] != 0) {
+ for (Index1 = BlockSize, EraseCounter = 0; Index1 < BufferSize - BlockSize; Index1++) {
+ if (Buffer2[Index1] != 0x00 && Buffer2[Index1] != 0xFF) {
IsZero2 = FALSE;
break;
+ } else if (Buffer2[Index1] == 0x00) {
+ EraseCounter++;
}
}
+ if (EraseCounter!=0 && EraseCounter!=(BufferSize - (BlockSize*2))) {
+ IsZero2 = FALSE;
+ }
- for (Index1 = BufferSize - BlockSize; Index1 < BufferSize; Index1++) {
- if (Buffer2[Index1] != 0) {
+ for (Index1 = BufferSize - BlockSize, EraseCounter = 0; Index1 < BufferSize; Index1++) {
+ if (Buffer2[Index1] != 0x00 && Buffer2[Index1] != 0xFF) {
IsZero3 = FALSE;
break;
+ } else if (Buffer2[Index1] == 0x00) {
+ EraseCounter++;
}
}
+ if (EraseCounter!=0 && EraseCounter!=BlockSize) {
+ IsZero3 = FALSE;
+ }
if ((EraseStatus == EFI_SUCCESS) && (IsZero1 == FALSE) && (IsZero2 == TRUE) && ((IsZero3 == FALSE)))
AssertionType = EFI_TEST_ASSERTION_PASSED;
@@ -492,26 +508,41 @@ BlockIo2:
// Read the data with 0, the first/last block should not be erased
ReadStatus = BlockIo2->ReadBlocksEx (BlockIo2, MediaId, Lba, &BlockIo2Token, BufferSize, (VOID*)Buffer2);
if (ReadStatus == EFI_SUCCESS) {
- for (Index1 = 0; Index1 < BlockSize; Index1++) {
- if (Buffer2[Index1] != 0) {
+ for (Index1 = 0, EraseCounter = 0; Index1 < BlockSize; Index1++) {
+ if (Buffer2[Index1] != 0x00 && Buffer2[Index1] != 0xFF) {
IsZero1 = FALSE;
break;
+ } else if (Buffer2[Index1] == 0x00) {
+ EraseCounter++;
}
}
+ if (EraseCounter!=0 && EraseCounter!=BlockSize) {
+ IsZero1 = FALSE;
+ }
- for (Index1 = BlockSize; Index1 < BufferSize - BlockSize; Index1++) {
- if (Buffer2[Index1] != 0) {
+ for (Index1 = BlockSize, EraseCounter = 0; Index1 < BufferSize - BlockSize; Index1++) {
+ if (Buffer2[Index1] != 0x00 && Buffer2[Index1] != 0xFF) {
IsZero2 = FALSE;
break;
+ } else if (Buffer2[Index1] == 0x00) {
+ EraseCounter++;
}
}
+ if (EraseCounter!=0 && EraseCounter!=(BufferSize - (BlockSize*2))) {
+ IsZero2 = FALSE;
+ }
- for (Index1 = BufferSize - BlockSize; Index1 < BufferSize; Index1++) {
- if (Buffer2[Index1] != 0) {
+ for (Index1 = BufferSize - BlockSize, EraseCounter = 0; Index1 < BufferSize; Index1++) {
+ if (Buffer2[Index1] != 0x00 && Buffer2[Index1] != 0xFF) {
IsZero3 = FALSE;
break;
+ } else if (Buffer2[Index1] == 0x00) {
+ EraseCounter++;
}
}
+ if (EraseCounter!=0 && EraseCounter!=BlockSize) {
+ IsZero3 = FALSE;
+ }
if ((EraseStatus == EFI_SUCCESS) && (IsZero1 == FALSE) && (IsZero2 == TRUE) && ((IsZero3 == FALSE)))
AssertionType = EFI_TEST_ASSERTION_PASSED;
--
2.26.2.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#66857): https://edk2.groups.io/g/devel/message/66857
Mute This Topic: https://groups.io/mt/77977762/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list