• Stanley Chu's avatar
    scsi: ufs: Fix WriteBooster flush during runtime suspend · 51dd905b
    Stanley Chu authored
    Currently UFS host driver promises VCC supply if UFS device needs to do
    WriteBooster flush during runtime suspend.
    
    However the UFS specification mentions:
    
    "While the flushing operation is in progress, the device is in Active power
    mode."
    
    Therefore UFS host driver needs to promise more: Keep UFS device as "Active
    power mode", otherwise UFS device shall not do any flush if device enters
    Sleep or PowerDown power mode.  Similarly, the same promises shall be
    applied if device needs urgent BKOP during runtime suspend.
    
    Fix this by not changing device power mode if WriteBooster flush or urgent
    BKOP is required in ufshcd_suspend().
    
    Now, if device finishes its job but is not resumed for a very long time,
    system will have unnecessary power drain because VCC is still supplied. A
    method to re-check the threshold of keeping VCC supply is required to fix
    the power drain. However, the threshold re-check needs to re-activate the
    link first because the decision depends on the latest device status.
    
    Also introduce a delayed work to force runtime resume after a certain delay
    during runtime suspend. This makes threshold re-check happen natually in
    the entry of the next runtime-suspend. The device can continue its
    WriteBooster flush or urgent BKOP jobs soon after resumed if device has no
    upcoming requests and link enters hibern8 state either by Auto-Hibern8 or
    hibern8 during clk-gating scheme. This solution not only prevents power
    drain but also makes as much use of time as possible for device's
    background jobs.
    
    Link: https://lore.kernel.org/r/20200522083212.4008-5-stanley.chu@mediatek.comReviewed-by: default avatarAsutosh Das <asutoshd@codeaurora.org>
    Signed-off-by: default avatarStanley Chu <stanley.chu@mediatek.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    51dd905b
ufs.h 17.9 KB