On 10/21/2009 04:16 PM, Chris Vine wrote:
> On Wed, 21 Oct 2009 14:30:49 -0500
> Larry Finger <[email protected]> wrote:
>> On 10/20/2009 04:56 PM, Chris Vine wrote:
>>> On Mon, 19 Oct 2009 16:53:24 -0500
>>> Larry Finger <[email protected]> wrote:
>>>> This set of dmesg outputs was better; however, please set
>>>> CONFIG_B43_DEBUG=y in your configuration and rebuild the kernel.
>>>> Please post the full dmesg for warm and cold reboot.
>>
>> Thanks for the output. Unfortunately, it all looks normal.
>>
>> On auditing the  DMA code for b43, I re-discovered a work-around that
>> was necessary for the first card that had 64-bit DMA, namely a 4311/2.
>> The fix for that is not needed for the 4315 card. Please apply the
>> attached patch (b43_change_dma_flags) to see if it fixes the problem.
>>
>> If this patch does not fix the problem, I am working on a second to
>> try to do further debugging.
> 
> Hi,
> 
> It doesn't fix it, I'm afraid.

Then try this patch without the previous one. It will generate some
warnings but they are harmless.

Larry
Index: wireless-testing/drivers/net/wireless/b43/dma.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/b43/dma.c
+++ wireless-testing/drivers/net/wireless/b43/dma.c
@@ -330,6 +330,7 @@ static inline
                              unsigned char *buf, size_t len, int tx)
 {
        dma_addr_t dmaaddr;
+       static int count;
 
        if (tx) {
                dmaaddr = ssb_dma_map_single(ring->dev->dev,
@@ -339,6 +340,8 @@ static inline
                                             buf, len, DMA_FROM_DEVICE);
        }
 
+       if (count++ < 10)
+               b43dbg(ring->dev->wl, "DMA Address in map_descbuffer: 0x%X\n", 
dmaaddr);
        return dmaaddr;
 }
 
@@ -386,6 +389,7 @@ static inline
 static int alloc_ringmemory(struct b43_dmaring *ring)
 {
        gfp_t flags = GFP_KERNEL;
+       static int count;
 
        /* The specs call for 4K buffers for 30- and 32-bit DMA with 4K
         * alignment and 8K buffers for 64-bit DMA with 8K alignment. Testing
@@ -407,6 +411,8 @@ static int alloc_ringmemory(struct b43_d
                b43err(ring->dev->wl, "DMA ringmemory allocation failed\n");
                return -ENOMEM;
        }
+       if (count++ < 10)
+               b43dbg(ring->dev->wl, "DMA ringmemory location: 0x%X\n", 
ring->dmabase);
        memset(ring->descbase, 0, B43_DMA_RINGMEMSIZE);
 
        return 0;
@@ -593,6 +599,9 @@ static int setup_rx_descbuffer(struct b4
        dmaaddr = map_descbuffer(ring, skb->data, ring->rx_buffersize, 0);
        if (b43_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize, 0)) {
                /* ugh. try to realloc in zone_dma */
+               if (ring->type == B43_DMA_64BIT)
+                       b43dbg(ring->dev->wl, "b43: DMA mapping error on 64-bit"
+                              " system with dmaaddr: 0x%X\n", dmaaddr);
                gfp_flags |= GFP_DMA;
 
                dev_kfree_skb_any(skb);
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to