[PATCH 2/2] scsi: ceva: Enable PHY and reset support

Vladimir Oltean vladimir.oltean at nxp.com
Mon Jan 31 10:44:00 CET 2022


On Wed, Jan 19, 2022 at 03:18:54PM +0100, Michal Simek wrote:
> Add phy and reset support for ceva sata IP. Phy and reset are optional
> properties that's why detect if description is available. If not just
> continue with operation.
> This code was tested on Xilinx Kria SOM kv260-revA with sata connector
> populated.
> 
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
> ---

Reviewed-by: Vladimir Oltean <vladimir.oltean at nxp.com>

> 
>  drivers/ata/sata_ceva.c | 44 +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 44 insertions(+)
> 
> diff --git a/drivers/ata/sata_ceva.c b/drivers/ata/sata_ceva.c
> index b71f10223da8..43bcc59cd282 100644
> --- a/drivers/ata/sata_ceva.c
> +++ b/drivers/ata/sata_ceva.c
> @@ -6,9 +6,12 @@
>  #include <common.h>
>  #include <dm.h>
>  #include <ahci.h>
> +#include <generic-phy.h>
>  #include <log.h>
> +#include <reset.h>
>  #include <scsi.h>
>  #include <asm/io.h>
> +#include <dm/device_compat.h>
>  #include <linux/ioport.h>
>  
>  /* Vendor Specific Register Offsets */
> @@ -181,6 +184,47 @@ static int sata_ceva_bind(struct udevice *dev)
>  static int sata_ceva_probe(struct udevice *dev)
>  {
>  	struct ceva_sata_priv *priv = dev_get_priv(dev);
> +	struct phy phy;
> +	int ret;
> +	struct reset_ctl_bulk resets;
> +
> +	ret = generic_phy_get_by_index(dev, 0, &phy);
> +	if (!ret) {
> +		dev_dbg(dev, "Perform PHY initialization\n");
> +		ret = generic_phy_init(&phy);
> +		if (ret)
> +			return ret;
> +	} else if (ret != -ENOENT) {
> +		dev_dbg(dev, "could not get phy (err %d)\n", ret);
> +		return ret;
> +	}
> +
> +	/* reset is optional */
> +	ret = reset_get_bulk(dev, &resets);
> +	if (ret && ret != -ENOTSUPP && ret != -ENOENT) {
> +		dev_dbg(dev, "Getting reset fails (err %d)\n", ret);
> +		return ret;
> +	}
> +
> +	/* Just trigger reset when reset is specified */
> +	if (!ret) {
> +		dev_dbg(dev, "Perform IP reset\n");
> +		ret = reset_deassert_bulk(&resets);
> +		if (ret) {
> +			dev_dbg(dev, "Reset fails (err %d)\n", ret);
> +			reset_release_bulk(&resets);
> +			return ret;
> +		}
> +	}
> +
> +	if (phy.dev) {
> +		dev_dbg(dev, "Perform PHY power on\n");
> +		ret = generic_phy_power_on(&phy);
> +		if (ret) {
> +			dev_dbg(dev, "PHY power on failed (err %d)\n", ret);
> +			return ret;
> +		}
> +	}
>  
>  	ceva_init_sata(priv);
>  
> -- 
> 2.34.1
>


More information about the U-Boot mailing list