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 <nlhi...@hotmail.com>
> > 
> > --- /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
> > openwrt-devel@lists.openwrt.org
> > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
> > 
> 
> 


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to