Skip to content

Commit

Permalink
drivers: flash: soc_flash_mcux: remove CMD_MARGIN_CHECK
Browse files Browse the repository at this point in the history
The CMD_BLANK_CHECK can return errors when the flash is readable, and
should only be used after programming, not in is_area_readable().  From
the LPC55S69 datasheet: "As cells age and lose charge, a correctly
programmed address will fail this check, while still being able to be
read successfully for the remaining duration of the data retention time."

Signed-off-by: Derek Snell <[email protected]>
(cherry picked from commit 88b9cb6)
  • Loading branch information
DerekSnell authored and github-actions[bot] committed Jan 6, 2025
1 parent f02f283 commit 11027c6
Showing 1 changed file with 6 additions and 14 deletions.
20 changes: 6 additions & 14 deletions drivers/flash/soc_flash_mcux.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ static uint32_t get_cmd_status(uint32_t cmd, uint32_t addr, size_t len)
}

/* This function prevents erroneous reading. Some ECC enabled devices will
* crash when reading an erased or wrongly programmed area.
* crash when reading an erased area.
*/
static status_t is_area_readable(uint32_t addr, size_t len)
{
Expand All @@ -97,21 +97,13 @@ static status_t is_area_readable(uint32_t addr, size_t len)

key = irq_lock();

/* Check if the are is correctly programmed and can be read. */
status = get_cmd_status(FMC_CMD_MARGIN_CHECK, addr, len);
if (status & FMC_STATUS_FAILURES) {
/* If the area was erased, ECC errors are triggered on read. */
status = get_cmd_status(FMC_CMD_BLANK_CHECK, addr, len);
if (!(status & FMC_STATUS_FAIL)) {
LOG_DBG("read request on erased addr:0x%08x size:%d",
addr, len);
irq_unlock(key);
return -ENODATA;
}
LOG_DBG("read request error for addr:0x%08x size:%d",
/* If the area was erased, ECC errors are triggered on read. */
status = get_cmd_status(FMC_CMD_BLANK_CHECK, addr, len);
if (!(status & FMC_STATUS_FAIL)) {
LOG_DBG("read request on erased addr:0x%08x size:%d",
addr, len);
irq_unlock(key);
return -EIO;
return -ENODATA;
}

irq_unlock(key);
Expand Down

0 comments on commit 11027c6

Please sign in to comment.