Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 130411
b: refs/heads/master
c: f746072
h: refs/heads/master
i:
  130409: 10f4321
  130407: 8fb5256
v: v3
  • Loading branch information
Stefan Richter committed Jan 28, 2009
1 parent 65c06f6 commit e0636df
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a08e100aece16e33a45b82924ad85f4066c4ed1c
refs/heads/master: f746072abc12d0e10ecd7847f1846157fde15987
23 changes: 12 additions & 11 deletions trunk/drivers/firewire/fw-sbp2.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,14 +311,16 @@ struct sbp2_command_orb {
dma_addr_t page_table_bus;
};

#define SBP2_ROM_VALUE_WILDCARD ~0 /* match all */
#define SBP2_ROM_VALUE_MISSING 0xff000000 /* not present in the unit dir. */

/*
* List of devices with known bugs.
*
* The firmware_revision field, masked with 0xffff00, is the best
* indicator for the type of bridge chip of a device. It yields a few
* false positives but this did not break correctly behaving devices
* so far. We use ~0 as a wildcard, since the 24 bit values we get
* from the config rom can never match that.
* so far.
*/
static const struct {
u32 firmware_revision;
Expand All @@ -340,22 +342,22 @@ static const struct {
},
/* Initio bridges, actually only needed for some older ones */ {
.firmware_revision = 0x000200,
.model = ~0,
.model = SBP2_ROM_VALUE_WILDCARD,
.workarounds = SBP2_WORKAROUND_INQUIRY_36,
},
/* PL-3507 bridge with Prolific firmware */ {
.firmware_revision = 0x012800,
.model = ~0,
.model = SBP2_ROM_VALUE_WILDCARD,
.workarounds = SBP2_WORKAROUND_POWER_CONDITION,
},
/* Symbios bridge */ {
.firmware_revision = 0xa0b800,
.model = ~0,
.model = SBP2_ROM_VALUE_WILDCARD,
.workarounds = SBP2_WORKAROUND_128K_MAX_TRANS,
},
/* Datafab MD2-FW2 with Symbios/LSILogic SYM13FW500 bridge */ {
.firmware_revision = 0x002600,
.model = ~0,
.model = SBP2_ROM_VALUE_WILDCARD,
.workarounds = SBP2_WORKAROUND_128K_MAX_TRANS,
},

Expand Down Expand Up @@ -1093,7 +1095,7 @@ static void sbp2_init_workarounds(struct sbp2_target *tgt, u32 model,
continue;

if (sbp2_workarounds_table[i].model != model &&
sbp2_workarounds_table[i].model != ~0)
sbp2_workarounds_table[i].model != SBP2_ROM_VALUE_WILDCARD)
continue;

w |= sbp2_workarounds_table[i].workarounds;
Expand Down Expand Up @@ -1143,14 +1145,13 @@ static int sbp2_probe(struct device *dev)
fw_device_get(device);
fw_unit_get(unit);

/* Initialize to values that won't match anything in our table. */
firmware_revision = 0xff000000;
model = 0xff000000;

/* implicit directory ID */
tgt->directory_id = ((unit->directory - device->config_rom) * 4
+ CSR_CONFIG_ROM) & 0xffffff;

firmware_revision = SBP2_ROM_VALUE_MISSING;
model = SBP2_ROM_VALUE_MISSING;

if (sbp2_scan_unit_dir(tgt, unit->directory, &model,
&firmware_revision) < 0)
goto fail_tgt_put;
Expand Down

0 comments on commit e0636df

Please sign in to comment.