ata: ahci: a hotplug capable port is an external port
authorNiklas Cassel <cassel@kernel.org>
Tue, 6 Feb 2024 21:13:43 +0000 (22:13 +0100)
committerNiklas Cassel <cassel@kernel.org>
Fri, 9 Feb 2024 09:30:50 +0000 (10:30 +0100)
A hotplug capable port is an external port, so mark it as such.

We even say this ourselves in libata-scsi.c:
/* set scsi removable (RMB) bit per ata bit, or if the
 * AHCI port says it's external (Hotplug-capable, eSATA).
 */

This also matches the terminology used in AHCI 1.3.1
(the keyword to search for is "externally accessible").

Tested-by: Damien Le Moal <dlemoal@kernel.org>
Tested-by: Jian-Hong Pan <jhp@endlessos.org>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Niklas Cassel <cassel@kernel.org>
drivers/ata/ahci.c

index aa58ce6..4d3ec6d 100644 (file)
@@ -1648,9 +1648,10 @@ static void ahci_mark_external_port(struct ata_port *ap)
        void __iomem *port_mmio = ahci_port_base(ap);
        u32 tmp;
 
-       /* mark esata ports */
+       /* mark external ports (hotplug-capable, eSATA) */
        tmp = readl(port_mmio + PORT_CMD);
-       if ((tmp & PORT_CMD_ESP) && (hpriv->cap & HOST_CAP_SXS))
+       if (((tmp & PORT_CMD_ESP) && (hpriv->cap & HOST_CAP_SXS)) ||
+           (tmp & PORT_CMD_HPCP))
                ap->pflags |= ATA_PFLAG_EXTERNAL;
 }