From 088176e4e038ed69cc185cd9e86797dae956673b Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Fri, 11 Mar 2022 15:50:02 +0100 Subject: [PATCH 1/5] mcp251xfd-dump: fail if no registers can be read from regmap file --- mcp251xfd/mcp251xfd-regmap.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/mcp251xfd/mcp251xfd-regmap.c b/mcp251xfd/mcp251xfd-regmap.c index 61105f0..902ef5f 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 Pengutronix, // Marc Kleine-Budde // @@ -26,21 +26,32 @@ do_mcp251xfd_regmap_read(struct mcp251xfd_priv *priv, FILE *reg_file; uint16_t reg; uint32_t val; + unsigned int n = 0; + int 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; + 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, From ceb9761544ab27189de34f7468964894290736bd Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Tue, 3 Jan 2023 13:08:00 +0100 Subject: [PATCH 2/5] mcp251xfd-dump: regmap: skip lines that cannot be read --- mcp251xfd/mcp251xfd-regmap.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mcp251xfd/mcp251xfd-regmap.c b/mcp251xfd/mcp251xfd-regmap.c index 902ef5f..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, 2022 Pengutronix, +// Copyright (c) 2020, 2022, 2023 Pengutronix, // Marc Kleine-Budde // @@ -27,13 +27,18 @@ do_mcp251xfd_regmap_read(struct mcp251xfd_priv *priv, uint16_t reg; uint32_t val; unsigned int n = 0; - int err = 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) { + 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; From 0847fb34b4438e5e6fba8a51e34857f29eb1d3d8 Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Tue, 3 Jan 2023 15:44:39 +0100 Subject: [PATCH 3/5] mcp251xfd-gen-testdata: add script to generate mcp251xfd-dump data --- GNUmakefile.am | 9 ++++-- mcp251xfd/mcp251xfd-gen-testdata.sh | 50 +++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 3 deletions(-) create mode 100755 mcp251xfd/mcp251xfd-gen-testdata.sh diff --git a/GNUmakefile.am b/GNUmakefile.am index 86bcb39..a734e9d 100644 --- a/GNUmakefile.am +++ b/GNUmakefile.am @@ -60,6 +60,11 @@ mcp251xfd_dump_SOURCES = \ mcp251xfd/mcp251xfd-regmap.c \ mcp251xfd/mcp251xfd.h +EXTRA_DIST += \ + mcp251xfd/99-devcoredump.rules \ + mcp251xfd/devcoredump \ + mcp251xfd/mcp251xfd-gen-testdata.sh + bin_PROGRAMS = \ asc2log \ bcmserver \ @@ -106,9 +111,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/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 From b4042d0205b7b101778a644d44d50d4fcbcfb61e Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Tue, 8 Mar 2022 18:06:45 +0100 Subject: [PATCH 4/5] mcp251xfd-dump: add test data --- GNUmakefile.am | 8 + mcp251xfd/data/devcoredump-canfd-v5.15.dump | Bin 0 -> 5888 bytes mcp251xfd/data/devcoredump-canfd.dump | Bin 0 -> 5960 bytes .../data/devcoredump-classic-can-v5.15.dump | Bin 0 -> 5888 bytes mcp251xfd/data/devcoredump-classic-can.dump | Bin 0 -> 6032 bytes mcp251xfd/data/registers-canfd-v5.15.dump | 706 ++++++++++++++++++ mcp251xfd/data/registers-canfd.dump | 706 ++++++++++++++++++ .../data/registers-classic-can-v5.15.dump | 706 ++++++++++++++++++ mcp251xfd/data/registers-classic-can.dump | 706 ++++++++++++++++++ 9 files changed, 2832 insertions(+) create mode 100644 mcp251xfd/data/devcoredump-canfd-v5.15.dump create mode 100644 mcp251xfd/data/devcoredump-canfd.dump create mode 100644 mcp251xfd/data/devcoredump-classic-can-v5.15.dump create mode 100644 mcp251xfd/data/devcoredump-classic-can.dump create mode 100644 mcp251xfd/data/registers-canfd-v5.15.dump create mode 100644 mcp251xfd/data/registers-canfd.dump create mode 100644 mcp251xfd/data/registers-classic-can-v5.15.dump create mode 100644 mcp251xfd/data/registers-classic-can.dump diff --git a/GNUmakefile.am b/GNUmakefile.am index a734e9d..5a7ad75 100644 --- a/GNUmakefile.am +++ b/GNUmakefile.am @@ -62,6 +62,14 @@ mcp251xfd_dump_SOURCES = \ 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 diff --git a/mcp251xfd/data/devcoredump-canfd-v5.15.dump b/mcp251xfd/data/devcoredump-canfd-v5.15.dump new file mode 100644 index 0000000000000000000000000000000000000000..84ce9fc35cfa2c0e20270de94f283178aa8a2dbb GIT binary patch literal 5888 zcmZA5FQ_v49>?){&f~L>yDN)9F7Cx(aKQzG!C(-sa1FwB!62-`Fu`Cj7z_r3ECz$Y zAY6kN3oT0h>D?9DDGzlTL?T^MC#;{L*nE7{wUIF@biBHd0#bxYAm_*J?)E$ZD~DX?lj9m0|T9Jx?#lxO$OZqPsG!UZz**Rhd_>(d+bv zbk&>m7QHQN>K%HQ-jgl$K7BwR%AWd&KBiCPNPSA5(dTlezMwDZE4fl%(>L_3+^O&6 zPdbHr`T>u4!ZTj*iZ{ID1E1*VwPC}9Ui6_K1NeG#(eHqj10L~&XT0DQZ+OQCKJoRTsmJlyho^=Yedxyk1~G(T zj9?UF7{>%AF@0+jmv(*%(ypJPwCl6P&s{8I1*=%YIySJ0Eo@^4yV%1%4sa;# zxJJ^BYb@>cF_CsXO{I+)&T)ZDT;UowxWygr@qkA>;TbQ|j_WGzxNg#3pLhC0+IXU) z&tw}O^r8>_7{DNgFpLq5VhrP$z$B(HjTy{h4)a*RB9_p_GFGsPHLPO;o7loOcCd>* z?Bf83IKnYbaEddW;{uns!ZmJii#y!o0grgXGhXnDH@xEmpXlg2#OwJ-FZ$4r0SsaY z!x+IR#xRZvOkxVtn87UOFpmW+VhLR=V+E^N!#Xywi7jkn2fNtAJ`Qk*BOK!dr#Qno zE^vt}T;m3}xWhdj@Q5co;{~sH!#h6kiLW;ad;Qy+g@zY>=*IvCF@#}^U=(8*#{?!Z zg=x%S7IT=#0v54^E|#%^Rjgqh8`#7awy}d<>|q}VIK&Z-ae`Bv;T#vZ#1*b_gInC; z9uIiL6Q1#cSG?gJANWM)%RioX4|>suehgp`Lm0*gMlptQOkfgIn8pldF^739U=d5` zVi_w~#TwSJflX{-8#~y=9`;TbP@#T(x7 zflqY4;`v7}`p}O73}Ohw7{MsUFpddKVhYok!7S!5j|D7Z30*8>1*=%YIySJ0Eo@^4 zyV%1%4seJg9ODG1IKw$EaEU8i;|905!#y7Gh$lSb1+RF+J3jD<&euHu=tUp;F@Qk~ zVHhJA#Tdphfk{kZ8Z(&19OkirMJ%C|hsr*vA15afD->;1p*# z#|18Ng=^g47I(PE10L~&XT0DQZ+OQCKGFF`_XoNc^vI9S$B$n5Nh>~SUlIKB&!K;p zzV2;IyT`C$>o(rsPTIPCz4X}+H2%I_UiTjFx3hiO?TBBCZI{zxBtI_uXFhhlkI3e&?LW$8(OJqwjwB%5PMT zn)@?j-l_jW%Ox$xrR~3zga7q+&-$;l-uwA~+yAXn^lv$DetYe*y|)45w!VCAJl2n1 z8n5`}=kH$lY~Q>vb}~tmOa>nPFTM{xG$w>$j9?UFXyv8e9jR}wk$wShsJWL)TkIJC(7?m)Mx5+zlpu9`oBk#+J@&Wmfd?Xjj$K(_8soW@^k9@h6>s@*VE+fJZ#x883Ln8{W~_FAtRq-RMCt`tb2(qwNFqgBZdv zMlgyojAH_mn8Gw>FpD|NV*wp3VhPJw!7A3Ujty*L3)|SiF7~jG103QA$2h?$&Tx(k zT;dAXxWO&%aE}K(;t9`aT>3h<=U3`-GH&_D@81{?x!2~}z$d@`^H<|157=BSsP@yB z!51NED~u70N;`f`+VSJkj-OzC5>uGQ3}!Khc`TrVMJ!<%D_F%E)}@_SL)v*YrG0-b zX)pb@wAH~b_OOow9O4MaIKe5-aE=RH;!4_it)-pUM%v@MCErO~dpzI~Pk6=)Uh#%^ zeB3lOp3B}mRc`d47k%i*00uFHVT@oDV;IK-CNYI+%wQICn8yM-Si};Rv4T~sVI3RT z#1^)(gI(-l9|t(Z5sqC_>1~##UZR}tdd)UVT4snEIoZu8^IL8GpafNH# z;1+kd#{(YmglD|q6>oUQ$4$n5{_V|1uGQ3}!Kh zc`TrVMJ!<%D_F%E*0F(2Y+)Na*u@_9aezY{;TR`4#Tm|VflFNB8aKGb9q#dfM?B#f zFL=cp-qF1MaNb?$Mh|+?hkguT5JMQo2u3l6aZF$mQ<%mKW-*6(ETDr$EMXZdSj8IF zv4Kr&VH-Qx#UA!?fI}SN7$-Qz8P0KmOI+a^H@L+e?(u*}JmDEHc*Psu(R|GLM>l%V zi$3&Y0E5y#uZE<(q{8G8jA9Jqn7|~aFpU|^Vh;0IKnIIhl6F32X@9p=q~SGdLvZgGcuJm3*ec*YA}@rHLa zpJ;L_7rN1dUi6_K0~o{*hB1OsjA0xTn8XyOF@ssmVIB+UU=d4L#tK%khIMRU6Ixg_PH~2FT;LK{xW)}`aff?6;1N%F#tUBYhIcfd>OWCkmoE9ryn5x9 zueIQj_7TA=pGtp=K0ZrUdrjN2%eJ2XoV3gK@zP^gsQ$lSR2w|s&wf7b&k?Vh-7ll| pRL}p0viGv5vFvNuIoSQ4UhiqYr){iuo1m`s=dWj%pYNAe{~ywcrH}vs literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..59f73648f3fdc23af9ef17c41465f73acbc6649b GIT binary patch literal 5888 zcmZA5Kd5Ti8OGst&v9~{L;A`f@B96C zzkGA5oSOIN&V8@`2Q3%0oRHRkk-g9Quj+3;>;Ffk=>Jvv`1==+^}Y@|uXug^#`&!8 ze{p{Cm*4!_6R^Jf;Oxs&E|m&C```X9^wha9MlgyojH7L%RZ{JvT1xF#T1-o;j9OkT zYaNyCXUmnI*;iUFsFl=;YCTu_Xv-hY71vOFC0jgVHYc`%b*R-Av zOzYV%xi)!6)|7Y2d*prDQa&Ibl8k5bxNIIxyLRdS90E`&iQ0Wxt}~hZWmij zd5}Cr9+oNP5%MT`Oy-ow$rI#BSyG-NPm^b4O?j3)N1m50;1^JSECH>0R z3@P8qziHJy`2ml3!ZTj*iZ{ID1K-iv%|hitFZxiofM*5pd2>+`q#wdCMlgyo zjAH_mn8Gw>FpD|NV*!g;!ZKE{iZ!fb1Dn{wHg>R!J?!HEhd9D9PH>7doZ|wQxWYAV zaEm+K;{lI&!ZTj*icZ&}EqbI^dgY&A%Fajbw_Fnf@*ltbmwO`*TCNsS`|+=T`Vc0M zSpE~|qVn%Arw=jmxaInSg#4lX$Co5|%JQE&mzF>N;rNmv&sy&LbZ_|Qzkhhmt8Z1n zB9^3We_7i0SIDbaW4vzTn%IzbX*U^fG2XUuwGRERwCd6COWUu3)a}y^86Pn|wsCF1 zMB32Q{-|cswr?(NKNr$|r4C_ID%oHEzrJ4)=J#Bc7yv{#n}oU!DfN921zt z6s9qQSWH~92dC66|QlETioFu z4|v2Ap7DZLyx|=m_>S)DPv_f%Ui6_K1NeqP3}F}}7{wUIF@Z@;VHz`-#T@3bfJH1} z87o-D8rHFaO>AKsJJ`h@_Hlqi9N`!zIK>&xae+%*;Tku%#U1YPfJZ#x883Ln8{YAO z@96YQYUM$DMz!*x9|QP?K@4FSBN)XP#xa3OOko-`n8h6Cv4BM^VHqn}#TwSJflX{- z8#~y=9`;TbP@#T(x7f$!*k_UU|k(2G9w zV*uYUh#?GP1fv+kI3_TODNJJqvzWs?7O;pVEMo<$Si?Ftu!${fV+Xs~!#)mhh$9^1 z1gAK|IWBOCD_r9Sx46SS9`J}KJmUqgc*8qB@EzSZpWc~0@>Tz{>y=+=!6)qz!7u+; z*0*;>)84_X>|M{w-sP<9wZeW{?D0~sv(Nf+J$q;Ud_DUtTQ8($>jl)TzFe>L#d@|a KpMRfU{r>`9sH`Xe literal 0 HcmV?d00001 diff --git a/mcp251xfd/data/devcoredump-classic-can.dump b/mcp251xfd/data/devcoredump-classic-can.dump new file mode 100644 index 0000000000000000000000000000000000000000..fa23c3ef3127efb3233e92ddca448952990271d4 GIT binary patch literal 6032 zcma*rF{mQj9mnz6y>6~AkryG7T!JJPhM2^{!oos`5Fr*mkRZfD$P^Y978Vv37Uspm z!hnSYAIOV^g%Ar13kwSi3kwSiAr=NKBv@Ej2)Tuj{QmBDlgn25v*&*1{LVQ#Gmbj$ zSHJn$i=(Qld4K3QU#b62+jVUxr1js+>1X}(XZ_HR{x|o}RvReAf5Bcl_dC|NPZc!1~TR$968|q*B30|Hr=$J#?HfMlgyojH4ZcRZ{I) zEv5DgZKkDFMlG+FwT>#M)^yxQ_CebPHCL^urgcBHZF``SxTuxYEU!o_JC8@5u$ol< z{kny!hMKDfY|5_VKDXqv9;Yq+vLo%8x(^+vCqv5nkG|^+$cHkfd_+DbpU9N*Dfx_i zE_2EkT^UneA}^CyWJ-CJyhdJ^Ipq!VCV5M`%G=}}@~*5Z?~(V(2ePSrNIoJT%dYYX z`ILMnhsx*V3-YC$DqoSW$v1MTd@KL>^`D#_`5q5=#1o$Jf>*rZE8fwu4-=IKz34-I z1UxE$j}IRuLHZ#KV+5lZ!#E}|i78BD2D6yMJQlEsE|##26|7)601wy=#I>|zi5 zIKUx}aEue2;tc1wz$LD5jT_wJ4)=J#BcAY#7j!(1W1AkS%gOP|pa1Tcj*r}Lxh4cG z|I5gEArD%v7E=4|KYsEqOdhfPJB|~Te+_)|E=C@=Tu+dYfB*dt-Y3aZmVeiA((?J+ zKflkAXD#>Xy(s^1dVb1Fs{$6$mA3ySY5QN6w*M8zt5}mZuP$v~L)!5)rCsVRY1NiC zuOn?)9#$5)djD3!&kiHy>+Z3OM`iC_DM@RQwRvz@C5B(Ux7Yt$u!x+IR#xRZvOkxVtn87UOFpmW+qKhRg zV+E^N!#Xywi7jkn2fNtAJ`Qk*BOK!dr#QnoE^vt}T;m3}xWhdj@Q5co;{~sH!&kiH z<4eR|fBP~~*>|*+5B(Ux7Yt$u!x+IR#xRZvOkxVtn87UOFpmW+qKhRgV+E^N!#Xyw zi7jkn2fNtAJ`Qk*BOK!dr#QnoE^vt}T;m3}xWhdj@Q5co;{~sH!&khc^To&4+k;;8 zp&tYIfAGX#{mv; zgkzlG6lXZc1uk)gYuw-#ceuv`9`S@{yx|hsr*vA15rQMH@q`jra z!ZKE{iZ!fb1Dn{wHg>R!J?!HEhd9D9PH>7doZ|wQxWYAVaEm+K;{lI&!ZTj*iZ^`4 zJ33!}{LSo{dPZX Lt*!fXe762SIykP5 literal 0 HcmV?d00001 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 From f3b35e8e8034bf98b7c8d2b379f960117b672961 Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Wed, 16 Mar 2022 13:18:52 +0100 Subject: [PATCH 5/5] mcp251xfd-dump: add support for dumps created with Linux kernel >= v5.18 --- mcp251xfd/mcp251xfd-dev-coredump.c | 36 +- mcp251xfd/mcp251xfd-dump-userspace.h | 28 +- mcp251xfd/mcp251xfd-dump.c | 608 ++++++++++++++------------- mcp251xfd/mcp251xfd-main.c | 15 + 4 files changed, 355 insertions(+), 332 deletions(-) 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-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);