commit 1: The only difference is that with this patch software can learn that the command portion completed on a more timely basis, before the data transfer begins. Ultimately, when the core FSM returns to idle (at the end of the data transfer) it will assert cmd_done regardless -- we should just set it as soon as we know it completed...
commit 2: more of a "coding style" thing: don't use a signal we ourselves hard-set to 1 as part of an "and" expression in a condition check: it's 1, we know it's 1, so even though it wil be optimized out in synthesis, it might cause the reader to wonder if there's a reason we're including it in the check :)