Loading drivers/scsi/ufs/ufshcd.c +21 −8 Original line number Diff line number Diff line Loading @@ -1491,6 +1491,8 @@ static void ufshcd_init_clk_gating(struct ufs_hba *hba) { struct ufs_clk_gating *gating = &hba->clk_gating; hba->clk_gating.state = CLKS_ON; if (!ufshcd_is_clkgating_allowed(hba)) return; Loading Loading @@ -2593,6 +2595,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) clear_bit_unlock(tag, &hba->lrb_in_use); goto out; } if (ufshcd_is_clkgating_allowed(hba)) WARN_ON(hba->clk_gating.state != CLKS_ON); err = ufshcd_hibern8_hold(hba, true); Loading @@ -2602,6 +2605,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) ufshcd_release(hba, true); goto out; } if (ufshcd_is_hibern8_on_idle_allowed(hba)) WARN_ON(hba->hibern8_on_idle.state != HIBERN8_EXITED); /* Vote PM QoS for the request */ Loading Loading @@ -7931,7 +7935,8 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) if (ret) goto set_dev_active; if (ufshcd_is_link_hibern8(hba)) if (ufshcd_is_link_hibern8(hba) && ufshcd_is_hibern8_on_idle_allowed(hba)) hba->hibern8_on_idle.state = HIBERN8_ENTERED; ufshcd_vreg_set_lpm(hba); Loading @@ -7954,8 +7959,11 @@ disable_clks: if (ret) goto set_link_active; if (ufshcd_is_clkgating_allowed(hba)) { hba->clk_gating.state = CLKS_OFF; trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state); trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state); } /* * Disable the host irq as host controller as there won't be any * host controller transaction expected till resume. Loading Loading @@ -8037,6 +8045,7 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) ret = ufshcd_uic_hibern8_exit(hba); if (!ret) { ufshcd_set_link_active(hba); if (ufshcd_is_hibern8_on_idle_allowed(hba)) hba->hibern8_on_idle.state = HIBERN8_EXITED; } else { goto vendor_suspend; Loading @@ -8050,6 +8059,7 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) if (ret || !ufshcd_is_link_active(hba)) goto vendor_suspend; /* mark link state as hibern8 exited */ if (ufshcd_is_hibern8_on_idle_allowed(hba)) hba->hibern8_on_idle.state = HIBERN8_EXITED; } Loading Loading @@ -8080,7 +8090,8 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) set_old_link_state: ufshcd_link_state_transition(hba, old_link_state, 0); if (ufshcd_is_link_hibern8(hba)) if (ufshcd_is_link_hibern8(hba) && ufshcd_is_hibern8_on_idle_allowed(hba)) hba->hibern8_on_idle.state = HIBERN8_ENTERED; vendor_suspend: ufshcd_vops_suspend(hba, pm_op); Loading @@ -8091,6 +8102,8 @@ disable_irq_and_vops_clks: if (hba->clk_scaling.is_allowed) ufshcd_suspend_clkscaling(hba); ufshcd_disable_clocks(hba, false); if (ufshcd_is_clkgating_allowed(hba)) hba->clk_gating.state = CLKS_OFF; out: hba->pm_op_in_progress = 0; Loading Loading
drivers/scsi/ufs/ufshcd.c +21 −8 Original line number Diff line number Diff line Loading @@ -1491,6 +1491,8 @@ static void ufshcd_init_clk_gating(struct ufs_hba *hba) { struct ufs_clk_gating *gating = &hba->clk_gating; hba->clk_gating.state = CLKS_ON; if (!ufshcd_is_clkgating_allowed(hba)) return; Loading Loading @@ -2593,6 +2595,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) clear_bit_unlock(tag, &hba->lrb_in_use); goto out; } if (ufshcd_is_clkgating_allowed(hba)) WARN_ON(hba->clk_gating.state != CLKS_ON); err = ufshcd_hibern8_hold(hba, true); Loading @@ -2602,6 +2605,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) ufshcd_release(hba, true); goto out; } if (ufshcd_is_hibern8_on_idle_allowed(hba)) WARN_ON(hba->hibern8_on_idle.state != HIBERN8_EXITED); /* Vote PM QoS for the request */ Loading Loading @@ -7931,7 +7935,8 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) if (ret) goto set_dev_active; if (ufshcd_is_link_hibern8(hba)) if (ufshcd_is_link_hibern8(hba) && ufshcd_is_hibern8_on_idle_allowed(hba)) hba->hibern8_on_idle.state = HIBERN8_ENTERED; ufshcd_vreg_set_lpm(hba); Loading @@ -7954,8 +7959,11 @@ disable_clks: if (ret) goto set_link_active; if (ufshcd_is_clkgating_allowed(hba)) { hba->clk_gating.state = CLKS_OFF; trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state); trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state); } /* * Disable the host irq as host controller as there won't be any * host controller transaction expected till resume. Loading Loading @@ -8037,6 +8045,7 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) ret = ufshcd_uic_hibern8_exit(hba); if (!ret) { ufshcd_set_link_active(hba); if (ufshcd_is_hibern8_on_idle_allowed(hba)) hba->hibern8_on_idle.state = HIBERN8_EXITED; } else { goto vendor_suspend; Loading @@ -8050,6 +8059,7 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) if (ret || !ufshcd_is_link_active(hba)) goto vendor_suspend; /* mark link state as hibern8 exited */ if (ufshcd_is_hibern8_on_idle_allowed(hba)) hba->hibern8_on_idle.state = HIBERN8_EXITED; } Loading Loading @@ -8080,7 +8090,8 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) set_old_link_state: ufshcd_link_state_transition(hba, old_link_state, 0); if (ufshcd_is_link_hibern8(hba)) if (ufshcd_is_link_hibern8(hba) && ufshcd_is_hibern8_on_idle_allowed(hba)) hba->hibern8_on_idle.state = HIBERN8_ENTERED; vendor_suspend: ufshcd_vops_suspend(hba, pm_op); Loading @@ -8091,6 +8102,8 @@ disable_irq_and_vops_clks: if (hba->clk_scaling.is_allowed) ufshcd_suspend_clkscaling(hba); ufshcd_disable_clocks(hba, false); if (ufshcd_is_clkgating_allowed(hba)) hba->clk_gating.state = CLKS_OFF; out: hba->pm_op_in_progress = 0; Loading