diff options
| -rw-r--r-- | drivers/ide/pci/aec62xx.c | 51 |
1 files changed, 16 insertions, 35 deletions
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c index 7067df2590c3..99184be6a98c 100644 --- a/drivers/ide/pci/aec62xx.c +++ b/drivers/ide/pci/aec62xx.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/drivers/ide/pci/aec62xx.c Version 0.22 Apr 23, 2007 | 2 | * linux/drivers/ide/pci/aec62xx.c Version 0.23 May 23, 2007 |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org> |
| 5 | * Copyright (C) 2007 MontaVista Software, Inc. <source@mvista.com> | 5 | * Copyright (C) 2007 MontaVista Software, Inc. <source@mvista.com> |
| @@ -220,21 +220,18 @@ static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const ch | |||
| 220 | 220 | ||
| 221 | static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) | 221 | static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) |
| 222 | { | 222 | { |
| 223 | struct pci_dev *dev = hwif->pci_dev; | 223 | struct pci_dev *dev = hwif->pci_dev; |
| 224 | u8 reg54 = 0, mask = hwif->channel ? 0xf0 : 0x0f; | ||
| 225 | unsigned long flags; | ||
| 224 | 226 | ||
| 225 | hwif->autodma = 0; | ||
| 226 | hwif->tuneproc = &aec62xx_tune_drive; | 227 | hwif->tuneproc = &aec62xx_tune_drive; |
| 227 | hwif->speedproc = &aec62xx_tune_chipset; | 228 | hwif->speedproc = &aec62xx_tune_chipset; |
| 228 | 229 | ||
| 229 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) | 230 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF && hwif->mate) |
| 230 | hwif->serialized = hwif->channel; | 231 | hwif->mate->serialized = hwif->serialized = 1; |
| 231 | |||
| 232 | if (hwif->mate) | ||
| 233 | hwif->mate->serialized = hwif->serialized; | ||
| 234 | 232 | ||
| 235 | if (!hwif->dma_base) { | 233 | if (!hwif->dma_base) { |
| 236 | hwif->drives[0].autotune = 1; | 234 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; |
| 237 | hwif->drives[1].autotune = 1; | ||
| 238 | return; | 235 | return; |
| 239 | } | 236 | } |
| 240 | 237 | ||
| @@ -244,32 +241,21 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) | |||
| 244 | hwif->ide_dma_check = &aec62xx_config_drive_xfer_rate; | 241 | hwif->ide_dma_check = &aec62xx_config_drive_xfer_rate; |
| 245 | hwif->dma_lost_irq = &aec62xx_dma_lost_irq; | 242 | hwif->dma_lost_irq = &aec62xx_dma_lost_irq; |
| 246 | 243 | ||
| 247 | if (!noautodma) | ||
| 248 | hwif->autodma = 1; | ||
| 249 | hwif->drives[0].autodma = hwif->autodma; | ||
| 250 | hwif->drives[1].autodma = hwif->autodma; | ||
| 251 | } | ||
| 252 | |||
| 253 | static void __devinit init_dma_aec62xx(ide_hwif_t *hwif, unsigned long dmabase) | ||
| 254 | { | ||
| 255 | struct pci_dev *dev = hwif->pci_dev; | ||
| 256 | |||
| 257 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) { | 244 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) { |
| 258 | u8 reg54h = 0; | ||
| 259 | unsigned long flags; | ||
| 260 | |||
| 261 | spin_lock_irqsave(&ide_lock, flags); | 245 | spin_lock_irqsave(&ide_lock, flags); |
| 262 | pci_read_config_byte(dev, 0x54, ®54h); | 246 | pci_read_config_byte (dev, 0x54, ®54); |
| 263 | pci_write_config_byte(dev, 0x54, reg54h & ~(hwif->channel ? 0xF0 : 0x0F)); | 247 | pci_write_config_byte(dev, 0x54, (reg54 & ~mask)); |
| 264 | spin_unlock_irqrestore(&ide_lock, flags); | 248 | spin_unlock_irqrestore(&ide_lock, flags); |
| 265 | } else { | 249 | } else if (!hwif->udma_four) { |
| 266 | u8 ata66 = 0; | 250 | u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01; |
| 251 | |||
| 267 | pci_read_config_byte(hwif->pci_dev, 0x49, &ata66); | 252 | pci_read_config_byte(hwif->pci_dev, 0x49, &ata66); |
| 268 | if (!(hwif->udma_four)) | 253 | hwif->udma_four = (ata66 & mask) ? 0 : 1; |
| 269 | hwif->udma_four = (ata66&(hwif->channel?0x02:0x01))?0:1; | ||
| 270 | } | 254 | } |
| 271 | 255 | ||
| 272 | ide_setup_dma(hwif, dmabase, 8); | 256 | if (!noautodma) |
| 257 | hwif->autodma = 1; | ||
| 258 | hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma; | ||
| 273 | } | 259 | } |
| 274 | 260 | ||
| 275 | static int __devinit init_setup_aec62xx(struct pci_dev *dev, ide_pci_device_t *d) | 261 | static int __devinit init_setup_aec62xx(struct pci_dev *dev, ide_pci_device_t *d) |
| @@ -296,7 +282,6 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = { | |||
| 296 | .init_setup = init_setup_aec62xx, | 282 | .init_setup = init_setup_aec62xx, |
| 297 | .init_chipset = init_chipset_aec62xx, | 283 | .init_chipset = init_chipset_aec62xx, |
| 298 | .init_hwif = init_hwif_aec62xx, | 284 | .init_hwif = init_hwif_aec62xx, |
| 299 | .init_dma = init_dma_aec62xx, | ||
| 300 | .channels = 2, | 285 | .channels = 2, |
| 301 | .autodma = AUTODMA, | 286 | .autodma = AUTODMA, |
| 302 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, | 287 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, |
| @@ -307,7 +292,6 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = { | |||
| 307 | .init_setup = init_setup_aec62xx, | 292 | .init_setup = init_setup_aec62xx, |
| 308 | .init_chipset = init_chipset_aec62xx, | 293 | .init_chipset = init_chipset_aec62xx, |
| 309 | .init_hwif = init_hwif_aec62xx, | 294 | .init_hwif = init_hwif_aec62xx, |
| 310 | .init_dma = init_dma_aec62xx, | ||
| 311 | .channels = 2, | 295 | .channels = 2, |
| 312 | .autodma = NOAUTODMA, | 296 | .autodma = NOAUTODMA, |
| 313 | .bootable = OFF_BOARD, | 297 | .bootable = OFF_BOARD, |
| @@ -317,7 +301,6 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = { | |||
| 317 | .init_setup = init_setup_aec62xx, | 301 | .init_setup = init_setup_aec62xx, |
| 318 | .init_chipset = init_chipset_aec62xx, | 302 | .init_chipset = init_chipset_aec62xx, |
| 319 | .init_hwif = init_hwif_aec62xx, | 303 | .init_hwif = init_hwif_aec62xx, |
| 320 | .init_dma = init_dma_aec62xx, | ||
| 321 | .channels = 2, | 304 | .channels = 2, |
| 322 | .autodma = AUTODMA, | 305 | .autodma = AUTODMA, |
| 323 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, | 306 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, |
| @@ -328,7 +311,6 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = { | |||
| 328 | .init_setup = init_setup_aec6x80, | 311 | .init_setup = init_setup_aec6x80, |
| 329 | .init_chipset = init_chipset_aec62xx, | 312 | .init_chipset = init_chipset_aec62xx, |
| 330 | .init_hwif = init_hwif_aec62xx, | 313 | .init_hwif = init_hwif_aec62xx, |
| 331 | .init_dma = init_dma_aec62xx, | ||
| 332 | .channels = 2, | 314 | .channels = 2, |
| 333 | .autodma = AUTODMA, | 315 | .autodma = AUTODMA, |
| 334 | .bootable = OFF_BOARD, | 316 | .bootable = OFF_BOARD, |
| @@ -338,7 +320,6 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = { | |||
| 338 | .init_setup = init_setup_aec6x80, | 320 | .init_setup = init_setup_aec6x80, |
| 339 | .init_chipset = init_chipset_aec62xx, | 321 | .init_chipset = init_chipset_aec62xx, |
| 340 | .init_hwif = init_hwif_aec62xx, | 322 | .init_hwif = init_hwif_aec62xx, |
| 341 | .init_dma = init_dma_aec62xx, | ||
| 342 | .channels = 2, | 323 | .channels = 2, |
| 343 | .autodma = AUTODMA, | 324 | .autodma = AUTODMA, |
| 344 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, | 325 | .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, |
