Here's my reworked patch that supports restarting jackd on DICE devices without powercycling the device (or doing a bus reset).
If you want to try it, killall -9 jackd your running jackd and then try to start jackd again.
JFTR, here are some notes I posted to the devel-ML along with the first patch, so you have a documented rationale. I'm not sure about re-allocating the ISO channels in question with the IRM. It works without, and a quick test revealed that get1394Service().allocateFixedIsoChannelGeneric() returns -1 anyway, so this probably means the ISO channel is still registered. Hence, I've commented out the corresponding block. It can probably be stripped once we know that we don't want it.
I was tired of powercycling my DICE device each time it crashed.
I noticed that FFADO is complaining about ISO channel registers not
being clean (0xFFFFFFFFUL), because they actually contained a sane
Same holds true for the device owner register, FFADO expects the device
to be unoccupied, but that's a little bit too strict, because there's
another "good" case: if the current owner is us, because we were running
before and just crashed on the software side. No need to abort
everything in this case.
Last but not least: GLOBAL_ENABLE usually is true when jackd has
crashed. In this state, we cannot (or at least the current code says so)
switch sample rates and the lot. Consequently, I set GLOBAL_ENABLE to
false when restarting the device to re-enable all those functions.