target/lpc: flash read write return bool
This commit is contained in:
parent
50057d3f55
commit
f0c955432b
|
@ -196,5 +196,5 @@ static bool lmi_flash_write(target_flash_s *f, target_addr_t dest, const void *s
|
|||
|
||||
static bool lmi_mass_erase(target *t)
|
||||
{
|
||||
return lmi_flash_erase(t->flash, t->flash->start, t->flash->length) == 0;
|
||||
return lmi_flash_erase(t->flash, t->flash->start, t->flash->length);
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
static bool lpc43xx_cmd_reset(target *t, int argc, const char *argv[]);
|
||||
static bool lpc43xx_cmd_mkboot(target *t, int argc, const char *argv[]);
|
||||
static int lpc43xx_flash_init(target *t);
|
||||
static int lpc43xx_flash_erase(target_flash_s *f, target_addr_t addr, size_t len);
|
||||
static bool lpc43xx_flash_erase(target_flash_s *f, target_addr_t addr, size_t len);
|
||||
static bool lpc43xx_mass_erase(target *t);
|
||||
static void lpc43xx_set_internal_clock(target *t);
|
||||
static void lpc43xx_wdt_set_period(target *t);
|
||||
|
@ -186,10 +186,10 @@ static int lpc43xx_flash_init(target *t)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int lpc43xx_flash_erase(target_flash_s *f, target_addr_t addr, size_t len)
|
||||
static bool lpc43xx_flash_erase(target_flash_s *f, target_addr_t addr, size_t len)
|
||||
{
|
||||
if (lpc43xx_flash_init(f->t))
|
||||
return -1;
|
||||
return false;
|
||||
|
||||
return lpc_flash_erase(f, addr, len);
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ static bool lpc546xx_cmd_write_sector(target *t, int argc, const char *argv[]);
|
|||
|
||||
static void lpc546xx_reset_attach(target *t);
|
||||
static int lpc546xx_flash_init(target *t);
|
||||
static int lpc546xx_flash_erase(target_flash_s *f, target_addr_t addr, size_t len);
|
||||
static bool lpc546xx_flash_erase(target_flash_s *f, target_addr_t addr, size_t len);
|
||||
static bool lpc546xx_mass_erase(target *t);
|
||||
static void lpc546xx_wdt_set_period(target *t);
|
||||
static void lpc546xx_wdt_pet(target *t);
|
||||
|
@ -267,14 +267,13 @@ static bool lpc546xx_cmd_write_sector(target *t, int argc, const char *argv[])
|
|||
buf[i] = i & 0xff;
|
||||
}
|
||||
|
||||
retval = lpc_flash_write_magic_vect(t->flash, sector_addr, buf,
|
||||
sector_size);
|
||||
retval = !lpc_flash_write_magic_vect(t->flash, sector_addr, buf, sector_size);
|
||||
|
||||
free(buf);
|
||||
|
||||
return retval == 0;
|
||||
return retval;
|
||||
}
|
||||
return -1;
|
||||
return true;
|
||||
}
|
||||
|
||||
static int lpc546xx_flash_init(target *t)
|
||||
|
@ -291,10 +290,10 @@ static int lpc546xx_flash_init(target *t)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int lpc546xx_flash_erase(target_flash_s *tf, target_addr_t addr, size_t len)
|
||||
static bool lpc546xx_flash_erase(target_flash_s *tf, target_addr_t addr, size_t len)
|
||||
{
|
||||
if (lpc546xx_flash_init(tf->t))
|
||||
return -1;
|
||||
return false;
|
||||
|
||||
return lpc_flash_erase(tf, addr, len);
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@ char *iap_error[] = {
|
|||
"Page is invalid",
|
||||
};
|
||||
|
||||
static int lpc_flash_write(target_flash_s *tf, target_addr_t dest, const void *src, size_t len);
|
||||
static bool lpc_flash_write(target_flash_s *tf, target_addr_t dest, const void *src, size_t len);
|
||||
|
||||
struct lpc_flash *lpc_add_flash(target *t, target_addr_t addr, size_t length)
|
||||
{
|
||||
|
@ -182,7 +182,7 @@ enum iap_status lpc_iap_call(struct lpc_flash *f, void *result, enum iap_cmd cmd
|
|||
#define LPX80X_SECTOR_SIZE 0x400
|
||||
#define LPX80X_PAGE_SIZE 0x40
|
||||
|
||||
int lpc_flash_erase(target_flash_s *tf, target_addr_t addr, size_t len)
|
||||
bool lpc_flash_erase(target_flash_s *tf, target_addr_t addr, size_t len)
|
||||
{
|
||||
struct lpc_flash *f = (struct lpc_flash *)tf;
|
||||
const uint32_t start = lpc_sector_for_addr(f, addr);
|
||||
|
@ -190,7 +190,7 @@ int lpc_flash_erase(target_flash_s *tf, target_addr_t addr, size_t len)
|
|||
uint32_t last_full_sector = end;
|
||||
|
||||
if (lpc_iap_call(f, NULL, IAP_CMD_PREPARE, start, end, f->bank))
|
||||
return -1;
|
||||
return false;
|
||||
|
||||
/* Only LPC80x has reserved pages!*/
|
||||
if (f->reserved_pages && addr + len >= tf->length - 0x400U)
|
||||
|
@ -199,11 +199,11 @@ int lpc_flash_erase(target_flash_s *tf, target_addr_t addr, size_t len)
|
|||
if (start <= last_full_sector) {
|
||||
/* Sector erase */
|
||||
if (lpc_iap_call(f, NULL, IAP_CMD_ERASE, start, last_full_sector, CPU_CLK_KHZ, f->bank))
|
||||
return -2;
|
||||
return false;
|
||||
|
||||
/* check erase ok */
|
||||
if (lpc_iap_call(f, NULL, IAP_CMD_BLANKCHECK, start, last_full_sector, f->bank))
|
||||
return -3;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (last_full_sector != end) {
|
||||
|
@ -211,23 +211,23 @@ int lpc_flash_erase(target_flash_s *tf, target_addr_t addr, size_t len)
|
|||
const uint32_t page_end = page_start + LPX80X_SECTOR_SIZE / LPX80X_PAGE_SIZE - 1 - f->reserved_pages;
|
||||
|
||||
if (lpc_iap_call(f, NULL, IAP_CMD_PREPARE, end, end, f->bank))
|
||||
return -1;
|
||||
return false;
|
||||
|
||||
if (lpc_iap_call(f, NULL, IAP_CMD_ERASE_PAGE, page_start, page_end, CPU_CLK_KHZ, f->bank))
|
||||
return -2;
|
||||
return false;
|
||||
/* Blank check omitted!*/
|
||||
}
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
static int lpc_flash_write(target_flash_s *tf, target_addr_t dest, const void *src, size_t len)
|
||||
static bool lpc_flash_write(target_flash_s *tf, target_addr_t dest, const void *src, size_t len)
|
||||
{
|
||||
struct lpc_flash *f = (struct lpc_flash *)tf;
|
||||
/* prepare... */
|
||||
uint32_t sector = lpc_sector_for_addr(f, dest);
|
||||
if (lpc_iap_call(f, NULL, IAP_CMD_PREPARE, sector, sector, f->bank)) {
|
||||
DEBUG_WARN("Prepare failed\n");
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
uint32_t bufaddr = ALIGN(f->iap_ram + sizeof(struct flash_param), 4);
|
||||
target_mem_write(f->f.t, bufaddr, src, len);
|
||||
|
@ -236,7 +236,7 @@ static int lpc_flash_write(target_flash_s *tf, target_addr_t dest, const void *s
|
|||
/* Write payload to target ram */
|
||||
/* set the destination address and program */
|
||||
if (lpc_iap_call(f, NULL, IAP_CMD_PROGRAM, dest, bufaddr, len, CPU_CLK_KHZ))
|
||||
return -2;
|
||||
return false;
|
||||
} else {
|
||||
/* On LPC80x, write top sector in pages.
|
||||
* Silently ignore write to the 2 reserved pages at top!*/
|
||||
|
@ -244,20 +244,20 @@ static int lpc_flash_write(target_flash_s *tf, target_addr_t dest, const void *s
|
|||
while (len) {
|
||||
if (lpc_iap_call(f, NULL, IAP_CMD_PREPARE, sector, sector, f->bank)) {
|
||||
DEBUG_WARN("Prepare failed\n");
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
/* set the destination address and program */
|
||||
if (lpc_iap_call(f, NULL, IAP_CMD_PROGRAM, dest, bufaddr, LPX80X_PAGE_SIZE, CPU_CLK_KHZ))
|
||||
return -2;
|
||||
return false;
|
||||
dest += LPX80X_PAGE_SIZE;
|
||||
bufaddr += LPX80X_PAGE_SIZE;
|
||||
len -= LPX80X_PAGE_SIZE;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int lpc_flash_write_magic_vect(target_flash_s *f, target_addr_t dest, const void *src, size_t len)
|
||||
bool lpc_flash_write_magic_vect(target_flash_s *f, target_addr_t dest, const void *src, size_t len)
|
||||
{
|
||||
if (dest == 0) {
|
||||
/* Fill in the magic vector to allow booting the flash */
|
||||
|
|
|
@ -82,7 +82,7 @@ struct lpc_flash {
|
|||
|
||||
struct lpc_flash *lpc_add_flash(target *t, target_addr_t addr, size_t length);
|
||||
enum iap_status lpc_iap_call(struct lpc_flash *f, void *result, enum iap_cmd cmd, ...);
|
||||
int lpc_flash_erase(target_flash_s *f, target_addr_t addr, size_t len);
|
||||
int lpc_flash_write_magic_vect(target_flash_s *f, target_addr_t dest, const void *src, size_t len);
|
||||
bool lpc_flash_erase(target_flash_s *f, target_addr_t addr, size_t len);
|
||||
bool lpc_flash_write_magic_vect(target_flash_s *f, target_addr_t dest, const void *src, size_t len);
|
||||
|
||||
#endif /* TARGET_LPC_COMMON_H */
|
||||
|
|
Loading…
Reference in New Issue