On Tue, Jun 18, 2024 at 05:28:29PM +0200, Niklas Cassel wrote: > LPM consists of HIPM (host initiated power management) and DIPM > (device initiated power management). > > ata_eh_set_lpm() will only enable HIPM if both the HBA and the device > supports it. > > However, DIPM will be enabled as long as the device supports it. > The HBA will later reject the device's request to enter a power state > that it does not support (Slumber/Partial/DevSleep) (DevSleep is never > initiated by the device). > > For a HBA that doesn't support any LPM states, simply don't set a LPM > policy such that all the HIPM/DIPM probing/enabling will be skipped. > > Not enabling HIPM or DIPM in the first place is safer than relying on > the device following the AHCI specification and respecting the NAK. > (There are comments in the code that some devices misbehave when > receiving a NAK.) > > Performing this check in ahci_update_initial_lpm_policy() also has the > advantage that a HBA that doesn't support any LPM states will take the > exact same code paths as a port that is external/hot plug capable. > > Side note: the port in ata_port_dbg() has not been given a unique id yet, > but this is not overly important as the debug print is disabled unless > explicitly enabled using dynamic debug. A follow-up series will make sure > that the unique id assignment will be done earlier. For now, the important > thing is that the function returns before setting the LPM policy. > > Fixes: 7627a0edef54 ("ata: ahci: Drop low power policy board type") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Niklas Cassel <cassel@xxxxxxxxxx> Reviewed-by: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx>