[prev in list] [next in list] [prev in thread] [next in thread]
List: openocd-development
Subject: [OpenOCD-devel] [PATCH]: 842e3d3 Add preverify to program command
From: gerrit () openocd ! org (gerrit)
Date: 2019-08-29 7:19:35
Message-ID: 20190829071935.C84382522570 () mail ! openocd ! org
[Download RAW message or body]
This is an automated email from Gerrit.
Moritz 'Morty' Strübe (moritz.struebe@redheads.de) just uploaded a new patch set to \
Gerrit, which you can find at http://openocd.zylin.com/5292
-- gerrit
commit 842e3d37f324224bfd515232c6fd9e5dd44bb4cb
Author: Moritz 'Morty' Strübe <moritz.struebe@redheads.de>
Date: Thu Aug 29 09:07:06 2019 +0200
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>
diff --git a/doc/openocd.texi b/doc/openocd.texi
index 9490f88..318a2ce 100644
--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -5124,7 +5124,7 @@ command or the flash driver then it defaults to 0xff.
@end deffn
@anchor{program}
-@deffn Command {program} filename [verify] [reset] [exit] [offset]
+@deffn Command {program} filename [preverify] [verify] [reset] [exit] [offset]
This is a helper script that simplifies using OpenOCD as a standalone
programmer. The only required parameter is @option{filename}, the others are \
optional. @xref{Flash Programming}.
@@ -7497,6 +7497,7 @@ The script is executed as follows and by default the following \
actions will be p @item 'init' is executed.
@item 'reset init' is called to reset and halt the target, any 'reset init' scripts \
are executed. @item @code{flash write_image} is called to erase and write any flash \
using the filename given. +@item If the @option{preverify} parameter is given, the \
target is "verified" first and only flashed if this fails. @item @code{verify_image} \
is called if @option{verify} parameter is given. @item @code{reset run} is called if \
@option{reset} parameter is given. @item OpenOCD is shutdown if @option{exit} \
parameter is given.
diff --git a/src/flash/startup.tcl b/src/flash/startup.tcl
index ff053ae..316b707 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
@@ -29,6 +32,15 @@ proc program {filename args} {
set address $arg
}
}
+
+ # 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} {
@@ -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.
--
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic