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

* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
libata: blacklist Seagate drives which time out FLUSH_CACHE when used with NCQ
[libata] pata_rb532_cf: fix signature of the xfer function
[libata] pata_rb532_cf: fix and rename register definitions
ata_piix: add borked Tecra M4 to broken suspend list

+47 -5
+15
drivers/ata/ata_piix.c
··· 1066 if (dmi_find_device(DMI_DEV_TYPE_OEM_STRING, oemstrs[i], NULL)) 1067 return 1; 1068 1069 return 0; 1070 } 1071
··· 1066 if (dmi_find_device(DMI_DEV_TYPE_OEM_STRING, oemstrs[i], NULL)) 1067 return 1; 1068 1069 + /* TECRA M4 sometimes forgets its identify and reports bogus 1070 + * DMI information. As the bogus information is a bit 1071 + * generic, match as many entries as possible. This manual 1072 + * matching is necessary because dmi_system_id.matches is 1073 + * limited to four entries. 1074 + */ 1075 + if (!strcmp(dmi_get_system_info(DMI_SYS_VENDOR), "TOSHIBA") && 1076 + !strcmp(dmi_get_system_info(DMI_PRODUCT_NAME), "000000") && 1077 + !strcmp(dmi_get_system_info(DMI_PRODUCT_VERSION), "000000") && 1078 + !strcmp(dmi_get_system_info(DMI_PRODUCT_SERIAL), "000000") && 1079 + !strcmp(dmi_get_system_info(DMI_BOARD_VENDOR), "TOSHIBA") && 1080 + !strcmp(dmi_get_system_info(DMI_BOARD_NAME), "Portable PC") && 1081 + !strcmp(dmi_get_system_info(DMI_BOARD_VERSION), "Version A0")) 1082 + return 1; 1083 + 1084 return 0; 1085 } 1086
+21
drivers/ata/libata-core.c
··· 2492 } 2493 } 2494 2495 return 0; 2496 2497 err_out_nosup: ··· 4048 { "Maxtor 7V300F0", "VA111630", ATA_HORKAGE_NONCQ }, 4049 { "ST380817AS", "3.42", ATA_HORKAGE_NONCQ }, 4050 { "ST3160023AS", "3.42", ATA_HORKAGE_NONCQ }, 4051 4052 /* Blacklist entries taken from Silicon Image 3124/3132 4053 Windows driver .inf file - also several Linux problem reports */
··· 2492 } 2493 } 2494 2495 + if ((dev->horkage & ATA_HORKAGE_FIRMWARE_WARN) && print_info) { 2496 + ata_dev_printk(dev, KERN_WARNING, "WARNING: device requires " 2497 + "firmware update to be fully functional.\n"); 2498 + ata_dev_printk(dev, KERN_WARNING, " contact the vendor " 2499 + "or visit http://ata.wiki.kernel.org.\n"); 2500 + } 2501 + 2502 return 0; 2503 2504 err_out_nosup: ··· 4041 { "Maxtor 7V300F0", "VA111630", ATA_HORKAGE_NONCQ }, 4042 { "ST380817AS", "3.42", ATA_HORKAGE_NONCQ }, 4043 { "ST3160023AS", "3.42", ATA_HORKAGE_NONCQ }, 4044 + 4045 + /* Seagate NCQ + FLUSH CACHE firmware bug */ 4046 + { "ST31500341AS", "9JU138", ATA_HORKAGE_NONCQ | 4047 + ATA_HORKAGE_FIRMWARE_WARN }, 4048 + { "ST31000333AS", "9FZ136", ATA_HORKAGE_NONCQ | 4049 + ATA_HORKAGE_FIRMWARE_WARN }, 4050 + { "ST3640623AS", "9FZ164", ATA_HORKAGE_NONCQ | 4051 + ATA_HORKAGE_FIRMWARE_WARN }, 4052 + { "ST3640323AS", "9FZ134", ATA_HORKAGE_NONCQ | 4053 + ATA_HORKAGE_FIRMWARE_WARN }, 4054 + { "ST3320813AS", "9FZ182", ATA_HORKAGE_NONCQ | 4055 + ATA_HORKAGE_FIRMWARE_WARN }, 4056 + { "ST3320613AS", "9FZ162", ATA_HORKAGE_NONCQ | 4057 + ATA_HORKAGE_FIRMWARE_WARN }, 4058 4059 /* Blacklist entries taken from Silicon Image 3124/3132 4060 Windows driver .inf file - also several Linux problem reports */
+10 -5
drivers/ata/pata_rb532_cf.c
··· 39 #define RB500_CF_MAXPORTS 1 40 #define RB500_CF_IO_DELAY 400 41 42 - #define RB500_CF_REG_CMD 0x0800 43 #define RB500_CF_REG_CTRL 0x080E 44 - #define RB500_CF_REG_DATA 0x0C00 45 46 struct rb532_cf_info { 47 void __iomem *iobase; ··· 74 rb532_pata_finish_io(ap); 75 } 76 77 - static void rb532_pata_data_xfer(struct ata_device *adev, unsigned char *buf, 78 unsigned int buflen, int write_data) 79 { 80 struct ata_port *ap = adev->link->ap; 81 void __iomem *ioaddr = ap->ioaddr.data_addr; 82 83 if (write_data) { 84 for (; buflen > 0; buflen--, buf++) ··· 90 } 91 92 rb532_pata_finish_io(adev->link->ap); 93 } 94 95 static void rb532_pata_freeze(struct ata_port *ap) ··· 150 ap->pio_mask = 0x1f; /* PIO4 */ 151 ap->flags = ATA_FLAG_NO_LEGACY | ATA_FLAG_MMIO; 152 153 - ap->ioaddr.cmd_addr = info->iobase + RB500_CF_REG_CMD; 154 ap->ioaddr.ctl_addr = info->iobase + RB500_CF_REG_CTRL; 155 ap->ioaddr.altstatus_addr = info->iobase + RB500_CF_REG_CTRL; 156 157 ata_sff_std_ports(&ap->ioaddr); 158 159 - ap->ioaddr.data_addr = info->iobase + RB500_CF_REG_DATA; 160 } 161 162 static __devinit int rb532_pata_driver_probe(struct platform_device *pdev)
··· 39 #define RB500_CF_MAXPORTS 1 40 #define RB500_CF_IO_DELAY 400 41 42 + #define RB500_CF_REG_BASE 0x0800 43 + #define RB500_CF_REG_ERR 0x080D 44 #define RB500_CF_REG_CTRL 0x080E 45 + /* 32bit buffered data register offset */ 46 + #define RB500_CF_REG_DBUF32 0x0C00 47 48 struct rb532_cf_info { 49 void __iomem *iobase; ··· 72 rb532_pata_finish_io(ap); 73 } 74 75 + static unsigned int rb532_pata_data_xfer(struct ata_device *adev, unsigned char *buf, 76 unsigned int buflen, int write_data) 77 { 78 struct ata_port *ap = adev->link->ap; 79 void __iomem *ioaddr = ap->ioaddr.data_addr; 80 + int retlen = buflen; 81 82 if (write_data) { 83 for (; buflen > 0; buflen--, buf++) ··· 87 } 88 89 rb532_pata_finish_io(adev->link->ap); 90 + return retlen; 91 } 92 93 static void rb532_pata_freeze(struct ata_port *ap) ··· 146 ap->pio_mask = 0x1f; /* PIO4 */ 147 ap->flags = ATA_FLAG_NO_LEGACY | ATA_FLAG_MMIO; 148 149 + ap->ioaddr.cmd_addr = info->iobase + RB500_CF_REG_BASE; 150 ap->ioaddr.ctl_addr = info->iobase + RB500_CF_REG_CTRL; 151 ap->ioaddr.altstatus_addr = info->iobase + RB500_CF_REG_CTRL; 152 153 ata_sff_std_ports(&ap->ioaddr); 154 155 + ap->ioaddr.data_addr = info->iobase + RB500_CF_REG_DBUF32; 156 + ap->ioaddr.error_addr = info->iobase + RB500_CF_REG_ERR; 157 } 158 159 static __devinit int rb532_pata_driver_probe(struct platform_device *pdev)
+1
include/linux/libata.h
··· 375 ATA_HORKAGE_BRIDGE_OK = (1 << 10), /* no bridge limits */ 376 ATA_HORKAGE_ATAPI_MOD16_DMA = (1 << 11), /* use ATAPI DMA for commands 377 not multiple of 16 bytes */ 378 379 /* DMA mask for user DMA control: User visible values; DO NOT 380 renumber */
··· 375 ATA_HORKAGE_BRIDGE_OK = (1 << 10), /* no bridge limits */ 376 ATA_HORKAGE_ATAPI_MOD16_DMA = (1 << 11), /* use ATAPI DMA for commands 377 not multiple of 16 bytes */ 378 + ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firwmare update warning */ 379 380 /* DMA mask for user DMA control: User visible values; DO NOT 381 renumber */