[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