X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fflash%2Flpc288x.c;h=fd8960013de634570fd7dd7a707d3830afb46168;hb=46fc1d57ac9462fd788277609707a379c7a406cb;hp=cf189d9e70a6ef118a517d53e8ee2482f75f87dd;hpb=0ab650293add8da2f4d58fd90c17d452312a8a9d;p=openocd.git diff --git a/src/flash/lpc288x.c b/src/flash/lpc288x.c index cf189d9e70..fd8960013d 100644 --- a/src/flash/lpc288x.c +++ b/src/flash/lpc288x.c @@ -84,40 +84,11 @@ /* F_CLK_TIME */ #define FCT_CLK_DIV_MASK 0x0FFF -static int lpc288x_register_commands(struct command_context_s *cmd_ctx); -static int lpc288x_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank); -static int lpc288x_erase(struct flash_bank_s *bank, int first, int last); -static int lpc288x_protect(struct flash_bank_s *bank, int set, int first, int last); -static int lpc288x_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t count); -static int lpc288x_probe(struct flash_bank_s *bank); -static int lpc288x_erase_check(struct flash_bank_s *bank); -static int lpc288x_protect_check(struct flash_bank_s *bank); -static int lpc288x_info(struct flash_bank_s *bank, char *buf, int buf_size); static uint32_t lpc288x_wait_status_busy(flash_bank_t *bank, int timeout); static void lpc288x_load_timer(int erase, struct target_s *target); static void lpc288x_set_flash_clk(struct flash_bank_s *bank); static uint32_t lpc288x_system_ready(struct flash_bank_s *bank); -flash_driver_t lpc288x_flash = -{ - .name = "lpc288x", - .register_commands = lpc288x_register_commands, - .flash_bank_command = lpc288x_flash_bank_command, - .erase = lpc288x_erase, - .protect = lpc288x_protect, - .write = lpc288x_write, - .probe = lpc288x_probe, - .auto_probe = lpc288x_probe, - .erase_check = lpc288x_erase_check, - .protect_check = lpc288x_protect_check, - .info = lpc288x_info -}; - -static int lpc288x_register_commands(struct command_context_s *cmd_ctx) -{ - return ERROR_OK; -} - static uint32_t lpc288x_wait_status_busy(flash_bank_t *bank, int timeout) { uint32_t status; @@ -140,7 +111,7 @@ static uint32_t lpc288x_wait_status_busy(flash_bank_t *bank, int timeout) /* Read device id register and fill in driver info structure */ static int lpc288x_read_part_info(struct flash_bank_s *bank) { - lpc288x_flash_bank_t *lpc288x_info = bank->driver_priv; + struct lpc288x_flash_bank *lpc288x_info = bank->driver_priv; target_t *target = bank->target; uint32_t cidr; @@ -166,7 +137,7 @@ static int lpc288x_read_part_info(struct flash_bank_s *bank) /* setup the sector info... */ offset = bank->base; bank->num_sectors = 23; - bank->sectors = malloc(sizeof(flash_sector_t) * 23); + bank->sectors = malloc(sizeof(struct flash_sector) * 23); for (i = 0; i < 15; i++) { @@ -194,9 +165,9 @@ static int lpc288x_protect_check(struct flash_bank_s *bank) } /* flash_bank LPC288x 0 0 0 0 */ -static int lpc288x_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank) +FLASH_BANK_COMMAND_HANDLER(lpc288x_flash_bank_command) { - lpc288x_flash_bank_t *lpc288x_info; + struct lpc288x_flash_bank *lpc288x_info; if (argc < 6) { @@ -204,25 +175,25 @@ static int lpc288x_flash_bank_command(struct command_context_s *cmd_ctx, char *c return ERROR_FLASH_BANK_INVALID; } - lpc288x_info = malloc(sizeof(lpc288x_flash_bank_t)); + lpc288x_info = malloc(sizeof(struct lpc288x_flash_bank)); bank->driver_priv = lpc288x_info; /* part wasn't probed for info yet */ lpc288x_info->cidr = 0; - lpc288x_info->cclk = strtoul(args[6], NULL, 0); + COMMAND_PARSE_NUMBER(u32, args[6], lpc288x_info->cclk); return ERROR_OK; } -/* The frequency is the AHB clock frequency divided by (CLK_DIV ×3) + 1. - * This must be programmed such that the Flash Programming clock frequency is 66 kHz ± 20%. +/* The frequency is the AHB clock frequency divided by (CLK_DIV ×3) + 1. + * This must be programmed such that the Flash Programming clock frequency is 66 kHz ± 20%. * AHB = 12 MHz ? * 12000000/66000 = 182 * CLK_DIV = 60 ? */ static void lpc288x_set_flash_clk(struct flash_bank_s *bank) { uint32_t clk_time; - lpc288x_flash_bank_t *lpc288x_info = bank->driver_priv; + struct lpc288x_flash_bank *lpc288x_info = bank->driver_priv; clk_time = (lpc288x_info->cclk / 66000) / 3; target_write_u32(bank->target, F_CTRL, FC_CS | FC_WEN); target_write_u32(bank->target, F_CLK_TIME, clk_time); @@ -248,7 +219,7 @@ static void lpc288x_load_timer(int erase, struct target_s *target) static uint32_t lpc288x_system_ready(struct flash_bank_s *bank) { - lpc288x_flash_bank_t *lpc288x_info = bank->driver_priv; + struct lpc288x_flash_bank *lpc288x_info = bank->driver_priv; if (lpc288x_info->cidr == 0) { return ERROR_FLASH_BANK_NOT_PROBED; @@ -434,7 +405,7 @@ static int lpc288x_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t of static int lpc288x_probe(struct flash_bank_s *bank) { /* we only deal with LPC2888 so flash config is fixed */ - lpc288x_flash_bank_t *lpc288x_info = bank->driver_priv; + struct lpc288x_flash_bank *lpc288x_info = bank->driver_priv; int retval; if (lpc288x_info->cidr != 0) @@ -499,3 +470,16 @@ static int lpc288x_protect(struct flash_bank_s *bank, int set, int first, int la return ERROR_OK; } + +struct flash_driver lpc288x_flash = { + .name = "lpc288x", + .flash_bank_command = &lpc288x_flash_bank_command, + .erase = &lpc288x_erase, + .protect = &lpc288x_protect, + .write = &lpc288x_write, + .probe = &lpc288x_probe, + .auto_probe = &lpc288x_probe, + .erase_check = &lpc288x_erase_check, + .protect_check = &lpc288x_protect_check, + .info = &lpc288x_info, + };