diff --git a/doc/openocd.texi b/doc/openocd.texi
index fd4f9f7f68bdabd34d5821a33fa87ff126dbd8f8..6d33d56a939599a1499b73cde759f8c8f82a3f7c 100644
--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -2221,6 +2221,12 @@ needing to cope with both architecture and board specific constraints.
 
 @section Commands for Handling Resets
 
+@deffn {Command} jtag_nsrst_assert_width milliseconds
+Minimum amount of time (in milliseconds) OpenOCD should wait
+after asserting nSRST (active-low system reset) before
+allowing it to be deasserted.
+@end deffn
+
 @deffn {Command} jtag_nsrst_delay milliseconds
 How long (in milliseconds) OpenOCD should wait after deasserting
 nSRST (active-low system reset) before starting new JTAG operations.
@@ -2228,6 +2234,12 @@ When a board has a reset button connected to SRST line it will
 probably have hardware debouncing, implying you should use this.
 @end deffn
 
+@deffn {Command} jtag_ntrst_assert_width milliseconds
+Minimum amount of time (in milliseconds) OpenOCD should wait
+after asserting nTRST (active-low JTAG TAP reset) before
+allowing it to be deasserted.
+@end deffn
+
 @deffn {Command} jtag_ntrst_delay milliseconds
 How long (in milliseconds) OpenOCD should wait after deasserting
 nTRST (active-low JTAG TAP reset) before starting new JTAG operations.
@@ -6075,6 +6087,15 @@ TAP @code{post-reset} events are delivered to all TAPs
 with handlers for that event.
 @end deffn
 
+@deffn Command {pathmove} start_state [next_state ...]
+Start by moving to @var{start_state}, which
+must be one of the @emph{stable} states.
+Then, in a series of single state transitions
+(conforming to the JTAG state machine) shift to
+each @var{next_state} in sequence, one per TCK cycle.
+The final state must also be stable.
+@end deffn
+
 @deffn Command {runtest} @var{num_cycles}
 Move to the @sc{run/idle} state, and execute at least
 @var{num_cycles} of the JTAG clock (TCK).
@@ -6102,23 +6123,30 @@ Default is enabled.
 @cindex TAP state names
 
 The @var{tap_state} names used by OpenOCD in the @command{drscan},
-and @command{irscan} commands are:
+@command{irscan}, and @command{pathmove} commands are the same
+as those used in SVF boundary scan documents, except that some
+versions of SVF use @sc{idle} instead of @sc{run/idle}.
 
 @itemize @bullet
-@item @b{RESET} ... acts as if TRST were pulsed
-@item @b{RUN/IDLE} ... don't assume this always means IDLE
+@item @b{RESET} ... @emph{stable} (with TMS high);
+acts as if TRST were pulsed
+@item @b{RUN/IDLE} ... @emph{stable}; don't assume this always means IDLE
 @item @b{DRSELECT}
 @item @b{DRCAPTURE}
-@item @b{DRSHIFT} ... TDI/TDO shifting through the data register
+@item @b{DRSHIFT} ... @emph{stable}; TDI/TDO shifting
+through the data register
 @item @b{DREXIT1}
-@item @b{DRPAUSE} ... data register ready for update or more shifting
+@item @b{DRPAUSE} ... @emph{stable}; data register ready
+for update or more shifting
 @item @b{DREXIT2}
 @item @b{DRUPDATE}
 @item @b{IRSELECT}
 @item @b{IRCAPTURE}
-@item @b{IRSHIFT} ... TDI/TDO shifting through the instruction register
+@item @b{IRSHIFT} ... @emph{stable}; TDI/TDO shifting
+through the instruction register
 @item @b{IREXIT1}
-@item @b{IRPAUSE} ... instruction register ready for update or more shifting
+@item @b{IRPAUSE} ... @emph{stable}; instruction register ready
+for update or more shifting
 @item @b{IREXIT2}
 @item @b{IRUPDATE}
 @end itemize
diff --git a/src/helper/startup.tcl b/src/helper/startup.tcl
index b12d02bbe8ebd84719e3872c4c49195eedd58e5c..2c909729f5a70b8d4fec796cf2046285a51aeea3 100644
--- a/src/helper/startup.tcl
+++ b/src/helper/startup.tcl
@@ -291,59 +291,10 @@ proc ocd_process_reset_inner { MODE } {
 	}
 }
 
-# stubs for targets scripts that do not have production procedure
-proc production_info {} {
-	return "Imagine an explanation here..."
-}
-add_help_text production_info "Displays information on production procedure for target script. Implement this procedure in target script."
-
-proc production {firmwarefile serialnumber} {
-	puts "Imagine production procedure running successfully. Programmed $firmwarefile with serial number $serialnumber"
-}
-
-add_help_text production "<serialnumber> - Runs production procedure. Throws exception if procedure failed. Prints progress messages. Implement this procedure in the target script."
-
-proc production_test {} {
-	puts "Imagine nifty test procedure having run to completion here."
-}
-add_help_text production_test "Runs test procedure. Throws exception if procedure failed. Prints progress messages. Implement in target script."
-
-add_help_text cpu "<name> - prints out target options and a comment on CPU which matches name"
-
-# A list of names of CPU and options required
-set ocd_cpu_list {
-	{
-		name IXP42x
-		options {xscale -variant IXP42x}
-		comment {IXP42x cpu}
-	}
-	{
-		name arm7
-		options {arm7tdmi -variant arm7tdmi}
-		comment {vanilla ARM7}
-	}
-}
-
-# Invoked from Tcl code
-proc ocd_cpu {args} {
-	set name $args
-	set result ""
-	global ocd_cpu_list
-	foreach a [lsort $ocd_cpu_list] {
-		if {[string length $args]==0||[string first [string toupper $name] [string toupper "$a(name)$a(options)$a(comment)"]]!=-1} {
-			lappend result $a
-		}
-	}
-	return $result
-}
+#########
 
-proc cpu {args} {
-    #     0123456789012345678901234567890123456789012345678901234567890123456789
-	puts "CPU                 Options                                 Comment"
-	foreach a [lsort [ocd_cpu $args]] {
-		puts [format "%-20s%-40s%s" $a(name) $a(options) $a(comment)]
-	}
-}
+# REVISIT power_restore, power_dropout, srst_deasserted, srst_asserted
+# are currently neither documented nor supported except on ZY1000.
 
 proc power_restore {} {
 	puts "Sensed power restore."
@@ -366,6 +317,8 @@ proc srst_asserted {} {
 	puts "Sensed nSRST asserted."
 }
 
+#########
+
 # catch any exceptions, capture output and return output
 proc capture_catch {a} {
 	catch {