diff options
Diffstat (limited to 'drivers/net/ethernet/marvell/mvneta.c')
-rw-r--r-- | drivers/net/ethernet/marvell/mvneta.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index 712779fb12b7..b017818bccae 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c | |||
@@ -88,6 +88,8 @@ | |||
88 | #define MVNETA_TX_IN_PRGRS BIT(1) | 88 | #define MVNETA_TX_IN_PRGRS BIT(1) |
89 | #define MVNETA_TX_FIFO_EMPTY BIT(8) | 89 | #define MVNETA_TX_FIFO_EMPTY BIT(8) |
90 | #define MVNETA_RX_MIN_FRAME_SIZE 0x247c | 90 | #define MVNETA_RX_MIN_FRAME_SIZE 0x247c |
91 | #define MVNETA_SGMII_SERDES_CFG 0x24A0 | ||
92 | #define MVNETA_SGMII_SERDES_PROTO 0x0cc7 | ||
91 | #define MVNETA_TYPE_PRIO 0x24bc | 93 | #define MVNETA_TYPE_PRIO 0x24bc |
92 | #define MVNETA_FORCE_UNI BIT(21) | 94 | #define MVNETA_FORCE_UNI BIT(21) |
93 | #define MVNETA_TXQ_CMD_1 0x24e4 | 95 | #define MVNETA_TXQ_CMD_1 0x24e4 |
@@ -655,6 +657,8 @@ static void mvneta_port_sgmii_config(struct mvneta_port *pp) | |||
655 | val = mvreg_read(pp, MVNETA_GMAC_CTRL_2); | 657 | val = mvreg_read(pp, MVNETA_GMAC_CTRL_2); |
656 | val |= MVNETA_GMAC2_PSC_ENABLE; | 658 | val |= MVNETA_GMAC2_PSC_ENABLE; |
657 | mvreg_write(pp, MVNETA_GMAC_CTRL_2, val); | 659 | mvreg_write(pp, MVNETA_GMAC_CTRL_2, val); |
660 | |||
661 | mvreg_write(pp, MVNETA_SGMII_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO); | ||
658 | } | 662 | } |
659 | 663 | ||
660 | /* Start the Ethernet port RX and TX activity */ | 664 | /* Start the Ethernet port RX and TX activity */ |
@@ -2728,28 +2732,24 @@ static int mvneta_probe(struct platform_device *pdev) | |||
2728 | 2732 | ||
2729 | pp = netdev_priv(dev); | 2733 | pp = netdev_priv(dev); |
2730 | 2734 | ||
2731 | pp->tx_done_timer.function = mvneta_tx_done_timer_callback; | ||
2732 | init_timer(&pp->tx_done_timer); | ||
2733 | clear_bit(MVNETA_F_TX_DONE_TIMER_BIT, &pp->flags); | ||
2734 | |||
2735 | pp->weight = MVNETA_RX_POLL_WEIGHT; | 2735 | pp->weight = MVNETA_RX_POLL_WEIGHT; |
2736 | pp->phy_node = phy_node; | 2736 | pp->phy_node = phy_node; |
2737 | pp->phy_interface = phy_mode; | 2737 | pp->phy_interface = phy_mode; |
2738 | 2738 | ||
2739 | pp->base = of_iomap(dn, 0); | ||
2740 | if (pp->base == NULL) { | ||
2741 | err = -ENOMEM; | ||
2742 | goto err_free_irq; | ||
2743 | } | ||
2744 | |||
2745 | pp->clk = devm_clk_get(&pdev->dev, NULL); | 2739 | pp->clk = devm_clk_get(&pdev->dev, NULL); |
2746 | if (IS_ERR(pp->clk)) { | 2740 | if (IS_ERR(pp->clk)) { |
2747 | err = PTR_ERR(pp->clk); | 2741 | err = PTR_ERR(pp->clk); |
2748 | goto err_unmap; | 2742 | goto err_free_irq; |
2749 | } | 2743 | } |
2750 | 2744 | ||
2751 | clk_prepare_enable(pp->clk); | 2745 | clk_prepare_enable(pp->clk); |
2752 | 2746 | ||
2747 | pp->base = of_iomap(dn, 0); | ||
2748 | if (pp->base == NULL) { | ||
2749 | err = -ENOMEM; | ||
2750 | goto err_clk; | ||
2751 | } | ||
2752 | |||
2753 | dt_mac_addr = of_get_mac_address(dn); | 2753 | dt_mac_addr = of_get_mac_address(dn); |
2754 | if (dt_mac_addr && is_valid_ether_addr(dt_mac_addr)) { | 2754 | if (dt_mac_addr && is_valid_ether_addr(dt_mac_addr)) { |
2755 | mac_from = "device tree"; | 2755 | mac_from = "device tree"; |
@@ -2766,6 +2766,9 @@ static int mvneta_probe(struct platform_device *pdev) | |||
2766 | } | 2766 | } |
2767 | 2767 | ||
2768 | pp->tx_done_timer.data = (unsigned long)dev; | 2768 | pp->tx_done_timer.data = (unsigned long)dev; |
2769 | pp->tx_done_timer.function = mvneta_tx_done_timer_callback; | ||
2770 | init_timer(&pp->tx_done_timer); | ||
2771 | clear_bit(MVNETA_F_TX_DONE_TIMER_BIT, &pp->flags); | ||
2769 | 2772 | ||
2770 | pp->tx_ring_size = MVNETA_MAX_TXD; | 2773 | pp->tx_ring_size = MVNETA_MAX_TXD; |
2771 | pp->rx_ring_size = MVNETA_MAX_RXD; | 2774 | pp->rx_ring_size = MVNETA_MAX_RXD; |
@@ -2776,7 +2779,7 @@ static int mvneta_probe(struct platform_device *pdev) | |||
2776 | err = mvneta_init(pp, phy_addr); | 2779 | err = mvneta_init(pp, phy_addr); |
2777 | if (err < 0) { | 2780 | if (err < 0) { |
2778 | dev_err(&pdev->dev, "can't init eth hal\n"); | 2781 | dev_err(&pdev->dev, "can't init eth hal\n"); |
2779 | goto err_clk; | 2782 | goto err_unmap; |
2780 | } | 2783 | } |
2781 | mvneta_port_power_up(pp, phy_mode); | 2784 | mvneta_port_power_up(pp, phy_mode); |
2782 | 2785 | ||
@@ -2806,10 +2809,10 @@ static int mvneta_probe(struct platform_device *pdev) | |||
2806 | 2809 | ||
2807 | err_deinit: | 2810 | err_deinit: |
2808 | mvneta_deinit(pp); | 2811 | mvneta_deinit(pp); |
2809 | err_clk: | ||
2810 | clk_disable_unprepare(pp->clk); | ||
2811 | err_unmap: | 2812 | err_unmap: |
2812 | iounmap(pp->base); | 2813 | iounmap(pp->base); |
2814 | err_clk: | ||
2815 | clk_disable_unprepare(pp->clk); | ||
2813 | err_free_irq: | 2816 | err_free_irq: |
2814 | irq_dispose_mapping(dev->irq); | 2817 | irq_dispose_mapping(dev->irq); |
2815 | err_free_netdev: | 2818 | err_free_netdev: |