Commit 0db01097 authored by Thomas Bogendoerfer's avatar Thomas Bogendoerfer Committed by David S. Miller

xgene: Don't fail probe, if there is no clk resource for SGMII interfaces

This change fixes following problem

[    1.827940] xgene-enet: probe of 1f210030.ethernet failed with error -2

which leads to a missing ethernet interface (reproducable at least on
Gigabyte MP30-AR0 and APM Mustang systems).

The check for a valid clk resource fails, because DT doesn't provide a
clock for sgenet1. But the driver doesn't use this clk, if the ethernet
port is connected via SGMII. Therefore this patch avoids probing for clk
on SGMII interfaces.

Fixes: 9aea7779 ("drivers: net: xgene: Fix crash on DT systems")
Signed-off-by: default avatarThomas Bogendoerfer <tbogendoerfer@suse.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e4a6a342
...@@ -1785,17 +1785,19 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) ...@@ -1785,17 +1785,19 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
xgene_enet_gpiod_get(pdata); xgene_enet_gpiod_get(pdata);
if (pdata->phy_mode != PHY_INTERFACE_MODE_SGMII) {
pdata->clk = devm_clk_get(&pdev->dev, NULL); pdata->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(pdata->clk)) { if (IS_ERR(pdata->clk)) {
/* Abort if the clock is defined but couldn't be retrived. /* Abort if the clock is defined but couldn't be
* Always abort if the clock is missing on DT system as * retrived. Always abort if the clock is missing on
* the driver can't cope with this case. * DT system as the driver can't cope with this case.
*/ */
if (PTR_ERR(pdata->clk) != -ENOENT || dev->of_node) if (PTR_ERR(pdata->clk) != -ENOENT || dev->of_node)
return PTR_ERR(pdata->clk); return PTR_ERR(pdata->clk);
/* Firmware may have set up the clock already. */ /* Firmware may have set up the clock already. */
dev_info(dev, "clocks have been setup already\n"); dev_info(dev, "clocks have been setup already\n");
} }
}
if (pdata->phy_mode != PHY_INTERFACE_MODE_XGMII) if (pdata->phy_mode != PHY_INTERFACE_MODE_XGMII)
base_addr = pdata->base_addr - (pdata->port_id * MAC_OFFSET); base_addr = pdata->base_addr - (pdata->port_id * MAC_OFFSET);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment