aboutsummaryrefslogtreecommitdiff
path: root/core/flash.c
diff options
context:
space:
mode:
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;