> +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