PATCH: Allow setting burst length for 53C700
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 reliable with a 4 word burst length.
Thomas.
Quoted 1 line
From
eb46a70296fd0615ac7d8ee036d0554e8d30c1f2Mon Sep 17 00:00:00 2001
From: Thomas Bogendoerfer <[email protected]>
Date: Mon, 25 Dec 2006 20:48:34 +0100
Subject: [PATCH] change burst_disable to burst_length to allow setting of different burst lengths
--- drivers/scsi/53c700.c | 24 +++++++++++++++++++++--- drivers/scsi/53c700.h | 2 +- drivers/scsi/lasi700.c | 1 + drivers/scsi/sim710.c | 1 + 4 files changed, 24 insertions(+), 4 deletions(-)
drivers/scsi/53c700.c +21 -3
@@ -667,12 +667,30 @@ NCR_700_chip_setup(struct Scsi_Host *hos__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 );
drivers/scsi/53c700.h +1 -1
@@ -203,7 +203,7 @@ #ifdef CONFIG_53C700_LE_ON_BE __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
drivers/scsi/lasi700.c +1 -0
@@ -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);
drivers/scsi/sim710.c +1 -0
@@ -123,6 +123,7 @@ sim710_probe_common(struct device *dev, 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))
Signature · 6 lines
1.4.3.2 -- Crap can work. Given enough thrust pigs will fly, but it's not necessary a good idea. [ RFC1925, 2.3 ]