#21613: brcm63xx: external IRQs broken
------------------------+---------------------------------------
  Reporter:  dgcbueu@…  |      Owner:  developers
      Type:  defect     |     Status:  new
  Priority:  high       |  Milestone:  Designated Driver (Trunk)
 Component:  kernel     |    Version:  Trunk
Resolution:             |   Keywords:
------------------------+---------------------------------------

Comment (by dgcbueu@…):

 For '''Openwrt trunk''' last revision I've tested this variation of the
 patch in '''BCM6348''' with success:

 {{{
 --- a/drivers/irqchip/irq-bcm6345-ext.c
 +++ b/drivers/irqchip/irq-bcm6345-ext.c
 @@ -72,7 +72,7 @@

         raw_spin_lock(&priv->lock);
         reg = __raw_readl(priv->reg);
 -       reg |= hwirq << (EXTIRQ_CFG_CLEAR * priv->shift);
 +       reg |= 1 << (hwirq + EXTIRQ_CFG_CLEAR * priv->shift);
         __raw_writel(reg, priv->reg);
         raw_spin_unlock(&priv->lock);
  }
 @@ -85,7 +85,7 @@

         raw_spin_lock(&priv->lock);
         reg = __raw_readl(priv->reg);
 -       reg &= ~(hwirq << (EXTIRQ_CFG_MASK * priv->shift));
 +       reg &= ~(1 << (hwirq + EXTIRQ_CFG_MASK * priv->shift));
         __raw_writel(reg, priv->reg);
         raw_spin_unlock(&priv->lock);
  }
 @@ -98,7 +98,7 @@

         raw_spin_lock(&priv->lock);
         reg = __raw_readl(priv->reg);
 -       reg |= hwirq << (EXTIRQ_CFG_MASK * priv->shift);
 +       reg |= 1 << (hwirq + EXTIRQ_CFG_MASK * priv->shift);
         __raw_writel(reg, priv->reg);
         raw_spin_unlock(&priv->lock);
  }
 @@ -146,17 +146,17 @@
         reg = __raw_readl(priv->reg);

         if (levelsense)
 -               reg |= hwirq << (EXTIRQ_CFG_LEVELSENSE * priv->shift);
 +               reg |= 1 << (hwirq + EXTIRQ_CFG_LEVELSENSE * priv->shift);
         else
 -               reg &= ~(hwirq << (EXTIRQ_CFG_LEVELSENSE * priv->shift));
 +               reg &= ~(1 << (hwirq + EXTIRQ_CFG_LEVELSENSE *
 priv->shift));
         if (sense)
 -               reg |= hwirq << (EXTIRQ_CFG_SENSE * priv->shift);
 +               reg |= 1 << (hwirq + EXTIRQ_CFG_SENSE * priv->shift);
         else
 -               reg &= ~(hwirq << (EXTIRQ_CFG_SENSE * priv->shift));
 +               reg &= ~(1 << (hwirq + EXTIRQ_CFG_SENSE * priv->shift));
         if (bothedge)
 -               reg |= hwirq << (EXTIRQ_CFG_BOTHEDGE * priv->shift);
 +               reg |= 1 << (hwirq + EXTIRQ_CFG_BOTHEDGE * priv->shift);
         else
 -               reg &= ~(hwirq << (EXTIRQ_CFG_BOTHEDGE * priv->shift));
 +               reg &= ~(1 << (hwirq + EXTIRQ_CFG_BOTHEDGE *
 priv->shift));

         __raw_writel(reg, priv->reg);
         raw_spin_unlock(&priv->lock);

 }}}

--
Ticket URL: <https://dev.openwrt.org/ticket/21613#comment:5>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets

Reply via email to