]> err.no Git - linux-2.6/commitdiff
[SCSI] 53c700: Allow setting burst length
authorThomas Bogendoerfer <tsbogend@alpha.franken.de>
Mon, 25 Dec 2006 20:30:08 +0000 (21:30 +0100)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Sat, 13 Jan 2007 19:44:30 +0000 (13:44 -0600)
This is a patch, which allows not only disabling bursting but to specify
different burst lenghts. This feature is needed to get the 53c700 driver
working for the onboard SCSI controller of SNI RM machines, which only
work reliably with a 4 word burst length.

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/53c700.c
drivers/scsi/53c700.h
drivers/scsi/lasi700.c
drivers/scsi/sim710.c

index 68103e508db7077455dd437db6eae86797d63c0c..88e061d13d0bd69355e6f060b7a8b9c5e5e331fb 100644 (file)
@@ -667,12 +667,30 @@ NCR_700_chip_setup(struct Scsi_Host *host)
        __u8 min_xferp = (hostdata->chip710 ? NCR_710_MIN_XFERP : NCR_700_MIN_XFERP);
 
        if(hostdata->chip710) {
-               __u8 burst_disable = hostdata->burst_disable
-                       ? BURST_DISABLE : 0;
+               __u8 burst_disable = 0;
+               __u8 burst_length = 0;
+
+               switch (hostdata->burst_length) {
+                       case 1:
+                               burst_length = BURST_LENGTH_1;
+                               break;
+                       case 2:
+                               burst_length = BURST_LENGTH_2;
+                               break;
+                       case 4:
+                               burst_length = BURST_LENGTH_4;
+                               break;
+                       case 8:
+                               burst_length = BURST_LENGTH_8;
+                               break;
+                       default:
+                               burst_disable = BURST_DISABLE;
+                               break;
+               }
                dcntl_extra = COMPAT_700_MODE;
 
                NCR_700_writeb(dcntl_extra, host, DCNTL_REG);
-               NCR_700_writeb(BURST_LENGTH_8  | hostdata->dmode_extra,
+               NCR_700_writeb(burst_length | hostdata->dmode_extra,
                               host, DMODE_710_REG);
                NCR_700_writeb(burst_disable | (hostdata->differential ? 
                                                DIFF : 0), host, CTEST7_REG);
index f38822db4210886f8654c33bd03a3e2dd15635b9..841e1bb27d57eb54ae0142c2c64e4009fdb1cc51 100644 (file)
@@ -203,7 +203,7 @@ struct NCR_700_Host_Parameters {
        __u32   force_le_on_be:1;
 #endif
        __u32   chip710:1;      /* set if really a 710 not 700 */
-       __u32   burst_disable:1;        /* set to 1 to disable 710 bursting */
+       __u32   burst_length:4; /* set to 0 to disable 710 bursting */
 
        /* NOTHING BELOW HERE NEEDS ALTERING */
        __u32   fast:1;         /* if we can alter the SCSI bus clock
index f0871c3ac3d98d279a7d465c487b3b7bd70da65d..2aae1b081fcf405ee864f0284effe43ff3e45aec 100644 (file)
@@ -123,6 +123,7 @@ lasi700_probe(struct parisc_device *dev)
                hostdata->force_le_on_be = 0;
                hostdata->chip710 = 1;
                hostdata->dmode_extra = DMODE_FC2;
+               hostdata->burst_length = 8;
        }
 
        host = NCR_700_detect(&lasi700_template, hostdata, &dev->dev);
index 551baccec5230c57ec2fb3bcdf714d7969fe1fab..018c65f73ac48e8fef3350e17f346fab8cfff2d1 100644 (file)
@@ -123,6 +123,7 @@ sim710_probe_common(struct device *dev, unsigned long base_addr,
        hostdata->differential = differential;
        hostdata->clock = clock;
        hostdata->chip710 = 1;
+       hostdata->burst_length = 8;
 
        /* and register the chip */
        if((host = NCR_700_detect(&sim710_driver_template, hostdata, dev))