Re: [PATCH v4 09/14] irqchip/irq-mvebu-icu: add support for System Error Interrupts (SEI)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux