diff options
| -rw-r--r-- | drivers/net/ethernet/marvell/mvpp2.c | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c index 868a957f24bb..18477fe29394 100644 --- a/drivers/net/ethernet/marvell/mvpp2.c +++ b/drivers/net/ethernet/marvell/mvpp2.c | |||
| @@ -699,7 +699,6 @@ struct mvpp2_port { | |||
| 699 | u16 rx_ring_size; | 699 | u16 rx_ring_size; |
| 700 | struct mvpp2_pcpu_stats __percpu *stats; | 700 | struct mvpp2_pcpu_stats __percpu *stats; |
| 701 | 701 | ||
| 702 | struct phy_device *phy_dev; | ||
| 703 | phy_interface_t phy_interface; | 702 | phy_interface_t phy_interface; |
| 704 | struct device_node *phy_node; | 703 | struct device_node *phy_node; |
| 705 | unsigned int link; | 704 | unsigned int link; |
| @@ -4850,7 +4849,7 @@ static irqreturn_t mvpp2_isr(int irq, void *dev_id) | |||
| 4850 | static void mvpp2_link_event(struct net_device *dev) | 4849 | static void mvpp2_link_event(struct net_device *dev) |
| 4851 | { | 4850 | { |
| 4852 | struct mvpp2_port *port = netdev_priv(dev); | 4851 | struct mvpp2_port *port = netdev_priv(dev); |
| 4853 | struct phy_device *phydev = port->phy_dev; | 4852 | struct phy_device *phydev = dev->phydev; |
| 4854 | int status_change = 0; | 4853 | int status_change = 0; |
| 4855 | u32 val; | 4854 | u32 val; |
| 4856 | 4855 | ||
| @@ -5416,6 +5415,8 @@ static int mvpp2_poll(struct napi_struct *napi, int budget) | |||
| 5416 | /* Set hw internals when starting port */ | 5415 | /* Set hw internals when starting port */ |
| 5417 | static void mvpp2_start_dev(struct mvpp2_port *port) | 5416 | static void mvpp2_start_dev(struct mvpp2_port *port) |
| 5418 | { | 5417 | { |
| 5418 | struct net_device *ndev = port->dev; | ||
| 5419 | |||
| 5419 | mvpp2_gmac_max_rx_size_set(port); | 5420 | mvpp2_gmac_max_rx_size_set(port); |
| 5420 | mvpp2_txp_max_tx_size_set(port); | 5421 | mvpp2_txp_max_tx_size_set(port); |
| 5421 | 5422 | ||
| @@ -5425,13 +5426,15 @@ static void mvpp2_start_dev(struct mvpp2_port *port) | |||
| 5425 | mvpp2_interrupts_enable(port); | 5426 | mvpp2_interrupts_enable(port); |
| 5426 | 5427 | ||
| 5427 | mvpp2_port_enable(port); | 5428 | mvpp2_port_enable(port); |
| 5428 | phy_start(port->phy_dev); | 5429 | phy_start(ndev->phydev); |
| 5429 | netif_tx_start_all_queues(port->dev); | 5430 | netif_tx_start_all_queues(port->dev); |
| 5430 | } | 5431 | } |
| 5431 | 5432 | ||
| 5432 | /* Set hw internals when stopping port */ | 5433 | /* Set hw internals when stopping port */ |
| 5433 | static void mvpp2_stop_dev(struct mvpp2_port *port) | 5434 | static void mvpp2_stop_dev(struct mvpp2_port *port) |
| 5434 | { | 5435 | { |
| 5436 | struct net_device *ndev = port->dev; | ||
| 5437 | |||
| 5435 | /* Stop new packets from arriving to RXQs */ | 5438 | /* Stop new packets from arriving to RXQs */ |
| 5436 | mvpp2_ingress_disable(port); | 5439 | mvpp2_ingress_disable(port); |
| 5437 | 5440 | ||
| @@ -5447,7 +5450,7 @@ static void mvpp2_stop_dev(struct mvpp2_port *port) | |||
| 5447 | 5450 | ||
| 5448 | mvpp2_egress_disable(port); | 5451 | mvpp2_egress_disable(port); |
| 5449 | mvpp2_port_disable(port); | 5452 | mvpp2_port_disable(port); |
| 5450 | phy_stop(port->phy_dev); | 5453 | phy_stop(ndev->phydev); |
| 5451 | } | 5454 | } |
| 5452 | 5455 | ||
| 5453 | /* Return positive if MTU is valid */ | 5456 | /* Return positive if MTU is valid */ |
| @@ -5535,7 +5538,6 @@ static int mvpp2_phy_connect(struct mvpp2_port *port) | |||
| 5535 | phy_dev->supported &= PHY_GBIT_FEATURES; | 5538 | phy_dev->supported &= PHY_GBIT_FEATURES; |
| 5536 | phy_dev->advertising = phy_dev->supported; | 5539 | phy_dev->advertising = phy_dev->supported; |
| 5537 | 5540 | ||
| 5538 | port->phy_dev = phy_dev; | ||
| 5539 | port->link = 0; | 5541 | port->link = 0; |
| 5540 | port->duplex = 0; | 5542 | port->duplex = 0; |
| 5541 | port->speed = 0; | 5543 | port->speed = 0; |
| @@ -5545,8 +5547,9 @@ static int mvpp2_phy_connect(struct mvpp2_port *port) | |||
| 5545 | 5547 | ||
| 5546 | static void mvpp2_phy_disconnect(struct mvpp2_port *port) | 5548 | static void mvpp2_phy_disconnect(struct mvpp2_port *port) |
| 5547 | { | 5549 | { |
| 5548 | phy_disconnect(port->phy_dev); | 5550 | struct net_device *ndev = port->dev; |
| 5549 | port->phy_dev = NULL; | 5551 | |
| 5552 | phy_disconnect(ndev->phydev); | ||
| 5550 | } | 5553 | } |
| 5551 | 5554 | ||
| 5552 | static int mvpp2_open(struct net_device *dev) | 5555 | static int mvpp2_open(struct net_device *dev) |
| @@ -5796,13 +5799,12 @@ mvpp2_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) | |||
| 5796 | 5799 | ||
| 5797 | static int mvpp2_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | 5800 | static int mvpp2_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
| 5798 | { | 5801 | { |
| 5799 | struct mvpp2_port *port = netdev_priv(dev); | ||
| 5800 | int ret; | 5802 | int ret; |
| 5801 | 5803 | ||
| 5802 | if (!port->phy_dev) | 5804 | if (!dev->phydev) |
| 5803 | return -ENOTSUPP; | 5805 | return -ENOTSUPP; |
| 5804 | 5806 | ||
| 5805 | ret = phy_mii_ioctl(port->phy_dev, ifr, cmd); | 5807 | ret = phy_mii_ioctl(dev->phydev, ifr, cmd); |
| 5806 | if (!ret) | 5808 | if (!ret) |
| 5807 | mvpp2_link_event(dev); | 5809 | mvpp2_link_event(dev); |
| 5808 | 5810 | ||
| @@ -5815,22 +5817,18 @@ static int mvpp2_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | |||
| 5815 | static int mvpp2_ethtool_get_settings(struct net_device *dev, | 5817 | static int mvpp2_ethtool_get_settings(struct net_device *dev, |
| 5816 | struct ethtool_cmd *cmd) | 5818 | struct ethtool_cmd *cmd) |
| 5817 | { | 5819 | { |
| 5818 | struct mvpp2_port *port = netdev_priv(dev); | 5820 | if (!dev->phydev) |
| 5819 | |||
| 5820 | if (!port->phy_dev) | ||
| 5821 | return -ENODEV; | 5821 | return -ENODEV; |
| 5822 | return phy_ethtool_gset(port->phy_dev, cmd); | 5822 | return phy_ethtool_gset(dev->phydev, cmd); |
| 5823 | } | 5823 | } |
| 5824 | 5824 | ||
| 5825 | /* Set settings (phy address, speed) for ethtools */ | 5825 | /* Set settings (phy address, speed) for ethtools */ |
| 5826 | static int mvpp2_ethtool_set_settings(struct net_device *dev, | 5826 | static int mvpp2_ethtool_set_settings(struct net_device *dev, |
| 5827 | struct ethtool_cmd *cmd) | 5827 | struct ethtool_cmd *cmd) |
| 5828 | { | 5828 | { |
| 5829 | struct mvpp2_port *port = netdev_priv(dev); | 5829 | if (!dev->phydev) |
| 5830 | |||
| 5831 | if (!port->phy_dev) | ||
| 5832 | return -ENODEV; | 5830 | return -ENODEV; |
| 5833 | return phy_ethtool_sset(port->phy_dev, cmd); | 5831 | return phy_ethtool_sset(dev->phydev, cmd); |
| 5834 | } | 5832 | } |
| 5835 | 5833 | ||
| 5836 | /* Set interrupt coalescing for ethtools */ | 5834 | /* Set interrupt coalescing for ethtools */ |
