From ac86aff928a7ca792b6996609500076dbfa93dc2 Mon Sep 17 00:00:00 2001 From: Lingkai Dong Date: Tue, 24 Nov 2020 18:07:29 +0000 Subject: [PATCH] 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. --- drivers/include/drivers/internal/SFDP.h | 2 +- drivers/source/SFDP.cpp | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/include/drivers/internal/SFDP.h b/drivers/include/drivers/internal/SFDP.h index be94b8f0bd..9666d31e14 100644 --- a/drivers/include/drivers/internal/SFDP.h +++ b/drivers/include/drivers/internal/SFDP.h @@ -143,7 +143,7 @@ int sfdp_find_addr_region(bd_addr_t offset, const sfdp_hdr_info &sfdp_info); * * @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 offset, int region, diff --git a/drivers/source/SFDP.cpp b/drivers/source/SFDP.cpp index d702f424be..271ad6048d 100644 --- a/drivers/source/SFDP.cpp +++ b/drivers/source/SFDP.cpp @@ -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 offset, int region, @@ -415,8 +415,6 @@ int sfdp_iterate_next_largest_erase_type(uint8_t &bitfield, if ((offset % erase_size == 0) && (size >= erase_size) && (offset + erase_size - 1 <= smptbl.region_high_boundary[region])) { break; - } else { - bitfield &= ~type_mask; } } type_mask = type_mask >> 1;