aboutsummaryrefslogtreecommitdiff
path: root/src/flash/startup.tcl
diff options
context:
space:
mode:
authorMoritz 'Morty' Strübe <moritz.struebe@redheads.de>2019-08-29 09:07:06 +0200
committerSpencer Oliver <spen@spen-soft.co.uk>2019-10-15 09:00:45 +0100
commit51ce53d044bc1f60519c0b24c6afe845f66f25e8 (patch)
treeb03af6888c0bde09ed17d1bdbb2d31a8a39452bf /src/flash/startup.tcl
parentb4a7ff291c3636eb5f6aa224476268775aceecad (diff)
downloadriscv-openocd-51ce53d044bc1f60519c0b24c6afe845f66f25e8.zip
riscv-openocd-51ce53d044bc1f60519c0b24c6afe845f66f25e8.tar.gz
riscv-openocd-51ce53d044bc1f60519c0b24c6afe845f66f25e8.tar.bz2
src/flash/startup.tcl: Add preverify to program command
The preverify option allows to check whether flashing is necessary. If the target is flashed often/automatically this can save time and preserve the flash. This is expecially helpful in CI environments. Change-Id: Iead0a269e1a772b751d4dd9e8b53b2fecc874624 Signed-off-by: Moritz 'Morty' Strübe <moritz.struebe@redheads.de> Reviewed-on: http://openocd.zylin.com/5292 Tested-by: jenkins Reviewed-by: Paul Fertser <fercerpav@gmail.com> Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
Diffstat (limited to 'src/flash/startup.tcl')
-rw-r--r--src/flash/startup.tcl74
1 files changed, 46 insertions, 28 deletions
diff --git a/src/flash/startup.tcl b/src/flash/startup.tcl
index ff053ae..de52e20 100644
--- a/src/flash/startup.tcl
+++ b/src/flash/startup.tcl
@@ -17,9 +17,12 @@ proc program_error {description exit} {
proc program {filename args} {
set exit 0
+ set needsflash 1
foreach arg $args {
- if {[string equal $arg "verify"]} {
+ if {[string equal $arg "preverify"]} {
+ set preverify 1
+ } elseif {[string equal $arg "verify"]} {
set verify 1
} elseif {[string equal $arg "reset"]} {
set reset 1
@@ -30,6 +33,15 @@ proc program {filename args} {
}
}
+ # Set variables
+ set filename \{$filename\}
+ if {[info exists address]} {
+ set flash_args "$filename $address"
+ } else {
+ set flash_args "$filename"
+ }
+
+
# make sure init is called
if {[catch {init}] != 0} {
program_error "** OpenOCD init failed **" 1
@@ -40,40 +52,46 @@ proc program {filename args} {
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 {
- set flash_args "$filename"
+ # Check whether programming is needed
+ if {[info exists preverify]} {
+ echo "**pre-verifying**"
+ if {[catch {eval verify_image $flash_args}] == 0} {
+ echo "**Verified OK - No flashing**"
+ set needsflash 0
+ }
}
- if {[catch {eval flash write_image erase $flash_args}] == 0} {
- echo "** Programming Finished **"
- if {[info exists verify]} {
- # verify phase
- echo "** Verify Started **"
- if {[catch {eval verify_image $flash_args}] == 0} {
- echo "** Verified OK **"
- } else {
- program_error "** Verify Failed **" $exit
+ # start programming phase
+ if {$needsflash == 1} {
+ echo "** Programming Started **"
+
+ if {[catch {eval flash write_image erase $flash_args}] == 0} {
+ echo "** Programming Finished **"
+ if {[info exists verify]} {
+ # verify phase
+ echo "** Verify Started **"
+ if {[catch {eval verify_image $flash_args}] == 0} {
+ echo "** Verified OK **"
+ } else {
+ program_error "** Verify Failed **" $exit
+ }
}
+ } else {
+ program_error "** Programming Failed **" $exit
}
+ }
- if {[info exists reset]} {
- # reset target if requested
- if {$exit == 1} {
- # also disable target polling, we are shutting down anyway
- poll off
- }
- echo "** Resetting Target **"
- reset run
+ if {[info exists reset]} {
+ # reset target if requested
+ if {$exit == 1} {
+ # also disable target polling, we are shutting down anyway
+ poll off
}
- } else {
- program_error "** Programming Failed **" $exit
+ echo "** Resetting Target **"
+ reset run
}
+
if {$exit == 1} {
shutdown
}
@@ -81,7 +99,7 @@ proc program {filename args} {
}
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\]"
+add_usage_text program "<filename> \[address\] \[pre-verify\] \[verify\] \[reset\] \[exit\]"
# stm32f0x uses the same flash driver as the stm32f1x
# this alias enables the use of either name.