From a32405cd87460b6d690225492930d1448ff93f53 Mon Sep 17 00:00:00 2001 From: Venkat Gopalakrishnan Date: Mon, 13 Feb 2017 17:57:51 -0800 Subject: [PATCH] scsi: ufs: handle LINERESET error only during hibern8 enter If LINERESET was detected during hibern8 exit, HW recovers link back to original speed automatically by PA_INIT sequence, hence remove the full reset. Change-Id: I181adf4580c0febed817047a40c1d0621d9c9824 Signed-off-by: Venkat Gopalakrishnan --- drivers/scsi/ufs/ufshcd.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index bf357b50e798..9dea46909a52 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -4332,13 +4332,9 @@ int ufshcd_uic_hibern8_exit(struct ufs_hba *hba) ret = ufshcd_uic_pwr_ctrl(hba, &uic_cmd); trace_ufshcd_profile_hibern8(dev_name(hba->dev), "exit", ktime_to_us(ktime_sub(ktime_get(), start)), ret); - /* - * Do full reinit if exit failed or if LINERESET was detected during - * Hibern8 operation. After LINERESET, link moves to default PWM-G1 - * mode hence full reinit is required to move link to HS speeds. - */ - if (ret || hba->full_init_linereset) { - hba->full_init_linereset = false; + + /* Do full reinit if exit failed */ + if (ret) { ufshcd_update_error_stats(hba, UFS_ERR_HIBERN8_EXIT); dev_err(hba->dev, "%s: hibern8 exit failed. ret = %d", __func__, ret); @@ -6083,14 +6079,16 @@ static irqreturn_t ufshcd_update_uic_error(struct ufs_hba *hba) __func__, reg); ufshcd_update_uic_reg_hist(&hba->ufs_stats.pa_err, reg); - /* Don't ignore LINERESET indication during hibern8 operation */ + /* + * Don't ignore LINERESET indication during hibern8 + * enter operation. + */ if (reg & UIC_PHY_ADAPTER_LAYER_GENERIC_ERROR) { struct uic_command *cmd = hba->active_uic_cmd; if (cmd) { - if ((cmd->command == UIC_CMD_DME_HIBER_ENTER) - || (cmd->command == UIC_CMD_DME_HIBER_EXIT)) { - dev_err(hba->dev, "%s: LINERESET during hibern8, reg 0x%x\n", + if (cmd->command == UIC_CMD_DME_HIBER_ENTER) { + dev_err(hba->dev, "%s: LINERESET during hibern8 enter, reg 0x%x\n", __func__, reg); hba->full_init_linereset = true; }