diff mbox series

[v1] net: bcmgenet: Use devm_clk_get_optional() to get the clocks

Message ID 20200420183058.67457-1-andriy.shevchenko@linux.intel.com
State Changes Requested
Delegated to: David Miller
Headers show
Series [v1] net: bcmgenet: Use devm_clk_get_optional() to get the clocks | expand

Commit Message

Andy Shevchenko April 20, 2020, 6:30 p.m. UTC
Conversion to devm_clk_get_optional() makes it explicit that clocks are
optional. This change allows to handle deferred probe in case clocks are
defined, but not yet probed. Due to above changes replace dev_dbg() by
dev_err() and bail out in error case.

While here, check potential error when enable main clock.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 .../net/ethernet/broadcom/genet/bcmgenet.c    | 25 +++++++++++--------
 1 file changed, 15 insertions(+), 10 deletions(-)

Comments

Florian Fainelli April 20, 2020, 6:33 p.m. UTC | #1
On 4/20/2020 11:30 AM, Andy Shevchenko wrote:
> Conversion to devm_clk_get_optional() makes it explicit that clocks are
> optional. This change allows to handle deferred probe in case clocks are
> defined, but not yet probed. Due to above changes replace dev_dbg() by
> dev_err() and bail out in error case.
> 
> While here, check potential error when enable main clock.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>   .../net/ethernet/broadcom/genet/bcmgenet.c    | 25 +++++++++++--------
>   1 file changed, 15 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> index ef275db018f73..045f7b7f0b5d3 100644
> --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> @@ -3487,13 +3487,16 @@ static int bcmgenet_probe(struct platform_device *pdev)
>   		priv->dma_max_burst_length = DMA_MAX_BURST_LENGTH;
>   	}
>   
> -	priv->clk = devm_clk_get(&priv->pdev->dev, "enet");
> +	priv->clk = devm_clk_get_optional(&priv->pdev->dev, "enet");
>   	if (IS_ERR(priv->clk)) {
> -		dev_dbg(&priv->pdev->dev, "failed to get enet clock\n");
> -		priv->clk = NULL;
> +		dev_err(&priv->pdev->dev, "failed to get enet clock\n");

Please maintain the dev_dbg() here and likewise for the rest of your 
changes. With that:

Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Andy Shevchenko April 20, 2020, 7:17 p.m. UTC | #2
On Mon, Apr 20, 2020 at 11:33:07AM -0700, Florian Fainelli wrote:
> On 4/20/2020 11:30 AM, Andy Shevchenko wrote:
> > Conversion to devm_clk_get_optional() makes it explicit that clocks are
> > optional. This change allows to handle deferred probe in case clocks are
> > defined, but not yet probed. Due to above changes replace dev_dbg() by
> > dev_err() and bail out in error case.
> > 
> > While here, check potential error when enable main clock.
> > 
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > ---
> >   .../net/ethernet/broadcom/genet/bcmgenet.c    | 25 +++++++++++--------
> >   1 file changed, 15 insertions(+), 10 deletions(-)
> > 
> > diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> > index ef275db018f73..045f7b7f0b5d3 100644
> > --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> > +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
> > @@ -3487,13 +3487,16 @@ static int bcmgenet_probe(struct platform_device *pdev)
> >   		priv->dma_max_burst_length = DMA_MAX_BURST_LENGTH;
> >   	}
> > -	priv->clk = devm_clk_get(&priv->pdev->dev, "enet");
> > +	priv->clk = devm_clk_get_optional(&priv->pdev->dev, "enet");
> >   	if (IS_ERR(priv->clk)) {
> > -		dev_dbg(&priv->pdev->dev, "failed to get enet clock\n");
> > -		priv->clk = NULL;
> > +		dev_err(&priv->pdev->dev, "failed to get enet clock\n");
> 
> Please maintain the dev_dbg() here and likewise for the rest of your
> changes. With that:
> 
> Acked-by: Florian Fainelli <f.fainelli@gmail.com>

Ah, I see, actually dev_err() will make too much noise in case of deferred probe.

Perhaps
	if (err != -EPROBE_DEFER)
		dev_err(...);
?
diff mbox series

Patch

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index ef275db018f73..045f7b7f0b5d3 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -3487,13 +3487,16 @@  static int bcmgenet_probe(struct platform_device *pdev)
 		priv->dma_max_burst_length = DMA_MAX_BURST_LENGTH;
 	}
 
-	priv->clk = devm_clk_get(&priv->pdev->dev, "enet");
+	priv->clk = devm_clk_get_optional(&priv->pdev->dev, "enet");
 	if (IS_ERR(priv->clk)) {
-		dev_dbg(&priv->pdev->dev, "failed to get enet clock\n");
-		priv->clk = NULL;
+		dev_err(&priv->pdev->dev, "failed to get enet clock\n");
+		err = PTR_ERR(priv->clk);
+		goto err;
 	}
 
-	clk_prepare_enable(priv->clk);
+	err = clk_prepare_enable(priv->clk);
+	if (err)
+		goto err;
 
 	bcmgenet_set_hw_params(priv);
 
@@ -3511,16 +3514,18 @@  static int bcmgenet_probe(struct platform_device *pdev)
 	priv->rx_buf_len = RX_BUF_LENGTH;
 	INIT_WORK(&priv->bcmgenet_irq_work, bcmgenet_irq_task);
 
-	priv->clk_wol = devm_clk_get(&priv->pdev->dev, "enet-wol");
+	priv->clk_wol = devm_clk_get_optional(&priv->pdev->dev, "enet-wol");
 	if (IS_ERR(priv->clk_wol)) {
-		dev_dbg(&priv->pdev->dev, "failed to get enet-wol clock\n");
-		priv->clk_wol = NULL;
+		dev_err(&priv->pdev->dev, "failed to get enet-wol clock\n");
+		err = PTR_ERR(priv->clk_wol);
+		goto err;
 	}
 
-	priv->clk_eee = devm_clk_get(&priv->pdev->dev, "enet-eee");
+	priv->clk_eee = devm_clk_get_optional(&priv->pdev->dev, "enet-eee");
 	if (IS_ERR(priv->clk_eee)) {
-		dev_dbg(&priv->pdev->dev, "failed to get enet-eee clock\n");
-		priv->clk_eee = NULL;
+		dev_err(&priv->pdev->dev, "failed to get enet-eee clock\n");
+		err = PTR_ERR(priv->clk_eee);
+		goto err;
 	}
 
 	/* If this is an internal GPHY, power it on now, before UniMAC is