diff options
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/pata_amd.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c index b3f60fdb02d0..3293cf9a7eb5 100644 --- a/drivers/ata/pata_amd.c +++ b/drivers/ata/pata_amd.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <linux/libata.h> | 25 | #include <linux/libata.h> |
26 | 26 | ||
27 | #define DRV_NAME "pata_amd" | 27 | #define DRV_NAME "pata_amd" |
28 | #define DRV_VERSION "0.2.2" | 28 | #define DRV_VERSION "0.2.3" |
29 | 29 | ||
30 | /** | 30 | /** |
31 | * timing_setup - shared timing computation and load | 31 | * timing_setup - shared timing computation and load |
@@ -253,11 +253,22 @@ static void amd133_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
253 | 253 | ||
254 | static int nv_pre_reset(struct ata_port *ap) { | 254 | static int nv_pre_reset(struct ata_port *ap) { |
255 | static const u8 bitmask[2] = {0x03, 0xC0}; | 255 | static const u8 bitmask[2] = {0x03, 0xC0}; |
256 | static const struct pci_bits nv_enable_bits[] = { | ||
257 | { 0x50, 1, 0x02, 0x02 }, | ||
258 | { 0x50, 1, 0x01, 0x01 } | ||
259 | }; | ||
256 | 260 | ||
257 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 261 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
258 | u8 ata66; | 262 | u8 ata66; |
259 | u16 udma; | 263 | u16 udma; |
260 | 264 | ||
265 | if (!pci_test_config_bits(pdev, &nv_enable_bits[ap->port_no])) { | ||
266 | ata_port_disable(ap); | ||
267 | printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id); | ||
268 | return 0; | ||
269 | } | ||
270 | |||
271 | |||
261 | pci_read_config_byte(pdev, 0x52, &ata66); | 272 | pci_read_config_byte(pdev, 0x52, &ata66); |
262 | if (ata66 & bitmask[ap->port_no]) | 273 | if (ata66 & bitmask[ap->port_no]) |
263 | ap->cbl = ATA_CBL_PATA80; | 274 | ap->cbl = ATA_CBL_PATA80; |