Hi Karel,
> What do you mean by a mixed system?
Both a PMAZ-A and an I/O ASIC-based controller. They differ.
> I also have a 5000/200 system. Would it be interesting to put the
> PMAZ-AA into that system, and see how it behaves?
Well, the /200's onboard HBA is identical to a PMAZ-A. You don't need to
rearrange hardware, although you may, just to be sure -- if the /200
works, then the problem is almost surely related to write posting
implemented on the KN05 module which we currently don't handle (it's
worked around in the driver in the I/O ASIC-related functions via an ugly
hack).
Just in case I am right, please check if the following hack helps with
your PMAZ-A in your /260.
--
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
+--------------------------------------------------------------+
+ e-mail: macro@ds2.pg.gda.pl, PGP key available +
patch-mips-2.4.19-rc1-20020717-dec_esp-test-0
diff -up --recursive --new-file
linux-mips-2.4.19-rc1-20020717.macro/drivers/scsi/dec_esp.c
linux-mips-2.4.19-rc1-20020717/drivers/scsi/dec_esp.c
--- linux-mips-2.4.19-rc1-20020717.macro/drivers/scsi/dec_esp.c 2002-04-10
02:58:49.000000000 +0000
+++ linux-mips-2.4.19-rc1-20020717/drivers/scsi/dec_esp.c 2002-07-17
13:24:59.000000000 +0000
@@ -486,12 +486,15 @@ static void pmaz_dma_drain(struct NCR_ES
static void pmaz_dma_init_read(struct NCR_ESP *esp, __u32 vaddress, int length)
{
volatile int *dmareg = (volatile int *) (esp->slot + DEC_SCSI_DMAREG);
+ volatile unsigned int *dummy = (volatile unsigned int *)KSEG1;
if (length > ESP_TGT_DMA_SIZE)
length = ESP_TGT_DMA_SIZE;
*dmareg = TC_ESP_DMA_ADDR(esp->slot + DEC_SCSI_SRAM + ESP_TGT_DMA_SIZE);
+ *dummy;
+
esp_virt_buffer = vaddress;
scsi_current_length = length;
}
@@ -499,6 +502,7 @@ static void pmaz_dma_init_read(struct NC
static void pmaz_dma_init_write(struct NCR_ESP *esp, __u32 vaddress, int
length)
{
volatile int *dmareg = (volatile int *) ( esp->slot + DEC_SCSI_DMAREG );
+ volatile unsigned int *dummy = (volatile unsigned int *)KSEG1;
memcpy((void *) (esp->slot + DEC_SCSI_SRAM + ESP_TGT_DMA_SIZE),
KSEG0ADDR((void *) vaddress), length);
@@ -506,6 +510,7 @@ static void pmaz_dma_init_write(struct N
*dmareg = TC_ESP_DMAR_WRITE |
TC_ESP_DMA_ADDR(esp->slot + DEC_SCSI_SRAM + ESP_TGT_DMA_SIZE);
+ *dummy;
}
static void pmaz_dma_ints_off(struct NCR_ESP *esp)
|