summaryrefslogtreecommitdiff
path: root/src/flash/nand.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/flash/nand.c')
-rw-r--r--src/flash/nand.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/flash/nand.c b/src/flash/nand.c
index 2b3b5170..7946e344 100644
--- a/src/flash/nand.c
+++ b/src/flash/nand.c
@@ -689,6 +689,8 @@ int nand_erase(struct nand_device_s *device, int first_block, int last_block)
LOG_ERROR("erase operation didn't pass, status: 0x%2.2x", status);
return ERROR_NAND_OPERATION_FAILED;
}
+
+ device->blocks[i].is_erased = 1;
}
return ERROR_OK;
@@ -770,9 +772,15 @@ int nand_write_plain(struct nand_device_s *device, u32 address, u8 *data, u32 da
int nand_write_page(struct nand_device_s *device, u32 page, u8 *data, u32 data_size, u8 *oob, u32 oob_size)
{
+ u32 block;
+
if (!device->device)
return ERROR_NAND_DEVICE_NOT_PROBED;
+ block = page / (device->erase_size / device->page_size);
+ if (device->blocks[block].is_erased == 1)
+ device->blocks[block].is_erased = 0;
+
if (device->use_raw || device->controller->write_page == NULL)
return nand_write_page_raw(device, page, data, data_size, oob, oob_size);
else