aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2014-08-11 17:50:42 -0400
committerDavid S. Miller <davem@davemloft.net>2014-08-11 18:10:11 -0400
commite4a60a93c4a6e7dd4e3e82736b932375598a26fd (patch)
tree96ec0dcda6a0bb9535bc5a13bdb55ddb229be97e
parent8dff81e87d5c2867d7401f8ee7b1eb3e3aa2ba8d (diff)
net: bcmgenet: request and enable main clock earlier
bcmgenet_set_hw_params() will read the hardware version and compare it with the one we are getting from Device Tree. Due to the clock being enabled too late, bcmgenet_set_hw_params() will cause bus errors since the GENET hardware block is still gated off by the time bcmgenet_set_hw_params() is called, this will also make us fail the version check since we will read the value 0 from the hardware. Fix this by requesting the clock before the first piece of code that needs to access hardware register. Fixes: 1c1008c793fa4 ("net: bcmgenet: add main driver file") Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/broadcom/genet/bcmgenet.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index ce455aed5a2f..7a3661c090ee 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -2533,6 +2533,13 @@ static int bcmgenet_probe(struct platform_device *pdev)
2533 priv->pdev = pdev; 2533 priv->pdev = pdev;
2534 priv->version = (enum bcmgenet_version)of_id->data; 2534 priv->version = (enum bcmgenet_version)of_id->data;
2535 2535
2536 priv->clk = devm_clk_get(&priv->pdev->dev, "enet");
2537 if (IS_ERR(priv->clk))
2538 dev_warn(&priv->pdev->dev, "failed to get enet clock\n");
2539
2540 if (!IS_ERR(priv->clk))
2541 clk_prepare_enable(priv->clk);
2542
2536 bcmgenet_set_hw_params(priv); 2543 bcmgenet_set_hw_params(priv);
2537 2544
2538 /* Mii wait queue */ 2545 /* Mii wait queue */
@@ -2541,17 +2548,10 @@ static int bcmgenet_probe(struct platform_device *pdev)
2541 priv->rx_buf_len = RX_BUF_LENGTH; 2548 priv->rx_buf_len = RX_BUF_LENGTH;
2542 INIT_WORK(&priv->bcmgenet_irq_work, bcmgenet_irq_task); 2549 INIT_WORK(&priv->bcmgenet_irq_work, bcmgenet_irq_task);
2543 2550
2544 priv->clk = devm_clk_get(&priv->pdev->dev, "enet");
2545 if (IS_ERR(priv->clk))
2546 dev_warn(&priv->pdev->dev, "failed to get enet clock\n");
2547
2548 priv->clk_wol = devm_clk_get(&priv->pdev->dev, "enet-wol"); 2551 priv->clk_wol = devm_clk_get(&priv->pdev->dev, "enet-wol");
2549 if (IS_ERR(priv->clk_wol)) 2552 if (IS_ERR(priv->clk_wol))
2550 dev_warn(&priv->pdev->dev, "failed to get enet-wol clock\n"); 2553 dev_warn(&priv->pdev->dev, "failed to get enet-wol clock\n");
2551 2554
2552 if (!IS_ERR(priv->clk))
2553 clk_prepare_enable(priv->clk);
2554
2555 err = reset_umac(priv); 2555 err = reset_umac(priv);
2556 if (err) 2556 if (err)
2557 goto err_clk_disable; 2557 goto err_clk_disable;