Thread (25 messages) flat view 25 messages, 4 authors, 2026-03-06

Re: [PATCH net-next v2 1/3] net: macb: fix SGMII with inband aneg disabled

From: Conor Dooley <conor@kernel.org>
Date: 2026-03-05 14:19:11
Also in: lkml

On Thu, Mar 05, 2026 at 05:47:34AM -0800, Charles Perry wrote:
On Wed, Mar 04, 2026 at 06:39:38PM +0000, Russell King (Oracle) wrote:
quoted
On Wed, Mar 04, 2026 at 06:06:20PM +0000, Conor Dooley wrote:
quoted
On Wed, Mar 04, 2026 at 04:55:37PM +0000, Russell King (Oracle) wrote:
quoted
On Wed, Mar 04, 2026 at 04:23:30PM +0000, Conor Dooley wrote:
quoted
On Wed, Mar 04, 2026 at 06:59:35AM -0800, Charles Perry wrote:
quoted
On Wed, Mar 04, 2026 at 11:15:43AM +0000, Conor Dooley wrote:
quoted
On Tue, Feb 24, 2026 at 12:28:52PM -0800, Charles Perry wrote:
quoted
Make it possible to connect a PHY which does not use inband
autoneg to a gem MAC using phylink's information.

The previous implementation relied on whether or not the link
was a fixed-link to disable SGMII autoneg. This commit extend
this to all link which are not configured for inband
autonegotiation.

Signed-off-by: Charles Perry <charles.perry@microchip.com>
This breaks the macb on mpfs-icicle-kit, I get stuck with:

[    7.189102] mpfs-sys-controller syscontroller: Registered MPFS system controller
[    7.260946] macb 20110000.ethernet eth0: PHY [20112000.ethernet-ffffffff:08] driver [Vitesse VSC8662] (irq=POLL)
[    7.273881] macb 20110000.ethernet eth0: configuring for phy/sgmii link mode
[    7.296580] macb 20110000.ethernet: gem-ptp-timer ptp clock registered.
[    7.345782] macb 20112000.ethernet eth1: PHY [20112000.ethernet-ffffffff:09] driver [Vitesse VSC8662] (irq=POLL)
[    7.358082] macb 20112000.ethernet eth1: configuring for phy/sgmii link mode
[    7.380479] macb 20112000.ethernet: gem-ptp-timer ptp clock registered.
[   11.376763] macb 20110000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
[   11.398403] Sending DHCP requests .
[   11.472699] macb 20112000.ethernet eth1: Link is Up - 1Gbps/Full - flow control off
[   13.938425] ..... timed out!
[   93.598491] macb 20110000.ethernet eth0: Link is Down
[   93.641823] macb 20110000.ethernet: gem-ptp-timer ptp clock unregistered.
[   93.659433] macb 20112000.ethernet eth1: Link is Down
[   93.691724] macb 20112000.ethernet: gem-ptp-timer ptp clock unregistered.
[   93.703977] IP-Config: Retrying forever (NFS root)...
[   93.758382] macb 20110000.ethernet eth0: PHY [20112000.ethernet-ffffffff:08] driver [Vitesse VSC8662] (irq=POLL)
[   93.770655] macb 20110000.ethernet eth0: configuring for phy/sgmii link mode
[   93.786497] macb 20110000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
[   93.795840] macb 20110000.ethernet: gem-ptp-timer ptp clock registered.
[   93.844481] macb 20112000.ethernet eth1: PHY [20112000.ethernet-ffffffff:09] driver [Vitesse VSC8662] (irq=POLL)
[   93.856769] macb 20112000.ethernet eth1: configuring for phy/sgmii link mode
[   93.870926] macb 20112000.ethernet eth1: Link is Up - 1Gbps/Full - flow control off
[   93.880302] macb 20112000.ethernet: gem-ptp-timer ptp clock registered.
Hello Conor,

I checked the driver for the VSC8662 and it doesn't have the
->inband_caps() and ->config_inband() callbacks so Linux leaves whatever
the bootloader puts or uses the defaults. Looking at the datasheet, this
should be register 23 (Extended PHY Control Set 1) bit 13 (MAC interface
auto-negotiation)

My guess is that this bit is set and since this patch disable inband
autonegotiation (because phylink decides it), there is a mismatch.

Can you add 'managed = "in-band-status"' in your device tree under the macb
node? That's not necessarily the fix, I just want to confirm my theory.
No, it just produces a different error:
[    5.769864] mpfs-sys-controller syscontroller: Registered MPFS system controller
[    5.829146] macb 20110000.ethernet eth0: Could not attach PHY (-19)
[    5.854232] IP-Config: Failed to open eth0
[    5.897152] macb 20112000.ethernet eth1: Could not attach PHY (-19)
[    5.921061] IP-Config: Failed to open eth1
[    5.925592] IP-Config: No network devices available
[    5.938800] clk: Disabling unused clocks
[    5.944156] PM: genpd: Disabling unused power domains
[    5.961029] check access for rdinit=/usr/sbin/init failed: -2, ignoring
-19 is -ENODEV (I wish everyone would use %pe so we get english
error messages rather than having to look up errno codes in the
header files.)

macb uses either phylink_of_phy_connect() or phylink_connect_phy().
I don't think phylink_connect_phy() would return -ENODEV, but
phylink_of_phy_connect() would - but I can't see that adding
'managed = "in-band-status";' to DT would cause that. The only
case I can see is that fwnode_phy_find_device() fails to find the
phydev, but there is a PHY node specified in DT, but that would
fail without in-band-status.
It's as you say, and fwnode_phy_find_device() is the source.
fwnode_mdio_find_device() is what fails, returning NULL.
Ah, I've just found the reason:

        /* With fixed-link, we don't need to register the MDIO bus,
         * except if we have a child named "mdio" in the device tree.
         * In that case, some devices may be attached to the MACB's MDIO bus.
         */
        mdio_np = of_get_child_by_name(np, "mdio");
        if (!mdio_np && of_phy_is_fixed_link(np))
                return macb_mii_probe(bp->dev);

of_phy_is_fixed_link() will return true as soon as you add that managed
property, and as the mac1 node just lists the PHYs without using a
mdio child:

&mac1 {
        phy-mode = "sgmii";
        phy-handle = <&phy1>;
        status = "okay";

        phy1: ethernet-phy@9 {
                reg = <9>;
        };

        phy0: ethernet-phy@8 {
                reg = <8>;
        };
};

it means mdio_np is NULL above. Hence, no MDIO bus will be created.
Thank you Russell for finding this.

Conor, can you try with this:

````
&mac0 {
	phy-mode = "sgmii";
	phy-handle = <&phy0>;
	status = "okay";
	managed = "in-band-status";
};

&mac1 {
	phy-mode = "sgmii";
	phy-handle = <&phy1>;
	status = "okay";
	managed = "in-band-status";

	mdio {
		phy1: ethernet-phy@9 {
			reg = <9>;
		};
	
		phy0: ethernet-phy@8 {
			reg = <8>;
		};
	};
};
````

I think we're almost there.
With this, I can boot. Is that enough information for you to resolve the
problem?

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help