Перейти к содержанию

    

Отстуствие MSI прерываний в Ubuntu 16.04 с контроллером APIC под управлением UEFI BIOS

Всем добрый день!!!

 

Уже 3ю неделю бьюсь с прерываниями MSI под Ubuntu 16.04 на компьютерах, где стоит UEFI BIOS - msi прерывания генерируются платой(это видно чипскопом), но ОС их не видит

 

причем все нормально работает, т.е. прерывания приходят на компьютерах(это видно и в proc/interrupts и то , что вызывается обработчик прерывания), где стоит простой BIOS(не UEFI), как на 32х разрядной, так и на 64х разрядной ОС

 

пробовал следующее, но это не помогло:

 

- отключать Secure Boot

 

- дописал откл и вкл прерываний после регистрации обработчика прерывания:

 

//MSI
    if (pci_enable_msi(device_mil[minor].pdev) == 0) {
        debug_print("MSI IRQ is %d\n",device_mil[minor].pdev->irq);
        device_mil[minor].irq_num = device_mil[minor].pdev->irq;
        debug_print("MSI DEVICE IRQ is %d\n",device_mil[minor].irq_num);
        debug_print("MSI enabed! \n");
    }
    else
    {
            printk(KERN_ERR"DEV_MIL_DRV_UDx: MSI not enabed! \n");
            pr_err("pci_enable_msi:");
            goto err6;
    }

//IRQ        
    if (request_irq(device_mil[minor].irq_num, (irq_handler_t) irq_handler, IRQF_PROBE_SHARED, (char *)device_mil[minor].dev_name, &device_mil[minor]) != 0) {
        printk(KERN_ERR"DEV_MIL_DRV_UDx: IRQ requesting failed \n");
        pr_err("request_irq:");
        goto err6;
    }
        
    disable_irq(device_mil[minor].irq_num);
    enable_irq(device_mil[minor].irq_num);

 

- пробовал откл APIC контроллер

 

 

вот лог /proc/interrupt после загрузки драйвера и после посылки данных, когда прерывания должны были прийти( PCIe_1553UDx_0 мое устройство):

 

CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7

0: 23 0 0 0 0 0 0 0 IO-APIC 2-edge timer

1: 3 0 0 0 0 0 0 0 IO-APIC 1-edge i8042

5: 0 0 0 0 0 0 0 0 IO-APIC 5-edge parport0

8: 1 0 0 0 0 0 0 0 IO-APIC 8-edge rtc0

9: 0 0 0 0 0 0 0 0 IO-APIC 9-fasteoi acpi

12: 4 0 0 0 0 0 0 0 IO-APIC 12-edge i8042

14: 0 0 0 0 0 0 0 0 IO-APIC 14-fasteoi INT345D:00

16: 0 0 0 0 0 0 0 0 IO-APIC 16-fasteoi idma64.0, i2c_designware.0

17: 611 303 0 0 0 0 0 0 IO-APIC 17-fasteoi idma64.1, snd_hda_intel:card1, i2c_designware.1

20: 0 0 0 0 0 0 0 0 IO-APIC 20-fasteoi idma64.2

121: 753 697 0 362 0 5675 0 2013 PCI-MSI 327680-edge xhci_hcd

314: 13101 0 0 0 4398 0 1686 0 PCI-MSI 376832-edge ahci[0000:00:17.0]

315: 55 0 3506 0 0 522 0 0 PCI-MSI 2097152-edge enp4s0

316: 0 0 0 0 0 0 0 0 PCI-MSI 3145728-edge enp6s0

317: 1213 0 0 0 0 0 0 58559 PCI-MSI 524288-edge nvkm

318: 30 0 0 0 0 0 0 0 PCI-MSI 360448-edge mei_me

319: 703 105 0 0 0 0 0 0 PCI-MSI 514048-edge snd_hda_intel:card0

320: 0 0 0 0 0 0 0 0 PCI-MSI 1572864-edge PCIe_1553UDx_0

NMI: 1 0 0 0 0 0 0 1 Non-maskable interrupts

LOC: 1994714 659098 501525 243498 293273 190401 520489 2272568 Local timer interrupts

SPU: 0 0 0 0 0 0 0 0 Spurious interrupts

PMI: 1 0 0 0 0 0 0 1 Performance monitoring interrupts

IWI: 0 0 0 0 0 0 0 0 IRQ work interrupts

RTR: 6 0 0 0 0 0 0 0 APIC ICR read retries

RES: 1818 1485 603 471 389 302 301 537 Rescheduling interrupts

CAL: 1814 1765 1811 1696 1666 1820 1672 1738 Function call interrupts

TLB: 239 279 281 195 193 393 239 212 TLB shootdowns

TRM: 1 1 1 1 1 1 1 1 Thermal event interrupts

THR: 0 0 0 0 0 0 0 0 Threshold APIC interrupts

DFR: 0 0 0 0 0 0 0 0 Deferred Error APIC interrupts

MCE: 0 0 0 0 0 0 0 0 Machine check exceptions

MCP: 3 3 3 3 3 3 3 3 Machine check polls

ERR: 0

MIS: 0

PIN: 0 0 0 0 0 0 0 0 Posted-interrupt notification event

PIW: 0 0 0 0 0 0 0 0 Posted-interrupt wakeup event

 

так же лог загрузки драйвера:

[ 521.782072] DEV_MIL_DRV_UDx: module_start() begin.

[ 521.782088] DEV_MIL_DRV_UDx: Find Device UDx(DEVICE_ID = 0x9472) #1

[ 521.782227] DEV_MIL_DRV_UDx: cdev_init

[ 521.782229] DEV_MIL_DRV_UDx: Memory

[ 521.782332] DEV_MIL_DRV_UDx: Memory

[ 521.782333] DEV_MIL_DRV_UDx: Maska was setted

[ 521.782334] DEV_MIL_DRV_UDx: module_start(): try to allocate DMA buffer.

[ 521.783197] DEV_MIL_DRV_UDx: module_start(): to address = 0xffffa78fc9681000 was written 0xfd000000

[ 521.783199] DEV_MIL_DRV_UDx: module_start(): to address = 0xffffa78fc9681004 was written 0xf

[ 521.783287] DEV_MIL_DRV_UDx: MSI IRQ is 320

[ 521.783288] DEV_MIL_DRV_UDx: MSI DEVICE IRQ is 320

[ 521.783289] DEV_MIL_DRV_UDx: MSI enabed!

[ 521.783322] DEV_MIL_DRV_UDx: IRQ requesting good

[ 521.783325] DEV_MIL_DRV_UDx: dev_type = 0x43

[ 521.783326] DEV_MIL_DRV_UDx: DEVICE CREATE GOOD

 

 

вот лог lspci -v после загрузки драйвера:

03:00.0 Communication controller: Device a203:9472 (rev 03)

Subsystem: Device a203:9472

Flags: fast devsel, IRQ 320

Memory at df200000 (64-bit, non-prefetchable)

Capabilities: [40] Power Management version 3

Capabilities: [48] MSI: Enable+ Count=1/1 Maskable- 64bit+

Capabilities: [58] Express Endpoint, MSI 00

Capabilities: [100] Device Serial Number 00-00-00-00-00-00-00-00

 

я смотрел, полностью карту регистров, а конкретно регистры, которые отвечают за MSI(cap_id = 0х05), там выставлено ОС все верно

 

возникала ли у кого такая проблема и как решали вы ее???

 

буду очень благодарен за любой совет, пока даже не знаю, где копать...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решил проблему, мне данный драйвер передали от другого программиста, дело было в том, что он не разрешал выходить модулю на шину мастером, короче не вызывал функцию pci_master_enable()

 

всем спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация