irqchip: sun4i: Remove wrong irq_ack callback implementation
Subsystems (2)
PATCH RESEND 1/1 irqchip: sun4i: Remove wrong irq_ack callback implementation
According to the datasheet[1], the Interrupt IRQ Pending Registers are read-only. The implementation of sun4i_irq_ack() is worng becasue it writes to these read-only registers.
This patch removes the wrong irq_ack callback implementation and all the code writing to these read-only registers in sun4i_of_init().
[1] http://dl.linux-sunxi.org/A10/A10%20User%20Manual%20-%20v1.20%20%282012-04-09%2c%20DECRYPTED%29.pdf
Signed-off-by Axel Lin <[email protected]>
Acked-by Maxime Ripard <[email protected]>
---
This patch was sent on https://lkml.org/lkml/2013/7/6/59
This resend rebase it on top of 3.11-rc1.
Thanks,
Axel
drivers/irqchip/irq-sun4i.c | 18 ------------------ 1 file changed, 18 deletions(-)
drivers/irqchip/irq-sun4i.c +0 -18
@@ -38,18 +38,6 @@ static struct irq_domain *sun4i_irq_domain; static asmlinkage void __exception_irq_entry sun4i_handle_irq(struct pt_regs *regs); -static void sun4i_irq_ack (struct irq_data *irqd) -{ -unsigned int irq =irqd_to_hwirq (irqd); -unsigned int irq_off = irq %32 ; -int reg = irq /32 ; -u32 val; - - val =readl (sun4i_irq_base +SUN4I_IRQ_PENDING_REG (reg)); -writel (val | (1 << irq_off), - sun4i_irq_base +SUN4I_IRQ_PENDING_REG (reg)); -} -static void sun4i_irq_mask (struct irq_data *irqd) {unsigned int irq =irqd_to_hwirq (irqd);
@@ -76,7 +64,6 @@ static void sun4i_irq_unmask(struct irq_data *irqd)static struct irq_chip sun4i_irq_chip = { .name ="sun4i_irq" , - .irq_ack = sun4i_irq_ack, .irq_mask = sun4i_irq_mask, .irq_unmask = sun4i_irq_unmask, };
@@ -114,11 +101,6 @@ static int __init sun4i_of_init(struct device_node *node,writel (0 , sun4i_irq_base +SUN4I_IRQ_MASK_REG (1 ));writel (0 , sun4i_irq_base +SUN4I_IRQ_MASK_REG (2 )); -/* Clear all the pending interrupts */ -writel (0xffffffff , sun4i_irq_base +SUN4I_IRQ_PENDING_REG (0 )); -writel (0xffffffff , sun4i_irq_base +SUN4I_IRQ_PENDING_REG (1 )); -writel (0xffffffff , sun4i_irq_base +SUN4I_IRQ_PENDING_REG (2 )); -/* Enable protection mode */ writel (0x01 , sun4i_irq_base +SUN4I_IRQ_PROTECTION_REG );
Signature · 1 line
1.8.1.2