Current implemntation returns ENODEV if device tree node for
phy is absent. But in reality there're many boards with the one
and only PHY on board and MACs that may find a PHY by querying
MDIO bus. One good example is STMMAC.
So that's what I saw:
libphy: Fixed MDIO Bus: probed
stmmaceth f0008000.ethernet: no reset control found
stmmac - user ID: 0x10, Synopsys ID: 0x37
stmmaceth f0008000.ethernet: Ring mode enabled
stmmaceth f0008000.ethernet: DMA HW capability register supported
stmmaceth f0008000.ethernet: Normal descriptors
stmmaceth f0008000.ethernet: RX Checksum Offload Engine supported
stmmaceth f0008000.ethernet: COE Type 2
stmmaceth f0008000.ethernet: TX Checksum insertion supported
stmmaceth f0008000.ethernet: Enable RX Mitigation via HW Watchdog Timer
libphy: stmmac: probed
stmmaceth f0008000.ethernet (unnamed net_device) (uninitialized): PHY ID 2000a231 at 0 IRQ POLL (stmmac-0:00) active
--- Bringing up eth0 ----->8-------------------------
Starting network: stmmaceth f0008000.ethernet eth0: device MAC address b6:43:6b:1d:50:cf
stmmaceth f0008000.ethernet eth0: Could not attach to PHY
stmmaceth f0008000.ethernet eth0: stmmac_open: Cannot attach to PHY (error: -19)
ip: SIOCSIFFLAGS: No such device
-------------------------->8-------------------------
Note PHY is detected properly but right after that we're getting -ENODEV.
That makes no sense at all.
So let's silently exit with 0 if there's no DT node for the PHY.
That's what I'm seeing now:
-------------------------->8-------------------------
Starting network: stmmaceth f0008000.ethernet eth0: device MAC address de:1f:a9:f7:8d:88
stmmaceth f0008000.ethernet eth0: fail to init PTP.
IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
udhcpc: started, v1.25.1
udhcpc: sending discover
udhcpc: sending discover
stmmaceth f0008000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
udhcpc: sending discover
Link is Up - 100/Full
udhcpc: sending select for x.x.x.x
udhcpc: lease of x.x.x.x obtained, lease time 3600
deleting routers
adding dns x.x.x.x
-------------------------->8-------------------------
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Murali Karicheri <redacted>
Cc: Sekhar Nori <redacted>
Cc: David S. Miller <davem@davemloft.net>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Mugunthan V N <redacted>
Cc: Andrew Lunn <andrew@lunn.ch>
---
drivers/net/phy/dp83867.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Andrew Lunn <andrew@lunn.ch> Date: 2017-02-03 17:10:41
On Fri, Feb 03, 2017 at 07:52:37PM +0300, Alexey Brodkin wrote:
Current implemntation returns ENODEV if device tree node for
phy is absent. But in reality there're many boards with the one
and only PHY on board and MACs that may find a PHY by querying
MDIO bus. One good example is STMMAC.
Humm, not so sure about that. That check for an OF node has always
been there, since day one for this driver.
What has changed recently is where it looks for these device tree
properties. It used to wrongly look in the MAC node. It was changed to
look in the PHY node. So this is probably the reason you are having
problems.
Having said that, your patch looks O.K.
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
Hi Andrew,
On Fri, 2017-02-03 at 18:10 +0100, Andrew Lunn wrote:
On Fri, Feb 03, 2017 at 07:52:37PM +0300, Alexey Brodkin wrote:
quoted
Current implemntation returns ENODEV if device tree node for
phy is absent. But in reality there're many boards with the one
and only PHY on board and MACs that may find a PHY by querying
MDIO bus. One good example is STMMAC.
Humm, not so sure about that. That check for an OF node has always
been there, since day one for this driver.
What has changed recently is where it looks for these device tree
properties. It used to wrongly look in the MAC node. It was changed to
look in the PHY node. So this is probably the reason you are having
problems.
Well we don't mention PHY node in our device trees because with
1 PHY connected via MDIO bus there's no point in spending electrons
on adding extra stuff. Well in case if default settings work fine -
which up until now was the case for us.
Just in case that's a typical example:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arc/boot/dts/axs10x_mb.dtsi#n58
----------------------->8-----------------------
ethernet@0x18000 {
#interrupt-cells = <1>;
compatible = "snps,dwmac";
reg = < 0x18000 0x2000 >;
interrupts = < 4 >;
interrupt-names = "macirq";
phy-mode = "rgmii";
snps,pbl = < 32 >;
clocks = <&apbclk>;
clock-names = "stmmaceth";
max-speed = <100>;
};
----------------------->8-----------------------
This is especially nice because we may change the base-board and use
there another PHY and as long we have drivers for all possible PHY built
in the kernel (or available via modules) proper driver will be instantiated
based on PHY ID read from MDIO. I.e. having no PHY node in DT adds flexibility.
-Alexey
From: Andrew Lunn <andrew@lunn.ch> Date: 2017-02-03 17:55:03
This is especially nice because we may change the base-board and use
there another PHY and as long we have drivers for all possible PHY built
in the kernel (or available via modules) proper driver will be instantiated
based on PHY ID read from MDIO. I.e. having no PHY node in DT adds flexibility.
The device tree node does not prevent this. It will still load the
driver based on the PHY ID in the PHY. You might run into problems if
the address on the MDIO bus changes, but it is also possible to not
have a reg property, and it will match the node to whatever PHY it
finds during the scan of the bus.
Andrew
Hi Andrew,
On Fri, 2017-02-03 at 18:10 +0100, Andrew Lunn wrote:
quoted
On Fri, Feb 03, 2017 at 07:52:37PM +0300, Alexey Brodkin wrote:
quoted
Current implemntation returns ENODEV if device tree node for
phy is absent. But in reality there're many boards with the one
and only PHY on board and MACs that may find a PHY by querying
MDIO bus. One good example is STMMAC.
Humm, not so sure about that. That check for an OF node has always
been there, since day one for this driver.
What has changed recently is where it looks for these device tree
properties. It used to wrongly look in the MAC node. It was changed to
look in the PHY node. So this is probably the reason you are having
problems.
Well we don't mention PHY node in our device trees because with
1 PHY connected via MDIO bus there's no point in spending electrons
on adding extra stuff.
That's a terrible justification, you are running Linux on devices, if
you care about electrons run a tiny RTOS ;)
Well in case if default settings work fine -
which up until now was the case for us.
You should really consider listing your Ethernet PHY as a child node of
dwmac MDIO bus because that will be a correct and accurate
representation of the hardware, and if the PHY driver needs specific
properties to be given (e.g: random TX/RX delays, etc.) that is the only
way you could communicate those properly to the PHY driver.
Just in case that's a typical example:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arc/boot/dts/axs10x_mb.dtsi#n58
----------------------->8-----------------------
ethernet@0x18000 {
#interrupt-cells = <1>;
compatible = "snps,dwmac";
reg = < 0x18000 0x2000 >;
interrupts = < 4 >;
interrupt-names = "macirq";
phy-mode = "rgmii";
snps,pbl = < 32 >;
clocks = <&apbclk>;
clock-names = "stmmaceth";
max-speed = <100>;
};
----------------------->8-----------------------
This is especially nice because we may change the base-board and use
there another PHY and as long we have drivers for all possible PHY built
in the kernel (or available via modules) proper driver will be instantiated
based on PHY ID read from MDIO. I.e. having no PHY node in DT adds flexibility.
The of_mdio code can automatically scan PHYs on the bus, and try to
associate them with a proper Device Tree node reference, would that
exist, but this is really fragile.
--
Florian
Hi Florian, all,
On Fri, 2017-02-03 at 10:34 -0800, Florian Fainelli wrote:
On 02/03/2017 09:30 AM, Alexey Brodkin wrote:
quoted
Hi Andrew,
On Fri, 2017-02-03 at 18:10 +0100, Andrew Lunn wrote:
quoted
On Fri, Feb 03, 2017 at 07:52:37PM +0300, Alexey Brodkin wrote:
quoted
Current implemntation returns ENODEV if device tree node for
phy is absent. But in reality there're many boards with the one
and only PHY on board and MACs that may find a PHY by querying
MDIO bus. One good example is STMMAC.
Humm, not so sure about that. That check for an OF node has always
been there, since day one for this driver.
What has changed recently is where it looks for these device tree
properties. It used to wrongly look in the MAC node. It was changed to
look in the PHY node. So this is probably the reason you are having
problems.
Well we don't mention PHY node in our device trees because with
1 PHY connected via MDIO bus there's no point in spending electrons
on adding extra stuff.
That's a terrible justification, you are running Linux on devices, if
you care about electrons run a tiny RTOS ;)
Agree :)
quoted
Well in case if default settings work fine -
which up until now was the case for us.
You should really consider listing your Ethernet PHY as a child node of
dwmac MDIO bus because that will be a correct and accurate
representation of the hardware, and if the PHY driver needs specific
properties to be given (e.g: random TX/RX delays, etc.) that is the only
way you could communicate those properly to the PHY driver.
Agree here as well, indeed I'm going to update my .dts because
that is supposed to reflect real HW and it will be that way.
But still I'm wondering if that's a must?
In that case we need to update drivers for other PHYs and probably start
from the genphy to align requirements.
Otherwise poor guys like me who switched from one PHY to another will
end up frustrating why stuff that used to work no longer works :)
-Alexey