drivers: flash: stm32 ospi: do not invalidate bet at end of loop
This modification prevents the bet pointer from being nulled at the end
of the loop, which would otherwise render the search for a suitable
erase type ineffective. It also optimize the loop as it omits
unnecessary operations.
Without this change, the erase size defaults to one sector. If the chip
defines fewer than JESD216_NUM_ERASE_TYPES (=4) erase types, this
behavior still works, as the resulting command will correspond to a
sector erase operation. However, if the chip defines all erase types,
the resulting command will be the one specified in the erase type. But
since bet is nulled, the erase size will incorrectly default to the
sector size.
Signed-off-by: Martin Gysel <me@bearsh.org>
(cherry picked from commit c42c8a4da4)
This commit is contained in:
committed by
github-actions[bot]
parent
cffdb1d8cf
commit
4bb922cb08
@@ -1293,24 +1293,23 @@ static int flash_stm32_ospi_erase(const struct device *dev, off_t addr,
|
||||
&& ((bet == NULL)
|
||||
|| (etp->exp > bet->exp))) {
|
||||
bet = etp;
|
||||
cmd_erase.Instruction = bet->cmd;
|
||||
} else if (bet == NULL) {
|
||||
/* Use the default sector erase cmd */
|
||||
if (dev_cfg->data_mode == OSPI_OPI_MODE) {
|
||||
cmd_erase.Instruction = SPI_NOR_OCMD_SE;
|
||||
} else {
|
||||
cmd_erase.Instruction =
|
||||
(stm32_ospi_hal_address_size(dev) ==
|
||||
HAL_OSPI_ADDRESS_32_BITS)
|
||||
? SPI_NOR_CMD_SE_4B
|
||||
: SPI_NOR_CMD_SE;
|
||||
}
|
||||
}
|
||||
/* Avoid using wrong erase type,
|
||||
* if zero entries are found in erase_types
|
||||
*/
|
||||
bet = NULL;
|
||||
}
|
||||
|
||||
if (bet != NULL) {
|
||||
cmd_erase.Instruction = bet->cmd;
|
||||
} else {
|
||||
/* Use the default sector erase cmd */
|
||||
if (dev_cfg->data_mode == OSPI_OPI_MODE) {
|
||||
cmd_erase.Instruction = SPI_NOR_OCMD_SE;
|
||||
} else {
|
||||
cmd_erase.Instruction = (stm32_ospi_hal_address_size(dev) ==
|
||||
HAL_OSPI_ADDRESS_32_BITS)
|
||||
? SPI_NOR_CMD_SE_4B
|
||||
: SPI_NOR_CMD_SE;
|
||||
}
|
||||
}
|
||||
|
||||
LOG_DBG("Sector/Block Erase addr 0x%x, asize 0x%x amode 0x%x instr 0x%x",
|
||||
cmd_erase.Address, cmd_erase.AddressSize,
|
||||
cmd_erase.AddressMode, cmd_erase.Instruction);
|
||||
|
||||
Reference in New Issue
Block a user