mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
[SCSI] aic79xx: make driver respect nvram for IU and QAS settings
This patch allows the Adaptec firmware to pass on its values for Packetize and QAS. To do this, the settings max_iu and max_qas have been introduced into the SPI transport class and populated from the adaptec NVram tables. Domain validation in the SPI transport class will respect the max settings when configuring to the highest possible speed for testing. Signed-off-by: James Bottomley <[email protected]>
This commit is contained in:
parent
4aa312b96f
commit
ea4431906d
3 changed files with 21 additions and 11 deletions
|
|
@ -627,19 +627,15 @@ ahd_linux_target_alloc(struct scsi_target *starget)
|
|||
starget->id, &tstate);
|
||||
|
||||
if ((flags & CFPACKETIZED) == 0) {
|
||||
/* Do not negotiate packetized transfers */
|
||||
spi_rd_strm(starget) = 0;
|
||||
spi_pcomp_en(starget) = 0;
|
||||
spi_rti(starget) = 0;
|
||||
spi_wr_flow(starget) = 0;
|
||||
spi_hold_mcs(starget) = 0;
|
||||
/* don't negotiate packetized (IU) transfers */
|
||||
spi_max_iu(starget) = 0;
|
||||
} else {
|
||||
if ((ahd->features & AHD_RTI) == 0)
|
||||
spi_rti(starget) = 0;
|
||||
}
|
||||
|
||||
if ((flags & CFQAS) == 0)
|
||||
spi_qas(starget) = 0;
|
||||
spi_max_qas(starget) = 0;
|
||||
|
||||
/* Transinfo values have been set to BIOS settings */
|
||||
spi_max_width(starget) = (flags & CFWIDEB) ? 1 : 0;
|
||||
|
|
|
|||
|
|
@ -234,8 +234,10 @@ static int spi_setup_transport_attrs(struct transport_container *tc,
|
|||
spi_width(starget) = 0; /* narrow */
|
||||
spi_max_width(starget) = 1;
|
||||
spi_iu(starget) = 0; /* no IU */
|
||||
spi_max_iu(starget) = 1;
|
||||
spi_dt(starget) = 0; /* ST */
|
||||
spi_qas(starget) = 0;
|
||||
spi_max_qas(starget) = 1;
|
||||
spi_wr_flow(starget) = 0;
|
||||
spi_rd_strm(starget) = 0;
|
||||
spi_rti(starget) = 0;
|
||||
|
|
@ -360,9 +362,9 @@ static DEVICE_ATTR(field, S_IRUGO, \
|
|||
/* The Parallel SCSI Tranport Attributes: */
|
||||
spi_transport_max_attr(offset, "%d\n");
|
||||
spi_transport_max_attr(width, "%d\n");
|
||||
spi_transport_rd_attr(iu, "%d\n");
|
||||
spi_transport_max_attr(iu, "%d\n");
|
||||
spi_transport_rd_attr(dt, "%d\n");
|
||||
spi_transport_rd_attr(qas, "%d\n");
|
||||
spi_transport_max_attr(qas, "%d\n");
|
||||
spi_transport_rd_attr(wr_flow, "%d\n");
|
||||
spi_transport_rd_attr(rd_strm, "%d\n");
|
||||
spi_transport_rd_attr(rti, "%d\n");
|
||||
|
|
@ -874,13 +876,13 @@ spi_dv_device_internal(struct scsi_device *sdev, u8 *buffer)
|
|||
|
||||
/* try QAS requests; this should be harmless to set if the
|
||||
* target supports it */
|
||||
if (scsi_device_qas(sdev)) {
|
||||
if (scsi_device_qas(sdev) && spi_max_qas(starget)) {
|
||||
DV_SET(qas, 1);
|
||||
} else {
|
||||
DV_SET(qas, 0);
|
||||
}
|
||||
|
||||
if (scsi_device_ius(sdev) && min_period < 9) {
|
||||
if (scsi_device_ius(sdev) && spi_max_iu(starget) && min_period < 9) {
|
||||
/* This u320 (or u640). Set IU transfers */
|
||||
DV_SET(iu, 1);
|
||||
/* Then set the optional parameters */
|
||||
|
|
@ -1412,12 +1414,18 @@ static mode_t target_attribute_is_visible(struct kobject *kobj,
|
|||
else if (attr == &dev_attr_iu.attr &&
|
||||
spi_support_ius(starget))
|
||||
return TARGET_ATTRIBUTE_HELPER(iu);
|
||||
else if (attr == &dev_attr_max_iu.attr &&
|
||||
spi_support_ius(starget))
|
||||
return TARGET_ATTRIBUTE_HELPER(iu);
|
||||
else if (attr == &dev_attr_dt.attr &&
|
||||
spi_support_dt(starget))
|
||||
return TARGET_ATTRIBUTE_HELPER(dt);
|
||||
else if (attr == &dev_attr_qas.attr &&
|
||||
spi_support_qas(starget))
|
||||
return TARGET_ATTRIBUTE_HELPER(qas);
|
||||
else if (attr == &dev_attr_max_qas.attr &&
|
||||
spi_support_qas(starget))
|
||||
return TARGET_ATTRIBUTE_HELPER(qas);
|
||||
else if (attr == &dev_attr_wr_flow.attr &&
|
||||
spi_support_ius(starget))
|
||||
return TARGET_ATTRIBUTE_HELPER(wr_flow);
|
||||
|
|
@ -1447,8 +1455,10 @@ static struct attribute *target_attributes[] = {
|
|||
&dev_attr_width.attr,
|
||||
&dev_attr_max_width.attr,
|
||||
&dev_attr_iu.attr,
|
||||
&dev_attr_max_iu.attr,
|
||||
&dev_attr_dt.attr,
|
||||
&dev_attr_qas.attr,
|
||||
&dev_attr_max_qas.attr,
|
||||
&dev_attr_wr_flow.attr,
|
||||
&dev_attr_rd_strm.attr,
|
||||
&dev_attr_rti.attr,
|
||||
|
|
|
|||
Loading…
Reference in a new issue