Hi Marc, Marc Zyngier <marc.zyngier@xxxxxxx> wrote on Tue, 21 Aug 2018 11:37:47 +0100: > On 21/08/18 11:28, Miquel Raynal wrote: > > Hi Marc, > > > > Marc Zyngier <marc.zyngier@xxxxxxx> wrote on Tue, 21 Aug 2018 10:19:04 > > +0100: > > > >> On 21/08/18 10:08, Miquel Raynal wrote: > >>> Hi Marc, > >>> > >>> I'm fine with the rest of the comments, please find just one last > >>> question below. > >>> > >>> [...] > >>> > >>>>> @@ -133,12 +164,36 @@ mvebu_icu_irq_domain_translate(struct irq_domain *d, struct irq_fwspec *fwspec, > >>>>> return -EINVAL; > >>>>> } > >>>>> > >>>>> - /* Mask the type to prevent wrong DT configuration */ > >>>>> - *type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK; > >>>>> + /* > >>>>> + * The ICU receives level-interrupts. MSI SEI are > >>>>> + * edge-interrupts while MSI NSR are level-interrupts. Update the type > >>>>> + * accordingly for the parent irqchip. > >>>>> + */ > >>>>> + if (msi_data->subset_data->icu_group == ICU_GRP_SEI) > >>>>> + *type = IRQ_TYPE_EDGE_RISING; > >>>> > >>>> That's interesting. How is the resampling done here? > >>> > >>> I'm not sure to understand the question. What does 'resampling' means > >>> in such context? MSI SEIs are of type "edge" and use the traditional > >>> MSI signalling infrastructure. I'm asking to be sure not to ignore > >>> something wrong in my code. > >> > >> You seems to be turning a level interrupt into an edge. > > > > If is an SEI interrupt, it cannot be a level interrupt and the type > > will be IRQ_TYPE_EDGE_RISING. > > > >> You can do that, > >> but only if you resample the level on EOI (and regenerate the > >> corresponding edge if the level is still high). > > > > What is before is a '& IRQ_TYPE_SENSE_MASK' operation. In theory, > > *type could be anything of IRQ_TYPE_{EDGE,LEVEL}_* at this moment. But, > > as stated above, it cannot be anything else than IRQ_TYPE_EDGE_RISING. > > I thought more clear to enforce it but if this unclear and useless, > > let's drop it? > > I think overriding the trigger that way is very confusing. Either it > comes from DT, or it comes from the MSI framwork. In both cases, it has > to be correct, and overriding it is just papering over other bugs. > > I'd rather you put a WARN_ON if you encounter an illegal interrupt trigger. Fine by me. Thanks for all the guidance, I'll send a new iteration ASAP (with the bindings updated). Thanks, Miquèl