diff --git a/GNUmakefile.am b/GNUmakefile.am index 86bcb39..5a7ad75 100644 --- a/GNUmakefile.am +++ b/GNUmakefile.am @@ -60,6 +60,19 @@ mcp251xfd_dump_SOURCES = \ mcp251xfd/mcp251xfd-regmap.c \ 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 = \ asc2log \ bcmserver \ @@ -106,9 +119,7 @@ EXTRA_DIST += \ autogen.sh \ can-j1939-kickstart.md \ can-j1939.md \ - can-tc-init-etf.sh \ - mcp251xfd/99-devcoredump.rules \ - mcp251xfd/devcoredump + can-tc-init-etf.sh MAINTAINERCLEANFILES = \ configure \ diff --git a/mcp251xfd/data/devcoredump-canfd-v5.15.dump b/mcp251xfd/data/devcoredump-canfd-v5.15.dump new file mode 100644 index 0000000..84ce9fc Binary files /dev/null and b/mcp251xfd/data/devcoredump-canfd-v5.15.dump differ diff --git a/mcp251xfd/data/devcoredump-canfd.dump b/mcp251xfd/data/devcoredump-canfd.dump new file mode 100644 index 0000000..57be955 Binary files /dev/null and b/mcp251xfd/data/devcoredump-canfd.dump differ diff --git a/mcp251xfd/data/devcoredump-classic-can-v5.15.dump b/mcp251xfd/data/devcoredump-classic-can-v5.15.dump new file mode 100644 index 0000000..59f7364 Binary files /dev/null and b/mcp251xfd/data/devcoredump-classic-can-v5.15.dump differ diff --git a/mcp251xfd/data/devcoredump-classic-can.dump b/mcp251xfd/data/devcoredump-classic-can.dump new file mode 100644 index 0000000..fa23c3e Binary files /dev/null and b/mcp251xfd/data/devcoredump-classic-can.dump differ diff --git a/mcp251xfd/data/registers-canfd-v5.15.dump b/mcp251xfd/data/registers-canfd-v5.15.dump new file mode 100644 index 0000000..ff0bd20 --- /dev/null +++ b/mcp251xfd/data/registers-canfd-v5.15.dump @@ -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 diff --git a/mcp251xfd/data/registers-canfd.dump b/mcp251xfd/data/registers-canfd.dump new file mode 100644 index 0000000..3f1b016 --- /dev/null +++ b/mcp251xfd/data/registers-canfd.dump @@ -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 diff --git a/mcp251xfd/data/registers-classic-can-v5.15.dump b/mcp251xfd/data/registers-classic-can-v5.15.dump new file mode 100644 index 0000000..ff711f6 --- /dev/null +++ b/mcp251xfd/data/registers-classic-can-v5.15.dump @@ -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 diff --git a/mcp251xfd/data/registers-classic-can.dump b/mcp251xfd/data/registers-classic-can.dump new file mode 100644 index 0000000..14a4a03 --- /dev/null +++ b/mcp251xfd/data/registers-classic-can.dump @@ -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 diff --git a/mcp251xfd/mcp251xfd-dev-coredump.c b/mcp251xfd/mcp251xfd-dev-coredump.c index 680c734..0349d22 100644 --- a/mcp251xfd/mcp251xfd-dev-coredump.c +++ b/mcp251xfd/mcp251xfd-dev-coredump.c @@ -21,7 +21,6 @@ #include "mcp251xfd.h" #include "mcp251xfd-dump-userspace.h" - struct mcp251xfd_dump_iter { const void *start; const struct mcp251xfd_dump_object_header *hdr; @@ -29,20 +28,20 @@ struct mcp251xfd_dump_iter { const void *object_end; }; -static __attribute__((__unused__)) const char * +const char * get_object_type_str(enum mcp251xfd_dump_object_type object_type) { switch (object_type) { case MCP251XFD_DUMP_OBJECT_TYPE_REG: - return "reg"; + return "REG"; case MCP251XFD_DUMP_OBJECT_TYPE_TEF: - return "tef"; + return "TEF"; case MCP251XFD_DUMP_OBJECT_TYPE_RX: - return "rx"; + return "RX"; case MCP251XFD_DUMP_OBJECT_TYPE_TX: - return "tx"; + return "TX"; case MCP251XFD_DUMP_OBJECT_TYPE_END: - return "end"; + return "END"; default: return ""; } @@ -86,7 +85,7 @@ do_dev_coredump_read_reg(const struct mcp251xfd_priv *priv, reg = le32toh(object->reg); 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__, (void *)object - iter->start, reg, val); @@ -116,7 +115,7 @@ do_dev_coredump_read_ring(const struct mcp251xfd_priv *priv, key = le32toh(object->reg); 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__, (void *)object - iter->start, 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; break; default: - return -EINVAL; + continue; } } @@ -167,6 +166,7 @@ do_dev_coredump_read(struct mcp251xfd_priv *priv, le32toh(iter->hdr->magic) == MCP251XFD_DUMP_MAGIC) { const struct mcp251xfd_dump_object_header *hdr = iter->hdr; enum mcp251xfd_dump_object_type object_type; + struct mcp251xfd_ring ring; size_t object_offset, object_len; int err; @@ -180,6 +180,8 @@ do_dev_coredump_read(struct mcp251xfd_priv *priv, iter->object_start = iter->start + object_offset; 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", __func__, (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); break; case MCP251XFD_DUMP_OBJECT_TYPE_TEF: - err = do_dev_coredump_read_ring(priv, iter, priv->tef); - break; case MCP251XFD_DUMP_OBJECT_TYPE_RX: - err = do_dev_coredump_read_ring(priv, iter, priv->rx); - break; 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; case MCP251XFD_DUMP_OBJECT_TYPE_END: return 0; diff --git a/mcp251xfd/mcp251xfd-dump-userspace.h b/mcp251xfd/mcp251xfd-dump-userspace.h index 890821e..0c7ee5d 100644 --- a/mcp251xfd/mcp251xfd-dump-userspace.h +++ b/mcp251xfd/mcp251xfd-dump-userspace.h @@ -12,14 +12,17 @@ #include "mcp251xfd.h" #include "mcp251xfd-dump.h" -#define MCP251XFD_TX_FIFO 1 -#define MCP251XFD_RX_FIFO(x) (MCP251XFD_TX_FIFO + 1 + (x)) +#define MCP251XFD_DUMP_UNKNOWN (-1U) struct mcp251xfd_mem { char buf[0x1000]; }; struct mcp251xfd_ring { + enum mcp251xfd_dump_object_type type; + const struct mcp251xfd_dump_regs_fifo *fifo; + void *ram; + unsigned int head; unsigned int tail; @@ -30,25 +33,14 @@ struct mcp251xfd_ring { u8 obj_size; }; +#define MCP251XFD_RING_TEF 0 + struct mcp251xfd_priv { struct regmap *map; - - struct mcp251xfd_ring tef[1]; - struct mcp251xfd_ring tx[1]; - struct mcp251xfd_ring rx[1]; - - u8 rx_ring_num; + struct mcp251xfd_ring ring[32]; }; -static inline u8 mcp251xfd_get_ring_head(const 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_ring_init(struct mcp251xfd_ring *ring); void mcp251xfd_dump(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, struct mcp251xfd_mem *mem, const char *file_path); +const char * +get_object_type_str(enum mcp251xfd_dump_object_type object_type); #endif diff --git a/mcp251xfd/mcp251xfd-dump.c b/mcp251xfd/mcp251xfd-dump.c index eb2e1ed..74d9ee8 100644 --- a/mcp251xfd/mcp251xfd-dump.c +++ b/mcp251xfd/mcp251xfd-dump.c @@ -2,7 +2,7 @@ // // Microchip MCP251xFD Family CAN controller debug tool // -// Copyright (c) 2019, 2020, 2021 Pengutronix, +// Copyright (c) 2019, 2020, 2021, 2022 Pengutronix, // Marc Kleine-Budde // @@ -72,6 +72,18 @@ struct mcp251xfd_dump_regs_mcp251xfd { 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) \ pr_info("%16s %s\t\t%s\n", __stringify(bit), \ (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_mcp251xfd *regs_mcp251xfd) { + unsigned int i; + netdev_info(priv->ndev, "-------------------- register dump --------------------\n"); __dump_call(regs, con); __dump_call(regs, nbtcfg); @@ -444,29 +458,45 @@ mcp251xfd_dump_regs(const struct mcp251xfd_priv *priv, __dump_call(regs, bdiag1); __dump_call(regs_mcp251xfd, osc); __dump_call(regs_mcp251xfd, iocon); - pr_info("-------------------- TEF --------------------\n"); - __dump_call(regs, tefcon); - __dump_call(regs, tefsta); - __dump_call(regs, tefua); - pr_info("-------------------- TX_FIFO --------------------\n"); - __dump_call_fifo(fifocon, fifo[MCP251XFD_TX_FIFO].con); - __dump_call_fifo(fifosta, fifo[MCP251XFD_TX_FIFO].sta); - __dump_call_fifo(fifoua, fifo[MCP251XFD_TX_FIFO].ua); - pr_info(" -------------------- RX_FIFO --------------------\n"); - __dump_call_fifo(fifocon, fifo[MCP251XFD_RX_FIFO(0)].con); - __dump_call_fifo(fifosta, fifo[MCP251XFD_RX_FIFO(0)].sta); - __dump_call_fifo(fifoua, fifo[MCP251XFD_RX_FIFO(0)].ua); - netdev_info(priv->ndev, "------------------------- end -------------------------\n"); + + for (i = 0; i < ARRAY_SIZE(regs->fifo); i++) { + const struct mcp251xfd_dump_regs_fifo *fifo = ®s->fifo[i]; + + if (mcp251xfd_fifo_is_unused(fifo)) + continue; + + pr_info("----------------------- FIFO %2d - ", i); + + if (i == 0) { + pr_info("TEF -----------------\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_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; - 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) { case MCP251XFD_REG_FIFOCON_PLSIZE_8: return 8; @@ -489,16 +519,91 @@ static u8 mcp251xfd_dump_get_fifo_size(const struct mcp251xfd_priv *priv, const 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; - 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; } -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; u8 len; @@ -529,326 +634,228 @@ static void mcp251xfd_dump_ram_fifo_obj_data(const struct mcp251xfd_priv *priv, pr_cont("\n"); } -/* TEF */ - -static u8 -mcp251xfd_dump_get_tef_obj_num(const struct mcp251xfd_priv *priv, - const struct mcp251xfd_dump_regs *regs) +static void +mcp251xfd_dump_analyze_regs_and_ram(struct mcp251xfd_priv *priv, + const struct mcp251xfd_dump_regs *regs, + const struct mcp251xfd_dump_ram *ram) { - 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 = ®s->tef; + + ring->type = MCP251XFD_DUMP_OBJECT_TYPE_TEF; + + ring->nr = 0; + ring->obj_size = mcp251xfd_dump_get_tef_obj_size(priv, fifo); + } else { + fifo = ®s->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 -mcp251xfd_dump_get_tef_tail(const struct mcp251xfd_priv *priv, - const struct mcp251xfd_dump_regs *regs) +static const char * +mcp251xfd_dump_ring_obj_one_fifo_flags_chip(const struct mcp251xfd_priv *priv, + 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 -mcp251xfd_dump_get_tef_obj_rel_addr(const struct mcp251xfd_priv *priv, - u8 n) +static const char * +mcp251xfd_dump_ring_obj_one_fifo_flags_ring(const struct mcp251xfd_priv *priv, + 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 -mcp251xfd_dump_ram_tef_obj_one(const struct mcp251xfd_priv *priv, - const struct mcp251xfd_dump_regs *regs, - const struct mcp251xfd_ring *tef, - const struct mcp251xfd_hw_tef_obj *hw_tef_obj, - u8 n) +mcp251xfd_dump_ring_obj_one(const struct mcp251xfd_priv *priv, + const struct mcp251xfd_ring *ring, + const void *hw_obj, const u8 n) { - pr_info("TEF Object: 0x%02x (0x%03x)%s%s%s%s%s\n", - n, mcp251xfd_dump_get_tef_obj_addr(priv, n), - mcp251xfd_get_ring_head(tef) == n ? " priv-HEAD" : "", - mcp251xfd_dump_get_tef_tail(priv, regs) == n ? " chip-TAIL" : "", - mcp251xfd_get_ring_tail(tef) == n ? " priv-TAIL" : "", - (mcp251xfd_dump_get_tef_tail(priv, regs) == n ? - ((regs->tef.sta & MCP251XFD_REG_TEFSTA_TEFFIF) ? " chip-FIFO-full" : - !(regs->tef.sta & MCP251XFD_REG_TEFSTA_TEFNEIF) ? " chip-FIFO-empty" : "") : - ("")), - (mcp251xfd_get_ring_head(tef) == mcp251xfd_get_ring_tail(tef) && - mcp251xfd_get_ring_tail(tef) == n ? - (priv->tef->head == priv->tef->tail ? " priv-FIFO-empty" : " priv-FIFO-full") : - (""))); + const struct mcp251xfd_hw_tef_obj *hw_tef_obj = hw_obj; + const struct mcp251xfd_hw_rx_obj_canfd *hw_rx_obj = hw_obj; + const struct mcp251xfd_hw_tx_obj_canfd *hw_tx_obj = hw_obj; + + pr_info("%s-%d Object: " + "0x%02x (0x%03x)" + "%s%s%s%s%s%s" + "\n", + get_object_type_str(ring->type), ring->nr, + n, mcp251xfd_dump_get_ring_obj_addr(priv, ring, n), + + 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", "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 -mcp251xfd_dump_ram_tef_obj(const struct mcp251xfd_priv *priv, - const struct mcp251xfd_dump_regs *regs, - const struct mcp251xfd_dump_ram *ram, - const struct mcp251xfd_ring *tef) -{ - int i; + if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TEF || + ring->type == MCP251XFD_DUMP_OBJECT_TYPE_RX) + pr_info("%16s = 0x%08x\n", "ts", hw_tef_obj->ts); - pr_info("\nTEF Overview:\n"); - pr_info("%16s = 0x%02x 0x%08x\n", "head (p)", - mcp251xfd_get_ring_head(tef), - tef->head); - pr_info("%16s = 0x%02x 0x%02x 0x%08x\n", "tail (c/p)", - 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); + if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TEF) { + __dump_mask(hw_tef_obj->flags, MCP251XFD_OBJ_FLAGS, SEQ, "0x%06lx", "Sequence"); + } else if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TX) { + __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)"); } -} -/* dump TX */ + if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_RX || + ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TX) { + const u8* data; + u8 dlc; -static void -mcp251xfd_dump_ram_tx_obj_one(const struct mcp251xfd_priv *priv, - const struct mcp251xfd_dump_regs *regs, - const struct mcp251xfd_ring *tx, - 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"); -} + if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_RX) + data = hw_rx_obj->data; + else + data = hw_tx_obj->data; -static void -mcp251xfd_dump_ram_tx_obj(const struct mcp251xfd_priv *priv, - 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); + dlc = FIELD_GET(MCP251XFD_OBJ_FLAGS_DLC, hw_rx_obj->flags); + mcp251xfd_dump_ring_obj_data(priv, data, dlc); } -} -/* 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"); } static void -mcp251xfd_dump_ram_rx_obj(const struct mcp251xfd_priv *priv, - const struct mcp251xfd_dump_regs *regs, - const struct mcp251xfd_dump_ram *ram, - const struct mcp251xfd_ring *rx) +mcp251xfd_dump_ring(const struct mcp251xfd_priv *priv, + const struct mcp251xfd_ring *ring, + const struct mcp251xfd_dump_regs *regs) { int i; - pr_info("\nRX Overview:\n"); - pr_info("%16s = 0x%02x 0x%02x 0x%08x\n", "head (c/p)", - mcp251xfd_dump_get_rx_head(priv, regs), - mcp251xfd_get_ring_head(rx), rx->head); - pr_info("%16s = 0x%02x 0x%02x 0x%08x\n", "tail (c/p)", - mcp251xfd_dump_get_rx_tail(priv, regs), - mcp251xfd_get_ring_tail(rx), rx->tail); + pr_info("\n%s-%d FIFO %d Overview:\n", + get_object_type_str(ring->type), ring->nr, ring->fifo_nr); + + if (ring->type == MCP251XFD_DUMP_OBJECT_TYPE_TEF) { + if (ring->head == MCP251XFD_DUMP_UNKNOWN) + pr_info("%16s\n", "head ( / )"); + 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"); - for (i = 0; i < mcp251xfd_dump_get_rx_obj_num(priv, regs); i++) { - const struct mcp251xfd_hw_rx_obj_canfd *hw_rx_obj; - u16 hw_rx_obj_rel_addr; + for (i = 0; i < ring->obj_num; i++) { + void *hw_obj; - hw_rx_obj_rel_addr = mcp251xfd_dump_get_rx_obj_rel_addr(priv, regs, i); - hw_rx_obj = (const struct mcp251xfd_hw_rx_obj_canfd *)&ram->ram[hw_rx_obj_rel_addr]; - - mcp251xfd_dump_ram_rx_obj_one(priv, regs, rx, hw_rx_obj, i); + hw_obj = mcp251xfd_dump_get_ring_hw_obj(priv, ring, i); + mcp251xfd_dump_ring_obj_one(priv, ring, hw_obj, i); } } #undef __dump_mask #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"); - mcp251xfd_dump_ram_tef_obj(priv, regs, ram, priv->tef); - mcp251xfd_dump_ram_tx_obj(priv, regs, ram, priv->tx); - mcp251xfd_dump_ram_rx_obj(priv, regs, ram, priv->rx); + + for (i = 0; i < ARRAY_SIZE(regs->fifo); i++) { + 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"); } @@ -877,6 +884,7 @@ void mcp251xfd_dump(struct mcp251xfd_priv *priv) if (err) return; + mcp251xfd_dump_analyze_regs_and_ram(priv, ®s, &ram); mcp251xfd_dump_regs(priv, ®s, ®s_mcp251xfd); mcp251xfd_dump_ram(priv, ®s, &ram); } diff --git a/mcp251xfd/mcp251xfd-gen-testdata.sh b/mcp251xfd/mcp251xfd-gen-testdata.sh new file mode 100755 index 0000000..3f57a71 --- /dev/null +++ b/mcp251xfd/mcp251xfd-gen-testdata.sh @@ -0,0 +1,50 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# +# Copyright (c) 2023 Pengutronix, +# Marc Kleine-Budde + +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 diff --git a/mcp251xfd/mcp251xfd-main.c b/mcp251xfd/mcp251xfd-main.c index 4acd548..4e8273f 100644 --- a/mcp251xfd/mcp251xfd-main.c +++ b/mcp251xfd/mcp251xfd-main.c @@ -45,6 +45,17 @@ int regmap_bulk_read(struct regmap *map, unsigned int reg, 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[]) { struct mcp251xfd_mem mem = { }; @@ -55,6 +66,7 @@ int main(int argc, char *argv[]) .map = &map, }; const char *file_path; + unsigned int i; int opt, err; struct option long_options[] = { @@ -83,6 +95,9 @@ int main(int argc, char *argv[]) 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); if (err) err = mcp251xfd_regmap_read(&priv, &mem, file_path); diff --git a/mcp251xfd/mcp251xfd-regmap.c b/mcp251xfd/mcp251xfd-regmap.c index 61105f0..1144722 100644 --- a/mcp251xfd/mcp251xfd-regmap.c +++ b/mcp251xfd/mcp251xfd-regmap.c @@ -2,7 +2,7 @@ // // Microchip MCP251xFD Family CAN controller debug tool // -// Copyright (c) 2020 Pengutronix, +// Copyright (c) 2020, 2022, 2023 Pengutronix, // Marc Kleine-Budde // @@ -26,21 +26,37 @@ do_mcp251xfd_regmap_read(struct mcp251xfd_priv *priv, FILE *reg_file; uint16_t reg; uint32_t val; + unsigned int n = 0; + int ret, err = 0; reg_file = fopen(file_path, "r"); if (!reg_file) return -errno; - while (fscanf(reg_file, "%hx: %x\n", ®, &val) == 2) { - if (reg >= ARRAY_SIZE(mem->buf)) - return -EINVAL; + while ((ret = fscanf(reg_file, "%hx: %x\n", ®, &val)) != EOF) { + if (ret != 2) { + fscanf(reg_file, "%*[^\n]\n"); + continue; + } + + if (reg >= ARRAY_SIZE(mem->buf)) { + err = -EINVAL; + goto out_close; + } *(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); - return 0; + return err; } int mcp251xfd_regmap_read(struct mcp251xfd_priv *priv,