Re: [PATCH net-next v1 3/3] net: dsa: microchip: Fix PHY loopback configuration for KSZ8794 and KSZ8873

From: Oleksij Rempel
Date: Wed Dec 20 2023 - 04:46:57 EST


On Thu, Dec 07, 2023 at 04:00:30PM +0200, Vladimir Oltean wrote:
> On Thu, Dec 07, 2023 at 06:15:02AM +0100, Oleksij Rempel wrote:
> > On Thu, Dec 07, 2023 at 02:28:23AM +0200, Vladimir Oltean wrote:
> > > On Tue, Nov 21, 2023 at 04:24:26PM +0100, Oleksij Rempel wrote:
> > > > Correct the PHY loopback bit handling in the ksz8_w_phy_bmcr and
> > > > ksz8_r_phy_bmcr functions for KSZ8794 and KSZ8873 variants in the ksz8795
> > > > driver. Previously, the code erroneously used Bit 7 of port register 0xD
> > > > for both chip variants, which is actually for LED configuration. This
> > > > update ensures the correct registers and bits are used for the PHY
> > > > loopback feature:
> > > >
> > > > - For KSZ8794: Use 0xF / Bit 7.
> > > > - For KSZ8873: Use 0xD / Bit 0.
> > > >
> > > > Signed-off-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx>
> > > > ---
> > >
> > > How did you find, and how did you test this, and on which one of the switches?
> >
> > I tested it by using "ethtool -t lanX" command on KSZ8873. Before this
> > patch the link will stop to work _after_ end of the selftest. The
> > selftest will fail too.
> >
> > After this patch, the selftest is passed, except of the TCP test. And
> > link is working _after_ the selftest,
>
> So you are suggesting that this far-end loopback mode does work as
> expected by the kernel.
>
> But is that consistent with the description from the datasheet? It speaks
> about an "originating PHY port", but maybe this is confusing, because
> based on your test, even the CPU port could be originating the traffic
> that gets looped back?
>
> I see it says that far-end loopback goes through the switching fabric.
> So the packet, on its return path from the loopback port, gets forwarded
> by its MAC DA? That can't be, because the MAC DA lookup has already
> determined the destination to be the loopback port (and no MAC SA<->DA
> swapping should take place). Or it is forced by the switch to return
> specifically to the originating port?
>
> With a bridge between the 2 LAN ports, and lan1 put in loopback, what
> happens if you send a broadcast packet towards lan1? Will you also see
> it on lan2's link partner, or only on the CPU port?
>
> It's not your fault, but this is all a bit confusing, and I'm not quite
> able to match up the documentation with your results. I will trust the
> experimental results, however.

I did following tests:
ip l a name br0 type bridge
ip l s dev br0 up
ip l s lan1 master br0
ip l s dev lan1 up
ip l s lan2 master br0
ip l s dev lan2 up

# to avoid link drop with the loopback mode
ethtool -s lan1 speed 100 duplex full autoneg off
# currently no tool support loopback configuration, so set it directly
# to the register
mii -i lan1 -p 0 -r 0 -v 6120

################# Test 1 ###########################
# on DUT
ping 192.168.2.200 -I lan1

on eth0/cpu interface:
00:03:20.656445 AF Unknown (4294967295), length 61:
0x0000: ffff 000e cd00 cdbe 0806 0001 0800 0604 ................
0x0010: 0001 000e cd00 cdbe c0a8 010e 0000 0000 ................
0x0020: 0000 c0a8 02c8 0000 0000 0000 0000 0000 ................
0x0030: 0000 0000 0000 0000 01 .........
00:03:20.656548 AF Unknown (4294967295), length 61:
0x0000: ffff 000e cd00 cdbe 0806 0001 0800 0604 ................
0x0010: 0001 000e cd00 cdbe c0a8 010e 0000 0000 ................
0x0020: 0000 c0a8 02c8 0000 0000 0000 0000 0000 ................
0x0030: 0000 0000 0000 0000 00 .........

on lan1 remote system:
100 701.752654927 00:0e:cd:00:cd:be → ff:ff:ff:ff:ff:ff ARP 60 Who has 192.168.2.200? Tell 192.168.1.14

on lan2 remote system:
347 1071.154437549 00:0e:cd:00:cd:be → ff:ff:ff:ff:ff:ff ARP 60 Who has 192.168.2.200? Tell 192.168.1.14


################# Test 2 ###########################
# send ping on on lan1 remote system:
ping 172.17.0.1

on eth0/cpu interface DUT:
-- nothing --

on lan1 remote system:
109 946.617862621 80:61:5f:0c:29:54 → ff:ff:ff:ff:ff:ff ARP 42 Who has 172.17.0.1? Tell 172.17.0.12

on lan2 remote system:
-- nothing --

################# Test 3 ###########################
# send ping on on lan2 remote system:
ping 172.17.0.122

on eth0/cpu interface DUT:
00:12:18.034220 AF Unknown (4294967295), length 61:
0x0000: ffff 8061 5f0c 2955 0806 0001 0800 0604 ...a_.)U........
0x0010: 0001 8061 5f0c 2955 ac11 000d 0000 0000 ...a_.)U........
0x0020: 0000 ac11 007a 0000 0000 0000 0000 0000 .....z..........
0x0030: 0000 0000 0000 0000 01 .........
00:12:18.034228 AF Unknown (4294967295), length 61:
0x0000: ffff 8061 5f0c 2955 0806 0001 0800 0604 ...a_.)U........
0x0010: 0001 8061 5f0c 2955 ac11 000d 0000 0000 ...a_.)U........
0x0020: 0000 ac11 007a 0000 0000 0000 0000 0000 .....z..........
0x0030: 0000 0000 0000 0000 00

on lan1 remote system:
-- nothing --

on lan2 remote system:
476 1608.560311470 80:61:5f:0c:29:55 → ff:ff:ff:ff:ff:ff ARP 42 Who has 172.17.0.122? Tell 172.17.0.13
477 1608.560361808 80:61:5f:0c:29:55 → ff:ff:ff:ff:ff:ff ARP 60 Who has 172.17.0.122? Tell 172.17.0.13

I also retest selftest results and noted that it is not working if
port is part of bridge.

Regards,
Oleksij
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |