diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/ufs/Kconfig | 4 | ||||
| -rw-r--r-- | drivers/ufs/ufs-rockchip.c | 22 | ||||
| -rw-r--r-- | drivers/ufs/ufs-rockchip.h | 1 |
3 files changed, 27 insertions, 0 deletions
diff --git a/drivers/ufs/Kconfig b/drivers/ufs/Kconfig index 6c75bb2a079..49472933de3 100644 --- a/drivers/ufs/Kconfig +++ b/drivers/ufs/Kconfig @@ -76,6 +76,10 @@ config UFS_RENESAS_GEN5 config UFS_ROCKCHIP bool "Rockchip specific hooks to UFS controller platform driver" depends on UFS + depends on DM_GPIO + depends on RESET_ROCKCHIP + depends on SPL_DM_GPIO || !SPL_UFS_SUPPORT + depends on SPL_RESET_ROCKCHIP || !SPL_UFS_SUPPORT help This selects the Rockchip specific additions to UFSHCD platform driver. diff --git a/drivers/ufs/ufs-rockchip.c b/drivers/ufs/ufs-rockchip.c index 8ce3c269cf7..d799710453e 100644 --- a/drivers/ufs/ufs-rockchip.c +++ b/drivers/ufs/ufs-rockchip.c @@ -5,6 +5,7 @@ * Copyright (C) 2025 Rockchip Electronics Co.Ltd. */ +#include <asm/gpio.h> #include <asm/io.h> #include <clk.h> #include <dm.h> @@ -150,11 +151,31 @@ static int ufs_rockchip_common_init(struct ufs_hba *hba) return err; } + err = gpio_request_by_name(dev, "reset-gpios", 0, &host->device_reset, + GPIOD_IS_OUT | GPIOD_ACTIVE_LOW); + if (err) { + dev_err(dev, "Cannot get reset GPIO\n"); + return err; + } + host->hba = hba; return 0; } +static int ufs_rockchip_device_reset(struct ufs_hba *hba) +{ + struct ufs_rockchip_host *host = dev_get_priv(hba->dev); + + dm_gpio_set_value(&host->device_reset, true); + udelay(20); + + dm_gpio_set_value(&host->device_reset, false); + udelay(20); + + return 0; +} + static int ufs_rockchip_rk3576_init(struct ufs_hba *hba) { int ret = 0; @@ -172,6 +193,7 @@ static struct ufs_hba_ops ufs_hba_rk3576_vops = { .init = ufs_rockchip_rk3576_init, .phy_initialization = ufs_rockchip_rk3576_phy_init, .hce_enable_notify = ufs_rockchip_hce_enable_notify, + .device_reset = ufs_rockchip_device_reset, }; static const struct udevice_id ufs_rockchip_of_match[] = { diff --git a/drivers/ufs/ufs-rockchip.h b/drivers/ufs/ufs-rockchip.h index 3dcb80f5702..50c2539da78 100644 --- a/drivers/ufs/ufs-rockchip.h +++ b/drivers/ufs/ufs-rockchip.h @@ -72,6 +72,7 @@ struct ufs_rockchip_host { void __iomem *ufs_sys_ctrl; void __iomem *mphy_base; struct reset_ctl_bulk rsts; + struct gpio_desc device_reset; struct clk ref_out_clk; uint64_t caps; uint32_t phy_config_mode; |
