It seems that none of the "special" things that the wl driver does on my
system has any affect on the DMA errors. I would appreciate if one of
you would do the following:

1. Set CONFIG_MMIOTRACE=y in .config.

2. Apply the attached patch 'log_pciconfig' and build the resulting kernel.

3. Copy *_mmio_log to your home directory and make them executable
(chmod a+x).

4. Blacklist wl, ssb, and b43.

5. Cold boot the new kernel.

6. Run (as root) the attached "start_mmio_log"

7. modprobe wl

8. After wl is connected, run (again as root) the attached "stop_mmio_log"

9. Send me the file "dump_wl.txt" and the dmesg output from the point at
which the kernel is tainted.

Thanks,

Larry

Index: wireless-testing/drivers/pci/access.c
===================================================================
--- wireless-testing.orig/drivers/pci/access.c
+++ wireless-testing/drivers/pci/access.c
@@ -24,6 +24,8 @@ static DEFINE_SPINLOCK(pci_lock);
 #define PCI_word_BAD (pos & 1)
 #define PCI_dword_BAD (pos & 3)
 
+static void pci_bus_log_buf(char *buf);
+
 #define PCI_OP_READ(size,type,len) \
 int pci_bus_read_config_##size \
        (struct pci_bus *bus, unsigned int devfn, int pos, type *value) \
@@ -31,11 +33,14 @@ int pci_bus_read_config_##size \
        int res;                                                        \
        unsigned long flags;                                            \
        u32 data = 0;                                                   \
+       char buf[80];                                                   \
        if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;       \
        spin_lock_irqsave(&pci_lock, flags);                            \
        res = bus->ops->read(bus, devfn, pos, len, &data);              \
        *value = (type)data;                                            \
        spin_unlock_irqrestore(&pci_lock, flags);                       \
+       sprintf(buf, "Read 0x%X from pos 0x%X\n", data, pos);           \
+       pci_bus_log_buf(buf);                                           \
        return res;                                                     \
 }
 
@@ -45,10 +50,13 @@ int pci_bus_write_config_##size \
 {                                                                      \
        int res;                                                        \
        unsigned long flags;                                            \
+       char buf[80];                                                   \
        if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;       \
        spin_lock_irqsave(&pci_lock, flags);                            \
        res = bus->ops->write(bus, devfn, pos, len, value);             \
        spin_unlock_irqrestore(&pci_lock, flags);                       \
+       sprintf(buf, "Wrote 0x%X to pos 0x%X\n", value, pos);           \
+       pci_bus_log_buf(buf);                                           \
        return res;                                                     \
 }
 
@@ -427,3 +435,8 @@ void pci_unblock_user_cfg_access(struct
        spin_unlock_irqrestore(&pci_lock, flags);
 }
 EXPORT_SYMBOL_GPL(pci_unblock_user_cfg_access);
+
+static void pci_bus_log_buf(char *buf)
+{
+       printk(KERN_DEBUG "%s", buf);
+}
#!/bin/sh
#
echo 5600 > /sys/kernel/debug/tracing/buffer_size_kb
echo mmiotrace > /sys/kernel/debug/tracing/current_tracer
cat /sys/kernel/debug/tracing/trace_pipe > mydump_wl.txt &

#!/bin/sh
#
echo nop > /sys/kernel/debug/tracing/current_tracer
sleep 1
killproc cat

_______________________________________________
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to