mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
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
1 changed files with 23 additions and 14 deletions
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 &&
|
||||
|
|
Loading…
Reference in a new issue