The patch titled libata: add 40pin "short" cable support, honour drive side speed detection has been added to the -mm tree. Its filename is libata-add-40pin-short-cable-support-honour-drive.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: libata: add 40pin "short" cable support, honour drive side speed detection From: Alan Cox <alan@xxxxxxxxxxxxxxxxxxx> Signed-off-by: Alan Cox <alan@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- drivers/ata/ata_piix.c | 29 ++++++++++++++++++++++++++++- drivers/ata/libata-core.c | 7 +++++++ drivers/ata/pata_ali.c | 2 +- include/linux/ata.h | 14 ++++++++++++-- 4 files changed, 48 insertions(+), 4 deletions(-) diff -puN drivers/ata/ata_piix.c~libata-add-40pin-short-cable-support-honour-drive drivers/ata/ata_piix.c --- a/drivers/ata/ata_piix.c~libata-add-40pin-short-cable-support-honour-drive +++ a/drivers/ata/ata_piix.c @@ -93,7 +93,7 @@ #include <linux/libata.h> #define DRV_NAME "ata_piix" -#define DRV_VERSION "2.00ac6" +#define DRV_VERSION "2.00ac7" enum { PIIX_IOCFG = 0x54, /* IDE I/O configuration register */ @@ -560,6 +560,23 @@ MODULE_LICENSE("GPL"); MODULE_DEVICE_TABLE(pci, piix_pci_tbl); MODULE_VERSION(DRV_VERSION); +struct ich_laptop { + u16 device; + u16 subvendor; + u16 subdevice; +}; + +/* + * List of laptops that use short cables rather than 80 wire + */ + +static const struct ich_laptop ich_laptop[] = { + /* devid, subvendor, subdev */ + { 0x27DF, 0x0005, 0x0280 }, /* ICH7 on Acer 5602WLMi */ + /* end marker */ + { 0, } +}; + /** * piix_pata_cbl_detect - Probe host controller cable detect info * @ap: Port for which cable detect info is desired @@ -574,12 +591,22 @@ MODULE_VERSION(DRV_VERSION); static void ich_pata_cbl_detect(struct ata_port *ap) { struct pci_dev *pdev = to_pci_dev(ap->host_set->dev); + const struct ich_laptop *lap = &ich_laptop[0]; u8 tmp, mask; /* no 80c support in host controller? */ if ((ap->udma_mask & ~ATA_UDMA_MASK_40C) == 0) goto cbl40; + /* Check for specials - Acer Aspire 5602WLMi */ + while (lap->device) { + if (lap->device == pdev->device && + lap->subvendor == pdev->subsystem_vendor && + lap->subdevice == pdev->subsystem_device) + return ATA_CBL_PATA40_SHORT; + lap++; + } + /* check BIOS cable detect results */ mask = ap->port_no == 0 ? PIIX_80C_PRI : PIIX_80C_SEC; pci_read_config_byte(pdev, PIIX_IOCFG, &tmp); diff -puN drivers/ata/libata-core.c~libata-add-40pin-short-cable-support-honour-drive drivers/ata/libata-core.c --- a/drivers/ata/libata-core.c~libata-add-40pin-short-cable-support-honour-drive +++ a/drivers/ata/libata-core.c @@ -3092,6 +3092,13 @@ static void ata_dev_xfermask(struct ata_ */ if (ap->cbl == ATA_CBL_PATA40) xfer_mask &= ~(0xF8 << ATA_SHIFT_UDMA); + /* Apply drive side cable rule. Unknown or 80 pin cables reported + * host side are checked drive side as well. Cases where we know a + * 40wire cable is used safely for 80 are not checked here. + */ + if (ata_drive_40wire(dev->id) && (ap->cbl == ATA_CBL_PATA_UNK || ap->cbl == ATA_CBL_PATA80)) + xfer_mask &= ~(0xF8 << ATA_SHIFT_UDMA); + xfer_mask &= ata_pack_xfermask(dev->pio_mask, dev->mwdma_mask, dev->udma_mask); diff -puN drivers/ata/pata_ali.c~libata-add-40pin-short-cable-support-honour-drive drivers/ata/pata_ali.c --- a/drivers/ata/pata_ali.c~libata-add-40pin-short-cable-support-honour-drive +++ a/drivers/ata/pata_ali.c @@ -78,7 +78,7 @@ static int ali_c2_cable_detect(struct at implement the detect logic */ if (ali_cable_override(pdev)) - return ATA_CBL_PATA80; + return ATA_CBL_PATA40_SHORT; /* Host view cable detect 0x4A bit 0 primary bit 1 secondary Bit set for 40 pin */ diff -puN include/linux/ata.h~libata-add-40pin-short-cable-support-honour-drive include/linux/ata.h --- a/include/linux/ata.h~libata-add-40pin-short-cable-support-honour-drive +++ a/include/linux/ata.h @@ -200,8 +200,9 @@ enum { ATA_CBL_NONE = 0, ATA_CBL_PATA40 = 1, ATA_CBL_PATA80 = 2, - ATA_CBL_PATA_UNK = 3, - ATA_CBL_SATA = 4, + ATA_CBL_PATA40_SHORT = 3, /* 40 wire cable to high UDMA spec */ + ATA_CBL_PATA_UNK = 4, + ATA_CBL_SATA = 5, /* SATA Status and Control Registers */ SCR_STATUS = 0, @@ -342,6 +343,15 @@ static inline int ata_id_is_cfa(const u1 return 0; } +static inline int ata_drive_40wire(const u16 *dev_id) +{ + if (ata_id_major_version(dev_id) >= 5 && ata_id_is_sata(dev_id)) + return 0; /* SATA */ + if (dev_id[93] & 0x4000) + return 0; /* 80 wire */ + return 1; +} + static inline int atapi_cdb_len(const u16 *dev_id) { u16 tmp = dev_id[0] & 0x3; _ Patches currently in -mm which might be from alan@xxxxxxxxxxxxxxxxxxx are origin.patch tty-remove-bogus-call-to-cdev_del.patch tty-layer-comment-the-locking-assumptions-and-functions.patch fix-tty-layer-dos-and-comment-relevant-code.patch git-libata-all.patch libata-add-40pin-short-cable-support-honour-drive.patch 1-of-2-jmicron-driver.patch 1-of-2-jmicron-driver-hard_port_no-fix.patch 2-of-2-jmicron-driver-plumbing-and-quirk.patch non-libata-driver-for-jmicron-devices.patch via-pata-controller-xfer-fixes.patch megaraid-gcc-41-warning-fix.patch voyager-tty-locking.patch edac-new-opteron-athlon64-memory-controller-driver.patch edac-new-opteron-athlon64-memory-controller-driver-tidy.patch sanitize-3c589_cs.patch make-prot_write-imply-prot_read.patch sgiioc4-fixup-use-of-mmio-ops.patch remove-unused-tty_struct-variable.patch there-is-no-devfs-there-has-never-been-a-devfs-we-have.patch tty-locking-on-resize.patch ahci-ati-sb600-sata-support-for-various-modes.patch atiixp-ati-sb600-ide-support-for-various-modes.patch dquot-add-proper-locking-when-using-current-signal-tty.patch tty-trivial-kzalloc-opportunity.patch tty-lock-ticogwinsz.patch tty-stop-the-tty-vanishing-under-procfs-access.patch exit-fix-crash-case.patch tty-make-termios_sem-a-mutex.patch tty-make-termios_sem-a-mutex-fix.patch support-piping-into-commands-in-proc-sys-kernel-core_pattern.patch ide-claim-extra-dma-ports-regardless-of-channel.patch ide-always-release-dma-engine.patch ide-error-handling-fixes.patch ide-hpt3xxn-clocking-fixes.patch ide-fix-hpt37x-timing-tables.patch ide-optimize-hpt37x-timing-tables.patch ide-fix-hpt3xx-hotswap-support.patch ide-fix-the-case-of-multiple-hpt3xx-chips-present.patch ide-hpt3xx-fix-pci-clock-detection.patch ide-hpt3xx-fix-pci-clock-detection-fix-2.patch piix-fix-82371mx-enablebits.patch piix-remove-check-for-broken-mw-dma-mode-0.patch piix-slc90e66-pio-mode-fallback-fix.patch make-number-of-ide-interfaces-configurable.patch ide_dma_speed-fixes.patch hpt3xx-rework-rate-filtering.patch hpt3xx-rework-rate-filtering-tidy.patch hpt3xx-print-the-real-chip-name-at-startup.patch hpt3xx-switch-to-using-pci_get_slot.patch hpt3xx-cache-channels-mcr-address.patch hpt3x7-merge-speedproc-handlers.patch hpt370-clean-up-dma-timeout-handling.patch enable-cdrom-dma-access-with-pdc20265_old.patch ide-fix-revision-comparison-in-ide_in_drive_list.patch ide-backport-piix-fixes-from-libata-into-the-legacy-driver.patch hpt3xx-init-code-rewrite.patch move-ide-to-unmaintained-drop-reference-to-old-git-tree.patch drivers-ide-cleanups.patch ide-remove-dma_base2-field-from-ide_hwif_t.patch ide-reprogram-disk-pio-timings-on-resume.patch asus-mv-ide-device-ids.patch ide-support-for-via-8237a-southbridge.patch config_pm=n-slim-drivers-ide-pci-sc1200c.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html