]> git.sur5r.net Git - openocd/blobdiff - src/flash/stellaris.c
ocd_flash_banks now returns empty list when no flash banks are configured instead...
[openocd] / src / flash / stellaris.c
index cc85cafb1cc1b656297b29236e572de1888dcab1..895fda1b61bd7115cd5ce7207d14bfec72f6fe66 100644 (file)
@@ -2,6 +2,9 @@
  *   Copyright (C) 2006 by Magnus Lundin                                   *
  *   lundin@mlu.mine.nu                                                    *
  *                                                                         *
+ *   Copyright (C) 2008 by Spencer Oliver                                  *
+ *   spen@spen-soft.co.uk                                                  *
+ *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
@@ -410,7 +413,7 @@ u32 stellaris_wait_status_busy(flash_bank_t *bank, u32 waitbits, int timeout)
        while (((status = stellaris_get_flash_status(bank)) & waitbits) && (timeout-- > 0))
        {
                LOG_DEBUG("status: 0x%x", status);
-               usleep(1000);
+               alive_sleep(1);
        }
        
        /* Flash errors are reflected in the FLASH_CRIS register */
@@ -520,6 +523,7 @@ int stellaris_protect_check(struct flash_bank_s *bank)
 
        if (bank->target->state != TARGET_HALTED)
        {
+               LOG_ERROR("Target not halted");
                return ERROR_TARGET_NOT_HALTED;
        }
 
@@ -549,6 +553,7 @@ int stellaris_erase(struct flash_bank_s *bank, int first, int last)
        
        if (bank->target->state != TARGET_HALTED)
        {
+               LOG_ERROR("Target not halted");
                return ERROR_TARGET_NOT_HALTED;
        }
 
@@ -619,6 +624,7 @@ int stellaris_protect(struct flash_bank_s *bank, int set, int first, int last)
        
        if (bank->target->state != TARGET_HALTED)
        {
+               LOG_ERROR("Target not halted");
                return ERROR_TARGET_NOT_HALTED;
        }
        
@@ -814,6 +820,7 @@ int stellaris_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count
        
        if (bank->target->state != TARGET_HALTED)
        {
+               LOG_ERROR("Target not halted");
                return ERROR_TARGET_NOT_HALTED;
        }
 
@@ -915,6 +922,7 @@ int stellaris_probe(struct flash_bank_s *bank)
        
        if (bank->target->state != TARGET_HALTED)
        {
+               LOG_ERROR("Target not halted");
                return ERROR_TARGET_NOT_HALTED;
        }
 
@@ -941,6 +949,7 @@ int stellaris_mass_erase(struct flash_bank_s *bank)
        
        if (target->state != TARGET_HALTED)
        {
+               LOG_ERROR("Target not halted");
                return ERROR_TARGET_NOT_HALTED;
        }
        
@@ -1007,15 +1016,20 @@ int stellaris_handle_mass_erase_command(struct command_context_s *cmd_ctx, char
                return ERROR_OK;
        }
        
-       stellaris_mass_erase(bank);
-       
-       /* set all sectors as erased */
-       for (i = 0; i < bank->num_sectors; i++)
+       if (stellaris_mass_erase(bank) == ERROR_OK)
+       {
+               /* set all sectors as erased */
+               for (i = 0; i < bank->num_sectors; i++)
+               {
+                       bank->sectors[i].is_erased = 1;
+               }
+               
+               command_print(cmd_ctx, "stellaris mass erase complete");
+       }
+       else
        {
-               bank->sectors[i].is_erased = 1;
+               command_print(cmd_ctx, "stellaris mass erase failed");
        }
        
-       command_print(cmd_ctx, "stellaris mass erase complete");
-       
        return ERROR_OK;
 }