X-Git-Url: http://plrg.eecs.uci.edu/git/?p=firefly-linux-kernel-4.4.55.git;a=blobdiff_plain;f=drivers%2Firqchip%2Firq-gic-v3.c;h=3d1514ac932d6fd23348a55cb58b87e55936d764;hp=dff17aef68a24026193f9cfa9e43cc158f184faa;hb=c04b4e2e77a884014ab4d2538a90281b4b0e3a6f;hpb=cd4f987fd63a2ec2846646ca35ae8fde6e664bba diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index dff17aef68a2..3d1514ac932d 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -216,6 +216,15 @@ static void gic_unmask_irq(struct irq_data *d) gic_poke_irq(d, GICD_ISENABLER); } +#ifdef CONFIG_ARCH_ROCKCHIP +static int gic_retrigger(struct irq_data *d) +{ + gic_poke_irq(d, GICD_ISPENDR); + /* the genirq layer expects 0 if we can't retrigger in hardware */ + return 0; +} +#endif + static int gic_irq_set_irqchip_state(struct irq_data *d, enum irqchip_irq_state which, bool val) { @@ -697,6 +706,9 @@ static struct irq_chip gic_chip = { .irq_unmask = gic_unmask_irq, .irq_eoi = gic_eoi_irq, .irq_set_type = gic_set_type, +#ifdef CONFIG_ARCH_ROCKCHIP + .irq_retrigger = gic_retrigger, +#endif .irq_set_affinity = gic_set_affinity, .irq_get_irqchip_state = gic_irq_get_irqchip_state, .irq_set_irqchip_state = gic_irq_set_irqchip_state, @@ -708,6 +720,9 @@ static struct irq_chip gic_eoimode1_chip = { .irq_mask = gic_eoimode1_mask_irq, .irq_unmask = gic_unmask_irq, .irq_eoi = gic_eoimode1_eoi_irq, +#ifdef CONFIG_ARCH_ROCKCHIP + .irq_retrigger = gic_retrigger, +#endif .irq_set_type = gic_set_type, .irq_set_affinity = gic_set_affinity, .irq_get_irqchip_state = gic_irq_get_irqchip_state,