Skip to content

Commit

Permalink
macb: propagate errors when getting optional clocks
Browse files Browse the repository at this point in the history
The tx_clk, rx_clk, and tsu_clk are optional. Currently the macb driver
marks clock as not available if it receives an error when trying to get
a clock. This is wrong, because a clock controller might return
-EPROBE_DEFER if a clock is not available, but will eventually become
available.

In these cases, the driver would probe successfully but will never be
able to adjust the clocks, because the clocks were not available during
probe, but became available later.

For example, the clock controller for the ZynqMP is implemented in the
PMU firmware and the clocks are only available after the firmware driver
has been probed.

Use devm_clk_get_optional() in instead of devm_clk_get() to get the
optional clock and propagate all errors to the calling function.

Signed-off-by: Michael Tretter <[email protected]>
Acked-by: Nicolas Ferre <[email protected]>
Tested-by: Nicolas Ferre <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
tretter authored and davem330 committed Oct 19, 2019
1 parent 3d5c1a0 commit bd310ac
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions drivers/net/ethernet/cadence/macb_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3405,17 +3405,17 @@ static int macb_clk_init(struct platform_device *pdev, struct clk **pclk,
return err;
}

*tx_clk = devm_clk_get(&pdev->dev, "tx_clk");
*tx_clk = devm_clk_get_optional(&pdev->dev, "tx_clk");
if (IS_ERR(*tx_clk))
*tx_clk = NULL;
return PTR_ERR(*tx_clk);

*rx_clk = devm_clk_get(&pdev->dev, "rx_clk");
*rx_clk = devm_clk_get_optional(&pdev->dev, "rx_clk");
if (IS_ERR(*rx_clk))
*rx_clk = NULL;
return PTR_ERR(*rx_clk);

*tsu_clk = devm_clk_get(&pdev->dev, "tsu_clk");
*tsu_clk = devm_clk_get_optional(&pdev->dev, "tsu_clk");
if (IS_ERR(*tsu_clk))
*tsu_clk = NULL;
return PTR_ERR(*tsu_clk);

err = clk_prepare_enable(*pclk);
if (err) {
Expand Down

0 comments on commit bd310ac

Please sign in to comment.