mips: illustrates how to improve performance
Do not require unecessary roundtrips for clocking out data. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
This commit is contained in:
parent
2615bf4398
commit
378567da4e
|
@ -774,11 +774,9 @@ COMMAND_HANDLER(pic32mx_handle_unlock_command)
|
|||
}
|
||||
|
||||
/* unlock/erase device */
|
||||
mchip_cmd = MCHP_ASERT_RST;
|
||||
mips_ejtag_drscan_8(ejtag_info, &mchip_cmd);
|
||||
mips_ejtag_drscan_8_out(ejtag_info, MCHP_ASERT_RST);
|
||||
|
||||
mchip_cmd = MCHP_ERASE;
|
||||
mips_ejtag_drscan_8(ejtag_info, &mchip_cmd);
|
||||
mips_ejtag_drscan_8_out(ejtag_info, MCHP_ERASE);
|
||||
|
||||
do {
|
||||
mchip_cmd = MCHP_STATUS;
|
||||
|
@ -791,8 +789,7 @@ COMMAND_HANDLER(pic32mx_handle_unlock_command)
|
|||
alive_sleep(1);
|
||||
} while ((mchip_cmd & (1 << 2)) || (!(mchip_cmd & (1 << 3))));
|
||||
|
||||
mchip_cmd = MCHP_DE_ASSERT_RST;
|
||||
mips_ejtag_drscan_8(ejtag_info, &mchip_cmd);
|
||||
mips_ejtag_drscan_8_out(ejtag_info, MCHP_DE_ASSERT_RST);
|
||||
|
||||
/* select ejtag tap */
|
||||
mips_ejtag_set_instr(ejtag_info, MTAP_SW_ETAP);
|
||||
|
|
|
@ -146,11 +146,24 @@ int mips_ejtag_drscan_8(struct mips_ejtag *ejtag_info, uint32_t *data)
|
|||
|
||||
*data = buf_get_u32(field.in_value, 0, 32);
|
||||
|
||||
keep_alive();
|
||||
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
void mips_ejtag_drscan_8_out(struct mips_ejtag *ejtag_info, uint8_t data)
|
||||
{
|
||||
struct jtag_tap *tap;
|
||||
tap = ejtag_info->tap;
|
||||
assert(tap != NULL);
|
||||
|
||||
struct scan_field field;
|
||||
|
||||
field.num_bits = 8;
|
||||
field.out_value = &data;
|
||||
field.in_value = NULL;
|
||||
|
||||
jtag_add_dr_scan(tap, 1, &field, TAP_IDLE);
|
||||
}
|
||||
|
||||
static int mips_ejtag_step_enable(struct mips_ejtag *ejtag_info)
|
||||
{
|
||||
static const uint32_t code[] = {
|
||||
|
|
|
@ -137,6 +137,7 @@ int mips_ejtag_enter_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_drscan_32(struct mips_ejtag *ejtag_info, uint32_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_fastdata_scan(struct mips_ejtag *ejtag_info, int write_t, uint32_t *data);
|
||||
|
||||
|
|
|
@ -254,18 +254,14 @@ static int mips_m4k_assert_reset(struct target *target)
|
|||
{
|
||||
if (mips_m4k->is_pic32mx)
|
||||
{
|
||||
uint32_t mchip_cmd;
|
||||
|
||||
LOG_DEBUG("Using MTAP reset to reset processor...");
|
||||
|
||||
/* use microchip specific MTAP reset */
|
||||
mips_ejtag_set_instr(ejtag_info, MTAP_SW_MTAP);
|
||||
mips_ejtag_set_instr(ejtag_info, MTAP_COMMAND);
|
||||
|
||||
mchip_cmd = MCHP_ASERT_RST;
|
||||
mips_ejtag_drscan_8(ejtag_info, &mchip_cmd);
|
||||
mchip_cmd = MCHP_DE_ASSERT_RST;
|
||||
mips_ejtag_drscan_8(ejtag_info, &mchip_cmd);
|
||||
mips_ejtag_drscan_8_out(ejtag_info, MCHP_ASERT_RST);
|
||||
mips_ejtag_drscan_8_out(ejtag_info, MCHP_DE_ASSERT_RST);
|
||||
mips_ejtag_set_instr(ejtag_info, MTAP_SW_ETAP);
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue