Loading drivers/firewire/fw-sbp2.c +12 −11 Original line number Original line Diff line number Diff line Loading @@ -311,14 +311,16 @@ struct sbp2_command_orb { dma_addr_t page_table_bus; 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. * List of devices with known bugs. * * * The firmware_revision field, masked with 0xffff00, is the best * The firmware_revision field, masked with 0xffff00, is the best * indicator for the type of bridge chip of a device. It yields a few * indicator for the type of bridge chip of a device. It yields a few * false positives but this did not break correctly behaving devices * 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 * so far. * from the config rom can never match that. */ */ static const struct { static const struct { u32 firmware_revision; u32 firmware_revision; Loading @@ -340,22 +342,22 @@ static const struct { }, }, /* Initio bridges, actually only needed for some older ones */ { /* Initio bridges, actually only needed for some older ones */ { .firmware_revision = 0x000200, .firmware_revision = 0x000200, .model = ~0, .model = SBP2_ROM_VALUE_WILDCARD, .workarounds = SBP2_WORKAROUND_INQUIRY_36, .workarounds = SBP2_WORKAROUND_INQUIRY_36, }, }, /* PL-3507 bridge with Prolific firmware */ { /* PL-3507 bridge with Prolific firmware */ { .firmware_revision = 0x012800, .firmware_revision = 0x012800, .model = ~0, .model = SBP2_ROM_VALUE_WILDCARD, .workarounds = SBP2_WORKAROUND_POWER_CONDITION, .workarounds = SBP2_WORKAROUND_POWER_CONDITION, }, }, /* Symbios bridge */ { /* Symbios bridge */ { .firmware_revision = 0xa0b800, .firmware_revision = 0xa0b800, .model = ~0, .model = SBP2_ROM_VALUE_WILDCARD, .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS, .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS, }, }, /* Datafab MD2-FW2 with Symbios/LSILogic SYM13FW500 bridge */ { /* Datafab MD2-FW2 with Symbios/LSILogic SYM13FW500 bridge */ { .firmware_revision = 0x002600, .firmware_revision = 0x002600, .model = ~0, .model = SBP2_ROM_VALUE_WILDCARD, .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS, .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS, }, }, Loading Loading @@ -1093,7 +1095,7 @@ static void sbp2_init_workarounds(struct sbp2_target *tgt, u32 model, continue; continue; if (sbp2_workarounds_table[i].model != model && if (sbp2_workarounds_table[i].model != model && sbp2_workarounds_table[i].model != ~0) sbp2_workarounds_table[i].model != SBP2_ROM_VALUE_WILDCARD) continue; continue; w |= sbp2_workarounds_table[i].workarounds; w |= sbp2_workarounds_table[i].workarounds; Loading Loading @@ -1143,14 +1145,13 @@ static int sbp2_probe(struct device *dev) fw_device_get(device); fw_device_get(device); fw_unit_get(unit); fw_unit_get(unit); /* Initialize to values that won't match anything in our table. */ firmware_revision = 0xff000000; model = 0xff000000; /* implicit directory ID */ /* implicit directory ID */ tgt->directory_id = ((unit->directory - device->config_rom) * 4 tgt->directory_id = ((unit->directory - device->config_rom) * 4 + CSR_CONFIG_ROM) & 0xffffff; + CSR_CONFIG_ROM) & 0xffffff; firmware_revision = SBP2_ROM_VALUE_MISSING; model = SBP2_ROM_VALUE_MISSING; if (sbp2_scan_unit_dir(tgt, unit->directory, &model, if (sbp2_scan_unit_dir(tgt, unit->directory, &model, &firmware_revision) < 0) &firmware_revision) < 0) goto fail_tgt_put; goto fail_tgt_put; Loading Loading
drivers/firewire/fw-sbp2.c +12 −11 Original line number Original line Diff line number Diff line Loading @@ -311,14 +311,16 @@ struct sbp2_command_orb { dma_addr_t page_table_bus; 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. * List of devices with known bugs. * * * The firmware_revision field, masked with 0xffff00, is the best * The firmware_revision field, masked with 0xffff00, is the best * indicator for the type of bridge chip of a device. It yields a few * indicator for the type of bridge chip of a device. It yields a few * false positives but this did not break correctly behaving devices * 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 * so far. * from the config rom can never match that. */ */ static const struct { static const struct { u32 firmware_revision; u32 firmware_revision; Loading @@ -340,22 +342,22 @@ static const struct { }, }, /* Initio bridges, actually only needed for some older ones */ { /* Initio bridges, actually only needed for some older ones */ { .firmware_revision = 0x000200, .firmware_revision = 0x000200, .model = ~0, .model = SBP2_ROM_VALUE_WILDCARD, .workarounds = SBP2_WORKAROUND_INQUIRY_36, .workarounds = SBP2_WORKAROUND_INQUIRY_36, }, }, /* PL-3507 bridge with Prolific firmware */ { /* PL-3507 bridge with Prolific firmware */ { .firmware_revision = 0x012800, .firmware_revision = 0x012800, .model = ~0, .model = SBP2_ROM_VALUE_WILDCARD, .workarounds = SBP2_WORKAROUND_POWER_CONDITION, .workarounds = SBP2_WORKAROUND_POWER_CONDITION, }, }, /* Symbios bridge */ { /* Symbios bridge */ { .firmware_revision = 0xa0b800, .firmware_revision = 0xa0b800, .model = ~0, .model = SBP2_ROM_VALUE_WILDCARD, .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS, .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS, }, }, /* Datafab MD2-FW2 with Symbios/LSILogic SYM13FW500 bridge */ { /* Datafab MD2-FW2 with Symbios/LSILogic SYM13FW500 bridge */ { .firmware_revision = 0x002600, .firmware_revision = 0x002600, .model = ~0, .model = SBP2_ROM_VALUE_WILDCARD, .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS, .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS, }, }, Loading Loading @@ -1093,7 +1095,7 @@ static void sbp2_init_workarounds(struct sbp2_target *tgt, u32 model, continue; continue; if (sbp2_workarounds_table[i].model != model && if (sbp2_workarounds_table[i].model != model && sbp2_workarounds_table[i].model != ~0) sbp2_workarounds_table[i].model != SBP2_ROM_VALUE_WILDCARD) continue; continue; w |= sbp2_workarounds_table[i].workarounds; w |= sbp2_workarounds_table[i].workarounds; Loading Loading @@ -1143,14 +1145,13 @@ static int sbp2_probe(struct device *dev) fw_device_get(device); fw_device_get(device); fw_unit_get(unit); fw_unit_get(unit); /* Initialize to values that won't match anything in our table. */ firmware_revision = 0xff000000; model = 0xff000000; /* implicit directory ID */ /* implicit directory ID */ tgt->directory_id = ((unit->directory - device->config_rom) * 4 tgt->directory_id = ((unit->directory - device->config_rom) * 4 + CSR_CONFIG_ROM) & 0xffffff; + CSR_CONFIG_ROM) & 0xffffff; firmware_revision = SBP2_ROM_VALUE_MISSING; model = SBP2_ROM_VALUE_MISSING; if (sbp2_scan_unit_dir(tgt, unit->directory, &model, if (sbp2_scan_unit_dir(tgt, unit->directory, &model, &firmware_revision) < 0) &firmware_revision) < 0) goto fail_tgt_put; goto fail_tgt_put; Loading