Message ID | 20240227111837.395422-2-ukleinek@debian.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | PCI: dw-rockchip: Add error messages in .probe()s error paths | expand |
Am Dienstag, 27. Februar 2024, 12:18:35 CET schrieb Uwe Kleine-König: > Drivers that silently fail to probe provide a bad user experience and > make it unnecessarily hard to debug such a failure. Fix it by using > dev_err_probe() instead of a plain return. > > Signed-off-by: Uwe Kleine-König <ukleinek@debian.org> Looks like a much better behavior this way Reviewed-by: Heiko Stuebner <heiko@sntech.de> > --- > drivers/pci/controller/dwc/pcie-dw-rockchip.c | 23 ++++++++++++------- > 1 file changed, 15 insertions(+), 8 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > index d6842141d384..4c16d8d2e178 100644 > --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c > +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > @@ -225,11 +225,17 @@ static int rockchip_pcie_clk_init(struct rockchip_pcie *rockchip) > > ret = devm_clk_bulk_get_all(dev, &rockchip->clks); > if (ret < 0) > - return ret; > + return dev_err_probe(rockchip->pci.dev, ret, > + "failed to get clocks\n"); > > rockchip->clk_cnt = ret; > > - return clk_bulk_prepare_enable(rockchip->clk_cnt, rockchip->clks); > + ret = clk_bulk_prepare_enable(rockchip->clk_cnt, rockchip->clks); > + if (ret) > + return dev_err_probe(rockchip->pci.dev, ret, > + "failed to enable clocks\n"); > + > + return 0; > } > > static int rockchip_pcie_resource_get(struct platform_device *pdev, > @@ -237,12 +243,14 @@ static int rockchip_pcie_resource_get(struct platform_device *pdev, > { > rockchip->apb_base = devm_platform_ioremap_resource_byname(pdev, "apb"); > if (IS_ERR(rockchip->apb_base)) > - return PTR_ERR(rockchip->apb_base); > + return dev_err_probe(&pdev->dev, PTR_ERR(rockchip->apb_base), > + "failed to map apb registers\n"); > > rockchip->rst_gpio = devm_gpiod_get_optional(&pdev->dev, "reset", > GPIOD_OUT_HIGH); > if (IS_ERR(rockchip->rst_gpio)) > - return PTR_ERR(rockchip->rst_gpio); > + return dev_err_probe(&pdev->dev, PTR_ERR(rockchip->rst_gpio), > + "failed to get reset gpio\n"); > > rockchip->rst = devm_reset_control_array_get_exclusive(&pdev->dev); > if (IS_ERR(rockchip->rst)) > @@ -320,10 +328,9 @@ static int rockchip_pcie_probe(struct platform_device *pdev) > rockchip->vpcie3v3 = NULL; > } else { > ret = regulator_enable(rockchip->vpcie3v3); > - if (ret) { > - dev_err(dev, "failed to enable vpcie3v3 regulator\n"); > - return ret; > - } > + if (ret) > + return dev_err_probe(dev, ret, > + "failed to enable vpcie3v3 regulator\n"); > } > > ret = rockchip_pcie_phy_init(rockchip); > > base-commit: 6613476e225e090cc9aad49be7fa504e290dd33d >
On Tue, Feb 27, 2024 at 12:18:35PM +0100, Uwe Kleine-König wrote: > Drivers that silently fail to probe provide a bad user experience and > make it unnecessarily hard to debug such a failure. Fix it by using > dev_err_probe() instead of a plain return. > > Signed-off-by: Uwe Kleine-König <ukleinek@debian.org> > --- > drivers/pci/controller/dwc/pcie-dw-rockchip.c | 23 ++++++++++++------- > 1 file changed, 15 insertions(+), 8 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > index d6842141d384..4c16d8d2e178 100644 > --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c > +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > @@ -225,11 +225,17 @@ static int rockchip_pcie_clk_init(struct rockchip_pcie *rockchip) > > ret = devm_clk_bulk_get_all(dev, &rockchip->clks); > if (ret < 0) > - return ret; > + return dev_err_probe(rockchip->pci.dev, ret, > + "failed to get clocks\n"); + return dev_err_probe(dev, ret, "failed to get clocks\n"); > > rockchip->clk_cnt = ret; > > - return clk_bulk_prepare_enable(rockchip->clk_cnt, rockchip->clks); > + ret = clk_bulk_prepare_enable(rockchip->clk_cnt, rockchip->clks); > + if (ret) > + return dev_err_probe(rockchip->pci.dev, ret, > + "failed to enable clocks\n"); ditto -Serge(y) > + > + return 0; > } > > static int rockchip_pcie_resource_get(struct platform_device *pdev, > @@ -237,12 +243,14 @@ static int rockchip_pcie_resource_get(struct platform_device *pdev, > { > rockchip->apb_base = devm_platform_ioremap_resource_byname(pdev, "apb"); > if (IS_ERR(rockchip->apb_base)) > - return PTR_ERR(rockchip->apb_base); > + return dev_err_probe(&pdev->dev, PTR_ERR(rockchip->apb_base), > + "failed to map apb registers\n"); > > rockchip->rst_gpio = devm_gpiod_get_optional(&pdev->dev, "reset", > GPIOD_OUT_HIGH); > if (IS_ERR(rockchip->rst_gpio)) > - return PTR_ERR(rockchip->rst_gpio); > + return dev_err_probe(&pdev->dev, PTR_ERR(rockchip->rst_gpio), > + "failed to get reset gpio\n"); > > rockchip->rst = devm_reset_control_array_get_exclusive(&pdev->dev); > if (IS_ERR(rockchip->rst)) > @@ -320,10 +328,9 @@ static int rockchip_pcie_probe(struct platform_device *pdev) > rockchip->vpcie3v3 = NULL; > } else { > ret = regulator_enable(rockchip->vpcie3v3); > - if (ret) { > - dev_err(dev, "failed to enable vpcie3v3 regulator\n"); > - return ret; > - } > + if (ret) > + return dev_err_probe(dev, ret, > + "failed to enable vpcie3v3 regulator\n"); > } > > ret = rockchip_pcie_phy_init(rockchip); > > base-commit: 6613476e225e090cc9aad49be7fa504e290dd33d > -- > 2.43.0 > >
diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index d6842141d384..4c16d8d2e178 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -225,11 +225,17 @@ static int rockchip_pcie_clk_init(struct rockchip_pcie *rockchip) ret = devm_clk_bulk_get_all(dev, &rockchip->clks); if (ret < 0) - return ret; + return dev_err_probe(rockchip->pci.dev, ret, + "failed to get clocks\n"); rockchip->clk_cnt = ret; - return clk_bulk_prepare_enable(rockchip->clk_cnt, rockchip->clks); + ret = clk_bulk_prepare_enable(rockchip->clk_cnt, rockchip->clks); + if (ret) + return dev_err_probe(rockchip->pci.dev, ret, + "failed to enable clocks\n"); + + return 0; } static int rockchip_pcie_resource_get(struct platform_device *pdev, @@ -237,12 +243,14 @@ static int rockchip_pcie_resource_get(struct platform_device *pdev, { rockchip->apb_base = devm_platform_ioremap_resource_byname(pdev, "apb"); if (IS_ERR(rockchip->apb_base)) - return PTR_ERR(rockchip->apb_base); + return dev_err_probe(&pdev->dev, PTR_ERR(rockchip->apb_base), + "failed to map apb registers\n"); rockchip->rst_gpio = devm_gpiod_get_optional(&pdev->dev, "reset", GPIOD_OUT_HIGH); if (IS_ERR(rockchip->rst_gpio)) - return PTR_ERR(rockchip->rst_gpio); + return dev_err_probe(&pdev->dev, PTR_ERR(rockchip->rst_gpio), + "failed to get reset gpio\n"); rockchip->rst = devm_reset_control_array_get_exclusive(&pdev->dev); if (IS_ERR(rockchip->rst)) @@ -320,10 +328,9 @@ static int rockchip_pcie_probe(struct platform_device *pdev) rockchip->vpcie3v3 = NULL; } else { ret = regulator_enable(rockchip->vpcie3v3); - if (ret) { - dev_err(dev, "failed to enable vpcie3v3 regulator\n"); - return ret; - } + if (ret) + return dev_err_probe(dev, ret, + "failed to enable vpcie3v3 regulator\n"); } ret = rockchip_pcie_phy_init(rockchip);
Drivers that silently fail to probe provide a bad user experience and make it unnecessarily hard to debug such a failure. Fix it by using dev_err_probe() instead of a plain return. Signed-off-by: Uwe Kleine-König <ukleinek@debian.org> --- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) base-commit: 6613476e225e090cc9aad49be7fa504e290dd33d