Skip to content

Commit

Permalink
[PATCH] bcm43xx: Drain TX status before starting IRQs
Browse files Browse the repository at this point in the history
Drain the Microcode TX-status-FIFO before we enable IRQs.
This is required, because the FIFO may still have entries left
from a previous run. Those would immediately fire after enabling
IRQs and would lead to an oops in the DMA TXstatus handling code.

Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Michael Buesch authored and John W. Linville committed Nov 8, 2006
1 parent edd106f commit ecac598
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions drivers/net/wireless/bcm43xx/bcm43xx_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1463,6 +1463,23 @@ static void handle_irq_transmit_status(struct bcm43xx_private *bcm)
}
}

static void drain_txstatus_queue(struct bcm43xx_private *bcm)
{
u32 dummy;

if (bcm->current_core->rev < 5)
return;
/* Read all entries from the microcode TXstatus FIFO
* and throw them away.
*/
while (1) {
dummy = bcm43xx_read32(bcm, BCM43xx_MMIO_XMITSTAT_0);
if (!dummy)
break;
dummy = bcm43xx_read32(bcm, BCM43xx_MMIO_XMITSTAT_1);
}
}

static void bcm43xx_generate_noise_sample(struct bcm43xx_private *bcm)
{
bcm43xx_shm_write16(bcm, BCM43xx_SHM_SHARED, 0x408, 0x7F7F);
Expand Down Expand Up @@ -3532,6 +3549,7 @@ int bcm43xx_select_wireless_core(struct bcm43xx_private *bcm,
bcm43xx_macfilter_clear(bcm, BCM43xx_MACFILTER_ASSOC);
bcm43xx_macfilter_set(bcm, BCM43xx_MACFILTER_SELF, (u8 *)(bcm->net_dev->dev_addr));
bcm43xx_security_init(bcm);
drain_txstatus_queue(bcm);
ieee80211softmac_start(bcm->net_dev);

/* Let's go! Be careful after enabling the IRQs.
Expand Down

0 comments on commit ecac598

Please sign in to comment.