Browse Source

Added mips_ejtag_drscan_32_out() for optimization.

tags/v0.5.0-rc1
Drasko DRASKOVIC 13 years ago
committed by Øyvind Harboe
parent
commit
719f9ecde3
4 changed files with 22 additions and 6 deletions
  1. +5
    -5
      src/target/mips32_pracc.c
  2. +15
    -0
      src/target/mips_ejtag.c
  3. +1
    -0
      src/target/mips_ejtag.h
  4. +1
    -1
      src/target/mips_m4k.c

+ 5
- 5
src/target/mips32_pracc.c View File

@@ -188,12 +188,12 @@ static int mips32_pracc_exec_read(struct mips32_pracc_context *ctx, uint32_t add


/* Send the data out */ /* Send the data out */
mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_DATA); mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_DATA);
mips_ejtag_drscan_32(ctx->ejtag_info, &data);
mips_ejtag_drscan_32_out(ctx->ejtag_info, data);


/* Clear the access pending bit (let the processor eat!) */ /* Clear the access pending bit (let the processor eat!) */
ejtag_ctrl = ejtag_info->ejtag_ctrl & ~EJTAG_CTRL_PRACC; ejtag_ctrl = ejtag_info->ejtag_ctrl & ~EJTAG_CTRL_PRACC;
mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_CONTROL); mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_CONTROL);
mips_ejtag_drscan_32(ctx->ejtag_info, &ejtag_ctrl);
mips_ejtag_drscan_32_out(ctx->ejtag_info, ejtag_ctrl);


return jtag_execute_queue(); return jtag_execute_queue();
} }
@@ -213,7 +213,7 @@ static int mips32_pracc_exec_write(struct mips32_pracc_context *ctx, uint32_t ad
/* Clear access pending bit */ /* Clear access pending bit */
ejtag_ctrl = ejtag_info->ejtag_ctrl & ~EJTAG_CTRL_PRACC; ejtag_ctrl = ejtag_info->ejtag_ctrl & ~EJTAG_CTRL_PRACC;
mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_CONTROL); mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_CONTROL);
mips_ejtag_drscan_32(ctx->ejtag_info, &ejtag_ctrl);
mips_ejtag_drscan_32_out(ctx->ejtag_info, ejtag_ctrl);


retval = jtag_execute_queue(); retval = jtag_execute_queue();
if (retval != ERROR_OK) if (retval != ERROR_OK)
@@ -1026,12 +1026,12 @@ int mips32_pracc_fastdata_xfer(struct mips_ejtag *ejtag_info, struct working_are
return retval; return retval;


mips_ejtag_set_instr(ejtag_info, EJTAG_INST_DATA); mips_ejtag_set_instr(ejtag_info, EJTAG_INST_DATA);
mips_ejtag_drscan_32(ejtag_info, &jmp_code[i]);
mips_ejtag_drscan_32_out(ejtag_info, jmp_code[i]);


/* Clear the access pending bit (let the processor eat!) */ /* Clear the access pending bit (let the processor eat!) */
ejtag_ctrl = ejtag_info->ejtag_ctrl & ~EJTAG_CTRL_PRACC; ejtag_ctrl = ejtag_info->ejtag_ctrl & ~EJTAG_CTRL_PRACC;
mips_ejtag_set_instr(ejtag_info, EJTAG_INST_CONTROL); mips_ejtag_set_instr(ejtag_info, EJTAG_INST_CONTROL);
mips_ejtag_drscan_32(ejtag_info, &ejtag_ctrl);
mips_ejtag_drscan_32_out(ejtag_info, ejtag_ctrl);
} }


if ((retval = wait_for_pracc_rw(ejtag_info, &ejtag_ctrl)) != ERROR_OK) if ((retval = wait_for_pracc_rw(ejtag_info, &ejtag_ctrl)) != ERROR_OK)


+ 15
- 0
src/target/mips_ejtag.c View File

@@ -121,6 +121,21 @@ int mips_ejtag_drscan_32(struct mips_ejtag *ejtag_info, uint32_t *data)
return ERROR_OK; return ERROR_OK;
} }


void mips_ejtag_drscan_32_out(struct mips_ejtag *ejtag_info, uint32_t data)
{
struct jtag_tap *tap;
tap = ejtag_info->tap;
assert(tap != NULL);

struct scan_field field;

field.num_bits = 32;
field.out_value = (uint8_t *)&data;
field.in_value = NULL;

jtag_add_dr_scan(tap, 1, &field, TAP_IDLE);
}

int mips_ejtag_drscan_8(struct mips_ejtag *ejtag_info, uint32_t *data) int mips_ejtag_drscan_8(struct mips_ejtag *ejtag_info, uint32_t *data)
{ {
struct jtag_tap *tap; struct jtag_tap *tap;


+ 1
- 0
src/target/mips_ejtag.h View File

@@ -136,6 +136,7 @@ void mips_ejtag_set_instr(struct mips_ejtag *ejtag_info,
int mips_ejtag_enter_debug(struct mips_ejtag *ejtag_info); int mips_ejtag_enter_debug(struct mips_ejtag *ejtag_info);
int mips_ejtag_exit_debug(struct mips_ejtag *ejtag_info); int mips_ejtag_exit_debug(struct mips_ejtag *ejtag_info);
int mips_ejtag_get_idcode(struct mips_ejtag *ejtag_info, uint32_t *idcode); int mips_ejtag_get_idcode(struct mips_ejtag *ejtag_info, uint32_t *idcode);
void mips_ejtag_drscan_32_out(struct mips_ejtag *ejtag_info, uint32_t data);
int mips_ejtag_drscan_32(struct mips_ejtag *ejtag_info, uint32_t *data); int mips_ejtag_drscan_32(struct mips_ejtag *ejtag_info, uint32_t *data);
void mips_ejtag_drscan_8_out(struct mips_ejtag *ejtag_info, uint8_t data); void mips_ejtag_drscan_8_out(struct mips_ejtag *ejtag_info, uint8_t data);
int mips_ejtag_drscan_8(struct mips_ejtag *ejtag_info, uint32_t *data); int mips_ejtag_drscan_8(struct mips_ejtag *ejtag_info, uint32_t *data);


+ 1
- 1
src/target/mips_m4k.c View File

@@ -274,7 +274,7 @@ static int mips_m4k_assert_reset(struct target *target)
uint32_t ejtag_ctrl = ejtag_info->ejtag_ctrl | EJTAG_CTRL_PRRST | EJTAG_CTRL_PERRST; uint32_t ejtag_ctrl = ejtag_info->ejtag_ctrl | EJTAG_CTRL_PRRST | EJTAG_CTRL_PERRST;
LOG_DEBUG("Using EJTAG reset (PRRST) to reset processor..."); LOG_DEBUG("Using EJTAG reset (PRRST) to reset processor...");
mips_ejtag_set_instr(ejtag_info, EJTAG_INST_CONTROL); mips_ejtag_set_instr(ejtag_info, EJTAG_INST_CONTROL);
mips_ejtag_drscan_32(ejtag_info, &ejtag_ctrl);
mips_ejtag_drscan_32_out(ejtag_info, ejtag_ctrl);
} }
} }




Loading…
Cancel
Save