All of lore.kernel.org
 help / color / mirror / Atom feed
From: Finn Thain <fthain@telegraphics.com.au>
To: David Miller <davem@davemloft.net>
Cc: linux-scsi@vger.kernel.org, linux-m68k@vger.kernel.org
Subject: Re: [PATCH] mac_esp: fix PIO mode
Date: Fri, 4 Dec 2009 23:58:05 +1100 (EST)	[thread overview]
Message-ID: <alpine.OSX.2.00.0912042321220.596@localhost> (raw)
In-Reply-To: <20091202.154045.142858043.davem@davemloft.net>


On Wed, 2 Dec 2009, David Miller wrote:

...
> 
> Can you explain why the esp_slave_configure() part of your patch is 
> necessary?
> 
> > Index: linux-2.6.31/drivers/scsi/esp_scsi.c
> > ===================================================================
> > --- linux-2.6.31.orig/drivers/scsi/esp_scsi.c	2009-11-23 12:52:45.000000000 +1100
> > +++ linux-2.6.31/drivers/scsi/esp_scsi.c	2009-11-23 12:53:30.000000000 +1100
> > @@ -2405,12 +2405,6 @@ static int esp_slave_configure(struct sc
> >  	struct esp_target_data *tp = &esp->target[dev->id];
> >  	int goal_tags, queue_depth;
> >  
> > -	if (esp->flags & ESP_FLAG_DISABLE_SYNC) {
> > -		/* Bypass async domain validation */
> > -		dev->ppr  = 0;
> > -		dev->sdtr = 0;
> > -	}
> > -
> >  	goal_tags = 0;
> >  
> >  	if (dev->tagged_supported) {
> > @@ -2433,6 +2427,11 @@ static int esp_slave_configure(struct sc
> >  	}
> >  	tp->flags |= ESP_TGT_DISCONNECT;
> >  
> > +	if (esp->flags & ESP_FLAG_DISABLE_SYNC) {
> > +		dev->wdtr = spi_support_wide(dev->sdev_target) = 0;
> > +		dev->sdtr = spi_support_sync(dev->sdev_target) = 0;
> > +	}
> > +
> >  	if (!spi_initial_dv(dev->sdev_target))
> >  		spi_dv_device(dev);
> >  

The aim is that domain validation will not test for sync when we know it 
can't work (in PIO mode). This is the result:

mac_esp: using PIO for controller 0
esp: esp0, regs[50f18000:(null)] irq[19]
esp: esp0 is a ESP236, 25 MHz (ccf=5), SCSI ID 7
scsi0 : esp
scsi 0:0:6:0: Direct-Access     QUANTUM  LPS540S          590S PQ: 0 ANSI: 2 CCS
 target0:0:6: Beginning Domain Validation
 target0:0:6: Ending Domain Validation
sd 0:0:6:0: [sda] 1057616 512-byte logical blocks: (541 MB/516 MiB)
sd 0:0:6:0: [sda] Write Protect is off
sd 0:0:6:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

Whereas, without the esp_slave_configure() code, I get this:

scsi0 : esp
scsi 0:0:6:0: Direct-Access     QUANTUM  LPS540S          590S PQ: 0 ANSI: 2 CCS
 target0:0:6: Beginning Domain Validation
 target0:0:6: asynchronous
mac_esp: FIFO is empty (sreg 81)
esp: esp0: DMA length is zero!
esp: esp0: cur adr[010eb082] len[00000000]
 target0:0:6: Domain Validation detected failure, dropping back
 target0:0:6: asynchronous
mac_esp: FIFO is empty (sreg 81)
esp: esp0: DMA length is zero!
esp: esp0: cur adr[010eb082] len[00000000]
 target0:0:6: Domain Validation detected failure, dropping back
 target0:0:6: asynchronous
mac_esp: FIFO is empty (sreg 81)
esp: esp0: DMA length is zero!
esp: esp0: cur adr[010eb082] len[00000000]
 target0:0:6: Domain Validation detected failure, dropping back
 target0:0:6: asynchronous
mac_esp: FIFO is empty (sreg 81)
esp: esp0: DMA length is zero!
esp: esp0: cur adr[010eb082] len[00000000]
 target0:0:6: Domain Validation detected failure, dropping back
 target0:0:6: asynchronous
mac_esp: FIFO is empty (sreg 81)
esp: esp0: DMA length is zero!
esp: esp0: cur adr[010eb082] len[00000000]
 target0:0:6: Domain Validation Failure, dropping back to Asynchronous
 target0:0:6: Domain Validation skipping write tests
 target0:0:6: Ending Domain Validation
sd 0:0:6:0: [sda] 1057616 512-byte logical blocks: (541 MB/516 MiB)
sd 0:0:6:0: [sda] Write Protect is off
sd 0:0:6:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

Which takes longer but gives the same result. The CDROM drive is worse 
however:

scsi0 : esp
scsi 0:0:4:0: CD-ROM            TOSHIBA  CD-ROM XM-5401TA 1036 PQ: 0 ANSI: 2
 target0:0:4: Beginning Domain Validation
 target0:0:4: asynchronous
mac_esp: FIFO is empty (sreg 01)
esp: esp0: Aborting command [010dc940:12]
esp: esp0: Current command [010dc940:12]
esp: esp0: Active command [010dc940:12]
esp: esp0: Dumping command log
esp: esp0: ent[27] CMD val[01] sreg[87] seqreg[01] sreg2[00] ireg[10] ss[00] event[06]
esp: esp0: ent[28] CMD val[10] sreg[87] seqreg[01] sreg2[00] ireg[10] ss[00] event[06]
esp: esp0: ent[29] CMD val[12] sreg[87] seqreg[01] sreg2[00] ireg[08] ss[00] event[06]
esp: esp0: ent[30] EVENT val[0d] sreg[87] seqreg[01] sreg2[00] ireg[08] ss[00] event[06]
...

So the esp driver then retries the aborted command a few times, with 
delays. Multiply those retries by the five domain validation iterations. 
Then, IIRC, the CDROM finally gets offlined at the end of that slow 
process.

I did a quick test, and this works too:

@@ -2405,12 +2405,6 @@ static int esp_slave_configure(struct sc
 	struct esp_target_data *tp = &esp->target[dev->id];
 	int goal_tags, queue_depth;
 
-	if (esp->flags & ESP_FLAG_DISABLE_SYNC) {
-		/* Bypass async domain validation */
-		dev->ppr  = 0;
-		dev->sdtr = 0;
-	}
-
 	goal_tags = 0;
 
 	if (dev->tagged_supported) {  
@@ -2433,6 +2427,9 @@ static int esp_slave_configure(struct sc
 	}
 	tp->flags |= ESP_TGT_DISCONNECT;
 
+	if (esp->flags & ESP_FLAG_DISABLE_SYNC)
+		spi_support_sync(dev->sdev_target) = 0;
+
 	if (!spi_initial_dv(dev->sdev_target))
 		spi_dv_device(dev);
 
I will resubmit the patch like so if you wish. Or you could go ahead and 
make the change.

Finn

  reply	other threads:[~2009-12-04 12:59 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-23  3:57 [PATCH] mac_esp: fix PIO mode Finn Thain
2009-12-02 23:40 ` David Miller
2009-12-04 12:58   ` Finn Thain [this message]
2009-12-04 15:31     ` James Bottomley
2009-12-05  1:30       ` [PATCH] mac_esp: fix PIO mode, take 2 Finn Thain

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=alpine.OSX.2.00.0912042321220.596@localhost \
    --to=fthain@telegraphics.com.au \
    --cc=davem@davemloft.net \
    --cc=linux-m68k@vger.kernel.org \
    --cc=linux-scsi@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.