lkml.org 
[lkml]   [2020]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC 05/11] net: phy: Scan the entire MMD device space
    Date
    The spec identifies devices in the top of
    the 32-bit device space. Some phys are actually
    responding that high. Lets try and capture their
    information as well.

    Starting at the reserved address 0, lets scan
    every single possible MMD address. The spec
    seems to indicate that every MMD should respond
    with the same devices list. But it seems this
    is being interpreted that only implemented MMDs
    need respond. Since it doesn't appear to hurt to
    scan reserved addresses, and the spec says that
    access to unimplemented registers should return 0
    (despite this some devices appear to be returning
    0xFFFFFFFF) we are just going to ignore anything
    that doesn't look like a valid return.

    Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
    ---
    drivers/net/phy/phy_device.c | 8 +++-----
    include/linux/phy.h | 2 +-
    2 files changed, 4 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
    index 2d677490ecab..360c3a72c498 100644
    --- a/drivers/net/phy/phy_device.c
    +++ b/drivers/net/phy/phy_device.c
    @@ -743,7 +743,8 @@ static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
    bool valid_id = false;

    /* Find first non-zero Devices In package. Device zero is reserved
    - * for 802.3 c45 complied PHYs, so don't probe it at first.
    + * for 802.3 c45 complied PHYs, We will ask it for a devices list,
    + * but later we won't ask for identification from it.
    */
    for (i = 0; i < num_ids && *devs == 0; i++) {
    ret = get_phy_c45_devs_in_pkg(bus, addr, i, devs);
    @@ -756,10 +757,7 @@ static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
    * 10G PHYs have zero Devices In package,
    * e.g. Cortina CS4315/CS4340 PHY.
    */
    - phy_reg = get_phy_c45_devs_in_pkg(bus, addr, 0, devs);
    - if (phy_reg < 0)
    - return -EIO;
    - break;
    + *devs = 0;
    }
    }

    diff --git a/include/linux/phy.h b/include/linux/phy.h
    index 2432ca463ddc..480a6b153227 100644
    --- a/include/linux/phy.h
    +++ b/include/linux/phy.h
    @@ -346,7 +346,7 @@ enum phy_state {
    */
    struct phy_c45_device_ids {
    u32 devices_in_package;
    - u32 device_ids[8];
    + u32 device_ids[32];
    };

    struct macsec_context;
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-05-22 23:32    [W:3.100 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site