mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
ieee1394: sbp2: add INQUIRY delay workaround
Add the same workaround as found in fw-sbp2 for feature parity and compatibility of the workarounds module parameter. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Signed-off-by: Jarod Wilson <jwilson@redhat.com>
This commit is contained in:
parent
9220f19462
commit
d94a983526
2 changed files with 14 additions and 0 deletions
|
@ -183,6 +183,9 @@ MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device "
|
|||
* Avoids access beyond actual disk limits on devices with an off-by-one bug.
|
||||
* Don't use this with devices which don't have this bug.
|
||||
*
|
||||
* - delay inquiry
|
||||
* Wait extra SBP2_INQUIRY_DELAY seconds after login before SCSI inquiry.
|
||||
*
|
||||
* - override internal blacklist
|
||||
* Instead of adding to the built-in blacklist, use only the workarounds
|
||||
* specified in the module load parameter.
|
||||
|
@ -195,6 +198,7 @@ MODULE_PARM_DESC(workarounds, "Work around device bugs (default = 0"
|
|||
", 36 byte inquiry = " __stringify(SBP2_WORKAROUND_INQUIRY_36)
|
||||
", skip mode page 8 = " __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
|
||||
", fix capacity = " __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
|
||||
", delay inquiry = " __stringify(SBP2_WORKAROUND_DELAY_INQUIRY)
|
||||
", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
|
||||
", or a combination)");
|
||||
|
||||
|
@ -357,6 +361,11 @@ static const struct {
|
|||
.workarounds = SBP2_WORKAROUND_INQUIRY_36 |
|
||||
SBP2_WORKAROUND_MODE_SENSE_8,
|
||||
},
|
||||
/* DViCO Momobay FX-3A with TSB42AA9A bridge */ {
|
||||
.firmware_revision = 0x002800,
|
||||
.model_id = 0x000000,
|
||||
.workarounds = SBP2_WORKAROUND_DELAY_INQUIRY,
|
||||
},
|
||||
/* Initio bridges, actually only needed for some older ones */ {
|
||||
.firmware_revision = 0x000200,
|
||||
.model_id = SBP2_ROM_VALUE_WILDCARD,
|
||||
|
@ -914,6 +923,9 @@ static int sbp2_start_device(struct sbp2_lu *lu)
|
|||
sbp2_agent_reset(lu, 1);
|
||||
sbp2_max_speed_and_size(lu);
|
||||
|
||||
if (lu->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
|
||||
ssleep(SBP2_INQUIRY_DELAY);
|
||||
|
||||
error = scsi_add_device(lu->shost, 0, lu->ud->id, 0);
|
||||
if (error) {
|
||||
SBP2_ERR("scsi_add_device failed");
|
||||
|
|
|
@ -343,6 +343,8 @@ enum sbp2lu_state_types {
|
|||
#define SBP2_WORKAROUND_INQUIRY_36 0x2
|
||||
#define SBP2_WORKAROUND_MODE_SENSE_8 0x4
|
||||
#define SBP2_WORKAROUND_FIX_CAPACITY 0x8
|
||||
#define SBP2_WORKAROUND_DELAY_INQUIRY 0x10
|
||||
#define SBP2_INQUIRY_DELAY 12
|
||||
#define SBP2_WORKAROUND_OVERRIDE 0x100
|
||||
|
||||
#endif /* SBP2_H */
|
||||
|
|
Loading…
Reference in a new issue