Commit 7a62b17694e278b1cde659f85aa6149052baa811

Authored by Linus Torvalds

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 }