Merge pull request #395 from marckleinebudde/mcp251xfd-dump

mcp251xfd dump: add support for dumps created with Linux kernel >= v5.18
pull/396/head
Marc Kleine-Budde 2023-01-03 20:45:26 +01:00 committed by GitHub
commit 5aa72c5e9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 3264 additions and 340 deletions

View File

@ -60,6 +60,19 @@ mcp251xfd_dump_SOURCES = \
mcp251xfd/mcp251xfd-regmap.c \ mcp251xfd/mcp251xfd-regmap.c \
mcp251xfd/mcp251xfd.h mcp251xfd/mcp251xfd.h
EXTRA_DIST += \
mcp251xfd/99-devcoredump.rules \
mcp251xfd/data/devcoredump-canfd-v5.15.dump \
mcp251xfd/data/devcoredump-canfd.dump \
mcp251xfd/data/devcoredump-classic-can-v5.15.dump \
mcp251xfd/data/devcoredump-classic-can.dump \
mcp251xfd/data/registers-canfd-v5.15.dump \
mcp251xfd/data/registers-canfd.dump \
mcp251xfd/data/registers-classic-can-v5.15.dump \
mcp251xfd/data/registers-classic-can.dump \
mcp251xfd/devcoredump \
mcp251xfd/mcp251xfd-gen-testdata.sh
bin_PROGRAMS = \ bin_PROGRAMS = \
asc2log \ asc2log \
bcmserver \ bcmserver \
@ -106,9 +119,7 @@ EXTRA_DIST += \
autogen.sh \ autogen.sh \
can-j1939-kickstart.md \ can-j1939-kickstart.md \
can-j1939.md \ can-j1939.md \
can-tc-init-etf.sh \ can-tc-init-etf.sh
mcp251xfd/99-devcoredump.rules \
mcp251xfd/devcoredump
MAINTAINERCLEANFILES = \ MAINTAINERCLEANFILES = \
configure \ configure \

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,706 @@
000: 024b0760
004: 001c0900
008: 00050200
00c: 00020600
010: 017fce42
014: 00010000
018: 40400040
01c: 3f1a0000
020: 00000000
024: 00000000
028: 00000000
02c: 00000000
030: 00000000
034: 00000000
038: 00000000
03c: 00000003
040: 03000029
044: 00000000
048: 00000024
04c: 00000000
050: 00600080
054: 00000005
058: 00000030
05c: e3600090
060: 00000307
064: 00000108
068: ef000029
06c: 00000300
070: 00000234
074: 00600000
078: 00000000
07c: 00000610
080: 00600000
084: 00000000
088: 00000620
08c: 00600000
090: 00000000
094: 00000630
098: 00600000
09c: 00000000
0a0: 00000640
0a4: 00600000
0a8: 00000000
0ac: 00000650
0b0: 00600000
0b4: 00000000
0b8: 00000660
0bc: 00600000
0c0: 00000000
0c4: 00000670
0c8: 00600000
0cc: 00000000
0d0: 00000680
0d4: 00600000
0d8: 00000000
0dc: 00000690
0e0: 00600000
0e4: 00000000
0e8: 000006a0
0ec: 00600000
0f0: 00000000
0f4: 000006b0
0f8: 00600000
0fc: 00000000
100: 000006c0
104: 00600000
108: 00000000
10c: 000006d0
110: 00600000
114: 00000000
118: 000006e0
11c: 00600000
120: 00000000
124: 000006f0
128: 00600000
12c: 00000000
130: 00000700
134: 00600000
138: 00000000
13c: 00000710
140: 00600000
144: 00000000
148: 00000720
14c: 00600000
150: 00000000
154: 00000730
158: 00600000
15c: 00000000
160: 00000740
164: 00600000
168: 00000000
16c: 00000750
170: 00600000
174: 00000000
178: 00000760
17c: 00600000
180: 00000000
184: 00000770
188: 00600000
18c: 00000000
190: 00000780
194: 00600000
198: 00000000
19c: 00000790
1a0: 00600000
1a4: 00000000
1a8: 000007a0
1ac: 00600000
1b0: 00000000
1b4: 000007b0
1b8: 00600000
1bc: 00000000
1c0: 000007c0
1c4: 00600000
1c8: 00000000
1cc: 000007d0
1d0: 00000082
1d4: 00000000
1d8: 00000000
1dc: 00000000
1e0: 00000000
1e4: 00000000
1e8: 00000000
1ec: 00000000
1f0: 00000000
1f4: 00000000
1f8: 00000000
1fc: 00000000
200: 00000000
204: 00000000
208: 00000000
20c: 00000000
210: 00000000
214: 00000000
218: 00000000
21c: 00000000
220: 00000000
224: 00000000
228: 00000000
22c: 00000000
230: 00000000
234: 00000000
238: 00000000
23c: 00000000
240: 00000000
244: 00000000
248: 00000000
24c: 00000000
250: 00000000
254: 00000000
258: 00000000
25c: 00000000
260: 00000000
264: 00000000
268: 00000000
26c: 00000000
270: 00000000
274: 00000000
278: 00000000
27c: 00000000
280: 00000000
284: 00000000
288: 00000000
28c: 00000000
290: 00000000
294: 00000000
298: 00000000
29c: 00000000
2a0: 00000000
2a4: 00000000
2a8: 00000000
2ac: 00000000
2b0: 00000000
2b4: 00000000
2b8: 00000000
2bc: 00000000
2c0: 00000000
2c4: 00000000
2c8: 00000000
2cc: 00000000
2d0: 00000000
2d4: 00000000
2d8: 00000000
2dc: 00000000
2e0: 00000000
2e4: 00000000
2e8: 00000000
2ec: 00000000
400: 00000002
404: 00000008
408: 005897d8
40c: 00000002
410: 00000208
414: 00daf340
418: 00000002
41c: 00000408
420: 01585768
424: 00000000
428: 00000000
42c: 00000000
430: 00000002
434: 00000008
438: 00000000
43c: 00000000
440: 00000000
444: 00000000
448: 00000000
44c: 00000000
450: 00000000
454: 00000000
458: 00000000
45c: 00000000
460: 00000000
464: 00000000
468: 00000000
46c: 00000000
470: 00000000
474: 00000000
478: 00000002
47c: 00000208
480: 00000001
484: 00000000
488: 00000000
48c: 00000000
490: 00000000
494: 00000000
498: 00000000
49c: 00000000
4a0: 00000000
4a4: 00000000
4a8: 00000000
4ac: 00000000
4b0: 00000000
4b4: 00000000
4b8: 00000000
4bc: 00000000
4c0: 00000002
4c4: 00000408
4c8: 00000002
4cc: 00000000
4d0: 00000000
4d4: 00000000
4d8: 00000000
4dc: 00000000
4e0: 00000000
4e4: 00000000
4e8: 00000000
4ec: 00000000
4f0: 00000000
4f4: 00000000
4f8: 00000000
4fc: 00000000
500: 00000000
504: 00000000
508: 00000000
50c: 00000000
510: 00000000
514: 00000000
518: 00000000
51c: 00000000
520: 00000000
524: 00000000
528: 00000000
52c: 00000000
530: 00000000
534: 00000000
538: 00000000
53c: 00000000
540: 00000000
544: 00000000
548: 00000000
54c: 00000000
550: 00000002
554: 00000008
558: 005897d8
55c: 00000000
560: 00000000
564: 00000000
568: 00000000
56c: 00000000
570: 00000000
574: 00000000
578: 00000000
57c: 00000000
580: 00000000
584: 00000000
588: 00000000
58c: 00000000
590: 00000000
594: 00000000
598: 00000000
59c: 00000002
5a0: 00000008
5a4: 00daf340
5a8: 00000001
5ac: 00000000
5b0: 00000000
5b4: 00000000
5b8: 00000000
5bc: 00000000
5c0: 00000000
5c4: 00000000
5c8: 00000000
5cc: 00000000
5d0: 00000000
5d4: 00000000
5d8: 00000000
5dc: 00000000
5e0: 00000000
5e4: 00000000
5e8: 00000002
5ec: 00000008
5f0: 01585768
5f4: 00000002
5f8: 00000000
5fc: 00000000
600: 00000000
604: 00000000
608: 00000000
60c: 00000000
610: 00000000
614: 00000000
618: 00000000
61c: 00000000
620: 00000000
624: 00000000
628: 00000000
62c: 00000000
630: 00000000
634: 00000000
638: 00000000
63c: 00000000
640: 00000000
644: 00000000
648: 00000000
64c: 00000000
650: 00000000
654: 00000000
658: 00000000
65c: 00000000
660: 00000000
664: 00000000
668: 00000000
66c: 00000000
670: 00000000
674: 00000000
678: 00000000
67c: 00000000
680: 00000000
684: 00000000
688: 00000000
68c: 00000000
690: 00000000
694: 00000000
698: 00000000
69c: 00000000
6a0: 00000000
6a4: 00000000
6a8: 00000000
6ac: 00000000
6b0: 00000000
6b4: 00000000
6b8: 00000000
6bc: 00000000
6c0: 00000000
6c4: 00000000
6c8: 00000000
6cc: 00000000
6d0: 00000000
6d4: 00000000
6d8: 00000000
6dc: 00000000
6e0: 00000000
6e4: 00000000
6e8: 00000000
6ec: 00000000
6f0: 00000000
6f4: 00000000
6f8: 00000000
6fc: 00000000
700: 00000000
704: 00000000
708: 00000000
70c: 00000000
710: 00000000
714: 00000000
718: 00000000
71c: 00000000
720: 00000000
724: 00000000
728: 00000000
72c: 00000000
730: 00000000
734: 00000000
738: 00000000
73c: 00000000
740: 00000000
744: 00000000
748: 00000000
74c: 00000000
750: 00000000
754: 00000000
758: 00000000
75c: 00000000
760: 00000000
764: 00000000
768: 00000000
76c: 00000000
770: 00000000
774: 00000000
778: 00000000
77c: 00000000
780: 00000000
784: 00000000
788: 00000000
78c: 00000000
790: 00000000
794: 00000000
798: 00000000
79c: 00000000
7a0: 00000000
7a4: 00000000
7a8: 00000000
7ac: 00000000
7b0: 00000000
7b4: 00000000
7b8: 00000000
7bc: 00000000
7c0: 00000000
7c4: 00000000
7c8: 00000000
7cc: 00000000
7d0: 00000000
7d4: 00000000
7d8: 00000000
7dc: 00000000
7e0: 00000000
7e4: 00000000
7e8: 00000000
7ec: 00000000
7f0: 00000000
7f4: 00000000
7f8: 00000000
7fc: 00000000
800: 00000000
804: 00000000
808: 00000000
80c: 00000000
810: 00000000
814: 00000000
818: 00000000
81c: 00000000
820: 00000000
824: 00000000
828: 00000000
82c: 00000000
830: 00000000
834: 00000000
838: 00000000
83c: 00000000
840: 00000000
844: 00000000
848: 00000000
84c: 00000000
850: 00000000
854: 00000000
858: 00000000
85c: 00000000
860: 00000000
864: 00000000
868: 00000000
86c: 00000000
870: 00000000
874: 00000000
878: 00000000
87c: 00000000
880: 00000000
884: 00000000
888: 00000000
88c: 00000000
890: 00000000
894: 00000000
898: 00000000
89c: 00000000
8a0: 00000000
8a4: 00000000
8a8: 00000000
8ac: 00000000
8b0: 00000000
8b4: 00000000
8b8: 00000000
8bc: 00000000
8c0: 00000000
8c4: 00000000
8c8: 00000000
8cc: 00000000
8d0: 00000000
8d4: 00000000
8d8: 00000000
8dc: 00000000
8e0: 00000000
8e4: 00000000
8e8: 00000000
8ec: 00000000
8f0: 00000000
8f4: 00000000
8f8: 00000000
8fc: 00000000
900: 00000000
904: 00000000
908: 00000000
90c: 00000000
910: 00000000
914: 00000000
918: 00000000
91c: 00000000
920: 00000000
924: 00000000
928: 00000000
92c: 00000000
930: 00000000
934: 00000000
938: 00000000
93c: 00000000
940: 00000000
944: 00000000
948: 00000000
94c: 00000000
950: 00000000
954: 00000000
958: 00000000
95c: 00000000
960: 00000000
964: 00000000
968: 00000000
96c: 00000000
970: 00000000
974: 00000000
978: 00000000
97c: 00000000
980: 00000000
984: 00000000
988: 00000000
98c: 00000000
990: 00000000
994: 00000000
998: 00000000
99c: 00000000
9a0: 00000000
9a4: 00000000
9a8: 00000000
9ac: 00000000
9b0: 00000000
9b4: 00000000
9b8: 00000000
9bc: 00000000
9c0: 00000000
9c4: 00000000
9c8: 00000000
9cc: 00000000
9d0: 00000000
9d4: 00000000
9d8: 00000000
9dc: 00000000
9e0: 00000000
9e4: 00000000
9e8: 00000000
9ec: 00000000
9f0: 00000000
9f4: 00000000
9f8: 00000000
9fc: 00000000
a00: 00000000
a04: 00000000
a08: 00000000
a0c: 00000000
a10: 00000000
a14: 00000000
a18: 00000000
a1c: 00000000
a20: 00000000
a24: 00000000
a28: 00000000
a2c: 00000000
a30: 00000000
a34: 00000000
a38: 00000000
a3c: 00000000
a40: 00000000
a44: 00000000
a48: 00000000
a4c: 00000000
a50: 00000000
a54: 00000000
a58: 00000000
a5c: 00000000
a60: 00000000
a64: 00000000
a68: 00000000
a6c: 00000000
a70: 00000000
a74: 00000000
a78: 00000000
a7c: 00000000
a80: 00000000
a84: 00000000
a88: 00000000
a8c: 00000000
a90: 00000000
a94: 00000000
a98: 00000000
a9c: 00000000
aa0: 00000000
aa4: 00000000
aa8: 00000000
aac: 00000000
ab0: 00000000
ab4: 00000000
ab8: 00000000
abc: 00000000
ac0: 00000000
ac4: 00000000
ac8: 00000000
acc: 00000000
ad0: 00000000
ad4: 00000000
ad8: 00000000
adc: 00000000
ae0: 00000000
ae4: 00000000
ae8: 00000000
aec: 00000000
af0: 00000000
af4: 00000000
af8: 00000000
afc: 00000000
b00: 00000000
b04: 00000000
b08: 00000000
b0c: 00000000
b10: 00000000
b14: 00000000
b18: 00000000
b1c: 00000000
b20: 00000000
b24: 00000000
b28: 00000000
b2c: 00000000
b30: 00000000
b34: 00000000
b38: 00000000
b3c: 00000000
b40: 00000000
b44: 00000000
b48: 00000000
b4c: 00000000
b50: 00000000
b54: 00000000
b58: 00000000
b5c: 00000000
b60: 00000000
b64: 00000000
b68: 00000000
b6c: 00000000
b70: 00000000
b74: 00000000
b78: 00000000
b7c: 00000000
b80: 00000000
b84: 00000000
b88: 00000000
b8c: 00000000
b90: 00000000
b94: 00000000
b98: 00000000
b9c: 00000000
ba0: 00000000
ba4: 00000000
ba8: 00000000
bac: 00000000
bb0: 00000000
bb4: 00000000
bb8: 00000000
bbc: 00000000
bc0: 00000000
bc4: 00000000
bc8: 00000000
bcc: 00000000
bd0: 00000000
bd4: 00000000
bd8: 00000000
bdc: 00000000
be0: 00000000
be4: 00000000
be8: 00000000
bec: 00000000
bf0: 00000000
bf4: 00000000
bf8: 00000000
bfc: 00000000
e00: 00000468
e04: 03030003
e08: 03000305
e0c: 00000007
e10: 00000000
e14: 00000000

View File

@ -0,0 +1,706 @@
000: 05ab0760
004: 001c0900
008: 00050200
00c: 00020600
010: 012937f8
014: 00010000
018: 40400040
01c: 3f1a0000
020: 00000000
024: 00000000
028: 00000000
02c: 00000000
030: 00000000
034: 00000000
038: 00000000
03c: 00000003
040: 03000029
044: 00000000
048: 00000024
04c: 00000000
050: 00600080
054: 00000005
058: 00000030
05c: ef000029
060: 00000300
064: 00000114
068: e3000029
06c: 00000000
070: 000004f0
074: e3600090
078: 00000307
07c: 000006f8
080: 00600000
084: 00000000
088: 00000740
08c: 00600000
090: 00000000
094: 00000750
098: 00600000
09c: 00000000
0a0: 00000760
0a4: 00600000
0a8: 00000000
0ac: 00000770
0b0: 00600000
0b4: 00000000
0b8: 00000780
0bc: 00600000
0c0: 00000000
0c4: 00000790
0c8: 00600000
0cc: 00000000
0d0: 000007a0
0d4: 00600000
0d8: 00000000
0dc: 000007b0
0e0: 00600000
0e4: 00000000
0e8: 000007c0
0ec: 00600000
0f0: 00000000
0f4: 000007d0
0f8: 00600000
0fc: 00000000
100: 000007e0
104: 00600000
108: 00000000
10c: 000007f0
110: 00600000
114: 00000000
118: 00000800
11c: 00600000
120: 00000000
124: 00000810
128: 00600000
12c: 00000000
130: 00000820
134: 00600000
138: 00000000
13c: 00000830
140: 00600000
144: 00000000
148: 00000840
14c: 00600000
150: 00000000
154: 00000850
158: 00600000
15c: 00000000
160: 00000860
164: 00600000
168: 00000000
16c: 00000870
170: 00600000
174: 00000000
178: 00000880
17c: 00600000
180: 00000000
184: 00000890
188: 00600000
18c: 00000000
190: 000008a0
194: 00600000
198: 00000000
19c: 000008b0
1a0: 00600000
1a4: 00000000
1a8: 000008c0
1ac: 00600000
1b0: 00000000
1b4: 000008d0
1b8: 00600000
1bc: 00000000
1c0: 000008e0
1c4: 00600000
1c8: 00000000
1cc: 000008f0
1d0: 00008281
1d4: 00000000
1d8: 00000000
1dc: 00000000
1e0: 00000000
1e4: 00000000
1e8: 00000000
1ec: 00000000
1f0: 00000000
1f4: 00000000
1f8: 00000000
1fc: 00000000
200: 00000000
204: 00000000
208: 00000000
20c: 00000000
210: 00000000
214: 00000000
218: 00000000
21c: 00000000
220: 00000000
224: 00000000
228: 00000000
22c: 00000000
230: 00000000
234: 00000000
238: 00000000
23c: 00000000
240: 00000000
244: 00000000
248: 00000000
24c: 00000000
250: 00000000
254: 00000000
258: 00000000
25c: 00000000
260: 00000000
264: 00000000
268: 00000000
26c: 00000000
270: 00000000
274: 00000000
278: 00000000
27c: 00000000
280: 00000000
284: 00000000
288: 00000000
28c: 00000000
290: 00000000
294: 00000000
298: 00000000
29c: 00000000
2a0: 00000000
2a4: 00000000
2a8: 00000000
2ac: 00000000
2b0: 00000000
2b4: 00000000
2b8: 00000000
2bc: 00000000
2c0: 00000000
2c4: 00000000
2c8: 00000000
2cc: 00000000
2d0: 00000000
2d4: 00000000
2d8: 00000000
2dc: 00000000
2e0: 00000000
2e4: 00000000
2e8: 00000000
2ec: 00000000
400: 00000002
404: 00000008
408: 002badca
40c: 00000002
410: 00000208
414: 00a5e13a
418: 00000002
41c: 00000408
420: 01202382
424: 00000000
428: 00000000
42c: 00000000
430: 00000002
434: 00000008
438: 002badca
43c: 00000000
440: 00000000
444: 00000000
448: 00000000
44c: 00000000
450: 00000000
454: 00000000
458: 00000000
45c: 00000000
460: 00000000
464: 00000000
468: 00000000
46c: 00000000
470: 00000000
474: 00000000
478: 00000000
47c: 00000002
480: 00000008
484: 00a5e13a
488: 00000001
48c: 00000000
490: 00000000
494: 00000000
498: 00000000
49c: 00000000
4a0: 00000000
4a4: 00000000
4a8: 00000000
4ac: 00000000
4b0: 00000000
4b4: 00000000
4b8: 00000000
4bc: 00000000
4c0: 00000000
4c4: 00000000
4c8: 00000002
4cc: 00000008
4d0: 01202382
4d4: 00000002
4d8: 00000000
4dc: 00000000
4e0: 00000000
4e4: 00000000
4e8: 00000000
4ec: 00000000
4f0: 00000000
4f4: 00000000
4f8: 00000000
4fc: 00000000
500: 00000000
504: 00000000
508: 00000000
50c: 00000000
510: 00000000
514: 00000000
518: 00000000
51c: 00000000
520: 00000000
524: 00000000
528: 00000000
52c: 00000000
530: 00000000
534: 00000000
538: 00000000
53c: 00000000
540: 00000000
544: 00000000
548: 00000000
54c: 00000000
550: 00000000
554: 00000000
558: 00000000
55c: 00000000
560: 00000000
564: 00000000
568: 00000000
56c: 00000000
570: 00000000
574: 00000000
578: 00000000
57c: 00000000
580: 00000000
584: 00000000
588: 00000000
58c: 00000000
590: 00000000
594: 00000000
598: 00000000
59c: 00000000
5a0: 00000000
5a4: 00000000
5a8: 00000000
5ac: 00000000
5b0: 00000000
5b4: 00000000
5b8: 00000000
5bc: 00000000
5c0: 00000000
5c4: 00000000
5c8: 00000000
5cc: 00000000
5d0: 00000000
5d4: 00000000
5d8: 00000000
5dc: 00000000
5e0: 00000000
5e4: 00000000
5e8: 00000000
5ec: 00000000
5f0: 00000000
5f4: 00000000
5f8: 00000000
5fc: 00000000
600: 00000000
604: 00000000
608: 00000000
60c: 00000000
610: 00000000
614: 00000000
618: 00000000
61c: 00000000
620: 00000000
624: 00000000
628: 00000000
62c: 00000000
630: 00000000
634: 00000000
638: 00000000
63c: 00000000
640: 00000000
644: 00000000
648: 00000000
64c: 00000000
650: 00000000
654: 00000000
658: 00000000
65c: 00000000
660: 00000000
664: 00000000
668: 00000000
66c: 00000000
670: 00000000
674: 00000000
678: 00000000
67c: 00000000
680: 00000000
684: 00000000
688: 00000000
68c: 00000000
690: 00000000
694: 00000000
698: 00000000
69c: 00000000
6a0: 00000000
6a4: 00000000
6a8: 00000000
6ac: 00000000
6b0: 00000000
6b4: 00000000
6b8: 00000000
6bc: 00000000
6c0: 00000000
6c4: 00000000
6c8: 00000000
6cc: 00000000
6d0: 00000000
6d4: 00000000
6d8: 00000000
6dc: 00000000
6e0: 00000000
6e4: 00000000
6e8: 00000000
6ec: 00000000
6f0: 00000000
6f4: 00000000
6f8: 00000000
6fc: 00000000
700: 00000000
704: 00000000
708: 00000000
70c: 00000000
710: 00000000
714: 00000000
718: 00000000
71c: 00000000
720: 00000000
724: 00000000
728: 00000000
72c: 00000000
730: 00000000
734: 00000000
738: 00000000
73c: 00000000
740: 00000000
744: 00000000
748: 00000000
74c: 00000000
750: 00000000
754: 00000000
758: 00000000
75c: 00000000
760: 00000000
764: 00000000
768: 00000000
76c: 00000000
770: 00000000
774: 00000000
778: 00000000
77c: 00000000
780: 00000000
784: 00000000
788: 00000000
78c: 00000000
790: 00000000
794: 00000000
798: 00000000
79c: 00000000
7a0: 00000000
7a4: 00000000
7a8: 00000000
7ac: 00000000
7b0: 00000000
7b4: 00000000
7b8: 00000000
7bc: 00000000
7c0: 00000000
7c4: 00000000
7c8: 00000000
7cc: 00000000
7d0: 00000000
7d4: 00000000
7d8: 00000000
7dc: 00000000
7e0: 00000000
7e4: 00000000
7e8: 00000000
7ec: 00000000
7f0: 00000000
7f4: 00000000
7f8: 00000000
7fc: 00000000
800: 00000000
804: 00000000
808: 00000000
80c: 00000000
810: 00000000
814: 00000000
818: 00000000
81c: 00000000
820: 00000000
824: 00000000
828: 00000000
82c: 00000000
830: 00000000
834: 00000000
838: 00000000
83c: 00000000
840: 00000000
844: 00000000
848: 00000000
84c: 00000000
850: 00000000
854: 00000000
858: 00000000
85c: 00000000
860: 00000000
864: 00000000
868: 00000000
86c: 00000000
870: 00000000
874: 00000000
878: 00000000
87c: 00000000
880: 00000000
884: 00000000
888: 00000000
88c: 00000000
890: 00000000
894: 00000000
898: 00000000
89c: 00000000
8a0: 00000000
8a4: 00000000
8a8: 00000000
8ac: 00000000
8b0: 00000000
8b4: 00000000
8b8: 00000000
8bc: 00000000
8c0: 00000000
8c4: 00000000
8c8: 00000000
8cc: 00000000
8d0: 00000000
8d4: 00000000
8d8: 00000000
8dc: 00000000
8e0: 00000000
8e4: 00000000
8e8: 00000000
8ec: 00000000
8f0: 00000000
8f4: 00000000
8f8: 00000000
8fc: 00000000
900: 00000000
904: 00000000
908: 00000000
90c: 00000000
910: 00000000
914: 00000000
918: 00000000
91c: 00000000
920: 00000000
924: 00000000
928: 00000000
92c: 00000000
930: 00000000
934: 00000000
938: 00000000
93c: 00000000
940: 00000000
944: 00000000
948: 00000000
94c: 00000000
950: 00000000
954: 00000000
958: 00000000
95c: 00000000
960: 00000000
964: 00000000
968: 00000000
96c: 00000000
970: 00000000
974: 00000000
978: 00000000
97c: 00000000
980: 00000000
984: 00000000
988: 00000000
98c: 00000000
990: 00000000
994: 00000000
998: 00000000
99c: 00000000
9a0: 00000000
9a4: 00000000
9a8: 00000000
9ac: 00000000
9b0: 00000000
9b4: 00000000
9b8: 00000000
9bc: 00000000
9c0: 00000000
9c4: 00000000
9c8: 00000000
9cc: 00000000
9d0: 00000000
9d4: 00000000
9d8: 00000000
9dc: 00000000
9e0: 00000000
9e4: 00000000
9e8: 00000000
9ec: 00000000
9f0: 00000000
9f4: 00000000
9f8: 00000000
9fc: 00000000
a00: 00000000
a04: 00000000
a08: 00000000
a0c: 00000000
a10: 00000000
a14: 00000000
a18: 00000000
a1c: 00000000
a20: 00000002
a24: 00000008
a28: 00000000
a2c: 00000000
a30: 00000000
a34: 00000000
a38: 00000000
a3c: 00000000
a40: 00000000
a44: 00000000
a48: 00000000
a4c: 00000000
a50: 00000000
a54: 00000000
a58: 00000000
a5c: 00000000
a60: 00000000
a64: 00000000
a68: 00000002
a6c: 00000208
a70: 00000001
a74: 00000000
a78: 00000000
a7c: 00000000
a80: 00000000
a84: 00000000
a88: 00000000
a8c: 00000000
a90: 00000000
a94: 00000000
a98: 00000000
a9c: 00000000
aa0: 00000000
aa4: 00000000
aa8: 00000000
aac: 00000000
ab0: 00000002
ab4: 00000408
ab8: 00000002
abc: 00000000
ac0: 00000000
ac4: 00000000
ac8: 00000000
acc: 00000000
ad0: 00000000
ad4: 00000000
ad8: 00000000
adc: 00000000
ae0: 00000000
ae4: 00000000
ae8: 00000000
aec: 00000000
af0: 00000000
af4: 00000000
af8: 00000000
afc: 00000000
b00: 00000000
b04: 00000000
b08: 00000000
b0c: 00000000
b10: 00000000
b14: 00000000
b18: 00000000
b1c: 00000000
b20: 00000000
b24: 00000000
b28: 00000000
b2c: 00000000
b30: 00000000
b34: 00000000
b38: 00000000
b3c: 00000000
b40: 00000000
b44: 00000000
b48: 00000000
b4c: 00000000
b50: 00000000
b54: 00000000
b58: 00000000
b5c: 00000000
b60: 00000000
b64: 00000000
b68: 00000000
b6c: 00000000
b70: 00000000
b74: 00000000
b78: 00000000
b7c: 00000000
b80: 00000000
b84: 00000000
b88: 00000000
b8c: 00000000
b90: 00000000
b94: 00000000
b98: 00000000
b9c: 00000000
ba0: 00000000
ba4: 00000000
ba8: 00000000
bac: 00000000
bb0: 00000000
bb4: 00000000
bb8: 00000000
bbc: 00000000
bc0: 00000000
bc4: 00000000
bc8: 00000000
bcc: 00000000
bd0: 00000000
bd4: 00000000
bd8: 00000000
bdc: 00000000
be0: 00000000
be4: 00000000
be8: 00000000
bec: 00000000
bf0: 00000000
bf4: 00000000
bf8: 00000000
bfc: 00000000
e00: 00000468
e04: 03030003
e08: 03000305
e0c: 00000007
e10: 00000000
e14: 00000000

View File

@ -0,0 +1,706 @@
000: 024b0760
004: 001c0900
008: 000e0303
00c: 00021000
010: 0380d6b3
014: 00010000
018: 40400040
01c: 3f1a0000
020: 00000000
024: 00000000
028: 00000000
02c: 00000000
030: 00000000
034: 00000000
038: 00000000
03c: 00000007
040: 07000029
044: 00000000
048: 00000054
04c: 00000000
050: 00600080
054: 00000005
058: 00000060
05c: 07600090
060: 00000707
064: 000000d0
068: 1f000029
06c: 00000700
070: 0000016c
074: 00600000
078: 00000000
07c: 00000360
080: 00600000
084: 00000000
088: 00000370
08c: 00600000
090: 00000000
094: 00000380
098: 00600000
09c: 00000000
0a0: 00000390
0a4: 00600000
0a8: 00000000
0ac: 000003a0
0b0: 00600000
0b4: 00000000
0b8: 000003b0
0bc: 00600000
0c0: 00000000
0c4: 000003c0
0c8: 00600000
0cc: 00000000
0d0: 000003d0
0d4: 00600000
0d8: 00000000
0dc: 000003e0
0e0: 00600000
0e4: 00000000
0e8: 000003f0
0ec: 00600000
0f0: 00000000
0f4: 00000400
0f8: 00600000
0fc: 00000000
100: 00000410
104: 00600000
108: 00000000
10c: 00000420
110: 00600000
114: 00000000
118: 00000430
11c: 00600000
120: 00000000
124: 00000440
128: 00600000
12c: 00000000
130: 00000450
134: 00600000
138: 00000000
13c: 00000460
140: 00600000
144: 00000000
148: 00000470
14c: 00600000
150: 00000000
154: 00000480
158: 00600000
15c: 00000000
160: 00000490
164: 00600000
168: 00000000
16c: 000004a0
170: 00600000
174: 00000000
178: 000004b0
17c: 00600000
180: 00000000
184: 000004c0
188: 00600000
18c: 00000000
190: 000004d0
194: 00600000
198: 00000000
19c: 000004e0
1a0: 00600000
1a4: 00000000
1a8: 000004f0
1ac: 00600000
1b0: 00000000
1b4: 00000500
1b8: 00600000
1bc: 00000000
1c0: 00000510
1c4: 00600000
1c8: 00000000
1cc: 00000520
1d0: 00000082
1d4: 00000000
1d8: 00000000
1dc: 00000000
1e0: 00000000
1e4: 00000000
1e8: 00000000
1ec: 00000000
1f0: 00000000
1f4: 00000000
1f8: 00000000
1fc: 00000000
200: 00000000
204: 00000000
208: 00000000
20c: 00000000
210: 00000000
214: 00000000
218: 00000000
21c: 00000000
220: 00000000
224: 00000000
228: 00000000
22c: 00000000
230: 00000000
234: 00000000
238: 00000000
23c: 00000000
240: 00000000
244: 00000000
248: 00000000
24c: 00000000
250: 00000000
254: 00000000
258: 00000000
25c: 00000000
260: 00000000
264: 00000000
268: 00000000
26c: 00000000
270: 00000000
274: 00000000
278: 00000000
27c: 00000000
280: 00000000
284: 00000000
288: 00000000
28c: 00000000
290: 00000000
294: 00000000
298: 00000000
29c: 00000000
2a0: 00000000
2a4: 00000000
2a8: 00000000
2ac: 00000000
2b0: 00000000
2b4: 00000000
2b8: 00000000
2bc: 00000000
2c0: 00000000
2c4: 00000000
2c8: 00000000
2cc: 00000000
2d0: 00000000
2d4: 00000000
2d8: 00000000
2dc: 00000000
2e0: 00000000
2e4: 00000000
2e8: 00000000
2ec: 00000000
400: 00000002
404: 00000008
408: 00640279
40c: 00000002
410: 00000208
414: 00e52ec1
418: 00000002
41c: 00000408
420: 01627f61
424: 00000002
428: 00000608
42c: 01e002a1
430: 00000002
434: 00000808
438: 025f8459
43c: 00000002
440: 00000a08
444: 02dc5e61
448: 00000002
44c: 00000c08
450: 0359f7d1
454: 00000000
458: 00000000
45c: 00000000
460: 00000002
464: 00000008
468: 00000000
46c: 00000000
470: 00000002
474: 00000208
478: 00000001
47c: 00000000
480: 00000002
484: 00000408
488: 00000002
48c: 00000000
490: 00000002
494: 00000608
498: 00000003
49c: 00000000
4a0: 00000002
4a4: 00000808
4a8: 00000004
4ac: 00000000
4b0: 00000002
4b4: 00000a08
4b8: 00000005
4bc: 00000000
4c0: 00000002
4c4: 00000c08
4c8: 00000006
4cc: 00000000
4d0: 00000000
4d4: 00000000
4d8: 00000000
4dc: 00000000
4e0: 00000002
4e4: 00000008
4e8: 00640279
4ec: 00000000
4f0: 00000000
4f4: 00000002
4f8: 00000008
4fc: 00e52ec1
500: 00000001
504: 00000000
508: 00000002
50c: 00000008
510: 01627f61
514: 00000002
518: 00000000
51c: 00000002
520: 00000008
524: 01e002a1
528: 00000003
52c: 00000000
530: 00000002
534: 00000008
538: 025f8459
53c: 00000004
540: 00000000
544: 00000002
548: 00000008
54c: 02dc5e61
550: 00000005
554: 00000000
558: 00000002
55c: 00000008
560: 0359f7d1
564: 00000006
568: 00000000
56c: 00000000
570: 00000000
574: 00000000
578: 00000000
57c: 00000000
580: 00000000
584: 00000000
588: 00000000
58c: 00000000
590: 00000000
594: 00000000
598: 00000000
59c: 00000000
5a0: 00000000
5a4: 00000000
5a8: 00000000
5ac: 00000000
5b0: 00000000
5b4: 00000000
5b8: 00000000
5bc: 00000000
5c0: 00000000
5c4: 00000000
5c8: 00000000
5cc: 00000000
5d0: 00000000
5d4: 00000000
5d8: 00000000
5dc: 00000000
5e0: 00000000
5e4: 00000000
5e8: 00000000
5ec: 00000000
5f0: 00000000
5f4: 00000000
5f8: 00000000
5fc: 00000000
600: 00000000
604: 00000000
608: 00000000
60c: 00000000
610: 00000000
614: 00000000
618: 00000000
61c: 00000000
620: 00000000
624: 00000000
628: 00000000
62c: 00000000
630: 00000000
634: 00000000
638: 00000000
63c: 00000000
640: 00000000
644: 00000000
648: 00000000
64c: 00000000
650: 00000000
654: 00000000
658: 00000000
65c: 00000000
660: 00000000
664: 00000000
668: 00000000
66c: 00000000
670: 00000000
674: 00000000
678: 00000000
67c: 00000000
680: 00000000
684: 00000000
688: 00000000
68c: 00000000
690: 00000000
694: 00000000
698: 00000000
69c: 00000000
6a0: 00000000
6a4: 00000000
6a8: 00000000
6ac: 00000000
6b0: 00000000
6b4: 00000000
6b8: 00000000
6bc: 00000000
6c0: 00000000
6c4: 00000000
6c8: 00000000
6cc: 00000000
6d0: 00000000
6d4: 00000000
6d8: 00000000
6dc: 00000000
6e0: 00000000
6e4: 00000000
6e8: 00000000
6ec: 00000000
6f0: 00000000
6f4: 00000000
6f8: 00000000
6fc: 00000000
700: 00000000
704: 00000000
708: 00000000
70c: 00000000
710: 00000000
714: 00000000
718: 00000000
71c: 00000000
720: 00000000
724: 00000000
728: 00000000
72c: 00000000
730: 00000000
734: 00000000
738: 00000000
73c: 00000000
740: 00000000
744: 00000000
748: 00000000
74c: 00000000
750: 00000000
754: 00000000
758: 00000000
75c: 00000000
760: 00000000
764: 00000000
768: 00000000
76c: 00000000
770: 00000000
774: 00000000
778: 00000000
77c: 00000000
780: 00000000
784: 00000000
788: 00000000
78c: 00000000
790: 00000000
794: 00000000
798: 00000000
79c: 00000000
7a0: 00000000
7a4: 00000000
7a8: 00000000
7ac: 00000000
7b0: 00000000
7b4: 00000000
7b8: 00000000
7bc: 00000000
7c0: 00000000
7c4: 00000000
7c8: 00000000
7cc: 00000000
7d0: 00000000
7d4: 00000000
7d8: 00000000
7dc: 00000000
7e0: 00000000
7e4: 00000000
7e8: 00000000
7ec: 00000000
7f0: 00000000
7f4: 00000000
7f8: 00000000
7fc: 00000000
800: 00000000
804: 00000000
808: 00000000
80c: 00000000
810: 00000000
814: 00000000
818: 00000000
81c: 00000000
820: 00000000
824: 00000000
828: 00000000
82c: 00000000
830: 00000000
834: 00000000
838: 00000000
83c: 00000000
840: 00000000
844: 00000000
848: 00000000
84c: 00000000
850: 00000000
854: 00000000
858: 00000000
85c: 00000000
860: 00000000
864: 00000000
868: 00000000
86c: 00000000
870: 00000000
874: 00000000
878: 00000000
87c: 00000000
880: 00000000
884: 00000000
888: 00000000
88c: 00000000
890: 00000000
894: 00000000
898: 00000000
89c: 00000000
8a0: 00000000
8a4: 00000000
8a8: 00000000
8ac: 00000000
8b0: 00000000
8b4: 00000000
8b8: 00000000
8bc: 00000000
8c0: 00000000
8c4: 00000000
8c8: 00000000
8cc: 00000000
8d0: 00000000
8d4: 00000000
8d8: 00000000
8dc: 00000000
8e0: 00000000
8e4: 00000000
8e8: 00000000
8ec: 00000000
8f0: 00000000
8f4: 00000000
8f8: 00000000
8fc: 00000000
900: 00000000
904: 00000000
908: 00000000
90c: 00000000
910: 00000000
914: 00000000
918: 00000000
91c: 00000000
920: 00000000
924: 00000000
928: 00000000
92c: 00000000
930: 00000000
934: 00000000
938: 00000000
93c: 00000000
940: 00000000
944: 00000000
948: 00000000
94c: 00000000
950: 00000000
954: 00000000
958: 00000000
95c: 00000000
960: 00000000
964: 00000000
968: 00000000
96c: 00000000
970: 00000000
974: 00000000
978: 00000000
97c: 00000000
980: 00000000
984: 00000000
988: 00000000
98c: 00000000
990: 00000000
994: 00000000
998: 00000000
99c: 00000000
9a0: 00000000
9a4: 00000000
9a8: 00000000
9ac: 00000000
9b0: 00000000
9b4: 00000000
9b8: 00000000
9bc: 00000000
9c0: 00000000
9c4: 00000000
9c8: 00000000
9cc: 00000000
9d0: 00000000
9d4: 00000000
9d8: 00000000
9dc: 00000000
9e0: 00000000
9e4: 00000000
9e8: 00000000
9ec: 00000000
9f0: 00000000
9f4: 00000000
9f8: 00000000
9fc: 00000000
a00: 00000000
a04: 00000000
a08: 00000000
a0c: 00000000
a10: 00000000
a14: 00000000
a18: 00000000
a1c: 00000000
a20: 00000000
a24: 00000000
a28: 00000000
a2c: 00000000
a30: 00000000
a34: 00000000
a38: 00000000
a3c: 00000000
a40: 00000000
a44: 00000000
a48: 00000000
a4c: 00000000
a50: 00000000
a54: 00000000
a58: 00000000
a5c: 00000000
a60: 00000000
a64: 00000000
a68: 00000000
a6c: 00000000
a70: 00000000
a74: 00000000
a78: 00000000
a7c: 00000000
a80: 00000000
a84: 00000000
a88: 00000000
a8c: 00000000
a90: 00000000
a94: 00000000
a98: 00000000
a9c: 00000000
aa0: 00000000
aa4: 00000000
aa8: 00000000
aac: 00000000
ab0: 00000000
ab4: 00000000
ab8: 00000000
abc: 00000000
ac0: 00000000
ac4: 00000000
ac8: 00000000
acc: 00000000
ad0: 00000000
ad4: 00000000
ad8: 00000000
adc: 00000000
ae0: 00000000
ae4: 00000000
ae8: 00000000
aec: 00000000
af0: 00000000
af4: 00000000
af8: 00000000
afc: 00000000
b00: 00000000
b04: 00000000
b08: 00000000
b0c: 00000000
b10: 00000000
b14: 00000000
b18: 00000000
b1c: 00000000
b20: 00000000
b24: 00000000
b28: 00000000
b2c: 00000000
b30: 00000000
b34: 00000000
b38: 00000000
b3c: 00000000
b40: 00000000
b44: 00000000
b48: 00000000
b4c: 00000000
b50: 00000000
b54: 00000000
b58: 00000000
b5c: 00000000
b60: 00000000
b64: 00000000
b68: 00000000
b6c: 00000000
b70: 00000000
b74: 00000000
b78: 00000000
b7c: 00000000
b80: 00000000
b84: 00000000
b88: 00000000
b8c: 00000000
b90: 00000000
b94: 00000000
b98: 00000000
b9c: 00000000
ba0: 00000000
ba4: 00000000
ba8: 00000000
bac: 00000000
bb0: 00000000
bb4: 00000000
bb8: 00000000
bbc: 00000000
bc0: 00000000
bc4: 00000000
bc8: 00000000
bcc: 00000000
bd0: 00000000
bd4: 00000000
bd8: 00000000
bdc: 00000000
be0: 00000000
be4: 00000000
be8: 00000000
bec: 00000000
bf0: 00000000
bf4: 00000000
bf8: 00000000
bfc: 00000000
e00: 00000468
e04: 03030003
e08: 03000305
e0c: 00000007
e10: 00000000
e14: 00000000

View File

@ -0,0 +1,706 @@
000: 05ab0760
004: 001c0900
008: 000e0303
00c: 00021000
010: 03184e05
014: 00010000
018: 40400040
01c: 3f1a0000
020: 00000000
024: 00000000
028: 00000000
02c: 00000000
030: 00000000
034: 00000000
038: 00000000
03c: 00000007
040: 07000029
044: 00000000
048: 00000054
04c: 00000000
050: 00600080
054: 00000005
058: 00000060
05c: 1f000029
060: 00000700
064: 000000ec
068: 1f000029
06c: 00000000
070: 000002e0
074: 0f000029
078: 00000000
07c: 00000560
080: 07600090
084: 00000707
088: 00000710
08c: 00600000
090: 00000000
094: 00000720
098: 00600000
09c: 00000000
0a0: 00000730
0a4: 00600000
0a8: 00000000
0ac: 00000740
0b0: 00600000
0b4: 00000000
0b8: 00000750
0bc: 00600000
0c0: 00000000
0c4: 00000760
0c8: 00600000
0cc: 00000000
0d0: 00000770
0d4: 00600000
0d8: 00000000
0dc: 00000780
0e0: 00600000
0e4: 00000000
0e8: 00000790
0ec: 00600000
0f0: 00000000
0f4: 000007a0
0f8: 00600000
0fc: 00000000
100: 000007b0
104: 00600000
108: 00000000
10c: 000007c0
110: 00600000
114: 00000000
118: 000007d0
11c: 00600000
120: 00000000
124: 000007e0
128: 00600000
12c: 00000000
130: 000007f0
134: 00600000
138: 00000000
13c: 00000800
140: 00600000
144: 00000000
148: 00000810
14c: 00600000
150: 00000000
154: 00000820
158: 00600000
15c: 00000000
160: 00000830
164: 00600000
168: 00000000
16c: 00000840
170: 00600000
174: 00000000
178: 00000850
17c: 00600000
180: 00000000
184: 00000860
188: 00600000
18c: 00000000
190: 00000870
194: 00600000
198: 00000000
19c: 00000880
1a0: 00600000
1a4: 00000000
1a8: 00000890
1ac: 00600000
1b0: 00000000
1b4: 000008a0
1b8: 00600000
1bc: 00000000
1c0: 000008b0
1c4: 00600000
1c8: 00000000
1cc: 000008c0
1d0: 00838281
1d4: 00000000
1d8: 00000000
1dc: 00000000
1e0: 00000000
1e4: 00000000
1e8: 00000000
1ec: 00000000
1f0: 00000000
1f4: 00000000
1f8: 00000000
1fc: 00000000
200: 00000000
204: 00000000
208: 00000000
20c: 00000000
210: 00000000
214: 00000000
218: 00000000
21c: 00000000
220: 00000000
224: 00000000
228: 00000000
22c: 00000000
230: 00000000
234: 00000000
238: 00000000
23c: 00000000
240: 00000000
244: 00000000
248: 00000000
24c: 00000000
250: 00000000
254: 00000000
258: 00000000
25c: 00000000
260: 00000000
264: 00000000
268: 00000000
26c: 00000000
270: 00000000
274: 00000000
278: 00000000
27c: 00000000
280: 00000000
284: 00000000
288: 00000000
28c: 00000000
290: 00000000
294: 00000000
298: 00000000
29c: 00000000
2a0: 00000000
2a4: 00000000
2a8: 00000000
2ac: 00000000
2b0: 00000000
2b4: 00000000
2b8: 00000000
2bc: 00000000
2c0: 00000000
2c4: 00000000
2c8: 00000000
2cc: 00000000
2d0: 00000000
2d4: 00000000
2d8: 00000000
2dc: 00000000
2e0: 00000000
2e4: 00000000
2e8: 00000000
2ec: 00000000
400: 00000002
404: 00000008
408: 002a5227
40c: 00000002
410: 00000208
414: 00a49627
418: 00000002
41c: 00000408
420: 011edd47
424: 00000002
428: 00000608
42c: 0199149f
430: 00000002
434: 00000808
438: 021357d7
43c: 00000002
440: 00000a08
444: 028d9e07
448: 00000002
44c: 00000c08
450: 0307e45f
454: 00000000
458: 00000000
45c: 00000000
460: 00000002
464: 00000008
468: 002a5227
46c: 00000000
470: 00000000
474: 00000002
478: 00000008
47c: 00a49627
480: 00000001
484: 00000000
488: 00000002
48c: 00000008
490: 011edd47
494: 00000002
498: 00000000
49c: 00000002
4a0: 00000008
4a4: 0199149f
4a8: 00000003
4ac: 00000000
4b0: 00000002
4b4: 00000008
4b8: 021357d7
4bc: 00000004
4c0: 00000000
4c4: 00000002
4c8: 00000008
4cc: 028d9e07
4d0: 00000005
4d4: 00000000
4d8: 00000002
4dc: 00000008
4e0: 0307e45f
4e4: 00000006
4e8: 00000000
4ec: 00000000
4f0: 00000000
4f4: 00000000
4f8: 00000000
4fc: 00000000
500: 00000000
504: 00000000
508: 00000000
50c: 00000000
510: 00000000
514: 00000000
518: 00000000
51c: 00000000
520: 00000000
524: 00000000
528: 00000000
52c: 00000000
530: 00000000
534: 00000000
538: 00000000
53c: 00000000
540: 00000000
544: 00000000
548: 00000000
54c: 00000000
550: 00000000
554: 00000000
558: 00000000
55c: 00000000
560: 00000000
564: 00000000
568: 00000000
56c: 00000000
570: 00000000
574: 00000000
578: 00000000
57c: 00000000
580: 00000000
584: 00000000
588: 00000000
58c: 00000000
590: 00000000
594: 00000000
598: 00000000
59c: 00000000
5a0: 00000000
5a4: 00000000
5a8: 00000000
5ac: 00000000
5b0: 00000000
5b4: 00000000
5b8: 00000000
5bc: 00000000
5c0: 00000000
5c4: 00000000
5c8: 00000000
5cc: 00000000
5d0: 00000000
5d4: 00000000
5d8: 00000000
5dc: 00000000
5e0: 00000000
5e4: 00000000
5e8: 00000000
5ec: 00000000
5f0: 00000000
5f4: 00000000
5f8: 00000000
5fc: 00000000
600: 00000000
604: 00000000
608: 00000000
60c: 00000000
610: 00000000
614: 00000000
618: 00000000
61c: 00000000
620: 00000000
624: 00000000
628: 00000000
62c: 00000000
630: 00000000
634: 00000000
638: 00000000
63c: 00000000
640: 00000000
644: 00000000
648: 00000000
64c: 00000000
650: 00000000
654: 00000000
658: 00000000
65c: 00000000
660: 00000000
664: 00000000
668: 00000000
66c: 00000000
670: 00000000
674: 00000000
678: 00000000
67c: 00000000
680: 00000000
684: 00000000
688: 00000000
68c: 00000000
690: 00000000
694: 00000000
698: 00000000
69c: 00000000
6a0: 00000000
6a4: 00000000
6a8: 00000000
6ac: 00000000
6b0: 00000000
6b4: 00000000
6b8: 00000000
6bc: 00000000
6c0: 00000000
6c4: 00000000
6c8: 00000000
6cc: 00000000
6d0: 00000000
6d4: 00000000
6d8: 00000000
6dc: 00000000
6e0: 00000000
6e4: 00000000
6e8: 00000000
6ec: 00000000
6f0: 00000000
6f4: 00000000
6f8: 00000000
6fc: 00000000
700: 00000000
704: 00000000
708: 00000000
70c: 00000000
710: 00000000
714: 00000000
718: 00000000
71c: 00000000
720: 00000000
724: 00000000
728: 00000000
72c: 00000000
730: 00000000
734: 00000000
738: 00000000
73c: 00000000
740: 00000000
744: 00000000
748: 00000000
74c: 00000000
750: 00000000
754: 00000000
758: 00000000
75c: 00000000
760: 00000000
764: 00000000
768: 00000000
76c: 00000000
770: 00000000
774: 00000000
778: 00000000
77c: 00000000
780: 00000000
784: 00000000
788: 00000000
78c: 00000000
790: 00000000
794: 00000000
798: 00000000
79c: 00000000
7a0: 00000000
7a4: 00000000
7a8: 00000000
7ac: 00000000
7b0: 00000000
7b4: 00000000
7b8: 00000000
7bc: 00000000
7c0: 00000000
7c4: 00000000
7c8: 00000000
7cc: 00000000
7d0: 00000000
7d4: 00000000
7d8: 00000000
7dc: 00000000
7e0: 00000000
7e4: 00000000
7e8: 00000000
7ec: 00000000
7f0: 00000000
7f4: 00000000
7f8: 00000000
7fc: 00000000
800: 00000000
804: 00000000
808: 00000000
80c: 00000000
810: 00000000
814: 00000000
818: 00000000
81c: 00000000
820: 00000000
824: 00000000
828: 00000000
82c: 00000000
830: 00000000
834: 00000000
838: 00000000
83c: 00000000
840: 00000000
844: 00000000
848: 00000000
84c: 00000000
850: 00000000
854: 00000000
858: 00000000
85c: 00000000
860: 00000000
864: 00000000
868: 00000000
86c: 00000000
870: 00000000
874: 00000000
878: 00000000
87c: 00000000
880: 00000000
884: 00000000
888: 00000000
88c: 00000000
890: 00000000
894: 00000000
898: 00000000
89c: 00000000
8a0: 00000000
8a4: 00000000
8a8: 00000000
8ac: 00000000
8b0: 00000000
8b4: 00000000
8b8: 00000000
8bc: 00000000
8c0: 00000000
8c4: 00000000
8c8: 00000000
8cc: 00000000
8d0: 00000000
8d4: 00000000
8d8: 00000000
8dc: 00000000
8e0: 00000000
8e4: 00000000
8e8: 00000000
8ec: 00000000
8f0: 00000000
8f4: 00000000
8f8: 00000000
8fc: 00000000
900: 00000000
904: 00000000
908: 00000000
90c: 00000000
910: 00000000
914: 00000000
918: 00000000
91c: 00000000
920: 00000000
924: 00000000
928: 00000000
92c: 00000000
930: 00000000
934: 00000000
938: 00000000
93c: 00000000
940: 00000000
944: 00000000
948: 00000000
94c: 00000000
950: 00000000
954: 00000000
958: 00000000
95c: 00000000
960: 00000000
964: 00000000
968: 00000000
96c: 00000000
970: 00000000
974: 00000000
978: 00000000
97c: 00000000
980: 00000000
984: 00000000
988: 00000000
98c: 00000000
990: 00000000
994: 00000000
998: 00000000
99c: 00000000
9a0: 00000000
9a4: 00000000
9a8: 00000000
9ac: 00000000
9b0: 00000000
9b4: 00000000
9b8: 00000000
9bc: 00000000
9c0: 00000000
9c4: 00000000
9c8: 00000000
9cc: 00000000
9d0: 00000000
9d4: 00000000
9d8: 00000000
9dc: 00000000
9e0: 00000000
9e4: 00000000
9e8: 00000000
9ec: 00000000
9f0: 00000000
9f4: 00000000
9f8: 00000000
9fc: 00000000
a00: 00000000
a04: 00000000
a08: 00000000
a0c: 00000000
a10: 00000000
a14: 00000000
a18: 00000000
a1c: 00000000
a20: 00000000
a24: 00000000
a28: 00000000
a2c: 00000000
a30: 00000000
a34: 00000000
a38: 00000000
a3c: 00000000
a40: 00000000
a44: 00000000
a48: 00000000
a4c: 00000000
a50: 00000000
a54: 00000000
a58: 00000000
a5c: 00000000
a60: 00000000
a64: 00000000
a68: 00000000
a6c: 00000000
a70: 00000000
a74: 00000000
a78: 00000000
a7c: 00000000
a80: 00000000
a84: 00000000
a88: 00000000
a8c: 00000000
a90: 00000000
a94: 00000000
a98: 00000000
a9c: 00000000
aa0: 00000002
aa4: 00000008
aa8: 00000000
aac: 00000000
ab0: 00000002
ab4: 00000208
ab8: 00000001
abc: 00000000
ac0: 00000002
ac4: 00000408
ac8: 00000002
acc: 00000000
ad0: 00000002
ad4: 00000608
ad8: 00000003
adc: 00000000
ae0: 00000002
ae4: 00000808
ae8: 00000004
aec: 00000000
af0: 00000002
af4: 00000a08
af8: 00000005
afc: 00000000
b00: 00000002
b04: 00000c08
b08: 00000006
b0c: 00000000
b10: 00000000
b14: 00000000
b18: 00000000
b1c: 00000000
b20: 00000000
b24: 00000000
b28: 00000000
b2c: 00000000
b30: 00000000
b34: 00000000
b38: 00000000
b3c: 00000000
b40: 00000000
b44: 00000000
b48: 00000000
b4c: 00000000
b50: 00000000
b54: 00000000
b58: 00000000
b5c: 00000000
b60: 00000000
b64: 00000000
b68: 00000000
b6c: 00000000
b70: 00000000
b74: 00000000
b78: 00000000
b7c: 00000000
b80: 00000000
b84: 00000000
b88: 00000000
b8c: 00000000
b90: 00000000
b94: 00000000
b98: 00000000
b9c: 00000000
ba0: 00000000
ba4: 00000000
ba8: 00000000
bac: 00000000
bb0: 00000000
bb4: 00000000
bb8: 00000000
bbc: 00000000
bc0: 00000000
bc4: 00000000
bc8: 00000000
bcc: 00000000
bd0: 00000000
bd4: 00000000
bd8: 00000000
bdc: 00000000
be0: 00000000
be4: 00000000
be8: 00000000
bec: 00000000
bf0: 00000000
bf4: 00000000
bf8: 00000000
bfc: 00000000
e00: 00000468
e04: 03030003
e08: 03000305
e0c: 00000007
e10: 00000000
e14: 00000000

View File

@ -21,7 +21,6 @@
#include "mcp251xfd.h" #include "mcp251xfd.h"
#include "mcp251xfd-dump-userspace.h" #include "mcp251xfd-dump-userspace.h"
struct mcp251xfd_dump_iter { struct mcp251xfd_dump_iter {
const void *start; const void *start;
const struct mcp251xfd_dump_object_header *hdr; const struct mcp251xfd_dump_object_header *hdr;
@ -29,20 +28,20 @@ struct mcp251xfd_dump_iter {
const void *object_end; const void *object_end;
}; };
static __attribute__((__unused__)) const char * const char *
get_object_type_str(enum mcp251xfd_dump_object_type object_type) get_object_type_str(enum mcp251xfd_dump_object_type object_type)
{ {
switch (object_type) { switch (object_type) {
case MCP251XFD_DUMP_OBJECT_TYPE_REG: case MCP251XFD_DUMP_OBJECT_TYPE_REG:
return "reg"; return "REG";
case MCP251XFD_DUMP_OBJECT_TYPE_TEF: case MCP251XFD_DUMP_OBJECT_TYPE_TEF:
return "tef"; return "TEF";
case MCP251XFD_DUMP_OBJECT_TYPE_RX: case MCP251XFD_DUMP_OBJECT_TYPE_RX:
return "rx"; return "RX";
case MCP251XFD_DUMP_OBJECT_TYPE_TX: case MCP251XFD_DUMP_OBJECT_TYPE_TX:
return "tx"; return "TX";
case MCP251XFD_DUMP_OBJECT_TYPE_END: case MCP251XFD_DUMP_OBJECT_TYPE_END:
return "end"; return "END";
default: default:
return "<unknown>"; return "<unknown>";
} }
@ -86,7 +85,7 @@ do_dev_coredump_read_reg(const struct mcp251xfd_priv *priv,
reg = le32toh(object->reg); reg = le32toh(object->reg);
val = le32toh(object->val); val = le32toh(object->val);
pr_debug("%s: object=0x%04zx reg=0x%04x - val=0x%08x\n", pr_debug("%s: offset=0x%04zx reg=0x%04x - val=0x%08x\n",
__func__, __func__,
(void *)object - iter->start, (void *)object - iter->start,
reg, val); reg, val);
@ -116,7 +115,7 @@ do_dev_coredump_read_ring(const struct mcp251xfd_priv *priv,
key = le32toh(object->reg); key = le32toh(object->reg);
val = le32toh(object->val); val = le32toh(object->val);
pr_debug("%s: reg=0x%04zx key=0x%02x: %8s - val=0x%08x\n", pr_debug("%s: offset=0x%04zx key=0x%02x: %8s - val=0x%08x\n",
__func__, __func__,
(void *)object - iter->start, (void *)object - iter->start,
key, get_ring_key_str(key), val); key, get_ring_key_str(key), val);
@ -144,7 +143,7 @@ do_dev_coredump_read_ring(const struct mcp251xfd_priv *priv,
ring->obj_size = val; ring->obj_size = val;
break; break;
default: default:
return -EINVAL; continue;
} }
} }
@ -167,6 +166,7 @@ do_dev_coredump_read(struct mcp251xfd_priv *priv,
le32toh(iter->hdr->magic) == MCP251XFD_DUMP_MAGIC) { le32toh(iter->hdr->magic) == MCP251XFD_DUMP_MAGIC) {
const struct mcp251xfd_dump_object_header *hdr = iter->hdr; const struct mcp251xfd_dump_object_header *hdr = iter->hdr;
enum mcp251xfd_dump_object_type object_type; enum mcp251xfd_dump_object_type object_type;
struct mcp251xfd_ring ring;
size_t object_offset, object_len; size_t object_offset, object_len;
int err; int err;
@ -180,6 +180,8 @@ do_dev_coredump_read(struct mcp251xfd_priv *priv,
iter->object_start = iter->start + object_offset; iter->object_start = iter->start + object_offset;
iter->object_end = iter->object_start + object_len; iter->object_end = iter->object_start + object_len;
mcp251xfd_dump_ring_init(&ring);
pr_debug("%s: hdr=0x%04zx type=0x%08x: %8s - offset=0x%04zx len=0x%04zx end=0x%04zx\n", pr_debug("%s: hdr=0x%04zx type=0x%08x: %8s - offset=0x%04zx len=0x%04zx end=0x%04zx\n",
__func__, __func__,
(void *)iter->hdr - iter->start, (void *)iter->hdr - iter->start,
@ -191,13 +193,17 @@ do_dev_coredump_read(struct mcp251xfd_priv *priv,
err = do_dev_coredump_read_reg(priv, iter, mem); err = do_dev_coredump_read_reg(priv, iter, mem);
break; break;
case MCP251XFD_DUMP_OBJECT_TYPE_TEF: case MCP251XFD_DUMP_OBJECT_TYPE_TEF:
err = do_dev_coredump_read_ring(priv, iter, priv->tef);
break;
case MCP251XFD_DUMP_OBJECT_TYPE_RX: case MCP251XFD_DUMP_OBJECT_TYPE_RX:
err = do_dev_coredump_read_ring(priv, iter, priv->rx);
break;
case MCP251XFD_DUMP_OBJECT_TYPE_TX: case MCP251XFD_DUMP_OBJECT_TYPE_TX:
err = do_dev_coredump_read_ring(priv, iter, priv->tx); err = do_dev_coredump_read_ring(priv, iter, &ring);
if (err)
return err;
if (ring.fifo_nr >= ARRAY_SIZE(priv->ring))
return -EINVAL;
priv->ring[ring.fifo_nr] = ring;
break; break;
case MCP251XFD_DUMP_OBJECT_TYPE_END: case MCP251XFD_DUMP_OBJECT_TYPE_END:
return 0; return 0;

View File

@ -12,14 +12,17 @@
#include "mcp251xfd.h" #include "mcp251xfd.h"
#include "mcp251xfd-dump.h" #include "mcp251xfd-dump.h"
#define MCP251XFD_TX_FIFO 1 #define MCP251XFD_DUMP_UNKNOWN (-1U)
#define MCP251XFD_RX_FIFO(x) (MCP251XFD_TX_FIFO + 1 + (x))
struct mcp251xfd_mem { struct mcp251xfd_mem {
char buf[0x1000]; char buf[0x1000];
}; };
struct mcp251xfd_ring { struct mcp251xfd_ring {
enum mcp251xfd_dump_object_type type;
const struct mcp251xfd_dump_regs_fifo *fifo;
void *ram;
unsigned int head; unsigned int head;
unsigned int tail; unsigned int tail;
@ -30,25 +33,14 @@ struct mcp251xfd_ring {
u8 obj_size; u8 obj_size;
}; };
#define MCP251XFD_RING_TEF 0
struct mcp251xfd_priv { struct mcp251xfd_priv {
struct regmap *map; struct regmap *map;
struct mcp251xfd_ring ring[32];
struct mcp251xfd_ring tef[1];
struct mcp251xfd_ring tx[1];
struct mcp251xfd_ring rx[1];
u8 rx_ring_num;
}; };
static inline u8 mcp251xfd_get_ring_head(const struct mcp251xfd_ring *ring) void mcp251xfd_dump_ring_init(struct mcp251xfd_ring *ring);
{
return ring->head & (ring->obj_num - 1);
}
static inline u8 mcp251xfd_get_ring_tail(const struct mcp251xfd_ring *ring)
{
return ring->tail & (ring->obj_num - 1);
}
void mcp251xfd_dump(struct mcp251xfd_priv *priv); void mcp251xfd_dump(struct mcp251xfd_priv *priv);
int mcp251xfd_dev_coredump_read(struct mcp251xfd_priv *priv, int mcp251xfd_dev_coredump_read(struct mcp251xfd_priv *priv,
@ -57,5 +49,7 @@ int mcp251xfd_dev_coredump_read(struct mcp251xfd_priv *priv,
int mcp251xfd_regmap_read(struct mcp251xfd_priv *priv, int mcp251xfd_regmap_read(struct mcp251xfd_priv *priv,
struct mcp251xfd_mem *mem, struct mcp251xfd_mem *mem,
const char *file_path); const char *file_path);
const char *
get_object_type_str(enum mcp251xfd_dump_object_type object_type);
#endif #endif

View File

@ -2,7 +2,7 @@
// //
// Microchip MCP251xFD Family CAN controller debug tool // Microchip MCP251xFD Family CAN controller debug tool
// //
// Copyright (c) 2019, 2020, 2021 Pengutronix, // Copyright (c) 2019, 2020, 2021, 2022 Pengutronix,
// Marc Kleine-Budde <kernel@pengutronix.de> // Marc Kleine-Budde <kernel@pengutronix.de>
// //
@ -72,6 +72,18 @@ struct mcp251xfd_dump_regs_mcp251xfd {
u32 devid; u32 devid;
}; };
static bool
mcp251xfd_fifo_is_unused(const struct mcp251xfd_dump_regs_fifo *fifo)
{
return fifo->con == 0x00600000 && fifo->sta == 0x00000000;
}
static bool
mcp251xfd_fifo_is_rx(const struct mcp251xfd_dump_regs_fifo *fifo)
{
return !(fifo->con & MCP251XFD_REG_FIFOCON_TXEN);
}
#define __dump_bit(val, prefix, bit, desc) \ #define __dump_bit(val, prefix, bit, desc) \
pr_info("%16s %s\t\t%s\n", __stringify(bit), \ pr_info("%16s %s\t\t%s\n", __stringify(bit), \
(val) & prefix##_##bit ? "x" : " ", desc) (val) & prefix##_##bit ? "x" : " ", desc)
@ -426,6 +438,8 @@ mcp251xfd_dump_regs(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs, const struct mcp251xfd_dump_regs *regs,
const struct mcp251xfd_dump_regs_mcp251xfd *regs_mcp251xfd) const struct mcp251xfd_dump_regs_mcp251xfd *regs_mcp251xfd)
{ {
unsigned int i;
netdev_info(priv->ndev, "-------------------- register dump --------------------\n"); netdev_info(priv->ndev, "-------------------- register dump --------------------\n");
__dump_call(regs, con); __dump_call(regs, con);
__dump_call(regs, nbtcfg); __dump_call(regs, nbtcfg);
@ -444,29 +458,45 @@ mcp251xfd_dump_regs(const struct mcp251xfd_priv *priv,
__dump_call(regs, bdiag1); __dump_call(regs, bdiag1);
__dump_call(regs_mcp251xfd, osc); __dump_call(regs_mcp251xfd, osc);
__dump_call(regs_mcp251xfd, iocon); __dump_call(regs_mcp251xfd, iocon);
pr_info("-------------------- TEF --------------------\n");
__dump_call(regs, tefcon); for (i = 0; i < ARRAY_SIZE(regs->fifo); i++) {
__dump_call(regs, tefsta); const struct mcp251xfd_dump_regs_fifo *fifo = &regs->fifo[i];
__dump_call(regs, tefua);
pr_info("-------------------- TX_FIFO --------------------\n"); if (mcp251xfd_fifo_is_unused(fifo))
__dump_call_fifo(fifocon, fifo[MCP251XFD_TX_FIFO].con); continue;
__dump_call_fifo(fifosta, fifo[MCP251XFD_TX_FIFO].sta);
__dump_call_fifo(fifoua, fifo[MCP251XFD_TX_FIFO].ua); pr_info("----------------------- FIFO %2d - ", i);
pr_info(" -------------------- RX_FIFO --------------------\n");
__dump_call_fifo(fifocon, fifo[MCP251XFD_RX_FIFO(0)].con); if (i == 0) {
__dump_call_fifo(fifosta, fifo[MCP251XFD_RX_FIFO(0)].sta); pr_info("TEF -----------------\n");
__dump_call_fifo(fifoua, fifo[MCP251XFD_RX_FIFO(0)].ua);
netdev_info(priv->ndev, "------------------------- end -------------------------\n"); __dump_call(regs, tefcon);
__dump_call(regs, tefsta);
__dump_call(regs, tefua);
} else {
if (mcp251xfd_fifo_is_rx(fifo))
pr_info("RX ------------------\n");
else
pr_info("TX ------------------\n");
__dump_call_fifo(fifocon, fifo[i].con);
__dump_call_fifo(fifosta, fifo[i].sta);
__dump_call_fifo(fifoua, fifo[i].ua);
}
}
netdev_info(priv->ndev, "----------------------- end ---------------------------\n");
} }
#undef __dump_call #undef __dump_call
#undef __dump_call_fifo #undef __dump_call_fifo
static u8 mcp251xfd_dump_get_fifo_size(const struct mcp251xfd_priv *priv, const struct mcp251xfd_dump_regs *regs, u32 fifo_con) static u8
mcp251xfd_dump_get_fifo_size(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs_fifo *regs_fifo)
{ {
u8 obj_size; u8 obj_size;
obj_size = FIELD_GET(MCP251XFD_REG_FIFOCON_PLSIZE_MASK, fifo_con); obj_size = FIELD_GET(MCP251XFD_REG_FIFOCON_PLSIZE_MASK, regs_fifo->con);
switch (obj_size) { switch (obj_size) {
case MCP251XFD_REG_FIFOCON_PLSIZE_8: case MCP251XFD_REG_FIFOCON_PLSIZE_8:
return 8; return 8;
@ -489,16 +519,91 @@ static u8 mcp251xfd_dump_get_fifo_size(const struct mcp251xfd_priv *priv, const
return 0; return 0;
} }
static u8 mcp251xfd_dump_get_fifo_obj_num(const struct mcp251xfd_priv *priv, const struct mcp251xfd_dump_regs *regs, u32 fifo_con) static u8
mcp251xfd_dump_get_tef_obj_size(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs_fifo *fifo)
{
return sizeof(struct mcp251xfd_hw_tef_obj);
}
static u8
mcp251xfd_dump_get_rx_obj_size(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs_fifo *fifo)
{
return sizeof(struct mcp251xfd_hw_rx_obj_can) -
sizeof_field(struct mcp251xfd_hw_rx_obj_can, data) +
mcp251xfd_dump_get_fifo_size(priv, fifo);
}
static u8
mcp251xfd_dump_get_tx_obj_size(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs_fifo *fifo)
{
return sizeof(struct mcp251xfd_hw_tx_obj_can) -
sizeof_field(struct mcp251xfd_hw_tx_obj_can, data) +
mcp251xfd_dump_get_fifo_size(priv, fifo);
}
static u8
mcp251xfd_dump_get_fifo_obj_num(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs_fifo *fifo)
{ {
u8 obj_num; u8 obj_num;
obj_num = FIELD_GET(MCP251XFD_REG_FIFOCON_FSIZE_MASK, fifo_con); obj_num = FIELD_GET(MCP251XFD_REG_FIFOCON_FSIZE_MASK, fifo->con);
return obj_num + 1; return obj_num + 1;
} }
static void mcp251xfd_dump_ram_fifo_obj_data(const struct mcp251xfd_priv *priv, const u8 *data, u8 dlc) static u16
mcp251xfd_dump_get_ring_obj_addr(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_ring *ring,
u8 n)
{
return ring->base + ring->obj_size * n;
}
static void *
mcp251xfd_dump_get_ring_hw_obj(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_ring *ring,
u8 n)
{
return ring->ram + ring->obj_size * n;
}
static u8
mcp251xfd_dump_get_ring_head(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_ring *ring)
{
return ring->head & (ring->obj_num - 1);
}
static u8
mcp251xfd_dump_get_ring_tail(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_ring *ring)
{
return ring->tail & (ring->obj_num - 1);
}
static u8
mcp251xfd_dump_get_chip_head(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_ring *ring)
{
return FIELD_GET(MCP251XFD_REG_FIFOSTA_FIFOCI_MASK,
ring->fifo->sta);
}
static u8
mcp251xfd_dump_get_chip_tail(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_ring *ring)
{
return (ring->fifo->ua -
(ring->base - MCP251XFD_RAM_START)) / ring->obj_size;
}
static void
mcp251xfd_dump_ring_obj_data(const struct mcp251xfd_priv *priv,
const u8 *data, u8 dlc)
{ {
int i; int i;
u8 len; u8 len;
@ -529,326 +634,228 @@ static void mcp251xfd_dump_ram_fifo_obj_data(const struct mcp251xfd_priv *priv,
pr_cont("\n"); pr_cont("\n");
} }
/* TEF */ static void
mcp251xfd_dump_analyze_regs_and_ram(struct mcp251xfd_priv *priv,
static u8 const struct mcp251xfd_dump_regs *regs,
mcp251xfd_dump_get_tef_obj_num(const struct mcp251xfd_priv *priv, const struct mcp251xfd_dump_ram *ram)
const struct mcp251xfd_dump_regs *regs)
{ {
return mcp251xfd_dump_get_fifo_obj_num(priv, regs, regs->tef.con); u16 base = MCP251XFD_RAM_START;
u8 ring_nr_rx = 0, ring_nr_tx = 0;
unsigned int i;
for (i = 0; i < ARRAY_SIZE(regs->fifo); i++) {
const struct mcp251xfd_dump_regs_fifo *fifo;
struct mcp251xfd_ring *ring = &priv->ring[i];
if (i == MCP251XFD_RING_TEF) {
/* FIFO 0 is the TXQ, but it's unused by the driver
* put TEF here to make things easier.
*/
fifo = &regs->tef;
ring->type = MCP251XFD_DUMP_OBJECT_TYPE_TEF;
ring->nr = 0;
ring->obj_size = mcp251xfd_dump_get_tef_obj_size(priv, fifo);
} else {
fifo = &regs->fifo[i];
if (mcp251xfd_fifo_is_unused(fifo)) {
continue;
} else if (mcp251xfd_fifo_is_rx(fifo)) {
ring->type = MCP251XFD_DUMP_OBJECT_TYPE_RX;
ring->nr = ring_nr_rx++;
ring->obj_size = mcp251xfd_dump_get_rx_obj_size(priv, fifo);
} else {
ring->type = MCP251XFD_DUMP_OBJECT_TYPE_TX;
ring->nr = ring_nr_tx++;
ring->obj_size = mcp251xfd_dump_get_tx_obj_size(priv, fifo);
}
}
ring->fifo = fifo;
ring->ram = (void *)ram + (base - MCP251XFD_RAM_START);
ring->base = base;
ring->fifo_nr = i;
ring->obj_num = mcp251xfd_dump_get_fifo_obj_num(priv, fifo);
base = mcp251xfd_dump_get_ring_obj_addr(priv, ring, ring->obj_num);
}
printf("Found %u RX-FIFO%s, %u TX-FIFO%s\n\n",
ring_nr_rx, ring_nr_rx > 1 ? "s" : "",
ring_nr_tx, ring_nr_tx > 1 ? "s" : "");
} }
static u8 static const char *
mcp251xfd_dump_get_tef_tail(const struct mcp251xfd_priv *priv, mcp251xfd_dump_ring_obj_one_fifo_flags_chip(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs) const struct mcp251xfd_ring *ring,
const u8 n)
{ {
return regs->tefua / sizeof(struct mcp251xfd_hw_tef_obj); if (mcp251xfd_dump_get_chip_tail(priv, ring) != n)
return "";
if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TX) {
if (!(ring->fifo->sta & MCP251XFD_REG_FIFOSTA_TFNRFNIF))
return " chip-FIFO-full";
if (ring->fifo->sta & MCP251XFD_REG_FIFOSTA_TFERFFIF)
return " chip-FIFO-empty";
} else {
if (ring->fifo->sta & MCP251XFD_REG_FIFOSTA_TFERFFIF)
return " chip-FIFO-full";
if (!(ring->fifo->sta & MCP251XFD_REG_FIFOSTA_TFNRFNIF))
return " chip-FIFO-empty";
}
return "";
} }
static u16 static const char *
mcp251xfd_dump_get_tef_obj_rel_addr(const struct mcp251xfd_priv *priv, mcp251xfd_dump_ring_obj_one_fifo_flags_ring(const struct mcp251xfd_priv *priv,
u8 n) const struct mcp251xfd_ring *ring,
const u8 n)
{ {
return sizeof(struct mcp251xfd_hw_tef_obj) * n; if (ring->head == MCP251XFD_DUMP_UNKNOWN ||
ring->tail == MCP251XFD_DUMP_UNKNOWN ||
mcp251xfd_dump_get_ring_tail(priv, ring) != n ||
mcp251xfd_dump_get_ring_head(priv, ring) != mcp251xfd_dump_get_ring_tail(priv, ring))
return "";
if (ring->head == ring->tail)
return " ring-FIFO-empty";
else
return " ring-FIFO-full";
return "";
} }
static u16
mcp251xfd_dump_get_tef_obj_addr(const struct mcp251xfd_priv *priv,
u8 n)
{
return mcp251xfd_dump_get_tef_obj_rel_addr(priv, n) +
MCP251XFD_RAM_START;
}
/* TX */
static u8
mcp251xfd_dump_get_tx_obj_size(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs)
{
return sizeof(struct mcp251xfd_hw_tx_obj_can) -
sizeof_field(struct mcp251xfd_hw_tx_obj_can, data) +
mcp251xfd_dump_get_fifo_size(priv, regs, regs->tx_fifo.con);
}
static u8
mcp251xfd_dump_get_tx_obj_num(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs)
{
return mcp251xfd_dump_get_fifo_obj_num(priv, regs, regs->tx_fifo.con);
}
static u16
mcp251xfd_dump_get_tx_obj_rel_addr(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs,
u8 n)
{
return mcp251xfd_dump_get_tef_obj_rel_addr(priv, mcp251xfd_dump_get_tef_obj_num(priv, regs)) +
mcp251xfd_dump_get_tx_obj_size(priv, regs) * n;
}
static u16
mcp251xfd_dump_get_tx_obj_addr(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs, u8 n)
{
return mcp251xfd_dump_get_tx_obj_rel_addr(priv, regs, n) +
MCP251XFD_RAM_START;
}
static u8
mcp251xfd_dump_get_tx_tail(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs)
{
return (regs->fifo[MCP251XFD_TX_FIFO].ua -
mcp251xfd_dump_get_tx_obj_rel_addr(priv, regs, 0)) /
mcp251xfd_dump_get_tx_obj_size(priv, regs);
}
static u8
mcp251xfd_dump_get_tx_head(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs)
{
return FIELD_GET(MCP251XFD_REG_FIFOSTA_FIFOCI_MASK,
regs->fifo[MCP251XFD_TX_FIFO].sta);
}
/* RX */
static u8
mcp251xfd_dump_get_rx_obj_size(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs)
{
return sizeof(struct mcp251xfd_hw_rx_obj_can) -
sizeof_field(struct mcp251xfd_hw_rx_obj_can, data) +
mcp251xfd_dump_get_fifo_size(priv, regs, regs->rx_fifo.con);
}
static u8
mcp251xfd_dump_get_rx_obj_num(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs)
{
return mcp251xfd_dump_get_fifo_obj_num(priv, regs, regs->rx_fifo.con);
}
static u16
mcp251xfd_dump_get_rx_obj_rel_addr(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs, u8 n)
{
return mcp251xfd_dump_get_tx_obj_rel_addr(priv, regs, mcp251xfd_dump_get_tx_obj_num(priv, regs)) +
mcp251xfd_dump_get_rx_obj_size(priv, regs) * n;
}
static u16
mcp251xfd_dump_get_rx_obj_addr(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs, u8 n)
{
return mcp251xfd_dump_get_rx_obj_rel_addr(priv, regs, n) + MCP251XFD_RAM_START;
}
static u8
mcp251xfd_dump_get_rx_tail(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs)
{
return (regs->fifo[MCP251XFD_RX_FIFO(0)].ua -
mcp251xfd_dump_get_rx_obj_rel_addr(priv, regs, 0)) /
mcp251xfd_dump_get_rx_obj_size(priv, regs);
}
static u8
mcp251xfd_dump_get_rx_head(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs)
{
return FIELD_GET(MCP251XFD_REG_FIFOSTA_FIFOCI_MASK, regs->fifo[MCP251XFD_RX_FIFO(0)].sta);
}
/* dump TEF */
static void static void
mcp251xfd_dump_ram_tef_obj_one(const struct mcp251xfd_priv *priv, mcp251xfd_dump_ring_obj_one(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs, const struct mcp251xfd_ring *ring,
const struct mcp251xfd_ring *tef, const void *hw_obj, const u8 n)
const struct mcp251xfd_hw_tef_obj *hw_tef_obj,
u8 n)
{ {
pr_info("TEF Object: 0x%02x (0x%03x)%s%s%s%s%s\n", const struct mcp251xfd_hw_tef_obj *hw_tef_obj = hw_obj;
n, mcp251xfd_dump_get_tef_obj_addr(priv, n), const struct mcp251xfd_hw_rx_obj_canfd *hw_rx_obj = hw_obj;
mcp251xfd_get_ring_head(tef) == n ? " priv-HEAD" : "", const struct mcp251xfd_hw_tx_obj_canfd *hw_tx_obj = hw_obj;
mcp251xfd_dump_get_tef_tail(priv, regs) == n ? " chip-TAIL" : "",
mcp251xfd_get_ring_tail(tef) == n ? " priv-TAIL" : "", pr_info("%s-%d Object: "
(mcp251xfd_dump_get_tef_tail(priv, regs) == n ? "0x%02x (0x%03x)"
((regs->tef.sta & MCP251XFD_REG_TEFSTA_TEFFIF) ? " chip-FIFO-full" : "%s%s%s%s%s%s"
!(regs->tef.sta & MCP251XFD_REG_TEFSTA_TEFNEIF) ? " chip-FIFO-empty" : "") : "\n",
("")), get_object_type_str(ring->type), ring->nr,
(mcp251xfd_get_ring_head(tef) == mcp251xfd_get_ring_tail(tef) && n, mcp251xfd_dump_get_ring_obj_addr(priv, ring, n),
mcp251xfd_get_ring_tail(tef) == n ?
(priv->tef->head == priv->tef->tail ? " priv-FIFO-empty" : " priv-FIFO-full") : ring->type != MCP251XFD_DUMP_OBJECT_TYPE_TEF && mcp251xfd_dump_get_chip_head(priv, ring) == n ? " chip-HEAD" : "",
(""))); ring->head != MCP251XFD_DUMP_UNKNOWN && mcp251xfd_dump_get_ring_head(priv, ring) == n ? " ring-HEAD" : "",
mcp251xfd_dump_get_chip_tail(priv, ring) == n ? " chip-TAIL" : "",
ring->tail != MCP251XFD_DUMP_UNKNOWN && mcp251xfd_dump_get_ring_tail(priv, ring) == n ? " ring-TAIL" : "",
mcp251xfd_dump_ring_obj_one_fifo_flags_chip(priv, ring, n),
mcp251xfd_dump_ring_obj_one_fifo_flags_ring(priv, ring, n)
);
pr_info("%16s = 0x%08x\n", "id", hw_tef_obj->id); pr_info("%16s = 0x%08x\n", "id", hw_tef_obj->id);
pr_info("%16s = 0x%08x\n", "flags", hw_tef_obj->flags); pr_info("%16s = 0x%08x\n", "flags", hw_tef_obj->flags);
pr_info("%16s = 0x%08x\n", "ts", hw_tef_obj->ts);
__dump_mask(hw_tef_obj->flags, MCP251XFD_OBJ_FLAGS, SEQ, "0x%06lx", "Sequence");
pr_info("\n");
}
static void if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TEF ||
mcp251xfd_dump_ram_tef_obj(const struct mcp251xfd_priv *priv, ring->type == MCP251XFD_DUMP_OBJECT_TYPE_RX)
const struct mcp251xfd_dump_regs *regs, pr_info("%16s = 0x%08x\n", "ts", hw_tef_obj->ts);
const struct mcp251xfd_dump_ram *ram,
const struct mcp251xfd_ring *tef)
{
int i;
pr_info("\nTEF Overview:\n"); if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TEF) {
pr_info("%16s = 0x%02x 0x%08x\n", "head (p)", __dump_mask(hw_tef_obj->flags, MCP251XFD_OBJ_FLAGS, SEQ, "0x%06lx", "Sequence");
mcp251xfd_get_ring_head(tef), } else if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TX) {
tef->head); __dump_mask(hw_tx_obj->flags, MCP251XFD_OBJ_FLAGS, SEQ_MCP2517FD, "0x%06lx", "Sequence (MCP2517)");
pr_info("%16s = 0x%02x 0x%02x 0x%08x\n", "tail (c/p)", __dump_mask(hw_tx_obj->flags, MCP251XFD_OBJ_FLAGS, SEQ_MCP2518FD, "0x%06lx", "Sequence (MCP2518)");
mcp251xfd_dump_get_tef_tail(priv, regs),
mcp251xfd_get_ring_tail(tef),
tef->tail);
pr_info("\n");
for (i = 0; i < mcp251xfd_dump_get_tef_obj_num(priv, regs); i++) {
const struct mcp251xfd_hw_tef_obj *hw_tef_obj;
u16 hw_tef_obj_rel_addr;
hw_tef_obj_rel_addr = mcp251xfd_dump_get_tef_obj_rel_addr(priv, i);
hw_tef_obj = (const struct mcp251xfd_hw_tef_obj *)&ram->ram[hw_tef_obj_rel_addr];
mcp251xfd_dump_ram_tef_obj_one(priv, regs, tef, hw_tef_obj, i);
} }
}
/* dump TX */ if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_RX ||
ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TX) {
const u8* data;
u8 dlc;
static void if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_RX)
mcp251xfd_dump_ram_tx_obj_one(const struct mcp251xfd_priv *priv, data = hw_rx_obj->data;
const struct mcp251xfd_dump_regs *regs, else
const struct mcp251xfd_ring *tx, data = hw_tx_obj->data;
const struct mcp251xfd_hw_tx_obj_canfd *hw_tx_obj,
u8 n)
{
pr_info("TX Object: 0x%02x (0x%03x)%s%s%s%s%s%s\n",
n, mcp251xfd_dump_get_tx_obj_addr(priv, regs, n),
mcp251xfd_dump_get_tx_head(priv, regs) == n ? " chip-HEAD" : "",
mcp251xfd_get_ring_head(tx) == n ? " priv-HEAD" : "",
mcp251xfd_dump_get_tx_tail(priv, regs) == n ? " chip-TAIL" : "",
mcp251xfd_get_ring_tail(tx) == n ? " priv-TAIL" : "",
mcp251xfd_dump_get_tx_tail(priv, regs) == n ?
(!(regs->tx_fifo.sta & MCP251XFD_REG_FIFOSTA_TFNRFNIF) ? " chip-FIFO-full" :
(regs->tx_fifo.sta & MCP251XFD_REG_FIFOSTA_TFERFFIF) ? " chip-FIFO-empty" : "") :
(""),
(mcp251xfd_get_ring_head(tx) == mcp251xfd_get_ring_tail(tx) &&
mcp251xfd_get_ring_tail(tx) == n ?
(tx->head == tx->tail ? " priv-FIFO-empty" : " priv-FIFO-full") :
("")));
pr_info("%16s = 0x%08x\n", "id", hw_tx_obj->id);
pr_info("%16s = 0x%08x\n", "flags", hw_tx_obj->flags);
__dump_mask(hw_tx_obj->flags, MCP251XFD_OBJ_FLAGS, SEQ_MCP2517FD, "0x%06lx", "Sequence (MCP2517)");
__dump_mask(hw_tx_obj->flags, MCP251XFD_OBJ_FLAGS, SEQ_MCP2518FD, "0x%06lx", "Sequence (MCP2518)");
mcp251xfd_dump_ram_fifo_obj_data(priv,
hw_tx_obj->data,
FIELD_GET(MCP251XFD_OBJ_FLAGS_DLC, hw_tx_obj->flags));
pr_info("\n");
}
static void dlc = FIELD_GET(MCP251XFD_OBJ_FLAGS_DLC, hw_rx_obj->flags);
mcp251xfd_dump_ram_tx_obj(const struct mcp251xfd_priv *priv, mcp251xfd_dump_ring_obj_data(priv, data, dlc);
const struct mcp251xfd_dump_regs *regs,
const struct mcp251xfd_dump_ram *ram,
const struct mcp251xfd_ring *tx)
{
int i;
pr_info("\nTX Overview:\n");
pr_info("%16s = 0x%02x 0x%02x 0x%08x\n", "head (c/p)",
mcp251xfd_dump_get_tx_head(priv, regs),
mcp251xfd_get_ring_head(tx),
tx->head);
pr_info("%16s = 0x%02x 0x%02x 0x%08x\n", "tail (c/p)",
mcp251xfd_dump_get_tx_tail(priv, regs),
mcp251xfd_get_ring_tail(tx),
tx->tail);
pr_info("\n");
for (i = 0; i < mcp251xfd_dump_get_tx_obj_num(priv, regs); i++) {
const struct mcp251xfd_hw_tx_obj_canfd *hw_tx_obj;
u16 hw_tx_obj_rel_addr;
hw_tx_obj_rel_addr = mcp251xfd_dump_get_tx_obj_rel_addr(priv, regs, i);
hw_tx_obj = (const struct mcp251xfd_hw_tx_obj_canfd *)&ram->ram[hw_tx_obj_rel_addr];
mcp251xfd_dump_ram_tx_obj_one(priv, regs, tx, hw_tx_obj, i);
} }
}
/* dump RX */
static void
mcp251xfd_dump_ram_rx_obj_one(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs,
const struct mcp251xfd_ring *rx,
const struct mcp251xfd_hw_rx_obj_canfd *hw_rx_obj,
u8 n)
{
pr_info("RX Object: 0x%02x (0x%03x)%s%s%s%s%s%s\n",
n, mcp251xfd_dump_get_rx_obj_addr(priv, regs, n),
mcp251xfd_dump_get_rx_head(priv, regs) == n ? " chip-HEAD" : "",
mcp251xfd_get_ring_head(rx) == n ? " priv-HEAD" : "",
mcp251xfd_dump_get_rx_tail(priv, regs) == n ? " chip-TAIL" : "",
mcp251xfd_get_ring_tail(rx) == n ? " priv-TAIL" : "",
mcp251xfd_dump_get_rx_tail(priv, regs) == n ?
((regs->rx_fifo.sta & MCP251XFD_REG_FIFOSTA_TFERFFIF) ? " chip-FIFO-full" :
!(regs->rx_fifo.sta & MCP251XFD_REG_FIFOSTA_TFNRFNIF) ? " chip-FIFO-empty" : "") :
(""),
(mcp251xfd_get_ring_head(rx) == mcp251xfd_get_ring_tail(rx) &&
mcp251xfd_get_ring_tail(rx) == n ?
(priv->rx->head == priv->rx->tail ? " priv-FIFO-empty" : " priv-FIFO-full") :
("")));
pr_info("%16s = 0x%08x\n", "id", hw_rx_obj->id);
pr_info("%16s = 0x%08x\n", "flags", hw_rx_obj->flags);
pr_info("%16s = 0x%08x\n", "ts", hw_rx_obj->ts);
mcp251xfd_dump_ram_fifo_obj_data(priv, hw_rx_obj->data, FIELD_GET(MCP251XFD_OBJ_FLAGS_DLC, hw_rx_obj->flags));
pr_info("\n"); pr_info("\n");
} }
static void static void
mcp251xfd_dump_ram_rx_obj(const struct mcp251xfd_priv *priv, mcp251xfd_dump_ring(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs, const struct mcp251xfd_ring *ring,
const struct mcp251xfd_dump_ram *ram, const struct mcp251xfd_dump_regs *regs)
const struct mcp251xfd_ring *rx)
{ {
int i; int i;
pr_info("\nRX Overview:\n"); pr_info("\n%s-%d FIFO %d Overview:\n",
pr_info("%16s = 0x%02x 0x%02x 0x%08x\n", "head (c/p)", get_object_type_str(ring->type), ring->nr, ring->fifo_nr);
mcp251xfd_dump_get_rx_head(priv, regs),
mcp251xfd_get_ring_head(rx), rx->head); if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TEF) {
pr_info("%16s = 0x%02x 0x%02x 0x%08x\n", "tail (c/p)", if (ring->head == MCP251XFD_DUMP_UNKNOWN)
mcp251xfd_dump_get_rx_tail(priv, regs), pr_info("%16s\n", "head ( / )");
mcp251xfd_get_ring_tail(rx), rx->tail); else
pr_info("%16s = 0x%02x 0x%08x\n", "head ( /r)",
mcp251xfd_dump_get_ring_head(priv, ring),
ring->head);
} else {
if (ring->head == MCP251XFD_DUMP_UNKNOWN)
pr_info("%16s = 0x%02x\n", "head (c/ )",
mcp251xfd_dump_get_chip_head(priv, ring));
else
pr_info("%16s = 0x%02x 0x%02x 0x%08x\n", "head (c/r)",
mcp251xfd_dump_get_chip_head(priv, ring),
mcp251xfd_dump_get_ring_head(priv, ring),
ring->head);
}
if (ring->tail == MCP251XFD_DUMP_UNKNOWN)
pr_info("%16s = 0x%02x\n", "tail (c/ )",
mcp251xfd_dump_get_chip_tail(priv, ring));
else
pr_info("%16s = 0x%02x 0x%02x 0x%08x\n", "tail (c/r)",
mcp251xfd_dump_get_chip_tail(priv, ring),
mcp251xfd_dump_get_ring_tail(priv, ring),
ring->tail);
pr_info("\n"); pr_info("\n");
for (i = 0; i < mcp251xfd_dump_get_rx_obj_num(priv, regs); i++) { for (i = 0; i < ring->obj_num; i++) {
const struct mcp251xfd_hw_rx_obj_canfd *hw_rx_obj; void *hw_obj;
u16 hw_rx_obj_rel_addr;
hw_rx_obj_rel_addr = mcp251xfd_dump_get_rx_obj_rel_addr(priv, regs, i); hw_obj = mcp251xfd_dump_get_ring_hw_obj(priv, ring, i);
hw_rx_obj = (const struct mcp251xfd_hw_rx_obj_canfd *)&ram->ram[hw_rx_obj_rel_addr]; mcp251xfd_dump_ring_obj_one(priv, ring, hw_obj, i);
mcp251xfd_dump_ram_rx_obj_one(priv, regs, rx, hw_rx_obj, i);
} }
} }
#undef __dump_mask #undef __dump_mask
#undef __dump_bit #undef __dump_bit
static void mcp251xfd_dump_ram(const struct mcp251xfd_priv *priv, const struct mcp251xfd_dump_regs *regs, const struct mcp251xfd_dump_ram *ram) static void
mcp251xfd_dump_ram(const struct mcp251xfd_priv *priv,
const struct mcp251xfd_dump_regs *regs,
const struct mcp251xfd_dump_ram *ram)
{ {
unsigned int i;
netdev_info(priv->ndev, "----------------------- RAM dump ----------------------\n"); netdev_info(priv->ndev, "----------------------- RAM dump ----------------------\n");
mcp251xfd_dump_ram_tef_obj(priv, regs, ram, priv->tef);
mcp251xfd_dump_ram_tx_obj(priv, regs, ram, priv->tx); for (i = 0; i < ARRAY_SIZE(regs->fifo); i++) {
mcp251xfd_dump_ram_rx_obj(priv, regs, ram, priv->rx); const struct mcp251xfd_ring *ring = &priv->ring[i];
switch (ring->type) {
case MCP251XFD_DUMP_OBJECT_TYPE_TEF:
case MCP251XFD_DUMP_OBJECT_TYPE_RX:
case MCP251XFD_DUMP_OBJECT_TYPE_TX:
mcp251xfd_dump_ring(priv, ring, regs);
default:
break;
}
}
netdev_info(priv->ndev, "------------------------- end -------------------------\n"); netdev_info(priv->ndev, "------------------------- end -------------------------\n");
} }
@ -877,6 +884,7 @@ void mcp251xfd_dump(struct mcp251xfd_priv *priv)
if (err) if (err)
return; return;
mcp251xfd_dump_analyze_regs_and_ram(priv, &regs, &ram);
mcp251xfd_dump_regs(priv, &regs, &regs_mcp251xfd); mcp251xfd_dump_regs(priv, &regs, &regs_mcp251xfd);
mcp251xfd_dump_ram(priv, &regs, &ram); mcp251xfd_dump_ram(priv, &regs, &ram);
} }

View File

@ -0,0 +1,50 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2023 Pengutronix,
# Marc Kleine-Budde <kernel@pengutronix.de>
set -x
set -e
DEV=${1:-can0}
SPI=${2:-$(ethtool -i ${DEV}|sed -ne "s/bus-info: //p")}
modprobe -r mcp251xfd
modprobe mcp251xfd
sleep 2
ip link set ${DEV} down
sleep 2
rm -vf /var/log/devcoredump-*.dump
ip link set ${DEV} up type can bitrate 1000000 dbitrate 4000000 fd on restart-ms 1000 berr-reporting off listen-only off loopback on
ethtool -g ${DEV} || true
ethtool -c ${DEV} || true
cangen ${DEV} -Di -L8 -I2 -p 10 -g 200 -n 3
cat /sys/kernel/debug/regmap/${SPI}-crc/registers > data/registers-canfd.dump
ip link set ${DEV} down
sleep 2
cp -av /var/log/devcoredump-*.dump data
ip link set ${DEV} up type can bitrate 1000000 fd off restart-ms 1000 berr-reporting off listen-only off loopback on
rm -vf /var/log/devcoredump-*.dump
ethtool -g ${DEV} || true
ethtool -c ${DEV} || true
cangen ${DEV} -Di -L8 -I2 -p 10 -g 200 -n 7
cat /sys/kernel/debug/regmap/${SPI}-crc/registers > data/registers-classic-can.dump
ip link set ${DEV} down
sleep 2
cp -av /var/log/devcoredump-*.dump data

View File

@ -45,6 +45,17 @@ int regmap_bulk_read(struct regmap *map, unsigned int reg,
return 0; return 0;
} }
void mcp251xfd_dump_ring_init(struct mcp251xfd_ring *ring)
{
memset(ring, 0x0, sizeof(*ring));
ring->type = MCP251XFD_DUMP_UNKNOWN;
ring->head = MCP251XFD_DUMP_UNKNOWN;
ring->tail = MCP251XFD_DUMP_UNKNOWN;
ring->nr = (uint8_t)MCP251XFD_DUMP_UNKNOWN;
ring->fifo_nr = (uint8_t)MCP251XFD_DUMP_UNKNOWN;
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
struct mcp251xfd_mem mem = { }; struct mcp251xfd_mem mem = { };
@ -55,6 +66,7 @@ int main(int argc, char *argv[])
.map = &map, .map = &map,
}; };
const char *file_path; const char *file_path;
unsigned int i;
int opt, err; int opt, err;
struct option long_options[] = { struct option long_options[] = {
@ -83,6 +95,9 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
for (i = 0; i < ARRAY_SIZE(priv.ring); i++)
mcp251xfd_dump_ring_init(&priv.ring[i]);
err = mcp251xfd_dev_coredump_read(&priv, &mem, file_path); err = mcp251xfd_dev_coredump_read(&priv, &mem, file_path);
if (err) if (err)
err = mcp251xfd_regmap_read(&priv, &mem, file_path); err = mcp251xfd_regmap_read(&priv, &mem, file_path);

View File

@ -2,7 +2,7 @@
// //
// Microchip MCP251xFD Family CAN controller debug tool // Microchip MCP251xFD Family CAN controller debug tool
// //
// Copyright (c) 2020 Pengutronix, // Copyright (c) 2020, 2022, 2023 Pengutronix,
// Marc Kleine-Budde <kernel@pengutronix.de> // Marc Kleine-Budde <kernel@pengutronix.de>
// //
@ -26,21 +26,37 @@ do_mcp251xfd_regmap_read(struct mcp251xfd_priv *priv,
FILE *reg_file; FILE *reg_file;
uint16_t reg; uint16_t reg;
uint32_t val; uint32_t val;
unsigned int n = 0;
int ret, err = 0;
reg_file = fopen(file_path, "r"); reg_file = fopen(file_path, "r");
if (!reg_file) if (!reg_file)
return -errno; return -errno;
while (fscanf(reg_file, "%hx: %x\n", &reg, &val) == 2) { while ((ret = fscanf(reg_file, "%hx: %x\n", &reg, &val)) != EOF) {
if (reg >= ARRAY_SIZE(mem->buf)) if (ret != 2) {
return -EINVAL; fscanf(reg_file, "%*[^\n]\n");
continue;
}
if (reg >= ARRAY_SIZE(mem->buf)) {
err = -EINVAL;
goto out_close;
}
*(uint32_t *)(mem->buf + reg) = val; *(uint32_t *)(mem->buf + reg) = val;
n++;
} }
printf("regmap: Found %u registers in %s\n", n, file_path);
if (!n)
err = -EINVAL;
out_close:
fclose(reg_file); fclose(reg_file);
return 0; return err;
} }
int mcp251xfd_regmap_read(struct mcp251xfd_priv *priv, int mcp251xfd_regmap_read(struct mcp251xfd_priv *priv,