On Thu, 2012-12-13 at 19:15 +0100, Hauke Mehrtens wrote:
> On 12/11/2012 05:48 AM, Nathan Hintz wrote:
> > 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 IRQ Mask.
> >
> > Signed-off-by: Nathan Hintz <[email protected]>
> >
> > --- /dev/null
> > +++
> > target/linux/brcm47xx/patches-3.6/237-bcma-bcm4716-bcm4748-i2s-irqflag.patch
> > @@ -0,0 +1,57 @@
> > +--- 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
> > +@@ -79,7 +79,7 @@ static u32 bcma_core_mips_irqflag(struct
> > + return dev->core_index;
> > + flag = bcma_aread32(dev, BCMA_MIPS_OOBSELOUTA30);
> > +
> > +- if (flag)
> > ++ if (flag && (flag & IRQ_FLAG_MASK) <= 7)
>
> Handling something > 6 as invalid makes scene, but I think just adding a
> pr_err() in that case is enough.
>
I think you meant "> 7". Are you saying to log an error and still treat
it as invalid; or log an error but press on and try to use it? I think
the former, but wanted to make sure. If it's the latter, would pr_warn
be better? It's an oddball case either way. Is checking it even
necessary?
> > + return flag & IRQ_FLAG_MASK;
> > + else
> > + return INVALID_IRQ_FLAG;
> > +@@ -262,6 +262,26 @@ static void bcma_core_mips_flash_detect(
> > + mcore->early_setup_done = true;
> > + }
> > +
> > ++static void bcma_fix_i2s_irqflag(struct bcma_bus *bus)
> > ++{
> > ++ struct bcma_device *cpu, *pcie, *i2s;
> > ++
> > ++ /* IRQ flags >= 8 are not honored in the IRQ masks (2010 Broadcom SDK)
> > */
> > ++ if (bus->chipinfo.id != 0x4716 && bus->chipinfo.id != 0x4748)
>
> There are constants for 0x4716 and 0x4748 in include/linux/bcma/bcma.h
>
I will fix.
> > ++ return;
> > ++
> > ++ if ((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)))
>
> Do not do assignments in the if condition.
>
I will fix.
> > ++ if (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);
> > ++ }
> > ++}
> > ++
> > + void bcma_core_mips_init(struct bcma_drv_mips *mcore)
> > + {
> > + struct bcma_bus *bus;
> > +@@ -275,6 +295,8 @@ void bcma_core_mips_init(struct bcma_drv
> > +
> > + bcma_core_mips_early_init(mcore);
> > +
> > ++ bcma_fix_i2s_irqflag(bus);
> > ++
> > + mcore->assigned_irqs = 1;
> > +
> > + /* Assign IRQs to all cores on the bus */
> >
> > _______________________________________________
> > openwrt-devel mailing list
> > [email protected]
> > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
> >
>
>
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel