下级中断控制器的类别
中断控制器可以分为两类:链式(chained)、层级(hierarchy)。100ask的分类,用来更好理解结构
-
链式中断控制器
上图左边是chained intc就是链式中断控制器。只要其中4个中触发了一个,那么33号中断被触发。
当33号中断触发时,需要判断是哪个触发了33中断。这时就需要读取 chained intc中的寄存器。 -
层级中断控制器
右边是hierarchy intc 是层级中断控制器。
每个中断都又一一对应,GIC处理中断号时,不需要读取hierarchy intc寄存器来分辨哪个触发中断。
链式中断控制器的处理流程
- 当GIC触发33中断号时,通过GIC的irq_domain找到对应的处理函数
- 处理函数会做3件事,屏蔽中断、处理中断、恢复屏蔽。其中屏蔽中断、恢复屏蔽都是由GIC控制处理
- 处理中断时,通过GPIO的irq_domain来先判断对应的中断源,然后再进GPIO的中断处理程序
- GPIO处理中断,通过GPIO的irq_domain,找到对应的处理函数。
- 函数处理前后,还是会屏蔽和恢复中断
屏蔽和恢复中断都在irq_desc中的irq_data->irq_chip对应的函数
层级中断控制器的处理流程
- 当GIC触发SPI中断时,当触发100中断号后
- GIC irq_domain和GPIO irq_domain都对应,为同一个irq_desc
- 同样使用irq_data中的irq_chip函数,处理屏蔽和恢复中断,并处理函数。
- 再调用irq_data时,还会调用父类的irq_data,不仅屏蔽GPIO中孤单,还用来屏蔽GIC中断
处理流程对比
链式使用GIC和GPIO 层层调用才处理中断函数
层级就是直接调用GPIO,再调用parent来处理