#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