On Sat, 24 Aug 2019 12:00:48 +0000 <Tudor.Ambarus@xxxxxxxxxxxxx> wrote: > From: Tudor Ambarus <tudor.ambarus@xxxxxxxxxxxxx> > > Get rid of MFR handling and implement specific manufacturer > default_init() fixup hooks. > > Signed-off-by: Tudor Ambarus <tudor.ambarus@xxxxxxxxxxxxx> > --- > drivers/mtd/spi-nor/spi-nor.c | 30 ++++++++++++++++++++---------- > 1 file changed, 20 insertions(+), 10 deletions(-) > > diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c > index fc9e14777212..f4e9fcca619f 100644 > --- a/drivers/mtd/spi-nor/spi-nor.c > +++ b/drivers/mtd/spi-nor/spi-nor.c > @@ -4146,6 +4146,16 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor, > return err; > } > > +static void atmel_set_default_init(struct spi_nor *nor) > +{ > + nor->params.disable_block_protection = spi_nor_clear_sr_bp; > +} > + > +static void intel_set_default_init(struct spi_nor *nor) > +{ > + nor->params.disable_block_protection = spi_nor_clear_sr_bp; That's weird: you can unlock blocks but locking is not explicitly flagged as supported (SNOR_F_HAS_LOCK is not set). Is that expected? > +} > + > static void macronix_set_default_init(struct spi_nor *nor) > { > nor->params.quad_enable = macronix_quad_enable; > @@ -4173,6 +4183,14 @@ static void spi_nor_manufacturer_init_params(struct spi_nor *nor) > { > /* Init flash parameters based on MFR */ > switch (JEDEC_MFR(nor->info)) { > + case SNOR_MFR_ATMEL: > + atmel_set_default_init(nor); > + break; > + > + case SNOR_MFR_INTEL: > + intel_set_default_init(nor); > + break; > + > case SNOR_MFR_MACRONIX: > macronix_set_default_init(nor); > break; > @@ -4760,18 +4778,10 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, > if (info->flags & SPI_S3AN) > nor->flags |= SNOR_F_READY_XSR_RDY; > > - if (info->flags & SPI_NOR_HAS_LOCK) > + if (info->flags & SPI_NOR_HAS_LOCK) { If this flag implies SR_BP-based locking we should really rename it into SPI_NOR_HAS_SR_BP_LOCK to avoid any confusion. > nor->flags |= SNOR_F_HAS_LOCK; > - > - /* > - * Atmel, SST, Intel/Numonyx, and others serial NOR tend to power up > - * with the software protection bits set. > - */ > - if (JEDEC_MFR(nor->info) == SNOR_MFR_ATMEL || > - JEDEC_MFR(nor->info) == SNOR_MFR_INTEL || > - JEDEC_MFR(nor->info) == SNOR_MFR_SST || > - nor->info->flags & SPI_NOR_HAS_LOCK) > nor->params.disable_block_protection = spi_nor_clear_sr_bp; > + } > > /* Init flash parameters based on flash_info struct and SFDP */ > spi_nor_init_params(nor); ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/