X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fstellaris.c;h=771f0a7123c65b53a76242d2f60bd613ad489ef6;hp=dc35c59eeeef4d1810dce6fa70877ab42588d1f0;hb=e1ec02bb055fa356b058dddc0a15710e0fdc9870;hpb=fb59ec739a3ae79937020dc2fe5413be0e73e8d3 diff --git a/src/flash/stellaris.c b/src/flash/stellaris.c index dc35c59eee..771f0a7123 100644 --- a/src/flash/stellaris.c +++ b/src/flash/stellaris.c @@ -31,16 +31,17 @@ #include "stellaris.h" #include "armv7m.h" #include "binarybuffer.h" +#include "algorithm.h" #define DID0_VER(did0) ((did0 >> 28)&0x07) -static int stellaris_read_part_info(struct flash_bank_s *bank); -static uint32_t stellaris_get_flash_status(flash_bank_t *bank); -static void stellaris_set_flash_mode(flash_bank_t *bank,int mode); -//static uint32_t stellaris_wait_status_busy(flash_bank_t *bank, uint32_t waitbits, int timeout); +static int stellaris_read_part_info(struct flash_bank *bank); +static uint32_t stellaris_get_flash_status(struct flash_bank *bank); +static void stellaris_set_flash_mode(struct flash_bank *bank,int mode); +//static uint32_t stellaris_wait_status_busy(struct flash_bank *bank, uint32_t waitbits, int timeout); -static int stellaris_mass_erase(struct flash_bank_s *bank); +static int stellaris_mass_erase(struct flash_bank *bank); static struct { uint32_t partno; @@ -215,15 +216,15 @@ static char * StellarisClassname[5] = */ FLASH_BANK_COMMAND_HANDLER(stellaris_flash_bank_command) { - stellaris_flash_bank_t *stellaris_info; + struct stellaris_flash_bank *stellaris_info; - if (argc < 6) + if (CMD_ARGC < 6) { LOG_WARNING("incomplete flash_bank stellaris configuration"); return ERROR_FLASH_BANK_INVALID; } - stellaris_info = calloc(sizeof(stellaris_flash_bank_t), 1); + stellaris_info = calloc(sizeof(struct stellaris_flash_bank), 1); bank->base = 0x0; bank->driver_priv = stellaris_info; @@ -239,10 +240,10 @@ FLASH_BANK_COMMAND_HANDLER(stellaris_flash_bank_command) return ERROR_OK; } -static int stellaris_info(struct flash_bank_s *bank, char *buf, int buf_size) +static int stellaris_info(struct flash_bank *bank, char *buf, int buf_size) { int printed, device_class; - stellaris_flash_bank_t *stellaris_info = bank->driver_priv; + struct stellaris_flash_bank *stellaris_info = bank->driver_priv; stellaris_read_part_info(bank); @@ -316,9 +317,9 @@ static int stellaris_info(struct flash_bank_s *bank, char *buf, int buf_size) * chip identification and status * ***************************************************************************/ -static uint32_t stellaris_get_flash_status(flash_bank_t *bank) +static uint32_t stellaris_get_flash_status(struct flash_bank *bank) { - target_t *target = bank->target; + struct target *target = bank->target; uint32_t fmc; target_read_u32(target, FLASH_CONTROL_BASE | FLASH_FMC, &fmc); @@ -361,10 +362,10 @@ static const unsigned rcc_xtal[32] = { [0x16] = 16384000, }; -static void stellaris_read_clock_info(flash_bank_t *bank) +static void stellaris_read_clock_info(struct flash_bank *bank) { - stellaris_flash_bank_t *stellaris_info = bank->driver_priv; - target_t *target = bank->target; + struct stellaris_flash_bank *stellaris_info = bank->driver_priv; + struct target *target = bank->target; uint32_t rcc, rcc2, pllcfg, sysdiv, usesysdiv, bypass, oscsrc; unsigned xtal; unsigned long mainfreq; @@ -448,10 +449,10 @@ static void stellaris_read_clock_info(flash_bank_t *bank) } /* Setup the timimg registers */ -static void stellaris_set_flash_mode(flash_bank_t *bank,int mode) +static void stellaris_set_flash_mode(struct flash_bank *bank,int mode) { - stellaris_flash_bank_t *stellaris_info = bank->driver_priv; - target_t *target = bank->target; + struct stellaris_flash_bank *stellaris_info = bank->driver_priv; + struct target *target = bank->target; uint32_t usecrl = (stellaris_info->mck_freq/1000000ul-1); LOG_DEBUG("usecrl = %i",(int)(usecrl)); @@ -459,7 +460,7 @@ static void stellaris_set_flash_mode(flash_bank_t *bank,int mode) } #if 0 -static uint32_t stellaris_wait_status_busy(flash_bank_t *bank, uint32_t waitbits, int timeout) +static uint32_t stellaris_wait_status_busy(struct flash_bank *bank, uint32_t waitbits, int timeout) { uint32_t status; @@ -476,10 +477,10 @@ static uint32_t stellaris_wait_status_busy(flash_bank_t *bank, uint32_t waitbits } /* Send one command to the flash controller */ -static int stellaris_flash_command(struct flash_bank_s *bank,uint8_t cmd,uint16_t pagen) +static int stellaris_flash_command(struct flash_bank *bank,uint8_t cmd,uint16_t pagen) { uint32_t fmc; - target_t *target = bank->target; + struct target *target = bank->target; fmc = FMC_WRKEY | cmd; target_write_u32(target, FLASH_CONTROL_BASE | FLASH_FMC, fmc); @@ -495,10 +496,10 @@ static int stellaris_flash_command(struct flash_bank_s *bank,uint8_t cmd,uint16_ #endif /* Read device id register, main clock frequency register and fill in driver info structure */ -static int stellaris_read_part_info(struct flash_bank_s *bank) +static int stellaris_read_part_info(struct flash_bank *bank) { - stellaris_flash_bank_t *stellaris_info = bank->driver_priv; - target_t *target = bank->target; + struct stellaris_flash_bank *stellaris_info = bank->driver_priv; + struct target *target = bank->target; uint32_t did0, did1, ver, fam, status; int i; @@ -613,11 +614,11 @@ static int stellaris_read_part_info(struct flash_bank_s *bank) * flash operations * ***************************************************************************/ -static int stellaris_protect_check(struct flash_bank_s *bank) +static int stellaris_protect_check(struct flash_bank *bank) { uint32_t status; - stellaris_flash_bank_t *stellaris_info = bank->driver_priv; + struct stellaris_flash_bank *stellaris_info = bank->driver_priv; if (bank->target->state != TARGET_HALTED) { @@ -642,12 +643,12 @@ static int stellaris_protect_check(struct flash_bank_s *bank) return ERROR_OK; } -static int stellaris_erase(struct flash_bank_s *bank, int first, int last) +static int stellaris_erase(struct flash_bank *bank, int first, int last) { int banknr; uint32_t flash_fmc, flash_cris; - stellaris_flash_bank_t *stellaris_info = bank->driver_priv; - target_t *target = bank->target; + struct stellaris_flash_bank *stellaris_info = bank->driver_priv; + struct target *target = bank->target; if (bank->target->state != TARGET_HALTED) { @@ -712,13 +713,13 @@ static int stellaris_erase(struct flash_bank_s *bank, int first, int last) return ERROR_OK; } -static int stellaris_protect(struct flash_bank_s *bank, int set, int first, int last) +static int stellaris_protect(struct flash_bank *bank, int set, int first, int last) { uint32_t fmppe, flash_fmc, flash_cris; int lockregion; - stellaris_flash_bank_t *stellaris_info = bank->driver_priv; - target_t *target = bank->target; + struct stellaris_flash_bank *stellaris_info = bank->driver_priv; + struct target *target = bank->target; if (bank->target->state != TARGET_HALTED) { @@ -828,15 +829,15 @@ static uint8_t stellaris_write_code[] = 0x01,0x00,0x42,0xA4 /* .word 0xA4420001 */ }; -static int stellaris_write_block(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t wcount) +static int stellaris_write_block(struct flash_bank *bank, uint8_t *buffer, uint32_t offset, uint32_t wcount) { - target_t *target = bank->target; + struct target *target = bank->target; uint32_t buffer_size = 8192; - working_area_t *source; - working_area_t *write_algorithm; + struct working_area *source; + struct working_area *write_algorithm; uint32_t address = bank->base + offset; - reg_param_t reg_params[3]; - armv7m_algorithm_t armv7m_info; + struct reg_param reg_params[3]; + struct armv7m_algorithm armv7m_info; int retval = ERROR_OK; LOG_DEBUG("(bank=%p buffer=%p offset=%08" PRIx32 " wcount=%08" PRIx32 "", @@ -908,10 +909,10 @@ static int stellaris_write_block(struct flash_bank_s *bank, uint8_t *buffer, uin return retval; } -static int stellaris_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t count) +static int stellaris_write(struct flash_bank *bank, uint8_t *buffer, uint32_t offset, uint32_t count) { - stellaris_flash_bank_t *stellaris_info = bank->driver_priv; - target_t *target = bank->target; + struct stellaris_flash_bank *stellaris_info = bank->driver_priv; + struct target *target = bank->target; uint32_t address = offset; uint32_t flash_cris, flash_fmc; uint32_t words_remaining = (count / 4); @@ -1043,7 +1044,7 @@ static int stellaris_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t return ERROR_OK; } -static int stellaris_probe(struct flash_bank_s *bank) +static int stellaris_probe(struct flash_bank *bank) { /* we can't probe on an stellaris * if this is an stellaris, it has the configured flash @@ -1059,18 +1060,18 @@ static int stellaris_probe(struct flash_bank_s *bank) return stellaris_read_part_info(bank); } -static int stellaris_auto_probe(struct flash_bank_s *bank) +static int stellaris_auto_probe(struct flash_bank *bank) { - stellaris_flash_bank_t *stellaris_info = bank->driver_priv; + struct stellaris_flash_bank *stellaris_info = bank->driver_priv; if (stellaris_info->did1) return ERROR_OK; return stellaris_probe(bank); } -static int stellaris_mass_erase(struct flash_bank_s *bank) +static int stellaris_mass_erase(struct flash_bank *bank) { - target_t *target = NULL; - stellaris_flash_bank_t *stellaris_info = NULL; + struct target *target = NULL; + struct stellaris_flash_bank *stellaris_info = NULL; uint32_t flash_fmc; stellaris_info = bank->driver_priv; @@ -1131,14 +1132,14 @@ COMMAND_HANDLER(stellaris_handle_mass_erase_command) { int i; - if (argc < 1) + if (CMD_ARGC < 1) { - command_print(cmd_ctx, "stellaris mass_erase "); + command_print(CMD_CTX, "stellaris mass_erase "); return ERROR_OK; } - flash_bank_t *bank; - int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &bank); + struct flash_bank *bank; + int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank); if (ERROR_OK != retval) return retval; @@ -1150,31 +1151,38 @@ COMMAND_HANDLER(stellaris_handle_mass_erase_command) bank->sectors[i].is_erased = 1; } - command_print(cmd_ctx, "stellaris mass erase complete"); + command_print(CMD_CTX, "stellaris mass erase complete"); } else { - command_print(cmd_ctx, "stellaris mass erase failed"); + command_print(CMD_CTX, "stellaris mass erase failed"); } return ERROR_OK; } -static int stellaris_register_commands(struct command_context_s *cmd_ctx) -{ - command_t *stm32x_cmd = register_command(cmd_ctx, NULL, "stellaris", - NULL, COMMAND_ANY, "stellaris flash specific commands"); - - register_command(cmd_ctx, stm32x_cmd, "mass_erase", - stellaris_handle_mass_erase_command, COMMAND_EXEC, - "mass erase device"); - return ERROR_OK; -} - +static const struct command_registration stellaris_exec_command_handlers[] = { + { + .name = "mass_erase", + .handler = &stellaris_handle_mass_erase_command, + .mode = COMMAND_EXEC, + .help = "erase entire device", + }, + COMMAND_REGISTRATION_DONE +}; +static const struct command_registration stellaris_command_handlers[] = { + { + .name = "stellaris", + .mode = COMMAND_ANY, + .help = "Stellaris flash command group", + .chain = stellaris_exec_command_handlers, + }, + COMMAND_REGISTRATION_DONE +}; -flash_driver_t stellaris_flash = { +struct flash_driver stellaris_flash = { .name = "stellaris", - .register_commands = &stellaris_register_commands, + .commands = stellaris_command_handlers, .flash_bank_command = &stellaris_flash_bank_command, .erase = &stellaris_erase, .protect = &stellaris_protect,