diff options
| -rw-r--r-- | drivers/ata/libata-core.c | 65 | ||||
| -rw-r--r-- | drivers/ata/pata_hpt366.c | 12 |
2 files changed, 68 insertions, 9 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 5e2eb740df4..bc6695e3c84 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -4050,17 +4050,70 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { | |||
| 4050 | { "ST3160023AS", "3.42", ATA_HORKAGE_NONCQ }, | 4050 | { "ST3160023AS", "3.42", ATA_HORKAGE_NONCQ }, |
| 4051 | 4051 | ||
| 4052 | /* Seagate NCQ + FLUSH CACHE firmware bug */ | 4052 | /* Seagate NCQ + FLUSH CACHE firmware bug */ |
| 4053 | { "ST31500341AS", "9JU138", ATA_HORKAGE_NONCQ | | 4053 | { "ST31500341AS", "SD15", ATA_HORKAGE_NONCQ | |
| 4054 | ATA_HORKAGE_FIRMWARE_WARN }, | 4054 | ATA_HORKAGE_FIRMWARE_WARN }, |
| 4055 | { "ST31000333AS", "9FZ136", ATA_HORKAGE_NONCQ | | 4055 | { "ST31500341AS", "SD16", ATA_HORKAGE_NONCQ | |
| 4056 | ATA_HORKAGE_FIRMWARE_WARN }, | 4056 | ATA_HORKAGE_FIRMWARE_WARN }, |
| 4057 | { "ST3640623AS", "9FZ164", ATA_HORKAGE_NONCQ | | 4057 | { "ST31500341AS", "SD17", ATA_HORKAGE_NONCQ | |
| 4058 | ATA_HORKAGE_FIRMWARE_WARN }, | 4058 | ATA_HORKAGE_FIRMWARE_WARN }, |
| 4059 | { "ST3640323AS", "9FZ134", ATA_HORKAGE_NONCQ | | 4059 | { "ST31500341AS", "SD18", ATA_HORKAGE_NONCQ | |
| 4060 | ATA_HORKAGE_FIRMWARE_WARN }, | 4060 | ATA_HORKAGE_FIRMWARE_WARN }, |
| 4061 | { "ST3320813AS", "9FZ182", ATA_HORKAGE_NONCQ | | 4061 | { "ST31500341AS", "SD19", ATA_HORKAGE_NONCQ | |
| 4062 | ATA_HORKAGE_FIRMWARE_WARN }, | 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 | ATA_HORKAGE_FIRMWARE_WARN }, | 4117 | ATA_HORKAGE_FIRMWARE_WARN }, |
| 4065 | 4118 | ||
| 4066 | /* Blacklist entries taken from Silicon Image 3124/3132 | 4119 | /* Blacklist entries taken from Silicon Image 3124/3132 |
diff --git a/drivers/ata/pata_hpt366.c b/drivers/ata/pata_hpt366.c index a098ba8eaab..e0c4f05d7d5 100644 --- a/drivers/ata/pata_hpt366.c +++ b/drivers/ata/pata_hpt366.c | |||
| @@ -183,7 +183,9 @@ static unsigned long hpt366_filter(struct ata_device *adev, unsigned long mask) | |||
| 183 | mask &= ~(0xF8 << ATA_SHIFT_UDMA); | 183 | mask &= ~(0xF8 << ATA_SHIFT_UDMA); |
| 184 | if (hpt_dma_blacklisted(adev, "UDMA4", bad_ata66_4)) | 184 | if (hpt_dma_blacklisted(adev, "UDMA4", bad_ata66_4)) |
| 185 | mask &= ~(0xF0 << ATA_SHIFT_UDMA); | 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 | return ata_bmdma_mode_filter(adev, mask); | 189 | return ata_bmdma_mode_filter(adev, mask); |
| 188 | } | 190 | } |
| 189 | 191 | ||
| @@ -211,11 +213,15 @@ static u32 hpt36x_find_mode(struct ata_port *ap, int speed) | |||
| 211 | 213 | ||
| 212 | static int hpt36x_cable_detect(struct ata_port *ap) | 214 | static int hpt36x_cable_detect(struct ata_port *ap) |
| 213 | { | 215 | { |
| 214 | u8 ata66; | ||
| 215 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 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 | pci_read_config_byte(pdev, 0x5A, &ata66); | 223 | pci_read_config_byte(pdev, 0x5A, &ata66); |
| 218 | if (ata66 & (1 << ap->port_no)) | 224 | if (ata66 & 2) |
| 219 | return ATA_CBL_PATA40; | 225 | return ATA_CBL_PATA40; |
| 220 | return ATA_CBL_PATA80; | 226 | return ATA_CBL_PATA80; |
| 221 | } | 227 | } |
