* [PATCH 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
@ 2021-10-12 12:59 Adrian Hunter
2021-10-12 12:59 ` [PATCH 1/1] " Adrian Hunter
2021-10-13 10:46 ` [PATCH 0/1] " Avri Altman
0 siblings, 2 replies; 9+ messages in thread
From: Adrian Hunter @ 2021-10-12 12:59 UTC (permalink / raw)
To: Martin K . Petersen; +Cc: James E . J . Bottomley, Bean Huo, 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.
Adrian Hunter (1):
scsi: ufs-pci: Force a full restore after suspend-to-disk
drivers/scsi/ufs/ufshcd-pci.c | 31 ++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)
Regards
Adrian
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
2021-10-12 12:59 [PATCH 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk Adrian Hunter
@ 2021-10-12 12:59 ` Adrian Hunter
2021-10-14 6:15 ` Avri Altman
2021-10-17 2:05 ` Martin K. Petersen
2021-10-13 10:46 ` [PATCH 0/1] " Avri Altman
1 sibling, 2 replies; 9+ messages in thread
From: Adrian Hunter @ 2021-10-12 12:59 UTC (permalink / raw)
To: Martin K . Petersen; +Cc: James E . J . Bottomley, Bean Huo, 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>
---
drivers/scsi/ufs/ufshcd-pci.c | 31 ++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/drivers/scsi/ufs/ufshcd-pci.c b/drivers/scsi/ufs/ufshcd-pci.c
index 149c1aa09103..d65e6cd7a28d 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,16 @@ static struct ufs_hba_variant_ops ufs_intel_lkf_hba_vops = {
.device_reset = ufs_intel_device_reset,
};
+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);
+}
+
/**
* ufshcd_pci_shutdown - main function to put the controller in reset state
* @pdev: pointer to PCI device handle
@@ -546,9 +542,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] 9+ messages in thread
* RE: [PATCH 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
2021-10-12 12:59 [PATCH 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk Adrian Hunter
2021-10-12 12:59 ` [PATCH 1/1] " Adrian Hunter
@ 2021-10-13 10:46 ` Avri Altman
2021-10-13 11:41 ` Adrian Hunter
1 sibling, 1 reply; 9+ messages in thread
From: Avri Altman @ 2021-10-13 10:46 UTC (permalink / raw)
To: Adrian Hunter, Martin K . Petersen
Cc: James E . J . Bottomley, Bean Huo, linux-scsi
> Hi
>
> This patch ensures suspend-to-disk works with Host Performance Booster.
What is "suspend-to-disk"?
What power mode is used for that?
Thanks,
Avri
> Since the Host Perfomance Booster feature was added in v5.15, please
> consider this for v5.15 fixes.
>
>
> Adrian Hunter (1):
> scsi: ufs-pci: Force a full restore after suspend-to-disk
>
> drivers/scsi/ufs/ufshcd-pci.c | 31 ++++++++++++++++---------------
> 1 file changed, 16 insertions(+), 15 deletions(-)
>
>
> Regards
> Adrian
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
2021-10-13 10:46 ` [PATCH 0/1] " Avri Altman
@ 2021-10-13 11:41 ` Adrian Hunter
2021-10-13 12:33 ` Avri Altman
0 siblings, 1 reply; 9+ messages in thread
From: Adrian Hunter @ 2021-10-13 11:41 UTC (permalink / raw)
To: Avri Altman, Martin K . Petersen
Cc: James E . J . Bottomley, Bean Huo, linux-scsi
On 13/10/2021 13:46, Avri Altman wrote:
>> Hi
>>
>> This patch ensures suspend-to-disk works with Host Performance Booster.
> What is "suspend-to-disk"?
Hibernation, refer kernel config CONFIG_HIBERNATION
i.e.
echo disk > /sys/power/state
> What power mode is used for that?
Same as spm_lvl except ufshcd_wl_poweroff() naturally uses the same as
shutdown i.e. POWERDOWN
>
> Thanks,
> Avri
>
>> Since the Host Perfomance Booster feature was added in v5.15, please
>> consider this for v5.15 fixes.
>>
>>
>> Adrian Hunter (1):
>> scsi: ufs-pci: Force a full restore after suspend-to-disk
>>
>> drivers/scsi/ufs/ufshcd-pci.c | 31 ++++++++++++++++---------------
>> 1 file changed, 16 insertions(+), 15 deletions(-)
>>
>>
>> Regards
>> Adrian
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
2021-10-13 11:41 ` Adrian Hunter
@ 2021-10-13 12:33 ` Avri Altman
0 siblings, 0 replies; 9+ messages in thread
From: Avri Altman @ 2021-10-13 12:33 UTC (permalink / raw)
To: Adrian Hunter, Martin K . Petersen
Cc: James E . J . Bottomley, Bean Huo, linux-scsi
> On 13/10/2021 13:46, Avri Altman wrote:
> >> Hi
> >>
> >> This patch ensures suspend-to-disk works with Host Performance Booster.
> > What is "suspend-to-disk"?
>
> Hibernation, refer kernel config CONFIG_HIBERNATION i.e.
>
> echo disk > /sys/power/state
>
> > What power mode is used for that?
>
> Same as spm_lvl except ufshcd_wl_poweroff() naturally uses the same as
> shutdown i.e. POWERDOWN
If spm_lvl is SSU3 - the device maintains its RAM.
On SSU4 however, the RAM is powered down.
>
> >
> > Thanks,
> > Avri
> >
> >> Since the Host Perfomance Booster feature was added in v5.15, please
> >> consider this for v5.15 fixes.
> >>
> >>
> >> Adrian Hunter (1):
> >> scsi: ufs-pci: Force a full restore after suspend-to-disk
> >>
> >> drivers/scsi/ufs/ufshcd-pci.c | 31 ++++++++++++++++---------------
> >> 1 file changed, 16 insertions(+), 15 deletions(-)
> >>
> >>
> >> Regards
> >> Adrian
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH 1/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
2021-10-12 12:59 ` [PATCH 1/1] " Adrian Hunter
@ 2021-10-14 6:15 ` Avri Altman
2021-10-14 6:37 ` Adrian Hunter
2021-10-17 2:05 ` Martin K. Petersen
1 sibling, 1 reply; 9+ messages in thread
From: Avri Altman @ 2021-10-14 6:15 UTC (permalink / raw)
To: Adrian Hunter, Martin K . Petersen
Cc: James E . J . Bottomley, Bean Huo, 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.
It is perfectly fine for you to do that on your platform, if you choose so -
Hence my reviewed-by.
But the reasoning is a bit odd, because you already set SSU4 for your spm-lvl,
And on SSU3 the device does not dump its internal tables.
Thanks,
Avri
> 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>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
2021-10-14 6:15 ` Avri Altman
@ 2021-10-14 6:37 ` Adrian Hunter
2021-10-14 7:14 ` Avri Altman
0 siblings, 1 reply; 9+ messages in thread
From: Adrian Hunter @ 2021-10-14 6:37 UTC (permalink / raw)
To: Avri Altman, Martin K . Petersen
Cc: James E . J . Bottomley, Bean Huo, linux-scsi
On 14/10/2021 09:15, Avri Altman wrote:
>
>> 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.
> It is perfectly fine for you to do that on your platform, if you choose so -
> Hence my reviewed-by.
> But the reasoning is a bit odd, because you already set SSU4 for your spm-lvl,
> And on SSU3 the device does not dump its internal tables.
Hibernation flow is:
->freeze()
create memory image
->thaw()
write image
->poweroff()
time passes
someone presses the power button or something else activates the machine
kernel boots
detects restore image
read image
->freeze()
restore memory image
->restore()
It is up to ->restore() to ensure the device state matches the
memory state as it was when the hibernation image was made.
>
> Thanks,
> Avri
>
>> 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>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH 1/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
2021-10-14 6:37 ` Adrian Hunter
@ 2021-10-14 7:14 ` Avri Altman
0 siblings, 0 replies; 9+ messages in thread
From: Avri Altman @ 2021-10-14 7:14 UTC (permalink / raw)
To: Adrian Hunter, Martin K . Petersen
Cc: James E . J . Bottomley, Bean Huo, linux-scsi
> On 14/10/2021 09:15, Avri Altman wrote:
> >
> >> 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.
> > It is perfectly fine for you to do that on your platform, if you
> > choose so - Hence my reviewed-by.
> > But the reasoning is a bit odd, because you already set SSU4 for your
> > spm-lvl, And on SSU3 the device does not dump its internal tables.
>
> Hibernation flow is:
>
> ->freeze()
> create memory image
> ->thaw()
> write image
> ->poweroff()
>
> time passes
> someone presses the power button or something else activates the
> machine
>
> kernel boots
> detects restore image
> read image
> ->freeze()
> restore memory image
> ->restore()
>
> It is up to ->restore() to ensure the device state matches the memory state as it
> was when the hibernation image was made.
Oh, ok. I missed the poweroff part before.
Thanks,
Avri
>
> >
> > Thanks,
> > Avri
> >
> >> 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>
> >
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1] scsi: ufs-pci: Force a full restore after suspend-to-disk
2021-10-12 12:59 ` [PATCH 1/1] " Adrian Hunter
2021-10-14 6:15 ` Avri Altman
@ 2021-10-17 2:05 ` Martin K. Petersen
1 sibling, 0 replies; 9+ messages in thread
From: Martin K. Petersen @ 2021-10-17 2:05 UTC (permalink / raw)
To: Adrian Hunter
Cc: Martin K . Petersen, James E . J . Bottomley, Bean Huo, linux-scsi
Adrian,
> 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.
Applied to 5.16/scsi-staging, thanks!
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-10-17 2:05 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-12 12:59 [PATCH 0/1] scsi: ufs-pci: Force a full restore after suspend-to-disk Adrian Hunter
2021-10-12 12:59 ` [PATCH 1/1] " Adrian Hunter
2021-10-14 6:15 ` Avri Altman
2021-10-14 6:37 ` Adrian Hunter
2021-10-14 7:14 ` Avri Altman
2021-10-17 2:05 ` Martin K. Petersen
2021-10-13 10:46 ` [PATCH 0/1] " Avri Altman
2021-10-13 11:41 ` Adrian Hunter
2021-10-13 12:33 ` Avri Altman
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.