armv7a_mmu: s/LOG_ERROR/LOG_WARNING/ on address translation failure
[fw/openocd] / src / flash / startup.tcl
index b8d280b8e75fb97e100da4c4f0ca19746720a602..ff053ae1b229bc27aa0b52a0795b5f72a70d0ec5 100644 (file)
@@ -3,16 +3,28 @@
 #
 # program utility proc
 # usage: program filename
-# optional args: verify, reset and address
+# optional args: verify, reset, exit and address
 #
 
+proc program_error {description exit} {
+       if {$exit == 1} {
+               echo $description
+               shutdown error
+       }
+
+       error $description
+}
+
 proc program {filename args} {
+       set exit 0
 
        foreach arg $args {
                if {[string equal $arg "verify"]} {
                        set verify 1
                } elseif {[string equal $arg "reset"]} {
                        set reset 1
+               } elseif {[string equal $arg "exit"]} {
+                       set exit 1
                } else {
                        set address $arg
                }
@@ -20,20 +32,17 @@ proc program {filename args} {
 
        # make sure init is called
        if {[catch {init}] != 0} {
-               echo "** OpenOCD init Failed **"
-               shutdown
-               return
+               program_error "** OpenOCD init failed **" 1
        }
 
        # reset target and call any init scripts
        if {[catch {reset init}] != 0} {
-               echo "** Unable to reset target **"
-               shutdown
-               return
+               program_error "** Unable to reset target **" $exit
        }
 
        # start programming phase
        echo "** Programming Started **"
+       set filename \{$filename\}
        if {[info exists address]} {
                set flash_args "$filename $address"
        } else {
@@ -48,27 +57,31 @@ proc program {filename args} {
                        if {[catch {eval verify_image $flash_args}] == 0} {
                                echo "** Verified OK **"
                        } else {
-                               echo "** Verify Failed **"
+                               program_error "** Verify Failed **" $exit
                        }
                }
 
                if {[info exists reset]} {
                        # reset target if requested
-                       # also disable target polling, we are shutting down anyway
-                       poll off
+                       if {$exit == 1} {
+                               # also disable target polling, we are shutting down anyway
+                               poll off
+                       }
                        echo "** Resetting Target **"
                        reset run
                }
        } else {
-               echo "** Programming Failed **"
+               program_error "** Programming Failed **" $exit
        }
 
-       # shutdown OpenOCD
-       shutdown
+       if {$exit == 1} {
+               shutdown
+       }
+       return
 }
 
-add_help_text program "write an image to flash, address is only required for binary images. verify, reset are optional"
-add_usage_text program "<filename> \[address\] \[verify\] \[reset\]"
+add_help_text program "write an image to flash, address is only required for binary images. verify, reset, exit are optional"
+add_usage_text program "<filename> \[address\] \[verify\] \[reset\] \[exit\]"
 
 # stm32f0x uses the same flash driver as the stm32f1x
 # this alias enables the use of either name.