u8500: linux rtos config
[openocd.git] / tcl / target / u8500.cfg
1 # Copyright (C) ST-Ericsson SA 2011
2 # Author : michel.jaouen@stericsson.com
3 # U8500 target
4
5 proc mmu_off {} {
6 set cp [arm mrc 15 0 1 0 0]
7 set cp [expr ($cp & ~1)]
8 arm mcr 15 0 1 0 0 $cp
9 }
10
11 proc mmu_on {} {
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
15 }
16
17 proc ocd_gdb_restart {target_id} {
18 global _TARGETNAME_1
19 global _SMP
20 targets $_TARGETNAME_1
21 if { [expr ($_SMP == 1)] } {
22 cortex_a8 smp_off
23 }
24 rst_run
25 halt
26 if { [expr ($_SMP == 1)]} {
27 cortex_a8 smp_on
28 }
29 }
30
31 proc smp_reg {} {
32 global _TARGETNAME_1
33 global _TARGETNAME_2
34 targets $_TARGETNAME_1
35 echo "$_TARGETNAME_1"
36 set pc1 [reg pc]
37 set stck1 [reg sp_svc]
38 targets $_TARGETNAME_2
39 echo "$_TARGETNAME_1"
40 set pc2 [reg pc]
41 set stck2 [reg sp_svc]
42 }
43
44
45 proc u8500_tapenable {chip val} {
46 echo "JTAG tap enable $chip"
47 }
48
49
50 proc pwrsts { } {
51 global _CHIPNAME
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]} {
59 echo "ape off"
60 } else {
61 echo "ape on"
62 }
63 echo "$a9"
64 switch $a9 {
65 4 {
66 echo "A9 in retention"
67 }
68 8 {
69 echo "A9 100% DVFS"
70 }
71 c {
72 echo "A9 50% DVFS"
73 }
74 }
75 }
76
77 proc poll_pwrsts { } {
78 global _CHIPNAME
79 set result 1
80 set i 0
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]} {
91 set result 1
92 } else {
93 set result 0
94 sleep 200
95 echo "loop $i"
96 }
97 incr i
98 }
99 return $result
100 }
101
102 proc halt_ { } {
103 if {[poll_pwrsts]==1} {
104 halt
105 } else {
106 echo "halt failed : target in retention"
107 }
108 }
109
110
111 proc u8500_dapenable {chip} {
112 }
113
114 proc u8500_tapdisable {chip val} {
115 echo "JTAG tap disable $chip"
116 }
117
118
119 proc enable_apetap {} {
120 global _CHIPNAME
121 global _TARGETNAME_2
122 global _TARGETNAME_1
123 poll off
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
135 }
136
137 set status [$_TARGETNAME_2 curstate]
138 if {[string equal "unknown" $status]} {
139 $_TARGETNAME_2 arp_examine
140 }
141 }
142
143 tcl_port 5555
144 telnet_port 4444
145 gdb_port 3333
146
147 if { [info exists CHIPNAME] } {
148 global _CHIPNAME
149 set _CHIPNAME $CHIPNAME
150 } else {
151 global _CHIPNAME
152 set _CHIPNAME u8500
153 }
154
155 if { [info exists ENDIAN] } {
156 set _ENDIAN $ENDIAN
157 } else {
158 # this defaults to a bigendian
159 set _ENDIAN little
160 }
161
162
163
164 # Subsidiary TAP: APE with scan chains for ARM Debug, EmbeddedICE-RT,
165 if { [info exists CPUTAPID] } {
166 set _CPUTAPID $CPUTAPID
167 } else {
168 set _CPUTAPID 0x4ba00477
169 }
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"
175
176
177 #CLTAPC TAP JRC equivalent
178 if { [info exists CLTAPC_ID] } {
179 set _CLTAPC_ID $CLTAPC_ID
180 } else {
181 set _CLTAPC_ID 0x22286041
182 }
183 jtag newtap $_CHIPNAME jrc -irlen 6 -ircapture 0x6 -irmask 0xf -expected-id $_CLTAPC_ID -ignore-version
184
185
186 if { ![info exists TARGETNAME_1] } {
187 global _TARGETNAME_1
188 set _TARGETNAME_1 $_CHIPNAME.cpu1
189 } else {
190 global _TARGETNAME_1
191 set _TARGETNAME_1 $TARGETNAME_1
192 }
193
194 if { [info exists DAP_DBG1] } {
195 set _DAP_DBG1 $DAP_DBG1
196 } else {
197 set _DAP_DBG1 0x801A8000
198 }
199 if { [info exists DAP_DBG2] } {
200 set _DAP_DBG2 $DAP_DBG2
201 } else {
202 set _DAP_DBG2 0x801AA000
203 }
204
205 target create $_TARGETNAME_1 cortex_a8 -chain-position $_CHIPNAME.dap -dbgbase $_DAP_DBG1 -coreid 0 -rtos linux
206
207 $_TARGETNAME_1 configure -event gdb-attach {
208 halt
209 }
210
211
212 if { ![info exists TARGETNAME_2] } {
213 global _TARGETNAME_2
214 set _TARGETNAME_2 $_CHIPNAME.cpu2
215 } else {
216 global _TARGETNAME_2
217 set _TARGETNAME_2 $TARGETNAME_2
218 }
219
220 target create $_TARGETNAME_2 cortex_a8 -chain-position $_CHIPNAME.dap -dbgbase $_DAP_DBG2 -coreid 1 -rtos linux
221
222 $_TARGETNAME_2 configure -event gdb-attach {
223 halt
224 }
225
226
227 if {![info exists SMP]} {
228 global _SMP
229 set _SMP 1
230 } else {
231 global _SMP
232 set _SMP $SMP
233 }
234 global SMP
235 if { $_SMP == 1} {
236 target smp $_CHIPNAME.cpu2 $_CHIPNAME.cpu1
237 }
238
239
240
241
242 proc secsts1 { } {
243 global _CHIPNAME
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"
251 } else {
252 echo "APE target not secured"
253 }
254 }
255
256 proc att { } {
257 global _CHIPNAME
258 jtag arp_init
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} {
266 enable_apetap
267 } else {
268 echo "target in retention"
269 }
270 } else {
271 echo "target secured"
272 }
273
274 }
275
276
277
278 proc rst_run { } {
279 global _CHIPNAME
280 global _TARGETNAME_2
281 global _TARGETNAME_1
282 set status [$_TARGETNAME_1 curstate]
283 if {[string equal "halted" $status]} {
284 resume
285 targets $_TARGETNAME_1
286 }
287 set status [$_TARGETNAME_2 curstate]
288 if {[string equal "halted" $status]} {
289 resume
290 targets $_TARGETNAME_2
291 }
292 poll off
293 jtag arp_init
294 reset
295 sleep 20
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
303 drscan u8500.jrc 4 4
304 set secsts1 [drscan $_CHIPNAME.jrc 16 0]
305 echo "secsts1 ="$secsts1
306 set secsts1 [expr (0x$secsts1 & 0x4)]
307 }
308 echo "ape debugable"
309 enable_apetap
310 poll on
311 targets $_TARGETNAME_1
312 dap apsel 1
313 }
314
315 if {![info exists MAXSPEED]} {
316 global _MAXSPEED
317 set _MAXSPEED 15000
318 } else {
319 global _MAXSPEED
320 set _MAXSPEED $MAXSPEED
321 }
322 global _MAXSPEED
323 adapter_khz $_MAXSPEED
324
325
326 gdb_breakpoint_override hard
327 set mem inaccessible-by-default-off
328
329 jtag_ntrst_delay 100
330 reset_config trst_and_srst combined
331
332

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)