mtd: spi-nor: remove .setup() callback
authorMichael Walle <mwalle@kernel.org>
Fri, 19 Apr 2024 14:12:46 +0000 (16:12 +0200)
committerPratyush Yadav <pratyush@kernel.org>
Mon, 27 May 2024 15:07:15 +0000 (17:07 +0200)
With the removal of the Xilinx flashes, there is no more flash driver
using that hook. The original intention was to let the driver configure
special requirements like page size an opcodes.  This is already
possible by other means and it is unlikely a flash will overwrite the
(more or less complex) setup function.

Signed-off-by: Michael Walle <mwalle@kernel.org>
Reviewed-by: Pratyush Yadav <pratyush@kernel.org>
Acked-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Signed-off-by: Pratyush Yadav <pratyush@kernel.org>
Link: https://lore.kernel.org/r/20240419141249.609534-4-mwalle@kernel.org
drivers/mtd/spi-nor/core.c
drivers/mtd/spi-nor/core.h

index a7fe25456d0d910cccbc6c7def256671af917524..52e95c489544a3dc6bd79415ba321f2c19e2d71b 100644 (file)
@@ -2554,8 +2554,51 @@ static int spi_nor_select_erase(struct spi_nor *nor)
        return 0;
 }
 
-static int spi_nor_default_setup(struct spi_nor *nor,
-                                const struct spi_nor_hwcaps *hwcaps)
+static int spi_nor_set_addr_nbytes(struct spi_nor *nor)
+{
+       if (nor->params->addr_nbytes) {
+               nor->addr_nbytes = nor->params->addr_nbytes;
+       } else if (nor->read_proto == SNOR_PROTO_8_8_8_DTR) {
+               /*
+                * In 8D-8D-8D mode, one byte takes half a cycle to transfer. So
+                * in this protocol an odd addr_nbytes cannot be used because
+                * then the address phase would only span a cycle and a half.
+                * Half a cycle would be left over. We would then have to start
+                * the dummy phase in the middle of a cycle and so too the data
+                * phase, and we will end the transaction with half a cycle left
+                * over.
+                *
+                * Force all 8D-8D-8D flashes to use an addr_nbytes of 4 to
+                * avoid this situation.
+                */
+               nor->addr_nbytes = 4;
+       } else if (nor->info->addr_nbytes) {
+               nor->addr_nbytes = nor->info->addr_nbytes;
+       } else {
+               nor->addr_nbytes = 3;
+       }
+
+       if (nor->addr_nbytes == 3 && nor->params->size > 0x1000000) {
+               /* enable 4-byte addressing if the device exceeds 16MiB */
+               nor->addr_nbytes = 4;
+       }
+
+       if (nor->addr_nbytes > SPI_NOR_MAX_ADDR_NBYTES) {
+               dev_dbg(nor->dev, "The number of address bytes is too large: %u\n",
+                       nor->addr_nbytes);
+               return -EINVAL;
+       }
+
+       /* Set 4byte opcodes when possible. */
+       if (nor->addr_nbytes == 4 && nor->flags & SNOR_F_4B_OPCODES &&
+           !(nor->flags & SNOR_F_HAS_4BAIT))
+               spi_nor_set_4byte_opcodes(nor);
+
+       return 0;
+}
+
+static int spi_nor_setup(struct spi_nor *nor,
+                        const struct spi_nor_hwcaps *hwcaps)
 {
        struct spi_nor_flash_parameter *params = nor->params;
        u32 ignored_mask, shared_mask;
@@ -2612,64 +2655,6 @@ static int spi_nor_default_setup(struct spi_nor *nor,
                return err;
        }
 
-       return 0;
-}
-
-static int spi_nor_set_addr_nbytes(struct spi_nor *nor)
-{
-       if (nor->params->addr_nbytes) {
-               nor->addr_nbytes = nor->params->addr_nbytes;
-       } else if (nor->read_proto == SNOR_PROTO_8_8_8_DTR) {
-               /*
-                * In 8D-8D-8D mode, one byte takes half a cycle to transfer. So
-                * in this protocol an odd addr_nbytes cannot be used because
-                * then the address phase would only span a cycle and a half.
-                * Half a cycle would be left over. We would then have to start
-                * the dummy phase in the middle of a cycle and so too the data
-                * phase, and we will end the transaction with half a cycle left
-                * over.
-                *
-                * Force all 8D-8D-8D flashes to use an addr_nbytes of 4 to
-                * avoid this situation.
-                */
-               nor->addr_nbytes = 4;
-       } else if (nor->info->addr_nbytes) {
-               nor->addr_nbytes = nor->info->addr_nbytes;
-       } else {
-               nor->addr_nbytes = 3;
-       }
-
-       if (nor->addr_nbytes == 3 && nor->params->size > 0x1000000) {
-               /* enable 4-byte addressing if the device exceeds 16MiB */
-               nor->addr_nbytes = 4;
-       }
-
-       if (nor->addr_nbytes > SPI_NOR_MAX_ADDR_NBYTES) {
-               dev_dbg(nor->dev, "The number of address bytes is too large: %u\n",
-                       nor->addr_nbytes);
-               return -EINVAL;
-       }
-
-       /* Set 4byte opcodes when possible. */
-       if (nor->addr_nbytes == 4 && nor->flags & SNOR_F_4B_OPCODES &&
-           !(nor->flags & SNOR_F_HAS_4BAIT))
-               spi_nor_set_4byte_opcodes(nor);
-
-       return 0;
-}
-
-static int spi_nor_setup(struct spi_nor *nor,
-                        const struct spi_nor_hwcaps *hwcaps)
-{
-       int ret;
-
-       if (nor->params->setup)
-               ret = nor->params->setup(nor, hwcaps);
-       else
-               ret = spi_nor_default_setup(nor, hwcaps);
-       if (ret)
-               return ret;
-
        return spi_nor_set_addr_nbytes(nor);
 }
 
index 3043d583eac212136447b8569b49e44538ddad12..497957b6490665bec5f135f08e46687aef916c27 100644 (file)
@@ -366,10 +366,6 @@ struct spi_nor_otp {
  * @set_octal_dtr:     enables or disables SPI NOR octal DTR mode.
  * @quad_enable:       enables SPI NOR quad mode.
  * @set_4byte_addr_mode: puts the SPI NOR in 4 byte addressing mode.
- * @setup:             (optional) configures the SPI NOR memory. Useful for
- *                     SPI NOR flashes that have peculiarities to the SPI NOR
- *                     standard e.g. different opcodes, specific address
- *                     calculation, page size, etc.
  * @ready:             (optional) flashes might use a different mechanism
  *                     than reading the status register to indicate they
  *                     are ready for a new command
@@ -400,7 +396,6 @@ struct spi_nor_flash_parameter {
        int (*set_octal_dtr)(struct spi_nor *nor, bool enable);
        int (*quad_enable)(struct spi_nor *nor);
        int (*set_4byte_addr_mode)(struct spi_nor *nor, bool enable);
-       int (*setup)(struct spi_nor *nor, const struct spi_nor_hwcaps *hwcaps);
        int (*ready)(struct spi_nor *nor);
 
        const struct spi_nor_locking_ops *locking_ops;