From: Robert Annessi <robert@annessi.at>
To: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Cc: linux-scsi@vger.kernel.org
Subject: Re: dc395x: Report
Date: Mon, 14 Aug 2006 17:01:50 +0200 [thread overview]
Message-ID: <44E0905E.1000003@annessi.at> (raw)
In-Reply-To: <Pine.LNX.4.60.0608132129120.3508@poirot.grange>
[-- Attachment #1.1: Type: text/plain, Size: 2720 bytes --]
On 08/13/06 21:47, Guennadi Liakhovetski wrote:
> Emn, sorry, I have to ask - are you sure this is the correct output
> (applied the patch, recompiled and reloaded the driver)? The output looks
> EXACTLY the same as last time, and this is pretty strange. Well, there is
Yes, I'm sure I applied the patch and used that kernel (freshly built,
no modules used).
> still one semi-logical explanation I can come up with:
>
> at first FIFOCNT = 1 and SCSICNT = 0xfffffe, therefore d_left_counter =
> 0xfffffe + (1 << 1) = 0x1000000. Then after one loop iteration
> d_left_counter = 0xffffff, and now FIFOCNT = 0x40. So we break out of the
> loop with the above funny value of d_left_counter. If this is the case,
> well, I don't know what this value of SCSICNT means and what to do with
> it (in the absence of a datasheet).
>
> To verify this could you, please, replace the printk at line 2335 with
> this one:
>
> printk(KERN_WARNING "dc395x: inconsistent counters: "
> "FIFOCNT %u, SCSICNT %u, left %u, %s\n", fc, sc, d_left_counter,
> srb->dcb->sync_period & WIDE_SYNC ?
> "wide" : "narrow");
Here is the relevant output of dmesg with 2.6.18-rc4 (and your patches):
dc395x: Tekram DC395(U/UW/F), DC315(U) - ASIC TRM-S1040 v2.05, 2004/03/08
PCI: setting IRQ 11 as level-triggered
PCI: Found IRQ 11 for device 0000:00:02.0
dc395x: Used settings: AdapterID=07, Speed=0(20.0MHz), dev_mode=0x37
dc395x: AdaptMode=0x4e, Tags=0(01), DelayReset=1s
dc395x: (Wide) Connectors: int68 Termination: Auto Low High
dc395x: Performing initial SCSI bus reset
scsi0 : Tekram DC395(U/UW/F), DC315(U) - ASIC TRM-S1040 v2.05, 2004/03/08
dc395x: Target 00: Wide16 Sync: 48ns Offset 15 (41.7 MB/s)
Vendor: SEAGATE Model: ST3146807LC Rev: 0007
Type: Direct-Access ANSI SCSI revision: 03
SCSI device sda: 286749488 512-byte hdwr sectors (146816 MB)
dc395x: inconsistent counters: FIFOCNT 64, SCSICNT 16777214, left
16777215, wide
sda: Write Protect is off
sda: Mode Sense: ab 00 10 08
dc395x: inconsistent counters: FIFOCNT 64, SCSICNT 16777214, left
16777215, wide
SCSI device sda: drive cache: write back w/ FUA
SCSI device sda: 286749488 512-byte hdwr sectors (146816 MB)
dc395x: inconsistent counters: FIFOCNT 64, SCSICNT 16777214, left
16777215, wide
sda: Write Protect is off
sda: Mode Sense: ab 00 10 08
dc395x: inconsistent counters: FIFOCNT 64, SCSICNT 16777214, left
16777215, wide
SCSI device sda: drive cache: write back w/ FUA
sda: unknown partition table
sd 0:0:0:0: Attached scsi disk sda
Just to make sure I attached the patch I used.
Regards,
Robert
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: linux-2.6.18-rc4-dc395x.patch --]
[-- Type: text/x-patch; name="linux-2.6.18-rc4-dc395x.patch", Size: 2250 bytes --]
diff -urN linux-2.6.18-rc4.orig/drivers/scsi/dc395x.c linux-2.6.18-rc4-dc395x/drivers/scsi/dc395x.c
--- linux-2.6.18-rc4.orig/drivers/scsi/dc395x.c 2006-08-13 23:30:21.000000000 +0200
+++ linux-2.6.18-rc4-dc395x/drivers/scsi/dc395x.c 2006-08-13 23:34:05.000000000 +0200
@@ -78,7 +78,7 @@
* Set to disable parts of the driver
*/
/*#define DC395x_NO_DISCONNECT*/
-/*#define DC395x_NO_TAGQ*/
+#define DC395x_NO_TAGQ
/*#define DC395x_NO_SYNC*/
/*#define DC395x_NO_WIDE*/
@@ -2123,7 +2123,7 @@
*/
if (srb->total_xfer_length > DC395x_LASTPIO)
d_left_counter +=
- DC395x_read32(acb, TRM_S1040_SCSI_COUNTER);
+ DC395x_read32(acb, TRM_S1040_SCSI_COUNTER) & ((1 << 24) - 1);
/* Is this a good idea? */
/*clear_fifo(acb, "DOP1"); */
@@ -2253,7 +2253,7 @@
DC395x_read8(acb, TRM_S1040_DMA_FIFOSTAT));
}
/* Now: Check remainig data: The SCSI counters should tell us ... */
- sc = DC395x_read32(acb, TRM_S1040_SCSI_COUNTER);
+ sc = DC395x_read32(acb, TRM_S1040_SCSI_COUNTER) & ((1 << 24) - 1);
fc = DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT);
d_left_counter = sc + ((fc & 0x1f)
<< ((srb->dcb->sync_period & WIDE_SYNC) ? 1 :
@@ -2307,6 +2307,14 @@
while (len) {
u8 byte;
+
+ fc = DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT);
+
+ if (fc == 0x40) {
+ left_io = 0;
+ break;
+ }
+
byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
*virt++ = byte;
@@ -2317,16 +2325,16 @@
sg_subtract_one(srb);
len--;
-
- fc = DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT);
-
- if (fc == 0x40) {
- left_io = 0;
- break;
- }
}
- WARN_ON((fc != 0x40) == !d_left_counter);
+ if (((fc != 0x40) && !d_left_counter) ||
+ ((fc == 0x40) && d_left_counter &&
+ (!(srb->dcb->sync_period & WIDE_SYNC)
+ || d_left_counter != 1)))
+ printk(KERN_WARNING "dc395x: inconsistent counters: "
+ "FIFOCNT %u, SCSICNT %u, left %u, %s\n", fc, sc, d_left_counter,
+ srb->dcb->sync_period & WIDE_SYNC ?
+ "wide" : "narrow");
if (fc == 0x40 && (srb->dcb->sync_period & WIDE_SYNC)) {
/* Read the last byte ... */
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
next prev parent reply other threads:[~2006-08-14 15:02 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-01 11:54 dc395x: Report Robert Annessi
2006-08-01 23:24 ` Guennadi Liakhovetski
2006-08-02 9:35 ` Robert Annessi
2006-08-02 9:51 ` Robert Annessi
2006-08-02 10:11 ` Guennadi Liakhovetski
2006-08-02 14:52 ` Robert Annessi
2006-08-02 22:07 ` Guennadi Liakhovetski
2006-08-02 23:24 ` Robert Annessi
2006-08-12 18:06 ` Guennadi Liakhovetski
2006-08-13 18:35 ` Robert Annessi
2006-08-13 19:47 ` Guennadi Liakhovetski
2006-08-14 15:01 ` Robert Annessi [this message]
2006-08-17 20:57 ` Guennadi Liakhovetski
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=44E0905E.1000003@annessi.at \
--to=robert@annessi.at \
--cc=g.liakhovetski@gmx.de \
--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.