drivers: net: xgene: Fix crash on DT systems
authorAlban Bedel <alban.bedel@avionic-design.de>
Tue, 28 Feb 2017 17:08:55 +0000 (18:08 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 2 Mar 2017 20:47:23 +0000 (12:47 -0800)
On DT systems the driver require a clock, but the probe just print a
warning and continue, leading to a crash when resetting the device.
To fix this crash and properly handle probe deferals only ignore the
missing clock if DT isn't used or if the clock doesn't exist.

Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>
Acked-by: Iyappan Subramanian <isubramanian@apm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/apm/xgene/xgene_enet_main.c

index e536301acfdec9fd893d25061f4e4b64ca55c388..b3568c453b1451f179a3c6ebe18ac524825840ac 100644 (file)
@@ -1749,6 +1749,12 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
 
        pdata->clk = devm_clk_get(&pdev->dev, NULL);
        if (IS_ERR(pdata->clk)) {
+               /* Abort if the clock is defined but couldn't be retrived.
+                * Always abort if the clock is missing on DT system as
+                * the driver can't cope with this case.
+                */
+               if (PTR_ERR(pdata->clk) != -ENOENT || dev->of_node)
+                       return PTR_ERR(pdata->clk);
                /* Firmware may have set up the clock already. */
                dev_info(dev, "clocks have been setup already\n");
        }