summaryrefslogtreecommitdiff
path: root/drivers/mtd/spi-nor/sfdp.c
diff options
context:
space:
mode:
authorTakahiro Kuwano <Takahiro.Kuwano@infineon.com>2024-02-20 11:34:07 +0300
committerTudor Ambarus <tudor.ambarus@linaro.org>2024-02-26 14:17:43 +0300
commitdf6e36edac23f096fae45d0a8fe2efcf0e77aebe (patch)
treea9f2d4d20ed68b72d68afeb0a797421b58adea7f /drivers/mtd/spi-nor/sfdp.c
parent0e164238bb0752e341f01639438c35822d4488b2 (diff)
downloadlinux-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.c18
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(&region[i - 1]);
save_uniform_erase_type = map->uniform_region.erase_mask;
map->uniform_region.erase_mask =