aboutsummaryrefslogtreecommitdiff
path: root/libflash
diff options
context:
space:
mode:
authorCyril Bur <cyril.bur@au1.ibm.com>2015-06-23 13:22:14 +1000
committerStewart Smith <stewart@linux.vnet.ibm.com>2015-06-23 13:38:42 +1000
commitdf307e0eecf119a26be838428311199f23e43c69 (patch)
tree057fd186de920a8b0962c244d1e49ca6659b1c02 /libflash
parent29d1e6f7810982d2c8f057ae35a39c2ac0cf484b (diff)
downloadskiboot-df307e0eecf119a26be838428311199f23e43c69.zip
skiboot-df307e0eecf119a26be838428311199f23e43c69.tar.gz
skiboot-df307e0eecf119a26be838428311199f23e43c69.tar.bz2
libffs: init with ecc protection at blocklevel level
Passing a flag on libffs init will register all regions of the flash with ecc (as per the libffs partition information) as being ecc protected (or not). This saves the consumer needing to know or care about the presence of ecc. Reviewed-By: Alistair Popple <alistair@popple.id.au> Signed-off-by: Cyril Bur <cyril.bur@au1.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'libflash')
-rw-r--r--libflash/libffs.c14
-rw-r--r--libflash/libffs.h2
2 files changed, 13 insertions, 3 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;
diff --git a/libflash/libffs.h b/libflash/libffs.h
index a0040e9..ddf3793 100644
--- a/libflash/libffs.h
+++ b/libflash/libffs.h
@@ -38,7 +38,7 @@ struct ffs_handle;
/* Init */
int ffs_init(uint32_t offset, uint32_t max_size,
- struct blocklevel_device *bl, struct ffs_handle **ffs);
+ struct blocklevel_device *bl, struct ffs_handle **ffs, int mark_ecc);
/* ffs_open_image is Linux only as it uses lseek, which skiboot does not
* implement */