]> git.baikalelectronics.ru Git - kernel.git/commit
irqchip/mbigen: Fix the clear register offset calculation
authorMaJun <majun258@huawei.com>
Fri, 12 May 2017 03:55:28 +0000 (11:55 +0800)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 12 May 2017 08:25:38 +0000 (10:25 +0200)
commitcd0ebb7cb35ef99812acfdce1ba7ec9af8374865
tree825e4f0140e619c7ff4a8563702d194635ecba7b
parent6f921703ea33d5ebb6ca2682ee0799d9e27adc36
irqchip/mbigen: Fix the clear register offset calculation

The register array offset for clearing an interrupt is calculated by:

    offset = (hwirq - RESERVED_IRQ_PER_MBIGEN_CHIP) / 32;

This is wrong because the clear register array includes the reserved
interrupts. So the clear operation ends up in the wrong register.

This went unnoticed so far, because the hardware clears the real bit
through a timeout mechanism when the hardware is configured in debug
mode. That debug mode was enabled on early generations of the hardware, so
the problem was papered over.

On newer hardware with updated firmware the debug mode was disabled, so the
bits did not get cleared which causes the system to malfunction.

Remove the subtraction of RESERVED_IRQ_PER_MBIGEN_CHIP, so the correct
register is accessed.

[ tglx: Rewrote changelog ]

Fixes: 5c1fffa50a6f ("irqchip/mbigen: Implement the mbigen irq chip operation functions")
Signed-off-by: MaJun <majun258@huawei.com>
Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: linuxarm@huawei.com
Cc: Wei Yongjun <weiyongjun1@huawei.com>
Link: http://lkml.kernel.org/r/1494561328-39514-4-git-send-email-guohanjun@huawei.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
drivers/irqchip/irq-mbigen.c