aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbdelkader Boudih <freebsd@seuros.com>2026-07-20 22:47:49 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2026-07-20 22:47:58 +0000
commit23ea903f68017f781ff579325caa01c928612d57 (patch)
tree6440ad031532c90f397d48f02c6ff1d2edbf5003
parent5b7449ad47be4582ff451ce4615753dab4a6f882 (diff)
firewire: force root change when root node is not cycle master capable
When a FireWire bus resets, all devices negotiate who is the new boss. when we detect the root node can't be cycle master, we send a PHY config packet that forces a reelection. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58309
-rw-r--r--sys/dev/firewire/firewire.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c
index cc0cf9e5b7ad..1020aff31929 100644
--- a/sys/dev/firewire/firewire.c
+++ b/sys/dev/firewire/firewire.c
@@ -2491,9 +2491,10 @@ fw_bmr(struct firewire_comm *fc)
cmstr = fc->max_node;
else {
device_printf(fc->bdev,
- "root node is not cycle master capable\n");
- /* TODO: issue PHY config to force root change + bus reset */
- cmstr = fc->nodeid;
+ "root node is not cycle master capable, "
+ "forcing root to node %d\n", fc->nodeid);
+ fw_phy_config(fc, fc->nodeid, -1);
+ return 0;
}
} else
cmstr = -1;