Skip to content

Commit

Permalink
wimax/i2400m/sdio: clear the INTR status bit after reading size
Browse files Browse the repository at this point in the history
In order to avoid issues during high-load traffic, the interrupt
status register has to be cleared ONLY after the RX size is read.

Signed-off-by: Cindy H Kao <cindy.h.kao@intel.com>
Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
  • Loading branch information
Cindy H Kao authored and Inaky Perez-Gonzalez committed Oct 19, 2009
1 parent 2093586 commit 339ccc3
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/net/wimax/i2400m/sdio-rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,11 @@ void i2400ms_rx(struct i2400ms *i2400ms)
ret = rx_size;
goto error_get_size;
}
/*
* Hardware quirk: make sure to clear the INTR status register
* AFTER getting the data transfer size.
*/
sdio_writeb(func, 1, I2400MS_INTR_CLEAR_ADDR, &ret);

ret = -ENOMEM;
skb = alloc_skb(rx_size, GFP_ATOMIC);
Expand Down Expand Up @@ -209,7 +214,6 @@ void i2400ms_irq(struct sdio_func *func)
dev_err(dev, "RX: BUG? got IRQ but no interrupt ready?\n");
goto error_no_irq;
}
sdio_writeb(func, 1, I2400MS_INTR_CLEAR_ADDR, &ret);
i2400ms_rx(i2400ms);
error_no_irq:
d_fnend(6, dev, "(i2400ms %p) = void\n", i2400ms);
Expand Down

0 comments on commit 339ccc3

Please sign in to comment.