In fact, I noticed that placing somewhere mips_ejtag_drscan_32_out() works, but in some places mips_ejtag_drscan_32() must be kept, and can not be replaced with mips_ejtag_drscan_32_out().
What is the real difference between these two functions and when is safe to replace ? BR, Drasko On Fri, Apr 1, 2011 at 5:53 PM, Drasko DRASKOVIC <[email protected]> wrote: > Hi Øyvind, > I am trying to figure out how to do similar for mips_ejtag_drscan_32(). > > I added : > > 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); > } > > And than started replacing for example > mips_ejtag_drscan_32(ejtag_info, &ejtag_ctrl) with > mips_ejtag_drscan_32_out(ejtag_info, ejtag_ctrl), but that does not > seem to be working. > > I do not quite get this procedure. > > What could be the gain in performance ? > > At which moment is the queue pushed out on the line in this case ? > > BR, > Drasko > > On Fri, Apr 1, 2011 at 12:02 AM, Øyvind Harboe <[email protected]> > wrote: >> Do not require unecessary roundtrips for clocking out >> data. >> >> Signed-off-by: Øyvind Harboe <[email protected]> >> --- >> src/flash/nor/pic32mx.c | 9 +++------ >> src/target/mips_ejtag.c | 17 +++++++++++++++-- >> src/target/mips_ejtag.h | 1 + >> src/target/mips_m4k.c | 8 ++------ >> 4 files changed, 21 insertions(+), 14 deletions(-) >> >> diff --git a/src/flash/nor/pic32mx.c b/src/flash/nor/pic32mx.c >> index 89fe9b0..b3c6da3 100644 >> --- a/src/flash/nor/pic32mx.c >> +++ b/src/flash/nor/pic32mx.c >> @@ -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); >> diff --git a/src/target/mips_ejtag.c b/src/target/mips_ejtag.c >> index 9df8a02..087be07 100644 >> --- a/src/target/mips_ejtag.c >> +++ b/src/target/mips_ejtag.c >> @@ -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[] = { >> diff --git a/src/target/mips_ejtag.h b/src/target/mips_ejtag.h >> index 63b6093..aa890d2 100644 >> --- a/src/target/mips_ejtag.h >> +++ b/src/target/mips_ejtag.h >> @@ -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); >> >> diff --git a/src/target/mips_m4k.c b/src/target/mips_m4k.c >> index 10d3c7d..7530cbd 100644 >> --- a/src/target/mips_m4k.c >> +++ b/src/target/mips_m4k.c >> @@ -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 >> -- >> 1.7.0.4 >> >> _______________________________________________ >> Openocd-development mailing list >> [email protected] >> https://lists.berlios.de/mailman/listinfo/openocd-development >> > _______________________________________________ Openocd-development mailing list [email protected] https://lists.berlios.de/mailman/listinfo/openocd-development
