]> git.sur5r.net Git - openocd/commitdiff
mips: illustrates how to improve performance
authorØyvind Harboe <oyvind.harboe@zylin.com>
Thu, 31 Mar 2011 22:00:39 +0000 (00:00 +0200)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Fri, 1 Apr 2011 06:59:11 +0000 (08:59 +0200)
Do not require unecessary roundtrips for clocking out
data.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
src/flash/nor/pic32mx.c
src/target/mips_ejtag.c
src/target/mips_ejtag.h
src/target/mips_m4k.c

index 89fe9b05b2c1436d9ef4b3350559979139700190..b3c6da3ea61196d2899877ee74432640293c4435 100644 (file)
@@ -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);
index 9df8a021f461c66e50bc822c8800e8319035d284..087be0766d686b4e9d31864931d1d55111905edd 100644 (file)
@@ -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[] = {
index 63b6093ca25c353562d15fea6386b2a4d9763b3c..aa890d2b5ecfeb32d447f6bceab60f0b7ff3aa4f 100644 (file)
@@ -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);
 
index 10d3c7da4d0b448ef8bdb7b61527fe38f581da08..7530cbd0bc7841c9e881001a9a1f0c40da71d0d4 100644 (file)
@@ -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