mvneta: Fix hang when loading the mvneta driver
When the mvneta driver is compiled, it'll be loaded with clocks disabled. This implies that the clocks should be enabled again before any register access or it'll hang. To fix it: - enable clock earlier - move timer callback after setting timer.data Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7b70176421
commit
aded09555b
1 changed files with 9 additions and 10 deletions
|
@ -2728,20 +2728,10 @@ static int mvneta_probe(struct platform_device *pdev)
|
|||
|
||||
pp = netdev_priv(dev);
|
||||
|
||||
pp->tx_done_timer.function = mvneta_tx_done_timer_callback;
|
||||
init_timer(&pp->tx_done_timer);
|
||||
clear_bit(MVNETA_F_TX_DONE_TIMER_BIT, &pp->flags);
|
||||
|
||||
pp->weight = MVNETA_RX_POLL_WEIGHT;
|
||||
pp->phy_node = phy_node;
|
||||
pp->phy_interface = phy_mode;
|
||||
|
||||
pp->base = of_iomap(dn, 0);
|
||||
if (pp->base == NULL) {
|
||||
err = -ENOMEM;
|
||||
goto err_free_irq;
|
||||
}
|
||||
|
||||
pp->clk = devm_clk_get(&pdev->dev, NULL);
|
||||
if (IS_ERR(pp->clk)) {
|
||||
err = PTR_ERR(pp->clk);
|
||||
|
@ -2765,7 +2755,16 @@ static int mvneta_probe(struct platform_device *pdev)
|
|||
}
|
||||
}
|
||||
|
||||
pp->base = of_iomap(dn, 0);
|
||||
if (pp->base == NULL) {
|
||||
err = -ENOMEM;
|
||||
goto err_free_irq;
|
||||
}
|
||||
|
||||
pp->tx_done_timer.data = (unsigned long)dev;
|
||||
pp->tx_done_timer.function = mvneta_tx_done_timer_callback;
|
||||
init_timer(&pp->tx_done_timer);
|
||||
clear_bit(MVNETA_F_TX_DONE_TIMER_BIT, &pp->flags);
|
||||
|
||||
pp->tx_ring_size = MVNETA_MAX_TXD;
|
||||
pp->rx_ring_size = MVNETA_MAX_RXD;
|
||||
|
|
Loading…
Reference in a new issue