lkml.org 
[lkml]   [2021]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 23/85] net: phy: micrel: Fix detection of ksz87xx switch
    Date
    From: Steve Bennett <steveb@workware.net.au>

    [ Upstream commit a5e63c7d38d548b8dab6c6205e0b6af76899dbf5 ]

    The logic for discerning between KSZ8051 and KSZ87XX PHYs is incorrect
    such that the that KSZ87XX switch is not identified correctly.

    ksz8051_ksz8795_match_phy_device() uses the parameter ksz_phy_id
    to discriminate whether it was called from ksz8051_match_phy_device()
    or from ksz8795_match_phy_device() but since PHY_ID_KSZ87XX is the
    same value as PHY_ID_KSZ8051, this doesn't work.

    Instead use a bool to discriminate the caller.

    Without this patch, the KSZ8795 switch port identifies as:

    ksz8795-switch spi3.1 ade1 (uninitialized): PHY [dsa-0.1:03] driver [Generic PHY]

    With the patch, it identifies correctly:

    ksz8795-switch spi3.1 ade1 (uninitialized): PHY [dsa-0.1:03] driver [Micrel KSZ87XX Switch]

    Fixes: 8b95599c55ed24b36cf4 ("net: phy: micrel: Discern KSZ8051 and KSZ8795 PHYs")
    Signed-off-by: Steve Bennett <steveb@workware.net.au>
    Reviewed-by: Marek Vasut <marex@denx.de>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/phy/micrel.c | 10 +++++-----
    1 file changed, 5 insertions(+), 5 deletions(-)

    diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
    index 663c68ed6ef9..910ab2182158 100644
    --- a/drivers/net/phy/micrel.c
    +++ b/drivers/net/phy/micrel.c
    @@ -343,11 +343,11 @@ static int ksz8041_config_aneg(struct phy_device *phydev)
    }

    static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,
    - const u32 ksz_phy_id)
    + const bool ksz_8051)
    {
    int ret;

    - if ((phydev->phy_id & MICREL_PHY_ID_MASK) != ksz_phy_id)
    + if ((phydev->phy_id & MICREL_PHY_ID_MASK) != PHY_ID_KSZ8051)
    return 0;

    ret = phy_read(phydev, MII_BMSR);
    @@ -360,7 +360,7 @@ static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,
    * the switch does not.
    */
    ret &= BMSR_ERCAP;
    - if (ksz_phy_id == PHY_ID_KSZ8051)
    + if (ksz_8051)
    return ret;
    else
    return !ret;
    @@ -368,7 +368,7 @@ static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,

    static int ksz8051_match_phy_device(struct phy_device *phydev)
    {
    - return ksz8051_ksz8795_match_phy_device(phydev, PHY_ID_KSZ8051);
    + return ksz8051_ksz8795_match_phy_device(phydev, true);
    }

    static int ksz8081_config_init(struct phy_device *phydev)
    @@ -396,7 +396,7 @@ static int ksz8061_config_init(struct phy_device *phydev)

    static int ksz8795_match_phy_device(struct phy_device *phydev)
    {
    - return ksz8051_ksz8795_match_phy_device(phydev, PHY_ID_KSZ87XX);
    + return ksz8051_ksz8795_match_phy_device(phydev, false);
    }

    static int ksz9021_load_values_from_of(struct phy_device *phydev,
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-08-10 19:36    [W:5.501 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site