aboutsummaryrefslogtreecommitdiff
path: root/libflash/libffs.c
diff options
context:
space:
mode:
Diffstat (limited to 'libflash/libffs.c')
-rw-r--r--libflash/libffs.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/libflash/libffs.c b/libflash/libffs.c
index c03c56a..f4aafd8 100644
--- a/libflash/libffs.c
+++ b/libflash/libffs.c
@@ -73,12 +73,12 @@ static int ffs_check_convert_header(struct ffs_hdr *dst, struct ffs_hdr *src)
}
int ffs_init(uint32_t offset, uint32_t max_size, struct blocklevel_device *bl,
- struct ffs_handle **ffs)
+ struct ffs_handle **ffs, int mark_ecc)
{
struct ffs_hdr hdr;
struct ffs_handle *f;
uint32_t total_size;
- int rc;
+ int rc, i;
if (!ffs || !bl)
return FLASH_ERR_PARM_ERROR;
@@ -140,6 +140,16 @@ int ffs_init(uint32_t offset, uint32_t max_size, struct blocklevel_device *bl,
goto out;
}
+ if (mark_ecc) {
+ uint32_t start, total_size;
+ bool ecc;
+ for (i = 0; i < f->hdr.entry_count; i++) {
+ ffs_part_info(f, i, NULL, &start, &total_size, NULL, &ecc);
+ if (ecc)
+ blocklevel_ecc_protect(bl, start, total_size);
+ }
+ }
+
out:
if (rc == 0)
*ffs = f;