aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/firewire/core-card.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/drivers/firewire/core-card.c b/drivers/firewire/core-card.c
index faf2eee473b9..ef6f2616cac7 100644
--- a/drivers/firewire/core-card.c
+++ b/drivers/firewire/core-card.c
@@ -369,10 +369,8 @@ static void fw_card_bm_work(struct work_struct *work)
369 goto out; 369 goto out;
370 } else if (root_device_is_cmc) { 370 } else if (root_device_is_cmc) {
371 /* 371 /*
372 * FIXME: I suppose we should set the cmstr bit in the 372 * We will send out a force root packet for this
373 * STATE_CLEAR register of this node, as described in 373 * node as part of the gap count optimization.
374 * 1394-1995, 8.4.2.6. Also, send out a force root
375 * packet for this node.
376 */ 374 */
377 new_root_id = root_id; 375 new_root_id = root_id;
378 } else { 376 } else {
@@ -413,11 +411,25 @@ static void fw_card_bm_work(struct work_struct *work)
413 fw_send_phy_config(card, new_root_id, generation, gap_count); 411 fw_send_phy_config(card, new_root_id, generation, gap_count);
414 fw_core_initiate_bus_reset(card, 1); 412 fw_core_initiate_bus_reset(card, 1);
415 /* Will allocate broadcast channel after the reset. */ 413 /* Will allocate broadcast channel after the reset. */
416 } else { 414 goto out;
417 if (local_id == irm_id)
418 allocate_broadcast_channel(card, generation);
419 } 415 }
420 416
417 if (root_device_is_cmc) {
418 /*
419 * Make sure that the cycle master sends cycle start packets.
420 */
421 card->bm_transaction_data[0] = cpu_to_be32(CSR_STATE_BIT_CMSTR);
422 rcode = fw_run_transaction(card, TCODE_WRITE_QUADLET_REQUEST,
423 root_id, generation, SCODE_100,
424 CSR_REGISTER_BASE + CSR_STATE_SET,
425 card->bm_transaction_data, sizeof(u32));
426 if (rcode == RCODE_GENERATION)
427 goto out;
428 }
429
430 if (local_id == irm_id)
431 allocate_broadcast_channel(card, generation);
432
421 out: 433 out:
422 fw_node_put(root_node); 434 fw_node_put(root_node);
423 out_put_card: 435 out_put_card: