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>
This commit is contained in:
committed by
Maureen Helm
parent
157b0ddc15
commit
c42c8a4da4
@@ -1284,24 +1284,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