summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Charkov <[email protected]>2026-03-16 20:50:45 +0400
committerNeil Armstrong <[email protected]>2026-04-22 10:03:54 +0200
commitc7299ff33ebfabe35baa6656590d977dedfba5b0 (patch)
treeaacc642753dda404ce60f3d6d80e27e05affcabd
parent052988aa29bfd506d7ce207fbb3f5374a5dbecbb (diff)
ufs: rockchip: Make use of controller resets
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 <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Neil Armstrong <[email protected]>
-rw-r--r--drivers/ufs/ufs-rockchip.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/ufs/ufs-rockchip.c b/drivers/ufs/ufs-rockchip.c
index a13236c7f76..dc4b9b5c86d 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) {