ar71xx: ag71xx: Prevent kernel oops for board def
authorDaniel F. Dickinson <cshored@thecshore.com>
Thu, 26 Jul 2018 06:57:37 +0000 (02:57 -0400)
committerJohn Crispin <john@phrozen.org>
Mon, 30 Jul 2018 08:43:36 +0000 (10:43 +0200)
The driver is written in such a way that with a board defintion that
connects a fixed phy, mdio, and switch in a certain way, a kernel oops could
result because of lack of previously probed mdio bus.

This commit allows for easier debugging in this case by casting the
correct blame with serial console messages.

Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_phy.c

index 1683fce882f6d9a172f0efe0e87a9f886e7a024f..58db559ecf3d81a56a55c853c1f548df208264d8 100644 (file)
@@ -76,10 +76,24 @@ void ag71xx_phy_stop(struct ag71xx *ag)
 
 static int ag71xx_phy_connect_fixed(struct ag71xx *ag)
 {
-       struct device *dev = &ag->pdev->dev;
+       struct platform_device *pdev = ag->pdev;
+       struct device *dev = NULL;
        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
        int ret = 0;
 
+       if (!pdev)
+               return -ENODEV;
+
+       dev = &pdev->dev;
+
+       if (!dev)
+               return -ENODEV;
+
+       if (!ag->phy_dev) {
+               pr_err("Missing PHY for %s", dev_name(dev));
+               return -ENODEV;
+       }
+
        /* use fixed settings */
        switch (pdata->speed) {
        case SPEED_10: