summaryrefslogtreecommitdiff
path: root/common/aboot.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/aboot.c')
-rw-r--r--common/aboot.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/common/aboot.c b/common/aboot.c
index 7f412ac0ad..6d76c1e758 100644
--- a/common/aboot.c
+++ b/common/aboot.c
@@ -52,6 +52,8 @@ typedef struct sparse_buffer {
u16 type;
} sparse_buffer_t;
+static uint32_t last_offset;
+
static unsigned int sparse_get_chunk_data_size(sparse_header_t *sparse,
chunk_header_t *chunk)
{
@@ -301,10 +303,19 @@ int store_sparse_image(sparse_storage_t *storage, void *storage_priv,
return -EINVAL;
}
- puts("Flashing Sparse Image\n");
+ /*
+ * If it's a new flashing session, start at the beginning of
+ * the partition. If not, then simply resume where we were.
+ */
+ if (session_id > 0)
+ start = last_offset;
+ else
+ start = storage->start;
+
+ printf("Flashing sparse image on partition %s at offset 0x%x (ID: %d)\n",
+ storage->name, start * storage->block_sz, session_id);
/* Start processing chunks */
- start = storage->start;
for (chunk = 0; chunk < sparse_header->total_chunks; chunk++) {
uint32_t blkcnt;
@@ -376,5 +387,7 @@ int store_sparse_image(sparse_storage_t *storage, void *storage_priv,
return -EIO;
}
+ last_offset = start + total_blocks;
+
return 0;
}