[PATCH] ufs: rockchip: Make use of controller resets

Alexey Charkov alchark at flipper.net
Mon Mar 16 17:50:45 CET 2026


Assert Rockchip UFS controller resets during initialization and HCE
enable, as it is done by the Linux driver.

This is required to make some UFS chips, such as Foresee FEUDNN064G-C2G0,
work properly.

Note that the resets were already requested in the probe function, just
not used.

Signed-off-by: Alexey Charkov <alchark at flipper.net>
---
 drivers/ufs/ufs-rockchip.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/ufs/ufs-rockchip.c b/drivers/ufs/ufs-rockchip.c
index a13236c7f761..dc4b9b5c86da 100644
--- a/drivers/ufs/ufs-rockchip.c
+++ b/drivers/ufs/ufs-rockchip.c
@@ -19,13 +19,22 @@
 #include "unipro.h"
 #include "ufs-rockchip.h"
 
+static void ufs_rockchip_controller_reset(struct ufs_rockchip_host *host)
+{
+	reset_assert_bulk(&host->rsts);
+	udelay(1);
+	reset_deassert_bulk(&host->rsts);
+}
+
 static int ufs_rockchip_hce_enable_notify(struct ufs_hba *hba,
 					  enum ufs_notify_change_status status)
 {
 	int err = 0;
 
-	if (status != POST_CHANGE)
+	if (status != POST_CHANGE) {
+		ufs_rockchip_controller_reset(dev_get_priv(hba->dev));
 		return 0;
+	}
 
 	ufshcd_dme_reset(hba);
 	ufshcd_dme_enable(hba);
@@ -150,6 +159,8 @@ static int ufs_rockchip_common_init(struct ufs_hba *hba)
 		return err;
 	}
 
+	ufs_rockchip_controller_reset(host);
+
 	err = gpio_request_by_name(dev, "reset-gpios", 0, &host->device_reset,
 				   GPIOD_IS_OUT | GPIOD_ACTIVE_LOW);
 	if (err) {

---
base-commit: 841856ed9675b26ec517fdd00b5cc0aef8db508e
change-id: 20260316-rockchip-ufs-reset-345cf81efa31

Best regards,
-- 
Alexey Charkov <alchark at flipper.net>



More information about the U-Boot mailing list