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 1066 if (dmi_find_device(DMI_DEV_TYPE_OEM_STRING, oemstrs[i], NULL)) 1067 1067 return 1; 1068 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 + 1069 1084 return 0; 1070 1085 } 1071 1086
+21
drivers/ata/libata-core.c
··· 2492 2492 } 2493 2493 } 2494 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 + 2495 2502 return 0; 2496 2503 2497 2504 err_out_nosup: ··· 4048 4041 { "Maxtor 7V300F0", "VA111630", ATA_HORKAGE_NONCQ }, 4049 4042 { "ST380817AS", "3.42", ATA_HORKAGE_NONCQ }, 4050 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 }, 4051 4058 4052 4059 /* Blacklist entries taken from Silicon Image 3124/3132 4053 4060 Windows driver .inf file - also several Linux problem reports */
+10 -5
drivers/ata/pata_rb532_cf.c
··· 39 39 #define RB500_CF_MAXPORTS 1 40 40 #define RB500_CF_IO_DELAY 400 41 41 42 - #define RB500_CF_REG_CMD 0x0800 42 + #define RB500_CF_REG_BASE 0x0800 43 + #define RB500_CF_REG_ERR 0x080D 43 44 #define RB500_CF_REG_CTRL 0x080E 44 - #define RB500_CF_REG_DATA 0x0C00 45 + /* 32bit buffered data register offset */ 46 + #define RB500_CF_REG_DBUF32 0x0C00 45 47 46 48 struct rb532_cf_info { 47 49 void __iomem *iobase; ··· 74 72 rb532_pata_finish_io(ap); 75 73 } 76 74 77 - static void rb532_pata_data_xfer(struct ata_device *adev, unsigned char *buf, 75 + static unsigned int rb532_pata_data_xfer(struct ata_device *adev, unsigned char *buf, 78 76 unsigned int buflen, int write_data) 79 77 { 80 78 struct ata_port *ap = adev->link->ap; 81 79 void __iomem *ioaddr = ap->ioaddr.data_addr; 80 + int retlen = buflen; 82 81 83 82 if (write_data) { 84 83 for (; buflen > 0; buflen--, buf++) ··· 90 87 } 91 88 92 89 rb532_pata_finish_io(adev->link->ap); 90 + return retlen; 93 91 } 94 92 95 93 static void rb532_pata_freeze(struct ata_port *ap) ··· 150 146 ap->pio_mask = 0x1f; /* PIO4 */ 151 147 ap->flags = ATA_FLAG_NO_LEGACY | ATA_FLAG_MMIO; 152 148 153 - ap->ioaddr.cmd_addr = info->iobase + RB500_CF_REG_CMD; 149 + ap->ioaddr.cmd_addr = info->iobase + RB500_CF_REG_BASE; 154 150 ap->ioaddr.ctl_addr = info->iobase + RB500_CF_REG_CTRL; 155 151 ap->ioaddr.altstatus_addr = info->iobase + RB500_CF_REG_CTRL; 156 152 157 153 ata_sff_std_ports(&ap->ioaddr); 158 154 159 - ap->ioaddr.data_addr = info->iobase + RB500_CF_REG_DATA; 155 + ap->ioaddr.data_addr = info->iobase + RB500_CF_REG_DBUF32; 156 + ap->ioaddr.error_addr = info->iobase + RB500_CF_REG_ERR; 160 157 } 161 158 162 159 static __devinit int rb532_pata_driver_probe(struct platform_device *pdev)
+1
include/linux/libata.h
··· 375 375 ATA_HORKAGE_BRIDGE_OK = (1 << 10), /* no bridge limits */ 376 376 ATA_HORKAGE_ATAPI_MOD16_DMA = (1 << 11), /* use ATAPI DMA for commands 377 377 not multiple of 16 bytes */ 378 + ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firwmare update warning */ 378 379 379 380 /* DMA mask for user DMA control: User visible values; DO NOT 380 381 renumber */