Øyvind Harboe wrote: > Sounds good to me. > Let me back up a few steps here.
There is a *SIMPLE* way to do this in TCL - it requires a couple *SIMPLE* things be done. {See below} ================================= The original purpose of the "-expected-id" was to print a big-nasty warning if the TAP id did not match. Why did I add this? Because there was a *SLEW* of people trying to figure out how to setup the taps and new boards and stuff. We release new versions of OpenOCD - people try something - blah blah blah - there is no standardized config script schema or and method. This was a message to make the user go "OOH THAT DOES NOT LOOK RIGHT" - perhaps that is my problem! Hence, if the expected id is ZERO - nothing happens. ================================= Perhaps: "-expected-id" was a bad choice of names. Maybe, "-one-possible-valid-id" would have been better a choice. For example - today - the code does *NOT* ignore Tap VERSION numbers (the high nibble). And that is problematic - the AT91RM9200 - has tapid version 0 for the "arm debug config" and tap version number 1 - for the "boundary scan mode". So - obviously masking and ignoring the TAP VERSION is not going to help. We specifically almost need a "-disallow-this-tap-id" in some cases :-( boo hiss boo hiss. ================================= I think the idea of supporting *MULTIPLE* "-expected-id" parameters is a good thing. (ie: an array of tap ids in the C code). It is a *SMALL* and reasonable price to pay. ================================== Here is the *SIMPLE* thing that needs to happen. (1) There needs to be a new target event. This event should happen when all taps have been "re-id" aka: when the chain is validated. Adding an event is really super easy. target.h - there is an enum to add to target.c - there is a Jim_Nvp to add to. (2) At the end of the function: jtag_examine_chain() - you need to call this function: target_all_handle_event( YOUR_NEW_EVENT_ENUM ); (3) Lastly - there needs to be a single new TCL sub command. We need a command that works like this: Given a TAPNAME - what is the TAPID that was discovered? For example: set foo [jtag tapidof MYTAPNAME] puts [format "The tap id is: 0x%08x" $foo] To add the above see: "jtag.c" - function: 'jim_jtag_command()" There is a table of sub commands. There is a enumeration of commands. And a switch statement to add the command into. And an example is the "JTAG_CMD_ISENABLED" Instead of returning 0/1 - you return the TAP ID. ================================================ Then, one could easily do this: [which has a bug in it...but is easy to fix. keep reading... $_TARGETNAME configure --event jtag-verify-tapid { set tapname [$_TARGETNAME cget -chain-position] # WHAT IS MISSING IS THIS COMMAND # it takes the TAPNAME - and returns the TAPID. set cur_tapid [ jtag tapidof $tapname ] if { $cur_tapid == 0x12345678 } { # GOOD TAP return; } if { $cur_tapid == 0x87654321 } { puts "**WARNING** THIS I NOT THE CHIP YOU ARE LOOKING FOR" puts "You have the jumper configured wrong it will not work in this config" return; } puts [format "Unknown tap id 0x%08x - Maybe you have a new chip?" $cur_tapid] return; } So - what is the bug? In the above, in the eventbody ... it uses "$_TARGETNAME" as the target name, See: section 22.6.3 - BODY OR INLINE TEXT , item #1 in the description. A 'hazard' one must be able to work around. On a single target system - you will never find hit bug. On a MULTIPLE GDB TARGET system - you would find this bug. =================== Patches are welcome! -Duane. _______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development