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
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev