[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