mirror of https://github.com/wolfSSL/wolfBoot.git
Faster sector copy
parent
8a8875fc05
commit
7f60f68474
|
@ -90,7 +90,6 @@ static inline int wb_flash_write_verify_word(struct wolfBoot_image *img, uint32_
|
||||||
# define PART_IS_EXT(x) (0)
|
# define PART_IS_EXT(x) (0)
|
||||||
# define wb_flash_erase(im, of, siz) hal_flash_erase(((uint32_t)(((im)->hdr)) + of), siz)
|
# define wb_flash_erase(im, of, siz) hal_flash_erase(((uint32_t)(((im)->hdr)) + of), siz)
|
||||||
# define wb_flash_write(im, of, dat, siz) hal_flash_write(((uint32_t)((im)->hdr)) + of, dat, siz)
|
# define wb_flash_write(im, of, dat, siz) hal_flash_write(((uint32_t)((im)->hdr)) + of, dat, siz)
|
||||||
# define wb_flash_write_verify_word(im, of, x) do { hal_flash_write(((uint32_t)((im)->hdr)) + of, (void *)&x, sizeof(uint32_t)); } while (*(uint32_t *)(((im)->hdr) + of) != x)
|
|
||||||
#endif /* EXT_FLASH */
|
#endif /* EXT_FLASH */
|
||||||
|
|
||||||
#endif /* IMAGE_H */
|
#endif /* IMAGE_H */
|
||||||
|
|
13
src/loader.c
13
src/loader.c
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
extern void do_boot(const uint32_t *app_offset);
|
extern void do_boot(const uint32_t *app_offset);
|
||||||
|
|
||||||
|
#define FLASHBUFFER_SIZE 256
|
||||||
static int wolfBoot_copy_sector(struct wolfBoot_image *src, struct wolfBoot_image *dst, uint32_t sector)
|
static int wolfBoot_copy_sector(struct wolfBoot_image *src, struct wolfBoot_image *dst, uint32_t sector)
|
||||||
{
|
{
|
||||||
volatile uint32_t *orig, *copy;
|
volatile uint32_t *orig, *copy;
|
||||||
|
@ -39,12 +40,12 @@ static int wolfBoot_copy_sector(struct wolfBoot_image *src, struct wolfBoot_imag
|
||||||
dst_sector_offset = 0;
|
dst_sector_offset = 0;
|
||||||
#ifdef EXT_FLASH
|
#ifdef EXT_FLASH
|
||||||
if (PART_IS_EXT(src)) {
|
if (PART_IS_EXT(src)) {
|
||||||
uint32_t word;
|
uint8_t buffer[FLASHBUFFER_SIZE];
|
||||||
wb_flash_erase(dst, dst_sector_offset, WOLFBOOT_SECTOR_SIZE);
|
wb_flash_erase(dst, dst_sector_offset, WOLFBOOT_SECTOR_SIZE);
|
||||||
while (pos < WOLFBOOT_SECTOR_SIZE) {
|
while (pos < WOLFBOOT_SECTOR_SIZE) {
|
||||||
ext_flash_read((uint32_t)(src->hdr) + src_sector_offset + pos, (void *)&word, sizeof(uint32_t));
|
ext_flash_read((uint32_t)(src->hdr) + src_sector_offset + pos, (void *)buffer, FLASHBUFFER_SIZE);
|
||||||
wb_flash_write_verify_word(dst, dst_sector_offset + pos, word);
|
wb_flash_write(dst, dst_sector_offset + pos, buffer, FLASHBUFFER_SIZE);
|
||||||
pos += sizeof(uint32_t);
|
pos += FLASHBUFFER_SIZE;
|
||||||
}
|
}
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
@ -52,8 +53,8 @@ static int wolfBoot_copy_sector(struct wolfBoot_image *src, struct wolfBoot_imag
|
||||||
wb_flash_erase(dst, dst_sector_offset, WOLFBOOT_SECTOR_SIZE);
|
wb_flash_erase(dst, dst_sector_offset, WOLFBOOT_SECTOR_SIZE);
|
||||||
while (pos < WOLFBOOT_SECTOR_SIZE) {
|
while (pos < WOLFBOOT_SECTOR_SIZE) {
|
||||||
orig = (volatile uint32_t *)(src->hdr + src_sector_offset + pos);
|
orig = (volatile uint32_t *)(src->hdr + src_sector_offset + pos);
|
||||||
wb_flash_write_verify_word(dst, dst_sector_offset + pos, *orig);
|
wb_flash_write(dst, dst_sector_offset + pos, orig, FLASHBUFFER_SIZE);
|
||||||
pos += sizeof(uint32_t);
|
pos += FLASHBUFFER_SIZE;
|
||||||
}
|
}
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue