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