реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> MSI прерывания в QNX 6.5.0 X86, Включение MSI прерваний
xxxmatrixxx
сообщение Jan 16 2018, 17:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050



Всем добрый вечер!!!

Есть плата с шиной Pci Express, в данной плате реализована работа MSI прерываний

я написал драйвер под Linux, разрешение MSI прерываний осуществляется через функцию pci_msi_anable и все хорошо работало, пока не появилась потребность переписать драйвер под QNX 6.5.0

по документации на pci server(стандартный, что устанавливается вместе с QNX), достаточно просто передать флаг PCI_USE_MSI в функцию pci_attach_device и все само настроится... но вот только не работает...

вот таким образом я получаю дескриптор на устройство:
CODE
pci_dev_hndl = pci_attach_device(NULL,( PCI_SEARCH_VENDEV | PCI_INIT_ALL | PCI_INIT_IRQ | PCI_MASTER_ENABLE | PCI_USE_MSI),minor,&pci_info);


результат так же сохраняется в структуре pci_dev_info pci_info, одним из полей которой является:
uint8_t msi;

данное поле всегда равно нулю при считывании после выполнения pci_attach_device, мне казалось, там должен быть сохранен номер msi прерывания, информации по данному полю я не смог найти

если набрать команду pci -vvv до загрузки драйвера и после, то ничего не меняется в адресном пространстве pci, самое главное, что я смотрю, это capability регистр с id 0x05, там видно, что msi прерывания запрещены, адреса в нулях и данные...
CODE
Class = Communication (Other)
Vendor ID = a203h, Unknown
Device ID = 9472h, Unknown Unknown
PCI index = 0h
Class Codes = 078000h
Revision ID = 3h
Bus number = 3
Device number = 0
Function num = 0
Status Reg = 10h
Command Reg = 107h
I/O space access enabled
Memory space access enabled
Bus Master enabled
Special Cycle operations ignored
Memory Write and Invalidate disabled
Palette Snooping disabled
Parity Error Response disabled
Data/Address stepping disabled
SERR# driver enabled
Fast back-to-back transactions to different agents disabled
PCI INTx enabled
Header type = 0h Single-function
BIST = 0h Build-in-self-test not supported
Latency Timer = 0h
Cache Line Size= 8h un-cacheable
BAR - 0 [Mem] = f7d80000h 64bit length 524288 enabled
Subsystem Vendor ID = a203h
Subsystem ID = 9472h
Max Lat = 0ns
Min Gnt = 0ns
PCI Int Pin = INT A
Interrupt line = 5
CPU Interrupt = 5h
Capabilities Pointer = 40h
Capability ID = 1h - Power Management
Capabilities = 7e03h - 8h
Capability ID = 5h - Message Signaled Interrupts
Capabilities = 80h - 0h
Capability ID = 10h - PCI Express
Capabilities = 1h - 288fc0h
Device Dependent Registers:
0x040: 0148 037e 0800 0000 0558 8000 0000 0000
0x050: 0000 0000 0000 0000 1000 0100 c08f 2800
0x060: 1028 0b00 11f4 0300 0000 1110 0000 0000
0x070: 0000 0000 0000 0000 0000 0000 0000 0000
...
0x0f0: 0000 0000 0000 0000 0000 0000 0000 0000


я решил ручками написать функцию, которая активирует MSI прерывания, формально реализовать ту же функцию pci_msi_anable в линукс, но наткнулся на особенную организацию MSI прерываний в архитектуре Intel, настроил адреса вот так:
addr_dma_msi_lo = 0xFEE00000; // low part address
addr_dma_msi_hi = 0x00000000; // hi part address
данные:
msi_cap_message_data = 0x4042;
CODE
Class = Communication (Other)
Vendor ID = a203h, Unknown
Device ID = 9472h, Unknown Unknown
PCI index = 0h
Class Codes = 078000h
Revision ID = 3h
Bus number = 3
Device number = 0
Function num = 0
Status Reg = 10h
Command Reg = 507h
I/O space access enabled
Memory space access enabled
Bus Master enabled
Special Cycle operations ignored
Memory Write and Invalidate disabled
Palette Snooping disabled
Parity Error Response disabled
Data/Address stepping disabled
SERR# driver enabled
Fast back-to-back transactions to different agents disabled
PCI INTx disabled
Header type = 0h Single-function
BIST = 0h Build-in-self-test not supported
Latency Timer = 0h
Cache Line Size= 8h un-cacheable
BAR - 0 [Mem] = f7d80000h 64bit length 524288 enabled
Subsystem Vendor ID = a203h
Subsystem ID = 9472h
Max Lat = 0ns
Min Gnt = 0ns
PCI Int Pin = INT A
Interrupt line = 5
CPU Interrupt = 5h
Capabilities Pointer = 40h
Capability ID = 1h - Power Management
Capabilities = 7e03h - 8h
Capability ID = 5h - Message Signaled Interrupts
Capabilities = 81h - fee0000h Enabled
Capability ID = 10h - PCI Express
Capabilities = 1h - 288fc0h
Device Dependent Registers:
0x040: 0148 037e 0800 0000 0558 8100 0000 e0fe
0x050: 0000 0000 4240 0000 1000 0100 c08f 2800
0x060: 1028 0b00 11f4 0300 0000 1110 0000 0000
0x070: 0000 0000 0000 0000 0000 0000 0000 0000
...
0x0f0: 0000 0000 0000 0000 0000 0000 0000 0000


но мне не получилось зарегистрировать обработчик прерывания на вектор 0x42, что я указал, постоянно InterruptAttach выдавал ошибку

уважаемые форумчане, был ли у кого опыт включения MSI прерываний под QNX 6.5.0 X86, поделитесь, пожалуйста опытом, 2 недели уже бьюсь, пока результата никакого????

Сообщение отредактировал xxxmatrixxx - Jan 16 2018, 17:32
Go to the top of the page
 
+Quote Post
xxxmatrixxx
сообщение Jan 17 2018, 14:29
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 28-03-12
Из: Санкт-Петербург
Пользователь №: 71 050



нашел причину, почему стандартные средства QNX не отрабатывали флаг PCI_USE_MSI - необходимо грузить ядро с pci-bios-v2 вместо простого pci-bios, после пересборки ядра с этим сервером, MSI верно определились

всю информацию можно найти в http://www.qnx.com/developers/docs/6.5.0/i...ck_gettime.html

вбив в строку поиска msi

надеюсь, эта информация кому-нибудь поможет
Go to the top of the page
 
+Quote Post
Olej
сообщение Jul 1 2018, 09:56
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(xxxmatrixxx @ Jan 17 2018, 17:29) *
надеюсь, эта информация кому-нибудь поможет

Информация любопытная... познавательная...
Только вряд ли "кому-нибудь поможет", ... потому как OS QNX на сегодня, на 36-м году своей жизни (с 1982) - абсолютно мёртвое изделие, конченое ... и даже не только в преждних версиях 6.5.Х, а даже в 7.0 от марта 2017 - это всё "потуги".
Проторговались, прожлобились... santa2.gif ... при активной помощи питерской "СВД Встраиваемые системы" wacko.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 20:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016