Subject: Re: [PATCH] net: phy: Add config option to specify external switch port to be used if switch is used as PHY

From: Florian Fainelli <[email-masked]>
Date: Thu, 8 Sep 2011 10:39:35 +0200

Hello Jurgen,

On Thursday 08 September 2011 08:54:07 Lambrecht Jürgen wrote:
> 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.

This is not going to work well with all switches out there. You could use the 
fixed-PHY driver to make your ethernet driver see the link as always up between 
the MAC and switch CPU port.

A better solution would be to have proper switch drivers and user-space, which 
reminds me that we (OpenWrt) should at some point propose our switch drivers 
[1] for review.

[1]: 
https://dev.openwrt.org/browser/trunk/target/linux/generic/files/drivers/net/phy/

> 
> 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 <[email-masked]>
> ---
>   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�����r��y����b�X��ǧv�^�)޺{.n�+���z�^�)����w*jg��������ݢj/���z�ޖ��2�ޙ����
> &�)ߡ�a�����G���h��j:+v���w��٥

-- 
Florian