]> git.wh0rd.org - home.git/blame - .gdbinit
pinentry: switch to x11 as gtk-2 is dead
[home.git] / .gdbinit
CommitLineData
c58bbcfb
MF
1#
2# Base settings
3#
4
5b61754d
MF
5set print pretty on
6set prompt \e[30;1m(\e[34;1mgdb\e[30;1m)\e[0m
7set history save on
8set pagination off
9set output-radix 16
10set remotetimeout 300
d24159b0
MF
11#handle SIGINT nostop noprint pass
12#handle SIGQUIT stop print nopass
5b61754d
MF
13#catch fork
14#catch vfork
15
c58bbcfb
MF
16
17#
18# Random helpers.
19#
20
5b61754d
MF
21define exit
22 quit
23end
24
5b61754d
MF
25define jtag
26 target remote localhost:2000
27end
b41bdf2b
MF
28define kgdboc
29 set remotebaud 57600
30 if $argc == 0
31 target remote /dev/ttyS0
32 else
33 target remote /dev/tty$arg0
34 end
35end
36define kgdbocusb
37 kgdboc USB0
38end
39define kgdboe
40 target remote udp:bfin:6443
41end
22898076
MF
42define vapier
43 target remote vapier:2000
44end
5b61754d
MF
45define bfin
46 target remote bfin:1234
47end
48
1bcd182d 49define di
5b61754d
MF
50 if $argc == 0
51 disassemble $pc ($pc + 0x40)
52 end
53 if $argc == 1
54 disassemble $arg0 ($arg0 + 0x40)
55 end
56end
1bcd182d
MF
57define dis
58 if $argc == 0
59 disassemble $pc,+0x40
60 end
61 if $argc == 1
62 disassemble $arg0,+0x40
63 end
64end
63d15f58
MF
65define go
66 jump *$arg0
67end
5b61754d 68
c58bbcfb
MF
69
70#
71# Misc Blackfin helper functions
72#
73
74define regs
75 printf "R0: %08x %-11i P0: %08x RETS: %08x LC0: %08x %u\n", $r0, $r0, $p0, $rets, $lc0, $lc0
76 printf "R1: %08x %-11i P1: %08x RETI: %08x LT0: %08x\n", $r1, $r1, $p1, $reti, $lt0
77 printf "R2: %08x %-11i P2: %08x RETX: %08x LB0: %08x\n", $r2, $r2, $p2, $retx, $lb0
78 printf "R3: %08x %-11i P3: %08x RETE: %08x LC1: %08x %u\n", $r3, $r3, $p3, $rete, $lc1, $lc1
79 printf "R4: %08x %-11i P4: %08x RETN: %08x LT1: %08x\n", $r4, $r4, $p4, $retn, $lt1
80 printf "R5: %08x %-11i P5: %08x ASTAT: %08x LB1: %08x\n", $r5, $r5, $p5, $astat, $lb1
81 printf "R6: %08x %-11i SP: %08x CC: %08x\n", $r6, $r6, $sp, $cc
82 printf "R7: %08x %-11i USP: %08x CYC1: %08x SEQSTAT: %08x\n", $r7, $r7, $usp, $cycles, $seqstat
83 printf "PC: %08x FP: %08x CYC2: %08x SYSCFG: %08x\n", $pc, $fp, $cycles2, $syscfg
84end
85document regs
86Usage: regs
87Display the common core registers in a compact format.
88end
89
90define all_regs
91 regs
92 printf " B0 : %08x L0 : %08x M0 : %08x I0 : %08x\n", $b0, $l0, $m0, $i0
93 printf " B1 : %08x L1 : %08x M1 : %08x I1 : %08x\n", $b1, $l1, $m1, $i1
94 printf " B2 : %08x L2 : %08x M2 : %08x I2 : %08x\n", $b2, $l2, $m2, $i2
95 printf " B3 : %08x L3 : %08x M3 : %08x I3 : %08x\n", $b3, $l3, $m3, $i3
96 printf "A0.w: %08x A0.x: %08x A1.w: %08x A1.x: %08x\n", $a0w, $a0x, $a1w, $a1x
97end
98document all_regs
99Usage: all_regs
100Display all core registers in a compact format.
101end
102
103define astat
104 printf "ASTAT: %#x ( ", $astat
105 if $astat & (1 << 25)
106 printf "VS "
107 end
108 if $astat & (1 << 24)
109 printf "V "
110 end
111 if $astat & (1 << 19)
112 printf "AV1S "
113 end
114 if $astat & (1 << 18)
115 printf "AV1 "
116 end
117 if $astat & (1 << 17)
118 printf "AV0S "
119 end
120 if $astat & (1 << 16)
121 printf "AV0 "
122 end
123 if $astat & (1 << 13)
124 printf "AC1 "
125 end
126 if $astat & (1 << 12)
127 printf "AC0 "
128 end
129 if $astat & (1 << 8)
130 printf "RND_MOD "
131 end
132 if $astat & (1 << 6)
133 printf "AQ "
134 end
135 if $astat & (1 << 5)
136 printf "CC "
137 end
138 if $astat & (1 << 3)
139 printf "V_COPY "
140 end
141 if $astat & (1 << 2)
142 printf "AC0_COPY "
143 end
144 if $astat & (1 << 1)
145 printf "AN "
146 end
147 if $astat & (1 << 0)
148 printf "AZ "
149 end
150 printf ")\n"
151 set $$inv = $astat & 0xfcf0ce90
152 if $$inv
153 printf "Invalid bits: %#x\n", $$inv
154 end
155end
156
157define seqstat
158 if $argc == 1
159 set $$seqstat = $arg0
160 else
161 set $$seqstat = $seqstat
162 end
163 set $$excause = ($$seqstat & 0x3f)
164 set $$sftreset = ($$seqstat & (0x1 << 13)) >> 13
165 set $$hwerrcause = ($$seqstat & (0x1f << 14)) >> 14
166 printf "SEQSTAT: %08x\n", $$seqstat
167 printf " EXCAUSE: 0x%x\t", $$excause
168 if $$excause >= 0x0 && $$excause <= 0xf
169 printf "(custom exception)"
170 end
171 if $$excause == 0x10
172 printf "(single step)"
173 end
174 if $$excause == 0x11
175 printf "(trace buffer full)"
176 end
177 if $$excause == 0x21
178 printf "(undef inst)"
179 end
180 if $$excause == 0x22
181 printf "(illegal inst)"
182 end
183 if $$excause == 0x23
184 printf "(dcplb prot violation)"
185 end
186 if $$excause == 0x24
187 printf "(misaligned data)"
188 end
189 if $$excause == 0x25
190 printf "(unrecoverable event)"
191 end
192 if $$excause == 0x26
193 printf "(dcplb miss)"
194 end
195 if $$excause == 0x27
196 printf "(multiple dcplb hit)"
197 end
198 if $$excause == 0x28
199 printf "(emulation watchpoint)"
200 end
201 if $$excause == 0x2a
202 printf "(misaligned inst)"
203 end
204 if $$excause == 0x2b
205 printf "(icplb prot violation)"
206 end
207 if $$excause == 0x2c
208 printf "(icplb miss)"
209 end
210 if $$excause == 0x2d
211 printf "(multiple icplb hit)"
212 end
213 if $$excause == 0x2e
214 printf "(illegal use of supervisor resource)"
215 end
216 printf "\n"
217 printf " SFTRESET: 0x%x\t(last reset was ", $$sftreset
218 if $$sftreset == 0
219 printf "not "
220 end
221 printf "a software reset)\n"
222 printf " HWERRCAUSE: 0x%x\t", $$hwerrcause
223 if $$hwerrcause == 0x2
224 printf "(system mmr error)"
225 end
226 if $$hwerrcause == 0x3
227 printf "(external memory addressing error)"
228 end
229 if $$hwerrcause == 0x12
230 printf "(performance monitor overflow)"
231 end
232 if $$hwerrcause == 0x18
233 printf "(raise 5 instruction)"
234 end
235 printf "\n"
236end
237document seqstat
238Usage: seqstat [value=$seqstat]
239Parse the bits of the seqstat [value] into the human readable definitions.
240end
241
242define reset
243 if $argc == 0
244 set $$l1 = 0xffa00000
245 else
246 set $$l1 = $arg0
247 end
248 set $$pc = $$l1
249
250 # SSYNC
251 set *(unsigned short *)($$l1) = 0x0024
252 set $$l1 += 2
253
254 # P2.H = 0xffc0
255 set *(unsigned long *)($$l1) = 0xffc0e14a
256 set $$l1 += 4
257
258 # P2.L = 0x100
259 set *(unsigned long *)($$l1) = 0x0100e10a
260 set $$l1 += 4
261
262 # R0 = 0x7 (X)
263 set *(unsigned short *)($$l1) = 0x6038
264 set $$l1 += 2
265
266 # [P2] = R0
267 set *(unsigned short *)($$l1) = 0x9310
268 set $$l1 += 2
269
270 # SSYNC
271 set *(unsigned short *)($$l1) = 0x0024
272 set $$l1 += 2
273
274 # R0 = 0x0 (X)
275 set *(unsigned short *)($$l1) = 0x6000
276 set $$l1 += 2
277
278 # [P2] = R0
279 set *(unsigned short *)($$l1) = 0x9310
280 set $$l1 += 2
281
282 # SSYNC
283 set *(unsigned short *)($$l1) = 0x0024
284 set $$l1 += 2
285
286 # RAISE 0x1
287 set *(unsigned short *)($$l1) = 0x0091
288 set $$l1 += 2
289
290 # JUMP.S -0x18
291 if ($$l1 - $$pc) != 0x18
292 echo ERROR: jump.s has wrong offset
293 else
294 set $pc == $$pc
295 end
296 set *(unsigned short *)($$l1) = 0x2ff4
297 set $$l1 += 2
298
299 printf "Continuing.\n"
300 continue
301end
302document reset
303Usage: reset [L1 Instruction address=0xffa00000]
304Cram the software reset code into [L1 Instruction address] and execute it.
305This will perform both a system reset and a core reset.
306end
307
308define hwtrace_on
309 set $$TBUFCTL = (unsigned long *)0xFFE06000
310 set *$$TBUFCTL = 0x3
311end
312define hwtrace_off
313 set $$TBUFCTL = (unsigned long *)0xFFE06000
314 set *$$TBUFCTL = 0x1
315end
316define hwtrace
317 set $$TBUFSTAT = (unsigned long *)0xFFE06004
318 set $$TBUF = (unsigned long *)0xFFE06100
319 set $$i = 0
320 if (!(*$$TBUFSTAT & 0x1F))
321 printf "Hardware trace buffer is empty\n"
322 end
323 while (*$$TBUFSTAT & 0x1F)
324 printf "%2i Target: ", $$i
325 output/a *$$TBUF
326 printf "\n"
327 printf " Source: "
328 output/a *$$TBUF
329 printf "\n"
330 set $$i++
331 end
332end
333document hwtrace
334Usage: hwtrace
335Dump the hardware trace buffer. Remember, this is a destructive operation,
336so it can only be dumped once.
337end
338
339define show_clocks
340 printf "PLL_LOCKCNT: 0x%04x\n", *(unsigned short *)0xFFC00010
341 printf "VR_CTL: 0x%04x\n", *(unsigned short *)0xFFC00008
342 printf "PLL_DIV: 0x%04x\n", *(unsigned short *)0xFFC00004
343 printf "PLL_CTL: 0x%04x\n", *(unsigned short *)0xFFC00000
344end
345
346define show_sdram
347 printf "SDRRC: 0x%04x\n", *(unsigned short *)0xFFC00A18
348
349 set $$SDBCTL = *(unsigned short *)0xFFC00A14
350 set $$EBCAW = ($$SDBCTL & 0x30) >> 4
351 set $$EBSZ = ($$SDBCTL & 0xe) >> 1
352 printf "SDBCTL: 0x%04x ", $$SDBCTL
353 if ($$SDBCTL & 0x1)
354 printf "(enabled) "
355 else
356 printf "(disabled) "
357 end
358 if $$EBCAW == 0x0
359 printf "(8-bit) "
360 end
361 if $$EBCAW == 0x1
362 printf "(9-bit) "
363 end
364 if $$EBCAW == 0x2
365 printf "(10-bit) "
366 end
367 if $$EBCAW == 0x3
368 printf "(11-bit) "
369 end
370 if $$EBSZ == 0x0
371 printf "(16MB)"
372 end
373 if $$EBSZ == 0x1
374 printf "(32MB)"
375 end
376 if $$EBSZ == 0x2
377 printf "(64MB)"
378 end
379 if $$EBSZ == 0x3
380 printf "(128MB)"
381 end
382 if $$EBSZ == 0x4
383 printf "(256MB)"
384 end
385 if $$EBSZ == 0x5
386 printf "(512MB)"
387 end
388 printf "\n"
389
390 set $$SDSTAT = *(unsigned short *)0xFFC00A1C
391 printf "SDSTAT: 0x%04x ", $$SDSTAT
392 if ($$SDSTAT & (1 << 0))
393 printf "(idle) "
394 else
395 printf "(busy) "
396 end
397 if ($$SDSTAT & (1 << 1))
398 printf "(self-refresh) "
399 end
400 if ($$SDSTAT & (1 << 2))
401 printf "(powerup) "
402 end
403 if ($$SDSTAT & (1 << 3))
404 printf "(will power up) "
405 end
406 if ($$SDSTAT & (1 << 4))
407 printf "(EAB error) "
408 end
409 printf "\n"
410
411 printf "SDGCTL: 0x%08x\n", *(unsigned long *)0xFFC00A10
412end
413
414define show_ddr
415 printf "DDRCTL0: 0x%08x\n", *(unsigned long *)0xFFC00A20
416 printf "DDRCTL1: 0x%08x\n", *(unsigned long *)0xFFC00A24
417 printf "DDRCTL2: 0x%08x\n", *(unsigned long *)0xFFC00A28
418 printf "DDRCTL3: 0x%08x\n", *(unsigned long *)0xFFC00A2C
419 printf "DDRQUE: 0x%08x\n", *(unsigned long *)0xFFC00A30
420 printf "ERRADD: "
421 output/a *(unsigned long *)0xFFC00A34
422 printf "\n"
423
424 set $$ERRMST = *(unsigned short *)0xFFC00A38
425 printf "ERRMST: 0x%04x ( ", $$ERRMST
426 if ($$ERRMST & (1 << 7))
427 printf "core_merror "
428 end
429 if ($$ERRMST & (1 << 6))
430 printf "deb2_merror "
431 end
432 if ($$ERRMST & (1 << 5))
433 printf "deb1_merror "
434 end
435 if ($$ERRMST & (1 << 4))
436 printf "deb0_merror "
437 end
438 if ($$ERRMST & (1 << 3))
439 printf "core_error "
440 end
441 if ($$ERRMST & (1 << 2))
442 printf "deb2_error "
443 end
444 if ($$ERRMST & (1 << 1))
445 printf "deb1_error "
446 end
447 if ($$ERRMST & (1 << 0))
448 printf "deb0_error "
449 end
450 printf ")\n"
451
452 set $$RSTCTL = *(unsigned short *)0xFFC00A3C
453 printf "RSTCTL: 0x%04x ( ", $$RSTCTL
454 if ($$RSTCTL & (1 << 4))
455 printf "srack "
456 end
457 if ($$RSTCTL & (1 << 3))
458 printf "srreq "
459 end
460 if (!($$RSTCTL & (1 << 1)))
461 printf "!!! ERROR: bit 1 needs to be 1, but it is 0 !!! "
462 end
463 if ($$RSTCTL & (1 << 0))
464 printf "ddr_sreset "
465 end
466 printf ")\n"
467end
468
469define show_ebiu
470 printf "EBIU_AMGCTL: 0x%04x\n", *(unsigned short *)0xFFC00A00
471 printf "EBIU_AMBCTL0: 0x%08x\n", *(unsigned long *)0xFFC00A04
472 printf "EBIU_AMBCTL1: 0x%08x\n", *(unsigned long *)0xFFC00A08
473 printf "EBIU_MBSCTL: 0x%08x\n", *(unsigned long *)0xFFC00A0C
474
475 set $$EBIU_ARBSTAT = *(unsigned long *)0xFFC00A10
476 printf "EBIU_ARBSTAT: 0x%08x ( ", $$EBIU_ARBSTAT
477 if ($$EBIU_ARBSTAT & (1 << 1))
478 printf "bgstat "
479 end
480 if ($$EBIU_ARBSTAT & (1 << 0))
481 printf "arbstat "
482 end
483 printf ")\n"
484
485 printf "EBIU_MODE: 0x%08x\n", *(unsigned long *)0xFFC00A14
486 printf "EBIU_FCTL: 0x%08x\n", *(unsigned long *)0xFFC00A18
487end
488
489define _show_cec
490 set $$cec = *(unsigned long *)$arg0
491 printf "0x%08x: ", $$cec
492 if ($$cec & (1 << 0))
493 printf "EMU "
494 else
495 printf " "
496 end
497 if ($$cec & (1 << 1))
498 printf "RST "
499 else
500 printf " "
501 end
502 if ($$cec & (1 << 2))
503 printf "NMI "
504 else
505 printf " "
506 end
507 if ($$cec & (1 << 3))
508 printf "EVX "
509 else
510 printf " "
511 end
512 if ($$cec & (1 << 4))
513 printf "GBL "
514 else
515 printf " "
516 end
517 if ($$cec & (1 << 5))
518 printf "HW "
519 else
520 printf " "
521 end
522 if ($$cec & (1 << 6))
523 printf "TMR "
524 else
525 printf " "
526 end
527 set $$ceci = 7
528 while ($$ceci < 16)
529 if ($$cec & (1 << $$ceci))
530 printf "G%i ", $$ceci
531 else
532 printf " "
533 if ($$ceci > 9)
534 printf " "
535 end
536 end
537 set $$ceci = $$ceci + 1
538 end
539 printf "\n"
540end
541define show_cec
542 printf "IMASK: "
543 _show_cec 0xFFE02104
544 printf "IPEND: "
545 _show_cec 0xFFE02108
546 printf "ILAT: "
547 _show_cec 0xFFE0210C
548
549 set $$EVT = 0xFFE02000
550 set $$EVTi = 0
551 while ($$EVTi < 16)
552 printf "EVT%-2i ", $$EVTi
553 output/a *(unsigned long *)($$EVT + $$EVTi * 4)
554 printf "\n"
555 set $$EVTi = $$EVTi + 1
556 end
557end
558
559define _show_cplbs
560 set $$addr = $arg0
561 set $$data = $arg1
562 set $$i = 0
563 while ($$i < 16)
564 set $$data_val = *(unsigned long *)($$data + $$i * 4)
565 printf " 0x%08x 0x%08x ( ", *(unsigned long *)($$addr + $$i * 4), $$data_val
566 if (($$data_val & (0x3 << 16)) == (0x0 << 16))
567 printf "1K "
568 end
569 if (($$data_val & (0x3 << 16)) == (0x1 << 16))
570 printf "4K "
571 end
572 if (($$data_val & (0x3 << 16)) == (0x2 << 16))
573 printf "1M "
574 end
575 if (($$data_val & (0x3 << 16)) == (0x3 << 16))
576 printf "4M "
577 end
578 if ($$data_val & (0x1 << 14))
579 printf "wt "
580 else
581 printf "wb "
582 end
583 if ($$data_val & (0x1 << 7))
584 printf "dirty "
585 end
586 if ($$data_val & (0x1 << 4))
587 printf "supv-wr "
588 end
589 if ($$data_val & (0x1 << 3))
590 printf "user-wr "
591 end
592 if ($$data_val & (0x1 << 2))
593 printf "user-rd "
594 end
595 if ($$data_val & (0x1 << 1))
596 printf "locked "
597 end
598 if ($$data_val & (0x1 << 0))
599 printf "valid "
600 else
601 printf "invalid "
602 end
603 printf ")\n"
604 set $$i = $$i + 1
605 end
606end
607define show_icplbs
608 set $$IMEM_CONTROL = 0xFFE01004
609 printf "ICPLBS (0x%08x)\n", *(unsigned long *)$$IMEM_CONTROL
610 _show_cplbs 0xFFE01100 0xFFE01200
611end
612define show_dcplbs
613 set $$DMEM_CONTROL = 0xFFE00004
614 printf "DCPLBS (0x%08x)\n", *(unsigned long *)$$DMEM_CONTROL
615 _show_cplbs 0xFFE00100 0xFFE00200
616end
617define show_cplbs
618 show_icplbs
619 show_dcplbs
620end
621
622define _show_cplbstatus
623 set $$CPLB_STATUS = *(unsigned long *)$arg0
624 printf " STATUS = 0x%08x ( ", $$CPLB_STATUS
625 if ($$CPLB_STATUS & (1 << 19))
626 printf "illaddr "
627 end
628 if ($$CPLB_STATUS & (1 << 18))
629 printf "dag1 "
630 else
631 printf "dag0 "
632 end
633 if ($$CPLB_STATUS & (1 << 17))
634 printf "super "
635 else
636 printf "user "
637 end
638 if ($$CPLB_STATUS & (1 << 16))
639 printf "write "
640 else
641 printf "read "
642 end
643 set $$i = 15
644 while ($$i >= 0)
645 if ($$CPLB_STATUS & (1 << $$i))
646 printf "%i ", $$i
647 end
648 set $$i--
649 end
650 printf ")\n"
651
652 set $$CPLB_FAULT_ADDR = *(unsigned long *)$arg1
653 printf " FAULT_ADDR = "
654 output/a $$CPLB_FAULT_ADDR
655 printf "\n"
656end
657define show_icplbstatus
658 printf "ICPLB Status\n"
659 _show_cplbstatus 0xFFE01008 0xFFE0100C
660end
661define show_dcplbstatus
662 printf "DCPLB Status\n"
663 _show_cplbstatus 0xFFE00008 0xFFE0000C
664end
665define show_cplbstatus
666 seqstat
667 show_icplbstatus
668 show_dcplbstatus
669end
670
671define safe_regs
672 set $r0 = $r1 = $r2 = $r3 = $r4 = $r5 = $r6 = $r7 = 0xffb00000
673 set $sp = $fp = $usp = $r0 + 0x100
674 set $p0 = $p1 = $p2 = $p3 = $p4 = $p5 = 0xffa00000
675 set $pc = $rets = $reti = $retx = $retn = $p0
676 set $lt0 = $lt1 = $lb0 = $lb1 = 1
677 set $lc0 = $lc1 = 0
678 set $i0 = $i1 = $i2 = $i3 = $r0
679 set $b0 = $b1 = $b2 = $b3 = $r0
680 set $l0 = $l1 = $l2 = $l3 = $r0
681 set $m0 = $m1 = $m2 = $m3 = $r0
682end
683
684define _show_dma
685 set $$DMA_BASE = $arg0
686 set $$NEXT_DESC_PTR = *(unsigned long *) ($$DMA_BASE + 0x00)
687 set $$START_ADDR = *(unsigned long *) ($$DMA_BASE + 0x04)
688 set $$CONFIG = *(unsigned short *) ($$DMA_BASE + 0x08)
689 set $$X_COUNT = *(unsigned short *) ($$DMA_BASE + 0x10)
690 set $$X_MODIFY = *(unsigned short *) ($$DMA_BASE + 0x14)
691 set $$Y_COUNT = *(unsigned short *) ($$DMA_BASE + 0x18)
692 set $$Y_MODIFY = *(unsigned short *) ($$DMA_BASE + 0x1C)
693 set $$CURR_DESC_PTR = *(unsigned long *) ($$DMA_BASE + 0x20)
694 set $$CURR_ADDR = *(unsigned long *) ($$DMA_BASE + 0x24)
695 set $$IRQ_STATUS = *(unsigned short *) ($$DMA_BASE + 0x28)
696 set $$CURR_X_COUNT = *(unsigned short *) ($$DMA_BASE + 0x30)
697 set $$CURR_Y_COUNT = *(unsigned short *) ($$DMA_BASE + 0x38)
698 printf "desc: curr: 0x%08x next: 0x%08x\n", $$CURR_DESC_PTR, $$NEXT_DESC_PTR
699 printf "addr: curr: 0x%08x start: 0x%08x\n", $$CURR_ADDR, $$START_ADDR
700 printf "X: curr: 0x%04x count: 0x%04x mod: 0x%04x (%i)\n", $$CURR_X_COUNT, $$X_COUNT, $$X_MODIFY, (short)$$X_MODIFY
701 printf "Y: curr: 0x%04x count: 0x%04x mod: 0x%04x (%i)\n", $$CURR_Y_COUNT, $$Y_COUNT, $$Y_MODIFY, (short)$$Y_MODIFY
702 printf "dma config: 0x%04x (", $$CONFIG
703 if ($$CONFIG & (1 << 0))
704 printf "enabled "
705 else
706 printf "disabled "
707 end
708 if ($$CONFIG & (0x1 << 1))
709 printf "write "
710 else
711 printf "read "
712 end
713 set $$WDSIZE = ($$CONFIG & (0x3 << 2)) >> 2
714 if ($$WDSIZE == 0x3)
715 printf "WDSIZE:INVALID "
716 end
717 if ($$WDSIZE == 0x2)
718 printf "32-bit "
719 end
720 if ($$WDSIZE == 0x1)
721 printf "16-bit "
722 end
723 if ($$WDSIZE == 0x0)
724 printf "8-bit "
725 end
726 if ($$CONFIG & (0x1 << 4))
727 printf "2D "
728 else
729 printf "1D "
730 end
731 if ($$CONFIG & (0x1 << 5))
732 printf "sync "
733 end
734 if ($$CONFIG & (0x1 << 6))
735 printf "di_sel "
736 end
737 if ($$CONFIG & (0x1 << 7))
738 printf "interrupt "
739 end
740 set $$NDSIZE = ($$CONFIG & (0xF << 8)) >> 8
741 if ($$NDSIZE > 0 && $$NDSIZE < 10)
742 printf "NDSIZE_%i ", $$NDSIZE
743 end
744 if ($$NDSIZE >= 10)
745 printf "NDSIZE:INVALID:%i ", $$NDSIZE
746 end
747 set $$FLOW = ($$CONFIG & (0x7 << 12)) >> 12
748 if ($$FLOW == 0)
749 printf "stop"
750 else
751 if ($$FLOW == 1)
752 printf "autobuffer"
753 else
754 if ($$FLOW == 4)
755 printf "descriptor_array"
756 else
757 if ($$FLOW == 6)
758 printf "descriptor_list_small"
759 else
760 if ($$FLOW == 7)
761 printf "descriptor_list_large"
762 else
763 printf "FLOW:INVALID:%i", $$FLOW
764 end
765 end
766 end
767 end
768 end
769 printf ")\n"
770 printf "irq status: 0x%04x (", $$IRQ_STATUS
771 if ($$IRQ_STATUS & (0x1 << 0))
772 printf "done "
773 end
774 if ($$IRQ_STATUS & (0x1 << 1))
775 printf "err "
776 end
777 if ($$IRQ_STATUS & (0x1 << 2))
778 printf "dfetch "
779 end
780 if ($$IRQ_STATUS & (0x1 << 3))
781 printf "run "
782 end
783 printf ")\n"
784end
785
786define show_ctimer
787 set $$CTIMER = 0xFFE03000
788 set $$TCNTL = *(unsigned long *) ($$CTIMER + 0x0)
789 set $$TPERIOD = *(unsigned long *) ($$CTIMER + 0x4)
790 set $$TSCALE = *(unsigned long *) ($$CTIMER + 0x8)
791 set $$TCOUNT = *(unsigned long *) ($$CTIMER + 0xC)
792 printf "TCNTL: %#x ( ", $$TCNTL
793 if ($$TCNTL & (1 << 0))
794 printf "power "
795 end
796 if ($$TCNTL & (1 << 1))
797 printf "enable "
798 end
799 if ($$TCNTL & (1 << 2))
800 printf "autoreload "
801 end
802 if ($$TCNTL & (1 << 3))
803 printf "int-enabled "
804 end
805 printf ")\n"
806 printf "TPERIOD: %#x\n", $$TPERIOD
807 printf "TSCALE: %#x\n", $$TSCALE
808 printf "TCOUNT: %#x\n", $$TCOUNT
809end
810
811define show_spi
812 if $argc > 0
813 set $$SPI_BASE = $arg0
814 else
815 set $$SPI_BASE = 0xFFC00500
816 end
817 set $$SPI_BAUD = *(unsigned short *) ($$SPI_BASE + 0x14)
818 set $$SPI_CTL = *(unsigned short *) ($$SPI_BASE + 0x00)
819 set $$SPI_FLG = *(unsigned short *) ($$SPI_BASE + 0x04)
820 set $$SPI_STAT = *(unsigned short *) ($$SPI_BASE + 0x08)
821 set $$SPI_TDBR = *(unsigned short *) ($$SPI_BASE + 0x0C)
822 set $$SPI_RDBR = *(unsigned short *) ($$SPI_BASE + 0x10)
823 set $$SPI_SHAD = *(unsigned short *) ($$SPI_BASE + 0x18)
824 printf "BAUD: %04x (%i)\n", $$SPI_BAUD, $$SPI_BAUD
825 printf "CTL: %04x (", $$SPI_CTL
826 set $$TIMOD = $$SPI_CTL & 0x3
827 printf "timod:%i ", $$TIMOD
828 if ($$SPI_CTL & (1 << 2))
829 printf "sz "
830 end
831 if ($$SPI_CTL & (1 << 3))
832 printf "gm "
833 end
834 if ($$SPI_CTL & (1 << 4))
835 printf "psse "
836 end
837 if ($$SPI_CTL & (1 << 5))
838 printf "emiso "
839 end
840 if ($$SPI_CTL & (1 << 8))
841 printf "16bit "
842 else
843 printf "8bit "
844 end
845 if ($$SPI_CTL & (1 << 9))
846 printf "lsbf "
847 end
848 if ($$SPI_CTL & (1 << 10))
849 printf "cpol "
850 end
851 if ($$SPI_CTL & (1 << 11))
852 printf "cpha "
853 end
854 if ($$SPI_CTL & (1 << 12))
855 printf "mstr "
856 else
857 printf "slave "
858 end
859 if ($$SPI_CTL & (1 << 13))
860 printf "wom "
861 end
862 if ($$SPI_CTL & (1 << 14))
863 printf "enabled"
864 else
865 printf "disabled"
866 end
867 printf ")\n"
868 printf "STAT: %04x (", $$SPI_STAT
869 if ($$SPI_STAT & (1 << 0))
870 printf "spif "
871 end
872 if ($$SPI_STAT & (1 << 1))
873 printf "modf "
874 end
875 if ($$SPI_STAT & (1 << 2))
876 printf "txe "
877 end
878 if ($$SPI_STAT & (1 << 3))
879 printf "txs "
880 end
881 if ($$SPI_STAT & (1 << 4))
882 printf "rbsy "
883 end
884 if ($$SPI_STAT & (1 << 5))
885 printf "rxs "
886 end
887 if ($$SPI_STAT & (1 << 6))
888 printf "txcol "
889 end
890 printf ")\n"
891 printf "FLG: %04x\n", $$SPI_FLG
892 printf "TDBR: %04x RDBR: %04x\n", $$SPI_TDBR, $$SPI_SHAD
893end
894
895define show_uart_lcr
896 set $$LCR = $arg0
897 printf "LCR: 0x%02x ( ", $$LCR
898 set $$WLS = $$LCR & 0x3
899 if ($$WLS == 0)
900 printf "5-bit "
901 end
902 if ($$WLS == 1)
903 printf "6-bit "
904 end
905 if ($$WLS == 2)
906 printf "7-bit "
907 end
908 if ($$WLS == 3)
909 printf "8-bit "
910 end
911 if ($$LCR & (1 << 2))
912 printf "stb "
913 end
914 if ($$LCR & (1 << 3))
915 printf "pen "
916 end
917 if ($$LCR & (1 << 4))
918 printf "eps "
919 end
920 if ($$LCR & (1 << 5))
921 printf "stp "
922 end
923 if ($$LCR & (1 << 6))
924 printf "sb "
925 end
926 printf ")\n"
927end
928
929define show_uart_lsr
930 set $$LSR = $arg0
931 printf "LSR: 0x%02x ( ", $$LSR
932 if ($$LSR & (1 << 0))
933 printf "dr "
934 end
935 if ($$LSR & (1 << 1))
936 printf "oe "
937 end
938 if ($$LSR & (1 << 2))
939 printf "pe "
940 end
941 if ($$LSR & (1 << 3))
942 printf "fe "
943 end
944 if ($$LSR & (1 << 4))
945 printf "bi "
946 end
947 if ($$LSR & (1 << 5))
948 printf "thre "
949 end
950 if ($$LSR & (1 << 6))
951 printf "temt "
952 end
953 if ($$LSR & (1 << 7))
954 printf "tfi "
955 end
956 printf ")\n"
957end
958
959define show_uart_ier
960 set $$IER = $arg0
961 printf "IER: 0x%02x ( ", $$IER
962 if ($$IER & (1 << 0))
963 printf "erbfi "
964 end
965 if ($$IER & (1 << 1))
966 printf "etbei "
967 end
968 if ($$IER & (1 << 2))
969 printf "elsi "
970 end
971 if ($$IER & (1 << 3))
972 printf "edssi "
973 end
974 if ($$IER & (1 << 4))
975 printf "edtpti "
976 end
977 if ($$IER & (1 << 5))
978 printf "etfi "
979 end
980 if ($$IER & (1 << 6))
981 printf "erfci "
982 end
983 printf ")\n"
984end
985
986define show_uart_mcr
987 set $$MCR = $arg0
988 printf "MCR: 0x%02x ( ", $$MCR
989 if ($$MCR & (1 << 0))
990 printf "xoff "
991 end
992 if ($$MCR & (1 << 1))
993 printf "mrts "
994 end
995 if ($$MCR & (1 << 2))
996 printf "rfit "
997 end
998 if ($$MCR & (1 << 3))
999 printf "rfrt "
1000 end
1001 if ($$MCR & (1 << 4))
1002 printf "loop_ena "
1003 end
1004 if ($$MCR & (1 << 5))
1005 printf "fcpol "
1006 end
1007 if ($$MCR & (1 << 6))
1008 printf "arts "
1009 end
1010 if ($$MCR & (1 << 7))
1011 printf "acts "
1012 end
1013 printf ")\n"
1014end
1015
1016define show_uart_msr
1017 set $$MSR = $arg0
1018 printf "MSR: 0x%02x ( ", $$MSR
1019 if ($$MSR & (1 << 0))
1020 printf "scts "
1021 end
1022 if ($$MSR & (1 << 4))
1023 printf "cts "
1024 end
1025 if ($$MSR & (1 << 5))
1026 printf "rfcs "
1027 end
1028 printf ")\n"
1029end
1030
1031define show_uart_gctl
1032 set $$GCTL = $arg0
1033 printf "GCTL: 0x%02x ( ", $$GCTL
1034 if ($$GCTL & (1 << 0))
1035 printf "ucen "
1036 end
1037 if ($$GCTL & (1 << 1))
1038 printf "iren "
1039 end
1040 if ($$GCTL & (1 << 2))
1041 printf "tpolc "
1042 end
1043 if ($$GCTL & (1 << 3))
1044 printf "rpolc "
1045 end
1046 if ($$GCTL & (1 << 4))
1047 printf "fpe "
1048 end
1049 if ($$GCTL & (1 << 5))
1050 printf "ffe "
1051 end
1052 if ($$GCTL & (1 << 6))
1053 printf "edbo "
1054 end
1055 if ($$GCTL & (1 << 7))
1056 printf "eglsi "
1057 end
1058 printf ")\n"
1059end
1060
1061define show_uart
1062 if $argc > 0
1063 set $$UART_BASE = $arg0
1064 else
1065 set $$UART_BASE = 0xffc00400
1066 end
1067 set $$UART_DLL = (unsigned short *) ($$UART_BASE + 0x00)
1068 set $$UART_RBR = (unsigned short *) ($$UART_BASE + 0x00)
1069 set $$UART_DLH = (unsigned short *) ($$UART_BASE + 0x04)
1070 set $$UART_IER = (unsigned short *) ($$UART_BASE + 0x04)
1071 set $$UART_IIR = (unsigned short *) ($$UART_BASE + 0x08)
1072 set $$UART_LCR = (unsigned short *) ($$UART_BASE + 0x0C)
1073 set $$UART_MCR = (unsigned short *) ($$UART_BASE + 0x10)
1074 set $$UART_LSR = (unsigned short *) ($$UART_BASE + 0x14)
1075 set $$UART_MSR = (unsigned short *) ($$UART_BASE + 0x18)
1076 set $$UART_SCR = (unsigned short *) ($$UART_BASE + 0x1C)
1077 set $$UART_GCTL = (unsigned short *) ($$UART_BASE + 0x24)
1078
1079 set $$DLAB = (1 << 7)
1080 set $$LCR = *$$UART_LCR
1081 set *$$UART_LCR = ($$LCR | $$DLAB)
1082 printf "DLL: 0x%02x DLH: 0x%02x\n", *$$UART_DLL, *$$UART_DLH
1083 set *$$UART_LCR = $$LCR & ~$$DLAB
1084 printf "RBR: 0x%02x SCR: 0x%02x\n", *$$UART_RBR, *$$UART_SCR
1085 set *$$UART_LCR = $$LCR
1086
1087 printf "IIR: 0x%02x ", *$$UART_IIR
1088 show_uart_ier *$$UART_IER
1089 show_uart_lcr $$LCR
1090 show_uart_mcr *$$UART_MCR
1091 show_uart_lsr *$$UART_LSR
1092 show_uart_msr *$$UART_MSR
1093 show_uart_gctl *$$UART_GCTL
1094end
1095
1096define show_uart2
1097 if $argc > 0
1098 set $$UART_BASE = $arg0
1099 else
1100 set $$UART_BASE = 0xffc00400
1101 end
1102 set $$UART_DLL = (unsigned short *) ($$UART_BASE + 0x00)
1103 set $$UART_DLH = (unsigned short *) ($$UART_BASE + 0x04)
1104 set $$UART_GCTL = (unsigned short *) ($$UART_BASE + 0x08)
1105 set $$UART_LCR = (unsigned short *) ($$UART_BASE + 0x0C)
1106 set $$UART_MCR = (unsigned short *) ($$UART_BASE + 0x10)
1107 set $$UART_LSR = (unsigned short *) ($$UART_BASE + 0x14)
1108 set $$UART_MSR = (unsigned short *) ($$UART_BASE + 0x18)
1109 set $$UART_SCR = (unsigned short *) ($$UART_BASE + 0x1C)
1110 set $$UART_IER = (unsigned short *) ($$UART_BASE + 0x20)
1111 set $$UART_RBR = (unsigned short *) ($$UART_BASE + 0x2C)
1112
1113 printf "DLL: 0x%02x DLH: 0x%02x\n", *$$UART_DLL, *$$UART_DLH
1114 printf "RBR: 0x%02x SCR: 0x%02x\n", *$$UART_RBR, *$$UART_SCR
1115
1116 printf " "
1117 show_uart_ier *$$UART_IER
1118 show_uart_lcr *$$UART_LCR
1119 show_uart_mcr *$$UART_MCR
1120 show_uart_lsr *$$UART_LSR
1121 show_uart_msr *$$UART_MSR
1122 show_uart_gctl *$$UART_GCTL
1123end
1124
1125define show_uart4
1126 if $argc > 0
1127 set $$UART_BASE = $arg0
1128 else
1129 set $$UART_BASE = 0xffc02000
1130 end
1131 set $$UART_REVID = (unsigned long *) ($$UART_BASE + 0x00)
1132 set $$UART_CTL = (unsigned long *) ($$UART_BASE + 0x04)
1133 set $$UART_STAT = (unsigned long *) ($$UART_BASE + 0x08)
1134 set $$UART_SCR = (unsigned long *) ($$UART_BASE + 0x0C)
1135 set $$UART_CLK = (unsigned long *) ($$UART_BASE + 0x10)
1136 set $$UART_IMASK = (unsigned long *) ($$UART_BASE + 0x14)
1137 set $$UART_RBR = (unsigned long *) ($$UART_BASE + 0x20)
1138 set $$UART_THR = (unsigned long *) ($$UART_BASE + 0x24)
1139 set $$UART_TAIP = (unsigned long *) ($$UART_BASE + 0x28)
1140 set $$UART_TSR = (unsigned long *) ($$UART_BASE + 0x2C)
1141 set $$UART_RSR = (unsigned long *) ($$UART_BASE + 0x30)
1142 set $$UART_TXCNT = (unsigned long *) ($$UART_BASE + 0x34)
1143 set $$UART_RXCNT = (unsigned long *) ($$UART_BASE + 0x38)
1144
1145 printf "REVID: 0x%08x SCR: 0x%08x\n", *$$UART_REVID, *$$UART_SCR
1146 printf " CLK: 0x%08x TAIP: 0x%08x\n", *$$UART_CLK, *$$UART_TAIP
1147
1148 set $$CTL = *$$UART_CTL
1149 printf " CTL: 0x%08x ( ", $$CTL
1150 if ($$CTL & (1 << 0))
1151 printf "uen "
1152 end
1153 if ($$CTL & (1 << 1))
1154 printf "loop_ena "
1155 end
1156 set $$UMOD = ($$CTL & (3 << 4)) >> 4
1157 printf "mode:"
1158 if ($$UMOD == 0)
1159 printf "uart "
1160 end
1161 if ($$UMOD == 1)
1162 printf "mdb "
1163 end
1164 if ($$UMOD == 2)
1165 printf "irda "
1166 end
1167 if ($$UMOD == 3)
1168 printf "reserved "
1169 end
1170 set $$WLS = ($$CTL & (3 << 8)) >> 8
1171 printf "wls:"
1172 if ($$WLS == 0)
1173 printf "5"
1174 end
1175 if ($$WLS == 1)
1176 printf "6 "
1177 end
1178 if ($$WLS == 2)
1179 printf "7 "
1180 end
1181 if ($$WLS == 3)
1182 printf "8 "
1183 end
1184 if ($$CTL & (1 << 12))
1185 printf "stb "
1186 end
1187 if ($$CTL & (1 << 13))
1188 printf "stbh "
1189 end
1190 if ($$CTL & (1 << 14))
1191 printf "pen "
1192 end
1193 if ($$CTL & (1 << 15))
1194 printf "eps "
1195 end
1196 if ($$CTL & (1 << 16))
1197 printf "stp "
1198 end
1199 if ($$CTL & (1 << 17))
1200 printf "fpe "
1201 end
1202 if ($$CTL & (1 << 18))
1203 printf "ffe "
1204 end
1205 if ($$CTL & (1 << 19))
1206 printf "sb "
1207 end
1208 if ($$CTL & (1 << 22))
1209 printf "fcpol "
1210 end
1211 if ($$CTL & (1 << 23))
1212 printf "rpolc "
1213 end
1214 if ($$CTL & (1 << 24))
1215 printf "tpolc "
1216 end
1217 if ($$CTL & (1 << 25))
1218 printf "mrts "
1219 end
1220 if ($$CTL & (1 << 26))
1221 printf "xoff "
1222 end
1223 if ($$CTL & (1 << 27))
1224 printf "arts "
1225 end
1226 if ($$CTL & (1 << 28))
1227 printf "acts "
1228 end
1229 if ($$CTL & (1 << 29))
1230 printf "rfit "
1231 end
1232 if ($$CTL & (1 << 30))
1233 printf "rfrt "
1234 end
1235 printf ")\n"
1236
1237 set $$STAT = *$$UART_STAT
1238 printf " STAT: 0x%08x ( ", $$STAT
1239 if ($$STAT & (1 << 0))
1240 printf "dr "
1241 end
1242 if ($$STAT & (1 << 1))
1243 printf "oe "
1244 end
1245 if ($$STAT & (1 << 2))
1246 printf "pe "
1247 end
1248 if ($$STAT & (1 << 3))
1249 printf "fe "
1250 end
1251 if ($$STAT & (1 << 4))
1252 printf "bi "
1253 end
1254 if ($$STAT & (1 << 5))
1255 printf "thre "
1256 end
1257 if ($$STAT & (1 << 7))
1258 printf "temt "
1259 end
1260 if ($$STAT & (1 << 8))
1261 printf "tfi "
1262 end
1263 if ($$STAT & (1 << 9))
1264 printf "astky "
1265 end
1266 if ($$STAT & (1 << 10))
1267 printf "addr "
1268 end
1269 if ($$STAT & (1 << 11))
1270 printf "ro "
1271 end
1272 if ($$STAT & (1 << 12))
1273 printf "scts "
1274 end
1275 if ($$STAT & (1 << 16))
1276 printf "cts "
1277 end
1278 if ($$STAT & (1 << 17))
1279 printf "rfcs "
1280 end
1281 printf ")\n"
1282
1283 printf "IMASK: 0x%08x\n", *$$UART_IMASK
1284 printf " RSR: 0x%04x TSR: 0x%04x\n", *$$UART_RSR, *$$UART_TSR
1285 printf " RBR: 0x%02x THR: 0x%02x\n", *$$UART_RBR, *$$UART_THR
1286 printf "RXCNT: 0x%02x TXCNT: 0x%02x\n", *$$UART_RXCNT, *$$UART_TXCNT
1287end
1288
1289define _otp_save
1290 set $$s_pc = $pc
1291 set $$s_r0 = $r0
1292 set $$s_r1 = $r1
1293 set $$s_r2 = $r2
1294 set $$s_mm = (unsigned long *)0xFFB00000
1295 set $$s_m0 = $$s_mm[0]
1296 set $$s_m1 = $$s_mm[1]
1297end
1298define _otp_restore
1299 set $pc = $$s_pc
1300 set $r0 = $$s_r0
1301 set $r1 = $$s_r1
1302 set $r2 = $$s_r2
1303 set $$s_mm[0] = $$s_m0
1304 set $$s_mm[1] = $$s_m1
1305end
1306
1307define _otp_read
1308 set $pc = 0xef00001a
1309 set $r0 = $arg0
1310 set $r1 = $arg1
1311 set $r2 = 0xFFB00000
1312
1313end
1314define otp_read
1315 if $argc == 0
1316 set $$OTP_PAGE = 0
1317 else
1318 set $$OTP_PAGE = $arg0
1319 end
1320
1321 printf "OTP Page 0x%02x: ", $$OTP_PAGE
1322 _otp_save
1323 _otp_read $$OTP_PAGE, 0
1324 _otp_read $$OTP_PAGE, 1
1325 _otp_restore
1326end
1327
1328define otp_dump
1329 _otp_save
1330 set $$page = 0
1331 while $$page < 0xe0
1332 printf "0x%02x: ", $$page
1333 _otp_read $$page, 0
1334 printf "%08x %08x ", $$OTP_PAGE_L, $$OTP_PAGE_H
1335 _otp_read $$page, 1
1336 printf "%08x %08x ", $$OTP_PAGE_L, $$OTP_PAGE_H
1337 $$page++
1338 end
1339 _otp_restore
1340end
1341
1342
1343#
1344# Provide U-Boot-style functions in gdb
1345#
1346
1347define uboot_jtag_load
1348 set remotetimeout 300
1349 load init.elf
1350 continue
1351 load u-boot
1352 call memset(&_bss_vma, 0, &_bss_len)
1353 continue
1354end
1355
1356
1357#
1358# U-Boot style memory display functions
1359#
1360
1361define md
1362 if $argc == 2
1363 x/64x$arg0 $arg1
1364 else
1365 if $argc == 3
1366 x/$arg2x$arg0 $arg1
1367 else
1368 help md
1369 end
1370 end
1371end
1372document md
1373Usage: md <unit type> <address> [count=64]
1374Display [count] <unit type> starting at <address>.
1375end
1376
1377define _md
1378 # dummy func for "document" to work
1379end
1380document _md
1381Usage: md[cbwl] <address> [count=64]
1382Display [count] <chars|bytes|words|longs> starting at <address>.
1383end
1384
1385define mdb
1386 if $argc == 1
1387 md b $arg0
1388 else
1389 if $argc == 2
1390 md b $arg0 $arg1
1391 else
1392 help _md
1393 end
1394 end
1395end
1396document mdb
1397Use 'help _md'
1398end
1399define mdw
1400 if $argc == 1
1401 md h $arg0
1402 else
1403 if $argc == 2
1404 md h $arg0 $arg1
1405 else
1406 help _md
1407 end
1408 end
1409end
1410document mdw
1411Use 'help _md'
1412end
1413define mdl
1414 if $argc == 1
1415 md w $arg0
1416 else
1417 if $argc == 2
1418 md w $arg0 $arg1
1419 else
1420 help _md
1421 end
1422 end
1423end
1424document mdl
1425Use 'help _md'
1426end
1427define mdq
1428 if $argc == 1
1429 md g $arg0
1430 else
1431 if $argc == 2
1432 md g $arg0 $arg1
1433 else
1434 help _md
1435 end
1436 end
1437end
1438document mdq
1439Use 'help _md'
1440end
1441define mdc
1442 set output-radix 10
1443 if $argc == 1
1444 md c $arg0
1445 else
1446 if $argc == 2
1447 md c $arg0 $arg1
1448 else
1449 help _md
1450 end
1451 end
1452 set output-radix 16
1453end
1454document mdc
1455Use 'help _md'
1456end
1457
1458
1459#
1460# U-Boot style memory modify functions
1461#
1462
1463define _mw
1464 set $$addr = $arg0
1465 set $$val = $arg1
1466 set $$count = $arg2
1467 while $$count-- > 0
1468 set *$$addr = $$val
1469 set $$addr += 1
1470 end
1471 dont-repeat
1472end
1473document _mw
1474Usage: mw[bwl] <address> <value> <count>
1475Set <count> <bytes|words|longs> at <address> to <value>.
1476end
1477
1478define mwl
1479 if $argc == 3
1480 set $$addr = (unsigned long *)$arg0
1481 _mw $$addr $arg1 $arg2
1482 else
1483 help _mw
1484 end
1485end
1486document mwl
1487Use 'help _mw'
1488end
1489define mww
1490 if $argc == 3
1491 set $$addr = (unsigned short *)$arg0
1492 _mw $$addr $arg1 $arg2
1493 else
1494 help _mw
1495 end
1496end
1497document mww
1498Use 'help _mw'
1499end
1500define mwb
1501 if $argc == 3
1502 set $$addr = (unsigned char *)$arg0
1503 _mw $$addr $arg1 $arg2
1504 else
1505 help _mw
1506 end
1507end
1508document mwb
1509Use 'help _mw'
1510end
1511
1512
1513#
1514# U-Boot style memory compare functions
1515#
1516
1517define _cmp
1518 set $$base = (unsigned long)$arg0
1519 set $$addr1 = $arg0
1520 set $$addr2 = $arg1
1521 set $$count = $arg2
1522 while $$count-- > 0
1523 if (*$$addr1 != *$$addr2)
1524 printf "Data mismatch at %#x units (@%#x != @%#x)\n", $arg2, $$addr1, $$addr2
1525 set $$count = -100
1526 end
1527 set $$addr1 += 1
1528 set $$addr2 += 1
1529 end
1530 if $$count == -1
1531 printf "Data matches for %#x units\n", $arg2
1532 end
1533 dont-repeat
1534end
1535document _cmp
1536Usage: cmp[bwl] <address> <address> <count>
1537Compare <count> <bytes|words|longs> between <address> and <address>.
1538end
1539
1540define cmpb
1541 if $argc == 3
1542 set $$addr1 = (unsigned char *)$arg0
1543 set $$addr2 = (unsigned char *)$arg1
1544 _cmp $$addr1 $$addr2 $arg2
1545 else
1546 help _cmp
1547 end
1548end
1549document cmpb
1550Use 'help _cmp'
1551end
1552define cmpw
1553 if $argc == 3
1554 set $$addr1 = (unsigned short *)$arg0
1555 set $$addr2 = (unsigned short *)$arg1
1556 _cmp $$addr1 $$addr2 $arg2
1557 else
1558 help _cmp
1559 end
1560end
1561document cmpw
1562Use 'help _cmp'
1563end
1564define cmpl
1565 if $argc == 3
1566 set $$addr1 = (unsigned long *)$arg0
1567 set $$addr2 = (unsigned long *)$arg1
1568 _cmp $$addr1 $$addr2 $arg2
1569 else
1570 help _cmp
1571 end
1572end
1573document cmpl
1574Use 'help _cmp'
1575end
1576
1577
1578#
1579# U-Boot style memory copy functions
1580#
1581
1582define _cp
1583 set $$src = $arg0
1584 set $$dst = $arg1
1585 set $$count = $arg2
1586 while $$count-- > 0
1587 set *$$dst = *$$src
1588 set $$src += 1
1589 set $$dst += 1
1590 end
1591 printf "Copied %#x units from %#x to %#x\n", $arg2, $arg0, $arg1
1592 dont-repeat
1593end
1594document _cp
1595Usage: cp[bwl] <src> <dst> <count>
1596Copy <count> <bytes|words|longs> from <src> to <dst>.
1597end
1598
1599define cpb
1600 if $argc == 3
1601 set $$addr1 = (unsigned char *)$arg0
1602 set $$addr2 = (unsigned char *)$arg1
1603 _cp $$addr1 $$addr2 $arg2
1604 else
1605 help _cp
1606 end
1607end
1608document cpb
1609Use 'help _cp'
1610end
1611define cpw
1612 if $argc == 3
1613 set $$addr1 = (unsigned short *)$arg0
1614 set $$addr2 = (unsigned short *)$arg1
1615 _cp $$addr1 $$addr2 $arg2
1616 else
1617 help _cp
1618 end
1619end
1620document cpw
1621Use 'help _cp'
1622end
1623define cpl
1624 if $argc == 3
1625 set $$addr1 = (unsigned long *)$arg0
1626 set $$addr2 = (unsigned long *)$arg1
1627 _cp $$addr1 $$addr2 $arg2
1628 else
1629 help _cp
1630 end
1631end
1632document cpl
1633Use 'help _cp'
1634end
1635
1636
1637#set extended-prompt \[\e[30;1m\](\[\e[34;1m\]gdb\[\e[30;1m\])\[\e[0m\]