Skip to content

Commit

Permalink
mtd: spi-nor: Add spansion_post_sfdp_fixups()
Browse files Browse the repository at this point in the history
Add a spansion_post_sfdp_fixups() function to fix the erase opcode,
erase sector size and set the SNOR_F_4B_OPCODES flag.
This way, all spansion related quirks are placed in the
spansion_post_sfdp_fixups() function.

Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
Reviewed-by: Vignesh Raghavendra <vigneshr@ti.com>
  • Loading branch information
Boris Brezillon authored and Tudor Ambarus committed Aug 28, 2019
1 parent 2b12ae1 commit 92094eb
Showing 1 changed file with 23 additions and 14 deletions.
37 changes: 23 additions & 14 deletions drivers/mtd/spi-nor/spi-nor.c
Original file line number Diff line number Diff line change
Expand Up @@ -591,18 +591,6 @@ static u8 spi_nor_convert_3to4_erase(u8 opcode)

static void spi_nor_set_4byte_opcodes(struct spi_nor *nor)
{
/* Do some manufacturer fixups first */
switch (JEDEC_MFR(nor->info)) {
case SNOR_MFR_SPANSION:
/* No small sector erase for 4-byte command set */
nor->erase_opcode = SPINOR_OP_SE;
nor->mtd.erasesize = nor->info->sector_size;
break;

default:
break;
}

nor->read_opcode = spi_nor_convert_3to4_read(nor->read_opcode);
nor->program_opcode = spi_nor_convert_3to4_program(nor->program_opcode);
nor->erase_opcode = spi_nor_convert_3to4_erase(nor->erase_opcode);
Expand Down Expand Up @@ -4304,6 +4292,19 @@ static void spi_nor_info_init_params(struct spi_nor *nor)
spi_nor_init_uniform_erase_map(map, erase_mask, params->size);
}

static void spansion_post_sfdp_fixups(struct spi_nor *nor)
{
struct mtd_info *mtd = &nor->mtd;

if (mtd->size <= SZ_16M)
return;

nor->flags |= SNOR_F_4B_OPCODES;
/* No small sector erase for 4-byte command set */
nor->erase_opcode = SPINOR_OP_SE;
nor->mtd.erasesize = nor->info->sector_size;
}

/**
* spi_nor_post_sfdp_fixups() - Updates the flash's parameters and settings
* after SFDP has been parsed (is also called for SPI NORs that do not
Expand All @@ -4316,6 +4317,15 @@ static void spi_nor_info_init_params(struct spi_nor *nor)
*/
static void spi_nor_post_sfdp_fixups(struct spi_nor *nor)
{
switch (JEDEC_MFR(nor->info)) {
case SNOR_MFR_SPANSION:
spansion_post_sfdp_fixups(nor);
break;

default:
break;
}

if (nor->info->fixups && nor->info->fixups->post_sfdp)
nor->info->fixups->post_sfdp(nor);
}
Expand Down Expand Up @@ -4862,8 +4872,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
nor->addr_width = 3;
}

if (info->flags & SPI_NOR_4B_OPCODES ||
(JEDEC_MFR(info) == SNOR_MFR_SPANSION && mtd->size > SZ_16M))
if (info->flags & SPI_NOR_4B_OPCODES)
nor->flags |= SNOR_F_4B_OPCODES;

if (nor->addr_width == 4 && nor->flags & SNOR_F_4B_OPCODES &&
Expand Down

0 comments on commit 92094eb

Please sign in to comment.