• Danesh Petigara's avatar
    drivers: ata: wake port before DMA stop for ALPM · fb329633
    Danesh Petigara authored
    The AHCI driver code stops and starts port DMA engines at will
    without considering the power state of the particular port. The
    AHCI specification isn't very clear on how to handle this scenario,
    leaving implementation open to interpretation.
    
    Broadcom's STB SATA host controller is unable to handle port DMA
    controller restarts when the port in question is in low power mode.
    When a port enters partial or slumber mode, its PHY is powered down.
    When a controller restart is requested, the controller's internal
    state machine expects the PHY to be brought back up by software which
    never happens in this case, resulting in failures.
    
    To avoid this situation, logic is added to manually wake up the port
    just before its DMA engine is stopped, if the port happens to be in
    a low power state. HBA initiated power management ensures that the port
    eventually returns to its configured low power state, when the link is
    idle (as per the conditions listed in the spec). A new host flag is also
    added to ensure this logic is only exercised for hosts with the above
    limitation.
    
    tj: Formatting changes.
    Signed-off-by: default avatarDanesh Petigara <dpetigara@broadcom.com>
    Reviewed-by: default avatarMarkus Mayer <mmayer@broadcom.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    fb329633
ahci_brcmstb.c 10.2 KB