@@ -3316,6 +3316,7 @@ static int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy,
3316
3316
struct ata_eh_context * ehc = & link -> eh_context ;
3317
3317
struct ata_device * dev , * link_dev = NULL , * lpm_dev = NULL ;
3318
3318
enum ata_lpm_policy old_policy = link -> lpm_policy ;
3319
+ bool no_dipm = ap -> flags & ATA_FLAG_NO_DIPM ;
3319
3320
unsigned int hints = ATA_LPM_EMPTY | ATA_LPM_HIPM ;
3320
3321
unsigned int err_mask ;
3321
3322
int rc ;
@@ -3332,7 +3333,7 @@ static int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy,
3332
3333
*/
3333
3334
ata_for_each_dev (dev , link , ENABLED ) {
3334
3335
bool hipm = ata_id_has_hipm (dev -> id );
3335
- bool dipm = ata_id_has_dipm (dev -> id );
3336
+ bool dipm = ata_id_has_dipm (dev -> id ) && ! no_dipm ;
3336
3337
3337
3338
/* find the first enabled and LPM enabled devices */
3338
3339
if (!link_dev )
@@ -3389,7 +3390,8 @@ static int ata_eh_set_lpm(struct ata_link *link, enum ata_lpm_policy policy,
3389
3390
3390
3391
/* host config updated, enable DIPM if transitioning to MIN_POWER */
3391
3392
ata_for_each_dev (dev , link , ENABLED ) {
3392
- if (policy == ATA_LPM_MIN_POWER && ata_id_has_dipm (dev -> id )) {
3393
+ if (policy == ATA_LPM_MIN_POWER && !no_dipm &&
3394
+ ata_id_has_dipm (dev -> id )) {
3393
3395
err_mask = ata_dev_set_feature (dev ,
3394
3396
SETFEATURES_SATA_ENABLE , SATA_DIPM );
3395
3397
if (err_mask && err_mask != AC_ERR_DEV ) {
0 commit comments