[PATCH] B43: Handle DMA RX descriptor underrun

Rafał Miłecki zajec5 at gmail.com
Sun May 5 11:43:25 EDT 2013


2013/5/5 Rafał Miłecki <zajec5 at gmail.com>:
> 2013/4/23 Thommy Jakobsson <thommyj at gmail.com>:
>> Add handling of rx descriptor underflow. This fixes a fault that could
>> happen on slow machines, where data is received faster than the CPU can
>> handle. In such a case the device will use up all rx descriptors and
>> refuse to send any more data before confirming that it is ok. This
>> patch enables necessary interrupt to discover such a situation and will
>> handle them by dropping everything in the ring buffer.
>
> Thommy: does it mean firmware actually ignores what we write to the
> B43_DMA64_RXINDEX (recently renamed to the B43_DMA64_RXSTOPINDEX)? Is
> our set_current_rxslot and op64_set_current_rxslot (same for 32bit
> version) useless in this situation?

I've also grab some old logs from BCM4311 from wl driver.

DMA setup:
write32 0xfaafc210 <- 0x0000083d	B43_DMA32_RXCTL
write32 0xfaafc214 <- 0x5581e000	B43_DMA32_RXRING
write32 0xfaafc218 <- 0x00000100	B43_DMA32_RXINDEX

While running:

 read32 0xfaafc21c -> 0x02001018	B43_DMA32_RXSTATUS
 read32 0xfaafc21c -> 0x02001018	B43_DMA32_RXSTATUS
 read32 0xfaafc180 -> 0x0006230f	
 read32 0xfaafc184 -> 0x00000000	
write32 0xfaafc218 <- 0x00000118	B43_DMA32_RXINDEX

(...)

 read32 0xfaafc21c -> 0x02801020	B43_DMA32_RXSTATUS
 read32 0xfaafc21c -> 0x02801020	B43_DMA32_RXSTATUS
 read32 0xfaafc180 -> 0x00064c28	
 read32 0xfaafc184 -> 0x00000000	
write32 0xfaafc218 <- 0x00000120	B43_DMA32_RXINDEX

Interesting part is that they write amount of slots + slot index to
the B43_DMA32_RXINDEX (like 0x120 instead of 0x20). May be worth
investigating.

-- 
Rafał



More information about the b43-dev mailing list