diff options
author | Tudor Ambarus <tudor.ambarus@linaro.org> | 2023-04-07 09:40:58 +0300 |
---|---|---|
committer | Tudor Ambarus <tudor.ambarus@linaro.org> | 2023-04-08 09:30:17 +0300 |
commit | e570f7872a34dc290014c80c7bad365d6577836b (patch) | |
tree | 60a17aa72e72abb7d89eabc2eb629095d02639f7 /drivers/mtd/spi-nor/spansion.c | |
parent | 120c94a67b26e4014597fc9f872803621e7a2514 (diff) | |
download | linux-e570f7872a34dc290014c80c7bad365d6577836b.tar.xz |
mtd: spi-nor: Allow post_sfdp hook to return errors
Multi die flashes like s25hl02gt need to determine the page_size at
run-time by querying a configuration register for each die. Since the
number of dice is determined in an optional SFDP table, SCCR MC, the
page size configuration must be done in the post_sfdp hook. Allow
post_sfdp to return errors, as reading the configuration register might
return errors.
Link: https://lore.kernel.org/r/924ab710f128448ec62537cfbb377336e390043c.1680849425.git.Takahiro.Kuwano@infineon.com
Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Diffstat (limited to 'drivers/mtd/spi-nor/spansion.c')
-rw-r--r-- | drivers/mtd/spi-nor/spansion.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/mtd/spi-nor/spansion.c b/drivers/mtd/spi-nor/spansion.c index c937f0ac61de..519fdad79a19 100644 --- a/drivers/mtd/spi-nor/spansion.c +++ b/drivers/mtd/spi-nor/spansion.c @@ -370,7 +370,7 @@ s25fs256t_post_bfpt_fixup(struct spi_nor *nor, return cypress_nor_get_page_size(nor); } -static void s25fs256t_post_sfdp_fixup(struct spi_nor *nor) +static int s25fs256t_post_sfdp_fixup(struct spi_nor *nor) { struct spi_nor_flash_parameter *params = nor->params; @@ -379,6 +379,8 @@ static void s25fs256t_post_sfdp_fixup(struct spi_nor *nor) spi_nor_set_pp_settings(¶ms->page_programs[SNOR_CMD_PP_1_1_4], SPINOR_OP_PP_1_1_4_4B, SNOR_PROTO_1_1_4); + + return 0; } static void s25fs256t_late_init(struct spi_nor *nor) @@ -409,7 +411,7 @@ s25hx_t_post_bfpt_fixup(struct spi_nor *nor, return cypress_nor_get_page_size(nor); } -static void s25hx_t_post_sfdp_fixup(struct spi_nor *nor) +static int s25hx_t_post_sfdp_fixup(struct spi_nor *nor) { struct spi_nor_erase_type *erase_type = nor->params->erase_map.erase_type; @@ -431,6 +433,8 @@ static void s25hx_t_post_sfdp_fixup(struct spi_nor *nor) break; } } + + return 0; } static void s25hx_t_late_init(struct spi_nor *nor) @@ -463,7 +467,7 @@ static int cypress_nor_octal_dtr_enable(struct spi_nor *nor, bool enable) cypress_nor_octal_dtr_dis(nor); } -static void s28hx_t_post_sfdp_fixup(struct spi_nor *nor) +static int s28hx_t_post_sfdp_fixup(struct spi_nor *nor) { /* * On older versions of the flash the xSPI Profile 1.0 table has the @@ -489,6 +493,8 @@ static void s28hx_t_post_sfdp_fixup(struct spi_nor *nor) * actual value for that is 4. */ nor->params->rdsr_addr_nbytes = 4; + + return 0; } static int s28hx_t_post_bfpt_fixup(struct spi_nor *nor, |