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