- added patch to display device information as INFO too
authormifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Sun, 9 Dec 2007 15:36:21 +0000 (15:36 +0000)
committermifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Sun, 9 Dec 2007 15:36:21 +0000 (15:36 +0000)
- added patch which fixes a crash upon flash write error
- added patch which will improve the reset handling when
  SRST is tied to TRST

(thanks to Oyvind Harboe for these patches)

git-svn-id: svn://svn.berlios.de/openocd/trunk@218 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/flash/flash.c
src/jtag/jtag.c
src/target/target.c

index 03ee46f341320b237def868b72c25824e71c440a..390e37ad58eb5197668fd7b96a7958b08fd6abff 100644 (file)
@@ -570,10 +570,19 @@ int handle_flash_write_image_command(struct command_context_s *cmd_ctx, char *cm
        
        failed = malloc(sizeof(int) * image.num_sections);
 
-       if ((retval = flash_write(target, &image, &written, &error_str, failed, auto_erase)) != ERROR_OK)
+       error_str=NULL;
+       retval = flash_write(target, &image, &written, &error_str, failed, auto_erase);
+       
+       if (retval != ERROR_OK)
        {
-               command_print(cmd_ctx, "failed writing image %s: %s", args[0], error_str);
-               free(error_str);
+               if (error_str)
+               {
+                       command_print(cmd_ctx, "failed writing image %s: %s", args[0], error_str);
+                       free(error_str);
+               }
+               image_close(&image);
+               free(failed);
+               return retval;
        }
        
        for (i = 0; i < image.num_sections; i++)
@@ -938,3 +947,4 @@ int handle_flash_auto_erase_command(struct command_context_s *cmd_ctx, char *cmd
        return ERROR_OK;
 }
 
+
index 5a390070bbd7879b5d1e7d159b69bff7f96d049f..09cffef799e601cdc59a8acb02262c72c29d6534 100644 (file)
@@ -1287,7 +1287,7 @@ int jtag_examine_chain()
                        part = (idcode & 0xffff000) >> 12;
                        version = (idcode & 0xf0000000) >> 28;
 
-                       DEBUG("JTAG device found: 0x%8.8x (Manufacturer: 0x%3.3x, Part: 0x%4.4x, Version: 0x%1.1x", 
+                       INFO("JTAG device found: 0x%8.8x (Manufacturer: 0x%3.3x, Part: 0x%4.4x, Version: 0x%1.1x)", 
                                idcode, manufacturer, part, version);
                        
                        bit_count += 32;
index f9d957d69e0927b561c727b8e1d60b398fe93e00..0874010c03e5d0e26cd54c881cc8fca7ab872c6c 100644 (file)
@@ -313,6 +313,23 @@ int target_process_reset(struct command_context_s *cmd_ctx)
        while (target)
        {
                target->type->deassert_reset(target);
+
+               switch (target->reset_mode)
+               {
+                       case RESET_INIT:
+                       case RESET_HALT:
+                               // If we're already halted, then this is harmless(reducing # of execution paths here)
+                               // If nSRST & nTRST are tied together then the halt during reset failed(logged) and
+                               // we use this as fallback(there is no other output to tell the user that reset halt 
+                               // didn't work).
+                               target->type->poll(target);
+                               target->type->halt(target);
+                               break;
+                       default:
+                               break;
+               }
+               
+               
                target = target->next;
        }
        jtag_execute_queue();
@@ -1047,7 +1064,7 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
                                (*last_target_p)->trace_info->trace_history_overflowed = 0;
                                
                                (*last_target_p)->dbgmsg = NULL;
-                               
+                                                               
                                (*last_target_p)->type->target_command(cmd_ctx, cmd, args, argc, *last_target_p);
                                
                                found = 1;
@@ -1188,8 +1205,7 @@ int handle_target(void *priv)
                        if (target_continous_poll)
                                if ((retval = target->type->poll(target)) < 0)
                                {
-                                       ERROR("couldn't poll target, exiting");
-                                       exit(-1);
+                                       ERROR("couldn't poll target. It's due for a reset.");
                                }
                }
        
@@ -1860,7 +1876,7 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch
        if (!target)
        {
                ERROR("no target selected");
-               return ERROR_OK;
+       return ERROR_OK;
        }
        
        duration_start_measure(&duration);
@@ -1875,7 +1891,7 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch
                image.base_address_set = 0;
                image.base_address = 0x0;
        }
-       
+
        image.start_address_set = 0;
 
        if (image_open(&image, args[0], (argc == 3) ? args[2] : NULL) != ERROR_OK)
@@ -2085,3 +2101,4 @@ int handle_rwp_command(struct command_context_s *cmd_ctx, char *cmd, char **args
        return ERROR_OK;
 }
 
+