• subhashj@codeaurora.org's avatar
    scsi: ufs: optimize system suspend handling · 0b257734
    subhashj@codeaurora.org authored
    Consider following sequence of events:
    1. UFS is runtime suspended, link_state = Hibern8, device_state = sleep
    2. System goes into system suspend, ufshcd_system_suspend() brings both
       link and device to active state and then puts the device in Power_Down
       state and link in OFF state.
    3. System resumes at some later point in time, ufshcd_system_resume()
       doesn't do anything as UFS state is runtime suspended. Note that link
       is still on OFF state and device is in Power_Down state.
    4. Now system again goes into suspend without any UFS accesses before it.
       ufshcd_system_suspend() again brings both link and device to active
       state and then puts the device in Power_Down state and link if OFF
       state. But it's unnecessary to bring the link & device in active state
       as both link and device are already in desired low power states. This
       change fixes this issue by adding proper state checks in
       ufshcd_system_suspend().
    Reviewed-by: default avatarGilad Broner <gbroner@codeaurora.org>
    Signed-off-by: default avatarSubhash Jadavani <subhashj@codeaurora.org>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    0b257734
ufshcd.c 178 KB