* [PATCH V2 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
@ 2021-10-18 15:10 Adrian Hunter
2021-10-18 15:10 ` [PATCH V2 1/1] " Adrian Hunter
2021-10-19 3:43 ` [PATCH V2 0/1] " Martin K. Petersen
0 siblings, 2 replies; 3+ messages in thread
From: Adrian Hunter @ 2021-10-18 15:10 UTC (permalink / raw)
To: Martin K . Petersen
Cc: James E . J . Bottomley, Bean Huo, Avri Altman, linux-scsi
Hi
This patch ensures suspend-to-disk works with Host Performance Booster.
Since the Host Perfomance Booster feature was added in v5.15, please
consider this for v5.15 fixes.
Changes in V2:
scsi: ufs-pci: Force a full restore after suspend-to-disk
Add missing #ifdef CONFIG_PM_SLEEP as per
kernel test robot <lkp@intel.com>
Add Reviewed-by: Avri Altman <avri.altman@wdc.com>
Adrian Hunter (1):
scsi: ufs-pci: Force a full restore after suspend-to-disk
drivers/scsi/ufs/ufshcd-pci.c | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
Regards
Adrian
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH V2 1/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
2021-10-18 15:10 [PATCH V2 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk Adrian Hunter
@ 2021-10-18 15:10 ` Adrian Hunter
2021-10-19 3:43 ` [PATCH V2 0/1] " Martin K. Petersen
1 sibling, 0 replies; 3+ messages in thread
From: Adrian Hunter @ 2021-10-18 15:10 UTC (permalink / raw)
To: Martin K . Petersen
Cc: James E . J . Bottomley, Bean Huo, Avri Altman, linux-scsi
Implement the ->restore() PM operation and set the link to off, which
will force a full reset and restore. This ensures that Host Performance
Booster is reset after suspend-to-disk.
The Host Performance Booster feature caches logical-to-physical mapping
information in the host memory. After suspend-to-disk, such information
is not valid, so a full reset and restore is needed.
A full reset and restore is done if the SPM level is 5 or 6, but not for
other SPM levels, so this change fixes those cases.
A full reset and restore also restores base address registers, so that
code is removed.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
---
drivers/scsi/ufs/ufshcd-pci.c | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/drivers/scsi/ufs/ufshcd-pci.c b/drivers/scsi/ufs/ufshcd-pci.c
index 149c1aa09103..51424557810d 100644
--- a/drivers/scsi/ufs/ufshcd-pci.c
+++ b/drivers/scsi/ufs/ufshcd-pci.c
@@ -370,20 +370,6 @@ static void ufs_intel_common_exit(struct ufs_hba *hba)
static int ufs_intel_resume(struct ufs_hba *hba, enum ufs_pm_op op)
{
- /*
- * To support S4 (suspend-to-disk) with spm_lvl other than 5, the base
- * address registers must be restored because the restore kernel can
- * have used different addresses.
- */
- ufshcd_writel(hba, lower_32_bits(hba->utrdl_dma_addr),
- REG_UTP_TRANSFER_REQ_LIST_BASE_L);
- ufshcd_writel(hba, upper_32_bits(hba->utrdl_dma_addr),
- REG_UTP_TRANSFER_REQ_LIST_BASE_H);
- ufshcd_writel(hba, lower_32_bits(hba->utmrdl_dma_addr),
- REG_UTP_TASK_REQ_LIST_BASE_L);
- ufshcd_writel(hba, upper_32_bits(hba->utmrdl_dma_addr),
- REG_UTP_TASK_REQ_LIST_BASE_H);
-
if (ufshcd_is_link_hibern8(hba)) {
int ret = ufshcd_uic_hibern8_exit(hba);
@@ -463,6 +449,18 @@ static struct ufs_hba_variant_ops ufs_intel_lkf_hba_vops = {
.device_reset = ufs_intel_device_reset,
};
+#ifdef CONFIG_PM_SLEEP
+static int ufshcd_pci_restore(struct device *dev)
+{
+ struct ufs_hba *hba = dev_get_drvdata(dev);
+
+ /* Force a full reset and restore */
+ ufshcd_set_link_off(hba);
+
+ return ufshcd_system_resume(dev);
+}
+#endif
+
/**
* ufshcd_pci_shutdown - main function to put the controller in reset state
* @pdev: pointer to PCI device handle
@@ -546,9 +544,14 @@ ufshcd_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
}
static const struct dev_pm_ops ufshcd_pci_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(ufshcd_system_suspend, ufshcd_system_resume)
SET_RUNTIME_PM_OPS(ufshcd_runtime_suspend, ufshcd_runtime_resume, NULL)
#ifdef CONFIG_PM_SLEEP
+ .suspend = ufshcd_system_suspend,
+ .resume = ufshcd_system_resume,
+ .freeze = ufshcd_system_suspend,
+ .thaw = ufshcd_system_resume,
+ .poweroff = ufshcd_system_suspend,
+ .restore = ufshcd_pci_restore,
.prepare = ufshcd_suspend_prepare,
.complete = ufshcd_resume_complete,
#endif
--
2.25.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH V2 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
2021-10-18 15:10 [PATCH V2 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk Adrian Hunter
2021-10-18 15:10 ` [PATCH V2 1/1] " Adrian Hunter
@ 2021-10-19 3:43 ` Martin K. Petersen
1 sibling, 0 replies; 3+ messages in thread
From: Martin K. Petersen @ 2021-10-19 3:43 UTC (permalink / raw)
To: Adrian Hunter
Cc: Martin K . Petersen, James E . J . Bottomley, Avri Altman,
Bean Huo, linux-scsi
On Mon, 18 Oct 2021 18:10:03 +0300, Adrian Hunter wrote:
> This patch ensures suspend-to-disk works with Host Performance Booster.
> Since the Host Perfomance Booster feature was added in v5.15, please
> consider this for v5.15 fixes.
>
>
> Changes in V2:
>
> [...]
Applied to 5.15/scsi-fixes, thanks!
[1/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
https://git.kernel.org/mkp/scsi/c/4e5483b8440d
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-10-19 3:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-10-18 15:10 [PATCH V2 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk Adrian Hunter
2021-10-18 15:10 ` [PATCH V2 1/1] " Adrian Hunter
2021-10-19 3:43 ` [PATCH V2 0/1] " Martin K. Petersen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox