+static int s32_gmac_init(struct platform_device *pdev, void *priv)
+{
+ struct s32_priv_data *gmac = priv;
+ int ret;
+
+ ret = clk_set_rate(gmac->tx_clk, GMAC_TX_RATE_125M);
+ if (!ret)
+ ret = clk_prepare_enable(gmac->tx_clk);
+
+ if (ret) {
+ dev_err(&pdev->dev, "Can't set tx clock\n");
+ return ret;
+ }
The ordering is a bit odd here. Normally you would test each operation
individually for errors. So:
ret = clk_set_rate(gmac->tx_clk, GMAC_TX_RATE_125M);
if (ret) {
dev_err(&pdev->dev, "Can't set tx clock\n");
return ret;
}
ret = clk_prepare_enable(gmac->tx_clk);
if (ret) {
dev_err(&pdev->dev, "Can't enable tx clock\n");
return ret;
}
+
+ ret = clk_prepare_enable(gmac->rx_clk);
+ if (ret) {
+ clk_disable_unprepare(gmac->tx_clk);
+ dev_err(&pdev->dev, "Can't set rx clock\n");
+ return ret;
+ }
Is there no need to set the TX clock rate?
Andrew