1 # Copyright (C) ST-Ericsson SA 2011
2 # Author : michel.jaouen@stericsson.com
6 set cp [arm mrc 15 0 1 0 0]
7 set cp [expr ($cp & ~1)]
12 set cp [arm mrc 15 0 1 0 0]
13 set cp [expr ($cp | 1)]
14 arm mcr 15 0 1 0 0 $cp
17 proc ocd_gdb_restart {target_id} {
20 targets $_TARGETNAME_1
21 if { [expr ($_SMP == 1)] } {
26 if { [expr ($_SMP == 1)]} {
34 targets $_TARGETNAME_1
37 set stck1 [reg sp_svc]
38 targets $_TARGETNAME_2
41 set stck2 [reg sp_svc]
45 proc u8500_tapenable {chip val} {
46 echo "JTAG tap enable $chip"
52 irscan $_CHIPNAME.jrc 0x3a
53 drscan $_CHIPNAME.jrc 4 0
54 set pwrsts [drscan $_CHIPNAME.jrc 16 0]
55 echo "pwrsts ="$pwrsts
56 set a9 [expr (0x$pwrsts & 0xc)]
57 set ape [expr (0x$pwrsts & 0x3)]
58 if {[string equal "0" $ape]} {
66 echo "A9 in retention"
77 proc poll_pwrsts { } {
81 irscan $_CHIPNAME.jrc 0x3a
82 drscan $_CHIPNAME.jrc 4 0
83 set pwrsts [drscan $_CHIPNAME.jrc 16 0]
84 set pwrsts [expr (0x$pwrsts & 0xc)]
85 while {[string equal "4" $pwrsts] && $i<20} {
86 irscan $_CHIPNAME.jrc 0x3a
87 drscan $_CHIPNAME.jrc 4 0;
88 set pwrsts [drscan $_CHIPNAME.jrc 16 0]
89 set pwrsts [expr (0x$pwrsts & 0xc)]
90 if {![string equal "4" $pwrsts]} {
103 if {[poll_pwrsts]==1} {
106 echo "halt failed : target in retention"
111 proc u8500_dapenable {chip} {
114 proc u8500_tapdisable {chip val} {
115 echo "JTAG tap disable $chip"
119 proc enable_apetap {} {
124 irscan $_CHIPNAME.jrc 0x3e
125 drscan $_CHIPNAME.jrc 8 0xcf
126 jtag tapenable $_CHIPNAME.dap
127 irscan $_CHIPNAME.jrc 0x6
128 drscan $_CHIPNAME.jrc 32 0
129 irscan $_CHIPNAME.jrc 0x6
130 drscan $_CHIPNAME.jrc 32 0
131 set status [$_TARGETNAME_1 curstate]
132 if {[string equal "unknown" $status]} {
133 $_TARGETNAME_1 arp_examine
134 cache_config l2x 0xa0412000 8
137 set status [$_TARGETNAME_2 curstate]
138 if {[string equal "unknown" $status]} {
139 $_TARGETNAME_2 arp_examine
147 if { [info exists CHIPNAME] } {
149 set _CHIPNAME $CHIPNAME
155 if { [info exists ENDIAN] } {
158 # this defaults to a bigendian
164 # Subsidiary TAP: APE with scan chains for ARM Debug, EmbeddedICE-RT,
165 if { [info exists CPUTAPID] } {
166 set _CPUTAPID $CPUTAPID
168 set _CPUTAPID 0x4ba00477
170 jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0xe -irmask 0xf -expected-id $_CPUTAPID -disable
171 jtag configure $_CHIPNAME.cpu -event tap-enable \
172 "u8500_dapenable $_CHIPNAME.cpu"
173 jtag configure $_CHIPNAME.cpu -event tap-disable \
174 "u8500_tapdisable $_CHIPNAME.cpu 0xc0"
177 #CLTAPC TAP JRC equivalent
178 if { [info exists CLTAPC_ID] } {
179 set _CLTAPC_ID $CLTAPC_ID
181 set _CLTAPC_ID 0x22286041
183 jtag newtap $_CHIPNAME jrc -irlen 6 -ircapture 0x6 -irmask 0xf -expected-id $_CLTAPC_ID -ignore-version
186 if { ![info exists TARGETNAME_1] } {
188 set _TARGETNAME_1 $_CHIPNAME.cpu1
191 set _TARGETNAME_1 $TARGETNAME_1
194 if { [info exists DAP_DBG1] } {
195 set _DAP_DBG1 $DAP_DBG1
197 set _DAP_DBG1 0x801A8000
199 if { [info exists DAP_DBG2] } {
200 set _DAP_DBG2 $DAP_DBG2
202 set _DAP_DBG2 0x801AA000
205 dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
207 target create $_TARGETNAME_1 cortex_a -dap $_CHIPNAME.dap -dbgbase $_DAP_DBG1 -coreid 0 -rtos linux
209 $_TARGETNAME_1 configure -event gdb-attach {
214 if { ![info exists TARGETNAME_2] } {
216 set _TARGETNAME_2 $_CHIPNAME.cpu2
219 set _TARGETNAME_2 $TARGETNAME_2
222 target create $_TARGETNAME_2 cortex_a -dap $_CHIPNAME.dap -dbgbase $_DAP_DBG2 -coreid 1 -rtos linux
224 $_TARGETNAME_2 configure -event gdb-attach {
229 if {![info exists SMP]} {
238 target smp $_CHIPNAME.cpu2 $_CHIPNAME.cpu1
246 irscan $_CHIPNAME.jrc 0x3a
247 drscan $_CHIPNAME.jrc 4 4
248 set secsts1 [drscan $_CHIPNAME.jrc 16 0]
249 echo "secsts1 ="$secsts1
250 set secsts1 [expr (0x$secsts1 & 0x4)]
251 if {![string equal "4" $secsts1]} {
252 echo "APE target secured"
254 echo "APE target not secured"
261 irscan $_CHIPNAME.jrc 0x3a
262 drscan $_CHIPNAME.jrc 4 4
263 set secsts1 [drscan $_CHIPNAME.jrc 16 0]
264 echo "secsts1 ="$secsts1
265 set secsts1 [expr (0x$secsts1 & 0x4)]
266 if {[string equal "4" $secsts1]} {
267 if {[poll_pwrsts]==1} {
270 echo "target in retention"
273 echo "target secured"
284 set status [$_TARGETNAME_1 curstate]
285 if {[string equal "halted" $status]} {
287 targets $_TARGETNAME_1
289 set status [$_TARGETNAME_2 curstate]
290 if {[string equal "halted" $status]} {
292 targets $_TARGETNAME_2
298 irscan $_CHIPNAME.jrc 0x3a
299 drscan $_CHIPNAME.jrc 4 4
300 set secsts1 [drscan $_CHIPNAME.jrc 16 0]
301 echo "secsts1 ="$secsts1
302 set secsts1 [expr (0x$secsts1 & 0x4)]
303 while {![string equal "4" $secsts1]} {
304 irscan u8500.jrc 0x3a
306 set secsts1 [drscan $_CHIPNAME.jrc 16 0]
307 echo "secsts1 ="$secsts1
308 set secsts1 [expr (0x$secsts1 & 0x4)]
313 targets $_TARGETNAME_1
317 if {![info exists MAXSPEED]} {
322 set _MAXSPEED $MAXSPEED
325 adapter_khz $_MAXSPEED
328 gdb_breakpoint_override hard
329 set mem inaccessible-by-default-off
332 reset_config trst_and_srst combined