|
|
@@ -58,7 +58,7 @@ struct avrf_type { |
|
|
|
|
|
|
|
struct avrf_flash_bank { |
|
|
|
int ppage_size; |
|
|
|
int probed; |
|
|
|
bool probed; |
|
|
|
}; |
|
|
|
|
|
|
|
static const struct avrf_type avft_chips_info[] = { |
|
|
@@ -149,7 +149,7 @@ static int avr_jtagprg_writeflashpage(struct avr_common *avr, |
|
|
|
uint32_t addr, |
|
|
|
uint32_t page_size) |
|
|
|
{ |
|
|
|
uint32_t i, poll_value; |
|
|
|
uint32_t poll_value; |
|
|
|
|
|
|
|
avr_jtag_sendinstr(avr->jtag_info.tap, NULL, AVR_JTAG_INS_PROG_COMMANDS); |
|
|
|
avr_jtag_senddat(avr->jtag_info.tap, NULL, 0x2310, AVR_JTAG_REG_ProgrammingCommand_Len); |
|
|
@@ -175,7 +175,7 @@ static int avr_jtagprg_writeflashpage(struct avr_common *avr, |
|
|
|
|
|
|
|
avr_jtag_sendinstr(avr->jtag_info.tap, NULL, AVR_JTAG_INS_PROG_PAGELOAD); |
|
|
|
|
|
|
|
for (i = 0; i < page_size; i++) { |
|
|
|
for (uint32_t i = 0; i < page_size; i++) { |
|
|
|
if (i < buf_size) |
|
|
|
avr_jtag_senddat(avr->jtag_info.tap, NULL, page_buf[i], 8); |
|
|
|
else |
|
|
@@ -213,7 +213,7 @@ FLASH_BANK_COMMAND_HANDLER(avrf_flash_bank_command) |
|
|
|
avrf_info = malloc(sizeof(struct avrf_flash_bank)); |
|
|
|
bank->driver_priv = avrf_info; |
|
|
|
|
|
|
|
avrf_info->probed = 0; |
|
|
|
avrf_info->probed = false; |
|
|
|
|
|
|
|
return ERROR_OK; |
|
|
|
} |
|
|
@@ -304,7 +304,6 @@ static int avrf_probe(struct flash_bank *bank) |
|
|
|
struct avrf_flash_bank *avrf_info = bank->driver_priv; |
|
|
|
struct avr_common *avr = target->arch_info; |
|
|
|
const struct avrf_type *avr_info = NULL; |
|
|
|
int i; |
|
|
|
uint32_t device_id; |
|
|
|
|
|
|
|
if (bank->target->state != TARGET_HALTED) { |
|
|
@@ -312,7 +311,7 @@ static int avrf_probe(struct flash_bank *bank) |
|
|
|
return ERROR_TARGET_NOT_HALTED; |
|
|
|
} |
|
|
|
|
|
|
|
avrf_info->probed = 0; |
|
|
|
avrf_info->probed = false; |
|
|
|
|
|
|
|
avr_jtag_read_jtagid(avr, &device_id); |
|
|
|
if (ERROR_OK != mcu_execute_queue()) |
|
|
@@ -324,7 +323,7 @@ static int avrf_probe(struct flash_bank *bank) |
|
|
|
EXTRACT_MFG(device_id), |
|
|
|
0x1F); |
|
|
|
|
|
|
|
for (i = 0; i < (int)ARRAY_SIZE(avft_chips_info); i++) { |
|
|
|
for (size_t i = 0; i < ARRAY_SIZE(avft_chips_info); i++) { |
|
|
|
if (avft_chips_info[i].chip_id == EXTRACT_PART(device_id)) { |
|
|
|
avr_info = &avft_chips_info[i]; |
|
|
|
LOG_INFO("target device is %s", avr_info->name); |
|
|
@@ -344,20 +343,20 @@ static int avrf_probe(struct flash_bank *bank) |
|
|
|
bank->num_sectors = avr_info->flash_page_num; |
|
|
|
bank->sectors = malloc(sizeof(struct flash_sector) * avr_info->flash_page_num); |
|
|
|
|
|
|
|
for (i = 0; i < avr_info->flash_page_num; i++) { |
|
|
|
for (int i = 0; i < avr_info->flash_page_num; i++) { |
|
|
|
bank->sectors[i].offset = i * avr_info->flash_page_size; |
|
|
|
bank->sectors[i].size = avr_info->flash_page_size; |
|
|
|
bank->sectors[i].is_erased = -1; |
|
|
|
bank->sectors[i].is_protected = -1; |
|
|
|
} |
|
|
|
|
|
|
|
avrf_info->probed = 1; |
|
|
|
avrf_info->probed = true; |
|
|
|
return ERROR_OK; |
|
|
|
} else { |
|
|
|
/* chip not supported */ |
|
|
|
LOG_ERROR("0x%" PRIx32 " is not support for avr", EXTRACT_PART(device_id)); |
|
|
|
|
|
|
|
avrf_info->probed = 1; |
|
|
|
avrf_info->probed = true; |
|
|
|
return ERROR_FAIL; |
|
|
|
} |
|
|
|
} |
|
|
@@ -375,7 +374,6 @@ static int avrf_info(struct flash_bank *bank, char *buf, int buf_size) |
|
|
|
struct target *target = bank->target; |
|
|
|
struct avr_common *avr = target->arch_info; |
|
|
|
const struct avrf_type *avr_info = NULL; |
|
|
|
int i; |
|
|
|
uint32_t device_id; |
|
|
|
|
|
|
|
if (bank->target->state != TARGET_HALTED) { |
|
|
@@ -393,7 +391,7 @@ static int avrf_info(struct flash_bank *bank, char *buf, int buf_size) |
|
|
|
EXTRACT_MFG(device_id), |
|
|
|
0x1F); |
|
|
|
|
|
|
|
for (i = 0; i < (int)ARRAY_SIZE(avft_chips_info); i++) { |
|
|
|
for (size_t i = 0; i < ARRAY_SIZE(avft_chips_info); i++) { |
|
|
|
if (avft_chips_info[i].chip_id == EXTRACT_PART(device_id)) { |
|
|
|
avr_info = &avft_chips_info[i]; |
|
|
|
LOG_INFO("target device is %s", avr_info->name); |
|
|
@@ -434,8 +432,6 @@ static int avrf_mass_erase(struct flash_bank *bank) |
|
|
|
|
|
|
|
COMMAND_HANDLER(avrf_handle_mass_erase_command) |
|
|
|
{ |
|
|
|
int i; |
|
|
|
|
|
|
|
if (CMD_ARGC < 1) |
|
|
|
return ERROR_COMMAND_SYNTAX_ERROR; |
|
|
|
|
|
|
@@ -446,7 +442,7 @@ COMMAND_HANDLER(avrf_handle_mass_erase_command) |
|
|
|
|
|
|
|
if (avrf_mass_erase(bank) == ERROR_OK) { |
|
|
|
/* set all sectors as erased */ |
|
|
|
for (i = 0; i < bank->num_sectors; i++) |
|
|
|
for (int i = 0; i < bank->num_sectors; i++) |
|
|
|
bank->sectors[i].is_erased = 1; |
|
|
|
|
|
|
|
command_print(CMD, "avr mass erase complete"); |
|
|
|