•irq_eoi - Optional, required for EOI flow handlers •irq_retrigger - Optional •irq_set_type - Optional •irq_set_wake - Optional 3.2IRQ domain IRQ domain用于将硬件的中断号(hirq),转换成Linux系统中的软件中断号(sirq),每一个Linux软件中断号对应一项irq_desc, 每个中断控制器都对应一个IR...
每个中断控制器都对应一个IRQ Domain; 中断控制器驱动通过irq_domain_add_*()接口来创建IRQ Domain; IRQ Domain支持三种映射方式:linear map(线性映射),tree map(树映射),no map(不映射); linear map:维护固定大小的表,索引是硬件中断号,如果硬件中断最大数量固定,并且数值不大,可以选择线性映射; tree map:硬...
理解irq_of_parse_and_map需要irq domain的知识,请参考linux kernel的中断子系统之(二):irq domain介绍。 (2)gic_init_bases的代码如下: void __init gic_init_bases(unsigned int gic_nr, int irq_start, void __iomem *dist_base, void __iomem *cpu_base, u32 percpu_offset, struct device_node ...
•irq_retrigger - Optional •irq_set_type - Optional •irq_set_wake - Optional 3.2 IRQ domain IRQ Domain支持三种映射方式:linear map(线性映射),tree map(树映射),no map(不映射); •linear map:维护固定大小的表,索引是硬件中断号,如果硬件中断最大数量固定,并且数值不大,可以选择线性映射; ...
理解#interrupt-cells这个属性需要理解interrupt specifier和interrupt domain这两个概念。interrupt specifier其实就是外设interrupt的属性值,对于uart3而言,其interrupt specifier就是<gic_spi 74="" irq_type_level_high=""><GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,也就是说,interrupt specifier定义了一个外设产生中断的...
gic_check_eoimode(node,&gic->raw_cpu_base))static_key_slow_dec(&supports_deactivate);...2__gic_init_bases(gic,-1,&node->fwnode);...3if(parent){irq=irq_of_parse_and_map(node,0);gic_cascade_irq(gic_cnt,irq);...4}gic_cnt++;...} 注1:每一个 GIC 对应一个 gic_chip_data ...
理解#interrupt-cells这个属性需要理解interrupt specifier和interrupt domain这两个概念。interrupt specifier其实就是外设interrupt的属性值,对于uart3而言,其interrupt specifier就是<gic_spi 74="" irq_type_level_high=""><GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,也就是说,interrupt specifier定义了一个外设产生中断的...
irq_domain_bus_token bus_token;structirq_domain_chip_generic *gc;#ifdefCONFIG_IRQ_DOMAIN_HIERARCHYstructirq_domain *parent;//支持级联的话,指向父设备#endif#ifdefCONFIG_GENERIC_IRQ_DEBUGFSstructdentry *debugfs_file;#endif/* reverse map data. Thelinearmap gets appended to the irq_domain */irq_...
IRQ_DOMAIN里面包含了GIC的基本信息,比如host_data,可以保存对应的Distributor的基地址;最大的硬件中断数目hwirq_max;如果是线性映射,那么linear_revmap保存了线性映射的关系; 当然,重要的irq_domain_ops里面有对应的操作,eg:gic_irq_domain_map这就是如何把硬件IRQ和软件处理侧的desc_irq对应起来的。
interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;ti,hwmods = "uart3";clock-frequency = <48000000>;};对于uart3,interrupts属性⽤3个cell(对于device tree,cell是指由32bit组成的⼀个信息单位)表⽰。GIC_SPI 描述了interrupt type。对于GIC,它可以管理4种类型的中断:(1)外设中断(Peripheral ...