Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev

* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev:
[libata] Bump driver versions
ata_piix: implement IOCFG bit18 quirk
libata: implement BROKEN_HPA horkage and apply it to affected drives
sata_promise: FastTrack TX4200 is a second-generation chip
pata_marvell: Add more identifiers
ata_piix: add Satellite U200 to broken suspend list
ata: add ATA_MWDMA* and ATA_SWDMA* defines
ata_piix: IDE mode SATA patch for Intel Tolapai
libata-core: Allow translation setting to fail

+133 -37
+1 -1
drivers/ata/ata_generic.c
··· 26 26 #include <linux/libata.h> 27 27 28 28 #define DRV_NAME "ata_generic" 29 - #define DRV_VERSION "0.2.12" 29 + #define DRV_VERSION "0.2.13" 30 30 31 31 /* 32 32 * A generic parallel ATA driver using libata
+71 -1
drivers/ata/ata_piix.c
··· 94 94 #include <linux/dmi.h> 95 95 96 96 #define DRV_NAME "ata_piix" 97 - #define DRV_VERSION "2.11" 97 + #define DRV_VERSION "2.12" 98 98 99 99 enum { 100 100 PIIX_IOCFG = 0x54, /* IDE I/O configuration register */ ··· 130 130 ich6m_sata_ahci = 8, 131 131 ich8_sata_ahci = 9, 132 132 piix_pata_mwdma = 10, /* PIIX3 MWDMA only */ 133 + tolapai_sata_ahci = 11, 133 134 134 135 /* constants for mapping table */ 135 136 P0 = 0, /* port 0 */ ··· 254 253 { 0x8086, 0x292d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 255 254 /* SATA Controller IDE (ICH9M) */ 256 255 { 0x8086, 0x292e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 256 + /* SATA Controller IDE (Tolapai) */ 257 + { 0x8086, 0x5028, PCI_ANY_ID, PCI_ANY_ID, 0, 0, tolapai_sata_ahci }, 257 258 258 259 { } /* terminate list */ 259 260 }; ··· 444 441 }, 445 442 }; 446 443 444 + static const struct piix_map_db tolapai_map_db = { 445 + .mask = 0x3, 446 + .port_enable = 0x3, 447 + .map = { 448 + /* PM PS SM SS MAP */ 449 + { P0, NA, P1, NA }, /* 00b */ 450 + { RV, RV, RV, RV }, /* 01b */ 451 + { RV, RV, RV, RV }, /* 10b */ 452 + { RV, RV, RV, RV }, 453 + }, 454 + }; 455 + 447 456 static const struct piix_map_db *piix_map_db_table[] = { 448 457 [ich5_sata] = &ich5_map_db, 449 458 [ich6_sata] = &ich6_map_db, 450 459 [ich6_sata_ahci] = &ich6_map_db, 451 460 [ich6m_sata_ahci] = &ich6m_map_db, 452 461 [ich8_sata_ahci] = &ich8_map_db, 462 + [tolapai_sata_ahci] = &tolapai_map_db, 453 463 }; 454 464 455 465 static struct ata_port_info piix_port_info[] = { ··· 575 559 .pio_mask = 0x1f, /* pio0-4 */ 576 560 .mwdma_mask = 0x06, /* mwdma1-2 ?? CHECK 0 should be ok but slow */ 577 561 .port_ops = &piix_pata_ops, 562 + }, 563 + 564 + /* tolapai_sata_ahci: 11: */ 565 + { 566 + .sht = &piix_sht, 567 + .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR | 568 + PIIX_FLAG_AHCI, 569 + .pio_mask = 0x1f, /* pio0-4 */ 570 + .mwdma_mask = 0x07, /* mwdma0-2 */ 571 + .udma_mask = ATA_UDMA6, 572 + .port_ops = &piix_sata_ops, 578 573 }, 579 574 }; 580 575 ··· 935 908 }, 936 909 }, 937 910 { 911 + .ident = "Satellite U200", 912 + .matches = { 913 + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), 914 + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite U200"), 915 + }, 916 + }, 917 + { 938 918 .ident = "Satellite U205", 939 919 .matches = { 940 920 DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), ··· 1173 1139 hpriv->map = map; 1174 1140 } 1175 1141 1142 + static void piix_iocfg_bit18_quirk(struct pci_dev *pdev) 1143 + { 1144 + static struct dmi_system_id sysids[] = { 1145 + { 1146 + /* Clevo M570U sets IOCFG bit 18 if the cdrom 1147 + * isn't used to boot the system which 1148 + * disables the channel. 1149 + */ 1150 + .ident = "M570U", 1151 + .matches = { 1152 + DMI_MATCH(DMI_SYS_VENDOR, "Clevo Co."), 1153 + DMI_MATCH(DMI_PRODUCT_NAME, "M570U"), 1154 + }, 1155 + }, 1156 + }; 1157 + u32 iocfg; 1158 + 1159 + if (!dmi_check_system(sysids)) 1160 + return; 1161 + 1162 + /* The datasheet says that bit 18 is NOOP but certain systems 1163 + * seem to use it to disable a channel. Clear the bit on the 1164 + * affected systems. 1165 + */ 1166 + pci_read_config_dword(pdev, PIIX_IOCFG, &iocfg); 1167 + if (iocfg & (1 << 18)) { 1168 + dev_printk(KERN_INFO, &pdev->dev, 1169 + "applying IOCFG bit18 quirk\n"); 1170 + iocfg &= ~(1 << 18); 1171 + pci_write_config_dword(pdev, PIIX_IOCFG, iocfg); 1172 + } 1173 + } 1174 + 1176 1175 /** 1177 1176 * piix_init_one - Register PIIX ATA PCI device with kernel services 1178 1177 * @pdev: PCI device to register ··· 1266 1199 piix_init_pcs(pdev, port_info, 1267 1200 piix_map_db_table[ent->driver_data]); 1268 1201 } 1202 + 1203 + /* apply IOCFG bit18 quirk */ 1204 + piix_iocfg_bit18_quirk(pdev); 1269 1205 1270 1206 /* On ICH5, some BIOSen disable the interrupt using the 1271 1207 * PCI_COMMAND_INTX_DISABLE bit added in PCI 2.3.
+13 -3
drivers/ata/libata-core.c
··· 1911 1911 dev->flags |= ATA_DFLAG_FLUSH_EXT; 1912 1912 } 1913 1913 1914 - if (ata_id_hpa_enabled(dev->id)) 1915 - dev->n_sectors = ata_hpa_resize(dev); 1914 + if (!(dev->horkage & ATA_HORKAGE_BROKEN_HPA) && 1915 + ata_id_hpa_enabled(dev->id)) 1916 + dev->n_sectors = ata_hpa_resize(dev); 1916 1917 1917 1918 /* config NCQ */ 1918 1919 ata_dev_config_ncq(dev, ncq_desc, sizeof(ncq_desc)); ··· 3796 3795 { "ST9160821AS", "3.CLF", ATA_HORKAGE_NONCQ, }, 3797 3796 { "SAMSUNG HD401LJ", "ZZ100-15", ATA_HORKAGE_NONCQ, }, 3798 3797 3799 - /* Devices with NCQ limits */ 3798 + /* devices which puke on READ_NATIVE_MAX */ 3799 + { "HDS724040KLSA80", "KFAOA20N", ATA_HORKAGE_BROKEN_HPA, }, 3800 + { "WDC WD3200JD-00KLB0", "WD-WCAMR1130137", ATA_HORKAGE_BROKEN_HPA }, 3801 + { "WDC WD2500JD-00HBB0", "WD-WMAL71490727", ATA_HORKAGE_BROKEN_HPA }, 3802 + { "MAXTOR 6L080L4", "A93.0500", ATA_HORKAGE_BROKEN_HPA }, 3800 3803 3801 3804 /* End Marker */ 3802 3805 { } ··· 3990 3985 tf.device |= (heads - 1) & 0x0f; /* max head = num. of heads - 1 */ 3991 3986 3992 3987 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0); 3988 + /* A clean abort indicates an original or just out of spec drive 3989 + and we should continue as we issue the setup based on the 3990 + drive reported working geometry */ 3991 + if (err_mask == AC_ERR_DEV && (tf.feature & ATA_ABORTED)) 3992 + err_mask = 0; 3993 3993 3994 3994 DPRINTK("EXIT, err_mask=%x\n", err_mask); 3995 3995 return err_mask;
+1 -1
drivers/ata/pata_ali.c
··· 34 34 #include <linux/dmi.h> 35 35 36 36 #define DRV_NAME "pata_ali" 37 - #define DRV_VERSION "0.7.4" 37 + #define DRV_VERSION "0.7.5" 38 38 39 39 /* 40 40 * Cable special cases
+1 -1
drivers/ata/pata_amd.c
··· 25 25 #include <linux/libata.h> 26 26 27 27 #define DRV_NAME "pata_amd" 28 - #define DRV_VERSION "0.3.8" 28 + #define DRV_VERSION "0.3.9" 29 29 30 30 /** 31 31 * timing_setup - shared timing computation and load
+1 -1
drivers/ata/pata_atiixp.c
··· 22 22 #include <linux/libata.h> 23 23 24 24 #define DRV_NAME "pata_atiixp" 25 - #define DRV_VERSION "0.4.5" 25 + #define DRV_VERSION "0.4.6" 26 26 27 27 enum { 28 28 ATIIXP_IDE_PIO_TIMING = 0x40,
+1 -1
drivers/ata/pata_cs5520.c
··· 41 41 #include <linux/libata.h> 42 42 43 43 #define DRV_NAME "pata_cs5520" 44 - #define DRV_VERSION "0.6.5" 44 + #define DRV_VERSION "0.6.6" 45 45 46 46 struct pio_clocks 47 47 {
+1 -1
drivers/ata/pata_cs5530.c
··· 35 35 #include <linux/dmi.h> 36 36 37 37 #define DRV_NAME "pata_cs5530" 38 - #define DRV_VERSION "0.7.3" 38 + #define DRV_VERSION "0.7.4" 39 39 40 40 static void __iomem *cs5530_port_base(struct ata_port *ap) 41 41 {
+1 -1
drivers/ata/pata_isapnp.c
··· 17 17 #include <linux/libata.h> 18 18 19 19 #define DRV_NAME "pata_isapnp" 20 - #define DRV_VERSION "0.2.1" 20 + #define DRV_VERSION "0.2.2" 21 21 22 22 static struct scsi_host_template isapnp_sht = { 23 23 .module = THIS_MODULE,
+1 -1
drivers/ata/pata_it821x.c
··· 80 80 81 81 82 82 #define DRV_NAME "pata_it821x" 83 - #define DRV_VERSION "0.3.7" 83 + #define DRV_VERSION "0.3.8" 84 84 85 85 struct it821x_dev 86 86 {
+2
drivers/ata/pata_marvell.c
··· 192 192 193 193 static const struct pci_device_id marvell_pci_tbl[] = { 194 194 { PCI_DEVICE(0x11AB, 0x6101), }, 195 + { PCI_DEVICE(0x11AB, 0x6121), }, 196 + { PCI_DEVICE(0x11AB, 0x6123), }, 195 197 { PCI_DEVICE(0x11AB, 0x6145), }, 196 198 { } /* terminate list */ 197 199 };
+1 -1
drivers/ata/pata_mpc52xx.c
··· 24 24 25 25 26 26 #define DRV_NAME "mpc52xx_ata" 27 - #define DRV_VERSION "0.1.0ac2" 27 + #define DRV_VERSION "0.1.2" 28 28 29 29 30 30 /* Private structures used by the driver */
+1 -1
drivers/ata/pata_pcmcia.c
··· 42 42 43 43 44 44 #define DRV_NAME "pata_pcmcia" 45 - #define DRV_VERSION "0.3.1" 45 + #define DRV_VERSION "0.3.2" 46 46 47 47 /* 48 48 * Private data structure to glue stuff together
+1 -1
drivers/ata/pata_pdc2027x.c
··· 35 35 #include <linux/libata.h> 36 36 37 37 #define DRV_NAME "pata_pdc2027x" 38 - #define DRV_VERSION "0.9" 38 + #define DRV_VERSION "1.0" 39 39 #undef PDC_DEBUG 40 40 41 41 #ifdef PDC_DEBUG
+1 -1
drivers/ata/pata_platform.c
··· 22 22 #include <linux/pata_platform.h> 23 23 24 24 #define DRV_NAME "pata_platform" 25 - #define DRV_VERSION "1.0" 25 + #define DRV_VERSION "1.1" 26 26 27 27 static int pio_mask = 1; 28 28
+1 -1
drivers/ata/pata_sc1200.c
··· 40 40 #include <linux/libata.h> 41 41 42 42 #define DRV_NAME "sc1200" 43 - #define DRV_VERSION "0.2.5" 43 + #define DRV_VERSION "0.2.6" 44 44 45 45 #define SC1200_REV_A 0x00 46 46 #define SC1200_REV_B1 0x01
+1 -1
drivers/ata/pata_scc.c
··· 43 43 #include <linux/libata.h> 44 44 45 45 #define DRV_NAME "pata_scc" 46 - #define DRV_VERSION "0.2" 46 + #define DRV_VERSION "0.3" 47 47 48 48 #define PCI_DEVICE_ID_TOSHIBA_SCC_ATA 0x01b4 49 49
+1 -1
drivers/ata/pata_serverworks.c
··· 41 41 #include <linux/libata.h> 42 42 43 43 #define DRV_NAME "pata_serverworks" 44 - #define DRV_VERSION "0.4.1" 44 + #define DRV_VERSION "0.4.2" 45 45 46 46 #define SVWKS_CSB5_REVISION_NEW 0x92 /* min PCI_REVISION_ID for UDMA5 (A2.0) */ 47 47 #define SVWKS_CSB6_REVISION 0xa0 /* min PCI_REVISION_ID for UDMA4 (A1.0) */
+1 -1
drivers/ata/pata_sil680.c
··· 33 33 #include <linux/libata.h> 34 34 35 35 #define DRV_NAME "pata_sil680" 36 - #define DRV_VERSION "0.4.6" 36 + #define DRV_VERSION "0.4.7" 37 37 38 38 #define SIL680_MMIO_BAR 5 39 39
+1 -1
drivers/ata/pata_sl82c105.c
··· 26 26 #include <linux/libata.h> 27 27 28 28 #define DRV_NAME "pata_sl82c105" 29 - #define DRV_VERSION "0.3.1" 29 + #define DRV_VERSION "0.3.2" 30 30 31 31 enum { 32 32 /*
+1 -1
drivers/ata/pdc_adma.c
··· 44 44 #include <linux/libata.h> 45 45 46 46 #define DRV_NAME "pdc_adma" 47 - #define DRV_VERSION "0.06" 47 + #define DRV_VERSION "1.0" 48 48 49 49 /* macro to calculate base address for ATA regs */ 50 50 #define ADMA_ATA_REGS(base,port_no) ((base) + ((port_no) * 0x40))
+1 -1
drivers/ata/sata_inic162x.c
··· 28 28 #include <scsi/scsi_device.h> 29 29 30 30 #define DRV_NAME "sata_inic162x" 31 - #define DRV_VERSION "0.2" 31 + #define DRV_VERSION "0.3" 32 32 33 33 enum { 34 34 MMIO_BAR = 5,
+1 -1
drivers/ata/sata_mv.c
··· 72 72 #include <linux/libata.h> 73 73 74 74 #define DRV_NAME "sata_mv" 75 - #define DRV_VERSION "0.81" 75 + #define DRV_VERSION "1.0" 76 76 77 77 enum { 78 78 /* BAR's are enumerated in terms of pci_resource_start() terms */
+1 -1
drivers/ata/sata_nv.c
··· 49 49 #include <linux/libata.h> 50 50 51 51 #define DRV_NAME "sata_nv" 52 - #define DRV_VERSION "3.4" 52 + #define DRV_VERSION "3.5" 53 53 54 54 #define NV_ADMA_DMA_BOUNDARY 0xffffffffUL 55 55
+3 -3
drivers/ata/sata_promise.c
··· 45 45 #include "sata_promise.h" 46 46 47 47 #define DRV_NAME "sata_promise" 48 - #define DRV_VERSION "2.09" 48 + #define DRV_VERSION "2.10" 49 49 50 50 enum { 51 51 PDC_MAX_PORTS = 4, ··· 328 328 329 329 { PCI_VDEVICE(PROMISE, 0x3318), board_20319 }, 330 330 { PCI_VDEVICE(PROMISE, 0x3319), board_20319 }, 331 - { PCI_VDEVICE(PROMISE, 0x3515), board_20319 }, 332 - { PCI_VDEVICE(PROMISE, 0x3519), board_20319 }, 331 + { PCI_VDEVICE(PROMISE, 0x3515), board_40518 }, 332 + { PCI_VDEVICE(PROMISE, 0x3519), board_40518 }, 333 333 { PCI_VDEVICE(PROMISE, 0x3d17), board_40518 }, 334 334 { PCI_VDEVICE(PROMISE, 0x3d18), board_40518 }, 335 335
+1 -1
drivers/ata/sata_qstor.c
··· 39 39 #include <linux/libata.h> 40 40 41 41 #define DRV_NAME "sata_qstor" 42 - #define DRV_VERSION "0.08" 42 + #define DRV_VERSION "0.09" 43 43 44 44 enum { 45 45 QS_MMIO_BAR = 4,
+1 -1
drivers/ata/sata_sil.c
··· 46 46 #include <linux/libata.h> 47 47 48 48 #define DRV_NAME "sata_sil" 49 - #define DRV_VERSION "2.2" 49 + #define DRV_VERSION "2.3" 50 50 51 51 enum { 52 52 SIL_MMIO_BAR = 5,
+1 -1
drivers/ata/sata_sil24.c
··· 30 30 #include <linux/libata.h> 31 31 32 32 #define DRV_NAME "sata_sil24" 33 - #define DRV_VERSION "0.9" 33 + #define DRV_VERSION "1.0" 34 34 35 35 /* 36 36 * Port request block (PRB) 32 bytes
+1 -1
drivers/ata/sata_sis.c
··· 43 43 #include "sis.h" 44 44 45 45 #define DRV_NAME "sata_sis" 46 - #define DRV_VERSION "0.8" 46 + #define DRV_VERSION "1.0" 47 47 48 48 enum { 49 49 sis_180 = 0,
+1 -1
drivers/ata/sata_svw.c
··· 53 53 #endif /* CONFIG_PPC_OF */ 54 54 55 55 #define DRV_NAME "sata_svw" 56 - #define DRV_VERSION "2.2" 56 + #define DRV_VERSION "2.3" 57 57 58 58 enum { 59 59 /* ap->flags bits */
+1 -1
drivers/ata/sata_sx4.c
··· 92 92 #include "sata_promise.h" 93 93 94 94 #define DRV_NAME "sata_sx4" 95 - #define DRV_VERSION "0.11" 95 + #define DRV_VERSION "0.12" 96 96 97 97 98 98 enum {
+1 -1
drivers/ata/sata_uli.c
··· 36 36 #include <linux/libata.h> 37 37 38 38 #define DRV_NAME "sata_uli" 39 - #define DRV_VERSION "1.2" 39 + #define DRV_VERSION "1.3" 40 40 41 41 enum { 42 42 uli_5289 = 0,
+1 -1
drivers/ata/sata_via.c
··· 46 46 #include <linux/libata.h> 47 47 48 48 #define DRV_NAME "sata_via" 49 - #define DRV_VERSION "2.2" 49 + #define DRV_VERSION "2.3" 50 50 51 51 enum board_ids_enum { 52 52 vt6420,
+1 -1
drivers/ata/sata_vsc.c
··· 47 47 #include <linux/libata.h> 48 48 49 49 #define DRV_NAME "sata_vsc" 50 - #define DRV_VERSION "2.2" 50 + #define DRV_VERSION "2.3" 51 51 52 52 enum { 53 53 VSC_MMIO_BAR = 0,
+13
include/linux/ata.h
··· 73 73 ATA_PIO5 = ATA_PIO4 | (1 << 5), 74 74 ATA_PIO6 = ATA_PIO5 | (1 << 6), 75 75 76 + ATA_SWDMA0 = (1 << 0), 77 + ATA_SWDMA1 = ATA_SWDMA0 | (1 << 1), 78 + ATA_SWDMA2 = ATA_SWDMA1 | (1 << 2), 79 + 80 + ATA_SWDMA2_ONLY = (1 << 2), 81 + 82 + ATA_MWDMA0 = (1 << 0), 83 + ATA_MWDMA1 = ATA_MWDMA0 | (1 << 1), 84 + ATA_MWDMA2 = ATA_MWDMA1 | (1 << 2), 85 + 86 + ATA_MWDMA12_ONLY = (1 << 1) | (1 << 2), 87 + ATA_MWDMA2_ONLY = (1 << 2), 88 + 76 89 ATA_UDMA0 = (1 << 0), 77 90 ATA_UDMA1 = ATA_UDMA0 | (1 << 1), 78 91 ATA_UDMA2 = ATA_UDMA1 | (1 << 2),
+1
include/linux/libata.h
··· 303 303 ATA_HORKAGE_NODMA = (1 << 1), /* DMA problems */ 304 304 ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */ 305 305 ATA_HORKAGE_MAX_SEC_128 = (1 << 3), /* Limit max sects to 128 */ 306 + ATA_HORKAGE_BROKEN_HPA = (1 << 4), /* Broken HPA */ 306 307 }; 307 308 308 309 enum hsm_task_states {