Commit b73357a1 authored by Sagar Biradar's avatar Sagar Biradar Committed by Martin K. Petersen

scsi: smartpqi: Avoid drive spin-down during suspend

On certain systems (based on PCI IDs), when the OS transitions the system
into the suspend (S3) state, the BMIC flush cache command will indicate a
system RESTART instead of SUSPEND.

This avoids drive spin-down.

Link: https://lore.kernel.org/r/164375211330.440833.7203813692110347698.stgit@brunhilda.pdev.netReviewed-by: default avatarKevin Barnett <kevin.barnett@microchip.com>
Reviewed-by: default avatarScott Benesh <scott.benesh@microchip.com>
Reviewed-by: default avatarScott Teel <scott.teel@microchip.com>
Signed-off-by: default avatarSagar Biradar <sagar.biradar@microchip.com>
Signed-off-by: default avatarDon Brace <don.brace@microchip.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 42dc0426
...@@ -8976,10 +8976,19 @@ static void pqi_process_module_params(void) ...@@ -8976,10 +8976,19 @@ static void pqi_process_module_params(void)
pqi_process_lockup_action_param(); pqi_process_lockup_action_param();
} }
static inline enum bmic_flush_cache_shutdown_event pqi_get_flush_cache_shutdown_event(struct pci_dev *pci_dev)
{
if (pci_dev->subsystem_vendor == PCI_VENDOR_ID_ADAPTEC2 && pci_dev->subsystem_device == 0x1304)
return RESTART;
return SUSPEND;
}
static __maybe_unused int pqi_suspend(struct pci_dev *pci_dev, pm_message_t state) static __maybe_unused int pqi_suspend(struct pci_dev *pci_dev, pm_message_t state)
{ {
struct pqi_ctrl_info *ctrl_info; struct pqi_ctrl_info *ctrl_info;
enum bmic_flush_cache_shutdown_event shutdown_event;
shutdown_event = pqi_get_flush_cache_shutdown_event(pci_dev);
ctrl_info = pci_get_drvdata(pci_dev); ctrl_info = pci_get_drvdata(pci_dev);
pqi_wait_until_ofa_finished(ctrl_info); pqi_wait_until_ofa_finished(ctrl_info);
...@@ -8989,7 +8998,7 @@ static __maybe_unused int pqi_suspend(struct pci_dev *pci_dev, pm_message_t stat ...@@ -8989,7 +8998,7 @@ static __maybe_unused int pqi_suspend(struct pci_dev *pci_dev, pm_message_t stat
pqi_ctrl_block_device_reset(ctrl_info); pqi_ctrl_block_device_reset(ctrl_info);
pqi_ctrl_block_requests(ctrl_info); pqi_ctrl_block_requests(ctrl_info);
pqi_ctrl_wait_until_quiesced(ctrl_info); pqi_ctrl_wait_until_quiesced(ctrl_info);
pqi_flush_cache(ctrl_info, SUSPEND); pqi_flush_cache(ctrl_info, shutdown_event);
pqi_stop_heartbeat_timer(ctrl_info); pqi_stop_heartbeat_timer(ctrl_info);
pqi_crash_if_pending_command(ctrl_info); pqi_crash_if_pending_command(ctrl_info);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment