[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openocd-development
Subject:    [OpenOCD-devel] [PATCH]: ba35208 tcl: introduce init_target_events and use it for gdb flashing event
From:       gerrit () openocd ! zylin ! com
Date:       2014-03-22 12:57:13
Message-ID: 20140322125713.D5D02242CD () openocd ! zylin ! com
[Download RAW message or body]

This is an automated email from Gerrit.

Paul Fertser (fercerpav@gmail.com) just uploaded a new patch set to Gerrit, which you \
can find at http://openocd.zylin.com/2062

-- gerrit

commit ba3520864562f574e00410da697b78760a0eddd5
Author: Paul Fertser <fercerpav@gmail.com>
Date:   Sat Mar 22 16:47:37 2014 +0400

    tcl: introduce init_target_events and use it for gdb flashing events
    
    This introduces a new global Tcl procedure that is run just after
    init_targets and before init_boards.
    
    Its default behaviour is to assign gdb-flash-erase-start and
    gdb-flash-write-end to reasonable defaults.
    
    The rationale for doing "reset init" before gdb erases and flashes
    memory is that all flash drivers are written in assumption that they
    can safely be used only after chip reset (plus chip-specific
    configuration in the init handler if any). The need to use "reset
    halt" after flashing is because a user expects running firmware after
    loading to be the same as running it from power-on-reset.
    
    Change-Id: I9ddc4047611904ca4ca779b73376d2739611948a
    Signed-off-by: Paul Fertser <fercerpav@gmail.com>

diff --git a/doc/openocd.texi b/doc/openocd.texi
index 455e6fb..3977454 100644
--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -2109,6 +2109,17 @@ For an example of this scheme see LPC2000 target config files.
 The @code{init_boards} procedure is a similar concept concerning board config files
 (@xref{theinitboardprocedure,,The init_board procedure}.)
 
+@anchor{theinittargeteventsprocedure}
+@subsection The init_target_events procedure
+@cindex init_target_events procedure
+
+A special procedure called @code{init_target_events} is run just after
+@code{init_targets} (@xref{theinittargetsprocedure,,The init_targets
+procedure}.) and before @code{init_board}
+(@xref{theinitboardprocedure,,The init_board procedure}.) It is used
+to set up default target events for the targets that do not have those
+events already assigned.
+
 @subsection ARM Core Specific Hacks
 
 If the chip has a DCC, enable it. If the chip is an ARM9 with some
@@ -4577,13 +4588,14 @@ depending on whether the breakpoint is in RAM or read only \
memory.  @item @b{gdb-end}
 @* When the target has halted and GDB is not doing anything (see early halt)
 @item @b{gdb-flash-erase-start}
-@* Before the GDB flash process tries to erase the flash
+@* Before the GDB flash process tries to erase the flash (default is
+@code{reset init})
 @item @b{gdb-flash-erase-end}
 @* After the GDB flash process has finished erasing the flash
 @item @b{gdb-flash-write-start}
 @* Before GDB writes to the flash
 @item @b{gdb-flash-write-end}
-@* After GDB writes to the flash
+@* After GDB writes to the flash (default is @code{reset halt})
 @item @b{gdb-start}
 @* Before the target steps, gdb is trying to start/resume the target
 @item @b{halted}
diff --git a/src/target/startup.tcl b/src/target/startup.tcl
index 56fcbaa..033e9c9 100644
--- a/src/target/startup.tcl
+++ b/src/target/startup.tcl
@@ -164,6 +164,21 @@ proc armv4_5 params {
 proc init_targets {} {
 }
 
+proc set_default_target_event {t e s} {
+	if {[$t cget -event $e] == ""} {
+		$t configure -event $e $s
+	}
+}
+
+proc init_target_events {} {
+	set targets [target names]
+
+	foreach t $targets {
+		set_default_target_event $t gdb-flash-erase-start "reset init"
+		set_default_target_event $t gdb-flash-write-end "reset halt"
+	}
+}
+
 # Additionally board config scripts can define a procedure init_board that will be \
executed after init and init_targets  proc init_board {} {
 }
diff --git a/src/target/target.c b/src/target/target.c
index c09dfd8..4c15fb0 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -1274,6 +1274,10 @@ COMMAND_HANDLER(handle_target_init_command)
 	if (ERROR_OK != retval)
 		return retval;
 
+	retval = command_run_line(CMD_CTX, "init_target_events");
+	if (ERROR_OK != retval)
+		return retval;
+
 	retval = command_run_line(CMD_CTX, "init_board");
 	if (ERROR_OK != retval)
 		return retval;

-- 

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
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