if (retval != ERROR_OK)
                return retval;
 
+       /* ETM on ARM11 still uses original scanchain 6 access mode */
+       if (arm11->arm.etm && !target_was_examined(target)) {
+               *register_get_last_cache_p(&target->reg_cache) =
+                       etm_build_reg_cache(target, &arm11->jtag_info,
+                                       arm11->arm.etm);
+               retval = etm_setup(target);
+       }
+
+       /* FIXME this sets a flag in the (shared) arm11_target structure,
+        * not in the (per-cpu) "target" structure ... so it's clearly
+        * wrong in the case of e.g. two different ARM11 chips on the
+        * same board.  (Maybe ARM11 MPCore works though.)  Whoever calls
+        * the examine() method should set a target-specific flag...
+        */
        target_set_examined(target);
 
        return ERROR_OK;
                        arm11_handle_vcr, COMMAND_ANY,
                        "Control (Interrupt) Vector Catch Register");
 
-       return ERROR_OK;
+       return etm_register_commands(cmd_ctx);
 }
 
 
 proc power_restore {} { puts "Sensed power restore. No action." }
 proc srst_deasserted {} { puts "Sensed nSRST deasserted. No action." }
+
+# trace setup ... NOTE, "normal full" mode fudges the real ETMv3.1 mode
+etm config $_TARGETNAME 16 normal full etb
+etb config $_TARGETNAME $_CHIPNAME.etb
 
 
 proc power_restore {} { puts "Sensed power restore. No action." }
 proc srst_deasserted {} { puts "Sensed nSRST deasserted. No action." }
+
+# trace setup ... NOTE, "normal full" mode fudges the real ETMv3.1 mode
+etm config $_TARGETNAME 16 normal full etb
+etb config $_TARGETNAME $_CHIPNAME.etb
 
 $_TARGETNAME configure -work-area-size 0x00081000
 $_TARGETNAME configure -work-area-backup 0
 
-# trace setup
-# REVISIT ... as of 12-June-2009, OpenOCD's ETM code can't talk to ARM11 cores.
-#etm config $_TARGETNAME 16 normal full etb
-#etb config $_TARGETNAME $_CHIPNAME.etb
+# trace setup ... NOTE, "normal full" mode fudges the real ETMv3.1 mode
+etm config $_TARGETNAME 16 normal full etb
+etb config $_TARGETNAME $_CHIPNAME.etb
 
 
 #reset configuration
 reset_config trst_and_srst
+
+# trace setup ... NOTE, "normal full" mode fudges the real ETMv3.1 mode
+etm config $_TARGETNAME 16 normal full etb
+etb config $_TARGETNAME $_CHIPNAME.etb