Hello Øyvind,

I have a sample target config file attached with your suggestions.  The config
file was tested with the Atheros reference design "PB44".  The testing included
a test with no bootloader.  With a running bootloader the PLL and DDR may be
setup at power-up and before the cpu is halted by the debugger.

I used the floowing commandline for my test:
>openocd -f interface/olimex-jtag-tiny.cfg -f ./ar71xx.cfg

And here is the successful image_load command:
> telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> load_image /tftpboot/mips/ar7/redboot-ram.bin 0xa0500000
mips32_pracc_fastdata_xfer using 0xa0600000 for write handler

254216 byte written at address 0xa0500000
downloaded 254216 byte in 2.620105s
>

- David

Øyvind Harboe wrote:
> Would you mind contributing this script to the OpenOCD target library?
> 
> Your explanations in this email would then be a comment inside
> this config script.
> 
> Note that you do not need a separate file for the reset init sequence,
> you can include it directly in a single config file, search for examples
> on this in other config files shipped with OpenOCD
> 
> Also, it is good form to split out the interface and target config script
> in separate files. You can specify multiple config file son the openocd
> command line:
> 
> openocd -f interface/xxx.cfg -f board/ar71xx.cfg
> 
> 
> 
Index: tcl/target/ar71xx.cfg
===================================================================
--- tcl/target/ar71xx.cfg	(revision 0)
+++ tcl/target/ar71xx.cfg	(revision 0)
@@ -0,0 +1,58 @@
+# Atheros AR71xx MIPS 24Kc SoC.
+# tested on PB44 refererence board
+
+jtag_nsrst_delay 100
+jtag_ntrst_delay 100
+
+reset_config trst_and_srst
+
+set CHIPNAME ar71xx
+
+jtag newtap $CHIPNAME cpu -irlen 5 -ircapture 0x1 -irmask 0x1f -expected-id 1
+
+set TARGETNAME [format "%s.cpu" $CHIPNAME]
+target create $TARGETNAME mips_m4k -endian big -chain-position $TARGETNAME
+
+$TARGETNAME configure -event reset-init {
+	#setup PLL to lowest common denominator 300/300/150 setting
+	mww 0xb8050000 0x000f40a3	# reset val + CPU:3 DDR:3 AHB:0
+	mww 0xb8050000 0x800f40a3	# send to PLL
+
+	#next command will reset for PLL changes to take effect
+	mww 0xb8050008 3		# set reset_switch and clock_switch (resets SoC)
+	reset halt     			# let openocd know that it is in the reset state
+
+	#initialize_pll
+	mww 0xb8050000 0x800f0080	# set sw_update bit
+	mww 0xb8050008 0		# clear reset_switch bit
+	mww 0xb8050000 0x800f00e8       # clr pwrdwn & bypass
+	mww 0xb8050008 1		# set clock_switch bit
+	sleep 1                         # wait for lock
+	
+	# Setup DDR config and flash mapping
+	mww 0xb8000000 0xefbc8cd0       # DDR cfg cdl val (rst: 0x5bfc8d0)
+	mww 0xb8000004 0x8e7156a2       # DDR cfg2 cdl val (rst: 0x80d106a8)
+	
+	mww 0xb8000010 8		# force precharge all banks
+	mww 0xb8000010 1 		# force EMRS update cycle
+	mww 0xb800000c 0                # clr ext. mode register
+	mww 0xb8000010 2 		# force auto refresh all banks
+	mww 0xb8000010 8		# force precharge all banks
+	mww 0xb8000008 0x31             # set DDR mode value CAS=3
+	mww 0xb8000010 1 		# force EMRS update cycle
+	mww 0xb8000014 0x461b           # DDR refresh value
+	mww 0xb8000018 0xffff           # DDR Read Data This Cycle value (16bit: 0xffff)
+	mww 0xb800001c 0x7              # delay added to the DQS line (normal = 7)
+	mww 0xb8000020 0
+	mww 0xb8000024 0
+	mww 0xb8000028 0
+}	
+
+# setup working area somewhere in RAM
+$TARGETNAME configure -work-area-phys 0xa0600000 -work-area-size 0x20000
+
+# serial SPI capable flash
+# flash bank <driver> <base> <size> <chip_width> <bus_width>
+
+init
+reset init
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to