SILI - Work around hardware LRAM bugs part 1/2.
authorMatthew Dillon <dillon@apollo.backplane.com>
Wed, 17 Jun 2009 17:27:00 +0000 (10:27 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Wed, 17 Jun 2009 17:27:00 +0000 (10:27 -0700)
commit2102f407be5b41cdedede78004706649f812a698
treef869bb2ed49a6c49a74071d23f9a404bf2d4ead6
parent03c663bc9abd4a7d2dee7e579548b930ad4421a9
SILI - Work around hardware LRAM bugs part 1/2.

After tearing my hair out a bit and wondering why the Sili chip couldn't
have more then one command pending on a port at a time when talking to a PM,
I found an issue reported in the Linux sili device driver related to its
LRAM.  Basically, reading from the Sili chip's LRAM while commands are active
will corrupt it.

The solution is to use a completely external PRB rather then the PRB in
the LRAM, and use the command activation register to start the command
instead of the command FIFO (which only works for the fixed PRBs in the LRAM).

This commit fixes basic command dispatch but does not yet handle situations
where the RFIS must be read from the LRAM... for example, when reading data
from a PM SCA register or reading sense data from an ATAPI command.  With
this commit I can dd from 5 drives behind a PM in parallel.
sys/dev/disk/sili/fixme [deleted file]
sys/dev/disk/sili/sili.c
sys/dev/disk/sili/sili.h
sys/dev/disk/sili/sili_attach.c