linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch 1/4] fix drive->ready_stat for ATAPI
@ 2005-01-16  1:11 Bartlomiej Zolnierkiewicz
  2005-01-16  4:01 ` Benjamin Herrenschmidt
  0 siblings, 1 reply; 2+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2005-01-16  1:11 UTC (permalink / raw)
  To: linux-ide; +Cc: Benjamin Herrenschmidt


Hi,

ATAPI devices ignore DRDY bit so drive->ready_stat must be set to zero.
It is currently done by device drivers (including ide-default fake driver)
but for PMAC driver it is too late as wait_for_ready() may be called during
probe: probe_hwif()->pmac_ide_dma_check()->pmac_ide_{mdma,udma}_enable()->
->pmac_ide_do_setfeature()->wait_for_ready().  Set correct drive->ready_stat
just after detecting ATAPI device.

Bartlomiej

diff -Nru a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
--- a/drivers/ide/ide-cd.c	2005-01-15 14:02:36 +01:00
+++ b/drivers/ide/ide-cd.c	2005-01-15 14:02:36 +01:00
@@ -3088,7 +3088,6 @@
 		drive->queue->unplug_delay = 1;

 	drive->special.all	= 0;
-	drive->ready_stat	= 0;

 	CDROM_STATE_FLAGS(drive)->media_changed = 1;
 	CDROM_STATE_FLAGS(drive)->toc_valid     = 0;
diff -Nru a/drivers/ide/ide-default.c b/drivers/ide/ide-default.c
--- a/drivers/ide/ide-default.c	2005-01-15 14:02:36 +01:00
+++ b/drivers/ide/ide-default.c	2005-01-15 14:02:36 +01:00
@@ -57,13 +57,6 @@
 			"driver with ide.c\n", drive->name);
 		return 1;
 	}
-
-	/* For the sake of the request layer, we must make sure we have a
-	 * correct ready_stat value, that is 0 for ATAPI devices or we will
-	 * fail any request like Power Management
-	 */
-	if (drive->media != ide_disk)
-		drive->ready_stat = 0;

 	return 0;
 }
diff -Nru a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
--- a/drivers/ide/ide-floppy.c	2005-01-15 14:02:36 +01:00
+++ b/drivers/ide/ide-floppy.c	2005-01-15 14:02:36 +01:00
@@ -1793,7 +1793,6 @@

 	*((u16 *) &gcw) = drive->id->config;
 	drive->driver_data = floppy;
-	drive->ready_stat = 0;
 	memset(floppy, 0, sizeof(idefloppy_floppy_t));
 	floppy->drive = drive;
 	floppy->pc = floppy->pc_stack;
diff -Nru a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
--- a/drivers/ide/ide-probe.c	2005-01-15 14:02:36 +01:00
+++ b/drivers/ide/ide-probe.c	2005-01-15 14:02:36 +01:00
@@ -221,6 +221,8 @@
 		}
 		printk (" drive\n");
 		drive->media = type;
+		/* an ATAPI device ignores DRDY */
+		drive->ready_stat = 0;
 		return;
 	}

diff -Nru a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
--- a/drivers/ide/ide-tape.c	2005-01-15 14:02:36 +01:00
+++ b/drivers/ide/ide-tape.c	2005-01-15 14:02:36 +01:00
@@ -4530,8 +4530,6 @@
 	memset(tape, 0, sizeof (idetape_tape_t));
 	spin_lock_init(&tape->spinlock);
 	drive->driver_data = tape;
-	/* An ATAPI device ignores DRDY */
-	drive->ready_stat = 0;
 	drive->dsc_overlap = 1;
 #ifdef CONFIG_BLK_DEV_IDEPCI
 	if (HWIF(drive)->pci_dev != NULL) {
diff -Nru a/drivers/ide/ide.c b/drivers/ide/ide.c
--- a/drivers/ide/ide.c	2005-01-15 14:02:36 +01:00
+++ b/drivers/ide/ide.c	2005-01-15 14:02:36 +01:00
@@ -1747,6 +1747,8 @@
 			case -4: /* "cdrom" */
 				drive->present = 1;
 				drive->media = ide_cdrom;
+				/* an ATAPI device ignores DRDY */
+				drive->ready_stat = 0;
 				hwif->noprobe = 0;
 				goto done;
 			case -5: /* "serialize" */
diff -Nru a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
--- a/drivers/scsi/ide-scsi.c	2005-01-15 14:02:36 +01:00
+++ b/drivers/scsi/ide-scsi.c	2005-01-15 14:02:36 +01:00
@@ -679,7 +679,6 @@
 static void idescsi_setup (ide_drive_t *drive, idescsi_scsi_t *scsi)
 {
 	DRIVER(drive)->busy++;
-	drive->ready_stat = 0;
 	if (drive->id && (drive->id->config & 0x0060) == 0x20)
 		set_bit (IDESCSI_DRQ_INTERRUPT, &scsi->flags);
 	set_bit(IDESCSI_TRANSFORM, &scsi->transform);

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [patch 1/4] fix drive->ready_stat for ATAPI
  2005-01-16  1:11 [patch 1/4] fix drive->ready_stat for ATAPI Bartlomiej Zolnierkiewicz
@ 2005-01-16  4:01 ` Benjamin Herrenschmidt
  0 siblings, 0 replies; 2+ messages in thread
From: Benjamin Herrenschmidt @ 2005-01-16  4:01 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: list linux-ide

On Sun, 2005-01-16 at 02:11 +0100, Bartlomiej Zolnierkiewicz wrote:
> Hi,
> 
> ATAPI devices ignore DRDY bit so drive->ready_stat must be set to zero.
> It is currently done by device drivers (including ide-default fake driver)
> but for PMAC driver it is too late as wait_for_ready() may be called during
> probe: probe_hwif()->pmac_ide_dma_check()->pmac_ide_{mdma,udma}_enable()->
> ->pmac_ide_do_setfeature()->wait_for_ready().  Set correct drive->ready_stat
> just after detecting ATAPI device.

Looks good.

Ben.



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-01-16  4:03 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-01-16  1:11 [patch 1/4] fix drive->ready_stat for ATAPI Bartlomiej Zolnierkiewicz
2005-01-16  4:01 ` Benjamin Herrenschmidt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).