|
@@ -6475,7 +6475,8 @@ static void mvpp2_start_dev(struct mvpp2_port *port)
|
|
|
|
|
|
mvpp2_port_mii_set(port);
|
|
|
mvpp2_port_enable(port);
|
|
|
- phy_start(ndev->phydev);
|
|
|
+ if (ndev->phydev)
|
|
|
+ phy_start(ndev->phydev);
|
|
|
netif_tx_start_all_queues(port->dev);
|
|
|
}
|
|
|
|
|
@@ -6501,7 +6502,8 @@ static void mvpp2_stop_dev(struct mvpp2_port *port)
|
|
|
|
|
|
mvpp2_egress_disable(port);
|
|
|
mvpp2_port_disable(port);
|
|
|
- phy_stop(ndev->phydev);
|
|
|
+ if (ndev->phydev)
|
|
|
+ phy_stop(ndev->phydev);
|
|
|
phy_power_off(port->comphy);
|
|
|
}
|
|
|
|
|
@@ -6558,6 +6560,10 @@ static int mvpp2_phy_connect(struct mvpp2_port *port)
|
|
|
{
|
|
|
struct phy_device *phy_dev;
|
|
|
|
|
|
+ /* No PHY is attached */
|
|
|
+ if (!port->phy_node)
|
|
|
+ return 0;
|
|
|
+
|
|
|
phy_dev = of_phy_connect(port->dev, port->phy_node, mvpp2_link_event, 0,
|
|
|
port->phy_interface);
|
|
|
if (!phy_dev) {
|
|
@@ -6578,6 +6584,9 @@ static void mvpp2_phy_disconnect(struct mvpp2_port *port)
|
|
|
{
|
|
|
struct net_device *ndev = port->dev;
|
|
|
|
|
|
+ if (!ndev->phydev)
|
|
|
+ return;
|
|
|
+
|
|
|
phy_disconnect(ndev->phydev);
|
|
|
}
|
|
|
|
|
@@ -7340,12 +7349,6 @@ static int mvpp2_port_probe(struct platform_device *pdev,
|
|
|
return -ENOMEM;
|
|
|
|
|
|
phy_node = of_parse_phandle(port_node, "phy", 0);
|
|
|
- if (!phy_node) {
|
|
|
- dev_err(&pdev->dev, "missing phy\n");
|
|
|
- err = -ENODEV;
|
|
|
- goto err_free_netdev;
|
|
|
- }
|
|
|
-
|
|
|
phy_mode = of_get_phy_mode(port_node);
|
|
|
if (phy_mode < 0) {
|
|
|
dev_err(&pdev->dev, "incorrect phy mode\n");
|