Merge remote branch 'origin/master' into HEAD
authorØyvind Harboe <oyvind.harboe@zylin.com>
Fri, 1 Apr 2011 11:02:24 +0000 (13:02 +0200)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Fri, 1 Apr 2011 11:02:24 +0000 (13:02 +0200)
36 files changed:
doc/openocd.texi
src/flash/nor/pic32mx.c
src/jtag/minidummy/minidummy.c
src/jtag/zy1000/zy1000.c
src/openocd.c
src/svf/svf.c
src/target/arm11.c
src/target/arm720t.c
src/target/arm7_9_common.c
src/target/arm7_9_common.h
src/target/arm920t.c
src/target/arm920t.h
src/target/arm926ejs.c
src/target/arm926ejs.h
src/target/arm946e.c
src/target/arm_adi_v5.c
src/target/arm_adi_v5.h
src/target/armv4_5_mmu.c
src/target/armv4_5_mmu.h
src/target/avr32_ap7k.c
src/target/avr32_mem.c
src/target/avr32_mem.h
src/target/cortex_a.c
src/target/cortex_m3.c
src/target/dsp563xx.c
src/target/embeddedice.c
src/target/embeddedice.h
src/target/feroceon.c
src/target/mips32_pracc.c
src/target/mips_ejtag.c
src/target/mips_ejtag.h
src/target/mips_m4k.c
src/target/target.c
src/target/target.h
src/target/target_type.h
src/target/xscale.c

index 1749034d136173d6c859ba600256736e45240a4c..2c09febd94e4a383a9f33ff4b456218ccba509a0 100644 (file)
@@ -5788,7 +5788,7 @@ Loads an image stored in memory by @command{fast_load_image} to the
 current target. Must be preceeded by fast_load_image.
 @end deffn
 
-@deffn Command {fast_load_image} filename address [@option{bin}|@option{ihex}|@option{elf}]
+@deffn Command {fast_load_image} filename address [@option{bin}|@option{ihex}|@option{elf}|@option{s19}]
 Normally you should be using @command{load_image} or GDB load. However, for
 testing purposes or when I/O overhead is significant(OpenOCD running on an embedded
 host), storing the image in memory and uploading the image to the target
@@ -5800,10 +5800,10 @@ separately.
 @end deffn
 
 @anchor{load_image}
-@deffn Command {load_image} filename address [[@option{bin}|@option{ihex}|@option{elf}] @option{min_addr} @option{max_length}]
+@deffn Command {load_image} filename address [[@option{bin}|@option{ihex}|@option{elf}|@option{s19}] @option{min_addr} @option{max_length}]
 Load image from file @var{filename} to target memory offset by @var{address} from its load address. 
 The file format may optionally be specified
-(@option{bin}, @option{ihex}, or @option{elf}).
+(@option{bin}, @option{ihex}, @option{elf}, or @option{s19}).
 In addition the following arguments may be specifed:
 @var{min_addr} - ignore data below @var{min_addr} (this is w.r.t. to the target's load address + @var{address})
 @var{max_length} - maximum number of bytes to load.
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 46ec9c3ab521cfdce7eed5579ec6ca71b3928f93..4dbcff6d35bd2bdc16918c9159e28ea0795c9660 100644 (file)
@@ -154,7 +154,7 @@ int interface_add_tms_seq(unsigned num_bits, const uint8_t *seq, enum tap_state
        return ERROR_OK;
 }
 
-void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, uint8_t *buffer, int little, int count)
+void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, const uint8_t *buffer, int little, int count)
 {
        int i;
        for (i = 0; i < count; i++)
index 5416c6b268861d48ff7ac65b98bf95d774a159a0..8c3766656aaa222075be9611d903856c97b4fd8d 100644 (file)
@@ -853,7 +853,7 @@ static void jtag_pre_post_bits(struct jtag_tap *tap, int *pre, int *post)
                        TAP_IDLE);
 */
 
-void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, uint8_t *buffer, int little, int count)
+void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, const uint8_t *buffer, int little, int count)
 {
 #if 0
        int i;
@@ -895,7 +895,7 @@ void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, uint8_t *buffer,
 
 
 
-int arm11_run_instr_data_to_core_noack_inner(struct jtag_tap * tap, uint32_t opcode, uint32_t * data, size_t count)
+int arm11_run_instr_data_to_core_noack_inner(struct jtag_tap * tap, uint32_t opcode, const uint32_t * data, size_t count)
 {
        /* bypass bits before and after */
        int pre_bits;
@@ -905,7 +905,7 @@ int arm11_run_instr_data_to_core_noack_inner(struct jtag_tap * tap, uint32_t opc
 
        if ((pre_bits > 32) || (post_bits > 32))
        {
-               int arm11_run_instr_data_to_core_noack_inner_default(struct jtag_tap *, uint32_t, uint32_t *, size_t);
+               int arm11_run_instr_data_to_core_noack_inner_default(struct jtag_tap *, uint32_t, const uint32_t *, size_t);
                return arm11_run_instr_data_to_core_noack_inner_default(tap, opcode, data, count);
        } else
        {
index 62b22389a9b68fe2fa7d2de6992840ab9043b518..a5002d19268b1f58c167bc18c9acf07002816404 100644 (file)
@@ -301,31 +301,10 @@ struct command_context *setup_command_handler(Jim_Interp *interp)
        return cmd_ctx;
 }
 
-/* normally this is the main() function entry, but if OpenOCD is linked
- * into application, then this fn will not be invoked, but rather that
- * application will have it's own implementation of main(). */
-int openocd_main(int argc, char *argv[])
+static int main2(int argc, char *argv[], struct command_context *cmd_ctx)
 {
        int ret;
 
-       /* initialize commandline interface */
-       struct command_context *cmd_ctx;
-
-       cmd_ctx = setup_command_handler(NULL);
-
-       if (util_init(cmd_ctx) != ERROR_OK)
-               return EXIT_FAILURE;
-
-       if (ioutil_init(cmd_ctx) != ERROR_OK)
-               return EXIT_FAILURE;
-
-       LOG_OUTPUT("For bug reports, read\n\t"
-               "http://openocd.berlios.de/doc/doxygen/bugs.html"
-               "\n");
-
-       command_context_mode(cmd_ctx, COMMAND_CONFIG);
-       command_set_output_handler(cmd_ctx, configuration_output_handler, NULL);
-
        if (parse_cmdline_args(cmd_ctx, argc, argv) != ERROR_OK)
                return EXIT_FAILURE;
 
@@ -348,15 +327,43 @@ int openocd_main(int argc, char *argv[])
        {
                ret = command_run_line(cmd_ctx, "init");
                if (ERROR_OK != ret)
-                       ret = EXIT_FAILURE;
+                       return EXIT_FAILURE;
        }
 
-       /* handle network connections */
-       if (ERROR_OK == ret)
-               server_loop(cmd_ctx);
+       server_loop(cmd_ctx);
 
        server_quit();
 
+       return ret;
+}
+
+/* normally this is the main() function entry, but if OpenOCD is linked
+ * into application, then this fn will not be invoked, but rather that
+ * application will have it's own implementation of main(). */
+int openocd_main(int argc, char *argv[])
+{
+       int ret;
+
+       /* initialize commandline interface */
+       struct command_context *cmd_ctx;
+
+       cmd_ctx = setup_command_handler(NULL);
+
+       if (util_init(cmd_ctx) != ERROR_OK)
+               return EXIT_FAILURE;
+
+       if (ioutil_init(cmd_ctx) != ERROR_OK)
+               return EXIT_FAILURE;
+
+       LOG_OUTPUT("For bug reports, read\n\t"
+               "http://openocd.berlios.de/doc/doxygen/bugs.html"
+               "\n");
+
+       command_context_mode(cmd_ctx, COMMAND_CONFIG);
+       command_set_output_handler(cmd_ctx, configuration_output_handler, NULL);
+
+       ret = main2(argc, argv, cmd_ctx);
+
        unregister_all_commands(cmd_ctx, NULL);
 
        /* free commandline interface */
index 0cca768d758bd76881d9893deb409c3a0cc3fb75..64be127013d6d623940abe54244ec4dc3b78499c 100644 (file)
@@ -219,7 +219,7 @@ static size_t svf_command_buffer_size = 0;
 static int svf_line_number = 1;
 static int svf_getline (char **lineptr, size_t *n, FILE *stream);
 
-#define SVF_MAX_BUFFER_SIZE_TO_COMMIT  (4 * 1024)
+#define SVF_MAX_BUFFER_SIZE_TO_COMMIT  (1024 * 1024)
 static uint8_t *svf_tdi_buffer = NULL, *svf_tdo_buffer = NULL, *svf_mask_buffer = NULL;
 static int svf_buffer_index = 0, svf_buffer_size = 0;
 static int svf_quiet = 0;
index 2d978e63e6fedf1cafba58563be4dba6279991de..2d658355b5709f73309d60cc324143031e64202d 100644 (file)
@@ -925,7 +925,7 @@ static int arm11_read_memory(struct target *target, uint32_t address, uint32_t s
 */
 static int arm11_write_memory_inner(struct target *target,
                uint32_t address, uint32_t size,
-               uint32_t count, uint8_t *buffer,
+               uint32_t count, const uint8_t *buffer,
                bool no_increment)
 {
        int retval;
@@ -1072,7 +1072,7 @@ static int arm11_write_memory_inner(struct target *target,
 
 static int arm11_write_memory(struct target *target,
                uint32_t address, uint32_t size,
-               uint32_t count, uint8_t *buffer)
+               uint32_t count, const uint8_t *buffer)
 {
        /* pointer increment matters only for multi-unit writes ...
         * not e.g. to a "reset the chip" controller.
@@ -1083,7 +1083,7 @@ static int arm11_write_memory(struct target *target,
 
 /* write target memory in multiples of 4 byte, optimized for writing large quantities of data */
 static int arm11_bulk_write_memory(struct target *target,
-               uint32_t address, uint32_t count, uint8_t *buffer)
+               uint32_t address, uint32_t count, const uint8_t *buffer)
 {
        if (target->state != TARGET_HALTED)
        {
index 96e0baaf5c21f2a74d9aff874c5b74b229d37674..76862ed5b13494856aad45e6f375f0036a89d94b 100644 (file)
@@ -330,7 +330,7 @@ static int arm720t_read_phys_memory(struct target *target,
 }
 
 static int arm720t_write_phys_memory(struct target *target,
-               uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        struct arm720t_common *arm720t = target_to_arm720(target);
 
index 778e606b608adfd1a57644f5802b946d6630b7ba..611d5d4acc002ed2f2bd3a7213b74f501c6d71d9 100644 (file)
@@ -2431,7 +2431,7 @@ int arm7_9_read_memory(struct target *target, uint32_t address, uint32_t size, u
        return ERROR_OK;
 }
 
-int arm7_9_write_memory(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
+int arm7_9_write_memory(struct target *target, uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        struct arm7_9_common *arm7_9 = target_to_arm7_9(target);
        struct arm *armv4_5 = &arm7_9->armv4_5_common;
@@ -2655,7 +2655,7 @@ int arm7_9_write_memory(struct target *target, uint32_t address, uint32_t size,
 }
 
 static int dcc_count;
-static uint8_t *dcc_buffer;
+static const uint8_t *dcc_buffer;
 
 static int arm7_9_dcc_completion(struct target *target, uint32_t exit_point, int timeout_ms, void *arch_info)
 {
@@ -2667,7 +2667,7 @@ static int arm7_9_dcc_completion(struct target *target, uint32_t exit_point, int
 
        int little = target->endianness == TARGET_LITTLE_ENDIAN;
        int count = dcc_count;
-       uint8_t *buffer = dcc_buffer;
+       const uint8_t *buffer = dcc_buffer;
        if (count > 2)
        {
                /* Handle first & last using standard embeddedice_write_reg and the middle ones w/the
@@ -2720,7 +2720,7 @@ static const uint32_t dcc_code[] =
        0xeafffff9      /*    b   w                   */
 };
 
-int arm7_9_bulk_write_memory(struct target *target, uint32_t address, uint32_t count, uint8_t *buffer)
+int arm7_9_bulk_write_memory(struct target *target, uint32_t address, uint32_t count, const uint8_t *buffer)
 {
        int retval;
        struct arm7_9_common *arm7_9 = target_to_arm7_9(target);
index 69ea22187c3ba2b1944cb7f1b803e4b9ba8daa57..780d6c9a3632abb011814a7f33dc840ab22c3d52 100644 (file)
@@ -134,8 +134,8 @@ int arm7_9_halt(struct target *target);
 int arm7_9_resume(struct target *target, int current, uint32_t address, int handle_breakpoints, int debug_execution);
 int arm7_9_step(struct target *target, int current, uint32_t address, int handle_breakpoints);
 int arm7_9_read_memory(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
-int arm7_9_write_memory(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
-int arm7_9_bulk_write_memory(struct target *target, uint32_t address, uint32_t count, uint8_t *buffer);
+int arm7_9_write_memory(struct target *target, uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer);
+int arm7_9_bulk_write_memory(struct target *target, uint32_t address, uint32_t count, const uint8_t *buffer);
 
 int arm7_9_run_algorithm(struct target *target, int num_mem_params, struct mem_param *mem_params, int num_reg_prams, struct reg_param *reg_param, uint32_t entry_point, void *arch_info);
 
index a3a5adf1592bebfc5c226dd00694cf9371adc153..210c253d9ff258908f8a6d284915117c883b0c1f 100644 (file)
@@ -602,7 +602,7 @@ static int arm920t_read_phys_memory(struct target *target,
 
 static int arm920t_write_phys_memory(struct target *target,
                uint32_t address, uint32_t size,
-               uint32_t count, uint8_t *buffer)
+               uint32_t count, const uint8_t *buffer)
 {
        struct arm920t_common *arm920t = target_to_arm920(target);
 
@@ -613,7 +613,7 @@ static int arm920t_write_phys_memory(struct target *target,
 
 /** Writes a buffer, in the specified word size, with current MMU settings. */
 int arm920t_write_memory(struct target *target, uint32_t address,
-               uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        int retval;
        const uint32_t cache_mask = ~0x1f; /* cache line size : 32 byte */
index 02d7f83a951652eda66ace17320f16ffcea21975..f4c852be89e1d27c7d7c0294705b5859d385ae27 100644 (file)
@@ -63,7 +63,7 @@ int arm920t_soft_reset_halt(struct target *target);
 int arm920t_read_memory(struct target *target,
        uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
 int arm920t_write_memory(struct target *target,
-       uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+       uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer);
 int arm920t_post_debug_entry(struct target *target);
 void arm920t_pre_restore_context(struct target *target);
 int arm920t_get_ttb(struct target *target, uint32_t *result);
index 3765f23135cc2293463730863f0705a66882c00f..c72fe1051b3e98878dae70a17b3f6727150b3fae 100644 (file)
@@ -626,7 +626,7 @@ int arm926ejs_soft_reset_halt(struct target *target)
 
 /** Writes a buffer, in the specified word size, with current MMU settings. */
 int arm926ejs_write_memory(struct target *target, uint32_t address,
-               uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        int retval;
        struct arm926ejs_common *arm926ejs = target_to_arm926(target);
@@ -693,7 +693,7 @@ int arm926ejs_write_memory(struct target *target, uint32_t address,
 
 static int arm926ejs_write_phys_memory(struct target *target,
                uint32_t address, uint32_t size,
-               uint32_t count, uint8_t *buffer)
+               uint32_t count, const uint8_t *buffer)
 {
        struct arm926ejs_common *arm926ejs = target_to_arm926(target);
 
index 274733bfd29ddc464a95558d4a1ad9a1f8ec500e..76cc24a0c30ddcc0f9528d7a6387d889d8967e38 100644 (file)
@@ -50,7 +50,7 @@ int arm926ejs_init_arch_info(struct target *target,
                struct arm926ejs_common *arm926ejs, struct jtag_tap *tap);
 int arm926ejs_arch_state(struct target *target);
 int arm926ejs_write_memory(struct target *target,
-               uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+               uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer);
 int arm926ejs_soft_reset_halt(struct target *target);
 
 extern const struct command_registration arm926ejs_command_handlers[];
index ea9226ef1711e81d0fe67d832a8fa95047c6dcf0..092271858fed4a8719d06298635fdaf87e620f6d 100644 (file)
@@ -512,7 +512,7 @@ uint32_t arm946e_invalidate_icache(struct target *target, uint32_t address,
 
 /** Writes a buffer, in the specified word size, with current MMU settings. */
 int arm946e_write_memory(struct target *target, uint32_t address,
-               uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        int retval;
 
index 53cf61563578d9fb72d162c203a160da1aa554ae..cd6e5deb7413a57f447931ed1d64abe273aff1a3 100644 (file)
@@ -270,11 +270,11 @@ int mem_ap_write_atomic_u32(struct adiv5_dap *dap, uint32_t address,
 * Write a buffer in target order (little endian)                             *
 *                                                                            *
 *****************************************************************************/
-int mem_ap_write_buf_u32(struct adiv5_dap *dap, uint8_t *buffer, int count, uint32_t address)
+int mem_ap_write_buf_u32(struct adiv5_dap *dap, const uint8_t *buffer, int count, uint32_t address)
 {
        int wcount, blocksize, writecount, errorcount = 0, retval = ERROR_OK;
        uint32_t adr = address;
-       uint8_t* pBuffer = buffer;
+       const uint8_t* pBuffer = buffer;
 
        count >>= 2;
        wcount = count;
@@ -343,7 +343,7 @@ int mem_ap_write_buf_u32(struct adiv5_dap *dap, uint8_t *buffer, int count, uint
 }
 
 static int mem_ap_write_buf_packed_u16(struct adiv5_dap *dap,
-               uint8_t *buffer, int count, uint32_t address)
+               const uint8_t *buffer, int count, uint32_t address)
 {
        int retval = ERROR_OK;
        int wcount, blocksize, writecount, i;
@@ -424,7 +424,7 @@ static int mem_ap_write_buf_packed_u16(struct adiv5_dap *dap,
        return retval;
 }
 
-int mem_ap_write_buf_u16(struct adiv5_dap *dap, uint8_t *buffer, int count, uint32_t address)
+int mem_ap_write_buf_u16(struct adiv5_dap *dap, const uint8_t *buffer, int count, uint32_t address)
 {
        int retval = ERROR_OK;
 
@@ -456,7 +456,7 @@ int mem_ap_write_buf_u16(struct adiv5_dap *dap, uint8_t *buffer, int count, uint
 }
 
 static int mem_ap_write_buf_packed_u8(struct adiv5_dap *dap,
-               uint8_t *buffer, int count, uint32_t address)
+               const uint8_t *buffer, int count, uint32_t address)
 {
        int retval = ERROR_OK;
        int wcount, blocksize, writecount, i;
@@ -532,7 +532,7 @@ static int mem_ap_write_buf_packed_u8(struct adiv5_dap *dap,
        return retval;
 }
 
-int mem_ap_write_buf_u8(struct adiv5_dap *dap, uint8_t *buffer, int count, uint32_t address)
+int mem_ap_write_buf_u8(struct adiv5_dap *dap, const uint8_t *buffer, int count, uint32_t address)
 {
        int retval = ERROR_OK;
 
@@ -935,21 +935,21 @@ int mem_ap_sel_read_buf_u32(struct adiv5_dap *swjdp, uint8_t ap,
 }
 
 int mem_ap_sel_write_buf_u8(struct adiv5_dap *swjdp, uint8_t ap,
-               uint8_t *buffer, int count, uint32_t address)
+               const uint8_t *buffer, int count, uint32_t address)
 {
        dap_ap_select(swjdp, ap);
        return mem_ap_write_buf_u8(swjdp, buffer, count, address);
 }
 
 int mem_ap_sel_write_buf_u16(struct adiv5_dap *swjdp, uint8_t ap,
-               uint8_t *buffer, int count, uint32_t address)
+               const uint8_t *buffer, int count, uint32_t address)
 {
        dap_ap_select(swjdp, ap);
        return mem_ap_write_buf_u16(swjdp, buffer, count, address);
 }
 
 int mem_ap_sel_write_buf_u32(struct adiv5_dap *swjdp, uint8_t ap,
-               uint8_t *buffer, int count, uint32_t address)
+               const uint8_t *buffer, int count, uint32_t address)
 {
        dap_ap_select(swjdp, ap);
        return mem_ap_write_buf_u32(swjdp, buffer, count, address);
@@ -1083,23 +1083,11 @@ is_dap_cid_ok(uint32_t cid3, uint32_t cid2, uint32_t cid1, uint32_t cid0)
                        && ((cid1 & 0x0f) == 0) && cid0 == 0x0d;
 }
 
-struct broken_cpu {
-       uint32_t        dbgbase;
-       uint32_t        apid;
-       uint32_t        idcode;
-       uint32_t        correct_dbgbase;
-       char            *model;
-} broken_cpus[] = {
-       { 0x80000000, 0x04770002, 0x1ba00477, 0x60000000, "imx51" },
-       { 0x80040000, 0x04770002, 0x3b95c02f, 0x80000000, "omap4430" },
-};
-
 int dap_get_debugbase(struct adiv5_dap *dap, int ap,
                        uint32_t *out_dbgbase, uint32_t *out_apid)
 {
        uint32_t ap_old;
        int retval;
-       unsigned int i;
        uint32_t dbgbase, apid, idcode;
 
        /* AP address is in bits 31:24 of DP_SELECT */
@@ -1131,19 +1119,6 @@ int dap_get_debugbase(struct adiv5_dap *dap, int ap,
        if (tap == NULL || !tap->hasidcode)
                return ERROR_OK;
 
-       /* Some CPUs are messed up, so fixup if needed. */
-       for (i = 0; i < sizeof(broken_cpus)/sizeof(struct broken_cpu); i++)
-               if (broken_cpus[i].dbgbase == dbgbase &&
-                       broken_cpus[i].apid == apid &&
-                       broken_cpus[i].idcode == idcode) {
-                       LOG_WARNING("Found broken CPU (%s), trying to fixup "
-                               "ROM Table location from 0x%08x to 0x%08x",
-                               broken_cpus[i].model, dbgbase,
-                               broken_cpus[i].correct_dbgbase);
-                       dbgbase = broken_cpus[i].correct_dbgbase;
-                       break;
-               }
-
        dap_ap_select(dap, ap_old);
 
        /* The asignment happens only here to prevent modification of these
index 03a75f497d01ed9d0db9dcf51da24ad3ab67ff48..1c0854704191c227c95981777c35a9971d0d4715 100644 (file)
@@ -376,11 +376,11 @@ int mem_ap_read_buf_u32(struct adiv5_dap *swjdp,
                uint8_t *buffer, int count, uint32_t address);
 
 int mem_ap_write_buf_u8(struct adiv5_dap *swjdp,
-               uint8_t *buffer, int count, uint32_t address);
+               const uint8_t *buffer, int count, uint32_t address);
 int mem_ap_write_buf_u16(struct adiv5_dap *swjdp,
-               uint8_t *buffer, int count, uint32_t address);
+               const uint8_t *buffer, int count, uint32_t address);
 int mem_ap_write_buf_u32(struct adiv5_dap *swjdp,
-               uint8_t *buffer, int count, uint32_t address);
+               const uint8_t *buffer, int count, uint32_t address);
 
 
 
@@ -405,11 +405,11 @@ int mem_ap_sel_read_buf_u32(struct adiv5_dap *swjdp, uint8_t ap,
                uint8_t *buffer, int count, uint32_t address);
 
 int mem_ap_sel_write_buf_u8(struct adiv5_dap *swjdp, uint8_t ap,
-               uint8_t *buffer, int count, uint32_t address);
+               const uint8_t *buffer, int count, uint32_t address);
 int mem_ap_sel_write_buf_u16(struct adiv5_dap *swjdp, uint8_t ap,
-               uint8_t *buffer, int count, uint32_t address);
+               const uint8_t *buffer, int count, uint32_t address);
 int mem_ap_sel_write_buf_u32(struct adiv5_dap *swjdp, uint8_t ap,
-               uint8_t *buffer, int count, uint32_t address);
+               const uint8_t *buffer, int count, uint32_t address);
 
 
 
index 8978f354dafa9c5b01ed7ab31e4b7fb4021850c4..5415e83b9fcc3cb16b553282fdb29ac982a73e79 100644 (file)
@@ -149,7 +149,7 @@ int armv4_5_mmu_read_physical(struct target *target, struct armv4_5_mmu_common *
        return retval;
 }
 
-int armv4_5_mmu_write_physical(struct target *target, struct armv4_5_mmu_common *armv4_5_mmu, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
+int armv4_5_mmu_write_physical(struct target *target, struct armv4_5_mmu_common *armv4_5_mmu, uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        int retval;
 
index f39834e27b74a0b12b819bb368d0eecc72073259..937a90e8301e2e534012e81c7940510103b78071 100644 (file)
@@ -28,7 +28,7 @@ struct armv4_5_mmu_common
 {
        int (*get_ttb)(struct target *target, uint32_t *result);
        int (*read_memory)(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
-       int (*write_memory)(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+       int (*write_memory)(struct target *target, uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer);
        int (*disable_mmu_caches)(struct target *target, int mmu, int d_u_cache, int i_cache);
        int (*enable_mmu_caches)(struct target *target, int mmu, int d_u_cache, int i_cache);
        struct armv4_5_cache_common armv4_5_cache;
@@ -46,7 +46,7 @@ int armv4_5_mmu_read_physical(struct target *target,
 
 int armv4_5_mmu_write_physical(struct target *target,
                struct armv4_5_mmu_common *armv4_5_mmu,
-               uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+               uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer);
 
 enum
 {
index ed10847abcf2bd4cd6ec6b4e9bd80faf21c9a31b..70e5129df8f3283d5cb2f167788de6ed774de317 100644 (file)
@@ -515,7 +515,7 @@ static int avr32_ap7k_read_memory(struct target *target, uint32_t address,
 }
 
 static int avr32_ap7k_write_memory(struct target *target, uint32_t address,
-               uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        struct avr32_ap7k_common *ap7k = target_to_ap7k(target);
 
@@ -600,7 +600,7 @@ static int avr32_ap7k_examine(struct target *target)
 }
 
 static int avr32_ap7k_bulk_write_memory(struct target *target, uint32_t address,
-               uint32_t count, uint8_t *buffer)
+               uint32_t count, const uint8_t *buffer)
 {
        LOG_ERROR("%s: implement me", __func__);
 
index fe6b8f0f10508992a192b1e573d1ff92d90798f4..9c78c107ed78bcd8cb609714b9d11014dc3e4a35 100644 (file)
@@ -152,7 +152,7 @@ int avr32_jtag_read_memory8(struct avr32_jtag *jtag_info,
 }
 
 int avr32_jtag_write_memory32(struct avr32_jtag *jtag_info, 
-               uint32_t addr, int count, uint32_t *buffer)
+               uint32_t addr, int count, const uint32_t *buffer)
 {
        int i, retval;
        uint32_t data;
@@ -173,7 +173,7 @@ int avr32_jtag_write_memory32(struct avr32_jtag *jtag_info,
 }
 
 int avr32_jtag_write_memory16(struct avr32_jtag *jtag_info, 
-               uint32_t addr, int count, uint16_t *buffer)
+               uint32_t addr, int count, const uint16_t *buffer)
 {
        int i, retval;
        uint32_t data;
@@ -248,7 +248,7 @@ int avr32_jtag_write_memory16(struct avr32_jtag *jtag_info,
 }
 
 int avr32_jtag_write_memory8(struct avr32_jtag *jtag_info, 
-               uint32_t addr, int count, uint8_t *buffer)
+               uint32_t addr, int count, const uint8_t *buffer)
 {
        int i, j, retval;
        uint32_t data;
index 2a6f606a1fa4d27110e28f5e74a74f02e71f6702..58d51bb3e965895404b53bbc307c76a772438ecf 100644 (file)
@@ -27,11 +27,11 @@ int avr32_jtag_read_memory8(struct avr32_jtag *jtag_info,
                uint32_t addr, int count, uint8_t *buffer);
 
 int avr32_jtag_write_memory32(struct avr32_jtag *jtag_info, 
-               uint32_t addr, int count, uint32_t *buffer);
+               uint32_t addr, int count, const uint32_t *buffer);
 int avr32_jtag_write_memory16(struct avr32_jtag *jtag_info, 
-               uint32_t addr, int count, uint16_t *buffer);
+               uint32_t addr, int count, const uint16_t *buffer);
 int avr32_jtag_write_memory8(struct avr32_jtag *jtag_info, 
-               uint32_t addr, int count, uint8_t *buffer);
+               uint32_t addr, int count, const uint8_t *buffer);
 
 #endif /* AVR32_MEM */
 
index 5ff6bacbdf6542c2b4505164a6ce661b9d1f95ce..c04804f85397039f118e6e8b8affd054c7dea5aa 100644 (file)
@@ -1587,7 +1587,7 @@ static int cortex_a8_read_memory(struct target *target, uint32_t address,
 
 static int cortex_a8_write_phys_memory(struct target *target,
                 uint32_t address, uint32_t size,
-                uint32_t count, uint8_t *buffer)
+                uint32_t count, const uint8_t *buffer)
 {
        struct armv7a_common *armv7a = target_to_armv7a(target);
        struct adiv5_dap *swjdp = &armv7a->dap;
@@ -1748,7 +1748,7 @@ static int cortex_a8_write_phys_memory(struct target *target,
 }
 
 static int cortex_a8_write_memory(struct target *target, uint32_t address,
-                uint32_t size, uint32_t count, uint8_t *buffer)
+                uint32_t size, uint32_t count, const uint8_t *buffer)
 {
         int enabled = 0;
         uint32_t virt, phys;
@@ -1774,7 +1774,7 @@ static int cortex_a8_write_memory(struct target *target, uint32_t address,
 }
 
 static int cortex_a8_bulk_write_memory(struct target *target, uint32_t address,
-               uint32_t count, uint8_t *buffer)
+               uint32_t count, const uint8_t *buffer)
 {
        return cortex_a8_write_memory(target, address, 4, count, buffer);
 }
index 5fd56e4007cccee6b211a72168897cc79cec1492..269d2a67ffeebc7104ff442c5302e88dc58fd9a7 100644 (file)
@@ -1618,7 +1618,7 @@ static int cortex_m3_read_memory(struct target *target, uint32_t address,
 }
 
 static int cortex_m3_write_memory(struct target *target, uint32_t address,
-               uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        struct armv7m_common *armv7m = target_to_armv7m(target);
        struct adiv5_dap *swjdp = &armv7m->dap;
@@ -1642,7 +1642,7 @@ static int cortex_m3_write_memory(struct target *target, uint32_t address,
 }
 
 static int cortex_m3_bulk_write_memory(struct target *target, uint32_t address,
-               uint32_t count, uint8_t *buffer)
+               uint32_t count, const uint8_t *buffer)
 {
        return cortex_m3_write_memory(target, address, 4, count, buffer);
 }
index 6cde152daf83d742519b10d6959d113ec92d244c..82cd8be59891e5f2ee9a5ecc2e58044acc30a14f 100644 (file)
@@ -1482,13 +1482,13 @@ static int dsp563xx_read_memory_default(struct target *target, uint32_t address,
        return dsp563xx_read_memory(target, dsp563xx_get_default_memory(), address, size, count, buffer);
 }
 
-static int dsp563xx_write_memory_core(struct target *target, int mem_type, uint32_t address, uint32_t size, uint32_t count, uint8_t * buffer)
+static int dsp563xx_write_memory_core(struct target *target, int mem_type, uint32_t address, uint32_t size, uint32_t count, const uint8_t * buffer)
 {
        int err;
        struct dsp563xx_common *dsp563xx = target_to_dsp563xx(target);
        uint32_t i, x;
        uint32_t data, move_cmd = 0;
-       uint8_t *b;
+       const uint8_t *b;
 
        LOG_DEBUG("memtype: %d address: 0x%8.8" PRIx32 ", size: 0x%8.8" PRIx32 ", count: 0x%8.8" PRIx32 "", mem_type,address, size, count);
 
@@ -1557,7 +1557,7 @@ static int dsp563xx_write_memory_core(struct target *target, int mem_type, uint3
        return ERROR_OK;
 }
 
-static int dsp563xx_write_memory(struct target *target, int mem_type, uint32_t address, uint32_t size, uint32_t count, uint8_t * buffer)
+static int dsp563xx_write_memory(struct target *target, int mem_type, uint32_t address, uint32_t size, uint32_t count, const uint8_t * buffer)
 {
        int err;
        uint32_t i,i1;
@@ -1615,12 +1615,12 @@ static int dsp563xx_write_memory(struct target *target, int mem_type, uint32_t a
        return ERROR_OK;
 }
 
-static int dsp563xx_write_memory_default(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t * buffer)
+static int dsp563xx_write_memory_default(struct target *target, uint32_t address, uint32_t size, uint32_t count, const uint8_t * buffer)
 {
        return dsp563xx_write_memory(target, dsp563xx_get_default_memory(), address, size, count, buffer);
 }
 
-static int dsp563xx_bulk_write_memory_default(struct target *target, uint32_t address, uint32_t count, uint8_t *buffer)
+static int dsp563xx_bulk_write_memory_default(struct target *target, uint32_t address, uint32_t count, const uint8_t *buffer)
 {
        return dsp563xx_write_memory(target, dsp563xx_get_default_memory(), address, 4, count, buffer);
 }
index 5502ad8a8a58590ef184e6d79df3e4efa5682aa1..b171dcf72f60c18217d3b61a716adc6742f6370c 100644 (file)
@@ -637,7 +637,7 @@ int embeddedice_handshake(struct arm_jtag *jtag_info, int hsbit, uint32_t timeou
  * This is an inner loop of the open loop DCC write of data to target
  */
 void embeddedice_write_dcc(struct jtag_tap *tap,
-               int reg_addr, uint8_t *buffer, int little, int count)
+               int reg_addr, const uint8_t *buffer, int little, int count)
 {
        int i;
 
index 42df8d00639703e6f527bfb28c4cd16eba7c34e2..66fef0a615a459f0aad1883c12c043ee2617121f 100644 (file)
@@ -130,6 +130,6 @@ static __inline__ void embeddedice_write_reg_inner(struct jtag_tap *tap, int reg
                        TAP_IDLE);
 }
 
-void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, uint8_t *buffer, int little, int count);
+void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, const uint8_t *buffer, int little, int count);
 
 #endif /* EMBEDDED_ICE_H */
index 2152a260135f59b0f6ff7d3f30ba028e40e46529..9bd45bedf71cd7400000599e67be75e5b78a7efa 100644 (file)
@@ -460,7 +460,7 @@ static int feroceon_examine_debug_reason(struct target *target)
 }
 
 static int feroceon_bulk_write_memory(struct target *target,
-               uint32_t address, uint32_t count, uint8_t *buffer)
+               uint32_t address, uint32_t count, const uint8_t *buffer)
 {
        int retval;
        struct arm *armv4_5 = target->arch_info;
index 2dc7a8fb982f37f8d6ba9725ee7560e91036a4a3..816f35270fb91c38aefb1e01ab55d144fc4b3ca7 100644 (file)
@@ -449,7 +449,7 @@ static int mips32_pracc_read_mem16(struct mips_ejtag *ejtag_info, uint32_t addr,
        uint32_t *param_out = malloc(count * sizeof(uint32_t));
        int i;
 
-//     int retval;
+       int retval = ERROR_OK;
        int blocksize;
        int bytesread;
        uint32_t param_in[2];
@@ -465,7 +465,7 @@ static int mips32_pracc_read_mem16(struct mips_ejtag *ejtag_info, uint32_t addr,
                param_in[0] = addr;
                param_in[1] = blocksize;
 
-               mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
+               retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
                        ARRAY_SIZE(param_in), param_in, count, param_out, 1);
 
 //             count -= blocksize;
@@ -480,7 +480,7 @@ static int mips32_pracc_read_mem16(struct mips_ejtag *ejtag_info, uint32_t addr,
 
        free(param_out);
 
-       return ERROR_OK;
+       return retval;
 }
 
 static int mips32_pracc_read_mem8(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint8_t *buf)
@@ -526,7 +526,7 @@ static int mips32_pracc_read_mem8(struct mips_ejtag *ejtag_info, uint32_t addr,
        uint32_t *param_out = malloc(count * sizeof(uint32_t));
        int i;
 
-//     int retval;
+       int retval = ERROR_OK;
        int blocksize;
        int bytesread;
        uint32_t param_in[2];
@@ -542,7 +542,7 @@ static int mips32_pracc_read_mem8(struct mips_ejtag *ejtag_info, uint32_t addr,
                param_in[0] = addr;
                param_in[1] = blocksize;
 
-               mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
+               retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
                        ARRAY_SIZE(param_in), param_in, count, param_out, 1);
 
 //             count -= blocksize;
@@ -557,7 +557,7 @@ static int mips32_pracc_read_mem8(struct mips_ejtag *ejtag_info, uint32_t addr,
 
        free(param_out);
 
-       return ERROR_OK;
+       return retval;
 }
 
 int mips32_pracc_write_mem(struct mips_ejtag *ejtag_info, uint32_t addr, int size, int count, void *buf)
@@ -619,12 +619,13 @@ static int mips32_pracc_write_mem32(struct mips_ejtag *ejtag_info, uint32_t addr
 
        memcpy(&param_in[2], buf, count * sizeof(uint32_t));
 
-       mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
+       int retval;
+       retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
                count + 2, param_in, 0, NULL, 1);
 
        free(param_in);
 
-       return ERROR_OK;
+       return retval;
 }
 
 static int mips32_pracc_write_u32(struct mips_ejtag *ejtag_info, uint32_t addr, uint32_t *buf)
@@ -653,10 +654,8 @@ static int mips32_pracc_write_u32(struct mips_ejtag *ejtag_info, uint32_t addr,
        param_in[0] = addr;
        param_in[1] = *buf;
 
-       mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
+       return mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
                ARRAY_SIZE(param_in), param_in, 0, NULL, 1);
-
-       return ERROR_OK;
 }
 
 static int mips32_pracc_write_mem16(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint16_t *buf)
@@ -709,12 +708,13 @@ static int mips32_pracc_write_mem16(struct mips_ejtag *ejtag_info, uint32_t addr
                param_in[i + 2] = buf[i];
        }
 
-       mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
+       int retval;
+       retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
                count + 2, param_in, 0, NULL, 1);
 
        free(param_in);
 
-       return ERROR_OK;
+       return retval;
 }
 
 static int mips32_pracc_write_mem8(struct mips_ejtag *ejtag_info, uint32_t addr, int count, uint8_t *buf)
@@ -768,7 +768,7 @@ static int mips32_pracc_write_mem8(struct mips_ejtag *ejtag_info, uint32_t addr,
                param_in[i + 2] = buf[i];
        }
 
-       retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
+       retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
                count + 2, param_in, 0, NULL, 1);
 
        free(param_in);
@@ -840,7 +840,7 @@ int mips32_pracc_write_regs(struct mips_ejtag *ejtag_info, uint32_t *regs)
 
        int retval;
 
-       retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
+       retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
                        MIPS32NUMCOREREGS, regs, 0, NULL, 1);
 
        return retval;
@@ -915,7 +915,7 @@ int mips32_pracc_read_regs(struct mips_ejtag *ejtag_info, uint32_t *regs)
 
        int retval;
 
-       retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
+       retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
                0, NULL, MIPS32NUMCOREREGS, regs, 1);
 
        return retval;
index 6ce702fdbb0c43e07809c97db49b5b06a64c4250..087be0766d686b4e9d31864931d1d55111905edd 100644 (file)
 #include "mips32.h"
 #include "mips_ejtag.h"
 
-int mips_ejtag_set_instr(struct mips_ejtag *ejtag_info, int new_instr)
+void mips_ejtag_set_instr(struct mips_ejtag *ejtag_info, int new_instr)
 {
        struct jtag_tap *tap;
 
        tap = ejtag_info->tap;
-       if (tap == NULL)
-               return ERROR_FAIL;
+       assert(tap != NULL);
 
        if (buf_get_u32(tap->cur_instr, 0, tap->ir_length) != (uint32_t)new_instr)
        {
@@ -48,8 +47,6 @@ int mips_ejtag_set_instr(struct mips_ejtag *ejtag_info, int new_instr)
 
                jtag_add_ir_scan(tap, &field, TAP_IDLE);
        }
-
-       return ERROR_OK;
 }
 
 int mips_ejtag_get_idcode(struct mips_ejtag *ejtag_info, uint32_t *idcode)
@@ -98,9 +95,8 @@ int mips_ejtag_drscan_32(struct mips_ejtag *ejtag_info, uint32_t *data)
 {
        struct jtag_tap *tap;
        tap  = ejtag_info->tap;
+       assert(tap != NULL);
 
-       if (tap == NULL)
-               return ERROR_FAIL;
        struct scan_field field;
        uint8_t t[4], r[4];
        int retval;
@@ -129,9 +125,8 @@ int mips_ejtag_drscan_8(struct mips_ejtag *ejtag_info, uint32_t *data)
 {
        struct jtag_tap *tap;
        tap  = ejtag_info->tap;
+       assert(tap != NULL);
 
-       if (tap == NULL)
-               return ERROR_FAIL;
        struct scan_field field;
        uint8_t t[4] = {0, 0, 0, 0}, r[4];
        int retval;
@@ -151,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[] = {
@@ -167,10 +175,8 @@ static int mips_ejtag_step_enable(struct mips_ejtag *ejtag_info)
                        MIPS32_MFC0(1,31,0),                    /* move COP0 DeSave to $1 */
        };
 
-       mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
-               0, NULL, 0, NULL, 1);
-
-       return ERROR_OK;
+       return mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
+                       0, NULL, 0, NULL, 1);
 }
 
 static int mips_ejtag_step_disable(struct mips_ejtag *ejtag_info)
@@ -192,10 +198,8 @@ static int mips_ejtag_step_disable(struct mips_ejtag *ejtag_info)
                        MIPS32_MFC0(15,31,0),                                                   /* move COP0 DeSave to $15 */
        };
 
-       mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
+       return mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
                0, NULL, 0, NULL, 1);
-
-       return ERROR_OK;
 }
 
 int mips_ejtag_config_step(struct mips_ejtag *ejtag_info, int enable_step)
@@ -219,7 +223,10 @@ int mips_ejtag_enter_debug(struct mips_ejtag *ejtag_info)
        mips_ejtag_drscan_32(ejtag_info, &ejtag_ctrl);
        LOG_DEBUG("ejtag_ctrl: 0x%8.8" PRIx32 "", ejtag_ctrl);
        if ((ejtag_ctrl & EJTAG_CTRL_BRKST) == 0)
-               LOG_DEBUG("Failed to enter Debug Mode!");
+       {
+               LOG_ERROR("Failed to enter Debug Mode!");
+               return ERROR_FAIL;
+       }
 
        return ERROR_OK;
 }
@@ -230,9 +237,7 @@ int mips_ejtag_exit_debug(struct mips_ejtag *ejtag_info)
        inst = MIPS32_DRET;
 
        /* execute our dret instruction */
-       mips32_pracc_exec(ejtag_info, 1, &inst, 0, NULL, 0, NULL, 0);
-
-       return ERROR_OK;
+       return mips32_pracc_exec(ejtag_info, 1, &inst, 0, NULL, 0, NULL, 0);
 }
 
 int mips_ejtag_read_debug(struct mips_ejtag *ejtag_info, uint32_t* debug_reg)
@@ -254,17 +259,18 @@ int mips_ejtag_read_debug(struct mips_ejtag *ejtag_info, uint32_t* debug_reg)
                        MIPS32_MFC0(15,31,0),                                                   /* move COP0 DeSave to $15 */
        };
 
-       mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code, \
+       return mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
                0, NULL, 1, debug_reg, 1);
-
-       return ERROR_OK;
 }
 
 int mips_ejtag_init(struct mips_ejtag *ejtag_info)
 {
        uint32_t ejtag_version;
+       int retval;
 
-       mips_ejtag_get_impcode(ejtag_info, &ejtag_info->impcode);
+       retval = mips_ejtag_get_impcode(ejtag_info, &ejtag_info->impcode);
+       if (retval != ERROR_OK)
+               return retval;
        LOG_DEBUG("impcode: 0x%8.8" PRIx32 "", ejtag_info->impcode);
 
        /* get ejtag version */
@@ -311,9 +317,7 @@ int mips_ejtag_fastdata_scan(struct mips_ejtag *ejtag_info, int write_t, uint32_
 {
        struct jtag_tap *tap;
        tap = ejtag_info->tap;
-
-       if (tap == NULL)
-               return ERROR_FAIL;
+       assert(tap != NULL);
 
        struct scan_field fields[2];
        uint8_t spracc = 0;
index 0db0504a79dbb36d3cd0046d1793ea56ea1497bf..aa890d2b5ecfeb32d447f6bceab60f0b7ff3aa4f 100644 (file)
@@ -131,12 +131,13 @@ struct mips_ejtag
        int fast_access_save;
 };
 
-int mips_ejtag_set_instr(struct mips_ejtag *ejtag_info,
+void mips_ejtag_set_instr(struct mips_ejtag *ejtag_info,
                int new_instr);
 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 3a79273b28614b2549b5f86d74b2086e71cb92cd..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
@@ -872,7 +868,7 @@ static int mips_m4k_read_memory(struct target *target, uint32_t address,
 }
 
 static int mips_m4k_write_memory(struct target *target, uint32_t address,
-               uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        struct mips32_common *mips32 = target_to_mips32(target);
        struct mips_ejtag *ejtag_info = &mips32->ejtag_info;
@@ -940,7 +936,9 @@ static int mips_m4k_examine(struct target *target)
 
        if (!target_was_examined(target))
        {
-               mips_ejtag_get_idcode(ejtag_info, &idcode);
+               retval = mips_ejtag_get_idcode(ejtag_info, &idcode);
+               if (retval != ERROR_OK)
+                       return retval;
                ejtag_info->idcode = idcode;
 
                if (((idcode >> 1) & 0x7FF) == 0x29)
@@ -964,7 +962,7 @@ static int mips_m4k_examine(struct target *target)
 }
 
 static int mips_m4k_bulk_write_memory(struct target *target, uint32_t address,
-               uint32_t count, uint8_t *buffer)
+               uint32_t count, const uint8_t *buffer)
 {
        struct mips32_common *mips32 = target_to_mips32(target);
        struct mips_ejtag *ejtag_info = &mips32->ejtag_info;
@@ -1002,19 +1000,34 @@ static int mips_m4k_bulk_write_memory(struct target *target, uint32_t address,
                ejtag_info->fast_access_save = -1;
        }
 
+       uint8_t * t = NULL;
+
        /* TAP data register is loaded LSB first (little endian) */
        if (target->endianness == TARGET_BIG_ENDIAN)
        {
+               t = malloc(count * sizeof(uint32_t));
+               if (t == NULL)
+               {
+                       LOG_ERROR("Out of memory");
+                       return ERROR_FAIL;
+               }
+
                uint32_t i, t32;
                for(i = 0; i < (count * 4); i += 4)
                {
                        t32 = be_to_h_u32((uint8_t *) &buffer[i]);
-                       h_u32_to_le(&buffer[i], t32);
+                       h_u32_to_le(&t[i], t32);
                }
+
+               buffer = t;
        }
 
        retval = mips32_pracc_fastdata_xfer(ejtag_info, mips32->fast_data_area, write_t, address,
                        count, (uint32_t*) (void *)buffer);
+
+       if (t != NULL)
+               free(t);
+
        if (retval != ERROR_OK)
        {
                /* FASTDATA access failed, try normal memory write */
index df38c837b7e0bba7fa5a76b994b7746b1c3e228c..026ca13b9c41875b43bac347893d7b42b3b50bd3 100644 (file)
@@ -49,7 +49,7 @@
 static int target_read_buffer_default(struct target *target, uint32_t address,
                uint32_t size, uint8_t *buffer);
 static int target_write_buffer_default(struct target *target, uint32_t address,
-               uint32_t size, uint8_t *buffer);
+               uint32_t size, const uint8_t *buffer);
 static int target_array2mem(Jim_Interp *interp, struct target *target,
                int argc, Jim_Obj *const *argv);
 static int target_mem2array(Jim_Interp *interp, struct target *target,
@@ -615,7 +615,7 @@ const char *target_type_name(struct target *target)
        return target->type->name;
 }
 
-static int target_write_memory_imp(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
+static int target_write_memory_imp(struct target *target, uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        if (!target_was_examined(target))
        {
@@ -705,19 +705,19 @@ static int target_read_phys_memory(struct target *target,
 }
 
 int target_write_memory(struct target *target,
-               uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        return target->type->write_memory(target, address, size, count, buffer);
 }
 
 static int target_write_phys_memory(struct target *target,
-               uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        return target->type->write_phys_memory(target, address, size, count, buffer);
 }
 
 int target_bulk_write_memory(struct target *target,
-               uint32_t address, uint32_t count, uint8_t *buffer)
+               uint32_t address, uint32_t count, const uint8_t *buffer)
 {
        return target->type->bulk_write_memory(target, address, count, buffer);
 }
@@ -783,7 +783,7 @@ err_read_phys_memory(struct target *target, uint32_t address,
 
 static int
 err_write_phys_memory(struct target *target, uint32_t address,
-               uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        LOG_ERROR("Not implemented: %s", __func__);
        return ERROR_FAIL;
@@ -1340,7 +1340,7 @@ int target_arch_state(struct target *target)
  * mode respectively, otherwise data is handled as quickly as
  * possible
  */
-int target_write_buffer(struct target *target, uint32_t address, uint32_t size, uint8_t *buffer)
+int target_write_buffer(struct target *target, uint32_t address, uint32_t size, const uint8_t *buffer)
 {
        LOG_DEBUG("writing buffer of %i byte at 0x%8.8x",
                  (int)size, (unsigned)address);
@@ -1367,7 +1367,7 @@ int target_write_buffer(struct target *target, uint32_t address, uint32_t size,
        return target->type->write_buffer(target, address, size, buffer);
 }
 
-static int target_write_buffer_default(struct target *target, uint32_t address, uint32_t size, uint8_t *buffer)
+static int target_write_buffer_default(struct target *target, uint32_t address, uint32_t size, const uint8_t *buffer)
 {
        int retval = ERROR_OK;
 
@@ -2390,10 +2390,10 @@ COMMAND_HANDLER(handle_md_command)
 }
 
 typedef int (*target_write_fn)(struct target *target,
-               uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+               uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer);
 
 static int target_write_memory_fast(struct target *target,
-               uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        return target_write_buffer(target, address, size * count, buffer);
 }
index 32fa87a105f0f5ded96103e50112a17471f6bbf0..fd7de560e3e375c113b7144a8b0852a838b63ab4 100644 (file)
@@ -408,7 +408,7 @@ int target_read_memory(struct target *target,
  * This routine is wrapper for target->type->write_memory.
  */
 int target_write_memory(struct target *target,
-               uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+               uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer);
 
 /**
  * Write @a count items of 4 bytes to the memory of @a target at
@@ -418,7 +418,7 @@ int target_write_memory(struct target *target,
  * This routine is wrapper for target->type->bulk_write_memory.
  */
 int target_bulk_write_memory(struct target *target,
-               uint32_t address, uint32_t count, uint8_t *buffer);
+               uint32_t address, uint32_t count, const uint8_t *buffer);
 
 /*
  * Write to target memory using the virtual address.
@@ -445,7 +445,7 @@ int target_bulk_write_memory(struct target *target,
  * peripheral registers which do not support byte operations.
  */
 int target_write_buffer(struct target *target,
-               uint32_t address, uint32_t size, uint8_t *buffer);
+               uint32_t address, uint32_t size, const uint8_t *buffer);
 int target_read_buffer(struct target *target,
                uint32_t address, uint32_t size, uint8_t *buffer);
 int target_checksum_memory(struct target *target,
index 15598b2f17f53f6014d55ab5442947f7dfaa413f..6059c403d3bd2b43b58c8735cbf77028227a637f 100644 (file)
@@ -112,25 +112,25 @@ struct target_type
         * directly, use target_read_memory() instead.
         */
        int (*read_memory)(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
-       int (*write_memory_imp)(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+       int (*write_memory_imp)(struct target *target, uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer);
        /**
         * Target memory write callback.  Do @b not call this function
         * directly, use target_write_memory() instead.
         */
-       int (*write_memory)(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+       int (*write_memory)(struct target *target, uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer);
 
        /* Default implementation will do some fancy alignment to improve performance, target can override */
        int (*read_buffer)(struct target *target, uint32_t address, uint32_t size, uint8_t *buffer);
 
        /* Default implementation will do some fancy alignment to improve performance, target can override */
-       int (*write_buffer)(struct target *target, uint32_t address, uint32_t size, uint8_t *buffer);
+       int (*write_buffer)(struct target *target, uint32_t address, uint32_t size, const uint8_t *buffer);
 
        /**
         * Write target memory in multiples of 4 bytes, optimized for
         * writing large quantities of data.  Do @b not call this
         * function directly, use target_bulk_write_memory() instead.
         */
-       int (*bulk_write_memory)(struct target *target, uint32_t address, uint32_t count, uint8_t *buffer);
+       int (*bulk_write_memory)(struct target *target, uint32_t address, uint32_t count, const uint8_t *buffer);
 
        int (*checksum_memory)(struct target *target, uint32_t address, uint32_t count, uint32_t* checksum);
        int (*blank_check_memory)(struct target *target, uint32_t address, uint32_t count, uint32_t* blank);
@@ -225,7 +225,7 @@ struct target_type
        /*
         * same as read_phys_memory, except that it writes...
         */
-       int (*write_phys_memory)(struct target *target, uint32_t phys_address, uint32_t size, uint32_t count, uint8_t *buffer);
+       int (*write_phys_memory)(struct target *target, uint32_t phys_address, uint32_t size, uint32_t count, const uint8_t *buffer);
 
        int (*mmu)(struct target *target, int *enabled);
 
index d1e33b7c0adfb17a947bb1ec4468ce91e1aa9494..3b5674581c2b3131c9695b8648986ec77602ea92 100644 (file)
@@ -528,7 +528,7 @@ static int xscale_write_rx(struct target *target)
 }
 
 /* send count elements of size byte to the debug handler */
-static int xscale_send(struct target *target, uint8_t *buffer, int count, int size)
+static int xscale_send(struct target *target, const uint8_t *buffer, int count, int size)
 {
        struct xscale_common *xscale = target_to_xscale(target);
        uint32_t t[3];
@@ -1937,7 +1937,7 @@ static int xscale_read_phys_memory(struct target *target, uint32_t address,
 }
 
 static int xscale_write_memory(struct target *target, uint32_t address,
-               uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        struct xscale_common *xscale = target_to_xscale(target);
        int retval;
@@ -2016,7 +2016,7 @@ static int xscale_write_memory(struct target *target, uint32_t address,
 }
 
 static int xscale_write_phys_memory(struct target *target, uint32_t address,
-               uint32_t size, uint32_t count, uint8_t *buffer)
+               uint32_t size, uint32_t count, const uint8_t *buffer)
 {
        struct xscale_common *xscale = target_to_xscale(target);
 
@@ -2031,7 +2031,7 @@ static int xscale_write_phys_memory(struct target *target, uint32_t address,
 }
 
 static int xscale_bulk_write_memory(struct target *target, uint32_t address,
-               uint32_t count, uint8_t *buffer)
+               uint32_t count, const uint8_t *buffer)
 {
        return xscale_write_memory(target, address, 4, count, buffer);
 }

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)