mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
mtd: spi-nor: Create a structure containing the flash opcodes
Create a structure named opcodes in the flash parameters structures to store all the flash specific opcodes. They are typically discovered dynamically through SFDP parsing. Move the die_erase opcode inside. Later on we will add new fields there, like the supported opcodes for accessing the status registers, which are almost vendor specific. No fonctional change. Reviewed-by: Takahiro Kuwano <takahiro.kuwano@infineon.com> Reviewed-by: Michael Walle <mwalle@kernel.org> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Signed-off-by: Michael Walle <mwalle@kernel.org>
This commit is contained in:
parent
a885b694af
commit
01771ff25f
|
|
@ -1142,7 +1142,7 @@ static int spi_nor_erase_die(struct spi_nor *nor, loff_t addr, size_t die_size)
|
|||
|
||||
if (nor->spimem) {
|
||||
struct spi_mem_op op =
|
||||
SPI_NOR_DIE_ERASE_OP(nor->params->die_erase_opcode,
|
||||
SPI_NOR_DIE_ERASE_OP(nor->params->opcodes.die_erase,
|
||||
nor->addr_nbytes, addr, multi_die);
|
||||
|
||||
spi_nor_spimem_setup_op(nor, &op, nor->reg_proto);
|
||||
|
|
@ -3023,8 +3023,8 @@ static int spi_nor_late_init_params(struct spi_nor *nor)
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (!nor->params->die_erase_opcode)
|
||||
nor->params->die_erase_opcode = SPINOR_OP_CHIP_ERASE;
|
||||
if (!nor->params->opcodes.die_erase)
|
||||
nor->params->opcodes.die_erase = SPINOR_OP_CHIP_ERASE;
|
||||
|
||||
/* Default method kept for backward compatibility. */
|
||||
if (!params->set_4byte_addr_mode)
|
||||
|
|
|
|||
|
|
@ -342,6 +342,16 @@ struct spi_nor_otp {
|
|||
const struct spi_nor_otp_ops *ops;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct spi_nor_opcodes - SPI NOR flash specific opcodes.
|
||||
* List of variable opcodes used by the chip.
|
||||
*
|
||||
* @die_erase: opcode for erasing a die, defaults to SPINOR_OP_CHIP_ERASE
|
||||
*/
|
||||
struct spi_nor_opcodes {
|
||||
u8 die_erase;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct spi_nor_flash_parameter - SPI NOR flash parameters and settings.
|
||||
* Includes legacy flash parameters and settings that can be overwritten
|
||||
|
|
@ -365,7 +375,6 @@ struct spi_nor_otp {
|
|||
* command in octal DTR mode.
|
||||
* @n_banks: number of banks.
|
||||
* @n_dice: number of dice in the flash memory.
|
||||
* @die_erase_opcode: die erase opcode. Defaults to SPINOR_OP_CHIP_ERASE.
|
||||
* @vreg_offset: volatile register offset for each die.
|
||||
* @hwcaps: describes the read and page program hardware
|
||||
* capabilities.
|
||||
|
|
@ -398,7 +407,6 @@ struct spi_nor_flash_parameter {
|
|||
u8 rdsr_addr_nbytes;
|
||||
u8 n_banks;
|
||||
u8 n_dice;
|
||||
u8 die_erase_opcode;
|
||||
u32 *vreg_offset;
|
||||
|
||||
struct spi_nor_hwcaps hwcaps;
|
||||
|
|
@ -406,6 +414,7 @@ struct spi_nor_flash_parameter {
|
|||
struct spi_nor_pp_command page_programs[SNOR_CMD_PP_MAX];
|
||||
enum spi_nor_cmd_ext cmd_ext_type;
|
||||
|
||||
struct spi_nor_opcodes opcodes;
|
||||
struct spi_nor_erase_map erase_map;
|
||||
struct spi_nor_otp otp;
|
||||
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ static int spi_nor_params_show(struct seq_file *s, void *data)
|
|||
}
|
||||
|
||||
string_get_size(params->size, 1, STRING_UNITS_2, buf, sizeof(buf));
|
||||
seq_printf(s, " %02x (%s)\n", params->die_erase_opcode, buf);
|
||||
seq_printf(s, " %02x (%s)\n", params->opcodes.die_erase, buf);
|
||||
|
||||
seq_puts(s, "\nsector map\n");
|
||||
seq_puts(s, " region (in hex) | erase mask | overlaid\n");
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ static int micron_st_nor_four_die_late_init(struct spi_nor *nor)
|
|||
{
|
||||
struct spi_nor_flash_parameter *params = nor->params;
|
||||
|
||||
params->die_erase_opcode = SPINOR_OP_MT_DIE_ERASE;
|
||||
params->opcodes.die_erase = SPINOR_OP_MT_DIE_ERASE;
|
||||
params->n_dice = 4;
|
||||
|
||||
/*
|
||||
|
|
@ -147,7 +147,7 @@ static int micron_st_nor_two_die_late_init(struct spi_nor *nor)
|
|||
{
|
||||
struct spi_nor_flash_parameter *params = nor->params;
|
||||
|
||||
params->die_erase_opcode = SPINOR_OP_MT_DIE_ERASE;
|
||||
params->opcodes.die_erase = SPINOR_OP_MT_DIE_ERASE;
|
||||
params->n_dice = 2;
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -677,7 +677,7 @@ static int s25hx_t_late_init(struct spi_nor *nor)
|
|||
cypress_nor_ecc_init(nor);
|
||||
|
||||
if (params->n_dice > 1)
|
||||
params->die_erase_opcode = SPINOR_OP_CYPRESS_DIE_ERASE;
|
||||
params->opcodes.die_erase = SPINOR_OP_CYPRESS_DIE_ERASE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -765,7 +765,7 @@ static int s28hx_t_late_init(struct spi_nor *nor)
|
|||
cypress_nor_ecc_init(nor);
|
||||
|
||||
if (params->n_dice > 1)
|
||||
params->die_erase_opcode = SPINOR_OP_CYPRESS_DIE_ERASE;
|
||||
params->opcodes.die_erase = SPINOR_OP_CYPRESS_DIE_ERASE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user