Commit 7d2ac022 authored by Derek Snell's avatar Derek Snell Committed by Mahesh Mahadevan
Browse files

drivers: flash: soc_flash_mcux: remove CMD_MARGIN_CHECK

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: default avatarDerek Snell <derek.snell@nxp.com>
(cherry picked from commit 88b9cb6e)
parent 72a1c809
Loading
Loading
Loading
Loading
+1 −9
Changes for drivers/flash/soc_flash_mcux.c: 1 added line, 9 removed lines.
Original line number Diff line number Diff line
@@ -93,7 +93,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)
{
@@ -102,9 +102,6 @@ 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)) {
@@ -113,11 +110,6 @@ static status_t is_area_readable(uint32_t addr, size_t len)
		irq_unlock(key);
		return -ENODATA;
	}
		LOG_DBG("read request error for addr:0x%08x size:%d",
			addr, len);
		irq_unlock(key);
		return -EIO;
	}

	irq_unlock(key);