lkml.org 
[lkml]   [2022]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH net v2] stmmac: dwmac-mediatek: fix clock issue
From


On 08/07/2022 09:56, Biao Huang wrote:
> Since clocks are handled in mediatek_dwmac_clks_config(),
> remove the clocks configuration in init()/exit(), and
> invoke mediatek_dwmac_clks_config instead.
>
> This issue is found in suspend/resume test.
>
> Fixes: 3186bdad97d5 ("stmmac: dwmac-mediatek: add platform level clocks management")
> Signed-off-by: Biao Huang <biao.huang@mediatek.com>
> ---
> .../ethernet/stmicro/stmmac/dwmac-mediatek.c | 32 ++++++-------------
> 1 file changed, 10 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
> index 6ff88df58767..6d82cf2658e0 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
> @@ -576,32 +576,12 @@ static int mediatek_dwmac_init(struct platform_device *pdev, void *priv)
> }
> }
>
> - ret = clk_bulk_prepare_enable(variant->num_clks, plat->clks);
> - if (ret) {
> - dev_err(plat->dev, "failed to enable clks, err = %d\n", ret);
> - return ret;
> - }
> -
> - ret = clk_prepare_enable(plat->rmii_internal_clk);
> - if (ret) {
> - dev_err(plat->dev, "failed to enable rmii internal clk, err = %d\n", ret);
> - goto err_clk;
> - }
> -
> return 0;
> -
> -err_clk:
> - clk_bulk_disable_unprepare(variant->num_clks, plat->clks);
> - return ret;
> }
>
> static void mediatek_dwmac_exit(struct platform_device *pdev, void *priv)
> {
> - struct mediatek_dwmac_plat_data *plat = priv;
> - const struct mediatek_dwmac_variant *variant = plat->variant;
> -
> - clk_disable_unprepare(plat->rmii_internal_clk);
> - clk_bulk_disable_unprepare(variant->num_clks, plat->clks);
> + /* nothing to do now */

We can just leave the function pointer point to NULL, that get checked before
calling exit.

Regards,
Matthias

> }
>
> static int mediatek_dwmac_clks_config(void *priv, bool enabled)
> @@ -712,13 +692,21 @@ static int mediatek_dwmac_probe(struct platform_device *pdev)
> mediatek_dwmac_common_data(pdev, plat_dat, priv_plat);
> mediatek_dwmac_init(pdev, priv_plat);
>
> + ret = mediatek_dwmac_clks_config(priv_plat, true);
> + if (ret)
> + return ret;
> +
> ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
> if (ret) {
> stmmac_remove_config_dt(pdev, plat_dat);
> - return ret;
> + goto err_drv_probe;
> }
>
> return 0;
> +
> +err_drv_probe:
> + mediatek_dwmac_clks_config(priv_plat, false);
> + return ret;
> }
>
> static const struct of_device_id mediatek_dwmac_match[] = {

\
 
 \ /
  Last update: 2022-07-08 10:20    [W:0.062 / U:1.080 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site