Aw: Re: Re: Re: [PATCH net-next v4 11/11] net: dsa: realtek: rtl8365mb: multiple cpu ports, non cpu extint

Frank Wunderlich
2022-01-13T15:56:23Z

Hi,

the problem is checksum offloading on the gmac (soc-side)

root@bpi-r64:~# ethtool -k eth1 | grep checksum
rx-checksumming: on
tx-checksumming: on
tx-checksum-ipv4: on #<<<<<<<<<<<<<
tx-checksum-ip-generic: off [fixed]
tx-checksum-ipv6: on #<<<<<<<<<<<<<
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]

in my case i tried ipv4....and after disabling the offload i get a connection

root@bpi-r64:~# ethtool -K eth1 rx off tx off
Actual changes:
tx-checksum-ipv4: off
tx-checksum-ipv6: off
tx-tcp-segmentation: off [not requested]
tx-tcp6-segmentation: off [not requested]
rx-checksum: off
root@bpi-r64:~# telnet 192.168.1.1 22
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
^C

regards Frank

> Gesendet: Donnerstag, 13. Januar 2022 um 13:37 Uhr
> Von: "Alvin Šipraga" <ALSI@bang-olufsen.dk>
> An: "Frank Wunderlich" <frank-w@public-files.de>
> Cc: "Luiz Angelo Daros de Luca" <luizluca@gmail.com>, "netdev@vger.kernel.org" <netdev@vger.kernel.org>, "linus.walleij@linaro.org" <linus.walleij@linaro.org>, "andrew@lunn.ch" <andrew@lunn.ch>, "vivien.didelot@gmail.com" <vivien.didelot@gmail.com>, "f.fainelli@gmail.com" <f.fainelli@gmail.com>, "olteanv@gmail.com" <olteanv@gmail.com>, "arinc.unal@arinc9.com" <arinc.unal@arinc9.com>
> Betreff: Re: Aw: Re: Re: [PATCH net-next v4 11/11] net: dsa: realtek: rtl8365mb: multiple cpu ports, non cpu extint
>
> Frank Wunderlich <frank-w@public-files.de> writes:
>
> > Hi,
> >
> >> Gesendet: Dienstag, 11. Januar 2022 um 19:17 Uhr
> >> Von: "Alvin Šipraga" <ALSI@bang-olufsen.dk>
> >
> >> Luiz, any comments regarding this? I suppose if the chip ID/revision is
> >> the same for both 67S and 67RB, they should work pretty much the same,
> >> right?
> >
> > my phy driver is same for both devices and afaik only do different
> > RX/TX delays. With the chip-rev-patch 0x0020 i can init the switch,
> > but have no technical documentation except the phy driver code.
> >
> >> Ping working but TCP not working is a bit strange. You could check the
> >> output of ethtool -S and see if that meets your expectations. If you
> >> have a relatively modern ethtool you can also append --all-groups to the
> >> comment to get a more standard output.
> >
> > as far as i see in tcpdump (suggested by luiz) on target it is a checksum error where checksum is always 0x8382 (maybe some kind of fixed tag).
> >
> > 16:39:07.994825 IP (tos 0x10, ttl 64, id 54002, offset 0, flags [DF], proto TCP (6), length 60)
> > 192.168.1.2.43284 > 192.168.1.1.22: Flags [S], cksum 0x8382
> > (incorrect -> 0xa6f6), seq 3231275121, win 64240, options [mss
> > 1460,sackOK,TS val 1615921214 ecr 0,nop,wscale 7], length 0
> > 16:39:12.154790 IP (tos 0x10, ttl 64, id 54003, offset 0, flags [DF], proto TCP (6), length 60)
> > 192.168.1.2.43284 > 192.168.1.1.22: Flags [S], cksum 0x8382
> > (incorrect -> 0x96b6), seq 3231275121, win 64240, options [mss
> > 1460,sackOK,TS val 1615925374 ecr 0,nop,wscale 7], length 0
>
> That's weird, I must admit I do not recognize this issue at all. Try
> dumping the whole packet with -x and maybe you can see what kind of data
> you are getting.

2 example packets from tcpdump (if you still want to see it)

$ sudo tcpdump -i enx00131100063c -vvv -nn -x
tcpdump: listening on enx00131100063c, link-type EN10MB (Ethernet), capture size 262144 bytes

16:43:50.297259 IP (tos 0x10, ttl 64, id 19802, offset 0, flags [DF], proto TCP (6), length 60)
192.168.1.2.38278 > 192.168.1.1.22: Flags [S], cksum 0x8382 (incorrect -> 0xb704), seq 2565260294, win 64240, options [mss 1460,sackOK,TS val 2917954112 ecr 0,nop,wscale 7], length 0
0x0000: 4510 003c 4d5a 4000 4006 69fe c0a8 0102
0x0010: c0a8 0101 9586 0016 98e6 c406 0000 0000
0x0020: a002 faf0 8382 0000 0204 05b4 0402 080a
0x0030: adec 7240 0000 0000 0103 0307
16:43:51.324255 IP (tos 0x10, ttl 64, id 19803, offset 0, flags [DF], proto TCP (6), length 60)
192.168.1.2.38278 > 192.168.1.1.22: Flags [S], cksum 0x8382 (incorrect -> 0xb300), seq 2565260294, win 64240, options [mss 1460,sackOK,TS val 2917955140 ecr 0,nop,wscale 7], length 0
0x0000: 4510 003c 4d5b 4000 4006 69fd c0a8 0102
0x0010: c0a8 0101 9586 0016 98e6 c406 0000 0000
0x0020: a002 faf0 8382 0000 0204 05b4 0402 080a
0x0030: adec 7644 0000 0000 0103 0307

> >> You can also try adjusting the RGMII TX/RX delay and pause settings -
> >> that might help for the R2 where you aren't getting any packets
> >> through.
> >
> > r2pro i got working by setting both delays to 0 as phy-driver does the same (after some calculation).
> >
> > on r64 this is a bit more tricky, because the phy driver uses tx=1 and rx=3 with this calculation for reg-value
> >
> > regData = (regData & 0xFFF0) | ((txDelay << 3) & 0x0008) | (rxDelay & 0x0007);
> >
> > but in dts i need the values in picosends (?) and here i do not know
> > how to calculate them
>
> Try:
>
> tx-internal-delay-ps = <2000>;
> rx-internal-delay-ps = <1000>;
>
> This should correspond to internal values tx=1 and rx=3.

thanks i've found out and used tx=2000 and rx=900 (your 1000 is rounded to 3), but only disabling checksum-offloading fixed the problem. need to look how to make it persistent.

Afaik switch driver does not do any Checksum-handling so problem lies in the SOC ethernet driver (here i guess the mtk_soc_eth.c for mt7622). maybe i find an option to disable the offloading in dts because boards with mt7531 switch working. maybe DSA-Tag handling can be changed, but this is no breaking point from my POV.

regards Frank