Skip to content

Commit e0bd9a1

Browse files
committed
sfdp_iterate_next_largest_erase_type: return -1 if no erase type is applicable
1 parent ac86aff commit e0bd9a1

File tree

2 files changed

+6
-12
lines changed

2 files changed

+6
-12
lines changed

drivers/include/drivers/internal/SFDP.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ int sfdp_find_addr_region(bd_addr_t offset, const sfdp_hdr_info &sfdp_info);
141141
* @param region Region number
142142
* @param smptbl Information about different erase types
143143
*
144-
* @return Largest erase type
144+
* @return Largest erase type, or -1 if none matches the given address and size
145145
*/
146146
int sfdp_iterate_next_largest_erase_type(uint8_t bitfield,
147147
int size,

drivers/source/SFDP.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -400,30 +400,24 @@ int sfdp_iterate_next_largest_erase_type(uint8_t bitfield,
400400
const sfdp_smptbl_info &smptbl)
401401
{
402402
uint8_t type_mask = SFDP_ERASE_BITMASK_TYPE4;
403-
int largest_erase_type = 0;
404-
405-
int idx;
406403
unsigned int erase_size;
407-
for (idx = 3; idx >= 0; idx--) {
404+
for (int idx = 3; idx >= 0; idx--) {
408405
if (bitfield & type_mask) {
409-
largest_erase_type = idx;
410-
erase_size = smptbl.erase_type_size_arr[largest_erase_type];
406+
erase_size = smptbl.erase_type_size_arr[idx];
411407
// Criteria:
412408
// * offset is aligned to the type's erase size
413409
// * erase size is no larger than the requested size,
414410
// * erase range does not exceed the region boundary
415411
if ((offset % erase_size == 0) && (size >= erase_size) &&
416412
(offset + erase_size - 1 <= smptbl.region_high_boundary[region])) {
417-
break;
413+
return idx;
418414
}
419415
}
420416
type_mask = type_mask >> 1;
421417
}
422418

423-
if (idx == -1) {
424-
tr_error("No erase type was found for current region addr");
425-
}
426-
return largest_erase_type;
419+
tr_error("No erase type was found for current region addr");
420+
return -1;
427421
}
428422

429423
int sfdp_detect_device_density(uint8_t *bptbl_ptr, sfdp_bptbl_info &bptbl_info)

0 commit comments

Comments
 (0)