ufs: host: mediatek: Provide fixes in MediaTek platforms
[email protected]
maintainercover ufs: host: mediatek: Provide fixes in MediaTek platforms
From: Peter Wang <[email protected]>
This patch fix MediaTek platform exit hibern8 and mcq related error.
Peter Wang (3):
ufs: host: mediatek: check link status after exit hibern8
ufs: host: mediatek: fix mcq mode tm cmd timeout
ufs: host: mediatek: disable mcq irq when clock off
drivers/ufs/host/ufs-mediatek.c | 65 ++++++++++++++++++++++++++++----- drivers/ufs/host/ufs-mediatek.h | 1 + 2 files changed, 57 insertions(+), 9 deletions(-)
Signature · 1 line
2.18.0
[email protected]
maintainerPATCH 1/3 ufs: host: mediatek: check link status after exit hibern8
From: Peter Wang <[email protected]>
To prevent SSU(Active) error, check link status after exit hibern8. If link is not VS_LINK_UP, return error and do ufshcd_link_recovery.
--- drivers/ufs/host/ufs-mediatek.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
drivers/ufs/host/ufs-mediatek.c +10 -3
@@ -1208,11 +1208,18 @@ static int ufs_mtk_link_set_hpm(struct ufs_hba *hba)return err; err =ufshcd_uic_hibern8_exit (hba); -if (!err) -ufshcd_set_link_active (hba); -else +if (err)return err; +/* Check link state to make sure exit h8 success */ +ufs_mtk_wait_idle_state (hba,5 ); + err =ufs_mtk_wait_link_state (hba,VS_LINK_UP ,100 ); +if (err) { +dev_warn (hba->dev,"exit h8 state fail, err=%d\n" , err); +return err; + } +ufshcd_set_link_active (hba); +if (!hba->mcq_enabled) { err =ufshcd_make_hba_operational (hba); }else {
Signature · 1 line
2.18.0
Re: [PATCH v1 1/3] ufs: host: mediatek: check link status after exit hibern8
Quoted 37 lines · On Thu, 2023-12-21 at 19:04 +0800, [email protected] wrote:
From: Peter Wang <[email protected]>
To prevent SSU(Active) error, check link status after exit hibern8. If link is not
VS_LINK_UP, return error and doufshcd_link_recovery.Signed-off-by Peter Wang <[email protected]>--- drivers/ufs/host/ufs-mediatek.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)drivers/ufs/host/ufs- renamed from drivers/ufs/host/ufs-mediatek.c +0
-0
mediatek.c
indexfc61790d289b..104354a4d899100644drivers/ufs/host/ufs-mediatek.c +10
-3@@ -1208,11 +1208,18 @@ static int ufs_mtk_link_set_hpm(struct ufs_hba *hba)return err; err =ufshcd_uic_hibern8_exit (hba); -if (!err) -ufshcd_set_link_active (hba); -else +if (err)return err; +/* Check link state to make sure exit h8 success */ +ufs_mtk_wait_idle_state (hba,5 ); + err =ufs_mtk_wait_link_state (hba,VS_LINK_UP ,100 ); +if (err) { +dev_warn (hba->dev,"exit h8 state fail, err=%d\n" , err); +return err; + } +ufshcd_set_link_active (hba); +if (!hba->mcq_enabled) {
drivers/ufs/host/ufs-mediatek.c static int ufs_mtk_link_set_hpm(struct ufs_hba *hba) · line 1225
Quoted 2 lines
drivers/ufs/host/ufs-mediatek.c +0
-0err =ufshcd_make_hba_operational (hba); }else {
Chun-Hung
[email protected]
maintainerPATCH 2/3 ufs: host: mediatek: fix mcq mode tm cmd timeout
In reply to [email protected]From: Peter Wang <[email protected]>
Fix tm cmd timeout issue in mcq mode by default resume call ufshcd_make_hba_operational to set tm cmd dma address. This flow same as ufs init make operational after link startup then set mcq related register if use mcq mode.
--- drivers/ufs/host/ufs-mediatek.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)
drivers/ufs/host/ufs-mediatek.c +5 -6
@@ -1220,9 +1220,11 @@ static int ufs_mtk_link_set_hpm(struct ufs_hba *hba) }ufshcd_set_link_active (hba); -if (!hba->mcq_enabled) { - err =ufshcd_make_hba_operational (hba); - }else { + err =ufshcd_make_hba_operational (hba); +if (err) +return err; + +if (is_mcq_enabled (hba)) {ufs_mtk_config_mcq (hba, false);ufshcd_mcq_make_queues_operational (hba);ufshcd_mcq_config_mac (hba, hba->nutrs);
@@ -1231,9 +1233,6 @@ static int ufs_mtk_link_set_hpm(struct ufs_hba *hba) REG_UFS_MEM_CFG); } -if (err) -return err; -return 0 ; }
Signature · 1 line
2.18.0
Re: [PATCH v1 2/3] ufs: host: mediatek: fix mcq mode tm cmd timeout
Quoted 35 lines · On Thu, 2023-12-21 at 19:04 +0800, [email protected] wrote:
From: Peter Wang <[email protected]>
Fix tm cmd timeout issue in mcq mode by default resume call
ufshcd_make_hba_operationalto set tm cmd dma address. This flow same as ufs init make operational after link startup then set mcq related register if use mcq mode.Signed-off-by Peter Wang <[email protected]>--- drivers/ufs/host/ufs-mediatek.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)drivers/ufs/host/ufs- renamed from drivers/ufs/host/ufs-mediatek.c +0
-0
mediatek.c
index104354a4d899..eb1934126c87100644drivers/ufs/host/ufs-mediatek.c +5
-3@@ -1220,9 +1220,11 @@ static int ufs_mtk_link_set_hpm(struct ufs_hba *hba) }ufshcd_set_link_active (hba); -if (!hba->mcq_enabled) { - err =ufshcd_make_hba_operational (hba); - }else { + err =ufshcd_make_hba_operational (hba); +if (err) +return err; + +if (is_mcq_enabled (hba)) {ufs_mtk_config_mcq (hba, false);ufshcd_mcq_make_queues_operational (hba);drivers/ufs/host/ufs-mediatek.c +0
-0ufshcd_mcq_config_mac (hba, hba->nutrs);
drivers/ufs/host/ufs-mediatek.c static int ufs_mtk_link_set_hpm(struct ufs_hba · line 1238
Quoted 9 lines
drivers/ufs/host/ufs-mediatek.c +0
-3@@ -1231,9 +1233,6 @@ static int ufs_mtk_link_set_hpm(struct ufs_hba *hba) REG_UFS_MEM_CFG); } -if (err) -return err; -return 0 ; }
Chun-Hung
[email protected]
maintainerPATCH 3/3 ufs: host: mediatek: disable mcq irq when clock off
In reply to [email protected]From: Peter Wang <[email protected]>
Disable mcq irq when clock off, this is same as legacy mode.
--- drivers/ufs/host/ufs-mediatek.c | 41 +++++++++++++++++++++++++++++++++ drivers/ufs/host/ufs-mediatek.h | 1 + 2 files changed, 42 insertions(+)
drivers/ufs/host/ufs-mediatek.c +41 -0
@@ -660,6 +660,45 @@ static void ufs_mtk_pwr_ctrl(struct ufs_hba *hba, bool on) } } +static void ufs_mtk_mcq_disable_irq (struct ufs_hba *hba) +{ +struct ufs_mtk_host *host =ufshcd_get_variant (hba); +u32 irq, i; + +if (!is_mcq_enabled (hba)) +return ; + +if (host->mcq_nr_intr ==0 ) +return ; + +for (i =0 ; i < host->mcq_nr_intr; i++) { + irq = host->mcq_intr_info[i].irq; +disable_irq (irq); + } + host->is_mcq_intr_enabled = false; +} + +static void ufs_mtk_mcq_enable_irq (struct ufs_hba *hba) +{ +struct ufs_mtk_host *host =ufshcd_get_variant (hba); +u32 irq, i; + +if (!is_mcq_enabled (hba)) +return ; + +if (host->mcq_nr_intr ==0 ) +return ; + +if (host->is_mcq_intr_enabled == true) +return ; + +for (i =0 ; i < host->mcq_nr_intr; i++) { + irq = host->mcq_intr_info[i].irq; +enable_irq (irq); + } + host->is_mcq_intr_enabled = true; +} +/** * ufs_mtk_setup_clocks - enables/disable clocks * @hba: host controller instance
@@ -703,8 +742,10 @@ static int ufs_mtk_setup_clocks(struct ufs_hba *hba, bool on,if (clk_pwr_off)ufs_mtk_pwr_ctrl (hba, false); +ufs_mtk_mcq_disable_irq (hba); }else if (on && status ==POST_CHANGE ) {ufs_mtk_pwr_ctrl (hba, true); +ufs_mtk_mcq_enable_irq (hba); }return ret;
drivers/ufs/host/ufs-mediatek.h +1 -0
@@ -186,6 +186,7 @@ struct ufs_mtk_host {u32 ip_ver;bool mcq_set_intr; +bool is_mcq_intr_enabled;int mcq_nr_intr;struct ufs_mtk_mcq_intr_info mcq_intr_info[UFSHCD_MAX_Q_NR ]; };
Signature · 1 line
2.18.0
Re: [PATCH v1 3/3] ufs: host: mediatek: disable mcq irq when clock off
Quoted 81 lines · On Thu, 2023-12-21 at 19:04 +0800, [email protected] wrote:
From: Peter Wang <[email protected]>
Disable mcq irq when clock off, this is same as legacy mode.
Signed-off-by Peter Wang <[email protected]>--- drivers/ufs/host/ufs-mediatek.c | 41 +++++++++++++++++++++++++++++++++ drivers/ufs/host/ufs-mediatek.h | 1 + 2 files changed, 42 insertions(+)drivers/ufs/host/ufs- renamed from drivers/ufs/host/ufs-mediatek.c +0
-0
mediatek.c
indexeb1934126c87..51f05038408a100644drivers/ufs/host/ufs-mediatek.c +39
-0@@ -660,6 +660,45 @@ static void ufs_mtk_pwr_ctrl(struct ufs_hba *hba, bool on) } } +static void ufs_mtk_mcq_disable_irq (struct ufs_hba *hba) +{ +struct ufs_mtk_host *host =ufshcd_get_variant (hba); +u32 irq, i; + +if (!is_mcq_enabled (hba)) +return ; + +if (host->mcq_nr_intr ==0 ) +return ; + +for (i =0 ; i < host->mcq_nr_intr; i++) { + irq = host->mcq_intr_info[i].irq; +disable_irq (irq); + } + host->is_mcq_intr_enabled = false; +} + +static void ufs_mtk_mcq_enable_irq (struct ufs_hba *hba) +{ +struct ufs_mtk_host *host =ufshcd_get_variant (hba); +u32 irq, i; + +if (!is_mcq_enabled (hba)) +return ; + +if (host->mcq_nr_intr ==0 ) +return ; + +if (host->is_mcq_intr_enabled == true) +return ; + +for (i =0 ; i < host->mcq_nr_intr; i++) { + irq = host->mcq_intr_info[i].irq; +enable_irq (irq); + } + host->is_mcq_intr_enabled = true; +} +/** * ufs_mtk_setup_clocks - enables/disable clocks * @hba: host controller instance
drivers/ufs/host/ufs-mediatek.c +2
-0@@ -703,8 +742,10 @@ static int ufs_mtk_setup_clocks(struct ufs_hba *hba, bool on, if (clk_pwr_off)ufs_mtk_pwr_ctrl (hba, false); +ufs_mtk_mcq_disable_irq (hba); }else if (on && status ==POST_CHANGE ) {ufs_mtk_pwr_ctrl (hba, true); +ufs_mtk_mcq_enable_irq (hba); }drivers/ufs/host/ufs-mediatek.c +0
-0return ret;drivers/ufs/host/ufs- renamed from drivers/ufs/host/ufs-mediatek.h +0
-0
mediatek.h
indexf76e80d91729..922f1e51a60c100644
drivers/ufs/host/ufs-mediatek.h struct ufs_mtk_host { · line 192
Quoted 7 lines
drivers/ufs/host/ufs-mediatek.h +1
-0@@ -186,6 +186,7 @@ struct ufs_mtk_host {u32 ip_ver;bool mcq_set_intr; +bool is_mcq_intr_enabled;int mcq_nr_intr;struct ufs_mtk_mcq_intr_info mcq_intr_info[UFSHCD_MAX_Q_NR ]; };
Chun-Hung
Martin K. Petersen
AppliedQuoted 2 lines
This patch fix MediaTek platform exit hibern8 and mcq related error.
Applied to 6.9/scsi-staging, thanks!
Signature · 1 line
Martin K. Petersen Oracle Linux Engineering
Martin K. Petersen
AppliedQuoted 8 lines · On Thu, 21 Dec 2023 19:04:13 +0800, [email protected] wrote:
This patch fix MediaTek platform exit hibern8 and mcq related error.
Peter Wang (3):
ufs: host: mediatek: check link status after exit hibern8
ufs: host: mediatek: fix mcq mode tm cmd timeout
ufs: host: mediatek: disable mcq irq when clock off[...]
Applied to 6.9/scsi-queue, thanks!
[1/3] ufs: host: mediatek: check link status after exit hibern8
https://git.kernel.org/mkp/scsi/c/29b3a373e2df [2/3] ufs: host: mediatek: fix mcq mode tm cmd timeout https://git.kernel.org/mkp/scsi/c/468b3e0a3bca [3/3] ufs: host: mediatek: disable mcq irq when clock off https://git.kernel.org/mkp/scsi/c/e0dc13e5a3cb
Signature · 1 line
Martin K. Petersen Oracle Linux Engineering