[PATCH] Fix Tx engine race for good
It finally dawned on me how to eliminate the race I've been narrowing
down with earlier patches: Instead of writing the command registers as
one word, write them one at a time (as bytes). The race was for settings
bits in ChipCmd and ChipCmd1 (0x09) against the chip clearing CmdTxOn
which is in ChipCmd.
In addition to writing single bytes, the fix requires a switch from
using bit 5 in ChipCmd0 to bit 5 in ChipCmd1 (which is equivalent)
to signal Tx demand.
Also, don't restart Rx engine "pre-emptively" in rhine_rx, that's a
sure way to race with the chip.
Introduce RHINE_WAIT_FOR, a macro for small busy loops with primitive
completion checking.
Signed-off-by:
Roger Luethi <rl@hellgate.ch>
Showing
Please register or sign in to comment