Skip to content

Commit

Permalink
[SCSI] 53c700: Allow setting burst length
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
tsbogend authored and James Bottomley committed Jan 13, 2007
1 parent a8b3485 commit f67a9c1
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 4 deletions.
24 changes: 21 additions & 3 deletions drivers/scsi/53c700.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion drivers/scsi/53c700.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions drivers/scsi/lasi700.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions drivers/scsi/sim710.c
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down

0 comments on commit f67a9c1

Please sign in to comment.