sfdp_iterate_next_largest_erase_type: do not modify type_mask

The supported erase types of a given flash region are indicated
in bitfields of the variable `type_mask`. Even if an erase type
is unused for the current chunk (e.g. size too large, unaligned, etc.),
its bitfield should NOT be cleared - the same erase type might
actually be useful for the next chunk.

The function argument is now a value instead of a reference.
pull/13947/head
Lingkai Dong 2020-11-24 18:07:29 +00:00
parent 7525134532
commit ac86aff928
2 changed files with 2 additions and 4 deletions

View File

@ -143,7 +143,7 @@ int sfdp_find_addr_region(bd_addr_t offset, const sfdp_hdr_info &sfdp_info);
* *
* @return Largest erase type * @return Largest erase type
*/ */
int sfdp_iterate_next_largest_erase_type(uint8_t &bitfield, int sfdp_iterate_next_largest_erase_type(uint8_t bitfield,
int size, int size,
int offset, int offset,
int region, int region,

View File

@ -393,7 +393,7 @@ int sfdp_find_addr_region(bd_addr_t offset, const sfdp_hdr_info &sfdp_info)
} }
int sfdp_iterate_next_largest_erase_type(uint8_t &bitfield, int sfdp_iterate_next_largest_erase_type(uint8_t bitfield,
int size, int size,
int offset, int offset,
int region, int region,
@ -415,8 +415,6 @@ int sfdp_iterate_next_largest_erase_type(uint8_t &bitfield,
if ((offset % erase_size == 0) && (size >= erase_size) && if ((offset % erase_size == 0) && (size >= erase_size) &&
(offset + erase_size - 1 <= smptbl.region_high_boundary[region])) { (offset + erase_size - 1 <= smptbl.region_high_boundary[region])) {
break; break;
} else {
bitfield &= ~type_mask;
} }
} }
type_mask = type_mask >> 1; type_mask = type_mask >> 1;