MLK-18261 irqchip: imx-irqsteer: fix idx calculation for mask callback
authorAntoine Bouyer <antoine.bouyer@nxp.com>
Fri, 4 May 2018 09:48:09 +0000 (11:48 +0200)
committerAndy Duan <fugang.duan@nxp.com>
Thu, 10 May 2018 03:11:54 +0000 (11:11 +0800)
Fixes: a2e6a7833495 (MLK-16136-9 irqchip: imx-irqsteer: adjust irq config
via 'endian')

This patch fixes mask register offset calculation, when endian is not
default value 0 (i.e imx8mq).

Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
(cherry picked from commit 8a5643a5bd1f5b6490431bd96ef3cd004efd83b1)

drivers/irqchip/irq-imx-irqsteer.c

index eec5308..e26d242 100644 (file)
@@ -47,8 +47,8 @@ static void imx_irqsteer_irq_unmask(struct irq_data *d)
        u32 val, idx;
 
        spin_lock(&irqsteer_data->lock);
-       idx = irqsteer_data->endian ? (irqsteer_data->channum - d->hwirq / 32 - 1) :
-                                     d->hwirq / 32;
+       idx = irqsteer_data->endian ?
+               (irqsteer_data->channum - d->hwirq / 32 - 1) : d->hwirq / 32;
        reg = irqsteer_data->regs + CHANMASK(idx);
        val = readl_relaxed(reg);
        val |= 1 << (d->hwirq % 32);
@@ -63,7 +63,8 @@ static void imx_irqsteer_irq_mask(struct irq_data *d)
        u32 val, idx;
 
        spin_lock(&irqsteer_data->lock);
-       idx = d->hwirq / 32;
+       idx = irqsteer_data->endian ?
+               (irqsteer_data->channum - d->hwirq / 32 - 1) : d->hwirq / 32;
        reg = irqsteer_data->regs + CHANMASK(idx);
        val = readl_relaxed(reg);
        val &= ~(1 << (d->hwirq % 32));