diff options
author | Takahiro Kuwano <Takahiro.Kuwano@infineon.com> | 2024-02-20 11:34:07 +0300 |
---|---|---|
committer | Tudor Ambarus <tudor.ambarus@linaro.org> | 2024-02-26 14:17:43 +0300 |
commit | df6e36edac23f096fae45d0a8fe2efcf0e77aebe (patch) | |
tree | a9f2d4d20ed68b72d68afeb0a797421b58adea7f /drivers/mtd/spi-nor/sfdp.c | |
parent | 0e164238bb0752e341f01639438c35822d4488b2 (diff) | |
download | linux-df6e36edac23f096fae45d0a8fe2efcf0e77aebe.tar.xz |
mtd: spi-nor: core: get rid of SNOR_LAST_REGION flag
Introduce n_regions in spi_nor_erase_map structure and remove
SNOR_LAST_REGION flag. Loop logics that depend on the flag are also
reworked to use n_regions as loop condition.
Signed-off-by: Takahiro Kuwano <Takahiro.Kuwano@infineon.com>
Suggested-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Suggested-by: Michael Walle <mwalle@kernel.org>
Reviewed-by: Michael Walle <mwalle@kernel.org>
Link: https://lore.kernel.org/r/eded84294bd81e966d6f423e578fc2cfb9a4a5b6.1708404584.git.Takahiro.Kuwano@infineon.com
[ta: update spi_nor_init_erase_cmd_list() and break the for loop sooner.]
Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Diffstat (limited to 'drivers/mtd/spi-nor/sfdp.c')
-rw-r--r-- | drivers/mtd/spi-nor/sfdp.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c index 3cf1db6e4026..8d83580207d5 100644 --- a/drivers/mtd/spi-nor/sfdp.c +++ b/drivers/mtd/spi-nor/sfdp.c @@ -390,15 +390,14 @@ static void spi_nor_regions_sort_erase_types(struct spi_nor_erase_map *map) { struct spi_nor_erase_region *region = map->regions; u8 sorted_erase_mask; + unsigned int i; - while (region) { - sorted_erase_mask = spi_nor_sort_erase_mask(map, - region->erase_mask); + for (i = 0; i < map->n_regions; i++) { + sorted_erase_mask = + spi_nor_sort_erase_mask(map, region[i].erase_mask); /* Overwrite erase mask. */ - region->erase_mask = sorted_erase_mask; - - region = spi_nor_region_next(region); + region[i].erase_mask = sorted_erase_mask; } } @@ -801,11 +800,6 @@ out: return ret; } -static void spi_nor_region_mark_end(struct spi_nor_erase_region *region) -{ - region->flags |= SNOR_LAST_REGION; -} - static void spi_nor_region_mark_overlay(struct spi_nor_erase_region *region) { region->flags |= SNOR_OVERLAID_REGION; @@ -863,6 +857,7 @@ static int spi_nor_init_non_uniform_erase_map(struct spi_nor *nor, if (!region) return -ENOMEM; map->regions = region; + map->n_regions = region_count; uniform_erase_type = 0xff; regions_erase_type = 0; @@ -891,7 +886,6 @@ static int spi_nor_init_non_uniform_erase_map(struct spi_nor *nor, offset = region[i].offset + region[i].size; } - spi_nor_region_mark_end(®ion[i - 1]); save_uniform_erase_type = map->uniform_region.erase_mask; map->uniform_region.erase_mask = |