Hello, In our embedded designs, this is a useful patch. Maybe it can be useful for somebody else too. Or maybe there are already better solutions? I know I could also write a driver for our switch, but that is too much effort just to select the active port. Kind regards, Jürgen In embedded design, instead of a PHY, sometimes a switch is used that behaves as a PHY through its MII port. For example to use a daisy chain network configuration instead of an expensive star config. In that case, many phy ports are available, but only 1 should be used to check link status, and not the first one available as is the case without this configuration (that is, set to its default value 0). So this options specifies the switch port number to be used to check link status, because if the link is down, no data is sent by the TCP/IP stack. Signed-off-by: Jürgen Lambrecht <J.Lambrecht@xxxxxxxxxxx> --- drivers/net/phy/Kconfig | 14 ++++++++++++++ drivers/net/phy/mdio_bus.c | 9 +++++++++ 2 files changed, 23 insertions(+), 0 deletions(-) diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index a702443..554561f 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig @@ -13,6 +13,20 @@ menuconfig PHYLIB if PHYLIB +config SWITCH_PHY + int "External switch port to be used if switch is used as PHY" + default "0" + help + In embedded design, instead of a PHY, sometimes a switch is used that + behaves as a PHY through its MII port. For example to use a daisy + chain network configuration instead of an expensive star config. + In that case, many phy ports are available, but only 1 should be used + to check link status, and not the first one available as is the case + without this configuration (that is, set to its default value 0). + So this options specifies the switch port number to be used to check + link status, because if the link is down, no data is sent by the + TCP/IP stack. + comment "MII PHY device drivers" config MARVELL_PHY diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index 6c58da2..016437a 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -112,7 +112,14 @@ int mdiobus_register(struct mii_bus *bus) if (bus->reset) bus->reset(bus); + /* The config below is always availble with CONFIG_PHYLIB. If 0, the + behavior is as before without this patch (or P0 of the switch is + taken because it is the first one found). */ +#if CONFIG_SWITCH_PHY + i = CONFIG_SWITCH_PHY; +#else for (i = 0; i < PHY_MAX_ADDR; i++) { +#endif if ((bus->phy_mask & (1 << i)) == 0) { struct phy_device *phydev; @@ -122,7 +129,9 @@ int mdiobus_register(struct mii_bus *bus) goto error; } } +#if !CONFIG_SWITCH_PHY } +#endif bus->state = MDIOBUS_REGISTERED; pr_info("%s: probed\n", bus->name); -- 1.7.1 ��.n��������+%������w��{.n�����{��w��ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f