Re: [PATCH v2] PCI: cadence: Correct probe behaviour when failing to get PHY

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Sep 28, 2018 at 11:51:18AM +0100, Alan Douglas wrote:
> Test the correct value to see whether the PHY get failed.
> 
> Use devm_phy_get() instead of devm_phy_optional_get(), since it is
> only called if phy name is given in devicetree and so should exist.
> If failure when getting or linking PHY, put any PHYs which were
> already got and unlink them.
> 
> Fixes: dfb80534692ddc5b ("PCI: cadence: Add generic PHY support to host and EP drivers")
> Signed-off-by: Alan Douglas <adouglas@xxxxxxxxxxx>
> ---
> changes since v1:
>    - Correct error in while loop pointed out by Colin King

Is there a reason why I should NOT add Colin as a Reported-by ?

Lorenzo

>  drivers/pci/controller/pcie-cadence.c | 20 ++++++++++++--------
>  1 file changed, 12 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-cadence.c b/drivers/pci/controller/pcie-cadence.c
> index 86f1b00..5865512 100644
> --- a/drivers/pci/controller/pcie-cadence.c
> +++ b/drivers/pci/controller/pcie-cadence.c
> @@ -190,14 +190,16 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
>  
>  	for (i = 0; i < phy_count; i++) {
>  		of_property_read_string_index(np, "phy-names", i, &name);
> -		phy[i] = devm_phy_optional_get(dev, name);
> -		if (IS_ERR(phy))
> -			return PTR_ERR(phy);
> -
> +		phy[i] = devm_phy_get(dev, name);
> +		if (IS_ERR(phy[i])) {
> +			ret = PTR_ERR(phy[i]);
> +			goto err_phy;
> +		}
>  		link[i] = device_link_add(dev, &phy[i]->dev, DL_FLAG_STATELESS);
>  		if (!link[i]) {
> +			devm_phy_put(dev, phy[i]);
>  			ret = -EINVAL;
> -			goto err_link;
> +			goto err_phy;
>  		}
>  	}
>  
> @@ -207,13 +209,15 @@ int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie)
>  
>  	ret =  cdns_pcie_enable_phy(pcie);
>  	if (ret)
> -		goto err_link;
> +		goto err_phy;
>  
>  	return 0;
>  
> -err_link:
> -	while (--i >= 0)
> +err_phy:
> +	while (--i >= 0) {
>  		device_link_del(link[i]);
> +		devm_phy_put(dev, phy[i]);
> +	}
>  
>  	return ret;
>  }
> -- 
> 1.9.0
> 



[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux