lkml.org 
[lkml]   [2022]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 092/339] net: lan966x: check devm_of_phy_get() for -EDEFER_PROBE
    Date
    From: Michael Walle <michael@walle.cc>

    [ Upstream commit b58cdd4388b1d8f5bee9f5a3897a7e780d1eaa48 ]

    At the moment, if devm_of_phy_get() returns an error the serdes
    simply isn't set. While it is bad to ignore an error in general, there
    is a particular bug that network isn't working if the serdes driver is
    compiled as a module. In that case, devm_of_phy_get() returns
    -EDEFER_PROBE and the error is silently ignored.

    The serdes is optional, it is not there if the port is using RGMII, in
    which case devm_of_phy_get() returns -ENODEV. Rearrange the error
    handling so that -ENODEV will be handled but other error codes will
    abort the probing.

    Fixes: d28d6d2e37d1 ("net: lan966x: add port module support")
    Signed-off-by: Michael Walle <michael@walle.cc>
    Link: https://lore.kernel.org/r/20220525231239.1307298-1-michael@walle.cc
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/microchip/lan966x/lan966x_main.c | 9 +++++++--
    1 file changed, 7 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_main.c b/drivers/net/ethernet/microchip/lan966x/lan966x_main.c
    index 05f6dcc9dfd5..f180a157eea4 100644
    --- a/drivers/net/ethernet/microchip/lan966x/lan966x_main.c
    +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_main.c
    @@ -1080,8 +1080,13 @@ static int lan966x_probe(struct platform_device *pdev)
    lan966x->ports[p]->fwnode = fwnode_handle_get(portnp);

    serdes = devm_of_phy_get(lan966x->dev, to_of_node(portnp), NULL);
    - if (!IS_ERR(serdes))
    - lan966x->ports[p]->serdes = serdes;
    + if (PTR_ERR(serdes) == -ENODEV)
    + serdes = NULL;
    + if (IS_ERR(serdes)) {
    + err = PTR_ERR(serdes);
    + goto cleanup_ports;
    + }
    + lan966x->ports[p]->serdes = serdes;

    lan966x_port_init(lan966x->ports[p]);
    }
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-13 15:43    [W:3.426 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site