aboutsummaryrefslogtreecommitdiff
path: root/core/flash.c
diff options
context:
space:
mode:
authorCyril Bur <cyril.bur@au1.ibm.com>2015-06-02 10:51:02 +1000
committerStewart Smith <stewart@linux.vnet.ibm.com>2015-06-09 16:37:33 +1000
commit39d9e14cdeef9a20e3da05d527b136de65e39904 (patch)
tree13246271b2b9fba1dbfc0a6729ca84223668e6cf /core/flash.c
parent1fd9d5afc6aff3870695110c74a4a9daa88e5c81 (diff)
downloadskiboot-39d9e14cdeef9a20e3da05d527b136de65e39904.zip
skiboot-39d9e14cdeef9a20e3da05d527b136de65e39904.tar.gz
skiboot-39d9e14cdeef9a20e3da05d527b136de65e39904.tar.bz2
libflash: start using the blocklevel interface.
Converted all the libflash calls to use the blocklevel interface, modified all callers to libflash to use the blocklevel interface. This patch should introduce next to no functional change. Signed-off-by: Cyril Bur <cyril.bur@au1.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'core/flash.c')
-rw-r--r--core/flash.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/core/flash.c b/core/flash.c
index 601a9ab..7cd9153 100644
--- a/core/flash.c
+++ b/core/flash.c
@@ -22,12 +22,13 @@
#include <device.h>
#include <libflash/libflash.h>
#include <libflash/libffs.h>
+#include <libflash/blocklevel.h>
#include <ecc.h>
struct flash {
bool registered;
bool busy;
- struct flash_chip *chip;
+ struct blocklevel_device *bl;
uint32_t size;
uint32_t block_size;
};
@@ -108,7 +109,7 @@ static int flash_nvram_start_read(void *dst, uint32_t src, uint32_t len)
goto out;
}
- rc = flash_read(nvram_flash->chip, nvram_offset + src, dst, len);
+ rc = blocklevel_read(nvram_flash->bl, nvram_offset + src, dst, len);
out:
unlock(&flash_lock);
@@ -137,7 +138,7 @@ static int flash_nvram_write(uint32_t dst, void *src, uint32_t len)
rc = OPAL_PARAMETER;
goto out;
}
- rc = flash_smart_write(nvram_flash->chip, nvram_offset + dst, src, len);
+ rc = blocklevel_write(nvram_flash->bl, nvram_offset + dst, src, len);
out:
unlock(&flash_lock);
@@ -222,7 +223,7 @@ static void setup_system_flash(struct flash *flash, struct dt_node *node,
flash_nvram_probe(flash, ffs);
}
-int flash_register(struct flash_chip *chip, bool is_system_flash)
+int flash_register(struct blocklevel_device *bl, bool is_system_flash)
{
uint32_t size, block_size;
struct ffs_handle *ffs;
@@ -232,7 +233,7 @@ int flash_register(struct flash_chip *chip, bool is_system_flash)
unsigned int i;
int rc;
- rc = flash_get_info(chip, &name, &size, &block_size);
+ rc = blocklevel_get_info(bl, &name, &size, &block_size);
if (rc)
return rc;
@@ -248,7 +249,7 @@ int flash_register(struct flash_chip *chip, bool is_system_flash)
flash = &flashes[i];
flash->registered = true;
flash->busy = false;
- flash->chip = chip;
+ flash->bl = bl;
flash->size = size;
flash->block_size = block_size;
break;
@@ -260,7 +261,7 @@ int flash_register(struct flash_chip *chip, bool is_system_flash)
return OPAL_RESOURCE;
}
- rc = ffs_open_flash(chip, 0, flash->size, &ffs);
+ rc = ffs_init(0, flash->size, bl, &ffs);
if (rc) {
prlog(PR_WARNING, "FLASH: No ffs info; "
"using raw device only\n");
@@ -318,13 +319,17 @@ static int64_t opal_flash_op(enum flash_op op, uint64_t id, uint64_t offset,
switch (op) {
case FLASH_OP_READ:
- rc = flash_read(flash->chip, offset, (void *)buf, size);
+ rc = blocklevel_read(flash->bl, offset, (void *)buf, size);
break;
case FLASH_OP_WRITE:
- rc = flash_write(flash->chip, offset, (void *)buf, size, false);
+ /*
+ * Note: blocklevel_write() uses flash_smart_write(), this call used to
+ * be flash_write()
+ */
+ rc = blocklevel_write(flash->bl, offset, (void *)buf, size);
break;
case FLASH_OP_ERASE:
- rc = flash_erase(flash->chip, offset, size);
+ rc = blocklevel_erase(flash->bl, offset, size);
break;
default:
assert(0);
@@ -397,7 +402,7 @@ struct flash_hostboot_header {
};
/* start and total size include ECC */
-static int flash_find_subpartition(struct flash_chip *chip, uint32_t subid,
+static int flash_find_subpartition(struct blocklevel_device *bl, uint32_t subid,
uint32_t *start, uint32_t *total_size,
bool *ecc)
{
@@ -416,7 +421,7 @@ static int flash_find_subpartition(struct flash_chip *chip, uint32_t subid,
partsize = BUFFER_SIZE_MINUS_ECC(*total_size);
/* Get the TOC */
- rc = flash_read_corrected(chip, *start, header,
+ rc = flash_read_corrected(bl, *start, header,
FLASH_SUBPART_HEADER_SIZE, ecc);
if (rc) {
prerror("FLASH: flash subpartition TOC read failed %i\n", rc);
@@ -536,7 +541,7 @@ static int flash_load_resource(enum resource_id id, uint32_t subid,
goto out_unlock;
}
- rc = ffs_open_flash(flash->chip, 0, flash->size, &ffs);
+ rc = ffs_init(0, flash->size, flash->bl, &ffs);
if (rc) {
prerror("FLASH: Can't open ffs handle\n");
goto out_unlock;
@@ -563,7 +568,7 @@ static int flash_load_resource(enum resource_id id, uint32_t subid,
/* Find the sub partition if required */
if (subid != RESOURCE_SUBID_NONE) {
- rc = flash_find_subpartition(flash->chip, subid, &part_start,
+ rc = flash_find_subpartition(flash->bl, subid, &part_start,
&part_size, &ecc);
if (rc)
goto out_free_ffs;
@@ -586,7 +591,7 @@ static int flash_load_resource(enum resource_id id, uint32_t subid,
goto out_free_ffs;
}
- rc = flash_read_corrected(flash->chip, part_start, buf, size, ecc);
+ rc = flash_read_corrected(flash->bl, part_start, buf, size, ecc);
if (rc) {
prerror("FLASH: failed to read %s partition\n", name);
goto out_free_ffs;