fix SEGFAULT regression in cortex after TRST fixes
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Wed, 16 Apr 2008 07:34:22 +0000 (07:34 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Wed, 16 Apr 2008 07:34:22 +0000 (07:34 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@583 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/target/cortex_m3.c
src/target/cortex_swjdp.c
src/target/target/stm32.cfg

index 6bdb1df67b4c4b899e5df0989bf39a04ecf088f3..b330fee3c5304945c68834b0f36cb66a1379e03a 100644 (file)
@@ -51,6 +51,7 @@ int cortex_m3_quit();
 int cortex_m3_load_core_reg_u32(target_t *target, enum armv7m_regtype type, u32 num, u32 *value);
 int cortex_m3_store_core_reg_u32(target_t *target, enum armv7m_regtype type, u32 num, u32 value);
 int cortex_m3_target_request_data(target_t *target, u32 size, u8 *buffer);
+int cortex_m3_examine(struct command_context_s *cmd_ctx, struct target_s *target);
 
 target_type_t cortexm3_target =
 {
@@ -86,6 +87,7 @@ target_type_t cortexm3_target =
        .register_commands = cortex_m3_register_commands,
        .target_command = cortex_m3_target_command,
        .init_target = cortex_m3_init_target,
+       .examine = cortex_m3_examine,
        .quit = cortex_m3_quit
 };
 
@@ -1227,6 +1229,13 @@ void cortex_m3_build_reg_cache(target_t *target)
 
 int cortex_m3_init_target(struct command_context_s *cmd_ctx, struct target_s *target)
 {
+       cortex_m3_build_reg_cache(target);
+       return ERROR_OK;
+}
+
+int cortex_m3_examine(struct command_context_s *cmd_ctx, struct target_s *target)
+{
+       int retval;
        u32 cpuid, fpcr, dwtcr, ictr;
        int i;
        
@@ -1234,12 +1243,16 @@ int cortex_m3_init_target(struct command_context_s *cmd_ctx, struct target_s *ta
        armv7m_common_t *armv7m = target->arch_info;
        cortex_m3_common_t *cortex_m3 = armv7m->arch_info;
        swjdp_common_t *swjdp = &cortex_m3->swjdp_info;
+       
+       target->type->examined = 1;
 
-       cortex_m3_build_reg_cache(target);
-       ahbap_debugport_init(swjdp);
+       if ((retval=ahbap_debugport_init(swjdp))!=ERROR_OK)
+               return retval;
 
        /* Read from Device Identification Registers */
-       target_read_u32(target, CPUID, &cpuid);
+       if ((retval=target_read_u32(target, CPUID, &cpuid))!=ERROR_OK)
+               return retval;
+       
        if (((cpuid >> 4) & 0xc3f) == 0xc23)
                LOG_DEBUG("CORTEX-M3 processor detected");
        LOG_DEBUG("cpuid: 0x%8.8x", cpuid);
@@ -1280,6 +1293,7 @@ int cortex_m3_init_target(struct command_context_s *cmd_ctx, struct target_s *ta
        return ERROR_OK;
 }
 
+
 int cortex_m3_quit()
 {
        
index d1983ec56e49767a50bec201ec282d3ca5796ea3..dc50fea1c4a91ff18b64bb8c5f1d5338db447ee9 100644 (file)
@@ -941,6 +941,7 @@ int ahbap_debugport_init(swjdp_common_t *swjdp)
        u32 idreg, romaddr, dummy;
        u32 ctrlstat;
        int cnt = 0;
+       int retval;
        
        LOG_DEBUG(" ");
        
@@ -955,14 +956,16 @@ int ahbap_debugport_init(swjdp_common_t *swjdp)
 
        swjdp_write_dpacc(swjdp, swjdp->dp_ctrl_stat, DP_CTRL_STAT);
        swjdp_read_dpacc(swjdp, &ctrlstat, DP_CTRL_STAT);
-       jtag_execute_queue();
+       if ((retval=jtag_execute_queue())!=ERROR_OK)
+               return retval;
 
        /* Check that we have debug power domains activated */
        while (!(ctrlstat & CDBGPWRUPACK) && (cnt++ < 10))
        {
                LOG_DEBUG("swjdp: wait CDBGPWRUPACK");
                swjdp_read_dpacc(swjdp, &ctrlstat, DP_CTRL_STAT);
-               jtag_execute_queue();
+               if ((retval=jtag_execute_queue())!=ERROR_OK)
+                       return retval;
                usleep(10000);
        }
 
@@ -970,7 +973,8 @@ int ahbap_debugport_init(swjdp_common_t *swjdp)
        {
                LOG_DEBUG("swjdp: wait CSYSPWRUPACK");
                swjdp_read_dpacc(swjdp, &ctrlstat, DP_CTRL_STAT);
-               jtag_execute_queue();
+               if ((retval=jtag_execute_queue())!=ERROR_OK)
+                       return retval;
                usleep(10000);
        }
 
index 8a93087d6c0ab6787a1282769c9cd1f1a668aae7..371e4ab3d069c6caab85dd7d4b6e2395a4125697 100644 (file)
@@ -11,7 +11,7 @@ jtag_device 5 0x1 0x1 0x1e
 
 #target <type> <startup mode>
 #target arm7tdmi <reset mode> <chainpos> <endianness> <variant>
-target cortex_m3 little reset_init 0
+target cortex_m3 little reset_halt 0
 run_and_halt_time 0 30
 
 working_area 0 0x20000000 16384 nobackup