[PATCH] libata-sff: Don't scan disabled ports when checking for legacy mode.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



libata-sff.c checks for legacy mode by testing if both primary
and secondary ports on a controller are in legacy mode and selects
legacy if either one is. However on some southbridge chips (e.g
AMD SB600/SB700) the secondary port is not wired, and when it is 
disabled by setting the disable bit in the PCI header it appears
as a fixed legacy port.
Prevent incorrect detection by not testing ports that are marked
as 'dummy'

Signed-off-by: Darren Stevens <darren@xxxxxxxxxxxxxxxx>
---

diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 051b615..05f688a 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -2429,9 +2429,16 @@ int ata_pci_sff_activate_host(struct ata_host *host,
    if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
        u8 tmp8, mask;
 
-       /* TODO: What if one channel is in native mode ... */
+       /*
+        * ATA spec says we should use legacy mode when one
+        * port is in legacy mode, but disabled ports on some
+        * PCI hosts appear as fixed legacy ports, e.g SB600/700
+        * on which the secondary port is not wired, so
+        * ignore ports that we've marked as 'dummy' during
+        * this check
+        */
        pci_read_config_byte(pdev, PCI_CLASS_PROG, &tmp8);
-       mask = (1 << 2) | (1 << 0);
+       mask = (! ata_port_is_dummy(host->ports[1]) << 2) | (!
ata_port_is_dummy(host->ports[0]) << 0);
        if ((tmp8 & mask) != mask)
            legacy_mode = 1;
    }

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux