|
@@ -2035,14 +2035,17 @@ static void macb_reset_hw(struct macb *bp)
|
|
|
{
|
|
|
struct macb_queue *queue;
|
|
|
unsigned int q;
|
|
|
+ u32 ctrl = macb_readl(bp, NCR);
|
|
|
|
|
|
/* Disable RX and TX (XXX: Should we halt the transmission
|
|
|
* more gracefully?)
|
|
|
*/
|
|
|
- macb_writel(bp, NCR, 0);
|
|
|
+ ctrl &= ~(MACB_BIT(RE) | MACB_BIT(TE));
|
|
|
|
|
|
/* Clear the stats registers (XXX: Update stats first?) */
|
|
|
- macb_writel(bp, NCR, MACB_BIT(CLRSTAT));
|
|
|
+ ctrl |= MACB_BIT(CLRSTAT);
|
|
|
+
|
|
|
+ macb_writel(bp, NCR, ctrl);
|
|
|
|
|
|
/* Clear all status flags */
|
|
|
macb_writel(bp, TSR, -1);
|
|
@@ -2230,7 +2233,7 @@ static void macb_init_hw(struct macb *bp)
|
|
|
}
|
|
|
|
|
|
/* Enable TX and RX */
|
|
|
- macb_writel(bp, NCR, MACB_BIT(RE) | MACB_BIT(TE) | MACB_BIT(MPE));
|
|
|
+ macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(RE) | MACB_BIT(TE));
|
|
|
}
|
|
|
|
|
|
/* The hash address register is 64 bits long and takes up two
|