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 dap -irlen 4 -ircapture 0xe -irmask 0xf -expected-id $_CPUTAPID -disable
171 jtag configure $_CHIPNAME.dap -event tap-enable \
172 "u8500_dapenable $_CHIPNAME.dap"
173 jtag configure $_CHIPNAME.dap -event tap-disable \
174 "u8500_tapdisable $_CHIPNAME.dap 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 target create $_TARGETNAME_1 cortex_a8 -chain-position $_CHIPNAME.dap -dbgbase $_DAP_DBG1 -coreid 0
207 $_TARGETNAME_1 configure -event gdb-attach {
212 if { ![info exists TARGETNAME_2] } {
214 set _TARGETNAME_2 $_CHIPNAME.cpu2
217 set _TARGETNAME_2 $TARGETNAME_2
220 target create $_TARGETNAME_2 cortex_a8 -chain-position $_CHIPNAME.dap -dbgbase $_DAP_DBG2 -coreid 1
222 $_TARGETNAME_2 configure -event gdb-attach {
227 if {![info exists SMP]} {
236 target smp $_CHIPNAME.cpu2 $_CHIPNAME.cpu1
244 irscan $_CHIPNAME.jrc 0x3a
245 drscan $_CHIPNAME.jrc 4 4
246 set secsts1 [drscan $_CHIPNAME.jrc 16 0]
247 echo "secsts1 ="$secsts1
248 set secsts1 [expr (0x$secsts1 & 0x4)]
249 if {![string equal "4" $secsts1]} {
250 echo "APE target secured"
252 echo "APE target not secured"
259 irscan $_CHIPNAME.jrc 0x3a
260 drscan $_CHIPNAME.jrc 4 4
261 set secsts1 [drscan $_CHIPNAME.jrc 16 0]
262 echo "secsts1 ="$secsts1
263 set secsts1 [expr (0x$secsts1 & 0x4)]
264 if {[string equal "4" $secsts1]} {
265 if {[poll_pwrsts]==1} {
268 echo "target in retention"
271 echo "target secured"
282 set status [$_TARGETNAME_1 curstate]
283 if {[string equal "halted" $status]} {
285 targets $_TARGETNAME_1
287 set status [$_TARGETNAME_2 curstate]
288 if {[string equal "halted" $status]} {
290 targets $_TARGETNAME_2
296 irscan $_CHIPNAME.jrc 0x3a
297 drscan $_CHIPNAME.jrc 4 4
298 set secsts1 [drscan $_CHIPNAME.jrc 16 0]
299 echo "secsts1 ="$secsts1
300 set secsts1 [expr (0x$secsts1 & 0x4)]
301 while {![string equal "4" $secsts1]} {
302 irscan u8500.jrc 0x3a
304 set secsts1 [drscan $_CHIPNAME.jrc 16 0]
305 echo "secsts1 ="$secsts1
306 set secsts1 [expr (0x$secsts1 & 0x4)]
311 targets $_TARGETNAME_1
315 if {![info exists MAXSPEED]} {
320 set _MAXSPEED $MAXSPEED
323 adapter_khz $_MAXSPEED
326 gdb_breakpoint_override hard
327 set mem inaccessible-by-default-off
330 reset_config trst_and_srst combined