On Fri, 2012-03-02 at 19:23 -0800, Nathan Hintz wrote:
Hi Hauke,
On Sat, 2012-03-03 at 00:06 +0100, Hauke Mehrtens wrote:
On 03/02/2012 06:36 AM, Nathan Hintz wrote:
Signed-off-by: Nathan Hintz nlhi...@hotmail.com
--- /dev/null 2012-02-21 01:00:44.969496803 -0800
+++ target/linux/brcm47xx/patches-3.2/0051-bcma-enable-irq6.patch
2011-07-25 11:20:35.030008484 -0700
@@ -0,0 +1,29 @@
+--- a/drivers/bcma/driver_mips.c
b/drivers/bcma/driver_mips.c
+@@ -74,7 +74,7 @@
+ return dev-core_index;
+ flag = bcma_aread32(dev, BCMA_MIPS_OOBSELOUTA30);
+
+-return flag 0x1F;
++return (flag ? (flag 0x1F) : 0x3F);
+ }
+
+ /* Get the MIPS IRQ assignment for a specified device.
+@@ -87,6 +87,8 @@
+ unsigned int irq;
+
+ irqflag = bcma_core_mips_irqflag(dev);
++if (irqflag == 0x3F)
++return 6;
+
+ for (irq = 1; irq = 4; irq++)
+ if (bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(irq))
+@@ -232,7 +234,7 @@
+ core-irq = 0;
+ else
+ core-irq = mips_irq + 2;
+-if (core-irq 5)
++if (core-irq 6)
+ continue;
+ switch (core-id.id) {
+ case BCMA_CORE_PCI:
Why do you need the IRQ 6? The current code will not assign it to any
core on the devices I know of. On what device did you test your code? As
the Broadcom SDK doe not use this IRQ I am a little bit scared if it
will work on every device.
Hauke
This is on a Linksys E3000. I reflashed back to the stock firmware, and
dumped the interrupt assignments (eth1 is wl0, eth2 is wl1). I haven't
actually tried it without the patch. In general, everything seems to be
working; although it will consistently produce a kernel oops if I try to
enable option wmm 1 for wl1 (Bus error), which I haven't been able
to track down.
Stock Linksys E3000:
# more /proc/interrupts
CPU0
3: 18693MIPS eth1
4:350MIPS eth0
5: 0MIPS ehci-hcd, usb-ohci
6: 10353MIPS eth2
7: 51445MIPS timer
8: 3382IRQ2 serial
ERR: 0
OpenWRT Linksys E3000 (using the patch):
root@OpenWrt:/# cat /proc/interrupts
CPU0
2:904 MIPS serial, gpio
3: 0 MIPS wl0
4:228 MIPS eth0
5: 0 MIPS ehci_hcd:usb1, ohci_hcd:usb2
6: 0 MIPS wl1
7: 87428 MIPS timer
ERR: 0
Let me know if there is any other info you would like, I can easily
flash back to stock.
Nathan
Attached is the dmesg output both with and without the patch installed
(Linksys E3000). Note that without the patch, IRQ6 (MIPS IRQ4) was
assigned to Core 5 (PCIE) core; however, bcma_core_mips_set_irq was
never called to set the interrupt mask as evidenced by the missing
bcma: set_irq: core 0x0820, irq 6 = 6 log statement. Also, without
the patch, Cores 3 and 7 show they are assigned to IRQ2 (MIPS IRQ0),
when I think they should be zero (Internal).
In both cases, notice there are no calls to bcma_core_mips_set_irq to
set the interrupt mask for cores that were assigned IRQ2 (MIPS IRQ0); so
I guess we're just lucky that the default masks are adequate.
Nathan
**
w/o patch
[0.00] Linux version 3.2.9 (openwrt@hintzn1linux) (gcc version 4.6.3
20120201 (prerelease) (Linaro GCC 4.6-2012.02) ) #1 Fri 2
[0.00] CPU revision is: 00019740 (MIPS 74Kc)
[0.00] bcm47xx: using bcma bus
[0.00] bcma: Found chip with id 0x4716, rev 0x01 and package 0x0A
[0.00] bcma: Core 0 found: ChipCommon (manuf 0x4BF, id 0x800, rev 0x1F,
class 0x0)
[0.00] bcma: Core 3 found: MIPS 74K (manuf 0x4A7, id 0x82C, rev 0x01,
class 0x0)
[0.00] bcma: PLL init unknown for device 0x4716
[0.00] bcma: PMU resource config unknown for device 0x4716
[0.00] bcma: PMU switch/regulators init unknown for device 0x4716
[0.00] bcma: Workarounds unknown for device 0x4716
[0.00] bcma: Initializing MIPS core...
[0.00] bcma: IRQ reconfiguration done
[0.00] bcma: core 0x0800, irq : 2(S)* 3 4 5 6 D I
[0.00] bcma: core 0x082c, irq : 2(S)* 3 4 5 6 D I
[0.00] bcma: found parallel flash.
[0.00] bcma: Early bus registered
[0.00] Determined physical RAM map:
[0.00] memory: 0400 @ (usable)
[0.00] Initrd not found or empty - disabling initrd
[0.00] Zone PFN ranges:
[0.00] Normal 0x - 0x4000
[0.00] Movable zone start PFN for each node
[0.00]