On 26/06/15 02:58, Shengzhou Liu wrote:
> As some C45 10G PHYs(e.g. Cortina CS4315/CS4340 PHY) have
> zero Devices In package, current driver can't get correct
> devices_in_package value by non-zero Devices In package.
> so let's probe more with zero Devices In package to support
> more C45 PHYs.

This looks better to me now:

Reviewed-by: Florian Fainelli <f.faine...@gmail.com>

> 
> Signed-off-by: Shengzhou Liu <shengzhou....@freescale.com>
> ---
> v3: restructure the loop to probe naturally.  
> v2: use MDIO_DEVS1 and MDIO_DEVS2 instead of constant '6', '5'
> 
>  drivers/net/phy/phy_device.c | 20 ++++++++++++++------
>  1 file changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
> index bdfe51f..3e90037 100644
> --- a/drivers/net/phy/phy_device.c
> +++ b/drivers/net/phy/phy_device.c
> @@ -230,7 +230,7 @@ static int get_phy_c45_ids(struct mii_bus *bus, int addr, 
> u32 *phy_id,
>       for (i = 1;
>            i < num_ids && c45_ids->devices_in_package == 0;
>            i++) {
> -             reg_addr = MII_ADDR_C45 | i << 16 | MDIO_DEVS2;
> +retry:               reg_addr = MII_ADDR_C45 | i << 16 | MDIO_DEVS2;
>               phy_reg = mdiobus_read(bus, addr, reg_addr);
>               if (phy_reg < 0)
>                       return -EIO;
> @@ -242,12 +242,20 @@ static int get_phy_c45_ids(struct mii_bus *bus, int 
> addr, u32 *phy_id,
>                       return -EIO;
>               c45_ids->devices_in_package |= (phy_reg & 0xffff);
>  
> -             /* If mostly Fs, there is no device there,
> -              * let's get out of here.
> -              */
>               if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) {
> -                     *phy_id = 0xffffffff;
> -                     return 0;
> +                     if (i) {
> +                             /*  If mostly Fs, there is no device there,
> +                              *  then let's continue to probe more, as some
> +                              *  10G PHYs have zero Devices In package,
> +                              *  e.g. Cortina CS4315/CS4340 PHY.
> +                              */
> +                             i = 0;
> +                             goto retry;
> +                     } else {
> +                             /* no device there, let's get out of here */
> +                             *phy_id = 0xffffffff;
> +                             return 0;
> +                     }
>               }
>       }
>  
> 


-- 
Florian
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to