tsec: Wait for both RX and TX to stop
authorAndy Fleming <afleming@freescale.com>
Mon, 19 Apr 2010 19:54:49 +0000 (14:54 -0500)
committerBen Warren <biggerbadderben@gmail.com>
Mon, 3 May 2010 21:52:48 +0000 (14:52 -0700)
When gracefully stopping the controller, the driver was continuing if
*either* RX or TX had stopped.  We need to wait for both, or the
controller could get into an invalid state.

Signed-off-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
drivers/net/tsec.c

index fd49eff183d0adff2b152b75f0e411d69499c368..3e4c3bd31b98231ce83f3bc2bba74865d4acadca 100644 (file)
@@ -1082,7 +1082,8 @@ static void tsec_halt(struct eth_device *dev)
        regs->dmactrl &= ~(DMACTRL_GRS | DMACTRL_GTS);
        regs->dmactrl |= (DMACTRL_GRS | DMACTRL_GTS);
 
-       while (!(regs->ievent & (IEVENT_GRSC | IEVENT_GTSC))) ;
+       while ((regs->ievent & (IEVENT_GRSC | IEVENT_GTSC))
+               != (IEVENT_GRSC | IEVENT_GTSC)) ;
 
        regs->maccfg1 &= ~(MACCFG1_TX_EN | MACCFG1_RX_EN);