diff options
author | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-06-10 11:51:23 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-06-10 11:51:23 -0400 |
commit | 60eef25701d25e99c991dd0f4a9f3832a0c3ad3e (patch) | |
tree | 6aedae05234660d5e188328c6165a760fbde4727 /drivers/scsi | |
parent | b2d8bfe18578c4e50e8ba52011c9b260a1b51dac (diff) |
[SCSI] spi transport: don't allow dt to be set on SE or HVD buses
This is really just a belt and braces test. The standards require
disks to respond DT not capable on a non-LVD bus ... however, not all
disks follow the standards ...
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/scsi_transport_spi.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c index 5829f97a2068..ace49d5bd9c4 100644 --- a/drivers/scsi/scsi_transport_spi.c +++ b/drivers/scsi/scsi_transport_spi.c | |||
@@ -785,6 +785,7 @@ spi_dv_device_internal(struct scsi_device *sdev, u8 *buffer) | |||
785 | { | 785 | { |
786 | struct spi_internal *i = to_spi_internal(sdev->host->transportt); | 786 | struct spi_internal *i = to_spi_internal(sdev->host->transportt); |
787 | struct scsi_target *starget = sdev->sdev_target; | 787 | struct scsi_target *starget = sdev->sdev_target; |
788 | struct Scsi_Host *shost = sdev->host; | ||
788 | int len = sdev->inquiry_len; | 789 | int len = sdev->inquiry_len; |
789 | /* first set us up for narrow async */ | 790 | /* first set us up for narrow async */ |
790 | DV_SET(offset, 0); | 791 | DV_SET(offset, 0); |
@@ -844,6 +845,14 @@ spi_dv_device_internal(struct scsi_device *sdev, u8 *buffer) | |||
844 | if (spi_min_period(starget) == 8) | 845 | if (spi_min_period(starget) == 8) |
845 | DV_SET(pcomp_en, 1); | 846 | DV_SET(pcomp_en, 1); |
846 | } | 847 | } |
848 | /* now that we've done all this, actually check the bus | ||
849 | * signal type (if known). Some devices are stupid on | ||
850 | * a SE bus and still claim they can try LVD only settings */ | ||
851 | if (i->f->get_signalling) | ||
852 | i->f->get_signalling(shost); | ||
853 | if (spi_signalling(shost) == SPI_SIGNAL_SE || | ||
854 | spi_signalling(shost) == SPI_SIGNAL_HVD) | ||
855 | DV_SET(dt, 0); | ||
847 | /* Do the read only INQUIRY tests */ | 856 | /* Do the read only INQUIRY tests */ |
848 | spi_dv_retrain(sdev, buffer, buffer + sdev->inquiry_len, | 857 | spi_dv_retrain(sdev, buffer, buffer + sdev->inquiry_len, |
849 | spi_dv_device_compare_inquiry); | 858 | spi_dv_device_compare_inquiry); |