Skip to content

Commit 52627db

Browse files
committed
sfdp_iterate_next_largest_erase_type: fix size check and add alignment check
1 parent f227856 commit 52627db

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

drivers/source/SFDP.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -403,12 +403,17 @@ int sfdp_iterate_next_largest_erase_type(uint8_t &bitfield,
403403
int largest_erase_type = 0;
404404

405405
int idx;
406+
unsigned int erase_size;
406407
for (idx = 3; idx >= 0; idx--) {
407408
if (bitfield & type_mask) {
408409
largest_erase_type = idx;
409-
if ((size > (int)(smptbl.erase_type_size_arr[largest_erase_type])) &&
410-
((smptbl.region_high_boundary[region] - offset)
411-
> (uint64_t)(smptbl.erase_type_size_arr[largest_erase_type]))) {
410+
erase_size = smptbl.erase_type_size_arr[largest_erase_type];
411+
// Criteria:
412+
// * offset is aligned to the type's erase size
413+
// * erase size is no larger than the requested size,
414+
// * erase range does not exceed the region boundary
415+
if ((offset % erase_size == 0) && (size >= erase_size) &&
416+
(offset + erase_size - 1 <= smptbl.region_high_boundary[region])) {
412417
break;
413418
} else {
414419
bitfield &= ~type_mask;

0 commit comments

Comments
 (0)