From: Albert Lee <albertcc@tw.ibm.com>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: Mark Lord <mlord@pobox.com>,
Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>,
Doug Maxey <dwm@maxeymade.com>,
IDE Linux <linux-ide@vger.kernel.org>
Subject: Re: [PATCH libata-dev-2.6] Issue INITIALIZE DEVICE PARAMETERS for CHS only devices
Date: Fri, 25 Feb 2005 13:01:51 +0800 [thread overview]
Message-ID: <421EB13F.4000503@tw.ibm.com> (raw)
In-Reply-To: <421D86CA.3010606@pobox.com>
>
> This patch similarly fails to apply:
>
Jeff,
Rediff'ed against 2.6.11-rc5 + C/H/S patches.
Attached please find the revised patch for your review.
Albert
Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
============================================================================================
--- linux-2.6.11-rc5-chs/include/linux/ata.h 2005-02-25 11:49:46.000000000 +0800
+++ linux-2.6.11-rc5-mod/include/linux/ata.h 2005-02-25 12:30:57.000000000 +0800
@@ -125,6 +125,7 @@
ATA_CMD_PACKET = 0xA0,
ATA_CMD_VERIFY = 0x40,
ATA_CMD_VERIFY_EXT = 0x42,
+ ATA_CMD_INIT_DEV_PARAMS = 0x91,
/* SETFEATURES stuff */
SETFEATURES_XFER = 0x03,
--- linux-2.6.11-rc5-chs/drivers/scsi/libata-core.c 2005-02-25 11:48:23.000000000 +0800
+++ linux-2.6.11-rc5-mod/drivers/scsi/libata-core.c 2005-02-25 12:35:33.000000000 +0800
@@ -52,6 +52,7 @@
static unsigned int ata_busy_sleep (struct ata_port *ap,
unsigned long tmout_pat,
unsigned long tmout);
+static void ata_dev_init_params(struct ata_port *ap, struct ata_device *dev);
static void ata_set_mode(struct ata_port *ap);
static void ata_dev_set_xfermode(struct ata_port *ap, struct ata_device *dev);
static unsigned int ata_get_mode_mask(struct ata_port *ap, int shift);
@@ -1134,11 +1135,16 @@
if (tmp & (1 << major_version))
break;
- /* we require at least ATA-3 */
- if (major_version < 3) {
- printk(KERN_DEBUG "ata%u: no ATA-3\n", ap->id);
- goto err_out_nosup;
- }
+ /*
+ * The exact sequence expected by certain pre-ATA4 drives is:
+ * SRST RESET
+ * IDENTIFY
+ * INITIALIZE DEVICE PARAMETERS
+ * anything else..
+ * Some drives were very specific about that exact sequence.
+ */
+ if (major_version < 4 || (!ata_id_has_lba(dev->id)))
+ ata_dev_init_params(ap, dev);
if (ata_id_has_lba(dev->id)) {
dev->flags |= ATA_DFLAG_LBA;
@@ -1979,6 +1985,54 @@
}
/**
+ * ata_dev_init_params - Issue INIT DEV PARAMS command
+ * @ap: Port associated with device @dev
+ * @dev: Device to which command will be sent
+ *
+ * LOCKING:
+ */
+
+static void ata_dev_init_params(struct ata_port *ap, struct ata_device *dev)
+{
+ DECLARE_COMPLETION(wait);
+ struct ata_queued_cmd *qc;
+ int rc;
+ unsigned long flags;
+ u16 sectors = dev->id[6];
+ u16 heads = dev->id[3];
+
+ /* Number of sectors per track 1-255. Number of heads 1-16 */
+ if (sectors < 1 || sectors > 255 || heads < 1 || heads > 16)
+ return;
+
+ /* set up init dev params taskfile */
+ DPRINTK("init dev params \n");
+
+ qc = ata_qc_new_init(ap, dev);
+ BUG_ON(qc == NULL);
+
+ qc->tf.command = ATA_CMD_INIT_DEV_PARAMS;
+ qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
+ qc->tf.protocol = ATA_PROT_NODATA;
+ qc->tf.nsect = sectors;
+ qc->tf.device |= (heads - 1) & 0x0f; /* max head = number of heads - 1 */
+
+ qc->waiting = &wait;
+ qc->complete_fn = ata_qc_complete_noop;
+
+ spin_lock_irqsave(&ap->host_set->lock, flags);
+ rc = ata_qc_issue(qc);
+ spin_unlock_irqrestore(&ap->host_set->lock, flags);
+
+ if (rc)
+ ata_port_disable(ap);
+ else
+ wait_for_completion(&wait);
+
+ DPRINTK("EXIT\n");
+}
+
+/**
* ata_sg_clean -
* @qc:
*
next prev parent reply other threads:[~2005-02-25 5:02 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-06 6:02 [PATCH libata-dev-2.6 1/3] Add CHS support Albert Lee
2005-02-06 6:26 ` Jeff Garzik
2005-02-06 14:41 ` Mark Lord
2005-02-06 15:00 ` Jeff Garzik
2005-02-06 22:02 ` Mark Lord
2005-02-14 11:09 ` Albert Lee
2005-02-14 11:17 ` Albert Lee
2005-02-14 11:23 ` Albert Lee
2005-02-18 23:40 ` Jeff Garzik
2005-02-22 3:35 ` Albert Lee
2005-02-23 11:25 ` [PATCH libata-dev-2.6] Issue INITIALIZE DEVICE PARAMETERS for CHS only devices Albert Lee
2005-02-23 14:48 ` Mark Lord
2005-02-24 2:36 ` Albert Lee
2005-02-24 2:53 ` Jeff Garzik
2005-02-24 5:29 ` Albert Lee
2005-02-24 5:35 ` Jeff Garzik
2005-02-24 6:41 ` Albert Lee
2005-02-24 6:48 ` Jeff Garzik
2005-02-24 7:01 ` Albert Lee
2005-02-24 7:48 ` Jeff Garzik
2005-02-25 5:01 ` Albert Lee [this message]
2005-02-25 5:22 ` Albert Lee
2005-02-25 5:40 ` Jeff Garzik
2005-02-24 3:10 ` Mark Lord
2005-02-24 3:15 ` Jeff Garzik
2005-02-24 3:35 ` Mark Lord
2005-02-23 16:50 ` Bartlomiej Zolnierkiewicz
2005-02-24 3:05 ` Albert Lee
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=421EB13F.4000503@tw.ibm.com \
--to=albertcc@tw.ibm.com \
--cc=bzolnier@gmail.com \
--cc=dwm@maxeymade.com \
--cc=jgarzik@pobox.com \
--cc=linux-ide@vger.kernel.org \
--cc=mlord@pobox.com \
/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 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).