Commit 7a62b17694e278b1cde659f85aa6149052baa811
Exists in
master
and in
7 other branches
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: pata_hpt366: no ATAPI DMA pata_hpt366: fix cable detection, libata: fix Seagate NCQ+FLUSH blacklist
Showing 2 changed files Side-by-side Diff
drivers/ata/libata-core.c
... | ... | @@ -4050,17 +4050,70 @@ |
4050 | 4050 | { "ST3160023AS", "3.42", ATA_HORKAGE_NONCQ }, |
4051 | 4051 | |
4052 | 4052 | /* Seagate NCQ + FLUSH CACHE firmware bug */ |
4053 | - { "ST31500341AS", "9JU138", ATA_HORKAGE_NONCQ | | |
4053 | + { "ST31500341AS", "SD15", ATA_HORKAGE_NONCQ | | |
4054 | 4054 | ATA_HORKAGE_FIRMWARE_WARN }, |
4055 | - { "ST31000333AS", "9FZ136", ATA_HORKAGE_NONCQ | | |
4055 | + { "ST31500341AS", "SD16", ATA_HORKAGE_NONCQ | | |
4056 | 4056 | ATA_HORKAGE_FIRMWARE_WARN }, |
4057 | - { "ST3640623AS", "9FZ164", ATA_HORKAGE_NONCQ | | |
4057 | + { "ST31500341AS", "SD17", ATA_HORKAGE_NONCQ | | |
4058 | 4058 | ATA_HORKAGE_FIRMWARE_WARN }, |
4059 | - { "ST3640323AS", "9FZ134", ATA_HORKAGE_NONCQ | | |
4059 | + { "ST31500341AS", "SD18", ATA_HORKAGE_NONCQ | | |
4060 | 4060 | ATA_HORKAGE_FIRMWARE_WARN }, |
4061 | - { "ST3320813AS", "9FZ182", ATA_HORKAGE_NONCQ | | |
4061 | + { "ST31500341AS", "SD19", ATA_HORKAGE_NONCQ | | |
4062 | 4062 | ATA_HORKAGE_FIRMWARE_WARN }, |
4063 | - { "ST3320613AS", "9FZ162", ATA_HORKAGE_NONCQ | | |
4063 | + | |
4064 | + { "ST31000333AS", "SD15", ATA_HORKAGE_NONCQ | | |
4065 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4066 | + { "ST31000333AS", "SD16", ATA_HORKAGE_NONCQ | | |
4067 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4068 | + { "ST31000333AS", "SD17", ATA_HORKAGE_NONCQ | | |
4069 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4070 | + { "ST31000333AS", "SD18", ATA_HORKAGE_NONCQ | | |
4071 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4072 | + { "ST31000333AS", "SD19", ATA_HORKAGE_NONCQ | | |
4073 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4074 | + | |
4075 | + { "ST3640623AS", "SD15", ATA_HORKAGE_NONCQ | | |
4076 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4077 | + { "ST3640623AS", "SD16", ATA_HORKAGE_NONCQ | | |
4078 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4079 | + { "ST3640623AS", "SD17", ATA_HORKAGE_NONCQ | | |
4080 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4081 | + { "ST3640623AS", "SD18", ATA_HORKAGE_NONCQ | | |
4082 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4083 | + { "ST3640623AS", "SD19", ATA_HORKAGE_NONCQ | | |
4084 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4085 | + | |
4086 | + { "ST3640323AS", "SD15", ATA_HORKAGE_NONCQ | | |
4087 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4088 | + { "ST3640323AS", "SD16", ATA_HORKAGE_NONCQ | | |
4089 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4090 | + { "ST3640323AS", "SD17", ATA_HORKAGE_NONCQ | | |
4091 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4092 | + { "ST3640323AS", "SD18", ATA_HORKAGE_NONCQ | | |
4093 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4094 | + { "ST3640323AS", "SD19", ATA_HORKAGE_NONCQ | | |
4095 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4096 | + | |
4097 | + { "ST3320813AS", "SD15", ATA_HORKAGE_NONCQ | | |
4098 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4099 | + { "ST3320813AS", "SD16", ATA_HORKAGE_NONCQ | | |
4100 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4101 | + { "ST3320813AS", "SD17", ATA_HORKAGE_NONCQ | | |
4102 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4103 | + { "ST3320813AS", "SD18", ATA_HORKAGE_NONCQ | | |
4104 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4105 | + { "ST3320813AS", "SD19", ATA_HORKAGE_NONCQ | | |
4106 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4107 | + | |
4108 | + { "ST3320613AS", "SD15", ATA_HORKAGE_NONCQ | | |
4109 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4110 | + { "ST3320613AS", "SD16", ATA_HORKAGE_NONCQ | | |
4111 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4112 | + { "ST3320613AS", "SD17", ATA_HORKAGE_NONCQ | | |
4113 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4114 | + { "ST3320613AS", "SD18", ATA_HORKAGE_NONCQ | | |
4115 | + ATA_HORKAGE_FIRMWARE_WARN }, | |
4116 | + { "ST3320613AS", "SD19", ATA_HORKAGE_NONCQ | | |
4064 | 4117 | ATA_HORKAGE_FIRMWARE_WARN }, |
4065 | 4118 | |
4066 | 4119 | /* Blacklist entries taken from Silicon Image 3124/3132 |
drivers/ata/pata_hpt366.c
... | ... | @@ -183,7 +183,9 @@ |
183 | 183 | mask &= ~(0xF8 << ATA_SHIFT_UDMA); |
184 | 184 | if (hpt_dma_blacklisted(adev, "UDMA4", bad_ata66_4)) |
185 | 185 | mask &= ~(0xF0 << ATA_SHIFT_UDMA); |
186 | - } | |
186 | + } else if (adev->class == ATA_DEV_ATAPI) | |
187 | + mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA); | |
188 | + | |
187 | 189 | return ata_bmdma_mode_filter(adev, mask); |
188 | 190 | } |
189 | 191 | |
190 | 192 | |
191 | 193 | |
192 | 194 | |
... | ... | @@ -211,11 +213,15 @@ |
211 | 213 | |
212 | 214 | static int hpt36x_cable_detect(struct ata_port *ap) |
213 | 215 | { |
214 | - u8 ata66; | |
215 | 216 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
217 | + u8 ata66; | |
216 | 218 | |
219 | + /* | |
220 | + * Each channel of pata_hpt366 occupies separate PCI function | |
221 | + * as the primary channel and bit1 indicates the cable type. | |
222 | + */ | |
217 | 223 | pci_read_config_byte(pdev, 0x5A, &ata66); |
218 | - if (ata66 & (1 << ap->port_no)) | |
224 | + if (ata66 & 2) | |
219 | 225 | return ATA_CBL_PATA40; |
220 | 226 | return ATA_CBL_PATA80; |
221 | 227 | } |