diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2013-01-03 01:56:13 +0000 |
---|---|---|
committer | Hauke Mehrtens <hauke@hauke-m.de> | 2013-01-03 01:56:13 +0000 |
commit | 97b2b601c75cefb62a193fd47a50fd5d99f3917d (patch) | |
tree | 83f7383117e05cc8d444e2da5a5562997f8d35a3 /target/linux | |
parent | f74e847301d3e1ae457f2330f175307d5d1d24c5 (diff) | |
download | upstream-97b2b601c75cefb62a193fd47a50fd5d99f3917d.tar.gz upstream-97b2b601c75cefb62a193fd47a50fd5d99f3917d.tar.bz2 upstream-97b2b601c75cefb62a193fd47a50fd5d99f3917d.zip |
brcm47xx: BCMA - IRQ Update - Fix IRQ Flag for I2S Core
Adjust the IRQ Flag value from 8 to 7 for I2S Core for BCM4716 and
BCM4748 (per the Broadcom SDK). IRQ Flag values greater than 7 are
ignored when setting the interrupt masks.
Signed-off-by: Nathan Hintz <nlhintz@hotmail.com>
SVN-Revision: 34990
Diffstat (limited to 'target/linux')
-rw-r--r-- | target/linux/brcm47xx/patches-3.6/237-bcma-bcm4716-bcm4748-i2s-irqflag.patch | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.6/237-bcma-bcm4716-bcm4748-i2s-irqflag.patch b/target/linux/brcm47xx/patches-3.6/237-bcma-bcm4716-bcm4748-i2s-irqflag.patch new file mode 100644 index 0000000000..e369abdd47 --- /dev/null +++ b/target/linux/brcm47xx/patches-3.6/237-bcma-bcm4716-bcm4748-i2s-irqflag.patch @@ -0,0 +1,54 @@ +--- a/include/linux/bcma/bcma_driver_mips.h ++++ b/include/linux/bcma/bcma_driver_mips.h +@@ -28,6 +28,7 @@ + #define BCMA_MIPS_MIPS74K_GPIOEN 0x0048 + #define BCMA_MIPS_MIPS74K_CLKCTLST 0x01E0 + ++#define BCMA_MIPS_OOBSELINA74 0x004 + #define BCMA_MIPS_OOBSELOUTA30 0x100 + + struct bcma_device; +--- a/drivers/bcma/driver_mips.c ++++ b/drivers/bcma/driver_mips.c +@@ -275,6 +275,32 @@ void bcma_core_mips_early_init(struct bc + mcore->early_setup_done = true; + } + ++static void bcma_fix_i2s_irqflag(struct bcma_bus *bus) ++{ ++ struct bcma_device *cpu, *pcie, *i2s; ++ ++ /* Fixup the interrupts in 4716/4748 for i2s core (2010 Broadcom SDK) ++ * (IRQ flags > 7 are ignored when setting the interrupt masks) ++ */ ++ if (bus->chipinfo.id != BCMA_CHIP_ID_BCM4716 && ++ bus->chipinfo.id != BCMA_CHIP_ID_BCM4748) ++ return; ++ ++ cpu = bcma_find_core(bus, BCMA_CORE_MIPS_74K); ++ pcie = bcma_find_core(bus, BCMA_CORE_PCIE); ++ i2s = bcma_find_core(bus, BCMA_CORE_I2S); ++ if ((cpu && pcie && i2s) && ++ (bcma_aread32(cpu, BCMA_MIPS_OOBSELINA74) == 0x08060504 && ++ bcma_aread32(pcie, BCMA_MIPS_OOBSELINA74) == 0x08060504 && ++ bcma_aread32(i2s, BCMA_MIPS_OOBSELOUTA30) == 0x88)) { ++ bcma_awrite32(cpu, BCMA_MIPS_OOBSELINA74, 0x07060504); ++ bcma_awrite32(pcie, BCMA_MIPS_OOBSELINA74, 0x07060504); ++ bcma_awrite32(i2s, BCMA_MIPS_OOBSELOUTA30, 0x87); ++ bcma_info(bus, ++ "Moved i2s interrupt to oob line 7 instead of 8\n"); ++ } ++} ++ + void bcma_core_mips_init(struct bcma_drv_mips *mcore) + { + struct bcma_bus *bus; +@@ -289,6 +315,8 @@ void bcma_core_mips_init(struct bcma_drv + + bcma_core_mips_early_init(mcore); + ++ bcma_fix_i2s_irqflag(bus); ++ + mcore->assigned_irqs = 1; + + switch (bus->chipinfo.id) { |