Loading drivers/scsi/ufs/ufshcd.c +12 −7 Original line number Diff line number Diff line Loading @@ -5381,6 +5381,7 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) } if (ufshcd_is_runtime_pm(pm_op)) { if (ufshcd_can_autobkops_during_suspend(hba)) { /* * The device is idle with no requests in the queue, * allow background operations if needed. Loading @@ -5388,6 +5389,10 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) ret = ufshcd_bkops_ctrl(hba, BKOPS_STATUS_NON_CRITICAL); if (ret) goto enable_gating; } else { /* make sure that auto bkops is disabled */ ufshcd_disable_auto_bkops(hba); } } if ((req_dev_pwr_mode != hba->curr_dev_pwr_mode) && Loading drivers/scsi/ufs/ufshcd.h +7 −0 Original line number Diff line number Diff line Loading @@ -541,6 +541,8 @@ struct ufs_hba { #define UFSHCD_CAP_HIBERN8_WITH_CLK_GATING (1 << 1) /* Allow dynamic clk scaling */ #define UFSHCD_CAP_CLK_SCALING (1 << 2) /* Allow auto bkops to enabled during runtime suspend */ #define UFSHCD_CAP_AUTO_BKOPS_SUSPEND (1 << 3) struct devfreq *devfreq; struct ufs_clk_scaling clk_scaling; Loading @@ -566,6 +568,11 @@ static inline int ufshcd_is_clkscaling_enabled(struct ufs_hba *hba) { return hba->caps & UFSHCD_CAP_CLK_SCALING; } static inline bool ufshcd_can_autobkops_during_suspend(struct ufs_hba *hba) { return hba->caps & UFSHCD_CAP_AUTO_BKOPS_SUSPEND; } #define ufshcd_writel(hba, val, reg) \ writel((val), (hba)->mmio_base + (reg)) #define ufshcd_readl(hba, reg) \ Loading Loading
drivers/scsi/ufs/ufshcd.c +12 −7 Original line number Diff line number Diff line Loading @@ -5381,6 +5381,7 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) } if (ufshcd_is_runtime_pm(pm_op)) { if (ufshcd_can_autobkops_during_suspend(hba)) { /* * The device is idle with no requests in the queue, * allow background operations if needed. Loading @@ -5388,6 +5389,10 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op) ret = ufshcd_bkops_ctrl(hba, BKOPS_STATUS_NON_CRITICAL); if (ret) goto enable_gating; } else { /* make sure that auto bkops is disabled */ ufshcd_disable_auto_bkops(hba); } } if ((req_dev_pwr_mode != hba->curr_dev_pwr_mode) && Loading
drivers/scsi/ufs/ufshcd.h +7 −0 Original line number Diff line number Diff line Loading @@ -541,6 +541,8 @@ struct ufs_hba { #define UFSHCD_CAP_HIBERN8_WITH_CLK_GATING (1 << 1) /* Allow dynamic clk scaling */ #define UFSHCD_CAP_CLK_SCALING (1 << 2) /* Allow auto bkops to enabled during runtime suspend */ #define UFSHCD_CAP_AUTO_BKOPS_SUSPEND (1 << 3) struct devfreq *devfreq; struct ufs_clk_scaling clk_scaling; Loading @@ -566,6 +568,11 @@ static inline int ufshcd_is_clkscaling_enabled(struct ufs_hba *hba) { return hba->caps & UFSHCD_CAP_CLK_SCALING; } static inline bool ufshcd_can_autobkops_during_suspend(struct ufs_hba *hba) { return hba->caps & UFSHCD_CAP_AUTO_BKOPS_SUSPEND; } #define ufshcd_writel(hba, val, reg) \ writel((val), (hba)->mmio_base + (reg)) #define ufshcd_readl(hba, reg) \ Loading