LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Robert Hancock <hancockr@shaw.ca>
To: "Björn Steinbrink" <B.Steinbrink@gmx.de>,
	"Robert Hancock" <hancockr@shaw.ca>,
	"Jeff Garzik" <jeff@garzik.org>, Chr <chunkeey@web.de>,
	"Alistair John Strachan" <s0348365@sms.ed.ac.uk>,
	linux-kernel@vger.kernel.org, htejun@gmail.com,
	jens.axboe@oracle.com, lwalton@real.com
Subject: Re: SATA exceptions with 2.6.20-rc5
Date: Sun, 21 Jan 2007 13:58:01 -0600	[thread overview]
Message-ID: <45B3C5C9.4010007@shaw.ca> (raw)
In-Reply-To: <20070121184032.GA3220@atjola.homenet>

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

Björn Steinbrink wrote:
> All kernels were bad using that approach. So back to square 1. :/
> 
> Björn
> 

OK guys, here's a new patch to try against 2.6.20-rc5:

Right now when switching between ADMA mode and legacy mode (i.e. when 
going from doing normal DMA reads/writes to doing a FLUSH CACHE) we just 
set the ADMA GO register bit appropriately and continue with no delay. 
It looks like in some cases the controller doesn't respond to this 
immediately, it takes some nanoseconds for the controller's status 
registers to reflect the change that was made. It's possible that if we 
were trying to issue commands during this time, the controller might not 
react properly. This patch adds some code to wait for the status 
register to change to the state we asked for before continuing.

-- 
Robert Hancock      Saskatoon, SK, Canada
To email, remove "nospam" from hancockr@nospamshaw.ca
Home Page: http://www.roberthancock.com/


[-- Attachment #2: sata_nv-wait-for-response-on-adma-switch.patch --]
[-- Type: text/plain, Size: 1980 bytes --]

--- linux-2.6.20-rc5/drivers/ata/sata_nv.c	2007-01-19 19:18:53.000000000 -0600
+++ linux-2.6.20-rc5debug/drivers/ata/sata_nv.c	2007-01-21 13:35:17.000000000 -0600
@@ -509,14 +509,38 @@ static void nv_adma_register_mode(struct
 {
 	void __iomem *mmio = nv_adma_ctl_block(ap);
 	struct nv_adma_port_priv *pp = ap->private_data;
-	u16 tmp;
+	u16 tmp, status;
+	int count = 0;
 
 	if (pp->flags & NV_ADMA_PORT_REGISTER_MODE)
 		return;
 
+	status = readw(mmio + NV_ADMA_STAT);
+	while(!(status & NV_ADMA_STAT_IDLE) && count < 20) {
+		ndelay(50);
+		status = readw(mmio + NV_ADMA_STAT);
+		count++;
+	}
+	if(count == 20)
+		ata_port_printk(ap, KERN_WARNING,
+			"timeout waiting for ADMA IDLE, stat=0x%hx\n",
+			status);
+
 	tmp = readw(mmio + NV_ADMA_CTL);
 	writew(tmp & ~NV_ADMA_CTL_GO, mmio + NV_ADMA_CTL);
 
+	count = 0;
+	status = readw(mmio + NV_ADMA_STAT);
+	while(!(status & NV_ADMA_STAT_LEGACY) && count < 20) {
+		ndelay(50);
+		status = readw(mmio + NV_ADMA_STAT);
+		count++;
+	}
+	if(count == 20)
+		ata_port_printk(ap, KERN_WARNING,
+			 "timeout waiting for ADMA LEGACY, stat=0x%hx\n",
+			 status);
+
 	pp->flags |= NV_ADMA_PORT_REGISTER_MODE;
 }
 
@@ -524,7 +548,8 @@ static void nv_adma_mode(struct ata_port
 {
 	void __iomem *mmio = nv_adma_ctl_block(ap);
 	struct nv_adma_port_priv *pp = ap->private_data;
-	u16 tmp;
+	u16 tmp, status;
+	int count = 0;
 
 	if (!(pp->flags & NV_ADMA_PORT_REGISTER_MODE))
 		return;
@@ -534,6 +559,18 @@ static void nv_adma_mode(struct ata_port
 	tmp = readw(mmio + NV_ADMA_CTL);
 	writew(tmp | NV_ADMA_CTL_GO, mmio + NV_ADMA_CTL);
 
+	status = readw(mmio + NV_ADMA_STAT);
+	while(((status & NV_ADMA_STAT_LEGACY) ||
+	      !(status & NV_ADMA_STAT_IDLE)) && count < 20) {
+		ndelay(50);
+		status = readw(mmio + NV_ADMA_STAT);
+		count++;
+	}
+	if(count == 20)
+		ata_port_printk(ap, KERN_WARNING,
+			"timeout waiting for ADMA LEGACY clear and IDLE, stat=0x%hx\n",
+			status);
+
 	pp->flags &= ~NV_ADMA_PORT_REGISTER_MODE;
 }
 

  reply	other threads:[~2007-01-21 19:59 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <fa.hif5u4ZXua+b0mVNaWEcItWv9i0@ifi.uio.no>
2007-01-14 23:43 ` Robert Hancock
2007-01-15  0:22   ` Jeff Garzik
2007-01-15  0:34     ` Björn Steinbrink
2007-01-15  2:47       ` Björn Steinbrink
2007-01-15  2:25     ` Robert Hancock
2007-01-15  2:53       ` Jens Axboe
2007-01-15 13:42         ` Jeff Garzik
2007-01-16  0:23           ` Jens Axboe
2007-01-16  0:36             ` Robert Hancock
2007-01-16  1:51               ` Jeff Garzik
2007-01-16  1:51             ` Jeff Garzik
2007-01-22 18:17               ` Eric D. Mudama
2007-01-15 21:17   ` Björn Steinbrink
2007-01-15 23:46     ` Björn Steinbrink
2007-01-16  0:34       ` Robert Hancock
2007-01-16  1:35         ` Björn Steinbrink
2007-01-16  3:00           ` Robert Hancock
2007-01-16  1:53         ` Jeff Garzik
2007-01-19 15:05           ` Alistair John Strachan
2007-01-19 19:51             ` chunkeey
2007-01-20  2:41             ` Robert Hancock
2007-01-20  2:47               ` Alistair John Strachan
2007-01-20  4:15               ` Björn Steinbrink
     [not found]               ` <20070120072755.GA4652@atjola.homenet>
2007-01-20  7:50                 ` Björn Steinbrink
2007-01-20 18:50               ` Chr
2007-01-20 22:32               ` Chr
2007-01-21  1:50                 ` Robert Hancock
2007-01-21  3:34                   ` Jeff Garzik
2007-01-21  4:54                     ` Björn Steinbrink
2007-01-21  6:39                       ` Robert Hancock
2007-01-21  8:36                         ` Björn Steinbrink
2007-01-21 17:34                           ` Chr
2007-01-21 18:01                             ` Björn Steinbrink
2007-01-21 20:13                               ` Chr
2007-01-22  2:39                                 ` Tejun Heo
2007-01-22 12:32                                   ` Chr
2007-01-21 18:40                           ` Björn Steinbrink
2007-01-21 19:58                             ` Robert Hancock [this message]
2007-01-21 22:08                               ` Björn Steinbrink
2007-01-21 22:11                                 ` Björn Steinbrink
2007-01-21 22:26                                   ` Robert Hancock
2007-01-21 22:27                               ` Björn Steinbrink
2007-01-22  0:17                                 ` Robert Hancock
2007-01-22 16:12                                   ` Björn Steinbrink
2007-01-22 16:57                                     ` Björn Steinbrink
2007-01-22 17:53                                       ` Björn Steinbrink
2007-01-19 14:53         ` Alistair John Strachan
     [not found] <fa.1kBz5luWz8nR0lLqm1VD4hZZYdw@ifi.uio.no>
     [not found] ` <fa.QZxgjxcwtENaZNY24NMTlKBSgIM@ifi.uio.no>
     [not found]   ` <fa.fkPTbUGmKc/1pt0eD6TE4d02n+Q@ifi.uio.no>
     [not found]     ` <fa.6iQt5OtHZ3x5w8eYbLxwULhLTJ0@ifi.uio.no>
     [not found]       ` <fa.1aqo3IxNGJClHcBVZNTagX6bL9o@ifi.uio.no>
     [not found]         ` <fa.rI60BGlFbSyfLyumqmgiOfDqCI4@ifi.uio.no>
2007-01-23 23:18           ` Robert Hancock
2007-01-24  0:39             ` Björn Steinbrink
2007-02-03  1:42               ` Björn Steinbrink
2007-02-03  5:48                 ` Robert Hancock
2007-02-04  1:13                   ` Björn Steinbrink
2007-02-09 12:03                     ` Björn Steinbrink
2007-01-24  8:24             ` Ian Kumlien
2007-01-24 14:41               ` Björn Steinbrink
     [not found] <fa.ow4pXUncgdZmfLf3oyfrn1W+Bk0@ifi.uio.no>
     [not found] ` <fa.SoSeidhDuEr/K0kN+L4vW61Vpnc@ifi.uio.no>
     [not found]   ` <fa.m8QbVQMhuOshKzTdlSjNjOhaNcc@ifi.uio.no>
     [not found]     ` <fa.hDS02YCM8Tv1/STeTpJGEQD/49s@ifi.uio.no>
     [not found]       ` <fa.eqBbU9XvtTizNMpuUjctnk8vuOI@ifi.uio.no>
     [not found]         ` <fa.4QxeKMcmkoyhlL26AivZV6BFQJQ@ifi.uio.no>
2007-01-23  1:24           ` Robert Hancock
2007-01-23  1:34             ` Alistair John Strachan
2007-01-23  1:41               ` Robert Hancock
2007-01-23 15:29                 ` Larry Walton
2007-01-23  2:44             ` Björn Steinbrink
2007-01-23  5:03               ` Robert Hancock
2007-01-20 15:03 Ian Kumlien
2007-01-20 19:59 ` Robert Hancock
2007-01-20 21:43   ` Alistair John Strachan
2007-01-20 22:11     ` Ian Kumlien
     [not found] <fa.U/G88R1fWKOeQK3EBPHKK4MeRsQ@ifi.uio.no>
     [not found] ` <fa.2D0TIXbVTOgZmGg9ZJU+R7te70k@ifi.uio.no>
     [not found]   ` <fa.hMhdefkReYJ4idUyqqEWJFnWUBE@ifi.uio.no>
     [not found]     ` <fa.8TPWeOrcwkkHutPX5NOcJsTBO8Y@ifi.uio.no>
     [not found]       ` <fa.b92BqwV090pDj7q0iBG6BChksbI@ifi.uio.no>
     [not found]         ` <fa.O3RzvckSjB73Y0uL8P1nTXDRd6U@ifi.uio.no>
2007-01-19  0:09           ` Robert Hancock
2007-01-19  0:52             ` Björn Steinbrink
  -- strict thread matches above, loose matches on Subject: below --
2007-01-14 22:44 Björn Steinbrink
2007-01-15  6:48 ` Mikael Pettersson
2007-01-15 13:43   ` Jeff Garzik
2007-01-15 13:47   ` Björn Steinbrink

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=45B3C5C9.4010007@shaw.ca \
    --to=hancockr@shaw.ca \
    --cc=B.Steinbrink@gmx.de \
    --cc=chunkeey@web.de \
    --cc=htejun@gmail.com \
    --cc=jeff@garzik.org \
    --cc=jens.axboe@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lwalton@real.com \
    --cc=s0348365@sms.ed.ac.uk \
    --subject='Re: SATA exceptions with 2.6.20-rc5' \
    /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

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