[PATCH] ide: IDE timing violation on reset
authorAlan Cox <alan@lxorguk.ukuu.org.uk>
Mon, 27 Jun 2005 22:24:25 +0000 (15:24 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 28 Jun 2005 00:36:40 +0000 (17:36 -0700)
Pretty much theoretical for non MMIO thankfully.  We _must_ use OUTBSYNC for
commands or they may be posted and thus ruin the 400nS required delay.

Signed-off-by: Alan Cox <alan@redhat.com>
Acked-by: Bartlomiej Zolnierkiewicz <B.Zolnierkiewicz@elka.pw.edu.pl>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/ide/ide-iops.c

index 53024942a7ebf2c5d98e2d6e545921eacd214724..b443b04a4c5a7c1de5263dc4c2120655d88b38c4 100644 (file)
@@ -1181,7 +1181,8 @@ static ide_startstop_t do_reset1 (ide_drive_t *drive, int do_not_try_atapi)
                pre_reset(drive);
                SELECT_DRIVE(drive);
                udelay (20);
-               hwif->OUTB(WIN_SRST, IDE_COMMAND_REG);
+               hwif->OUTBSYNC(drive, WIN_SRST, IDE_COMMAND_REG);
+               ndelay(400);
                hwgroup->poll_timeout = jiffies + WAIT_WORSTCASE;
                hwgroup->polling = 1;
                __ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20, NULL);