aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-04-26 16:25:22 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-04-26 16:25:22 -0400
commitf629b38beddf2ff8bc3fda1754bbd6cc7d3acc03 (patch)
tree0e5c4b222c2df6aa4fab5dd1bf5bc2e936a47979 /drivers
parent63158d5c217e2e62665ae9b10d203bd7da817108 (diff)
au1xxx-ide: fix MWDMA support
Always use "fast" MWDMA support and remove dma_{black,white}_list (they were based on completely bogus ->ide_dma_check implementation which didn't set neither the host controller timings nor the device for the desired transfer mode). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ide/mips/au1xxx-ide.c49
1 files changed, 2 insertions, 47 deletions
diff --git a/drivers/ide/mips/au1xxx-ide.c b/drivers/ide/mips/au1xxx-ide.c
index 7179d4953211..d2e926efd3cc 100644
--- a/drivers/ide/mips/au1xxx-ide.c
+++ b/drivers/ide/mips/au1xxx-ide.c
@@ -47,7 +47,6 @@
47#define IDE_AU1XXX_BURSTMODE 1 47#define IDE_AU1XXX_BURSTMODE 1
48 48
49static _auide_hwif auide_hwif; 49static _auide_hwif auide_hwif;
50static int dbdma_init_done;
51 50
52static int auide_ddma_init(_auide_hwif *auide); 51static int auide_ddma_init(_auide_hwif *auide);
53 52
@@ -315,35 +314,6 @@ static int auide_dma_setup(ide_drive_t *drive)
315 return 0; 314 return 0;
316} 315}
317 316
318static u8 auide_mdma_filter(ide_drive_t *drive)
319{
320 /*
321 * FIXME: ->white_list and ->black_list are based on completely bogus
322 * ->ide_dma_check implementation which didn't set neither the host
323 * controller timings nor the device for the desired transfer mode.
324 *
325 * They should be either removed or 0x00 MWDMA mask should be
326 * returned for devices on the ->black_list.
327 */
328
329 if (dbdma_init_done == 0) {
330 auide_hwif.white_list = ide_in_drive_list(drive->id,
331 dma_white_list);
332 auide_hwif.black_list = ide_in_drive_list(drive->id,
333 dma_black_list);
334 auide_hwif.drive = drive;
335 auide_ddma_init(&auide_hwif);
336 dbdma_init_done = 1;
337 }
338
339 /* Is the drive in our DMA black list? */
340 if (auide_hwif.black_list)
341 printk(KERN_WARNING "%s: Disabling DMA for %s (blacklisted)\n",
342 drive->name, drive->id->model);
343
344 return drive->hwif->mwdma_mask;
345}
346
347static int auide_dma_test_irq(ide_drive_t *drive) 317static int auide_dma_test_irq(ide_drive_t *drive)
348{ 318{
349 if (drive->waiting_for_dma == 0) 319 if (drive->waiting_for_dma == 0)
@@ -420,17 +390,8 @@ static int auide_ddma_init(_auide_hwif *auide) {
420 390
421 dev_id = AU1XXX_ATA_DDMA_REQ; 391 dev_id = AU1XXX_ATA_DDMA_REQ;
422 392
423 if (auide->white_list || auide->black_list) { 393 tsize = 8; /* 1 */
424 tsize = 8; 394 devwidth = 32; /* 16 */
425 devwidth = 32;
426 }
427 else {
428 tsize = 1;
429 devwidth = 16;
430
431 printk(KERN_ERR "au1xxx-ide: %s is not on ide driver whitelist.\n",auide_hwif.drive->id->model);
432 printk(KERN_ERR " please read 'Documentation/mips/AU1xxx_IDE.README'");
433 }
434 395
435#ifdef IDE_AU1XXX_BURSTMODE 396#ifdef IDE_AU1XXX_BURSTMODE
436 flags = DEV_FLAGS_SYNC | DEV_FLAGS_BURSTABLE; 397 flags = DEV_FLAGS_SYNC | DEV_FLAGS_BURSTABLE;
@@ -546,9 +507,6 @@ static void auide_setup_ports(hw_regs_t *hw, _auide_hwif *ahwif)
546static const struct ide_port_ops au1xxx_port_ops = { 507static const struct ide_port_ops au1xxx_port_ops = {
547 .set_pio_mode = au1xxx_set_pio_mode, 508 .set_pio_mode = au1xxx_set_pio_mode,
548 .set_dma_mode = auide_set_dma_mode, 509 .set_dma_mode = auide_set_dma_mode,
549#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
550 .mdma_filter = auide_mdma_filter,
551#endif
552}; 510};
553 511
554static const struct ide_port_info au1xxx_port_info = { 512static const struct ide_port_info au1xxx_port_info = {
@@ -648,10 +606,7 @@ static int au_ide_probe(struct device *dev)
648 auide_hwif.hwif = hwif; 606 auide_hwif.hwif = hwif;
649 hwif->hwif_data = &auide_hwif; 607 hwif->hwif_data = &auide_hwif;
650 608
651#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA
652 auide_ddma_init(&auide_hwif); 609 auide_ddma_init(&auide_hwif);
653 dbdma_init_done = 1;
654#endif
655 610
656 idx[0] = hwif->index; 611 idx[0] = hwif->index;
657 612