aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq40xx/patches-5.4/706-ar40xx-abort-probe-on-missig-phy.patch
blob: 0ae6b17f8cec27550323b8804e9ded20cda98db5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Index: linux-5.4.11/drivers/net/phy/ar40xx.c
===================================================================
--- linux-5.4.11.orig/drivers/net/phy/ar40xx.c
+++ linux-5.4.11/drivers/net/phy/ar40xx.c
@@ -1808,8 +1808,8 @@ ar40xx_phy_probe(struct phy_device *phyd
 	if (phydev->mdio.addr == 0)
 		ar40xx_priv->phy = phydev;
 
-	phydev->supported |= SUPPORTED_1000baseT_Full;
-	phydev->advertising |= ADVERTISED_1000baseT_Full;
+	phy_set_max_speed(phydev, SPEED_1000);
+	linkmode_copy(phydev->advertising, phydev->supported);
 	return 0;
 }
 
@@ -2021,6 +2021,12 @@ static int ar40xx_probe(struct platform_
 	/* register switch */
 	swdev = &priv->dev;
 
+	if (priv->mii_bus == NULL) {
+		dev_err(&pdev->dev, "Probe failed - Missing PHYs!\n");
+		ret = -ENODEV;
+		goto err_missing_phy;
+	}
+
 	swdev->alias = dev_name(&priv->mii_bus->dev);
 
 	swdev->cpu_port = AR40XX_PORT_CPU;
@@ -2052,6 +2058,7 @@ err_unregister_switch:
 	unregister_switch(&priv->dev);
 err_unregister_phy:
 	phy_driver_unregister(&ar40xx_phy_driver);
+err_missing_phy:
 	platform_set_drvdata(pdev, NULL);
 	return ret;
 }