Commit aa95f0e7 authored by Sergei Shtylylov's avatar Sergei Shtylylov Committed by Bartlomiej Zolnierkiewicz

sgiioc4: sgiioc4_read_status drive busy check fix

Fix the drive non-busy criterion used by sgiioc4_read_status(): neither of the
bits it expects to be set guarantees that the drive is not busy (and might be
interrupting), only the BSY bit itself being zero gurantees that.
While at it, use ATA_BUSY instead of hardcoded value everywhere...
Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Cc: jeremy@sgi.com
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent a447c093
/* /*
* Copyright (c) 2003-2006 Silicon Graphics, Inc. All Rights Reserved. * Copyright (c) 2003-2006 Silicon Graphics, Inc. All Rights Reserved.
* Copyright (C) 2008 MontaVista Software, Inc.
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License * under the terms of version 2 of the GNU General Public License
...@@ -150,7 +151,7 @@ sgiioc4_clearirq(ide_drive_t * drive) ...@@ -150,7 +151,7 @@ sgiioc4_clearirq(ide_drive_t * drive)
int count = 0; int count = 0;
stat = sgiioc4_read_status(hwif); stat = sgiioc4_read_status(hwif);
while ((stat & 0x80) && (count++ < 100)) { while ((stat & ATA_BUSY) && (count++ < 100)) {
udelay(1); udelay(1);
stat = sgiioc4_read_status(hwif); stat = sgiioc4_read_status(hwif);
} }
...@@ -310,7 +311,7 @@ static u8 sgiioc4_read_status(ide_hwif_t *hwif) ...@@ -310,7 +311,7 @@ static u8 sgiioc4_read_status(ide_hwif_t *hwif)
u8 reg = (u8) readb((void __iomem *) port); u8 reg = (u8) readb((void __iomem *) port);
if ((port & 0xFFF) == 0x11C) { /* Status register of IOC4 */ if ((port & 0xFFF) == 0x11C) { /* Status register of IOC4 */
if (reg & 0x51) { /* Not busy...check for interrupt */ if (!(reg & ATA_BUSY)) { /* Not busy... check for interrupt */
unsigned long other_ir = port - 0x110; unsigned long other_ir = port - 0x110;
unsigned int intr_reg = (u32) readl((void __iomem *) other_ir); unsigned int intr_reg = (u32) readl((void __iomem *) other_ir);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment