- Fixes '+' whitespace
- Replace ')\(+\)(' with ') \1 ('. - Replace ')\(+\)\(\w\)' with ') \1 \2'. - Replace '\(\w\)\(+\)(' with '\1 \2 ('. - Replace '\(\w\)\(+\)\(\w\)' with '\1 \2 \3'. git-svn-id: svn://svn.berlios.de/openocd/trunk@2373 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
parent
84df52f9ea
commit
8959de9f67
|
@ -213,19 +213,19 @@ static void at91sam7_set_flash_mode(flash_bank_t *bank, int mode)
|
||||||
if (at91sam7_info->cidr_arch == 0x60)
|
if (at91sam7_info->cidr_arch == 0x60)
|
||||||
{
|
{
|
||||||
/* AT91SAM7A3 uses master clocks in 100 ns */
|
/* AT91SAM7A3 uses master clocks in 100 ns */
|
||||||
fmcn = (at91sam7_info->mck_freq/10000000ul)+1;
|
fmcn = (at91sam7_info->mck_freq/10000000ul) + 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* master clocks in 1uS for ARCH 0x7 types */
|
/* master clocks in 1uS for ARCH 0x7 types */
|
||||||
fmcn = (at91sam7_info->mck_freq/1000000ul)+1;
|
fmcn = (at91sam7_info->mck_freq/1000000ul) + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mode == FMR_TIMING_FLASH)
|
else if (mode == FMR_TIMING_FLASH)
|
||||||
{
|
{
|
||||||
/* main clocks in 1.5uS */
|
/* main clocks in 1.5uS */
|
||||||
fmcn = (at91sam7_info->mck_freq/1000000ul)+
|
fmcn = (at91sam7_info->mck_freq/1000000ul)+
|
||||||
(at91sam7_info->mck_freq/2000000ul)+1;
|
(at91sam7_info->mck_freq/2000000ul) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* hard overclocking */
|
/* hard overclocking */
|
||||||
|
@ -282,7 +282,7 @@ static int at91sam7_flash_command(struct flash_bank_s *bank, uint8_t cmd, uint16
|
||||||
|
|
||||||
fcr = (0x5A << 24) | ((pagen&0x3FF) << 8) | cmd;
|
fcr = (0x5A << 24) | ((pagen&0x3FF) << 8) | cmd;
|
||||||
target_write_u32(target, MC_FCR[bank->bank_number], fcr);
|
target_write_u32(target, MC_FCR[bank->bank_number], fcr);
|
||||||
LOG_DEBUG("Flash command: 0x%" PRIx32 ", flash bank: %i, page number: %u", fcr, bank->bank_number+1, pagen);
|
LOG_DEBUG("Flash command: 0x%" PRIx32 ", flash bank: %i, page number: %u", fcr, bank->bank_number + 1, pagen);
|
||||||
|
|
||||||
if ((at91sam7_info->cidr_arch == 0x60) && ((cmd == SLB)|(cmd == CLB)))
|
if ((at91sam7_info->cidr_arch == 0x60) && ((cmd == SLB)|(cmd == CLB)))
|
||||||
{
|
{
|
||||||
|
@ -641,7 +641,7 @@ static int at91sam7_erase_check(struct flash_bank_s *bank)
|
||||||
fast_check = 1;
|
fast_check = 1;
|
||||||
for (nSector = 0; nSector<bank->num_sectors; nSector++)
|
for (nSector = 0; nSector<bank->num_sectors; nSector++)
|
||||||
{
|
{
|
||||||
retval = target_blank_check_memory(target, bank->base+bank->sectors[nSector].offset,
|
retval = target_blank_check_memory(target, bank->base + bank->sectors[nSector].offset,
|
||||||
bank->sectors[nSector].size, &blank);
|
bank->sectors[nSector].size, &blank);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
{
|
{
|
||||||
|
@ -665,7 +665,7 @@ static int at91sam7_erase_check(struct flash_bank_s *bank)
|
||||||
for (nSector = 0; nSector<bank->num_sectors; nSector++)
|
for (nSector = 0; nSector<bank->num_sectors; nSector++)
|
||||||
{
|
{
|
||||||
bank->sectors[nSector].is_erased = 1;
|
bank->sectors[nSector].is_erased = 1;
|
||||||
retval = target_read_memory(target, bank->base+bank->sectors[nSector].offset, 4,
|
retval = target_read_memory(target, bank->base + bank->sectors[nSector].offset, 4,
|
||||||
bank->sectors[nSector].size/4, buffer);
|
bank->sectors[nSector].size/4, buffer);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -707,7 +707,7 @@ static int at91sam7_protect_check(struct flash_bank_s *bank)
|
||||||
at91sam7_info->num_lockbits_on = 0;
|
at91sam7_info->num_lockbits_on = 0;
|
||||||
for (lock_pos = 0; lock_pos<bank->num_sectors; lock_pos++)
|
for (lock_pos = 0; lock_pos<bank->num_sectors; lock_pos++)
|
||||||
{
|
{
|
||||||
if ( ((status >> (16+lock_pos))&(0x0001)) == 1)
|
if ( ((status >> (16 + lock_pos))&(0x0001)) == 1)
|
||||||
{
|
{
|
||||||
at91sam7_info->num_lockbits_on++;
|
at91sam7_info->num_lockbits_on++;
|
||||||
bank->sectors[lock_pos].is_protected = 1;
|
bank->sectors[lock_pos].is_protected = 1;
|
||||||
|
@ -725,7 +725,7 @@ static int at91sam7_protect_check(struct flash_bank_s *bank)
|
||||||
at91sam7_info->num_nvmbits_on = 0;
|
at91sam7_info->num_nvmbits_on = 0;
|
||||||
for (gpnvm_pos = 0; gpnvm_pos<at91sam7_info->num_nvmbits; gpnvm_pos++)
|
for (gpnvm_pos = 0; gpnvm_pos<at91sam7_info->num_nvmbits; gpnvm_pos++)
|
||||||
{
|
{
|
||||||
if ( ((status >> (8+gpnvm_pos))&(0x01)) == 1)
|
if ( ((status >> (8 + gpnvm_pos))&(0x01)) == 1)
|
||||||
{
|
{
|
||||||
at91sam7_info->num_nvmbits_on++;
|
at91sam7_info->num_nvmbits_on++;
|
||||||
}
|
}
|
||||||
|
@ -803,7 +803,7 @@ static int at91sam7_flash_bank_command(struct command_context_s *cmd_ctx, char *
|
||||||
page_size = atoi(args[11]);
|
page_size = atoi(args[11]);
|
||||||
num_nvmbits = atoi(args[12]);
|
num_nvmbits = atoi(args[12]);
|
||||||
|
|
||||||
target_name = calloc(strlen(args[7])+1, sizeof(char));
|
target_name = calloc(strlen(args[7]) + 1, sizeof(char));
|
||||||
strcpy(target_name, args[7]);
|
strcpy(target_name, args[7]);
|
||||||
|
|
||||||
/* calculate bank size */
|
/* calculate bank size */
|
||||||
|
@ -1027,7 +1027,7 @@ static int at91sam7_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t o
|
||||||
/* Write one block to the PageWriteBuffer */
|
/* Write one block to the PageWriteBuffer */
|
||||||
buffer_pos = (pagen-first_page)*dst_min_alignment;
|
buffer_pos = (pagen-first_page)*dst_min_alignment;
|
||||||
wcount = CEIL(count,4);
|
wcount = CEIL(count,4);
|
||||||
if ((retval = target_write_memory(target, bank->base+pagen*dst_min_alignment, 4, wcount, buffer+buffer_pos)) != ERROR_OK)
|
if ((retval = target_write_memory(target, bank->base + pagen*dst_min_alignment, 4, wcount, buffer + buffer_pos)) != ERROR_OK)
|
||||||
{
|
{
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,7 +213,7 @@ static uint16_t cfi_query_u16(flash_bank_t *bank, int sector, uint32_t offset)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
for (i = 0;i<2;i++)
|
for (i = 0;i<2;i++)
|
||||||
target_read_memory(target, flash_address(bank, sector, offset+i), bank->bus_width, 1,
|
target_read_memory(target, flash_address(bank, sector, offset + i), bank->bus_width, 1,
|
||||||
&data[i*bank->bus_width] );
|
&data[i*bank->bus_width] );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -235,7 +235,7 @@ static uint32_t cfi_query_u32(flash_bank_t *bank, int sector, uint32_t offset)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
for (i = 0;i<4;i++)
|
for (i = 0;i<4;i++)
|
||||||
target_read_memory(target, flash_address(bank, sector, offset+i), bank->bus_width, 1,
|
target_read_memory(target, flash_address(bank, sector, offset + i), bank->bus_width, 1,
|
||||||
&data[i*bank->bus_width] );
|
&data[i*bank->bus_width] );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -274,8 +274,8 @@ static int eCosBoard_erase(ecosflash_flash_bank_t *info, uint32_t address, uint3
|
||||||
|
|
||||||
uint32_t flashErr;
|
uint32_t flashErr;
|
||||||
retval = runCode(info,
|
retval = runCode(info,
|
||||||
info->start_address+OFFSET_ERASE,
|
info->start_address + OFFSET_ERASE,
|
||||||
info->start_address+OFFSET_ERASE+OFFSET_ERASE_SIZE,
|
info->start_address + OFFSET_ERASE + OFFSET_ERASE_SIZE,
|
||||||
address,
|
address,
|
||||||
len,
|
len,
|
||||||
0,
|
0,
|
||||||
|
@ -307,8 +307,8 @@ static int eCosBoard_flash(ecosflash_flash_bank_t *info, void *data, uint32_t ad
|
||||||
|
|
||||||
uint32_t buffer;
|
uint32_t buffer;
|
||||||
retval = runCode(info,
|
retval = runCode(info,
|
||||||
info->start_address+OFFSET_GET_WORKAREA,
|
info->start_address + OFFSET_GET_WORKAREA,
|
||||||
info->start_address+OFFSET_GET_WORKAREA+OFFSET_GET_WORKAREA_SIZE,
|
info->start_address + OFFSET_GET_WORKAREA + OFFSET_GET_WORKAREA_SIZE,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
@ -328,16 +328,16 @@ static int eCosBoard_flash(ecosflash_flash_bank_t *info, void *data, uint32_t ad
|
||||||
}
|
}
|
||||||
|
|
||||||
int retval;
|
int retval;
|
||||||
retval = target_write_buffer(target, buffer, t, ((uint8_t *)data)+i);
|
retval = target_write_buffer(target, buffer, t, ((uint8_t *)data) + i);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
uint32_t flashErr;
|
uint32_t flashErr;
|
||||||
retval = runCode(info,
|
retval = runCode(info,
|
||||||
info->start_address+OFFSET_FLASH,
|
info->start_address + OFFSET_FLASH,
|
||||||
info->start_address+OFFSET_FLASH+OFFSET_FLASH_SIZE,
|
info->start_address + OFFSET_FLASH + OFFSET_FLASH_SIZE,
|
||||||
buffer,
|
buffer,
|
||||||
address+i,
|
address + i,
|
||||||
t,
|
t,
|
||||||
&flashErr,
|
&flashErr,
|
||||||
timeout);
|
timeout);
|
||||||
|
@ -410,7 +410,7 @@ static int ecosflash_erase(struct flash_bank_s *bank, int first, int last)
|
||||||
{
|
{
|
||||||
struct flash_bank_s *c = bank;
|
struct flash_bank_s *c = bank;
|
||||||
ecosflash_flash_bank_t *info = bank->driver_priv;
|
ecosflash_flash_bank_t *info = bank->driver_priv;
|
||||||
return eCosBoard_erase(info, c->base+first*sectorSize, sectorSize*(last-first+1));
|
return eCosBoard_erase(info, c->base + first*sectorSize, sectorSize*(last-first + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ecosflash_protect(struct flash_bank_s *bank, int set, int first, int last)
|
static int ecosflash_protect(struct flash_bank_s *bank, int set, int first, int last)
|
||||||
|
@ -422,7 +422,7 @@ static int ecosflash_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t
|
||||||
{
|
{
|
||||||
ecosflash_flash_bank_t *info = bank->driver_priv;
|
ecosflash_flash_bank_t *info = bank->driver_priv;
|
||||||
struct flash_bank_s *c = bank;
|
struct flash_bank_s *c = bank;
|
||||||
return eCosBoard_flash(info, buffer, c->base+offset, count);
|
return eCosBoard_flash(info, buffer, c->base + offset, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ecosflash_protect_check(struct flash_bank_s *bank)
|
static int ecosflash_protect_check(struct flash_bank_s *bank)
|
||||||
|
|
|
@ -1110,7 +1110,7 @@ int flash_write(target_t *target, image_t *image, uint32_t *written, int erase)
|
||||||
|
|
||||||
/* see if we need to pad the section */
|
/* see if we need to pad the section */
|
||||||
while (padding[section]--)
|
while (padding[section]--)
|
||||||
(buffer+buffer_size)[size_read++] = 0xff;
|
(buffer + buffer_size)[size_read++] = 0xff;
|
||||||
|
|
||||||
buffer_size += size_read;
|
buffer_size += size_read;
|
||||||
section_offset += size_read;
|
section_offset += size_read;
|
||||||
|
|
|
@ -923,7 +923,7 @@ static double mg_do_calc_pll(double XIN, mg_pll_t * p_pll_val, int is_approximat
|
||||||
|
|
||||||
CLK_OUT = XIN * ((double)M / N) / NO;
|
CLK_OUT = XIN * ((double)M / N) / NO;
|
||||||
|
|
||||||
if ((int)((CLK_OUT+ROUND) / DIV)
|
if ((int)((CLK_OUT + ROUND) / DIV)
|
||||||
== (int)(MG_PLL_CLK_OUT / DIV)) {
|
== (int)(MG_PLL_CLK_OUT / DIV)) {
|
||||||
if (mg_is_valid_pll(XIN, N, CLK_OUT, NO) == ERROR_OK)
|
if (mg_is_valid_pll(XIN, N, CLK_OUT, NO) == ERROR_OK)
|
||||||
{
|
{
|
||||||
|
|
|
@ -294,7 +294,7 @@ typedef enum _mg_vcmd
|
||||||
typedef enum _mg_opmode
|
typedef enum _mg_opmode
|
||||||
{
|
{
|
||||||
mg_op_mode_xip = 1, /* TRUE XIP */
|
mg_op_mode_xip = 1, /* TRUE XIP */
|
||||||
mg_op_mode_snd = 2, /* BOOT+Storage */
|
mg_op_mode_snd = 2, /* BOOT + Storage */
|
||||||
mg_op_mode_stg = 0 /* Only Storage */
|
mg_op_mode_stg = 0 /* Only Storage */
|
||||||
} mg_opmode;
|
} mg_opmode;
|
||||||
|
|
||||||
|
|
|
@ -518,9 +518,9 @@ int nand_probe(struct nand_device_s *device)
|
||||||
{
|
{
|
||||||
if (device->bus_width == 8)
|
if (device->bus_width == 8)
|
||||||
{
|
{
|
||||||
device->controller->read_data(device, id_buff+3);
|
device->controller->read_data(device, id_buff + 3);
|
||||||
device->controller->read_data(device, id_buff+4);
|
device->controller->read_data(device, id_buff + 4);
|
||||||
device->controller->read_data(device, id_buff+5);
|
device->controller->read_data(device, id_buff + 5);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1420,7 +1420,7 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
uint8_t ecc[3];
|
uint8_t ecc[3];
|
||||||
memset(oob, 0xff, oob_size);
|
memset(oob, 0xff, oob_size);
|
||||||
for (i = 0, j = 0; i < page_size; i += 256) {
|
for (i = 0, j = 0; i < page_size; i += 256) {
|
||||||
nand_calculate_ecc(p, page+i, ecc);
|
nand_calculate_ecc(p, page + i, ecc);
|
||||||
oob[eccpos[j++]] = ecc[0];
|
oob[eccpos[j++]] = ecc[0];
|
||||||
oob[eccpos[j++]] = ecc[1];
|
oob[eccpos[j++]] = ecc[1];
|
||||||
oob[eccpos[j++]] = ecc[2];
|
oob[eccpos[j++]] = ecc[2];
|
||||||
|
@ -1437,7 +1437,7 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
uint8_t *ecc = oob + oob_size - page_size/512 * 10;
|
uint8_t *ecc = oob + oob_size - page_size/512 * 10;
|
||||||
memset(oob, 0xff, oob_size);
|
memset(oob, 0xff, oob_size);
|
||||||
for (i = 0; i < page_size; i += 512) {
|
for (i = 0; i < page_size; i += 512) {
|
||||||
nand_calculate_ecc_kw(p, page+i, ecc);
|
nand_calculate_ecc_kw(p, page + i, ecc);
|
||||||
ecc += 10;
|
ecc += 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,7 +139,7 @@ static int ocl_erase(struct flash_bank_s *bank, int first, int last)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* receive response */
|
/* receive response */
|
||||||
if ((retval = embeddedice_receive(ocl->jtag_info, dcc_buffer+1, 1) != ERROR_OK))
|
if ((retval = embeddedice_receive(ocl->jtag_info, dcc_buffer + 1, 1) != ERROR_OK))
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
if (dcc_buffer[1] != OCL_CMD_DONE)
|
if (dcc_buffer[1] != OCL_CMD_DONE)
|
||||||
|
@ -182,7 +182,7 @@ static int ocl_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset
|
||||||
}
|
}
|
||||||
|
|
||||||
/* allocate buffer for max. ocl buffer + overhead */
|
/* allocate buffer for max. ocl buffer + overhead */
|
||||||
dcc_buffer = malloc(sizeof(uint32_t)*(ocl->buflen/4+3));
|
dcc_buffer = malloc(sizeof(uint32_t)*(ocl->buflen/4 + 3));
|
||||||
|
|
||||||
while (count)
|
while (count)
|
||||||
{
|
{
|
||||||
|
|
|
@ -43,7 +43,7 @@ void cmd_flash(uint32 cmd)
|
||||||
len = cmd&0xffff;
|
len = cmd&0xffff;
|
||||||
ofs = adr%flash_page_size;
|
ofs = adr%flash_page_size;
|
||||||
bi_start = ofs/4;
|
bi_start = ofs/4;
|
||||||
bi_end = (ofs+len+3)/4;
|
bi_end = (ofs + len + 3)/4;
|
||||||
|
|
||||||
if (bi_end>BUFSIZE) {
|
if (bi_end>BUFSIZE) {
|
||||||
dcc_wr(OCL_BUFF_OVER);
|
dcc_wr(OCL_BUFF_OVER);
|
||||||
|
@ -65,12 +65,12 @@ void cmd_flash(uint32 cmd)
|
||||||
result = 0;
|
result = 0;
|
||||||
pagenum = adr/flash_page_size;
|
pagenum = adr/flash_page_size;
|
||||||
for (bi = 0; bi<bi_end; bi += flash_page_size/4) {
|
for (bi = 0; bi<bi_end; bi += flash_page_size/4) {
|
||||||
result = flash_page_program(buffer+bi, pagenum++);
|
result = flash_page_program(buffer + bi, pagenum++);
|
||||||
if (result) break;
|
if (result) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* verify written data */
|
/* verify written data */
|
||||||
if (!result) result = flash_verify(adr, len, ((uint8 *)buffer)+ofs);
|
if (!result) result = flash_verify(adr, len, ((uint8 *)buffer) + ofs);
|
||||||
|
|
||||||
dcc_wr(OCL_CMD_DONE|result);
|
dcc_wr(OCL_CMD_DONE|result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,11 +86,11 @@ int flash_page_program(uint32 *data, int page_num)
|
||||||
else efc_ofs = 0;
|
else efc_ofs = 0;
|
||||||
|
|
||||||
/* wait until FLASH is ready, just for sure */
|
/* wait until FLASH is ready, just for sure */
|
||||||
while ((inr(MC_FSR+efc_ofs)&MC_FRDY) == 0);
|
while ((inr(MC_FSR + efc_ofs)&MC_FRDY) == 0);
|
||||||
|
|
||||||
/* calculate page address, only lower 8 bits are used to address the latch,
|
/* calculate page address, only lower 8 bits are used to address the latch,
|
||||||
but the upper part of address is needed for writing to proper EFC */
|
but the upper part of address is needed for writing to proper EFC */
|
||||||
flash_ptr = (uint32 *)(FLASH_AREA_ADDR+(page_num*flash_page_size));
|
flash_ptr = (uint32 *)(FLASH_AREA_ADDR + (page_num*flash_page_size));
|
||||||
data_ptr = data;
|
data_ptr = data;
|
||||||
|
|
||||||
/* copy data to latch */
|
/* copy data to latch */
|
||||||
|
@ -100,18 +100,18 @@ int flash_page_program(uint32 *data, int page_num)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* page number and page write command to FCR */
|
/* page number and page write command to FCR */
|
||||||
outr(MC_FCR+efc_ofs, ((page_num&0x3ff) << 8) | MC_KEY | MC_FCMD_WP);
|
outr(MC_FCR + efc_ofs, ((page_num&0x3ff) << 8) | MC_KEY | MC_FCMD_WP);
|
||||||
|
|
||||||
/* wait until it's done */
|
/* wait until it's done */
|
||||||
while ((inr(MC_FSR+efc_ofs)&MC_FRDY) == 0);
|
while ((inr(MC_FSR + efc_ofs)&MC_FRDY) == 0);
|
||||||
|
|
||||||
/* check for errors */
|
/* check for errors */
|
||||||
if ((inr(MC_FSR+efc_ofs)&MC_PROGE)) return FLASH_STAT_PROGE;
|
if ((inr(MC_FSR + efc_ofs)&MC_PROGE)) return FLASH_STAT_PROGE;
|
||||||
if ((inr(MC_FSR+efc_ofs)&MC_LOCKE)) return FLASH_STAT_LOCKE;
|
if ((inr(MC_FSR + efc_ofs)&MC_LOCKE)) return FLASH_STAT_LOCKE;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* verify written data */
|
/* verify written data */
|
||||||
flash_ptr = (uint32 *)(FLASH_AREA_ADDR+(page_num*flash_page_size));
|
flash_ptr = (uint32 *)(FLASH_AREA_ADDR + (page_num*flash_page_size));
|
||||||
data_ptr = data;
|
data_ptr = data;
|
||||||
|
|
||||||
for (i = flash_page_size/4; i; i--) {
|
for (i = flash_page_size/4; i; i--) {
|
||||||
|
@ -129,21 +129,21 @@ int flash_erase_plane(int efc_ofs)
|
||||||
int page_num;
|
int page_num;
|
||||||
|
|
||||||
page_num = 0;
|
page_num = 0;
|
||||||
lockbits = inr(MC_FSR+efc_ofs) >> 16;
|
lockbits = inr(MC_FSR + efc_ofs) >> 16;
|
||||||
while (lockbits) {
|
while (lockbits) {
|
||||||
if (lockbits&1) {
|
if (lockbits&1) {
|
||||||
|
|
||||||
/* wait until FLASH is ready, just for sure */
|
/* wait until FLASH is ready, just for sure */
|
||||||
while ((inr(MC_FSR+efc_ofs)&MC_FRDY) == 0);
|
while ((inr(MC_FSR + efc_ofs)&MC_FRDY) == 0);
|
||||||
|
|
||||||
outr(MC_FCR+efc_ofs, ((page_num&0x3ff) << 8) | 0x5a000004);
|
outr(MC_FCR + efc_ofs, ((page_num&0x3ff) << 8) | 0x5a000004);
|
||||||
|
|
||||||
/* wait until it's done */
|
/* wait until it's done */
|
||||||
while ((inr(MC_FSR+efc_ofs)&MC_FRDY) == 0);
|
while ((inr(MC_FSR + efc_ofs)&MC_FRDY) == 0);
|
||||||
|
|
||||||
/* check for errors */
|
/* check for errors */
|
||||||
if ((inr(MC_FSR+efc_ofs)&MC_PROGE)) return FLASH_STAT_PROGE;
|
if ((inr(MC_FSR + efc_ofs)&MC_PROGE)) return FLASH_STAT_PROGE;
|
||||||
if ((inr(MC_FSR+efc_ofs)&MC_LOCKE)) return FLASH_STAT_LOCKE;
|
if ((inr(MC_FSR + efc_ofs)&MC_LOCKE)) return FLASH_STAT_LOCKE;
|
||||||
|
|
||||||
}
|
}
|
||||||
if ((page_num += flash_lock_pages)>flash_page_count) break;
|
if ((page_num += flash_lock_pages)>flash_page_count) break;
|
||||||
|
@ -151,20 +151,20 @@ int flash_erase_plane(int efc_ofs)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* wait until FLASH is ready, just for sure */
|
/* wait until FLASH is ready, just for sure */
|
||||||
while ((inr(MC_FSR+efc_ofs)&MC_FRDY) == 0);
|
while ((inr(MC_FSR + efc_ofs)&MC_FRDY) == 0);
|
||||||
|
|
||||||
/* erase all command to FCR */
|
/* erase all command to FCR */
|
||||||
outr(MC_FCR+efc_ofs, 0x5a000008);
|
outr(MC_FCR + efc_ofs, 0x5a000008);
|
||||||
|
|
||||||
/* wait until it's done */
|
/* wait until it's done */
|
||||||
while ((inr(MC_FSR+efc_ofs)&MC_FRDY) == 0);
|
while ((inr(MC_FSR + efc_ofs)&MC_FRDY) == 0);
|
||||||
|
|
||||||
/* check for errors */
|
/* check for errors */
|
||||||
if ((inr(MC_FSR+efc_ofs)&MC_PROGE)) return FLASH_STAT_PROGE;
|
if ((inr(MC_FSR + efc_ofs)&MC_PROGE)) return FLASH_STAT_PROGE;
|
||||||
if ((inr(MC_FSR+efc_ofs)&MC_LOCKE)) return FLASH_STAT_LOCKE;
|
if ((inr(MC_FSR + efc_ofs)&MC_LOCKE)) return FLASH_STAT_LOCKE;
|
||||||
|
|
||||||
/* set no erase before programming */
|
/* set no erase before programming */
|
||||||
outr(MC_FMR+efc_ofs, inr(MC_FMR+efc_ofs)|0x80);
|
outr(MC_FMR + efc_ofs, inr(MC_FMR + efc_ofs)|0x80);
|
||||||
|
|
||||||
return FLASH_STAT_OK;
|
return FLASH_STAT_OK;
|
||||||
}
|
}
|
||||||
|
@ -188,7 +188,7 @@ int flash_verify(uint32 adr, unsigned int len, uint8 *src)
|
||||||
{
|
{
|
||||||
unsigned char *flash_ptr;
|
unsigned char *flash_ptr;
|
||||||
|
|
||||||
flash_ptr = (uint8 *)FLASH_AREA_ADDR+adr;
|
flash_ptr = (uint8 *)FLASH_AREA_ADDR + adr;
|
||||||
for ( ;len; len--) {
|
for ( ;len; len--) {
|
||||||
if (*(flash_ptr++)!=*(src++)) return FLASH_STAT_VERIFE;
|
if (*(flash_ptr++)!=*(src++)) return FLASH_STAT_VERIFE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -923,7 +923,7 @@ static int pic32mx_handle_pgm_word_command(struct command_context_s *cmd_ctx, ch
|
||||||
command_print(cmd_ctx, "flash bank '#%s' is out of bounds", args[2]);
|
command_print(cmd_ctx, "flash bank '#%s' is out of bounds", args[2]);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
if (address < bank->base || address >= (bank->base+bank->size))
|
if (address < bank->base || address >= (bank->base + bank->size))
|
||||||
{
|
{
|
||||||
command_print(cmd_ctx, "flash address '%s' is out of bounds", args[0]);
|
command_print(cmd_ctx, "flash address '%s' is out of bounds", args[0]);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
|
@ -62,9 +62,9 @@ typedef struct pic32mx_flash_bank_s
|
||||||
* Note: These macros only work for KSEG0/KSEG1 addresses.
|
* Note: These macros only work for KSEG0/KSEG1 addresses.
|
||||||
*/
|
*/
|
||||||
#define KS1Virt2Phys(vaddr) ((vaddr)-0xA0000000)
|
#define KS1Virt2Phys(vaddr) ((vaddr)-0xA0000000)
|
||||||
#define Phys2KS1Virt(paddr) ((paddr)+0xA0000000)
|
#define Phys2KS1Virt(paddr) ((paddr) + 0xA0000000)
|
||||||
#define KS0Virt2Phys(vaddr) ((vaddr)-0x80000000)
|
#define KS0Virt2Phys(vaddr) ((vaddr)-0x80000000)
|
||||||
#define Phys2KS0Virt(paddr) ((paddr)+0x80000000)
|
#define Phys2KS0Virt(paddr) ((paddr) + 0x80000000)
|
||||||
|
|
||||||
/* pic32mx configuration register locations */
|
/* pic32mx configuration register locations */
|
||||||
|
|
||||||
|
|
|
@ -309,8 +309,8 @@ static int stellaris_info(struct flash_bank_s *bank, char *buf, int buf_size)
|
||||||
stellaris_info->did1,
|
stellaris_info->did1,
|
||||||
stellaris_info->did1,
|
stellaris_info->did1,
|
||||||
"ARMV7M",
|
"ARMV7M",
|
||||||
(int)((1+((stellaris_info->dc0 >> 16) & 0xFFFF))/4),
|
(int)((1 + ((stellaris_info->dc0 >> 16) & 0xFFFF))/4),
|
||||||
(int)((1+(stellaris_info->dc0 & 0xFFFF))*2));
|
(int)((1 + (stellaris_info->dc0 & 0xFFFF))*2));
|
||||||
buf += printed;
|
buf += printed;
|
||||||
buf_size -= printed;
|
buf_size -= printed;
|
||||||
|
|
||||||
|
@ -396,7 +396,7 @@ static void stellaris_read_clock_info(flash_bank_t *bank)
|
||||||
mainfreq = 200000000; /* PLL out frec */
|
mainfreq = 200000000; /* PLL out frec */
|
||||||
|
|
||||||
if (usesysdiv)
|
if (usesysdiv)
|
||||||
stellaris_info->mck_freq = mainfreq/(1+sysdiv);
|
stellaris_info->mck_freq = mainfreq/(1 + sysdiv);
|
||||||
else
|
else
|
||||||
stellaris_info->mck_freq = mainfreq;
|
stellaris_info->mck_freq = mainfreq;
|
||||||
|
|
||||||
|
@ -499,7 +499,7 @@ static int stellaris_read_part_info(struct flash_bank_s *bank)
|
||||||
stellaris_info->did1 = did1;
|
stellaris_info->did1 = did1;
|
||||||
|
|
||||||
stellaris_info->num_lockbits = 1 + (stellaris_info->dc0 & 0xFFFF);
|
stellaris_info->num_lockbits = 1 + (stellaris_info->dc0 & 0xFFFF);
|
||||||
stellaris_info->num_pages = 2 *(1+(stellaris_info->dc0 & 0xFFFF));
|
stellaris_info->num_pages = 2 *(1 + (stellaris_info->dc0 & 0xFFFF));
|
||||||
stellaris_info->pagesize = 1024;
|
stellaris_info->pagesize = 1024;
|
||||||
bank->size = 1024 * stellaris_info->num_pages;
|
bank->size = 1024 * stellaris_info->num_pages;
|
||||||
stellaris_info->pages_in_lockregion = 2;
|
stellaris_info->pages_in_lockregion = 2;
|
||||||
|
|
|
@ -703,7 +703,7 @@ static int str7x_handle_disable_jtag_command(struct command_context_s *cmd_ctx,
|
||||||
flash_cmd = FLASH_SPR;
|
flash_cmd = FLASH_SPR;
|
||||||
target_write_u32(target, str7x_get_flash_adr(bank, FLASH_CR0), flash_cmd);
|
target_write_u32(target, str7x_get_flash_adr(bank, FLASH_CR0), flash_cmd);
|
||||||
target_write_u32(target, str7x_get_flash_adr(bank, FLASH_AR), 0x4010DFBC);
|
target_write_u32(target, str7x_get_flash_adr(bank, FLASH_AR), 0x4010DFBC);
|
||||||
target_write_u32(target, str7x_get_flash_adr(bank, FLASH_DR0), ~(1 << (15+ProtectionLevel)));
|
target_write_u32(target, str7x_get_flash_adr(bank, FLASH_DR0), ~(1 << (15 + ProtectionLevel)));
|
||||||
flash_cmd = FLASH_SPR | FLASH_WMS;
|
flash_cmd = FLASH_SPR | FLASH_WMS;
|
||||||
target_write_u32(target, str7x_get_flash_adr(bank, FLASH_CR0), flash_cmd);
|
target_write_u32(target, str7x_get_flash_adr(bank, FLASH_CR0), flash_cmd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,7 @@ static int str9x_build_block_list(struct flash_bank_s *bank)
|
||||||
if (str9x_info->variant)
|
if (str9x_info->variant)
|
||||||
str9x_info->sector_bits[num_sectors++] = (1 << i);
|
str9x_info->sector_bits[num_sectors++] = (1 << i);
|
||||||
else
|
else
|
||||||
str9x_info->sector_bits[num_sectors++] = (1 << (i+8));
|
str9x_info->sector_bits[num_sectors++] = (1 << (i + 8));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
|
@ -593,7 +593,7 @@ static int tms470_flash_initialize_internal_state_machine(struct flash_bank_s *b
|
||||||
LOG_DEBUG("set fmmaxpp = 50");
|
LOG_DEBUG("set fmmaxpp = 50");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MAXCP = 0xf000+2000
|
* MAXCP = 0xf000 + 2000
|
||||||
*/
|
*/
|
||||||
target_write_u32(target, 0xFFE8A084, 0xf000 + 2000);
|
target_write_u32(target, 0xFFE8A084, 0xf000 + 2000);
|
||||||
LOG_DEBUG("set fmmaxcp = 0x%04x", 0xf000 + 2000);
|
LOG_DEBUG("set fmmaxcp = 0x%04x", 0xf000 + 2000);
|
||||||
|
|
|
@ -42,7 +42,7 @@ static inline void buf_set_u32(uint8_t* buffer, unsigned int first, unsigned int
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for (i = first; i<first+num; i++)
|
for (i = first; i<first + num; i++)
|
||||||
{
|
{
|
||||||
if (((value >> (i-first))&1) == 1)
|
if (((value >> (i-first))&1) == 1)
|
||||||
buffer[i/8] |= 1 << (i%8);
|
buffer[i/8] |= 1 << (i%8);
|
||||||
|
@ -61,7 +61,7 @@ static inline uint32_t buf_get_u32(const uint8_t* buffer, unsigned int first, un
|
||||||
uint32_t result = 0;
|
uint32_t result = 0;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for (i = first; i<first+num; i++)
|
for (i = first; i<first + num; i++)
|
||||||
{
|
{
|
||||||
if (((buffer[i/8]>>(i%8))&1) == 1)
|
if (((buffer[i/8]>>(i%8))&1) == 1)
|
||||||
result |= 1 << (i-first);
|
result |= 1 << (i-first);
|
||||||
|
|
|
@ -495,14 +495,14 @@ int command_run_line(command_context_t *context, char *line)
|
||||||
if (reslen>0)
|
if (reslen>0)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char buff[256+1];
|
char buff[256 + 1];
|
||||||
for (i = 0; i < reslen; i += 256)
|
for (i = 0; i < reslen; i += 256)
|
||||||
{
|
{
|
||||||
int chunk;
|
int chunk;
|
||||||
chunk = reslen - i;
|
chunk = reslen - i;
|
||||||
if (chunk > 256)
|
if (chunk > 256)
|
||||||
chunk = 256;
|
chunk = 256;
|
||||||
strncpy(buff, result+i, chunk);
|
strncpy(buff, result + i, chunk);
|
||||||
buff[chunk] = 0;
|
buff[chunk] = 0;
|
||||||
LOG_USER_N("%s", buff);
|
LOG_USER_N("%s", buff);
|
||||||
}
|
}
|
||||||
|
@ -599,7 +599,7 @@ static size_t openocd_jim_fwrite(const void *_ptr, size_t size, size_t n, void *
|
||||||
}
|
}
|
||||||
/* GRR we must chunk - not null terminated */
|
/* GRR we must chunk - not null terminated */
|
||||||
while (nbytes) {
|
while (nbytes) {
|
||||||
char chunk[128+1];
|
char chunk[128 + 1];
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
x = nbytes;
|
x = nbytes;
|
||||||
|
|
|
@ -37,7 +37,7 @@ static char** script_search_dirs;
|
||||||
void add_script_search_dir (const char *dir)
|
void add_script_search_dir (const char *dir)
|
||||||
{
|
{
|
||||||
num_script_dirs++;
|
num_script_dirs++;
|
||||||
script_search_dirs = (char **)realloc(script_search_dirs, (num_script_dirs+1) * sizeof (char *));
|
script_search_dirs = (char **)realloc(script_search_dirs, (num_script_dirs + 1) * sizeof (char *));
|
||||||
|
|
||||||
script_search_dirs[num_script_dirs-1] = strdup(dir);
|
script_search_dirs[num_script_dirs-1] = strdup(dir);
|
||||||
script_search_dirs[num_script_dirs] = NULL;
|
script_search_dirs[num_script_dirs] = NULL;
|
||||||
|
@ -46,7 +46,7 @@ void add_script_search_dir (const char *dir)
|
||||||
void add_config_command (const char *cfg)
|
void add_config_command (const char *cfg)
|
||||||
{
|
{
|
||||||
num_config_files++;
|
num_config_files++;
|
||||||
config_file_names = (char **)realloc(config_file_names, (num_config_files+1) * sizeof (char *));
|
config_file_names = (char **)realloc(config_file_names, (num_config_files + 1) * sizeof (char *));
|
||||||
|
|
||||||
config_file_names[num_config_files-1] = strdup(cfg);
|
config_file_names[num_config_files-1] = strdup(cfg);
|
||||||
config_file_names[num_config_files] = NULL;
|
config_file_names[num_config_files] = NULL;
|
||||||
|
|
|
@ -274,7 +274,7 @@ int handle_cp_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
|
||||||
chunk = maxChunk;
|
chunk = maxChunk;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((retval == ERROR_OK) && (fwrite(((char *)data)+pos, 1, chunk, f) != chunk))
|
if ((retval == ERROR_OK) && (fwrite(((char *)data) + pos, 1, chunk, f) != chunk))
|
||||||
retval = ERROR_INVALID_ARGUMENTS;
|
retval = ERROR_INVALID_ARGUMENTS;
|
||||||
|
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
|
|
|
@ -310,7 +310,7 @@ int Jim_ProcessEvents(Jim_Interp *interp, int flags)
|
||||||
// fprintf(stderr,"No Event\n");
|
// fprintf(stderr,"No Event\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = select(maxfd+1, &rfds, &wfds, &efds, tvp);
|
retval = select(maxfd + 1, &rfds, &wfds, &efds, tvp);
|
||||||
if (retval < 0) {
|
if (retval < 0) {
|
||||||
switch (errno) {
|
switch (errno) {
|
||||||
case EINTR: fprintf(stderr,"select EINTR\n"); break;
|
case EINTR: fprintf(stderr,"select EINTR\n"); break;
|
||||||
|
|
372
src/helper/jim.c
372
src/helper/jim.c
File diff suppressed because it is too large
Load Diff
|
@ -563,7 +563,7 @@ typedef struct Jim_Interp {
|
||||||
typedef struct Jim_Reference {
|
typedef struct Jim_Reference {
|
||||||
Jim_Obj *objPtr;
|
Jim_Obj *objPtr;
|
||||||
Jim_Obj *finalizerCmdNamePtr;
|
Jim_Obj *finalizerCmdNamePtr;
|
||||||
char tag[JIM_REFERENCE_TAGLEN+1];
|
char tag[JIM_REFERENCE_TAGLEN + 1];
|
||||||
} Jim_Reference;
|
} Jim_Reference;
|
||||||
|
|
||||||
/** Name Value Pairs, aka: NVP
|
/** Name Value Pairs, aka: NVP
|
||||||
|
|
|
@ -103,7 +103,7 @@ static void log_puts(enum log_levels level, const char *file, int line, const ch
|
||||||
#ifdef _DEBUG_FREE_SPACE_
|
#ifdef _DEBUG_FREE_SPACE_
|
||||||
" %d"
|
" %d"
|
||||||
#endif
|
#endif
|
||||||
": %s", log_strings[level+1], count, t, file, line, function,
|
": %s", log_strings[level + 1], count, t, file, line, function,
|
||||||
#ifdef _DEBUG_FREE_SPACE_
|
#ifdef _DEBUG_FREE_SPACE_
|
||||||
info.fordblks,
|
info.fordblks,
|
||||||
#endif
|
#endif
|
||||||
|
@ -117,7 +117,7 @@ static void log_puts(enum log_levels level, const char *file, int line, const ch
|
||||||
{
|
{
|
||||||
/* print human readable output - but skip empty lines */
|
/* print human readable output - but skip empty lines */
|
||||||
fprintf(log_output, "%s%s",
|
fprintf(log_output, "%s%s",
|
||||||
(level > LOG_LVL_USER)?log_strings[level+1]:"", string);
|
(level > LOG_LVL_USER)?log_strings[level + 1]:"", string);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
|
|
||||||
/* logging priorities
|
/* logging priorities
|
||||||
* LOG_LVL_SILENT - turn off all output. In lieu of try+catch this can be used as a
|
* LOG_LVL_SILENT - turn off all output. In lieu of try + catch this can be used as a
|
||||||
* feeble ersatz.
|
* feeble ersatz.
|
||||||
* LOG_LVL_USER - user messages. Could be anything from information
|
* LOG_LVL_USER - user messages. Could be anything from information
|
||||||
* to progress messags. These messages do not represent
|
* to progress messags. These messages do not represent
|
||||||
|
|
|
@ -218,7 +218,7 @@ int win_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct time
|
||||||
tvslice.tv_sec = 0;
|
tvslice.tv_sec = 0;
|
||||||
tvslice.tv_usec = 100000;
|
tvslice.tv_usec = 100000;
|
||||||
|
|
||||||
retcode = select(sock_max_fd+1, &aread, &awrite, &aexcept, &tvslice);
|
retcode = select(sock_max_fd + 1, &aread, &awrite, &aexcept, &tvslice);
|
||||||
}
|
}
|
||||||
if (n_handles > 0) {
|
if (n_handles > 0) {
|
||||||
/* check handles */
|
/* check handles */
|
||||||
|
|
|
@ -207,7 +207,7 @@ static int armjtagew_speed(int speed)
|
||||||
|
|
||||||
|
|
||||||
usb_out_buffer[0] = CMD_SET_TCK_FREQUENCY;
|
usb_out_buffer[0] = CMD_SET_TCK_FREQUENCY;
|
||||||
buf_set_u32(usb_out_buffer+1, 0, 32, speed);
|
buf_set_u32(usb_out_buffer + 1, 0, 32, speed);
|
||||||
|
|
||||||
result = armjtagew_usb_message(armjtagew_jtag_handle, 4, 4);
|
result = armjtagew_usb_message(armjtagew_jtag_handle, 4, 4);
|
||||||
|
|
||||||
|
@ -500,7 +500,7 @@ static int armjtagew_get_version_info(void)
|
||||||
|
|
||||||
/* query hardware version */
|
/* query hardware version */
|
||||||
usb_out_buffer[0] = CMD_GET_VERSION;
|
usb_out_buffer[0] = CMD_GET_VERSION;
|
||||||
result = armjtagew_usb_message(armjtagew_jtag_handle, 1, 4+15+256);
|
result = armjtagew_usb_message(armjtagew_jtag_handle, 1, 4 + 15 + 256);
|
||||||
|
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
{
|
{
|
||||||
|
@ -509,9 +509,9 @@ static int armjtagew_get_version_info(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
memcpy(sn, usb_in_buffer+4, 15);
|
memcpy(sn, usb_in_buffer + 4, 15);
|
||||||
sn[15] = '\0';
|
sn[15] = '\0';
|
||||||
memcpy(auxinfo, usb_in_buffer+4+15, 256);
|
memcpy(auxinfo, usb_in_buffer + 4+15, 256);
|
||||||
auxinfo[256] = '\0';
|
auxinfo[256] = '\0';
|
||||||
|
|
||||||
LOG_INFO("ARM-JTAG-EW firmware version %d.%d, hardware revision %c, SN=%s, Additional info: %s", \
|
LOG_INFO("ARM-JTAG-EW firmware version %d.%d, hardware revision %c, SN=%s, Additional info: %s", \
|
||||||
|
@ -651,7 +651,7 @@ static int armjtagew_tap_execute(void)
|
||||||
byte_length = tap_length / 8;
|
byte_length = tap_length / 8;
|
||||||
|
|
||||||
usb_out_buffer[0] = CMD_TAP_SHIFT;
|
usb_out_buffer[0] = CMD_TAP_SHIFT;
|
||||||
buf_set_u32(usb_out_buffer+1, 0, 16, byte_length);
|
buf_set_u32(usb_out_buffer + 1, 0, 16, byte_length);
|
||||||
|
|
||||||
tms_offset = 3;
|
tms_offset = 3;
|
||||||
for (i = 0; i < byte_length; i++)
|
for (i = 0; i < byte_length; i++)
|
||||||
|
|
|
@ -188,7 +188,7 @@ static jtag_command_t* first_unsent; /* next command that has to be sent
|
||||||
static int require_send;
|
static int require_send;
|
||||||
|
|
||||||
|
|
||||||
/* http://urjtag.wiki.sourceforge.net/Cable+FT2232 says:
|
/* http://urjtag.wiki.sourceforge.net/Cable + FT2232 says:
|
||||||
|
|
||||||
"There is a significant difference between libftdi and libftd2xx. The latter
|
"There is a significant difference between libftdi and libftd2xx. The latter
|
||||||
one allows to schedule up to 64*64 bytes of result data while libftdi fails
|
one allows to schedule up to 64*64 bytes of result data while libftdi fails
|
||||||
|
|
|
@ -50,7 +50,7 @@ static unsigned int jlink_hw_jtag_version = 2;
|
||||||
//#define JLINK_TAP_BUFFER_SIZE 384
|
//#define JLINK_TAP_BUFFER_SIZE 384
|
||||||
|
|
||||||
#define JLINK_IN_BUFFER_SIZE 2048
|
#define JLINK_IN_BUFFER_SIZE 2048
|
||||||
#define JLINK_OUT_BUFFER_SIZE 2*2048+4
|
#define JLINK_OUT_BUFFER_SIZE 2*2048 + 4
|
||||||
#define JLINK_EMU_RESULT_BUFFER_SIZE 64
|
#define JLINK_EMU_RESULT_BUFFER_SIZE 64
|
||||||
|
|
||||||
/* Global USB buffers */
|
/* Global USB buffers */
|
||||||
|
|
|
@ -633,7 +633,7 @@ extern void jtag_execute_queue_noclear(void);
|
||||||
int jtag_get_flush_queue_count(void);
|
int jtag_get_flush_queue_count(void);
|
||||||
|
|
||||||
|
|
||||||
/* can be implemented by hw+sw */
|
/* can be implemented by hw + sw */
|
||||||
extern int jtag_power_dropout(int* dropout);
|
extern int jtag_power_dropout(int* dropout);
|
||||||
extern int jtag_srst_asserted(int* srst_asserted);
|
extern int jtag_srst_asserted(int* srst_asserted);
|
||||||
|
|
||||||
|
|
|
@ -712,7 +712,7 @@ static int presto_jtag_khz(int khz, int *jtag_speed)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (khz >= 3000) *jtag_speed = 0;
|
if (khz >= 3000) *jtag_speed = 0;
|
||||||
else *jtag_speed = (1000+khz-1)/khz;
|
else *jtag_speed = (1000 + khz-1)/khz;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -532,7 +532,7 @@ static int jim_jtag_command( Jim_Interp *interp, int argc, Jim_Obj *const *argv
|
||||||
|
|
||||||
context = Jim_GetAssocData(interp, "context");
|
context = Jim_GetAssocData(interp, "context");
|
||||||
/* go past the command */
|
/* go past the command */
|
||||||
Jim_GetOpt_Setup( &goi, interp, argc-1, argv+1 );
|
Jim_GetOpt_Setup( &goi, interp, argc-1, argv + 1 );
|
||||||
|
|
||||||
e = Jim_GetOpt_Nvp( &goi, jtag_cmds, &n );
|
e = Jim_GetOpt_Nvp( &goi, jtag_cmds, &n );
|
||||||
if ( e != JIM_OK ){
|
if ( e != JIM_OK ){
|
||||||
|
@ -1286,7 +1286,7 @@ static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Not valid.. are we at the end? */
|
/* Not valid.. are we at the end? */
|
||||||
if ( ((i+2) != argc) ){
|
if ( ((i + 2) != argc) ){
|
||||||
/* nope, then error */
|
/* nope, then error */
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
@ -1301,7 +1301,7 @@ static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args
|
||||||
/* is it the magic? */
|
/* is it the magic? */
|
||||||
if ( 0 == strcmp( "-endstate", cp ) ){
|
if ( 0 == strcmp( "-endstate", cp ) ){
|
||||||
/* is the statename valid? */
|
/* is the statename valid? */
|
||||||
cp = Jim_GetString( args[i+1], NULL );
|
cp = Jim_GetString( args[i + 1], NULL );
|
||||||
|
|
||||||
/* see if it is a valid state name */
|
/* see if it is a valid state name */
|
||||||
endstate = tap_state_by_name(cp);
|
endstate = tap_state_by_name(cp);
|
||||||
|
@ -1340,7 +1340,7 @@ static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args
|
||||||
const char *str;
|
const char *str;
|
||||||
|
|
||||||
Jim_GetLong(interp, args[i], &bits);
|
Jim_GetLong(interp, args[i], &bits);
|
||||||
str = Jim_GetString(args[i+1], &len);
|
str = Jim_GetString(args[i + 1], &len);
|
||||||
|
|
||||||
fields[field_count].tap = tap;
|
fields[field_count].tap = tap;
|
||||||
fields[field_count].num_bits = bits;
|
fields[field_count].num_bits = bits;
|
||||||
|
@ -1387,7 +1387,7 @@ static int Jim_Command_pathmove(Jim_Interp *interp, int argc, Jim_Obj *const *ar
|
||||||
{
|
{
|
||||||
tap_state_t states[8];
|
tap_state_t states[8];
|
||||||
|
|
||||||
if ((argc < 2) || ((size_t)argc > (sizeof(states)/sizeof(*states)+1)))
|
if ((argc < 2) || ((size_t)argc > (sizeof(states)/sizeof(*states) + 1)))
|
||||||
{
|
{
|
||||||
Jim_WrongNumArgs(interp, 1, args, "wrong arguments");
|
Jim_WrongNumArgs(interp, 1, args, "wrong arguments");
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
|
@ -1399,7 +1399,7 @@ static int Jim_Command_pathmove(Jim_Interp *interp, int argc, Jim_Obj *const *ar
|
||||||
for (i = 0; i<argc-1; i++)
|
for (i = 0; i<argc-1; i++)
|
||||||
{
|
{
|
||||||
const char *cp;
|
const char *cp;
|
||||||
cp = Jim_GetString( args[i+1], NULL );
|
cp = Jim_GetString( args[i + 1], NULL );
|
||||||
states[i] = tap_state_by_name(cp);
|
states[i] = tap_state_by_name(cp);
|
||||||
if ( states[i] < 0 )
|
if ( states[i] < 0 )
|
||||||
{
|
{
|
||||||
|
@ -1415,7 +1415,7 @@ static int Jim_Command_pathmove(Jim_Interp *interp, int argc, Jim_Obj *const *ar
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
jtag_add_pathmove(argc-2, states+1);
|
jtag_add_pathmove(argc-2, states + 1);
|
||||||
|
|
||||||
if (jtag_execute_queue()!= ERROR_OK)
|
if (jtag_execute_queue()!= ERROR_OK)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1585,7 +1585,7 @@ static void vsllink_tap_append_scan_dma(int length, uint8_t *buffer, scan_comman
|
||||||
|
|
||||||
for (i = 0; i < len_tmp; i++)
|
for (i = 0; i < len_tmp; i++)
|
||||||
{
|
{
|
||||||
vsllink_tap_append_step(((len_all+i) < length-1 ? 0 : 1), (buffer[(len_all+i)/8] >> ((len_all+i)%8)) & 1);
|
vsllink_tap_append_step(((len_all + i) < length-1 ? 0 : 1), (buffer[(len_all + i)/8] >> ((len_all + i)%8)) & 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
pending_scan_results_length++;
|
pending_scan_results_length++;
|
||||||
|
|
|
@ -40,7 +40,7 @@ static __inline__ void waitIdle(void)
|
||||||
cyg_uint32 empty;
|
cyg_uint32 empty;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
ZY1000_PEEK(ZY1000_JTAG_BASE+0x10, empty);
|
ZY1000_PEEK(ZY1000_JTAG_BASE + 0x10, empty);
|
||||||
} while ((empty & 0x100) == 0);
|
} while ((empty & 0x100) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ static void sampleShiftRegister(void)
|
||||||
#if 0
|
#if 0
|
||||||
cyg_uint32 dummy;
|
cyg_uint32 dummy;
|
||||||
waitIdle();
|
waitIdle();
|
||||||
ZY1000_PEEK(ZY1000_JTAG_BASE+0xc, dummy);
|
ZY1000_PEEK(ZY1000_JTAG_BASE + 0xc, dummy);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ static void setCurrentState(enum tap_state state)
|
||||||
}
|
}
|
||||||
waitQueue();
|
waitQueue();
|
||||||
sampleShiftRegister();
|
sampleShiftRegister();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x8, (repeat << 8)|(a << 4)|a);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x8, (repeat << 8)|(a << 4)|a);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ static __inline__ void shiftValueInner(const enum tap_state state, const enum ta
|
||||||
b = endState;
|
b = endState;
|
||||||
waitQueue();
|
waitQueue();
|
||||||
sampleShiftRegister();
|
sampleShiftRegister();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0xc, value);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0xc, value);
|
||||||
#if 1
|
#if 1
|
||||||
#if TEST_MANUAL()
|
#if TEST_MANUAL()
|
||||||
if ((state == TAP_DRSHIFT) && (endState != TAP_DRSHIFT))
|
if ((state == TAP_DRSHIFT) && (endState != TAP_DRSHIFT))
|
||||||
|
@ -106,21 +106,21 @@ static __inline__ void shiftValueInner(const enum tap_state state, const enum ta
|
||||||
}
|
}
|
||||||
/* shift out value */
|
/* shift out value */
|
||||||
waitIdle();
|
waitIdle();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x28, (((value >> i)&1) << 1)|tms);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x28, (((value >> i)&1) << 1)|tms);
|
||||||
}
|
}
|
||||||
waitIdle();
|
waitIdle();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x28, 0);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x28, 0);
|
||||||
waitIdle();
|
waitIdle();
|
||||||
//ZY1000_POKE(ZY1000_JTAG_BASE+0x20, TAP_DRSHIFT); // set this state and things break => expected
|
//ZY1000_POKE(ZY1000_JTAG_BASE + 0x20, TAP_DRSHIFT); // set this state and things break => expected
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x20, TAP_DRPAUSE); // set this and things will work => expected. Not setting this is not sufficient to make things break.
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x20, TAP_DRPAUSE); // set this and things will work => expected. Not setting this is not sufficient to make things break.
|
||||||
setCurrentState(endState);
|
setCurrentState(endState);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x8, (repeat << 8)|(a << 4)|b);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x8, (repeat << 8)|(a << 4)|b);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* fast version */
|
/* fast version */
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x8, (repeat << 8)|(a << 4)|b);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x8, (repeat << 8)|(a << 4)|b);
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
/* maximum debug version */
|
/* maximum debug version */
|
||||||
|
@ -131,16 +131,16 @@ static __inline__ void shiftValueInner(const enum tap_state state, const enum ta
|
||||||
for (i = 0; i<repeat-1; i++)
|
for (i = 0; i<repeat-1; i++)
|
||||||
{
|
{
|
||||||
sampleShiftRegister();
|
sampleShiftRegister();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0xc, value >> i);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0xc, value >> i);
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x8, (1 << 8)|(a << 4)|a);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x8, (1 << 8)|(a << 4)|a);
|
||||||
}
|
}
|
||||||
sampleShiftRegister();
|
sampleShiftRegister();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0xc, value >> (repeat-1));
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0xc, value >> (repeat-1));
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x8, (1 << 8)|(a << 4)|b);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x8, (1 << 8)|(a << 4)|b);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
sampleShiftRegister();
|
sampleShiftRegister();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x8, (repeat << 8)|(a << 4)|b);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x8, (repeat << 8)|(a << 4)|b);
|
||||||
}
|
}
|
||||||
sampleShiftRegister();
|
sampleShiftRegister();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -78,8 +78,8 @@ static bool readPowerDropout(void)
|
||||||
{
|
{
|
||||||
cyg_uint32 state;
|
cyg_uint32 state;
|
||||||
// sample and clear power dropout
|
// sample and clear power dropout
|
||||||
HAL_WRITE_UINT32(ZY1000_JTAG_BASE+0x10, 0x80);
|
HAL_WRITE_UINT32(ZY1000_JTAG_BASE + 0x10, 0x80);
|
||||||
HAL_READ_UINT32(ZY1000_JTAG_BASE+0x10, state);
|
HAL_READ_UINT32(ZY1000_JTAG_BASE + 0x10, state);
|
||||||
bool powerDropout;
|
bool powerDropout;
|
||||||
powerDropout = (state & 0x80) != 0;
|
powerDropout = (state & 0x80) != 0;
|
||||||
return powerDropout;
|
return powerDropout;
|
||||||
|
@ -90,8 +90,8 @@ static bool readSRST(void)
|
||||||
{
|
{
|
||||||
cyg_uint32 state;
|
cyg_uint32 state;
|
||||||
// sample and clear SRST sensing
|
// sample and clear SRST sensing
|
||||||
HAL_WRITE_UINT32(ZY1000_JTAG_BASE+0x10, 0x00000040);
|
HAL_WRITE_UINT32(ZY1000_JTAG_BASE + 0x10, 0x00000040);
|
||||||
HAL_READ_UINT32(ZY1000_JTAG_BASE+0x10, state);
|
HAL_READ_UINT32(ZY1000_JTAG_BASE + 0x10, state);
|
||||||
bool srstAsserted;
|
bool srstAsserted;
|
||||||
srstAsserted = (state & 0x40) != 0;
|
srstAsserted = (state & 0x40) != 0;
|
||||||
return srstAsserted;
|
return srstAsserted;
|
||||||
|
@ -129,35 +129,35 @@ void zy1000_reset(int trst, int srst)
|
||||||
LOG_DEBUG("zy1000 trst=%d, srst=%d", trst, srst);
|
LOG_DEBUG("zy1000 trst=%d, srst=%d", trst, srst);
|
||||||
if (!srst)
|
if (!srst)
|
||||||
{
|
{
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x14, 0x00000001);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x14, 0x00000001);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Danger!!! if clk != 0 when in
|
/* Danger!!! if clk != 0 when in
|
||||||
* idle in TAP_IDLE, reset halt on str912 will fail.
|
* idle in TAP_IDLE, reset halt on str912 will fail.
|
||||||
*/
|
*/
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x10, 0x00000001);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x10, 0x00000001);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!trst)
|
if (!trst)
|
||||||
{
|
{
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x14, 0x00000002);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x14, 0x00000002);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* assert reset */
|
/* assert reset */
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x10, 0x00000002);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x10, 0x00000002);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trst||(srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST)))
|
if (trst||(srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST)))
|
||||||
{
|
{
|
||||||
waitIdle();
|
waitIdle();
|
||||||
/* we're now in the RESET state until trst is deasserted */
|
/* we're now in the RESET state until trst is deasserted */
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x20, TAP_RESET);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x20, TAP_RESET);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
/* We'll get RCLK failure when we assert TRST, so clear any false positives here */
|
/* We'll get RCLK failure when we assert TRST, so clear any false positives here */
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x14, 0x400);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x14, 0x400);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* wait for srst to float back up */
|
/* wait for srst to float back up */
|
||||||
|
@ -192,7 +192,7 @@ int zy1000_speed(int speed)
|
||||||
{
|
{
|
||||||
/*0 means RCLK*/
|
/*0 means RCLK*/
|
||||||
speed = 0;
|
speed = 0;
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x10, 0x100);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x10, 0x100);
|
||||||
LOG_DEBUG("jtag_speed using RCLK");
|
LOG_DEBUG("jtag_speed using RCLK");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -204,8 +204,8 @@ int zy1000_speed(int speed)
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_USER("jtag_speed %d => JTAG clk=%f", speed, 64.0/(float)speed);
|
LOG_USER("jtag_speed %d => JTAG clk=%f", speed, 64.0/(float)speed);
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x14, 0x100);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x14, 0x100);
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x1c, speed&~1);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x1c, speed&~1);
|
||||||
}
|
}
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -218,10 +218,10 @@ static void setPower(bool power)
|
||||||
savePower = power;
|
savePower = power;
|
||||||
if (power)
|
if (power)
|
||||||
{
|
{
|
||||||
HAL_WRITE_UINT32(ZY1000_JTAG_BASE+0x14, 0x8);
|
HAL_WRITE_UINT32(ZY1000_JTAG_BASE + 0x14, 0x8);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
HAL_WRITE_UINT32(ZY1000_JTAG_BASE+0x10, 0x8);
|
HAL_WRITE_UINT32(ZY1000_JTAG_BASE + 0x10, 0x8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ static int jim_zy1000_version(Jim_Interp *interp, int argc, Jim_Obj *const *argv
|
||||||
if (strcmp("openocd", str) == 0)
|
if (strcmp("openocd", str) == 0)
|
||||||
{
|
{
|
||||||
int revision;
|
int revision;
|
||||||
revision = atol(ZYLIN_OPENOCD+strlen("XRevision: "));
|
revision = atol(ZYLIN_OPENOCD + strlen("XRevision: "));
|
||||||
sprintf(buff, "%d", revision);
|
sprintf(buff, "%d", revision);
|
||||||
version_str = buff;
|
version_str = buff;
|
||||||
}
|
}
|
||||||
|
@ -307,7 +307,7 @@ zylinjtag_Jim_Command_powerstatus(Jim_Interp *interp,
|
||||||
}
|
}
|
||||||
|
|
||||||
cyg_uint32 status;
|
cyg_uint32 status;
|
||||||
ZY1000_PEEK(ZY1000_JTAG_BASE+0x10, status);
|
ZY1000_PEEK(ZY1000_JTAG_BASE + 0x10, status);
|
||||||
|
|
||||||
Jim_SetResult(interp, Jim_NewIntObj(interp, (status&0x80) != 0));
|
Jim_SetResult(interp, Jim_NewIntObj(interp, (status&0x80) != 0));
|
||||||
|
|
||||||
|
@ -334,7 +334,7 @@ int zy1000_init(void)
|
||||||
{
|
{
|
||||||
LOG_USER("%s", ZYLIN_OPENOCD_VERSION);
|
LOG_USER("%s", ZYLIN_OPENOCD_VERSION);
|
||||||
|
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x10, 0x30); // Turn on LED1 & LED2
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x10, 0x30); // Turn on LED1 & LED2
|
||||||
|
|
||||||
setPower(true); // on by default
|
setPower(true); // on by default
|
||||||
|
|
||||||
|
@ -359,9 +359,9 @@ int interface_jtag_execute_queue(void)
|
||||||
cyg_uint32 empty;
|
cyg_uint32 empty;
|
||||||
|
|
||||||
waitIdle();
|
waitIdle();
|
||||||
ZY1000_PEEK(ZY1000_JTAG_BASE+0x10, empty);
|
ZY1000_PEEK(ZY1000_JTAG_BASE + 0x10, empty);
|
||||||
/* clear JTAG error register */
|
/* clear JTAG error register */
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x14, 0x400);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x14, 0x400);
|
||||||
|
|
||||||
if ((empty&0x400) != 0)
|
if ((empty&0x400) != 0)
|
||||||
{
|
{
|
||||||
|
@ -382,7 +382,7 @@ static cyg_uint32 getShiftValue(void)
|
||||||
{
|
{
|
||||||
cyg_uint32 value;
|
cyg_uint32 value;
|
||||||
waitIdle();
|
waitIdle();
|
||||||
ZY1000_PEEK(ZY1000_JTAG_BASE+0xc, value);
|
ZY1000_PEEK(ZY1000_JTAG_BASE + 0xc, value);
|
||||||
VERBOSE(LOG_INFO("getShiftValue %08x", value));
|
VERBOSE(LOG_INFO("getShiftValue %08x", value));
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
@ -391,7 +391,7 @@ static cyg_uint32 getShiftValueFlip(void)
|
||||||
{
|
{
|
||||||
cyg_uint32 value;
|
cyg_uint32 value;
|
||||||
waitIdle();
|
waitIdle();
|
||||||
ZY1000_PEEK(ZY1000_JTAG_BASE+0x18, value);
|
ZY1000_PEEK(ZY1000_JTAG_BASE + 0x18, value);
|
||||||
VERBOSE(LOG_INFO("getShiftValue %08x (flipped)", value));
|
VERBOSE(LOG_INFO("getShiftValue %08x (flipped)", value));
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
@ -404,8 +404,8 @@ static void shiftValueInnerFlip(const tap_state_t state, const tap_state_t endSt
|
||||||
cyg_uint32 a,b;
|
cyg_uint32 a,b;
|
||||||
a = state;
|
a = state;
|
||||||
b = endState;
|
b = endState;
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0xc, value);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0xc, value);
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x8, (1 << 15)|(repeat << 8)|(a << 4)|b);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x8, (1 << 15)|(repeat << 8)|(a << 4)|b);
|
||||||
VERBOSE(getShiftValueFlip());
|
VERBOSE(getShiftValueFlip());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -450,14 +450,14 @@ static __inline void scanFields(int num_fields, const scan_field_t *fields, tap_
|
||||||
pause_state = end_state;
|
pause_state = end_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
// we have (num_bits+7)/8 bytes of bits to toggle out.
|
// we have (num_bits + 7)/8 bytes of bits to toggle out.
|
||||||
// bits are pushed out LSB to MSB
|
// bits are pushed out LSB to MSB
|
||||||
value = 0;
|
value = 0;
|
||||||
if (fields[i].out_value != NULL)
|
if (fields[i].out_value != NULL)
|
||||||
{
|
{
|
||||||
for (l = 0; l<k; l += 8)
|
for (l = 0; l<k; l += 8)
|
||||||
{
|
{
|
||||||
value|=fields[i].out_value[(j+l)/8]<<l;
|
value|=fields[i].out_value[(j + l)/8]<<l;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* mask away unused bits for easier debugging */
|
/* mask away unused bits for easier debugging */
|
||||||
|
@ -474,7 +474,7 @@ static __inline void scanFields(int num_fields, const scan_field_t *fields, tap_
|
||||||
|
|
||||||
for (l = 0; l<k; l += 8)
|
for (l = 0; l<k; l += 8)
|
||||||
{
|
{
|
||||||
inBuffer[(j+l)/8]=(value >> l)&0xff;
|
inBuffer[(j + l)/8]=(value >> l)&0xff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
j += k;
|
j += k;
|
||||||
|
@ -517,7 +517,7 @@ int interface_jtag_add_ir_scan(int num_fields, const scan_field_t *fields, tap_s
|
||||||
{
|
{
|
||||||
found = 1;
|
found = 1;
|
||||||
|
|
||||||
scanFields(1, fields+j, TAP_IRSHIFT, end_state);
|
scanFields(1, fields + j, TAP_IRSHIFT, end_state);
|
||||||
/* update device information */
|
/* update device information */
|
||||||
buf_cpy(fields[j].out_value, tap->cur_instr, scan_size);
|
buf_cpy(fields[j].out_value, tap->cur_instr, scan_size);
|
||||||
|
|
||||||
|
@ -582,7 +582,7 @@ int interface_jtag_add_dr_scan(int num_fields, const scan_field_t *fields, tap_s
|
||||||
{
|
{
|
||||||
found = 1;
|
found = 1;
|
||||||
|
|
||||||
scanFields(1, fields+j, TAP_DRSHIFT, end_state);
|
scanFields(1, fields + j, TAP_DRSHIFT, end_state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found)
|
if (!found)
|
||||||
|
@ -659,10 +659,10 @@ static int zy1000_jtag_add_clocks(int num_cycles, tap_state_t state, tap_state_t
|
||||||
{
|
{
|
||||||
tms = (tms_scan >> i) & 1;
|
tms = (tms_scan >> i) & 1;
|
||||||
waitIdle();
|
waitIdle();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x28, tms);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x28, tms);
|
||||||
}
|
}
|
||||||
waitIdle();
|
waitIdle();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x20, state);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x20, state);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -714,7 +714,7 @@ int interface_jtag_add_pathmove(int num_states, const tap_state_t *path)
|
||||||
}
|
}
|
||||||
|
|
||||||
waitIdle();
|
waitIdle();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x28, tms);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x28, tms);
|
||||||
|
|
||||||
cur_state = path[state_count];
|
cur_state = path[state_count];
|
||||||
state_count++;
|
state_count++;
|
||||||
|
@ -722,7 +722,7 @@ int interface_jtag_add_pathmove(int num_states, const tap_state_t *path)
|
||||||
}
|
}
|
||||||
|
|
||||||
waitIdle();
|
waitIdle();
|
||||||
ZY1000_POKE(ZY1000_JTAG_BASE+0x20, cur_state);
|
ZY1000_POKE(ZY1000_JTAG_BASE + 0x20, cur_state);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -345,7 +345,7 @@ int gdb_put_packet_inner(connection_t *connection, char *buffer, int len)
|
||||||
if ((size_t)len + 4 <= sizeof(local_buffer))
|
if ((size_t)len + 4 <= sizeof(local_buffer))
|
||||||
{
|
{
|
||||||
/* performance gain on smaller packets by only a single call to gdb_write() */
|
/* performance gain on smaller packets by only a single call to gdb_write() */
|
||||||
memcpy(local_buffer+1, buffer, len++);
|
memcpy(local_buffer + 1, buffer, len++);
|
||||||
local_buffer[len++] = '#';
|
local_buffer[len++] = '#';
|
||||||
local_buffer[len++] = DIGITS[(my_checksum >> 4) & 0xf];
|
local_buffer[len++] = DIGITS[(my_checksum >> 4) & 0xf];
|
||||||
local_buffer[len++] = DIGITS[my_checksum & 0xf];
|
local_buffer[len++] = DIGITS[my_checksum & 0xf];
|
||||||
|
@ -369,7 +369,7 @@ int gdb_put_packet_inner(connection_t *connection, char *buffer, int len)
|
||||||
{
|
{
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
if ((retval = gdb_write(connection, local_buffer+1, 3)) != ERROR_OK)
|
if ((retval = gdb_write(connection, local_buffer + 1, 3)) != ERROR_OK)
|
||||||
{
|
{
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -461,7 +461,7 @@ static __inline__ int fetch_packet(connection_t *connection, int *checksum_ok, i
|
||||||
* We need to leave at least 2 bytes in the buffer to have
|
* We need to leave at least 2 bytes in the buffer to have
|
||||||
* gdb_get_char() update various bits and bobs correctly.
|
* gdb_get_char() update various bits and bobs correctly.
|
||||||
*/
|
*/
|
||||||
if ((gdb_con->buf_cnt > 2) && ((gdb_con->buf_cnt+count) < *len))
|
if ((gdb_con->buf_cnt > 2) && ((gdb_con->buf_cnt + count) < *len))
|
||||||
{
|
{
|
||||||
/* The compiler will struggle a bit with constant propagation and
|
/* The compiler will struggle a bit with constant propagation and
|
||||||
* aliasing, so we help it by showing that these values do not
|
* aliasing, so we help it by showing that these values do not
|
||||||
|
@ -651,7 +651,7 @@ int gdb_output_con(connection_t *connection, const char* line)
|
||||||
hex_buffer[0] = 'O';
|
hex_buffer[0] = 'O';
|
||||||
for (i = 0; i<bin_size; i++)
|
for (i = 0; i<bin_size; i++)
|
||||||
snprintf(hex_buffer + 1 + i*2, 3, "%2.2x", line[i]);
|
snprintf(hex_buffer + 1 + i*2, 3, "%2.2x", line[i]);
|
||||||
hex_buffer[bin_size*2+1] = 0;
|
hex_buffer[bin_size*2 + 1] = 0;
|
||||||
|
|
||||||
int retval = gdb_put_packet(connection, hex_buffer, bin_size*2 + 1);
|
int retval = gdb_put_packet(connection, hex_buffer, bin_size*2 + 1);
|
||||||
|
|
||||||
|
@ -894,7 +894,7 @@ void gdb_str_to_target(target_t *target, char *tstr, reg_t *reg)
|
||||||
{
|
{
|
||||||
int j = gdb_reg_pos(target, i, buf_len);
|
int j = gdb_reg_pos(target, i, buf_len);
|
||||||
tstr[i*2] = DIGITS[(buf[j]>>4) & 0xf];
|
tstr[i*2] = DIGITS[(buf[j]>>4) & 0xf];
|
||||||
tstr[i*2+1] = DIGITS[buf[j]&0xf];
|
tstr[i*2 + 1] = DIGITS[buf[j]&0xf];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -926,7 +926,7 @@ void gdb_target_to_reg(target_t *target, char *tstr, int str_len, uint8_t *bin)
|
||||||
for (i = 0; i < str_len; i += 2)
|
for (i = 0; i < str_len; i += 2)
|
||||||
{
|
{
|
||||||
uint8_t t = hextoint(tstr[i]) << 4;
|
uint8_t t = hextoint(tstr[i]) << 4;
|
||||||
t |= hextoint(tstr[i+1]);
|
t |= hextoint(tstr[i + 1]);
|
||||||
|
|
||||||
int j = gdb_reg_pos(target, i/2, str_len/2);
|
int j = gdb_reg_pos(target, i/2, str_len/2);
|
||||||
bin[j] = t;
|
bin[j] = t;
|
||||||
|
@ -1182,7 +1182,7 @@ int gdb_read_memory_packet(connection_t *connection, target_t *target, char *pac
|
||||||
return ERROR_SERVER_REMOTE_CLOSED;
|
return ERROR_SERVER_REMOTE_CLOSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strtoul(separator+1, NULL, 16);
|
len = strtoul(separator + 1, NULL, 16);
|
||||||
|
|
||||||
buffer = malloc(len);
|
buffer = malloc(len);
|
||||||
|
|
||||||
|
@ -1256,7 +1256,7 @@ int gdb_write_memory_packet(connection_t *connection, target_t *target, char *pa
|
||||||
return ERROR_SERVER_REMOTE_CLOSED;
|
return ERROR_SERVER_REMOTE_CLOSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strtoul(separator+1, &separator, 16);
|
len = strtoul(separator + 1, &separator, 16);
|
||||||
|
|
||||||
if (*(separator++) != ':')
|
if (*(separator++) != ':')
|
||||||
{
|
{
|
||||||
|
@ -1310,7 +1310,7 @@ int gdb_write_memory_binary_packet(connection_t *connection, target_t *target, c
|
||||||
return ERROR_SERVER_REMOTE_CLOSED;
|
return ERROR_SERVER_REMOTE_CLOSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strtoul(separator+1, &separator, 16);
|
len = strtoul(separator + 1, &separator, 16);
|
||||||
|
|
||||||
if (*(separator++) != ':')
|
if (*(separator++) != ':')
|
||||||
{
|
{
|
||||||
|
@ -1408,7 +1408,7 @@ int gdb_breakpoint_watchpoint_packet(connection_t *connection, target_t *target,
|
||||||
return ERROR_SERVER_REMOTE_CLOSED;
|
return ERROR_SERVER_REMOTE_CLOSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
address = strtoul(separator+1, &separator, 16);
|
address = strtoul(separator + 1, &separator, 16);
|
||||||
|
|
||||||
if (*separator != ',')
|
if (*separator != ',')
|
||||||
{
|
{
|
||||||
|
@ -1416,7 +1416,7 @@ int gdb_breakpoint_watchpoint_packet(connection_t *connection, target_t *target,
|
||||||
return ERROR_SERVER_REMOTE_CLOSED;
|
return ERROR_SERVER_REMOTE_CLOSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
size = strtoul(separator+1, &separator, 16);
|
size = strtoul(separator + 1, &separator, 16);
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
@ -1533,7 +1533,7 @@ static int decode_xfer_read(char *buf, char **annex, int *ofs, unsigned int *len
|
||||||
if (*separator != ',')
|
if (*separator != ',')
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
*len = strtoul(separator+1, NULL, 16);
|
*len = strtoul(separator + 1, NULL, 16);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1736,7 +1736,7 @@ int gdb_query_packet(connection_t *connection, target_t *target, char *packet, i
|
||||||
"<property name=\"blocksize\">0x%x</property>\n" \
|
"<property name=\"blocksize\">0x%x</property>\n" \
|
||||||
"</memory>\n", \
|
"</memory>\n", \
|
||||||
p->base, p->size, blocksize);
|
p->base, p->size, blocksize);
|
||||||
ram_start = p->base+p->size;
|
ram_start = p->base + p->size;
|
||||||
}
|
}
|
||||||
if (ram_start != 0)
|
if (ram_start != 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -86,7 +86,7 @@ int telnet_outputline(connection_t *connection, const char *line)
|
||||||
if (line_end)
|
if (line_end)
|
||||||
{
|
{
|
||||||
telnet_write(connection, "\r\n", 2);
|
telnet_write(connection, "\r\n", 2);
|
||||||
line += len+1;
|
line += len + 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1399,7 +1399,7 @@ int arm11_run_algorithm(struct target_s *target, int num_mem_params, mem_param_t
|
||||||
LOG_DEBUG("Save %zi: 0x%" PRIx32 "",i,context[i]);
|
LOG_DEBUG("Save %zi: 0x%" PRIx32 "",i,context[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
cpsr = buf_get_u32((uint8_t*)(arm11->reg_values+ARM11_RC_CPSR),0,32);
|
cpsr = buf_get_u32((uint8_t*)(arm11->reg_values + ARM11_RC_CPSR),0,32);
|
||||||
LOG_DEBUG("Save CPSR: 0x%" PRIx32 "", cpsr);
|
LOG_DEBUG("Save CPSR: 0x%" PRIx32 "", cpsr);
|
||||||
|
|
||||||
for (int i = 0; i < num_mem_params; i++)
|
for (int i = 0; i < num_mem_params; i++)
|
||||||
|
|
|
@ -2672,14 +2672,14 @@ int arm7_9_bulk_write_memory(target_t *target, uint32_t address, uint32_t count,
|
||||||
dcc_count = count;
|
dcc_count = count;
|
||||||
dcc_buffer = buffer;
|
dcc_buffer = buffer;
|
||||||
retval = armv4_5_run_algorithm_inner(target, 0, NULL, 1, reg_params,
|
retval = armv4_5_run_algorithm_inner(target, 0, NULL, 1, reg_params,
|
||||||
arm7_9->dcc_working_area->address, arm7_9->dcc_working_area->address+6*4, 20*1000, &armv4_5_info, arm7_9_dcc_completion);
|
arm7_9->dcc_working_area->address, arm7_9->dcc_working_area->address + 6*4, 20*1000, &armv4_5_info, arm7_9_dcc_completion);
|
||||||
|
|
||||||
if (retval == ERROR_OK)
|
if (retval == ERROR_OK)
|
||||||
{
|
{
|
||||||
uint32_t endaddress = buf_get_u32(reg_params[0].value, 0, 32);
|
uint32_t endaddress = buf_get_u32(reg_params[0].value, 0, 32);
|
||||||
if (endaddress != (address+count*4))
|
if (endaddress != (address + count*4))
|
||||||
{
|
{
|
||||||
LOG_ERROR("DCC write failed, expected end address 0x%08" PRIx32 " got 0x%0" PRIx32 "", (address+count*4), endaddress);
|
LOG_ERROR("DCC write failed, expected end address 0x%08" PRIx32 " got 0x%0" PRIx32 "", (address + count*4), endaddress);
|
||||||
retval = ERROR_FAIL;
|
retval = ERROR_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -383,7 +383,7 @@ void arm7tdmi_read_core_regs(target_t *target, uint32_t mask, uint32_t* core_reg
|
||||||
for (i = 0; i <= 15; i++)
|
for (i = 0; i <= 15; i++)
|
||||||
{
|
{
|
||||||
if (mask & (1 << i))
|
if (mask & (1 << i))
|
||||||
/* nothing fetched, STM still in EXECUTE (1+i cycle) */
|
/* nothing fetched, STM still in EXECUTE (1 + i cycle) */
|
||||||
arm7tdmi_clock_data_in(jtag_info, core_regs[i]);
|
arm7tdmi_clock_data_in(jtag_info, core_regs[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -412,7 +412,7 @@ void arm7tdmi_read_core_regs_target_buffer(target_t *target, uint32_t mask, void
|
||||||
|
|
||||||
for (i = 0; i <= 15; i++)
|
for (i = 0; i <= 15; i++)
|
||||||
{
|
{
|
||||||
/* nothing fetched, STM still in EXECUTE (1+i cycle), read databus */
|
/* nothing fetched, STM still in EXECUTE (1 + i cycle), read databus */
|
||||||
if (mask & (1 << i))
|
if (mask & (1 << i))
|
||||||
{
|
{
|
||||||
switch (size)
|
switch (size)
|
||||||
|
@ -522,7 +522,7 @@ void arm7tdmi_write_core_regs(target_t *target, uint32_t mask, uint32_t core_reg
|
||||||
for (i = 0; i <= 15; i++)
|
for (i = 0; i <= 15; i++)
|
||||||
{
|
{
|
||||||
if (mask & (1 << i))
|
if (mask & (1 << i))
|
||||||
/* nothing fetched, LDM still in EXECUTE (1+i cycle) */
|
/* nothing fetched, LDM still in EXECUTE (1 + i cycle) */
|
||||||
arm7tdmi_clock_out_inner(jtag_info, core_regs[i], 0);
|
arm7tdmi_clock_out_inner(jtag_info, core_regs[i], 0);
|
||||||
}
|
}
|
||||||
arm7tdmi_clock_out_inner(jtag_info, ARMV4_5_NOP, 0);
|
arm7tdmi_clock_out_inner(jtag_info, ARMV4_5_NOP, 0);
|
||||||
|
|
|
@ -587,7 +587,7 @@ void arm9tdmi_write_core_regs(target_t *target, uint32_t mask, uint32_t core_reg
|
||||||
for (i = 0; i <= 15; i++)
|
for (i = 0; i <= 15; i++)
|
||||||
{
|
{
|
||||||
if (mask & (1 << i))
|
if (mask & (1 << i))
|
||||||
/* nothing fetched, LDM still in EXECUTE (1+i cycle) */
|
/* nothing fetched, LDM still in EXECUTE (1 + i cycle) */
|
||||||
arm9tdmi_clock_out(jtag_info, ARMV4_5_NOP, core_regs[i], NULL, 0);
|
arm9tdmi_clock_out(jtag_info, ARMV4_5_NOP, core_regs[i], NULL, 0);
|
||||||
}
|
}
|
||||||
arm9tdmi_clock_out(jtag_info, ARMV4_5_NOP, 0, NULL, 0);
|
arm9tdmi_clock_out(jtag_info, ARMV4_5_NOP, 0, NULL, 0);
|
||||||
|
|
|
@ -1093,7 +1093,7 @@ int dap_info_command(struct command_context_s *cmd_ctx, swjdp_common_t *swjdp, i
|
||||||
if (romentry&0x01)
|
if (romentry&0x01)
|
||||||
{
|
{
|
||||||
uint32_t c_cid0,c_cid1,c_cid2,c_cid3,c_pid0,c_pid1,c_pid2,c_pid3,c_pid4,component_start;
|
uint32_t c_cid0,c_cid1,c_cid2,c_cid3,c_pid0,c_pid1,c_pid2,c_pid3,c_pid4,component_start;
|
||||||
uint32_t component_base = (uint32_t)((dbgbase&0xFFFFF000)+(int)(romentry&0xFFFFF000));
|
uint32_t component_base = (uint32_t)((dbgbase&0xFFFFF000) + (int)(romentry&0xFFFFF000));
|
||||||
mem_ap_read_atomic_u32(swjdp, (component_base&0xFFFFF000)|0xFE0, &c_pid0);
|
mem_ap_read_atomic_u32(swjdp, (component_base&0xFFFFF000)|0xFE0, &c_pid0);
|
||||||
mem_ap_read_atomic_u32(swjdp, (component_base&0xFFFFF000)|0xFE4, &c_pid1);
|
mem_ap_read_atomic_u32(swjdp, (component_base&0xFFFFF000)|0xFE4, &c_pid1);
|
||||||
mem_ap_read_atomic_u32(swjdp, (component_base&0xFFFFF000)|0xFE8, &c_pid2);
|
mem_ap_read_atomic_u32(swjdp, (component_base&0xFFFFF000)|0xFE8, &c_pid2);
|
||||||
|
|
|
@ -71,7 +71,7 @@ char * armv4_5_mode_strings_list[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Hack! Yuk! allow -1 index, which simplifies codepaths elsewhere in the code */
|
/* Hack! Yuk! allow -1 index, which simplifies codepaths elsewhere in the code */
|
||||||
char** armv4_5_mode_strings = armv4_5_mode_strings_list+1;
|
char** armv4_5_mode_strings = armv4_5_mode_strings_list + 1;
|
||||||
|
|
||||||
char* armv4_5_state_strings[] =
|
char* armv4_5_state_strings[] =
|
||||||
{
|
{
|
||||||
|
|
|
@ -204,10 +204,10 @@ static int etb_read_ram(etb_t *etb, uint32_t *data, int num_frames)
|
||||||
else
|
else
|
||||||
buf_set_u32(fields[1].out_value, 0, 7, 0);
|
buf_set_u32(fields[1].out_value, 0, 7, 0);
|
||||||
|
|
||||||
fields[0].in_value = (uint8_t *)(data+i);
|
fields[0].in_value = (uint8_t *)(data + i);
|
||||||
jtag_add_dr_scan(3, fields, jtag_get_end_state());
|
jtag_add_dr_scan(3, fields, jtag_get_end_state());
|
||||||
|
|
||||||
jtag_add_callback(etb_getbuf, (jtag_callback_data_t)(data+i));
|
jtag_add_callback(etb_getbuf, (jtag_callback_data_t)(data + i));
|
||||||
}
|
}
|
||||||
|
|
||||||
jtag_execute_queue();
|
jtag_execute_queue();
|
||||||
|
@ -550,32 +550,32 @@ static int etb_read_trace(etm_context_t *etm_ctx)
|
||||||
etm_ctx->trace_data[j].flags |= ETMV1_TRIGGER_CYCLE;
|
etm_ctx->trace_data[j].flags |= ETMV1_TRIGGER_CYCLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* trace word j+1 */
|
/* trace word j + 1 */
|
||||||
etm_ctx->trace_data[j+1].pipestat = (trace_data[i] & 0x100) >> 8;
|
etm_ctx->trace_data[j + 1].pipestat = (trace_data[i] & 0x100) >> 8;
|
||||||
etm_ctx->trace_data[j+1].packet = (trace_data[i] & 0x7800) >> 11;
|
etm_ctx->trace_data[j + 1].packet = (trace_data[i] & 0x7800) >> 11;
|
||||||
etm_ctx->trace_data[j+1].flags = 0;
|
etm_ctx->trace_data[j + 1].flags = 0;
|
||||||
if ((trace_data[i] & 0x8000) >> 15)
|
if ((trace_data[i] & 0x8000) >> 15)
|
||||||
{
|
{
|
||||||
etm_ctx->trace_data[j+1].flags |= ETMV1_TRACESYNC_CYCLE;
|
etm_ctx->trace_data[j + 1].flags |= ETMV1_TRACESYNC_CYCLE;
|
||||||
}
|
}
|
||||||
if (etm_ctx->trace_data[j+1].pipestat == STAT_TR)
|
if (etm_ctx->trace_data[j + 1].pipestat == STAT_TR)
|
||||||
{
|
{
|
||||||
etm_ctx->trace_data[j+1].pipestat = etm_ctx->trace_data[j+1].packet & 0x7;
|
etm_ctx->trace_data[j + 1].pipestat = etm_ctx->trace_data[j + 1].packet & 0x7;
|
||||||
etm_ctx->trace_data[j+1].flags |= ETMV1_TRIGGER_CYCLE;
|
etm_ctx->trace_data[j + 1].flags |= ETMV1_TRIGGER_CYCLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* trace word j+2 */
|
/* trace word j + 2 */
|
||||||
etm_ctx->trace_data[j+2].pipestat = (trace_data[i] & 0x10000) >> 16;
|
etm_ctx->trace_data[j + 2].pipestat = (trace_data[i] & 0x10000) >> 16;
|
||||||
etm_ctx->trace_data[j+2].packet = (trace_data[i] & 0x780000) >> 19;
|
etm_ctx->trace_data[j + 2].packet = (trace_data[i] & 0x780000) >> 19;
|
||||||
etm_ctx->trace_data[j+2].flags = 0;
|
etm_ctx->trace_data[j + 2].flags = 0;
|
||||||
if ((trace_data[i] & 0x800000) >> 23)
|
if ((trace_data[i] & 0x800000) >> 23)
|
||||||
{
|
{
|
||||||
etm_ctx->trace_data[j+2].flags |= ETMV1_TRACESYNC_CYCLE;
|
etm_ctx->trace_data[j + 2].flags |= ETMV1_TRACESYNC_CYCLE;
|
||||||
}
|
}
|
||||||
if (etm_ctx->trace_data[j+2].pipestat == STAT_TR)
|
if (etm_ctx->trace_data[j + 2].pipestat == STAT_TR)
|
||||||
{
|
{
|
||||||
etm_ctx->trace_data[j+2].pipestat = etm_ctx->trace_data[j+2].packet & 0x7;
|
etm_ctx->trace_data[j + 2].pipestat = etm_ctx->trace_data[j + 2].packet & 0x7;
|
||||||
etm_ctx->trace_data[j+2].flags |= ETMV1_TRIGGER_CYCLE;
|
etm_ctx->trace_data[j + 2].flags |= ETMV1_TRIGGER_CYCLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
j += 3;
|
j += 3;
|
||||||
|
@ -596,18 +596,18 @@ static int etb_read_trace(etm_context_t *etm_ctx)
|
||||||
etm_ctx->trace_data[j].flags |= ETMV1_TRIGGER_CYCLE;
|
etm_ctx->trace_data[j].flags |= ETMV1_TRIGGER_CYCLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* trace word j+1 */
|
/* trace word j + 1 */
|
||||||
etm_ctx->trace_data[j+1].pipestat = (trace_data[i] & 0x7000) >> 12;
|
etm_ctx->trace_data[j + 1].pipestat = (trace_data[i] & 0x7000) >> 12;
|
||||||
etm_ctx->trace_data[j+1].packet = (trace_data[i] & 0x7f8000) >> 15;
|
etm_ctx->trace_data[j + 1].packet = (trace_data[i] & 0x7f8000) >> 15;
|
||||||
etm_ctx->trace_data[j+1].flags = 0;
|
etm_ctx->trace_data[j + 1].flags = 0;
|
||||||
if ((trace_data[i] & 0x800000) >> 23)
|
if ((trace_data[i] & 0x800000) >> 23)
|
||||||
{
|
{
|
||||||
etm_ctx->trace_data[j+1].flags |= ETMV1_TRACESYNC_CYCLE;
|
etm_ctx->trace_data[j + 1].flags |= ETMV1_TRACESYNC_CYCLE;
|
||||||
}
|
}
|
||||||
if (etm_ctx->trace_data[j+1].pipestat == STAT_TR)
|
if (etm_ctx->trace_data[j + 1].pipestat == STAT_TR)
|
||||||
{
|
{
|
||||||
etm_ctx->trace_data[j+1].pipestat = etm_ctx->trace_data[j+1].packet & 0x7;
|
etm_ctx->trace_data[j + 1].pipestat = etm_ctx->trace_data[j + 1].packet & 0x7;
|
||||||
etm_ctx->trace_data[j+1].flags |= ETMV1_TRIGGER_CYCLE;
|
etm_ctx->trace_data[j + 1].flags |= ETMV1_TRIGGER_CYCLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
j += 2;
|
j += 2;
|
||||||
|
|
|
@ -269,7 +269,7 @@ void fa526_write_core_regs(target_t *target, uint32_t mask, uint32_t core_regs[1
|
||||||
for (i = 0; i <= 15; i++)
|
for (i = 0; i <= 15; i++)
|
||||||
{
|
{
|
||||||
if (mask & (1 << i))
|
if (mask & (1 << i))
|
||||||
/* nothing fetched, LDM still in EXECUTE (1+i cycle) */
|
/* nothing fetched, LDM still in EXECUTE (1 + i cycle) */
|
||||||
arm9tdmi_clock_out(jtag_info, ARMV4_5_NOP, core_regs[i], NULL, 0);
|
arm9tdmi_clock_out(jtag_info, ARMV4_5_NOP, core_regs[i], NULL, 0);
|
||||||
}
|
}
|
||||||
arm9tdmi_clock_out(jtag_info, ARMV4_5_NOP, 0, NULL, 0);
|
arm9tdmi_clock_out(jtag_info, ARMV4_5_NOP, 0, NULL, 0);
|
||||||
|
|
|
@ -454,9 +454,9 @@ static int image_elf_read_section(image_t *image, int section, uint32_t offset,
|
||||||
/* maximal size present in file for the current segment */
|
/* maximal size present in file for the current segment */
|
||||||
read_size = MIN(size, field32(elf,segment->p_filesz)-offset);
|
read_size = MIN(size, field32(elf,segment->p_filesz)-offset);
|
||||||
LOG_DEBUG("read elf: size = 0x%" PRIx32 " at 0x%" PRIx32 "",read_size,
|
LOG_DEBUG("read elf: size = 0x%" PRIx32 " at 0x%" PRIx32 "",read_size,
|
||||||
field32(elf,segment->p_offset)+offset);
|
field32(elf,segment->p_offset) + offset);
|
||||||
/* read initialized area of the segment */
|
/* read initialized area of the segment */
|
||||||
if ((retval = fileio_seek(&elf->fileio, field32(elf,segment->p_offset)+offset)) != ERROR_OK)
|
if ((retval = fileio_seek(&elf->fileio, field32(elf,segment->p_offset) + offset)) != ERROR_OK)
|
||||||
{
|
{
|
||||||
LOG_ERROR("cannot find ELF segment content, seek failed");
|
LOG_ERROR("cannot find ELF segment content, seek failed");
|
||||||
return retval;
|
return retval;
|
||||||
|
|
|
@ -370,7 +370,7 @@ int mips32_dmaacc_read_mem32(mips_ejtag_t *ejtag_info, uint32_t addr, int count,
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
for (i = 0; i<count; i++) {
|
for (i = 0; i<count; i++) {
|
||||||
if ((retval = ejtag_dma_read(ejtag_info, addr+i*sizeof(*buf), &buf[i])) != ERROR_OK)
|
if ((retval = ejtag_dma_read(ejtag_info, addr + i*sizeof(*buf), &buf[i])) != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -383,7 +383,7 @@ int mips32_dmaacc_read_mem16(mips_ejtag_t *ejtag_info, uint32_t addr, int count,
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
for (i = 0; i<count; i++) {
|
for (i = 0; i<count; i++) {
|
||||||
if ((retval = ejtag_dma_read_h(ejtag_info, addr+i*sizeof(*buf), &buf[i])) != ERROR_OK)
|
if ((retval = ejtag_dma_read_h(ejtag_info, addr + i*sizeof(*buf), &buf[i])) != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -396,7 +396,7 @@ int mips32_dmaacc_read_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count,
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
for (i = 0; i<count; i++) {
|
for (i = 0; i<count; i++) {
|
||||||
if ((retval = ejtag_dma_read_b(ejtag_info, addr+i*sizeof(*buf), &buf[i])) != ERROR_OK)
|
if ((retval = ejtag_dma_read_b(ejtag_info, addr + i*sizeof(*buf), &buf[i])) != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -424,7 +424,7 @@ int mips32_dmaacc_write_mem32(mips_ejtag_t *ejtag_info, uint32_t addr, int count
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
for (i = 0; i<count; i++) {
|
for (i = 0; i<count; i++) {
|
||||||
if ((retval = ejtag_dma_write(ejtag_info, addr+i*sizeof(*buf), buf[i])) != ERROR_OK)
|
if ((retval = ejtag_dma_write(ejtag_info, addr + i*sizeof(*buf), buf[i])) != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -437,7 +437,7 @@ int mips32_dmaacc_write_mem16(mips_ejtag_t *ejtag_info, uint32_t addr, int count
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
for (i = 0; i<count; i++) {
|
for (i = 0; i<count; i++) {
|
||||||
if ((retval = ejtag_dma_write_h(ejtag_info, addr+i*sizeof(*buf), buf[i])) != ERROR_OK)
|
if ((retval = ejtag_dma_write_h(ejtag_info, addr + i*sizeof(*buf), buf[i])) != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -450,7 +450,7 @@ int mips32_dmaacc_write_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count,
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
for (i = 0; i<count; i++) {
|
for (i = 0; i<count; i++) {
|
||||||
if ((retval = ejtag_dma_write_b(ejtag_info, addr+i*sizeof(*buf), buf[i])) != ERROR_OK)
|
if ((retval = ejtag_dma_write_b(ejtag_info, addr + i*sizeof(*buf), buf[i])) != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -302,7 +302,7 @@ int mips32_pracc_read_mem32(mips_ejtag_t *ejtag_info, uint32_t addr, int count,
|
||||||
MIPS32_LUI(8,UPPER16(MIPS32_PRACC_PARAM_IN)), /* $8 = MIPS32_PRACC_PARAM_IN */
|
MIPS32_LUI(8,UPPER16(MIPS32_PRACC_PARAM_IN)), /* $8 = MIPS32_PRACC_PARAM_IN */
|
||||||
MIPS32_ORI(8,8,LOWER16(MIPS32_PRACC_PARAM_IN)),
|
MIPS32_ORI(8,8,LOWER16(MIPS32_PRACC_PARAM_IN)),
|
||||||
MIPS32_LW(9,0,8), /* $9 = mem[$8]; read addr */
|
MIPS32_LW(9,0,8), /* $9 = mem[$8]; read addr */
|
||||||
MIPS32_LW(10,4,8), /* $10 = mem[$8+4]; read count */
|
MIPS32_LW(10,4,8), /* $10 = mem[$8 + 4]; read count */
|
||||||
MIPS32_LUI(11,UPPER16(MIPS32_PRACC_PARAM_OUT)), /* $11 = MIPS32_PRACC_PARAM_OUT */
|
MIPS32_LUI(11,UPPER16(MIPS32_PRACC_PARAM_OUT)), /* $11 = MIPS32_PRACC_PARAM_OUT */
|
||||||
MIPS32_ORI(11,11,LOWER16(MIPS32_PRACC_PARAM_OUT)),
|
MIPS32_ORI(11,11,LOWER16(MIPS32_PRACC_PARAM_OUT)),
|
||||||
MIPS32_NOP,
|
MIPS32_NOP,
|
||||||
|
@ -410,7 +410,7 @@ int mips32_pracc_read_mem16(mips_ejtag_t *ejtag_info, uint32_t addr, int count,
|
||||||
MIPS32_LUI(8,UPPER16(MIPS32_PRACC_PARAM_IN)), /* $8 = MIPS32_PRACC_PARAM_IN */
|
MIPS32_LUI(8,UPPER16(MIPS32_PRACC_PARAM_IN)), /* $8 = MIPS32_PRACC_PARAM_IN */
|
||||||
MIPS32_ORI(8,8,LOWER16(MIPS32_PRACC_PARAM_IN)),
|
MIPS32_ORI(8,8,LOWER16(MIPS32_PRACC_PARAM_IN)),
|
||||||
MIPS32_LW(9,0,8), /* $9 = mem[$8]; read addr */
|
MIPS32_LW(9,0,8), /* $9 = mem[$8]; read addr */
|
||||||
MIPS32_LW(10,4,8), /* $10 = mem[$8+4]; read count */
|
MIPS32_LW(10,4,8), /* $10 = mem[$8 + 4]; read count */
|
||||||
MIPS32_LUI(11,UPPER16(MIPS32_PRACC_PARAM_OUT)), /* $11 = MIPS32_PRACC_PARAM_OUT */
|
MIPS32_LUI(11,UPPER16(MIPS32_PRACC_PARAM_OUT)), /* $11 = MIPS32_PRACC_PARAM_OUT */
|
||||||
MIPS32_ORI(11,11,LOWER16(MIPS32_PRACC_PARAM_OUT)),
|
MIPS32_ORI(11,11,LOWER16(MIPS32_PRACC_PARAM_OUT)),
|
||||||
MIPS32_NOP,
|
MIPS32_NOP,
|
||||||
|
@ -489,7 +489,7 @@ int mips32_pracc_read_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count, u
|
||||||
MIPS32_LUI(8,UPPER16(MIPS32_PRACC_PARAM_IN)), /* $8 = MIPS32_PRACC_PARAM_IN */
|
MIPS32_LUI(8,UPPER16(MIPS32_PRACC_PARAM_IN)), /* $8 = MIPS32_PRACC_PARAM_IN */
|
||||||
MIPS32_ORI(8,8,LOWER16(MIPS32_PRACC_PARAM_IN)),
|
MIPS32_ORI(8,8,LOWER16(MIPS32_PRACC_PARAM_IN)),
|
||||||
MIPS32_LW(9,0,8), /* $9 = mem[$8]; read addr */
|
MIPS32_LW(9,0,8), /* $9 = mem[$8]; read addr */
|
||||||
MIPS32_LW(10,4,8), /* $10 = mem[$8+4]; read count */
|
MIPS32_LW(10,4,8), /* $10 = mem[$8 + 4]; read count */
|
||||||
MIPS32_LUI(11,UPPER16(MIPS32_PRACC_PARAM_OUT)), /* $11 = MIPS32_PRACC_PARAM_OUT */
|
MIPS32_LUI(11,UPPER16(MIPS32_PRACC_PARAM_OUT)), /* $11 = MIPS32_PRACC_PARAM_OUT */
|
||||||
MIPS32_ORI(11,11,LOWER16(MIPS32_PRACC_PARAM_OUT)),
|
MIPS32_ORI(11,11,LOWER16(MIPS32_PRACC_PARAM_OUT)),
|
||||||
MIPS32_NOP,
|
MIPS32_NOP,
|
||||||
|
@ -608,7 +608,7 @@ int mips32_pracc_write_mem32(mips_ejtag_t *ejtag_info, uint32_t addr, int count,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TODO remove array */
|
/* TODO remove array */
|
||||||
uint32_t param_in[count+2];
|
uint32_t param_in[count + 2];
|
||||||
param_in[0] = addr;
|
param_in[0] = addr;
|
||||||
param_in[1] = addr + count * sizeof(uint32_t); //last address
|
param_in[1] = addr + count * sizeof(uint32_t); //last address
|
||||||
|
|
||||||
|
@ -643,7 +643,7 @@ int mips32_pracc_write_u32(mips_ejtag_t *ejtag_info, uint32_t addr, uint32_t *bu
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TODO remove array */
|
/* TODO remove array */
|
||||||
uint32_t param_in[1+1];
|
uint32_t param_in[1 + 1];
|
||||||
param_in[0] = addr;
|
param_in[0] = addr;
|
||||||
param_in[1] = *buf;
|
param_in[1] = *buf;
|
||||||
|
|
||||||
|
@ -697,14 +697,14 @@ int mips32_pracc_write_mem16(mips_ejtag_t *ejtag_info, uint32_t addr, int count,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TODO remove array */
|
/* TODO remove array */
|
||||||
uint32_t param_in[count+2];
|
uint32_t param_in[count + 2];
|
||||||
int i;
|
int i;
|
||||||
param_in[0] = addr;
|
param_in[0] = addr;
|
||||||
param_in[1] = count;
|
param_in[1] = count;
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
param_in[i+2] = buf[i];
|
param_in[i + 2] = buf[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
mips32_pracc_exec(ejtag_info, sizeof(code)/sizeof(code[0]), code, \
|
mips32_pracc_exec(ejtag_info, sizeof(code)/sizeof(code[0]), code, \
|
||||||
|
@ -757,7 +757,7 @@ int mips32_pracc_write_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TODO remove array */
|
/* TODO remove array */
|
||||||
uint32_t param_in[count+2];
|
uint32_t param_in[count + 2];
|
||||||
int retval;
|
int retval;
|
||||||
int i;
|
int i;
|
||||||
param_in[0] = addr;
|
param_in[0] = addr;
|
||||||
|
@ -765,7 +765,7 @@ int mips32_pracc_write_mem8(mips_ejtag_t *ejtag_info, uint32_t addr, int count,
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
param_in[i+2] = buf[i];
|
param_in[i + 2] = buf[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = mips32_pracc_exec(ejtag_info, sizeof(code)/sizeof(code[0]), code, \
|
retval = mips32_pracc_exec(ejtag_info, sizeof(code)/sizeof(code[0]), code, \
|
||||||
|
|
|
@ -197,7 +197,7 @@ static int oocd_trace_read_trace(etm_context_t *etm_ctx)
|
||||||
num_frames = address;
|
num_frames = address;
|
||||||
|
|
||||||
/* read data into temporary array for unpacking
|
/* read data into temporary array for unpacking
|
||||||
* one frame from OpenOCD+trace corresponds to 16 trace cycles
|
* one frame from OpenOCD + trace corresponds to 16 trace cycles
|
||||||
*/
|
*/
|
||||||
trace_data = malloc(sizeof(uint8_t) * num_frames * 16);
|
trace_data = malloc(sizeof(uint8_t) * num_frames * 16);
|
||||||
oocd_trace_read_memory(oocd_trace, trace_data, first_frame, num_frames);
|
oocd_trace_read_memory(oocd_trace, trace_data, first_frame, num_frames);
|
||||||
|
@ -242,7 +242,7 @@ static int oocd_trace_start_capture(etm_context_t *etm_ctx)
|
||||||
if (((etm_ctx->portmode & ETM_PORT_MODE_MASK) != ETM_PORT_NORMAL)
|
if (((etm_ctx->portmode & ETM_PORT_MODE_MASK) != ETM_PORT_NORMAL)
|
||||||
|| ((etm_ctx->portmode & ETM_PORT_WIDTH_MASK) != ETM_PORT_4BIT))
|
|| ((etm_ctx->portmode & ETM_PORT_WIDTH_MASK) != ETM_PORT_4BIT))
|
||||||
{
|
{
|
||||||
LOG_DEBUG("OpenOCD+trace only supports normal 4-bit ETM mode");
|
LOG_DEBUG("OpenOCD + trace only supports normal 4-bit ETM mode");
|
||||||
return ERROR_ETM_PORTMODE_NOT_SUPPORTED;
|
return ERROR_ETM_PORTMODE_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@ static int oocd_trace_start_capture(etm_context_t *etm_ctx)
|
||||||
control |= 0x2; /* half rate clock, capture at twice the clock rate */
|
control |= 0x2; /* half rate clock, capture at twice the clock rate */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* OpenOCD+trace holds up to 16 million samples,
|
/* OpenOCD + trace holds up to 16 million samples,
|
||||||
* but trigger counts is set in multiples of 16 */
|
* but trigger counts is set in multiples of 16 */
|
||||||
trigger_count = (1048576 * etm_ctx->trigger_percent) / 100;
|
trigger_count = (1048576 * etm_ctx->trigger_percent) / 100;
|
||||||
|
|
||||||
|
@ -316,12 +316,12 @@ static int handle_oocd_trace_config_command(struct command_context_s *cmd_ctx, c
|
||||||
arm7_9->etm_ctx->capture_driver_priv = oocd_trace;
|
arm7_9->etm_ctx->capture_driver_priv = oocd_trace;
|
||||||
oocd_trace->etm_ctx = arm7_9->etm_ctx;
|
oocd_trace->etm_ctx = arm7_9->etm_ctx;
|
||||||
|
|
||||||
/* copy name of TTY device used to communicate with OpenOCD+trace */
|
/* copy name of TTY device used to communicate with OpenOCD + trace */
|
||||||
oocd_trace->tty = strndup(args[1], 256);
|
oocd_trace->tty = strndup(args[1], 256);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_ERROR("target has no ETM defined, OpenOCD+trace left unconfigured");
|
LOG_ERROR("target has no ETM defined, OpenOCD + trace left unconfigured");
|
||||||
}
|
}
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
@ -412,12 +412,12 @@ int oocd_trace_register_commands(struct command_context_s *cmd_ctx)
|
||||||
{
|
{
|
||||||
command_t *oocd_trace_cmd;
|
command_t *oocd_trace_cmd;
|
||||||
|
|
||||||
oocd_trace_cmd = register_command(cmd_ctx, NULL, "oocd_trace", NULL, COMMAND_ANY, "OpenOCD+trace");
|
oocd_trace_cmd = register_command(cmd_ctx, NULL, "oocd_trace", NULL, COMMAND_ANY, "OpenOCD + trace");
|
||||||
|
|
||||||
register_command(cmd_ctx, oocd_trace_cmd, "config", handle_oocd_trace_config_command, COMMAND_CONFIG, NULL);
|
register_command(cmd_ctx, oocd_trace_cmd, "config", handle_oocd_trace_config_command, COMMAND_CONFIG, NULL);
|
||||||
|
|
||||||
register_command(cmd_ctx, oocd_trace_cmd, "status", handle_oocd_trace_status_command, COMMAND_EXEC, "display OpenOCD+trace status");
|
register_command(cmd_ctx, oocd_trace_cmd, "status", handle_oocd_trace_status_command, COMMAND_EXEC, "display OpenOCD + trace status");
|
||||||
register_command(cmd_ctx, oocd_trace_cmd, "resync", handle_oocd_trace_resync_command, COMMAND_EXEC, "resync OpenOCD+trace capture clock");
|
register_command(cmd_ctx, oocd_trace_cmd, "resync", handle_oocd_trace_resync_command, COMMAND_EXEC, "resync OpenOCD + trace capture clock");
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -246,7 +246,7 @@ static int max_target_number(void)
|
||||||
t = all_targets;
|
t = all_targets;
|
||||||
while ( t ){
|
while ( t ){
|
||||||
if ( x < t->target_number ){
|
if ( x < t->target_number ){
|
||||||
x = (t->target_number)+1;
|
x = (t->target_number) + 1;
|
||||||
}
|
}
|
||||||
t = t->next;
|
t = t->next;
|
||||||
}
|
}
|
||||||
|
@ -268,7 +268,7 @@ static int new_target_number(void)
|
||||||
}
|
}
|
||||||
t = t->next;
|
t = t->next;
|
||||||
}
|
}
|
||||||
return x+1;
|
return x + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int target_continuous_poll = 1;
|
static int target_continuous_poll = 1;
|
||||||
|
@ -492,7 +492,7 @@ static int jtag_enable_callback(enum jtag_event event, void *priv)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Targets that correctly implement init+examine, i.e.
|
/* Targets that correctly implement init + examine, i.e.
|
||||||
* no communication with target during init:
|
* no communication with target during init:
|
||||||
*
|
*
|
||||||
* XScale
|
* XScale
|
||||||
|
@ -1118,7 +1118,7 @@ int target_write_buffer(struct target_s *target, uint32_t address, uint32_t size
|
||||||
if ((address + size - 1) < address)
|
if ((address + size - 1) < address)
|
||||||
{
|
{
|
||||||
/* GDB can request this when e.g. PC is 0xfffffffc*/
|
/* GDB can request this when e.g. PC is 0xfffffffc*/
|
||||||
LOG_ERROR("address+size wrapped(0x%08x, 0x%08x)",
|
LOG_ERROR("address + size wrapped(0x%08x, 0x%08x)",
|
||||||
(unsigned)address,
|
(unsigned)address,
|
||||||
(unsigned)size);
|
(unsigned)size);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
|
@ -1200,7 +1200,7 @@ int target_read_buffer(struct target_s *target, uint32_t address, uint32_t size,
|
||||||
if ((address + size - 1) < address)
|
if ((address + size - 1) < address)
|
||||||
{
|
{
|
||||||
/* GDB can request this when e.g. PC is 0xfffffffc*/
|
/* GDB can request this when e.g. PC is 0xfffffffc*/
|
||||||
LOG_ERROR("address+size wrapped(0x%08" PRIx32 ", 0x%08" PRIx32 ")",
|
LOG_ERROR("address + size wrapped(0x%08" PRIx32 ", 0x%08" PRIx32 ")",
|
||||||
address,
|
address,
|
||||||
size);
|
size);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
|
@ -2279,7 +2279,7 @@ static int handle_load_image_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
|
|
||||||
/* DANGER!!! beware of unsigned comparision here!!! */
|
/* DANGER!!! beware of unsigned comparision here!!! */
|
||||||
|
|
||||||
if ((image.sections[i].base_address+buf_cnt >= min_address)&&
|
if ((image.sections[i].base_address + buf_cnt >= min_address)&&
|
||||||
(image.sections[i].base_address<max_address))
|
(image.sections[i].base_address<max_address))
|
||||||
{
|
{
|
||||||
if (image.sections[i].base_address<min_address)
|
if (image.sections[i].base_address<min_address)
|
||||||
|
@ -2289,12 +2289,12 @@ static int handle_load_image_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
length -= offset;
|
length -= offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (image.sections[i].base_address+buf_cnt>max_address)
|
if (image.sections[i].base_address + buf_cnt>max_address)
|
||||||
{
|
{
|
||||||
length -= (image.sections[i].base_address+buf_cnt)-max_address;
|
length -= (image.sections[i].base_address + buf_cnt)-max_address;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((retval = target_write_buffer(target, image.sections[i].base_address+offset, length, buffer+offset)) != ERROR_OK)
|
if ((retval = target_write_buffer(target, image.sections[i].base_address + offset, length, buffer + offset)) != ERROR_OK)
|
||||||
{
|
{
|
||||||
free(buffer);
|
free(buffer);
|
||||||
break;
|
break;
|
||||||
|
@ -2302,7 +2302,7 @@ static int handle_load_image_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
image_size += length;
|
image_size += length;
|
||||||
command_print(cmd_ctx, "%u byte written at address 0x%8.8" PRIx32 "",
|
command_print(cmd_ctx, "%u byte written at address 0x%8.8" PRIx32 "",
|
||||||
(unsigned int)length,
|
(unsigned int)length,
|
||||||
image.sections[i].base_address+offset);
|
image.sections[i].base_address + offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
@ -2834,7 +2834,7 @@ static void writeGmon(uint32_t *samples, uint32_t sampleNum, char *filename)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int addressSpace = (max-min+1);
|
int addressSpace = (max-min + 1);
|
||||||
|
|
||||||
static const uint32_t maxBuckets = 256 * 1024; /* maximum buckets. */
|
static const uint32_t maxBuckets = 256 * 1024; /* maximum buckets. */
|
||||||
uint32_t length = addressSpace;
|
uint32_t length = addressSpace;
|
||||||
|
@ -2883,7 +2883,7 @@ static void writeGmon(uint32_t *samples, uint32_t sampleNum, char *filename)
|
||||||
val = 65535;
|
val = 65535;
|
||||||
}
|
}
|
||||||
data[i*2]=val&0xff;
|
data[i*2]=val&0xff;
|
||||||
data[i*2+1]=(val >> 8)&0xff;
|
data[i*2 + 1]=(val >> 8)&0xff;
|
||||||
}
|
}
|
||||||
free(buckets);
|
free(buckets);
|
||||||
writeData(f, data, length * 2);
|
writeData(f, data, length * 2);
|
||||||
|
@ -3028,7 +3028,7 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return target_mem2array(interp, target, argc-1, argv+1);
|
return target_mem2array(interp, target, argc-1, argv + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv)
|
static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv)
|
||||||
|
@ -3215,7 +3215,7 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return target_array2mem( interp,target, argc-1, argv+1 );
|
return target_array2mem( interp,target, argc-1, argv + 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv)
|
static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv)
|
||||||
|
@ -3749,7 +3749,7 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv )
|
||||||
};
|
};
|
||||||
|
|
||||||
/* go past the "command" */
|
/* go past the "command" */
|
||||||
Jim_GetOpt_Setup( &goi, interp, argc-1, argv+1 );
|
Jim_GetOpt_Setup( &goi, interp, argc-1, argv + 1 );
|
||||||
|
|
||||||
target = Jim_CmdPrivData( goi.interp );
|
target = Jim_CmdPrivData( goi.interp );
|
||||||
cmd_ctx = Jim_GetAssocData(goi.interp, "context");
|
cmd_ctx = Jim_GetAssocData(goi.interp, "context");
|
||||||
|
@ -4141,7 +4141,7 @@ static int target_create( Jim_GetOptInfo *goi )
|
||||||
if ( target_types[x] == NULL ){
|
if ( target_types[x] == NULL ){
|
||||||
Jim_SetResult_sprintf( goi->interp, "Unknown target type %s, try one of ", cp );
|
Jim_SetResult_sprintf( goi->interp, "Unknown target type %s, try one of ", cp );
|
||||||
for ( x = 0 ; target_types[x] ; x++ ){
|
for ( x = 0 ; target_types[x] ; x++ ){
|
||||||
if ( target_types[x+1] ){
|
if ( target_types[x + 1] ){
|
||||||
Jim_AppendStrings( goi->interp,
|
Jim_AppendStrings( goi->interp,
|
||||||
Jim_GetResult(goi->interp),
|
Jim_GetResult(goi->interp),
|
||||||
target_types[x]->name,
|
target_types[x]->name,
|
||||||
|
@ -4283,7 +4283,7 @@ static int jim_target( Jim_Interp *interp, int argc, Jim_Obj *const *argv )
|
||||||
|
|
||||||
cmd_ctx = Jim_GetAssocData( interp, "context" );
|
cmd_ctx = Jim_GetAssocData( interp, "context" );
|
||||||
|
|
||||||
Jim_GetOpt_Setup( &goi, interp, argc-1, argv+1 );
|
Jim_GetOpt_Setup( &goi, interp, argc-1, argv + 1 );
|
||||||
|
|
||||||
if ( goi.argc == 0 ){
|
if ( goi.argc == 0 ){
|
||||||
Jim_WrongNumArgs(interp, 1, argv, "missing: command ...");
|
Jim_WrongNumArgs(interp, 1, argv, "missing: command ...");
|
||||||
|
@ -4460,7 +4460,7 @@ static int handle_fast_load_image_command(struct command_context_s *cmd_ctx, cha
|
||||||
|
|
||||||
/* DANGER!!! beware of unsigned comparision here!!! */
|
/* DANGER!!! beware of unsigned comparision here!!! */
|
||||||
|
|
||||||
if ((image.sections[i].base_address+buf_cnt >= min_address)&&
|
if ((image.sections[i].base_address + buf_cnt >= min_address)&&
|
||||||
(image.sections[i].base_address<max_address))
|
(image.sections[i].base_address<max_address))
|
||||||
{
|
{
|
||||||
if (image.sections[i].base_address<min_address)
|
if (image.sections[i].base_address<min_address)
|
||||||
|
@ -4470,25 +4470,25 @@ static int handle_fast_load_image_command(struct command_context_s *cmd_ctx, cha
|
||||||
length -= offset;
|
length -= offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (image.sections[i].base_address+buf_cnt>max_address)
|
if (image.sections[i].base_address + buf_cnt>max_address)
|
||||||
{
|
{
|
||||||
length -= (image.sections[i].base_address+buf_cnt)-max_address;
|
length -= (image.sections[i].base_address + buf_cnt)-max_address;
|
||||||
}
|
}
|
||||||
|
|
||||||
fastload[i].address = image.sections[i].base_address+offset;
|
fastload[i].address = image.sections[i].base_address + offset;
|
||||||
fastload[i].data = malloc(length);
|
fastload[i].data = malloc(length);
|
||||||
if (fastload[i].data == NULL)
|
if (fastload[i].data == NULL)
|
||||||
{
|
{
|
||||||
free(buffer);
|
free(buffer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
memcpy(fastload[i].data, buffer+offset, length);
|
memcpy(fastload[i].data, buffer + offset, length);
|
||||||
fastload[i].length = length;
|
fastload[i].length = length;
|
||||||
|
|
||||||
image_size += length;
|
image_size += length;
|
||||||
command_print(cmd_ctx, "%u byte written at address 0x%8.8x",
|
command_print(cmd_ctx, "%u byte written at address 0x%8.8x",
|
||||||
(unsigned int)length,
|
(unsigned int)length,
|
||||||
((unsigned int)(image.sections[i].base_address+offset)));
|
((unsigned int)(image.sections[i].base_address + offset)));
|
||||||
}
|
}
|
||||||
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
|
|
@ -264,8 +264,8 @@ int xscale_read_dcsr(target_t *target)
|
||||||
|
|
||||||
jtag_add_dr_scan(3, fields, jtag_get_end_state());
|
jtag_add_dr_scan(3, fields, jtag_get_end_state());
|
||||||
|
|
||||||
jtag_check_value_mask(fields+0, &field0_check_value, &field0_check_mask);
|
jtag_check_value_mask(fields + 0, &field0_check_value, &field0_check_mask);
|
||||||
jtag_check_value_mask(fields+2, &field2_check_value, &field2_check_mask);
|
jtag_check_value_mask(fields + 2, &field2_check_value, &field2_check_mask);
|
||||||
|
|
||||||
if ((retval = jtag_execute_queue()) != ERROR_OK)
|
if ((retval = jtag_execute_queue()) != ERROR_OK)
|
||||||
{
|
{
|
||||||
|
@ -362,11 +362,11 @@ int xscale_receive(target_t *target, uint32_t *buffer, int num_words)
|
||||||
|
|
||||||
jtag_add_pathmove(3, path);
|
jtag_add_pathmove(3, path);
|
||||||
|
|
||||||
fields[1].in_value = (uint8_t *)(field1+i);
|
fields[1].in_value = (uint8_t *)(field1 + i);
|
||||||
|
|
||||||
jtag_add_dr_scan_check(3, fields, jtag_set_end_state(TAP_IDLE));
|
jtag_add_dr_scan_check(3, fields, jtag_set_end_state(TAP_IDLE));
|
||||||
|
|
||||||
jtag_add_callback(xscale_getbuf, (jtag_callback_data_t)(field1+i));
|
jtag_add_callback(xscale_getbuf, (jtag_callback_data_t)(field1 + i));
|
||||||
|
|
||||||
words_scheduled++;
|
words_scheduled++;
|
||||||
}
|
}
|
||||||
|
@ -386,8 +386,8 @@ int xscale_receive(target_t *target, uint32_t *buffer, int num_words)
|
||||||
int j;
|
int j;
|
||||||
for (j = i; j < num_words - 1; j++)
|
for (j = i; j < num_words - 1; j++)
|
||||||
{
|
{
|
||||||
field0[j] = field0[j+1];
|
field0[j] = field0[j + 1];
|
||||||
field1[j] = field1[j+1];
|
field1[j] = field1[j + 1];
|
||||||
}
|
}
|
||||||
words_scheduled--;
|
words_scheduled--;
|
||||||
}
|
}
|
||||||
|
@ -480,8 +480,8 @@ int xscale_read_tx(target_t *target, int consume)
|
||||||
|
|
||||||
jtag_add_dr_scan(3, fields, jtag_set_end_state(TAP_IDLE));
|
jtag_add_dr_scan(3, fields, jtag_set_end_state(TAP_IDLE));
|
||||||
|
|
||||||
jtag_check_value_mask(fields+0, &field0_check_value, &field0_check_mask);
|
jtag_check_value_mask(fields + 0, &field0_check_value, &field0_check_mask);
|
||||||
jtag_check_value_mask(fields+2, &field2_check_value, &field2_check_mask);
|
jtag_check_value_mask(fields + 2, &field2_check_value, &field2_check_mask);
|
||||||
|
|
||||||
if ((retval = jtag_execute_queue()) != ERROR_OK)
|
if ((retval = jtag_execute_queue()) != ERROR_OK)
|
||||||
{
|
{
|
||||||
|
@ -563,8 +563,8 @@ int xscale_write_rx(target_t *target)
|
||||||
{
|
{
|
||||||
jtag_add_dr_scan(3, fields, jtag_set_end_state(TAP_IDLE));
|
jtag_add_dr_scan(3, fields, jtag_set_end_state(TAP_IDLE));
|
||||||
|
|
||||||
jtag_check_value_mask(fields+0, &field0_check_value, &field0_check_mask);
|
jtag_check_value_mask(fields + 0, &field0_check_value, &field0_check_mask);
|
||||||
jtag_check_value_mask(fields+2, &field2_check_value, &field2_check_mask);
|
jtag_check_value_mask(fields + 2, &field2_check_value, &field2_check_mask);
|
||||||
|
|
||||||
if ((retval = jtag_execute_queue()) != ERROR_OK)
|
if ((retval = jtag_execute_queue()) != ERROR_OK)
|
||||||
{
|
{
|
||||||
|
@ -728,8 +728,8 @@ int xscale_write_dcsr(target_t *target, int hold_rst, int ext_dbg_brk)
|
||||||
|
|
||||||
jtag_add_dr_scan(3, fields, jtag_get_end_state());
|
jtag_add_dr_scan(3, fields, jtag_get_end_state());
|
||||||
|
|
||||||
jtag_check_value_mask(fields+0, &field0_check_value, &field0_check_mask);
|
jtag_check_value_mask(fields + 0, &field0_check_value, &field0_check_mask);
|
||||||
jtag_check_value_mask(fields+2, &field2_check_value, &field2_check_mask);
|
jtag_check_value_mask(fields + 2, &field2_check_value, &field2_check_mask);
|
||||||
|
|
||||||
if ((retval = jtag_execute_queue()) != ERROR_OK)
|
if ((retval = jtag_execute_queue()) != ERROR_OK)
|
||||||
{
|
{
|
||||||
|
|
|
@ -82,7 +82,7 @@
|
||||||
|
|
||||||
! Set the maximum loop count to 25.
|
! Set the maximum loop count to 25.
|
||||||
LCOUNT 25;
|
LCOUNT 25;
|
||||||
! Step to DRPAUSE give 5 clocks and wait for 1.00e+000 SEC.
|
! Step to DRPAUSE give 5 clocks and wait for 1.00e + 000 SEC.
|
||||||
LDELAY DRPAUSE 5 TCK 1.00E-003 SEC;
|
LDELAY DRPAUSE 5 TCK 1.00E-003 SEC;
|
||||||
! Test for the completed status. Match means pass.
|
! Test for the completed status. Match means pass.
|
||||||
! Loop back to LDELAY line if not match and loop count less than 25.
|
! Loop back to LDELAY line if not match and loop count less than 25.
|
||||||
|
@ -605,7 +605,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
LOG_DEBUG("XSIR2 %d", bitcount);
|
LOG_DEBUG("XSIR2 %d", bitcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
ir_buf = malloc((bitcount+7) / 8);
|
ir_buf = malloc((bitcount + 7) / 8);
|
||||||
|
|
||||||
if (xsvf_read_buffer(bitcount, xsvf_fd, ir_buf) != ERROR_OK)
|
if (xsvf_read_buffer(bitcount, xsvf_fd, ir_buf) != ERROR_OK)
|
||||||
do_abort = 1;
|
do_abort = 1;
|
||||||
|
|
Loading…
Reference in New Issue