From 800c57d6f19f1f4e7ef5bf634af72f050fa2f1ca Mon Sep 17 00:00:00 2001 From: Parth Dixit Date: Wed, 2 Mar 2016 08:37:00 +0100 Subject: [PATCH] arm/irq: Add helper function for setting interrupt type Add a helper function to set edge/level type information for an interrupt. Signed-off-by: Parth Dixit Signed-off-by: Shannon Zhao Acked-by: Stefano Stabellini --- xen/arch/arm/irq.c | 29 +++++++++++++++++------------ xen/include/asm-arm/irq.h | 2 ++ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c index 0ff5cbc047..2f8af72770 100644 --- a/xen/arch/arm/irq.c +++ b/xen/arch/arm/irq.c @@ -655,27 +655,32 @@ unlock: return ret; } -int platform_get_irq(const struct dt_device_node *device, int index) +int irq_set_type(unsigned int irq, unsigned int type) { - struct dt_irq dt_irq; - unsigned int type, irq; int res; - res = dt_device_get_irq(device, index, &dt_irq); - if ( res ) - return -1; - - irq = dt_irq.irq; - type = dt_irq.type; - /* Setup the IRQ type */ if ( irq < NR_LOCAL_IRQS ) res = irq_local_set_type(irq, type); else res = irq_set_spi_type(irq, type); - if ( res ) - return -1; + return res; +} + +int platform_get_irq(const struct dt_device_node *device, int index) +{ + struct dt_irq dt_irq; + unsigned int type, irq; + + if ( dt_device_get_irq(device, index, &dt_irq) ) + return -1; + + irq = dt_irq.irq; + type = dt_irq.type; + + if ( irq_set_type(irq, type) ) + return -1; return irq; } diff --git a/xen/include/asm-arm/irq.h b/xen/include/asm-arm/irq.h index f33c3315ac..493773c0dd 100644 --- a/xen/include/asm-arm/irq.h +++ b/xen/include/asm-arm/irq.h @@ -52,6 +52,8 @@ void arch_move_irqs(struct vcpu *v); /* Set IRQ type for an SPI */ int irq_set_spi_type(unsigned int spi, unsigned int type); +int irq_set_type(unsigned int irq, unsigned int type); + int platform_get_irq(const struct dt_device_node *device, int index); void irq_set_affinity(struct irq_desc *desc, const cpumask_t *cpu_mask);