Messages in this thread Patch in this message | | | From | Gregory Fong <> | Date | Mon, 2 Jan 2017 17:43:36 -0800 | Subject | mpic IRQ_TYPE_BOTH handling |
| |
Hi all,
In arch/powerpc/sysdev/mpic.c , it looks like IRQ_TYPE_EDGE_BOTH is handled the same way as IRQ_TYPE_EDGE_FALLING:
static unsigned int mpic_type_to_vecpri(struct mpic *mpic, unsigned int type) { /* Now convert sense value */ switch(type & IRQ_TYPE_SENSE_MASK) { case IRQ_TYPE_EDGE_RISING: return MPIC_INFO(VECPRI_SENSE_EDGE) | MPIC_INFO(VECPRI_POLARITY_POSITIVE); case IRQ_TYPE_EDGE_FALLING: case IRQ_TYPE_EDGE_BOTH: return MPIC_INFO(VECPRI_SENSE_EDGE) | MPIC_INFO(VECPRI_POLARITY_NEGATIVE); case IRQ_TYPE_LEVEL_HIGH: return MPIC_INFO(VECPRI_SENSE_LEVEL) | MPIC_INFO(VECPRI_POLARITY_POSITIVE); case IRQ_TYPE_LEVEL_LOW: default: return MPIC_INFO(VECPRI_SENSE_LEVEL) | MPIC_INFO(VECPRI_POLARITY_NEGATIVE); } }
If IRQ_TYPE_EDGE_BOTH is unsupported, shouldn't we be returning an error, instead of silently setting to use IRQ_TYPE_EDGE_FALLING? Something like the following (sorry if the diff wraps weirdly, on webmail at the moment):
----8<---- diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index b9aac95..5867ea2 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c @@ -876,6 +876,9 @@ int mpic_set_irq_type(struct irq_data *d, unsigned int flow_type) if (src >= mpic->num_sources) return -EINVAL;
+ if (flow_type & IRQ_TYPE_SENSE_MASK == IRQ_TYPE_EDGE_BOTH) + return -EINVAL; + vold = mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI));
/* We don't support "none" type */ ---->8---- Thanks, Gregory
| |