Re: [PATCH v8 net-next 0/2] mv88e6xxx: Add MAB offload support

netdev
2022-11-15T11:33:25Z

On 2022-11-15 12:10, Vladimir Oltean wrote:
> On Tue, Nov 15, 2022 at 11:52:40AM +0100, netdev@kapio-technology.com
> wrote:
>> I had a discussion with Jacub, which resulted in me sending a mail to
>> maintainers on this. The problem is shown below...
>>
>> the phy is marvell/6097/88e3082
>>
>> ------------[ cut here ]------------
>> WARNING: CPU: 0 PID: 332 at drivers/net/phy/phy.c:975
>> phy_error+0x28/0x54
>> Modules linked in:
>> CPU: 0 PID: 332 Comm: kworker/0:0 Tainted: G W 6.0.0
>> #17
>> Hardware name: Freescale i.MX27 (Device Tree Support)
>> Workqueue: events_power_efficient phy_state_machine
>> unwind_backtrace from show_stack+0x18/0x1c
>> show_stack from dump_stack_lvl+0x28/0x30
>> dump_stack_lvl from __warn+0xb8/0x114
>> __warn from warn_slowpath_fmt+0x80/0xbc
>> warn_slowpath_fmt from phy_error+0x28/0x54
>> phy_error from phy_state_machine+0xbc/0x218
>> phy_state_machine from process_one_work+0x17c/0x244
>> process_one_work from worker_thread+0x248/0x2cc
>> worker_thread from kthread+0xb0/0xbc
>> kthread from ret_from_fork+0x14/0x2c
>> Exception stack(0xc4a71fb0 to 0xc4a71ff8)
>> 1fa0: 00000000 00000000 00000000
>> 00000000
>> 1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000
>> 00000000
>> 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
>> ---[ end trace 0000000000000000 ]---
>
> Was that email public on the lists? I don't see it...

Sorry, yes the public list was not added.

>
> The phy_error() is called from phy_state_machine() if one of
> phy_check_link_status() or phy_start_aneg() fails.
>
> Could you please print exactly the value of "err", as well as dig
> deeper
> to see which call is failing, all the way into the PHY driver?

It happens on upstart, so I would then have to hack the system upstart
to add trace.

I also have:
mv88e6085 1002b000.ethernet-1:04: switch 0x990 detected: Marvell
88E6097/88E6097F, revision 2
mv88e6085 1002b000.ethernet-1:04: configuring for fixed/rgmii-id link
mode
mv88e6085 1002b000.ethernet-1:04: Link is Up - 100Mbps/Full - flow
control off
mv88e6085 1002b000.ethernet-1:04 eth10 (uninitialized): PHY
[!soc!aipi@10020000!ethernet@1002b000!mdio!switch@4!mdio:00] driver
[Generic PHY] (irq=POLL)
mv88e6085 1002b000.ethernet-1:04 eth6 (uninitialized): PHY
[!soc!aipi@10020000!ethernet@1002b000!mdio!switch@4!mdio:01] driver
[Generic PHY] (irq=POLL)
mv88e6085 1002b000.ethernet-1:04 eth9 (uninitialized): PHY
[!soc!aipi@10020000!ethernet@1002b000!mdio!switch@4!mdio:02] driver
[Generic PHY] (irq=POLL)
mv88e6085 1002b000.ethernet-1:04 eth5 (uninitialized): PHY
[!soc!aipi@10020000!ethernet@1002b000!mdio!switch@4!mdio:03] driver
[Generic PHY] (irq=POLL)
mv88e6085 1002b000.ethernet-1:04 eth8 (uninitialized): PHY
[!soc!aipi@10020000!ethernet@1002b000!mdio!switch@4!mdio:04] driver
[Generic PHY] (irq=POLL)
mv88e6085 1002b000.ethernet-1:04 eth4 (uninitialized): PHY
[!soc!aipi@10020000!ethernet@1002b000!mdio!switch@4!mdio:05] driver
[Generic PHY] (irq=POLL)
mv88e6085 1002b000.ethernet-1:04 eth7 (uninitialized): PHY
[!soc!aipi@10020000!ethernet@1002b000!mdio!switch@4!mdio:06] driver
[Generic PHY] (irq=POLL)
mv88e6085 1002b000.ethernet-1:04 eth3 (uninitialized): PHY
[!soc!aipi@10020000!ethernet@1002b000!mdio!switch@4!mdio:07] driver
[Generic PHY] (irq=POLL)
mv88e6085 1002b000.ethernet-1:04 eth2 (uninitialized): PHY
[!soc!aipi@10020000!ethernet@1002b000!mdio!switch@4!mdioe:08] driver
[Marvell 88E1112] (irq=174)
mv88e6085 1002b000.ethernet-1:04 eth1 (uninitialized): PHY
[!soc!aipi@10020000!ethernet@1002b000!mdio!switch@4!mdioe:09] driver
[Marvell 88E1112] (irq=175)

after this and adding the ifaces to the bridge, it continues like:

br0: port 1(eth10) entered blocking state
br0: port 1(eth10) entered disabled state
br0: port 2(eth6) entered blocking state
br0: port 2(eth6) entered disabled state
device eth6 entered promiscuous mode
device eth10 entered promiscuous mode
br0: port 3(eth9) entered blocking state
br0: port 3(eth9) entered disabled state
device eth9 entered promiscuous mode
br0: port 4(eth5) entered blocking state
br0: port 4(eth5) entered disabled state
device eth5 entered promiscuous mode
br0: port 5(eth8) entered blocking state
br0: port 5(eth8) entered disabled state
device eth8 entered promiscuous mode
br0: port 6(eth4) entered blocking state
br0: port 6(eth4) entered disabled state
mv88e6085 1002b000.ethernet-1:04: Timeout while waiting for switch
mv88e6085 1002b000.ethernet-1:04: port 0 failed to add 9a:af:03:f1:bd:0a
vid 1 to fdb: -110
device eth4 entered promiscuous mode
br0: port 7(eth7) entered blocking state
br0: port 7(eth7) entered disabled state

I don't know if that gives ay clues...?

Otherwise I have to take more time to see what I can dig out. The
easiest for me is then to
add some printk statements giving targeted information if told what and
where...

>
> Easiest way to do that would probably be something like:
>
> $ trace-cmd record -e mdio sleep 10 &
> ... do your stuff ...
> $ trace-cmd report
> kworker/u4:3-337 [001] 59.054741: mdio_access:
> 0000:00:00.3 read phy:0x13 reg:0x01 val:0x7949
> kworker/u4:3-337 [001] 59.054941: mdio_access:
> 0000:00:00.3 read phy:0x13 reg:0x09 val:0x0700
> kworker/u4:3-337 [001] 59.055262: mdio_access:
> 0000:00:00.3 read phy:0x13 reg:0x0a val:0x4000
> kworker/u4:3-337 [001] 60.075808: mdio_access:
> 0000:00:00.3 read phy:0x13 reg:0x1c val:0x3005
>
> "val" will be negative when there is an error. This is to see quicker
> what fails,
> and if some MDIO access ever works.
>
> If you don't want to enable CONFIG_FTRACE or install trace-cmd, you
> could also probably do the debugging manually.