target: Use target_addr for flash routines.
This commit is contained in:
parent
aeaca988c3
commit
82cb6c8e83
|
@ -44,9 +44,9 @@
|
||||||
#define SRAM_BASE 0x20000000
|
#define SRAM_BASE 0x20000000
|
||||||
#define STUB_BUFFER_BASE ALIGN(SRAM_BASE + sizeof(efm32_flash_write_stub), 4)
|
#define STUB_BUFFER_BASE ALIGN(SRAM_BASE + sizeof(efm32_flash_write_stub), 4)
|
||||||
|
|
||||||
static int efm32_flash_erase(struct target_flash *t, uint32_t addr, size_t len);
|
static int efm32_flash_erase(struct target_flash *t, target_addr addr, size_t len);
|
||||||
static int efm32_flash_write(struct target_flash *f,
|
static int efm32_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
|
|
||||||
static const uint16_t efm32_flash_write_stub[] = {
|
static const uint16_t efm32_flash_write_stub[] = {
|
||||||
#include "flashstub/efm32.stub"
|
#include "flashstub/efm32.stub"
|
||||||
|
@ -230,7 +230,7 @@ uint16_t efm32_read_radio_part_number(target *t)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void efm32_add_flash(target *t, uint32_t addr, size_t length,
|
static void efm32_add_flash(target *t, target_addr addr, size_t length,
|
||||||
size_t page_size)
|
size_t page_size)
|
||||||
{
|
{
|
||||||
struct target_flash *f = calloc(1, sizeof(*f));
|
struct target_flash *f = calloc(1, sizeof(*f));
|
||||||
|
@ -344,7 +344,7 @@ bool efm32_probe(target *t)
|
||||||
/**
|
/**
|
||||||
* Erase flash row by row
|
* Erase flash row by row
|
||||||
*/
|
*/
|
||||||
static int efm32_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
static int efm32_flash_erase(struct target_flash *f, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
|
|
||||||
|
@ -376,7 +376,7 @@ static int efm32_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
||||||
* Write flash page by page
|
* Write flash page by page
|
||||||
*/
|
*/
|
||||||
static int efm32_flash_write(struct target_flash *f,
|
static int efm32_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
(void)len;
|
(void)len;
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
|
|
|
@ -61,9 +61,9 @@
|
||||||
|
|
||||||
#define KL_GEN_PAGESIZE 0x400
|
#define KL_GEN_PAGESIZE 0x400
|
||||||
|
|
||||||
static int kl_gen_flash_erase(struct target_flash *f, uint32_t addr, size_t len);
|
static int kl_gen_flash_erase(struct target_flash *f, target_addr addr, size_t len);
|
||||||
static int kl_gen_flash_write(struct target_flash *f,
|
static int kl_gen_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
|
|
||||||
static void kl_gen_add_flash(target *t,
|
static void kl_gen_add_flash(target *t,
|
||||||
uint32_t addr, size_t length, size_t erasesize)
|
uint32_t addr, size_t length, size_t erasesize)
|
||||||
|
@ -159,7 +159,7 @@ kl_gen_command(target *t, uint8_t cmd, uint32_t addr, const uint8_t data[8])
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int kl_gen_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
static int kl_gen_flash_erase(struct target_flash *f, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
while (len) {
|
while (len) {
|
||||||
if (kl_gen_command(f->t, FTFA_CMD_ERASE_SECTOR, addr, NULL)) {
|
if (kl_gen_command(f->t, FTFA_CMD_ERASE_SECTOR, addr, NULL)) {
|
||||||
|
@ -173,7 +173,7 @@ static int kl_gen_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int kl_gen_flash_write(struct target_flash *f,
|
static int kl_gen_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
while (len) {
|
while (len) {
|
||||||
if (kl_gen_command(f->t, FTFA_CMD_PROGRAM_LONGWORD, dest, src)) {
|
if (kl_gen_command(f->t, FTFA_CMD_PROGRAM_LONGWORD, dest, src)) {
|
||||||
|
|
|
@ -47,9 +47,9 @@
|
||||||
#define LMI_FLASH_FMC_COMT (1 << 3)
|
#define LMI_FLASH_FMC_COMT (1 << 3)
|
||||||
#define LMI_FLASH_FMC_WRKEY 0xA4420000
|
#define LMI_FLASH_FMC_WRKEY 0xA4420000
|
||||||
|
|
||||||
static int lmi_flash_erase(struct target_flash *f, uint32_t addr, size_t len);
|
static int lmi_flash_erase(struct target_flash *f, target_addr addr, size_t len);
|
||||||
static int lmi_flash_write(struct target_flash *f,
|
static int lmi_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
|
|
||||||
static const char lmi_driver_str[] = "TI Stellaris/Tiva";
|
static const char lmi_driver_str[] = "TI Stellaris/Tiva";
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ bool lmi_probe(target *t)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lmi_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
int lmi_flash_erase(struct target_flash *f, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
while(len) {
|
while(len) {
|
||||||
|
@ -106,7 +106,7 @@ int lmi_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
int lmi_flash_write(struct target_flash *f,
|
int lmi_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ static bool lpc43xx_cmd_erase(target *t, int argc, const char *argv[]);
|
||||||
static bool lpc43xx_cmd_reset(target *t, int argc, const char *argv[]);
|
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 bool lpc43xx_cmd_mkboot(target *t, int argc, const char *argv[]);
|
||||||
static int lpc43xx_flash_init(target *t);
|
static int lpc43xx_flash_init(target *t);
|
||||||
static int lpc43xx_flash_erase(struct target_flash *f, uint32_t addr, size_t len);
|
static int lpc43xx_flash_erase(struct target_flash *f, target_addr addr, size_t len);
|
||||||
static void lpc43xx_set_internal_clock(target *t);
|
static void lpc43xx_set_internal_clock(target *t);
|
||||||
static void lpc43xx_wdt_set_period(target *t);
|
static void lpc43xx_wdt_set_period(target *t);
|
||||||
static void lpc43xx_wdt_pet(target *t);
|
static void lpc43xx_wdt_pet(target *t);
|
||||||
|
@ -194,7 +194,7 @@ static int lpc43xx_flash_init(target *t)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lpc43xx_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
static int lpc43xx_flash_erase(struct target_flash *f, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
if (lpc43xx_flash_init(f->t))
|
if (lpc43xx_flash_init(f->t))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -33,7 +33,7 @@ struct flash_param {
|
||||||
} __attribute__((aligned(4)));
|
} __attribute__((aligned(4)));
|
||||||
|
|
||||||
|
|
||||||
struct lpc_flash *lpc_add_flash(target *t, uint32_t addr, size_t length)
|
struct lpc_flash *lpc_add_flash(target *t, target_addr addr, size_t length)
|
||||||
{
|
{
|
||||||
struct lpc_flash *lf = calloc(1, sizeof(*lf));
|
struct lpc_flash *lf = calloc(1, sizeof(*lf));
|
||||||
struct target_flash *f = &lf->f;
|
struct target_flash *f = &lf->f;
|
||||||
|
@ -94,7 +94,7 @@ static uint8_t lpc_sector_for_addr(struct lpc_flash *f, uint32_t addr)
|
||||||
return f->base_sector + (addr - f->f.start) / f->f.blocksize;
|
return f->base_sector + (addr - f->f.start) / f->f.blocksize;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lpc_flash_erase(struct target_flash *tf, uint32_t addr, size_t len)
|
int lpc_flash_erase(struct target_flash *tf, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
struct lpc_flash *f = (struct lpc_flash *)tf;
|
struct lpc_flash *f = (struct lpc_flash *)tf;
|
||||||
uint32_t start = lpc_sector_for_addr(f, addr);
|
uint32_t start = lpc_sector_for_addr(f, addr);
|
||||||
|
@ -115,7 +115,7 @@ int lpc_flash_erase(struct target_flash *tf, uint32_t addr, size_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
int lpc_flash_write(struct target_flash *tf,
|
int lpc_flash_write(struct target_flash *tf,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
struct lpc_flash *f = (struct lpc_flash *)tf;
|
struct lpc_flash *f = (struct lpc_flash *)tf;
|
||||||
/* prepare... */
|
/* prepare... */
|
||||||
|
@ -135,7 +135,7 @@ int lpc_flash_write(struct target_flash *tf,
|
||||||
}
|
}
|
||||||
|
|
||||||
int lpc_flash_write_magic_vect(struct target_flash *f,
|
int lpc_flash_write_magic_vect(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
if (dest == 0) {
|
if (dest == 0) {
|
||||||
/* Fill in the magic vector to allow booting the flash */
|
/* Fill in the magic vector to allow booting the flash */
|
||||||
|
|
|
@ -58,13 +58,13 @@ struct lpc_flash {
|
||||||
uint32_t iap_msp;
|
uint32_t iap_msp;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lpc_flash *lpc_add_flash(target *t, uint32_t addr, size_t length);
|
struct lpc_flash *lpc_add_flash(target *t, target_addr addr, size_t length);
|
||||||
enum iap_status lpc_iap_call(struct lpc_flash *f, enum iap_cmd cmd, ...);
|
enum iap_status lpc_iap_call(struct lpc_flash *f, enum iap_cmd cmd, ...);
|
||||||
int lpc_flash_erase(struct target_flash *f, uint32_t addr, size_t len);
|
int lpc_flash_erase(struct target_flash *f, target_addr addr, size_t len);
|
||||||
int lpc_flash_write(struct target_flash *f,
|
int lpc_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
int lpc_flash_write_magic_vect(struct target_flash *f,
|
int lpc_flash_write_magic_vect(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -26,9 +26,9 @@
|
||||||
#include "target_internal.h"
|
#include "target_internal.h"
|
||||||
#include "cortexm.h"
|
#include "cortexm.h"
|
||||||
|
|
||||||
static int nrf51_flash_erase(struct target_flash *f, uint32_t addr, size_t len);
|
static int nrf51_flash_erase(struct target_flash *f, target_addr addr, size_t len);
|
||||||
static int nrf51_flash_write(struct target_flash *f,
|
static int nrf51_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
|
|
||||||
static bool nrf51_cmd_erase_all(target *t);
|
static bool nrf51_cmd_erase_all(target *t);
|
||||||
static bool nrf51_cmd_read_hwid(target *t);
|
static bool nrf51_cmd_read_hwid(target *t);
|
||||||
|
@ -172,7 +172,7 @@ bool nrf51_probe(target *t)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nrf51_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
static int nrf51_flash_erase(struct target_flash *f, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
/* Enable erase */
|
/* Enable erase */
|
||||||
|
@ -214,7 +214,7 @@ static int nrf51_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nrf51_flash_write(struct target_flash *f,
|
static int nrf51_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
uint32_t data[2 + len/4];
|
uint32_t data[2 + len/4];
|
||||||
|
|
|
@ -28,9 +28,9 @@
|
||||||
#include "target.h"
|
#include "target.h"
|
||||||
#include "target_internal.h"
|
#include "target_internal.h"
|
||||||
|
|
||||||
static int sam4_flash_erase(struct target_flash *f, uint32_t addr, size_t len);
|
static int sam4_flash_erase(struct target_flash *f, target_addr addr, size_t len);
|
||||||
static int sam3_flash_erase(struct target_flash *f, uint32_t addr, size_t len);
|
static int sam3_flash_erase(struct target_flash *f, target_addr addr, size_t len);
|
||||||
static int sam3x_flash_write(struct target_flash *f, uint32_t dest,
|
static int sam3x_flash_write(struct target_flash *f, target_addr dest,
|
||||||
const void *src, size_t len);
|
const void *src, size_t len);
|
||||||
|
|
||||||
static bool sam3x_cmd_gpnvm_get(target *t);
|
static bool sam3x_cmd_gpnvm_get(target *t);
|
||||||
|
@ -281,7 +281,7 @@ static uint32_t sam3x_flash_base(target *t)
|
||||||
return SAM3N_EEFC_BASE;
|
return SAM3N_EEFC_BASE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sam4_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
static int sam4_flash_erase(struct target_flash *f, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
uint32_t base = ((struct sam_flash *)f)->eefc_base;
|
uint32_t base = ((struct sam_flash *)f)->eefc_base;
|
||||||
|
@ -304,7 +304,7 @@ static int sam4_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sam3_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
static int sam3_flash_erase(struct target_flash *f, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
/* The SAM3X/SAM3N don't really have a page erase function.
|
/* The SAM3X/SAM3N don't really have a page erase function.
|
||||||
* We do nothing here and use Erase/Write page in flash_write.
|
* We do nothing here and use Erase/Write page in flash_write.
|
||||||
|
@ -313,7 +313,7 @@ static int sam3_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sam3x_flash_write(struct target_flash *f, uint32_t dest,
|
static int sam3x_flash_write(struct target_flash *f, target_addr dest,
|
||||||
const void *src, size_t len)
|
const void *src, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
|
|
|
@ -37,9 +37,9 @@
|
||||||
#include "target_internal.h"
|
#include "target_internal.h"
|
||||||
#include "cortexm.h"
|
#include "cortexm.h"
|
||||||
|
|
||||||
static int samd_flash_erase(struct target_flash *t, uint32_t addr, size_t len);
|
static int samd_flash_erase(struct target_flash *t, target_addr addr, size_t len);
|
||||||
static int samd_flash_write(struct target_flash *f,
|
static int samd_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
|
|
||||||
static bool samd_cmd_erase_all(target *t);
|
static bool samd_cmd_erase_all(target *t);
|
||||||
static bool samd_cmd_lock_flash(target *t);
|
static bool samd_cmd_lock_flash(target *t);
|
||||||
|
@ -457,7 +457,7 @@ static void samd_unlock_current_address(target *t)
|
||||||
/**
|
/**
|
||||||
* Erase flash row by row
|
* Erase flash row by row
|
||||||
*/
|
*/
|
||||||
static int samd_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
static int samd_flash_erase(struct target_flash *f, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
while (len) {
|
while (len) {
|
||||||
|
@ -490,7 +490,7 @@ static int samd_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
||||||
* Write flash page by page
|
* Write flash page by page
|
||||||
*/
|
*/
|
||||||
static int samd_flash_write(struct target_flash *f,
|
static int samd_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
|
|
||||||
|
|
|
@ -45,9 +45,9 @@ const struct command_s stm32f1_cmd_list[] = {
|
||||||
|
|
||||||
|
|
||||||
static int stm32f1_flash_erase(struct target_flash *f,
|
static int stm32f1_flash_erase(struct target_flash *f,
|
||||||
uint32_t addr, size_t len);
|
target_addr addr, size_t len);
|
||||||
static int stm32f1_flash_write(struct target_flash *f,
|
static int stm32f1_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
|
|
||||||
/* Flash Program ad Erase Controller Register Map */
|
/* Flash Program ad Erase Controller Register Map */
|
||||||
#define FPEC_BASE 0x40022000
|
#define FPEC_BASE 0x40022000
|
||||||
|
@ -179,7 +179,7 @@ static void stm32f1_flash_unlock(target *t)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32f1_flash_erase(struct target_flash *f,
|
static int stm32f1_flash_erase(struct target_flash *f,
|
||||||
uint32_t addr, size_t len)
|
target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
uint16_t sr;
|
uint16_t sr;
|
||||||
|
@ -212,7 +212,7 @@ static int stm32f1_flash_erase(struct target_flash *f,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32f1_flash_write(struct target_flash *f,
|
static int stm32f1_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
/* Write stub and data to target ram and set PC */
|
/* Write stub and data to target ram and set PC */
|
||||||
|
|
|
@ -45,9 +45,9 @@ const struct command_s stm32f4_cmd_list[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static int stm32f4_flash_erase(struct target_flash *f, uint32_t addr, size_t len);
|
static int stm32f4_flash_erase(struct target_flash *f, target_addr addr, size_t len);
|
||||||
static int stm32f4_flash_write(struct target_flash *f,
|
static int stm32f4_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
|
|
||||||
static const char stm32f4_driver_str[] = "STM32F4xx";
|
static const char stm32f4_driver_str[] = "STM32F4xx";
|
||||||
static const char stm32f7_driver_str[] = "STM32F7xx";
|
static const char stm32f7_driver_str[] = "STM32F7xx";
|
||||||
|
@ -219,7 +219,7 @@ static void stm32f4_flash_unlock(target *t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32f4_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
static int stm32f4_flash_erase(struct target_flash *f, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
uint16_t sr;
|
uint16_t sr;
|
||||||
|
@ -254,7 +254,7 @@ static int stm32f4_flash_erase(struct target_flash *f, uint32_t addr, size_t len
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32f4_flash_write(struct target_flash *f,
|
static int stm32f4_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
/* Write buffer to target ram call stub */
|
/* Write buffer to target ram call stub */
|
||||||
target_mem_write(f->t, SRAM_BASE, stm32f4_flash_write_stub,
|
target_mem_write(f->t, SRAM_BASE, stm32f4_flash_write_stub,
|
||||||
|
|
|
@ -142,16 +142,16 @@
|
||||||
#define STM32L1_NVM_OPTR_SPRMOD (1<<8)
|
#define STM32L1_NVM_OPTR_SPRMOD (1<<8)
|
||||||
|
|
||||||
static int stm32lx_nvm_prog_erase(struct target_flash* f,
|
static int stm32lx_nvm_prog_erase(struct target_flash* f,
|
||||||
uint32_t addr, size_t len);
|
target_addr addr, size_t len);
|
||||||
static int stm32lx_nvm_prog_write(struct target_flash* f,
|
static int stm32lx_nvm_prog_write(struct target_flash* f,
|
||||||
uint32_t destination,
|
target_addr destination,
|
||||||
const void* src,
|
const void* src,
|
||||||
size_t size);
|
size_t size);
|
||||||
|
|
||||||
static int stm32lx_nvm_data_erase(struct target_flash* f,
|
static int stm32lx_nvm_data_erase(struct target_flash* f,
|
||||||
uint32_t addr, size_t len);
|
target_addr addr, size_t len);
|
||||||
static int stm32lx_nvm_data_write(struct target_flash* f,
|
static int stm32lx_nvm_data_write(struct target_flash* f,
|
||||||
uint32_t destination,
|
target_addr destination,
|
||||||
const void* source,
|
const void* source,
|
||||||
size_t size);
|
size_t size);
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ static bool stm32lx_nvm_opt_unlock(target *t, uint32_t nvm)
|
||||||
flash array is erased for all pages from addr to addr+len
|
flash array is erased for all pages from addr to addr+len
|
||||||
inclusive. NVM register file address chosen from target. */
|
inclusive. NVM register file address chosen from target. */
|
||||||
static int stm32lx_nvm_prog_erase(struct target_flash* f,
|
static int stm32lx_nvm_prog_erase(struct target_flash* f,
|
||||||
uint32_t addr, size_t len)
|
target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
const size_t page_size = f->blocksize;
|
const size_t page_size = f->blocksize;
|
||||||
|
@ -372,7 +372,7 @@ static int stm32lx_nvm_prog_erase(struct target_flash* f,
|
||||||
/** Write to program flash using operations through the debug
|
/** Write to program flash using operations through the debug
|
||||||
interface. */
|
interface. */
|
||||||
static int stm32lx_nvm_prog_write(struct target_flash *f,
|
static int stm32lx_nvm_prog_write(struct target_flash *f,
|
||||||
uint32_t dest,
|
target_addr dest,
|
||||||
const void* src,
|
const void* src,
|
||||||
size_t size)
|
size_t size)
|
||||||
{
|
{
|
||||||
|
@ -415,7 +415,7 @@ static int stm32lx_nvm_prog_write(struct target_flash *f,
|
||||||
addr+len, inclusive, on a word boundary. NVM register file
|
addr+len, inclusive, on a word boundary. NVM register file
|
||||||
address chosen from target. */
|
address chosen from target. */
|
||||||
static int stm32lx_nvm_data_erase(struct target_flash *f,
|
static int stm32lx_nvm_data_erase(struct target_flash *f,
|
||||||
uint32_t addr, size_t len)
|
target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
const size_t page_size = f->blocksize;
|
const size_t page_size = f->blocksize;
|
||||||
|
@ -467,7 +467,7 @@ static int stm32lx_nvm_data_erase(struct target_flash *f,
|
||||||
destination writes are supported (though unaligned sources are
|
destination writes are supported (though unaligned sources are
|
||||||
not). */
|
not). */
|
||||||
static int stm32lx_nvm_data_write(struct target_flash *f,
|
static int stm32lx_nvm_data_write(struct target_flash *f,
|
||||||
uint32_t destination,
|
target_addr destination,
|
||||||
const void* src,
|
const void* src,
|
||||||
size_t size)
|
size_t size)
|
||||||
{
|
{
|
||||||
|
|
|
@ -49,9 +49,9 @@ const struct command_s stm32l4_cmd_list[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static int stm32l4_flash_erase(struct target_flash *f, uint32_t addr, size_t len);
|
static int stm32l4_flash_erase(struct target_flash *f, target_addr addr, size_t len);
|
||||||
static int stm32l4_flash_write(struct target_flash *f,
|
static int stm32l4_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
|
|
||||||
static const char stm32l4_driver_str[] = "STM32L4xx";
|
static const char stm32l4_driver_str[] = "STM32L4xx";
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ static void stm32l4_flash_unlock(target *t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32l4_flash_erase(struct target_flash *f, uint32_t addr, size_t len)
|
static int stm32l4_flash_erase(struct target_flash *f, target_addr addr, size_t len)
|
||||||
{
|
{
|
||||||
target *t = f->t;
|
target *t = f->t;
|
||||||
uint16_t sr;
|
uint16_t sr;
|
||||||
|
@ -212,7 +212,7 @@ static int stm32l4_flash_erase(struct target_flash *f, uint32_t addr, size_t len
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32l4_flash_write(struct target_flash *f,
|
static int stm32l4_flash_write(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
/* Write buffer to target ram call stub */
|
/* Write buffer to target ram call stub */
|
||||||
target_mem_write(f->t, SRAM_BASE, stm32l4_flash_write_stub,
|
target_mem_write(f->t, SRAM_BASE, stm32l4_flash_write_stub,
|
||||||
|
|
|
@ -116,7 +116,7 @@ target *target_attach(target *t, struct target_controller *tc)
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
void target_add_ram(target *t, uint32_t start, uint32_t len)
|
void target_add_ram(target *t, target_addr start, uint32_t len)
|
||||||
{
|
{
|
||||||
struct target_ram *ram = malloc(sizeof(*ram));
|
struct target_ram *ram = malloc(sizeof(*ram));
|
||||||
ram->start = start;
|
ram->start = start;
|
||||||
|
@ -135,7 +135,7 @@ void target_add_flash(target *t, struct target_flash *f)
|
||||||
static ssize_t map_ram(char *buf, size_t len, struct target_ram *ram)
|
static ssize_t map_ram(char *buf, size_t len, struct target_ram *ram)
|
||||||
{
|
{
|
||||||
return snprintf(buf, len, "<memory type=\"ram\" start=\"0x%08"PRIx32
|
return snprintf(buf, len, "<memory type=\"ram\" start=\"0x%08"PRIx32
|
||||||
"\" length=\"0x%08"PRIx32"\"/>",
|
"\" length=\"0x%08zx\"/>",
|
||||||
ram->start, ram->length);
|
ram->start, ram->length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,9 +143,9 @@ static ssize_t map_flash(char *buf, size_t len, struct target_flash *f)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
i += snprintf(&buf[i], len - i, "<memory type=\"flash\" start=\"0x%08"PRIx32
|
i += snprintf(&buf[i], len - i, "<memory type=\"flash\" start=\"0x%08"PRIx32
|
||||||
"\" length=\"0x%08"PRIx32"\">",
|
"\" length=\"0x%08zx\">",
|
||||||
f->start, f->length);
|
f->start, f->length);
|
||||||
i += snprintf(&buf[i], len - i, "<property name=\"blocksize\">0x%08"PRIx32
|
i += snprintf(&buf[i], len - i, "<property name=\"blocksize\">0x%08zx"
|
||||||
"</property></memory>",
|
"</property></memory>",
|
||||||
f->blocksize);
|
f->blocksize);
|
||||||
return i;
|
return i;
|
||||||
|
@ -231,7 +231,7 @@ int target_flash_done(target *t)
|
||||||
}
|
}
|
||||||
|
|
||||||
int target_flash_write_buffered(struct target_flash *f,
|
int target_flash_write_buffered(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len)
|
target_addr dest, const void *src, size_t len)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
|
|
@ -25,20 +25,20 @@ extern target *target_list;
|
||||||
target *target_new(void);
|
target *target_new(void);
|
||||||
|
|
||||||
struct target_ram {
|
struct target_ram {
|
||||||
uint32_t start;
|
target_addr start;
|
||||||
uint32_t length;
|
size_t length;
|
||||||
struct target_ram *next;
|
struct target_ram *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct target_flash;
|
struct target_flash;
|
||||||
typedef int (*flash_erase_func)(struct target_flash *f, uint32_t addr, size_t len);
|
typedef int (*flash_erase_func)(struct target_flash *f, target_addr addr, size_t len);
|
||||||
typedef int (*flash_write_func)(struct target_flash *f, uint32_t dest,
|
typedef int (*flash_write_func)(struct target_flash *f, target_addr dest,
|
||||||
const void *src, size_t len);
|
const void *src, size_t len);
|
||||||
typedef int (*flash_done_func)(struct target_flash *f);
|
typedef int (*flash_done_func)(struct target_flash *f);
|
||||||
struct target_flash {
|
struct target_flash {
|
||||||
uint32_t start;
|
target_addr start;
|
||||||
uint32_t length;
|
size_t length;
|
||||||
uint32_t blocksize;
|
size_t blocksize;
|
||||||
flash_erase_func erase;
|
flash_erase_func erase;
|
||||||
flash_write_func write;
|
flash_write_func write;
|
||||||
flash_done_func done;
|
flash_done_func done;
|
||||||
|
@ -50,7 +50,7 @@ struct target_flash {
|
||||||
/* For buffered flash */
|
/* For buffered flash */
|
||||||
size_t buf_size;
|
size_t buf_size;
|
||||||
flash_write_func write_buf;
|
flash_write_func write_buf;
|
||||||
uint32_t buf_addr;
|
target_addr buf_addr;
|
||||||
void *buf;
|
void *buf;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -124,10 +124,10 @@ struct target_s {
|
||||||
};
|
};
|
||||||
|
|
||||||
void target_add_commands(target *t, const struct command_s *cmds, const char *name);
|
void target_add_commands(target *t, const struct command_s *cmds, const char *name);
|
||||||
void target_add_ram(target *t, uint32_t start, uint32_t len);
|
void target_add_ram(target *t, target_addr start, uint32_t len);
|
||||||
void target_add_flash(target *t, struct target_flash *f);
|
void target_add_flash(target *t, struct target_flash *f);
|
||||||
int target_flash_write_buffered(struct target_flash *f,
|
int target_flash_write_buffered(struct target_flash *f,
|
||||||
uint32_t dest, const void *src, size_t len);
|
target_addr dest, const void *src, size_t len);
|
||||||
int target_flash_done_buffered(struct target_flash *f);
|
int target_flash_done_buffered(struct target_flash *f);
|
||||||
|
|
||||||
/* Convenience function for MMIO access */
|
/* Convenience function for MMIO access */
|
||||||
|
|
Loading…
Reference in New Issue