Commit d99a9142 authored by Damien Le Moal's avatar Damien Le Moal Committed by Niklas Cassel
Browse files

ata: libata-core: Move device LPM quirk settings to ata_dev_config_lpm()



Move the various cases of setting the ATA_QUIRK_NOLPM quirk flag for a
device in ata_dev_configure() to the function ata_dev_config_lpm().
This allows having all LPM related settings in one place to facilitate
maintenance.

No functional changes.

Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
Reviewed-by: default avatarNiklas Cassel <cassel@kernel.org>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Link: https://lore.kernel.org/r/20250701125321.69496-3-dlemoal@kernel.org


Signed-off-by: default avatarNiklas Cassel <cassel@kernel.org>
parent d3601218
Loading
Loading
Loading
Loading
+26 −17
Original line number Diff line number Diff line
@@ -2798,6 +2798,32 @@ static void ata_dev_config_lpm(struct ata_device *dev)
	struct ata_port *ap = dev->link->ap;
	unsigned int err_mask;

	if (ap->flags & ATA_FLAG_NO_LPM) {
		/*
		 * When the port does not support LPM, we cannot support it on
		 * the device either.
		 */
		dev->quirks |= ATA_QUIRK_NOLPM;
	} else {
		/*
		 * Some WD SATA-1 drives have issues with LPM, turn on NOLPM for
		 * them.
		 */
		if ((dev->quirks & ATA_QUIRK_WD_BROKEN_LPM) &&
		    (dev->id[ATA_ID_SATA_CAPABILITY] & 0xe) == 0x2)
			dev->quirks |= ATA_QUIRK_NOLPM;

		/* ATI specific quirk */
		if ((dev->quirks & ATA_QUIRK_NO_LPM_ON_ATI) &&
		    ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI))
			dev->quirks |= ATA_QUIRK_NOLPM;
	}

	if (dev->quirks & ATA_QUIRK_NOLPM) {
		ata_dev_warn(dev, "LPM support broken, forcing max_power\n");
		ap->target_lpm_policy = ATA_LPM_MAX_POWER;
	}

	/*
	 * Device Initiated Power Management (DIPM) is normally disabled by
	 * default on a device. However, DIPM may have been enabled and that
@@ -2884,23 +2910,6 @@ int ata_dev_configure(struct ata_device *dev)
	if (rc)
		return rc;

	/* some WD SATA-1 drives have issues with LPM, turn on NOLPM for them */
	if ((dev->quirks & ATA_QUIRK_WD_BROKEN_LPM) &&
	    (id[ATA_ID_SATA_CAPABILITY] & 0xe) == 0x2)
		dev->quirks |= ATA_QUIRK_NOLPM;

	if (dev->quirks & ATA_QUIRK_NO_LPM_ON_ATI &&
	    ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI))
		dev->quirks |= ATA_QUIRK_NOLPM;

	if (ap->flags & ATA_FLAG_NO_LPM)
		dev->quirks |= ATA_QUIRK_NOLPM;

	if (dev->quirks & ATA_QUIRK_NOLPM) {
		ata_dev_warn(dev, "LPM support broken, forcing max_power\n");
		dev->link->ap->target_lpm_policy = ATA_LPM_MAX_POWER;
	}

	/* let ACPI work its magic */
	rc = ata_acpi_on_devcfg(dev);
	if (rc)