关于PCIE INTX 中断软件处理流程疑问:
1:视频中的RK3399 的PCIE 控制器的驱动,该 PCIE 的控制器将4个 INTX 中断汇聚成了一个实际物理中断号81 上报到GIC ,
GIC 通过 IRQ domain 1 会创建一个 将81 号中断映射为 virq1 ,里面调用 PCIE 控制器创建的handler 函数;
PCIE 控制器初始化时会创建一个 虚拟的 IRQ domain 2 ,将 INTA,B,C,D 映射为 virq a,b,c,d
疑问1: GIC 的进行hwirq-》 virq 的映射过程中用到的 IRQ domain 1 和 PCIE 的 IRQ domain 2是同一个吗,或者说 PCIE通过IRQ domain 2 将 INT A B C D 映射为 虚拟的 virq a,b ,c ,d 有没有可能和 GIC IRQ domain
其他硬件中断号冲突。之所以有这个担心是因为:
在PCIE 设备中注册 INTX 中断是通过 pci_dev->irq 获取到了INTX 中断在 PCIE 的 irq domian 中断 virq号,
但是PCIE 设备注册的时候 直接通过 request_irq 函数将该 virq 注册进内核,也不会告诉内核说我这个 virq 是 PCIE 的 irq domain 域下的还是 GIC irq domain 域下的,和其他的模块注册中断完全一样
内核怎么能知道这个virq a,b ,c ,d 是 PCIE domain 域下的,除非他是virq 也是唯一的,不会和 GIC 的冲突,而且要内核看到了这个主动能知道你这个 virq 是哪个 domain域下的
我们的GIC 和 PCIE 的 IRQ domain的映射规则如果是一样的,由于 INTABCD 实际对应的物理中断是1,2,3,4,不会和 CPU 本来的1.2.3,4(SGI 中断)映射出来的 virq 一样吗?
疑问2:软件处理 PCIE设备 中断的时候,先调用 PCIE 控制器的中断处理函数 rockchip_pcie_legacy_int_handler ,这个函数里面是怎么调用到 PCIE 设备注册的 INTX 中断的,这个流程老师能不能帮忙大概说下
疑问3:在 PCIE 控制器初始化过程中需要去创建 PCIE 的 IRQ domain 域,由于我们 RK3399 的 INTX abcd 最终只会给 GIC 汇聚上报一个中断81,但是有的PCIE控制器,INTABCD 是会分别给GIC 上报4个中断号的,这时候是不是
PCIE 控制器就不用创建 PCIE 的 IRQ domain映射了,直接用 GIC 的 IRQ domain了
参考链接:
疑问4:分开上报INTX 的pcie 设备能不能像普通的设备一样单独中断注册是不是就行,即不使用不用 PCIE 设备数中的 interrupt-map 和 interrupt-map-mask ,还是说pcie 框架必须用到?
疑问5:如果 pcie 设备需要用到多个intx 中断,怎么获取到pcie 映射后的virq 呢,因为PCIE 设备通过 pci_dev->irq 获取要注册的中断号,如果有多个INTX ,pcie 设备怎么获取