linux-mips
[Top] [All Lists]

Re: DECStation: Support for PMAZ-AA TC SCSI card?

To: "Houten K.H.C. van (Karel)" <vhouten@kpn.com>
Subject: Re: DECStation: Support for PMAZ-AA TC SCSI card?
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Date: Wed, 17 Jul 2002 15:35:04 +0200 (MET DST)
Cc: linux-mips@oss.sgi.com
In-reply-to: <200207171216.OAA00433@sparta.research.kpn.com>
Organization: Technical University of Gdansk
Reply-to: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Sender: owner-linux-mips@oss.sgi.com
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)


<Prev in Thread] Current Thread [Next in Thread>