linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] libata: cosmetic change in ata_bus_softreset()
@ 2006-03-24  3:45 Tejun Heo
  2006-03-24 14:33 ` Jeff Garzik
  2006-03-24 15:16 ` [PATCH] libata: cosmetic change in ata_bus_softreset() Jeff Garzik
  0 siblings, 2 replies; 10+ messages in thread
From: Tejun Heo @ 2006-03-24  3:45 UTC (permalink / raw)
  To: Jeff Garzik, alan, linux-ide

ata_bus_softreset() should return AC_ERR_* on failure not arbitrary
positive number.  While at it, kill trailing indentations and reformat
comment.

Signed-off-by: Tejun Heo <htejun@gmail.com>

diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index f3c115b..200198c 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -1999,13 +1999,12 @@ static unsigned int ata_bus_softreset(st
 	 */
 	msleep(150);
 
-	
-	/* Before we perform post reset processing we want to see if 
-	   the bus shows 0xFF because the odd clown forgets the D7 pulldown
-	   resistor */
-	
+	/* Before we perform post reset processing we want to see if
+	 * the bus shows 0xFF because the odd clown forgets the D7
+	 * pulldown resistor
+	 */
 	if (ata_check_status(ap) == 0xFF)
-		return 1;	/* Positive is failure for some reason */
+		return AC_ERR_OTHER;
 
 	ata_bus_post_reset(ap, devmask);
 

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

* Re: [PATCH] libata: cosmetic change in ata_bus_softreset()
  2006-03-24  3:45 [PATCH] libata: cosmetic change in ata_bus_softreset() Tejun Heo
@ 2006-03-24 14:33 ` Jeff Garzik
  2006-03-24 16:02   ` [PATCH] libata: cosmetic changes " Tejun Heo
  2006-03-24 16:33   ` [PATCH] libata: kill E.D.D Tejun Heo
  2006-03-24 15:16 ` [PATCH] libata: cosmetic change in ata_bus_softreset() Jeff Garzik
  1 sibling, 2 replies; 10+ messages in thread
From: Jeff Garzik @ 2006-03-24 14:33 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Alan Cox, linux-ide

Tejun Heo wrote:
> ata_bus_softreset() should return AC_ERR_* on failure not arbitrary
> positive number.  While at it, kill trailing indentations and reformat
> comment.
> 
> Signed-off-by: Tejun Heo <htejun@gmail.com>
> 
> diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
> index f3c115b..200198c 100644
> --- a/drivers/scsi/libata-core.c
> +++ b/drivers/scsi/libata-core.c
> @@ -1999,13 +1999,12 @@ static unsigned int ata_bus_softreset(st
>  	 */
>  	msleep(150);
>  
> -	
> -	/* Before we perform post reset processing we want to see if 
> -	   the bus shows 0xFF because the odd clown forgets the D7 pulldown
> -	   resistor */
> -	
> +	/* Before we perform post reset processing we want to see if
> +	 * the bus shows 0xFF because the odd clown forgets the D7
> +	 * pulldown resistor
> +	 */
>  	if (ata_check_status(ap) == 0xFF)
> -		return 1;	/* Positive is failure for some reason */
> +		return AC_ERR_OTHER;

agreed and will apply, though note:

The reason Alan did this is most likely because the only other function 
that produces a non-zero return code is ata_bus_edd->ata_busy_sleep, 
which returns 1.

Though really, we should rip out E.D.D. anyway....

	Jeff



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

* Re: [PATCH] libata: cosmetic change in ata_bus_softreset()
  2006-03-24  3:45 [PATCH] libata: cosmetic change in ata_bus_softreset() Tejun Heo
  2006-03-24 14:33 ` Jeff Garzik
@ 2006-03-24 15:16 ` Jeff Garzik
  1 sibling, 0 replies; 10+ messages in thread
From: Jeff Garzik @ 2006-03-24 15:16 UTC (permalink / raw)
  To: Tejun Heo; +Cc: linux-ide

[-- Attachment #1: Type: text/plain, Size: 377 bytes --]

Tejun Heo wrote:
> ata_bus_softreset() should return AC_ERR_* on failure not arbitrary
> positive number.  While at it, kill trailing indentations and reformat
> comment.
> 
> Signed-off-by: Tejun Heo <htejun@gmail.com>

Please pull #upstream, make sure you have
2e9edbf815e42f93dd29a9981f27bd421acc47df, and then resend.  I ran chomp 
(attached) on a bunch of files.

	Jeff



[-- Attachment #2: chomp.pl --]
[-- Type: application/x-perl, Size: 806 bytes --]

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

* [PATCH] libata: cosmetic changes in ata_bus_softreset()
  2006-03-24 14:33 ` Jeff Garzik
@ 2006-03-24 16:02   ` Tejun Heo
  2006-03-24 17:25     ` Jeff Garzik
  2006-03-24 16:33   ` [PATCH] libata: kill E.D.D Tejun Heo
  1 sibling, 1 reply; 10+ messages in thread
From: Tejun Heo @ 2006-03-24 16:02 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Alan Cox, linux-ide

ata_bus_softreset() should return AC_ERR_* on failure not arbitrary
positive number.  While at it, reformat comment above it.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Acked-by: Alan Cox <alan@redhat.com>

---

 libata-core.c |   11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index f3c115b..200198c 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -1999,13 +1999,12 @@ static unsigned int ata_bus_softreset(st
 	 */
 	msleep(150);
 
-	
-	/* Before we perform post reset processing we want to see if 
-	   the bus shows 0xFF because the odd clown forgets the D7 pulldown
-	   resistor */
-	
+	/* Before we perform post reset processing we want to see if
+	 * the bus shows 0xFF because the odd clown forgets the D7
+	 * pulldown resistor
+	 */
 	if (ata_check_status(ap) == 0xFF)
-		return 1;	/* Positive is failure for some reason */
+		return AC_ERR_OTHER;
 
 	ata_bus_post_reset(ap, devmask);
 

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

* [PATCH] libata: kill E.D.D.
  2006-03-24 14:33 ` Jeff Garzik
  2006-03-24 16:02   ` [PATCH] libata: cosmetic changes " Tejun Heo
@ 2006-03-24 16:33   ` Tejun Heo
  2006-03-24 17:24     ` Jeff Garzik
  2006-03-24 18:04     ` Alan Cox
  1 sibling, 2 replies; 10+ messages in thread
From: Tejun Heo @ 2006-03-24 16:33 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Alan Cox, linux-ide

E.D.D. has no user in-tree and mostly useless.  Kill it.  For possible
out-of-tree users, add a nice warning message and error handling if
LLDD doesn't report any useable reset mechanism (and thus tries to use
E.D.D.).

Signed-off-by: Tejun Heo <htejun@gmail.com>

---

I left BUS_EDD constant alone as I have no idea know how those BUS_*
constants are used.  Tested on sata_sil, sata_promise, ata_piix and
ahci.

 drivers/scsi/libata-core.c |   98 +++++----------------------------------------
 include/linux/libata.h     |    1
 2 files changed, 13 insertions(+), 86 deletions(-)

diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index eda4c0c..516b1a6 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -1081,9 +1081,8 @@ unsigned int ata_pio_need_iordy(const st
  *
  *	Read ID data from the specified device.  ATA_CMD_ID_ATA is
  *	performed on ATA devices and ATA_CMD_ID_ATAPI on ATAPI
- *	devices.  This function also takes care of EDD signature
- *	misreporting (to be removed once EDD support is gone) and
- *	issues ATA_CMD_INIT_DEV_PARAMS for pre-ATA4 drives.
+ *	devices.  This function also issues ATA_CMD_INIT_DEV_PARAMS
+ *	for pre-ATA4 drives.
  *
  *	LOCKING:
  *	Kernel thread context (may sleep)
@@ -1095,7 +1094,6 @@ static int ata_dev_read_id(struct ata_po
 			   unsigned int *p_class, int post_reset, u16 **p_id)
 {
 	unsigned int class = *p_class;
-	unsigned int using_edd;
 	struct ata_taskfile tf;
 	unsigned int err_mask = 0;
 	u16 *id;
@@ -1104,12 +1102,6 @@ static int ata_dev_read_id(struct ata_po
 
 	DPRINTK("ENTER, host %u, dev %u\n", ap->id, dev->devno);
 
-	if (ap->ops->probe_reset ||
-	    ap->flags & (ATA_FLAG_SRST | ATA_FLAG_SATA_RESET))
-		using_edd = 0;
-	else
-		using_edd = 1;
-
 	ata_dev_select(ap, dev->devno, 1, 1); /* select device 0/1 */
 
 	id = kmalloc(sizeof(id[0]) * ATA_ID_WORDS, GFP_KERNEL);
@@ -1139,32 +1131,9 @@ static int ata_dev_read_id(struct ata_po
 
 	err_mask = ata_exec_internal(ap, dev, &tf, DMA_FROM_DEVICE,
 				     id, sizeof(id[0]) * ATA_ID_WORDS);
-
 	if (err_mask) {
 		rc = -EIO;
 		reason = "I/O error";
-
-		if (err_mask & ~AC_ERR_DEV)
-			goto err_out;
-
-		/*
-		 * arg!  EDD works for all test cases, but seems to return
-		 * the ATA signature for some ATAPI devices.  Until the
-		 * reason for this is found and fixed, we fix up the mess
-		 * here.  If IDENTIFY DEVICE returns command aborted
-		 * (as ATAPI devices do), then we issue an
-		 * IDENTIFY PACKET DEVICE.
-		 *
-		 * ATA software reset (SRST, the default) does not appear
-		 * to have this problem.
-		 */
-		if ((using_edd) && (class == ATA_DEV_ATA)) {
-			u8 err = tf.feature;
-			if (err & ATA_ABORTED) {
-				class = ATA_DEV_ATAPI;
-				goto retry;
-			}
-		}
 		goto err_out;
 	}
 
@@ -2005,45 +1974,6 @@ static void ata_bus_post_reset(struct at
 		ap->ops->dev_select(ap, 0);
 }
 
-/**
- *	ata_bus_edd - Issue EXECUTE DEVICE DIAGNOSTIC command.
- *	@ap: Port to reset and probe
- *
- *	Use the EXECUTE DEVICE DIAGNOSTIC command to reset and
- *	probe the bus.  Not often used these days.
- *
- *	LOCKING:
- *	PCI/etc. bus probe sem.
- *	Obtains host_set lock.
- *
- */
-
-static unsigned int ata_bus_edd(struct ata_port *ap)
-{
-	struct ata_taskfile tf;
-	unsigned long flags;
-
-	/* set up execute-device-diag (bus reset) taskfile */
-	/* also, take interrupts to a known state (disabled) */
-	DPRINTK("execute-device-diag\n");
-	ata_tf_init(ap, &tf, 0);
-	tf.ctl |= ATA_NIEN;
-	tf.command = ATA_CMD_EDD;
-	tf.protocol = ATA_PROT_NODATA;
-
-	/* do bus reset */
-	spin_lock_irqsave(&ap->host_set->lock, flags);
-	ata_tf_to_host(ap, &tf);
-	spin_unlock_irqrestore(&ap->host_set->lock, flags);
-
-	/* spec says at least 2ms.  but who knows with those
-	 * crazy ATAPI devices...
-	 */
-	msleep(150);
-
-	return ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT);
-}
-
 static unsigned int ata_bus_softreset(struct ata_port *ap,
 				      unsigned int devmask)
 {
@@ -2115,7 +2045,7 @@ void ata_bus_reset(struct ata_port *ap)
 	struct ata_ioports *ioaddr = &ap->ioaddr;
 	unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS;
 	u8 err;
-	unsigned int dev0, dev1 = 0, rc = 0, devmask = 0;
+	unsigned int dev0, dev1 = 0, devmask = 0;
 
 	DPRINTK("ENTER, host %u, port %u\n", ap->id, ap->port_no);
 
@@ -2138,18 +2068,8 @@ void ata_bus_reset(struct ata_port *ap)
 
 	/* issue bus reset */
 	if (ap->flags & ATA_FLAG_SRST)
-		rc = ata_bus_softreset(ap, devmask);
-	else if ((ap->flags & ATA_FLAG_SATA_RESET) == 0) {
-		/* set up device control */
-		if (ap->flags & ATA_FLAG_MMIO)
-			writeb(ap->ctl, (void __iomem *) ioaddr->ctl_addr);
-		else
-			outb(ap->ctl, ioaddr->ctl_addr);
-		rc = ata_bus_edd(ap);
-	}
-
-	if (rc)
-		goto err_out;
+		if (ata_bus_softreset(ap, devmask))
+			goto err_out;
 
 	/*
 	 * determine by signature whether we have ATA or ATAPI devices
@@ -4535,6 +4455,14 @@ static struct ata_port * ata_host_add(co
 	int rc;
 
 	DPRINTK("ENTER\n");
+
+	if (!ent->port_ops->probe_reset &&
+	    !(ent->host_flags & (ATA_FLAG_SATA_RESET | ATA_FLAG_SRST))) {
+		printk(KERN_ERR "ata%u: no reset mechanism available\n",
+		       port_no);
+		return NULL;
+	}
+
 	host = scsi_host_alloc(ent->sht, sizeof(struct ata_port));
 	if (!host)
 		return NULL;
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 0471922..9fcc061 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -161,7 +161,6 @@ enum {
 	ATA_QCFLAG_EH_SCHEDULED = (1 << 5), /* EH scheduled */
 
 	/* various lengths of time */
-	ATA_TMOUT_EDD		= 5 * HZ,	/* heuristic */
 	ATA_TMOUT_PIO		= 30 * HZ,
 	ATA_TMOUT_BOOT		= 30 * HZ,	/* heuristic */
 	ATA_TMOUT_BOOT_QUICK	= 7 * HZ,	/* heuristic */

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

* Re: [PATCH] libata: kill E.D.D.
  2006-03-24 16:33   ` [PATCH] libata: kill E.D.D Tejun Heo
@ 2006-03-24 17:24     ` Jeff Garzik
  2006-03-24 18:04     ` Alan Cox
  1 sibling, 0 replies; 10+ messages in thread
From: Jeff Garzik @ 2006-03-24 17:24 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Alan Cox, linux-ide

Tejun Heo wrote:
> E.D.D. has no user in-tree and mostly useless.  Kill it.  For possible
> out-of-tree users, add a nice warning message and error handling if
> LLDD doesn't report any useable reset mechanism (and thus tries to use
> E.D.D.).
> 
> Signed-off-by: Tejun Heo <htejun@gmail.com>

applied



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

* Re: [PATCH] libata: cosmetic changes in ata_bus_softreset()
  2006-03-24 16:02   ` [PATCH] libata: cosmetic changes " Tejun Heo
@ 2006-03-24 17:25     ` Jeff Garzik
  2006-03-24 17:58       ` Tejun Heo
  0 siblings, 1 reply; 10+ messages in thread
From: Jeff Garzik @ 2006-03-24 17:25 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Alan Cox, linux-ide

Tejun Heo wrote:
> ata_bus_softreset() should return AC_ERR_* on failure not arbitrary
> positive number.  While at it, reformat comment above it.
> 
> Signed-off-by: Tejun Heo <htejun@gmail.com>
> Acked-by: Alan Cox <alan@redhat.com>

ACK but doesn't apply to #upstream (now linux-2.6.git as well)



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

* [PATCH] libata: cosmetic changes in ata_bus_softreset()
  2006-03-24 17:25     ` Jeff Garzik
@ 2006-03-24 17:58       ` Tejun Heo
  2006-03-25  4:04         ` Jeff Garzik
  0 siblings, 1 reply; 10+ messages in thread
From: Tejun Heo @ 2006-03-24 17:58 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Alan Cox, linux-ide

ata_bus_softreset() should return AC_ERR_* on failure not arbitrary
positive number.  While at it, reformat comment above it.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Acked-by: Alan Cox <alan@redhat.com>

---

Hmmm... weird.  Here's the regenerated patch against the current
upstream (aec5c3c1a929d7d79a420e943285cf3ba26a7c0d).

 libata-core.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 0aff888..64f71df 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -2008,13 +2008,12 @@ static unsigned int ata_bus_softreset(st
 	 */
 	msleep(150);
 
-
 	/* Before we perform post reset processing we want to see if
-	   the bus shows 0xFF because the odd clown forgets the D7 pulldown
-	   resistor */
-
+	 * the bus shows 0xFF because the odd clown forgets the D7
+	 * pulldown resistor.
+	 */
 	if (ata_check_status(ap) == 0xFF)
-		return 1;	/* Positive is failure for some reason */
+		return AC_ERR_OTHER;
 
 	ata_bus_post_reset(ap, devmask);
 

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

* Re: [PATCH] libata: kill E.D.D.
  2006-03-24 16:33   ` [PATCH] libata: kill E.D.D Tejun Heo
  2006-03-24 17:24     ` Jeff Garzik
@ 2006-03-24 18:04     ` Alan Cox
  1 sibling, 0 replies; 10+ messages in thread
From: Alan Cox @ 2006-03-24 18:04 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Jeff Garzik, linux-ide

On Sad, 2006-03-25 at 01:33 +0900, Tejun Heo wrote:
> E.D.D. has no user in-tree and mostly useless.  Kill it.  For possible
> out-of-tree users, add a nice warning message and error handling if
> LLDD doesn't report any useable reset mechanism (and thus tries to use
> E.D.D.).

We made need this for some ISAPnP, M68K and embedded devices but its
easy enough to put back when actual hardware is found.


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

* Re: [PATCH] libata: cosmetic changes in ata_bus_softreset()
  2006-03-24 17:58       ` Tejun Heo
@ 2006-03-25  4:04         ` Jeff Garzik
  0 siblings, 0 replies; 10+ messages in thread
From: Jeff Garzik @ 2006-03-25  4:04 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Alan Cox, linux-ide

Tejun Heo wrote:
> ata_bus_softreset() should return AC_ERR_* on failure not arbitrary
> positive number.  While at it, reformat comment above it.
> 
> Signed-off-by: Tejun Heo <htejun@gmail.com>
> Acked-by: Alan Cox <alan@redhat.com>

applied



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

end of thread, other threads:[~2006-03-25  4:04 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-03-24  3:45 [PATCH] libata: cosmetic change in ata_bus_softreset() Tejun Heo
2006-03-24 14:33 ` Jeff Garzik
2006-03-24 16:02   ` [PATCH] libata: cosmetic changes " Tejun Heo
2006-03-24 17:25     ` Jeff Garzik
2006-03-24 17:58       ` Tejun Heo
2006-03-25  4:04         ` Jeff Garzik
2006-03-24 16:33   ` [PATCH] libata: kill E.D.D Tejun Heo
2006-03-24 17:24     ` Jeff Garzik
2006-03-24 18:04     ` Alan Cox
2006-03-24 15:16 ` [PATCH] libata: cosmetic change in ata_bus_softreset() Jeff Garzik

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).