Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

b43: Relax requirement for descriptors to be in the DMA zone

When 64-bit DMA was first used, there were problems with the
BCM4311 (14e4:4311). The problem was "fixed" by using the GFP_DMA
flag in the allocation of coherent ring descriptor memory.

The original problem is now believed to have been due to bugs in
the 64-bit DMA implementation in the rest of the kernel, and that
those bugs have been fixed. Accordingly, the requirement for the
descriptors to be in the DMA zone is relaxed.

Bounce buffers are left in the DMA zone.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Michael Buesch <m@bues.ch>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Larry Finger and committed by
John W. Linville
996bc370 1eb85d63

-7
-7
drivers/net/wireless/b43/dma.c
··· 423 423 * has shown that 4K is sufficient for the latter as long as the buffer 424 424 * does not cross an 8K boundary. 425 425 * 426 - * For unknown reasons - possibly a hardware error - the BCM4311 rev 427 - * 02, which uses 64-bit DMA, needs the ring buffer in very low memory, 428 - * which accounts for the GFP_DMA flag below. 429 - * 430 - * The flags here must match the flags in free_ringmemory below! 431 426 */ 432 - if (ring->type == B43_DMA_64BIT) 433 - flags |= GFP_DMA; 434 427 ring->descbase = dma_alloc_coherent(ring->dev->dev->dma_dev, 435 428 B43_DMA_RINGMEMSIZE, 436 429 &(ring->dmabase), flags);