mtd: spi-nor: spansion: switch s25hx_t to use vreg_offset for quad_enable()
authorTudor Ambarus <tudor.ambarus@linaro.org>
Wed, 26 Jul 2023 07:52:56 +0000 (10:52 +0300)
committerTudor Ambarus <tudor.ambarus@linaro.org>
Wed, 26 Jul 2023 09:39:11 +0000 (12:39 +0300)
All s25hx_t flashes have single or multi chip flavors and already use
n_dice and vreg_offset in cypress_nor_sr_ready_and_clear. Switch s25hx_t
to always use vreg_offset for the quad_enable() method, so that we use
the same code base for both single and multi chip package flashes.

Tested-by: Takahiro Kuwano <Takahiro.Kuwano@infineon.com>
Link: https://lore.kernel.org/r/20230726075257.12985-11-tudor.ambarus@linaro.org
Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
drivers/mtd/spi-nor/spansion.c

index 30a3ffbfa381958766aa1aa5062994aa4e21014f..6abef5b515a197090ce95e80f48c18f06c04d6e2 100644 (file)
@@ -24,8 +24,6 @@
 #define SPINOR_REG_CYPRESS_STR1V                                       \
        (SPINOR_REG_CYPRESS_VREG + SPINOR_REG_CYPRESS_STR1)
 #define SPINOR_REG_CYPRESS_CFR1                        0x2
-#define SPINOR_REG_CYPRESS_CFR1V                                       \
-       (SPINOR_REG_CYPRESS_VREG + SPINOR_REG_CYPRESS_CFR1)
 #define SPINOR_REG_CYPRESS_CFR1_QUAD_EN                BIT(1)  /* Quad Enable */
 #define SPINOR_REG_CYPRESS_CFR2                        0x3
 #define SPINOR_REG_CYPRESS_CFR2V                                       \
@@ -348,10 +346,6 @@ static int cypress_nor_quad_enable_volatile(struct spi_nor *nor)
        u8 i;
        int ret;
 
-       if (!params->n_dice)
-               return cypress_nor_quad_enable_volatile_reg(nor,
-                                               SPINOR_REG_CYPRESS_CFR1V);
-
        for (i = 0; i < params->n_dice; i++) {
                addr = params->vreg_offset[i] + SPINOR_REG_CYPRESS_CFR1;
                ret = cypress_nor_quad_enable_volatile_reg(nor, addr);
@@ -657,15 +651,17 @@ static int s25hx_t_late_init(struct spi_nor *nor)
 {
        struct spi_nor_flash_parameter *params = nor->params;
 
+       if (!params->n_dice || !params->vreg_offset) {
+               dev_err(nor->dev, "%s failed. The volatile register offset could not be retrieved from SFDP.\n",
+                       __func__);
+               return -EOPNOTSUPP;
+       }
+
        /* Fast Read 4B requires mode cycles */
        params->reads[SNOR_CMD_READ_FAST].num_mode_clocks = 8;
-
+       params->ready = cypress_nor_sr_ready_and_clear;
        cypress_nor_ecc_init(nor);
 
-       /* Replace ready() with multi die version */
-       if (params->n_dice)
-               params->ready = cypress_nor_sr_ready_and_clear;
-
        return 0;
 }