summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gonzalez <dgcbueu@gmail.com>2016-04-11 13:26:15 +0200
committerJonas Gorski <jonas.gorski@gmail.com>2016-06-21 09:23:21 +0200
commit29444e4754d59f0ef2301ef1647e1b6a392ab30c (patch)
tree07d00dbc33bec9c299433bac0701ab0dc357d3f7
parent6b5f6d6601f510fa4cdafd3f2f5ced2cd4ae16be (diff)
downloadmtk-20170518-29444e4754d59f0ef2301ef1647e1b6a392ab30c.zip
mtk-20170518-29444e4754d59f0ef2301ef1647e1b6a392ab30c.tar.gz
mtk-20170518-29444e4754d59f0ef2301ef1647e1b6a392ab30c.tar.bz2
brcm63xx: fix external IRQs
External IRQs are currently broken, fix the BCM6345_EXT_IRQ driver. Since the adoption of the new driver irq-bcm6345-ext, in Chaos Calmer, external IRQs don't work. It seems there were some minor errors at the initial development of the driver. This patch fixes the ticket https://dev.openwrt.org/ticket/21613 Signed-off-by: Daniel Gonzalez <dgcbueu@gmail.com> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
-rw-r--r--target/linux/brcm63xx/patches-4.4/321-irqchip-add-support-for-bcm6345-style-external-inter.patch18
1 files changed, 9 insertions, 9 deletions
diff --git a/target/linux/brcm63xx/patches-4.4/321-irqchip-add-support-for-bcm6345-style-external-inter.patch b/target/linux/brcm63xx/patches-4.4/321-irqchip-add-support-for-bcm6345-style-external-inter.patch
index 4f4d7bd..2526456 100644
--- a/target/linux/brcm63xx/patches-4.4/321-irqchip-add-support-for-bcm6345-style-external-inter.patch
+++ b/target/linux/brcm63xx/patches-4.4/321-irqchip-add-support-for-bcm6345-style-external-inter.patch
@@ -148,7 +148,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+
+ 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);
+}
@@ -161,7 +161,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+
+ 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);
+}
@@ -174,7 +174,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+
+ 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);
+}
@@ -222,17 +222,17 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
+ 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);