Linux Hibernation with sata driver

AYAN KUMAR HALDER ayankumarh at gmail.com
Sun Jun 1 14:10:17 EDT 2014


Hi,

I am working with Linux hibernation framework on ARM based custom SOC
which has SATA controller on PCI bus.

I see that when the system resumes from hibernation, the SATA
controller(drivers/ata/ahci.c) on PCI bus fails to come up. My
understanding is that the hibernation calls 'freeze' of all devices.
The SATA controller receives the power state event as PM_EVENT_FREEZE
( ie pdev->dev.power.power_state.event = PM_EVENT_FREEZE). Thus when
system restores the hibernation image, ahci_pci_device_resume gets
called in which ahci_pci_reset_controller/ahci_pci_init_controller
does not get called. So SATA controller fails to come up.

Please let me know if my understanding is correct or not. If so, then
in ahci_pci_device_resume() should we change the following
if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND)
to
if (pdev->dev.power.power_state.event == PM_EVENT_FREEZE)

In hibernation , as we power down the system, so I understand that the
sata controller need to be reset and re-initialized for proper
functioning.

Regards,
Ayan Kumar Halder



More information about the Kernelnewbies mailing list