FreeCalypso > hg > freecalypso-tools
annotate target-utils/dspdump/dumpops.c @ 989:a5bff8104b45
pln-ppb-test: implement program operation
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 03 Dec 2023 00:16:17 +0000 |
parents | 451d8b545b11 |
children |
rev | line source |
---|---|
540
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 #include <sys/types.h> |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 #include "types.h" |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 #include "leadapi.h" |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 void |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 cmd_dump(argbulk) |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 char *argbulk; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 { |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 char *argv[4]; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 u_long mode, addr, len; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 int rc; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 volatile u16 *api; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 unsigned n; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 if (parse_args(argbulk, 3, 3, argv, 0) < 0) |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 return; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 if (parse_hexarg(argv[0], 4, &mode) < 0) { |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 printf("ERROR: mode must be a valid 16-bit hex value\n"); |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 return; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 } |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 if (parse_hexarg(argv[1], 8, &addr) < 0) { |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 printf("ERROR: addr must be a valid 32-bit hex value\n"); |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 return; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 } |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 if (parse_hexarg(argv[2], 4, &len) < 0) { |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 printf("ERROR: len must be a valid 16-bit hex value\n"); |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 return; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 } |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 rc = boot_dsp_dump_agent(); |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 if (rc < 0) |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 return; /* error msg already printed */ |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 rc = dsp_read_op((u16)mode, (u32)addr, (u16)len); |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 if (rc < 0) { |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 printf("ERROR: DSP timeout on read operation\n"); |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 return; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 } |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 api = (volatile u16 *) APIF_ADDR; |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 for (n = 0; n < len; n++) |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 printf("%04X\n", *api++); |
27b5526ba1a8
dspdump target program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 } |
542
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
41 |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
42 dump_large_section(mode, addr, len) |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
43 u16 mode; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
44 u32 addr, len; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
45 { |
543
947c6a443a9c
dspdump: bugfix in bigdump command
Mychaela Falconia <falcon@freecalypso.org>
parents:
542
diff
changeset
|
46 u32 chunk, remain, n; |
542
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
47 volatile u16 *api; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
48 int rc; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
49 |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
50 for (remain = len; remain; remain -= chunk) { |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
51 chunk = remain; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
52 if (chunk > MAX_BLOCK_SIZE) |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
53 chunk = MAX_BLOCK_SIZE; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
54 rc = dsp_read_op(mode, addr, chunk); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
55 if (rc < 0) { |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
56 printf("ERROR: DSP timeout on read operation\n"); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
57 return(rc); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
58 } |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
59 api = (volatile u16 *) APIF_ADDR; |
543
947c6a443a9c
dspdump: bugfix in bigdump command
Mychaela Falconia <falcon@freecalypso.org>
parents:
542
diff
changeset
|
60 for (n = chunk; n; n--) { |
542
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
61 if (!(addr & 0xF)) |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
62 printf("%05x : ", addr); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
63 printf("%04x%c", *api++, ((addr&15)==15)?'\n':' '); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
64 addr++; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
65 } |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
66 } |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
67 putchar('\n'); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
68 return(0); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
69 } |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
70 |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
71 void |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
72 cmd_bigdump(argbulk) |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
73 char *argbulk; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
74 { |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
75 char *argv[4]; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
76 u_long mode, addr, len; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
77 int rc; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
78 |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
79 if (parse_args(argbulk, 3, 3, argv, 0) < 0) |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
80 return; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
81 if (parse_hexarg(argv[0], 4, &mode) < 0) { |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
82 printf("ERROR: mode must be a valid 16-bit hex value\n"); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
83 return; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
84 } |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
85 if (parse_hexarg(argv[1], 8, &addr) < 0) { |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
86 printf("ERROR: addr must be a valid 32-bit hex value\n"); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
87 return; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
88 } |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
89 if (parse_hexarg(argv[2], 8, &len) < 0) { |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
90 printf("ERROR: len must be a valid 32-bit hex value\n"); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
91 return; |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
92 } |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
93 rc = boot_dsp_dump_agent(); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
94 if (rc < 0) |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
95 return; /* error msg already printed */ |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
96 dump_large_section((u16)mode, (u32)addr, (u32)len); |
b95b251b33eb
dspdump: bigdump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
540
diff
changeset
|
97 } |
544
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
98 |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
99 static struct rom_section { |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
100 char *name; |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
101 u32 addr; |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
102 u32 size; |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
103 int mode; |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
104 } rom_sections[] = { |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
105 { "Registers", 0x00000, 0x0060, BL_MODE_DATA_READ }, |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
106 { "DROM", 0x09000, 0x5000, BL_MODE_DROM_READ }, |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
107 { "PDROM", 0x0e000, 0x2000, BL_MODE_PROM_READ }, |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
108 { "PROM0", 0x07000, 0x7000, BL_MODE_PROM_READ }, |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
109 { "PROM1", 0x18000, 0x8000, BL_MODE_PROM_READ }, |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
110 { "PROM2", 0x28000, 0x8000, BL_MODE_PROM_READ }, |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
111 { "PROM3", 0x38000, 0x2000, BL_MODE_PROM_READ }, |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
112 { 0, 0, 0, -1 } |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
113 }; |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
114 |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
115 void |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
116 cmd_fulldump() |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
117 { |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
118 struct rom_section *tp; |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
119 int rc; |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
120 |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
121 rc = boot_dsp_dump_agent(); |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
122 if (rc < 0) |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
123 return; /* error msg already printed */ |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
124 for (tp = rom_sections; tp->name; tp++) { |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
125 printf("DSP dump: %s [%05x-%05x]\n", tp->name, tp->addr, |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
126 tp->addr + tp->size - 1); |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
127 rc = dump_large_section(tp->mode, tp->addr, tp->size); |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
128 if (rc < 0) |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
129 return; /* error msg already printed */ |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
130 } |
451d8b545b11
dspdump: fulldump command implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
543
diff
changeset
|
131 } |