Data Overruns while WRITING in Ultra Wide Transfers in AHC2940
Sarnath Kannan
stellium_79 at hotmail.com
Wed Oct 1 03:57:06 PDT 2003
Hi,
Setup:
---------
I have ported the FreeBSD Aic7xxx driver to a proprietary OS. The OS runs on
a MP box and has the AHC2940U card programmed in Target Mode. I have also
implemented a "SD" device server that uses the AHC2940U card as a target
port. The intent is to provide a high-IO-throughput-interface via the
AHC2940U card. A Linux initiator is connected to the AHC2940U card via a
68-pin SCSI-3 connector. The Linux box also uses a AHC2940U card as the
initiator port. These are the only 2 devices sitting on the cable and the
cable length is roughly 0.5 Meter.
Both the devices have negotiated synchronous FAST20 and WIDE transfers. i.e.
40MegaTransfers per second. Linux detects my target as "sda" and I generate
all IOs using this interface. I use
the "dd" program to generate IO on the target.
My driver works via Polling and I have disabled CMD_CMPLT interrupts in
firmware. So I get interrupted only for SEQUENCER and SCSI interrupts.
Problem Description:
----------------------------
1) All reads go thru properly.
2) All WRITES cause DATA OVERRUN to occur on the INITIATOR SIDE (DATA OUT
PHASE). The target side does not complain anything. IO finishes without
residuals in the target side. I queue the correct amount of data for each
IO. I have verified this. If I queue 2 bytes less than the actual data
required, the initiator does NOT complain of any OVERRUNS. However an FS
created over such a SCSI
target complains about corrupted free lists etc...
After this, I MESSAGE REJECTed WDTR messages thereby stopping WIDE
transfers. (20 MegaTransfers per second.) With this Setup, WRITES go through
properly without any problem. No overruns, No underruns. Just perfect.
What could be the problem ? Am I missing something in the driver path OR
WRITE path ? OR Has Ultra Transfers got something to do with cable length ?
Should I go for a longer cable ? I currently dont have any alternate cable
with me. I will buy one if the problem is in the cable.
As i understand therez no difference between a SCB queued for READ and WRITE
except for the data direction. Each SCB carries information about the
transfer settings. The SCB_SCSI_RATE - Has info on Synch Transfers, sync
offset and Wide Transfers. FAST20 can be enabled via the SCB_CONTROL field.
The tranfer period requested by the initiator is 0x0C and the req_ack_offset
is 8, which I believe is FAST20 transfers. Please let me know if I am wrong
in my understanding.
Thanks for ur patience,
Regds,
Sarnath
_________________________________________________________________
The coolest deals. The hottest offers. http://www.msn.co.in/shopping All now
online for you!
More information about the aic7xxx
mailing list