Прерывание PCI не назначено - PullRequest
0 голосов
/ 04 мая 2018

Устаревшее назначение прерываний для интерфейса PCI получает прерывание 0.

Мы оцениваем оценочный комплект Xilinx Zynq UltraScale + MPSoC ZCU102. У нас есть интерфейс PMC, который находится на носителе PCI-e, вставленном в слот PCI-e на плате.

Когда драйвер загружен, прерыванию для платы назначается прерывание 0 от ОС (Linux 16.0.4). Прерывание 0 явно не правильно.

Дерево устройств для PCI должно назначать прерывания. Мы видим назначенное прерывание misc, но прерывание intx не сообщается или, скорее, возвращает 0 из ОС.

Как мы можем определить, почему прерывание не сообщается? Какие изменения мы можем внести, чтобы определить, в чем заключается проблема?

Вот запись дерева устройств для pcie -

ZynqMP> fdt print /amba/pcie
pcie@fd0e0000 {
        compatible = "xlnx,nwl-pcie-2.11";
        status = "okay";
        #address-cells = <0x00000003>;
        #size-cells = <0x00000002>;
        #interrupt-cells = <0x00000001>;
        msi-controller;
        device_type = "pci";
        interrupt-parent = <0x00000004>;
        interrupts = <0x00000000 0x00000076 0x00000004 0x00000000 0x00000075 0x00000004 0x00000000 0x00000074 0x00000004 0x00000000 0x00000073 0x00000004 0x00000000 0x00000072 0x00000004>;
        interrupt-names = "misc", "dummy", "intx", "msi1", "msi0";
        msi-parent = <0x00000023>;
        reg = <0x00000000 0xfd0e0000 0x00000000 0x00001000 0x00000000 0xfd480000 0x00000000 0x00001000 0x00000080 0x00000000 0x00000000 0x01000000>;
        reg-names = "breg", "pcireg", "cfg";
        ranges = <0x02000000 0x00000000 0xe0000000 0x00000000 0xe0000000 0x00000000 0x10000000 0x43000000 0x00000006 0x00000000 0x00000006 0x00000000 0x00000002 0x00000000>;
        interrupt-map-mask = <0x00000000 0x00000000 0x00000000 0x00000007>;
        bus-range = <0x00000000 0x000000ff>;
        interrupt-map = * 0x000000007ff8495c [0x00000060];
        power-domains = <0x00000025>;
        clocks = <0x00000003 0x00000017>;
        xlnx,pcie-mode = "Root Port";
        linux,phandle = <0x00000023>;
        phandle = <0x00000023>;
        legacy-interrupt-controller {
                interrupt-controller;
                #address-cells = <0x00000000>;
                #interrupt-cells = <0x00000001>;
                linux,phandle = <0x00000024>;
                phandle = <0x00000024>;
        };
};
...