aboutsummaryrefslogtreecommitdiff
path: root/libflash
diff options
context:
space:
mode:
authorCyril Bur <cyril.bur@au1.ibm.com>2015-06-23 13:22:10 +1000
committerStewart Smith <stewart@linux.vnet.ibm.com>2015-06-23 13:38:42 +1000
commit3e963531d74c6c931d5afd13c155c7144cff12f4 (patch)
tree501eb54c14b07b416208a919d187184f7d95992a /libflash
parent199be6b84faeff7ef03032c857766d4a023fbbb4 (diff)
downloadskiboot-3e963531d74c6c931d5afd13c155c7144cff12f4.zip
skiboot-3e963531d74c6c931d5afd13c155c7144cff12f4.tar.gz
skiboot-3e963531d74c6c931d5afd13c155c7144cff12f4.tar.bz2
libflash/blocklevel: add blocklevel flags.
It has become apparent that communication between blocklevel and its backend may be necessarily, at least so that the backend can inform blocklevel as to if an erase must be done before a write. An erase before flag isn't strictly necessary as erases can be performed regardless of whether they need to be or not, however, the caveat with that is that when erases don't need to be performed, this is likely due to the backend not having erase blocks and therefore it may be impossible to set a sane value for erase blocks which would be used to erase before write. This flag saves backends that don't need erases before write to have to lie about an erase block size. 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/blocklevel.h5
-rw-r--r--libflash/libflash.c1
2 files changed, 6 insertions, 0 deletions
diff --git a/libflash/blocklevel.h b/libflash/blocklevel.h
index 837e67e..310e274 100644
--- a/libflash/blocklevel.h
+++ b/libflash/blocklevel.h
@@ -29,6 +29,10 @@ struct blocklevel_range {
int total_prot;
};
+enum blocklevel_flags {
+ WRITE_NEED_ERASE = 1,
+};
+
/*
* libffs may be used with different backends, all should provide these for
* libflash to get the information it needs
@@ -45,6 +49,7 @@ struct blocklevel_device {
* Keep the erase mask so that blocklevel_erase() can do sanity checking
*/
uint32_t erase_mask;
+ enum blocklevel_flags flags;
struct blocklevel_range ecc_prot;
};
diff --git a/libflash/libflash.c b/libflash/libflash.c
index a142e17..55eafbe 100644
--- a/libflash/libflash.c
+++ b/libflash/libflash.c
@@ -838,6 +838,7 @@ bail:
c->bl.erase = &flash_erase;
c->bl.get_info = &flash_get_info;
c->bl.erase_mask = c->min_erase_mask;
+ c->bl.flags = WRITE_NEED_ERASE;
*bl = &(c->bl);
return 0;