diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2015-06-16 18:29:41 -0400 |
---|---|---|
committer | Philipp Zabel <p.zabel@pengutronix.de> | 2015-07-10 05:02:46 -0400 |
commit | 510e6426d32baf46b6df929e6689ef65fcb58a2c (patch) | |
tree | b22572de17b81e2d32e5f8409eeab77aad11c436 | |
parent | 553a59fc8f5d51c3824c0b7d4ca61e780157defa (diff) |
GPU: ipu: fix lockup caused by pending chained interrupts
Even with the oops fixed by a previous patch, the system still fails to
kexec, due to a stuck chained interrupt locking the system. We must
disable the child interrupts prior to setting up the irq chip to ensure
we don't get stuck here.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
-rw-r--r-- | drivers/gpu/ipu-v3/ipu-common.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c index 6d2f39d36e44..00f2058944e5 100644 --- a/drivers/gpu/ipu-v3/ipu-common.c +++ b/drivers/gpu/ipu-v3/ipu-common.c | |||
@@ -1107,6 +1107,9 @@ static int ipu_irq_init(struct ipu_soc *ipu) | |||
1107 | return ret; | 1107 | return ret; |
1108 | } | 1108 | } |
1109 | 1109 | ||
1110 | for (i = 0; i < IPU_NUM_IRQS; i += 32) | ||
1111 | ipu_cm_write(ipu, 0, IPU_INT_CTRL(i / 32)); | ||
1112 | |||
1110 | for (i = 0; i < IPU_NUM_IRQS; i += 32) { | 1113 | for (i = 0; i < IPU_NUM_IRQS; i += 32) { |
1111 | gc = irq_get_domain_generic_chip(ipu->domain, i); | 1114 | gc = irq_get_domain_generic_chip(ipu->domain, i); |
1112 | gc->reg_base = ipu->cm_reg; | 1115 | gc->reg_base = ipu->cm_reg; |