mtd: spi-nor: Add spansion_post_sfdp_fixups()
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>
This commit is contained in:
parent
2b12ae1f2f
commit
92094ebc38
|
@ -591,18 +591,6 @@ static u8 spi_nor_convert_3to4_erase(u8 opcode)
|
||||||
|
|
||||||
static void spi_nor_set_4byte_opcodes(struct spi_nor *nor)
|
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->read_opcode = spi_nor_convert_3to4_read(nor->read_opcode);
|
||||||
nor->program_opcode = spi_nor_convert_3to4_program(nor->program_opcode);
|
nor->program_opcode = spi_nor_convert_3to4_program(nor->program_opcode);
|
||||||
nor->erase_opcode = spi_nor_convert_3to4_erase(nor->erase_opcode);
|
nor->erase_opcode = spi_nor_convert_3to4_erase(nor->erase_opcode);
|
||||||
|
@ -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);
|
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
|
* 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
|
* after SFDP has been parsed (is also called for SPI NORs that do not
|
||||||
|
@ -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)
|
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)
|
if (nor->info->fixups && nor->info->fixups->post_sfdp)
|
||||||
nor->info->fixups->post_sfdp(nor);
|
nor->info->fixups->post_sfdp(nor);
|
||||||
}
|
}
|
||||||
|
@ -4862,8 +4872,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
|
||||||
nor->addr_width = 3;
|
nor->addr_width = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->flags & SPI_NOR_4B_OPCODES ||
|
if (info->flags & SPI_NOR_4B_OPCODES)
|
||||||
(JEDEC_MFR(info) == SNOR_MFR_SPANSION && mtd->size > SZ_16M))
|
|
||||||
nor->flags |= SNOR_F_4B_OPCODES;
|
nor->flags |= SNOR_F_4B_OPCODES;
|
||||||
|
|
||||||
if (nor->addr_width == 4 && nor->flags & SNOR_F_4B_OPCODES &&
|
if (nor->addr_width == 4 && nor->flags & SNOR_F_4B_OPCODES &&
|
||||||
|
|
Loading…
Reference in New Issue