mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
fastboot: sparse: remove session-id logic
This "session-id" alogrithm is not required, and currently corrupts the stored image whenever more the one "session" is required. Signed-off-by: Steve Rae <srae@broadcom.com>
This commit is contained in:
parent
ac6e5fed31
commit
64ece84854
7 changed files with 16 additions and 45 deletions
|
@ -97,9 +97,8 @@ static void write_raw_image(struct blk_desc *dev_desc, disk_partition_t *info,
|
|||
fastboot_okay(response_str, "");
|
||||
}
|
||||
|
||||
void fb_mmc_flash_write(const char *cmd, unsigned int session_id,
|
||||
void *download_buffer, unsigned int download_bytes,
|
||||
char *response)
|
||||
void fb_mmc_flash_write(const char *cmd, void *download_buffer,
|
||||
unsigned int download_bytes, char *response)
|
||||
{
|
||||
struct blk_desc *dev_desc;
|
||||
disk_partition_t info;
|
||||
|
@ -153,8 +152,7 @@ void fb_mmc_flash_write(const char *cmd, unsigned int session_id,
|
|||
printf("Flashing sparse image at offset " LBAFU "\n",
|
||||
info.start);
|
||||
|
||||
store_sparse_image(&sparse, &sparse_priv, session_id,
|
||||
download_buffer);
|
||||
store_sparse_image(&sparse, &sparse_priv, download_buffer);
|
||||
} else {
|
||||
write_raw_image(dev_desc, &info, cmd, download_buffer,
|
||||
download_bytes);
|
||||
|
|
|
@ -126,7 +126,7 @@ static int fb_nand_sparse_write(struct sparse_storage *storage,
|
|||
return written / storage->block_sz;
|
||||
}
|
||||
|
||||
void fb_nand_flash_write(const char *partname, unsigned int session_id,
|
||||
void fb_nand_flash_write(const char *partname,
|
||||
void *download_buffer, unsigned int download_bytes,
|
||||
char *response)
|
||||
{
|
||||
|
@ -161,7 +161,7 @@ void fb_nand_flash_write(const char *partname, unsigned int session_id,
|
|||
sparse.name = part->name;
|
||||
sparse.write = fb_nand_sparse_write;
|
||||
|
||||
ret = store_sparse_image(&sparse, &sparse_priv, session_id,
|
||||
ret = store_sparse_image(&sparse, &sparse_priv,
|
||||
download_buffer);
|
||||
} else {
|
||||
printf("Flashing raw image at offset 0x%llx\n",
|
||||
|
|
|
@ -52,8 +52,6 @@ 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)
|
||||
{
|
||||
|
@ -267,8 +265,8 @@ static void sparse_put_data_buffer(sparse_buffer_t *buffer)
|
|||
free(buffer);
|
||||
}
|
||||
|
||||
int store_sparse_image(sparse_storage_t *storage, void *storage_priv,
|
||||
unsigned int session_id, void *data)
|
||||
int store_sparse_image(sparse_storage_t *storage,
|
||||
void *storage_priv, void *data)
|
||||
{
|
||||
unsigned int chunk, offset;
|
||||
sparse_header_t *sparse_header;
|
||||
|
@ -303,19 +301,10 @@ int store_sparse_image(sparse_storage_t *storage, void *storage_priv,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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);
|
||||
puts("Flashing Sparse Image\n");
|
||||
|
||||
/* Start processing chunks */
|
||||
start = storage->start;
|
||||
for (chunk = 0; chunk < sparse_header->total_chunks; chunk++) {
|
||||
uint32_t blkcnt;
|
||||
|
||||
|
@ -390,7 +379,5 @@ int store_sparse_image(sparse_storage_t *storage, void *storage_priv,
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
last_offset = start + total_blocks;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -59,7 +59,6 @@ static inline struct f_fastboot *func_to_fastboot(struct usb_function *f)
|
|||
}
|
||||
|
||||
static struct f_fastboot *fastboot_func;
|
||||
static unsigned int fastboot_flash_session_id;
|
||||
static unsigned int download_size;
|
||||
static unsigned int download_bytes;
|
||||
|
||||
|
@ -424,15 +423,6 @@ static void cb_getvar(struct usb_ep *ep, struct usb_request *req)
|
|||
|
||||
sprintf(str_num, "0x%08x", CONFIG_FASTBOOT_BUF_SIZE);
|
||||
strncat(response, str_num, chars_left);
|
||||
|
||||
/*
|
||||
* This also indicates the start of a new flashing
|
||||
* "session", in which we could have 1-N buffers to
|
||||
* write to a partition.
|
||||
*
|
||||
* Reset our session counter.
|
||||
*/
|
||||
fastboot_flash_session_id = 0;
|
||||
} else if (!strcmp_l1("serialno", cmd)) {
|
||||
s = getenv("serial#");
|
||||
if (s)
|
||||
|
@ -600,16 +590,14 @@ static void cb_flash(struct usb_ep *ep, struct usb_request *req)
|
|||
|
||||
strcpy(response, "FAILno flash device defined");
|
||||
#ifdef CONFIG_FASTBOOT_FLASH_MMC_DEV
|
||||
fb_mmc_flash_write(cmd, fastboot_flash_session_id,
|
||||
(void *)CONFIG_FASTBOOT_BUF_ADDR,
|
||||
fb_mmc_flash_write(cmd, (void *)CONFIG_FASTBOOT_BUF_ADDR,
|
||||
download_bytes, response);
|
||||
#endif
|
||||
#ifdef CONFIG_FASTBOOT_FLASH_NAND_DEV
|
||||
fb_nand_flash_write(cmd, fastboot_flash_session_id,
|
||||
fb_nand_flash_write(cmd,
|
||||
(void *)CONFIG_FASTBOOT_BUF_ADDR,
|
||||
download_bytes, response);
|
||||
#endif
|
||||
fastboot_flash_session_id++;
|
||||
fastboot_tx_write_str(response);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
void fb_mmc_flash_write(const char *cmd, unsigned int session_id,
|
||||
void *download_buffer, unsigned int download_bytes,
|
||||
char *response);
|
||||
void fb_mmc_flash_write(const char *cmd, void *download_buffer,
|
||||
unsigned int download_bytes, char *response);
|
||||
void fb_mmc_erase(const char *cmd, char *response);
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
void fb_nand_flash_write(const char *cmd, unsigned int session_id,
|
||||
void *download_buffer, unsigned int download_bytes,
|
||||
char *response);
|
||||
void fb_nand_flash_write(const char *cmd, void *download_buffer,
|
||||
unsigned int download_bytes, char *response);
|
||||
void fb_nand_erase(const char *cmd, char *response);
|
||||
|
|
|
@ -32,4 +32,4 @@ static inline int is_sparse_image(void *buf)
|
|||
}
|
||||
|
||||
int store_sparse_image(sparse_storage_t *storage, void *storage_priv,
|
||||
unsigned int session_id, void *data);
|
||||
void *data);
|
||||
|
|
Loading…
Reference in a new issue