From b336c08e3c09af06d383bab5167a74499909fe20 Mon Sep 17 00:00:00 2001 From: Antoine Bouyer Date: Fri, 4 May 2018 11:48:09 +0200 Subject: [PATCH] MLK-18261 irqchip: imx-irqsteer: fix idx calculation for mask callback 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 Signed-off-by: Fugang Duan (cherry picked from commit 8a5643a5bd1f5b6490431bd96ef3cd004efd83b1) --- drivers/irqchip/irq-imx-irqsteer.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irqsteer.c index eec5308b266b..e26d242e1c66 100644 --- a/drivers/irqchip/irq-imx-irqsteer.c +++ b/drivers/irqchip/irq-imx-irqsteer.c @@ -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)); -- 2.17.1