All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: linux-ide@vger.kernel.org
Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH 2/8] ide: propagate AltStatus workarounds to ide_driveid_update()
Date: Thu, 22 Jan 2009 15:18:14 +0100	[thread overview]
Message-ID: <20090122141814.25516.17811.sendpatchset@localhost.localdomain> (raw)
In-Reply-To: <20090122141801.25516.5620.sendpatchset@localhost.localdomain>

From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Subject: [PATCH] ide: propagate AltStatus workarounds to ide_driveid_update()

Propagate AltStatus workarounds from try_to_identify()
to ide_driveid_update().

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
 drivers/ide/ide-iops.c |   21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

Index: b/drivers/ide/ide-iops.c
===================================================================
--- a/drivers/ide/ide-iops.c
+++ b/drivers/ide/ide-iops.c
@@ -293,8 +293,8 @@ int ide_driveid_update(ide_drive_t *driv
 	const struct ide_tp_ops *tp_ops = hwif->tp_ops;
 	u16 *id;
 	unsigned long flags;
-	int rc;
-	u8 uninitialized_var(s);
+	int use_altstatus = 0, rc;
+	u8 a, uninitialized_var(s);
 
 	id = kmalloc(SECTOR_SIZE, GFP_ATOMIC);
 	if (id == NULL)
@@ -308,9 +308,24 @@ int ide_driveid_update(ide_drive_t *driv
 	SELECT_MASK(drive, 1);
 	tp_ops->set_irq(hwif, 0);
 	msleep(50);
+
+	if (hwif->io_ports.ctl_addr &&
+	    (hwif->host_flags & IDE_HFLAG_BROKEN_ALTSTATUS) == 0) {
+		a = tp_ops->read_altstatus(hwif);
+		s = tp_ops->read_status(hwif);
+		if ((a ^ s) & ~ATA_IDX)
+			/* ancient Seagate drives, broken interfaces */
+			printk(KERN_INFO "%s: probing with STATUS(0x%02x) "
+					 "instead of ALTSTATUS(0x%02x)\n",
+					 drive->name, s, a);
+		else
+			/* use non-intrusive polling */
+			use_altstatus = 1;
+	}
+
 	tp_ops->exec_command(hwif, ATA_CMD_ID_ATA);
 
-	if (ide_busy_sleep(hwif, WAIT_WORSTCASE, 1)) {
+	if (ide_busy_sleep(hwif, WAIT_WORSTCASE, use_altstatus)) {
 		rc = 1;
 		goto out_err;
 	}

  parent reply	other threads:[~2009-01-22 14:17 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-22 14:18 [PATCH 0/8] ide: unify code for reading device identify data Bartlomiej Zolnierkiewicz
2009-01-22 14:18 ` [PATCH 1/8] ide: fix kmalloc() failure handling in ide_driveid_update() Bartlomiej Zolnierkiewicz
2009-01-22 14:18 ` Bartlomiej Zolnierkiewicz [this message]
2009-01-22 14:18 ` [PATCH 3/8] ide: shorten timeout value " Bartlomiej Zolnierkiewicz
2009-01-22 14:18 ` [PATCH 4/8] ide: remove broken EXABYTENEST support Bartlomiej Zolnierkiewicz
2009-01-22 14:18 ` [PATCH 5/8] ide: classify device type in do_probe() Bartlomiej Zolnierkiewicz
2009-01-22 14:18 ` [PATCH 6/8] ide: sanitize SELECT_MASK() usage in ide_driveid_update() Bartlomiej Zolnierkiewicz
2009-01-22 14:18 ` [PATCH 7/8] ide: clear drive IRQ after re-enabling local IRQs " Bartlomiej Zolnierkiewicz
2009-01-22 14:18 ` [PATCH 8/8] ide: use try_to_identify() " Bartlomiej Zolnierkiewicz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090122141814.25516.17811.sendpatchset@localhost.localdomain \
    --to=bzolnier@gmail.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.