pdc202xx_old: fix resetproc() method
pdc202xx_reset() calls pdc202xx_reset_host() twice, for both channels, while that function actually twiddles the single, shared software reset bit -- the net effect is a duplicated reset and horrendous 4 second delay happening not only on a channel reset but also when dma_lost_irq() and dma_clear() methods are called. Fold pdc202xx_reset_host() into pdc202xx_reset(), fix printk(), and move it before the actual reset... Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
521a415c9f
commit
669165daad
1 changed files with 5 additions and 14 deletions
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (C) 1998-2002 Andre Hedrick <andre@linux-ide.org>
|
||||
* Copyright (C) 2006-2007 MontaVista Software, Inc.
|
||||
* Copyright (C) 2006-2007, 2009 MontaVista Software, Inc.
|
||||
* Copyright (C) 2007 Bartlomiej Zolnierkiewicz
|
||||
*
|
||||
* Portions Copyright (C) 1999 Promise Technology, Inc.
|
||||
|
@ -227,28 +227,19 @@ static int pdc202xx_dma_test_irq(ide_drive_t *drive)
|
|||
return (dma_stat & 4) == 4; /* return 1 if INTR asserted */
|
||||
}
|
||||
|
||||
static void pdc202xx_reset_host (ide_hwif_t *hwif)
|
||||
static void pdc202xx_reset(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
unsigned long high_16 = hwif->extra_base - 16;
|
||||
u8 udma_speed_flag = inb(high_16 | 0x001f);
|
||||
|
||||
printk(KERN_WARNING "PDC202xx: software reset...\n");
|
||||
|
||||
outb(udma_speed_flag | 0x10, high_16 | 0x001f);
|
||||
mdelay(100);
|
||||
outb(udma_speed_flag & ~0x10, high_16 | 0x001f);
|
||||
mdelay(2000); /* 2 seconds ?! */
|
||||
|
||||
printk(KERN_WARNING "PDC202XX: %s channel reset.\n",
|
||||
hwif->channel ? "Secondary" : "Primary");
|
||||
}
|
||||
|
||||
static void pdc202xx_reset (ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
ide_hwif_t *mate = hwif->mate;
|
||||
|
||||
pdc202xx_reset_host(hwif);
|
||||
pdc202xx_reset_host(mate);
|
||||
|
||||
ide_set_max_pio(drive);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue