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

 
 
> MSI в драйвере PCI Express в Linux, Как включить режим Multiple Message Enable для MSI?
novartis
сообщение Oct 19 2010, 15:52
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Добрый день. Вожусь с отладочной платой от Altera Stratix IV GX Dev Kit. Ваяем потихоньку драйвер для PCI Express.
Ни как не получается задействовать режим Multiple Message Enable для MSI.
В драйвере использую функцию pci_enable_msi_block:

static int __devinit probe( struct pci_dev *pdev, const struct pci_device_id *id )
{
...
pci_enable_device( pdev );
pci_set_master( pdev );
...
int msi_count = 1;
int msiblock = pci_enable_msi_block( pdev , msi_count);
...
request_irq( pdev->irq, interruptHandler, IRQF_SHARED, MODULE_NAME, pdev );
...
}
В этом виде MSI разрешено, прерывание в обработчик поступает.
Если ставлю msi_count больше 1 (по идее вплоть до 32) функция pci_enable_msi_block возвращает 1,
то есть подключить можно только одну линию.
Правильно ли я использую функцию pci_enable_msi_block и
почему она разрешает подключить только одну линию прерываний?

lspci на плату такой:
#lspci -s 01:00.0 -vvv

01:00.0 Class ff00: Altera Corporation Device e001 (rev 01)
Subsystem: Device 5bde:1100
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 34
Region 0: Memory at 80000000 (64-bit, prefetchable) [size=64K]
Capabilities: [50] MSI: Enable+ Count=1/32 Maskable- 64bit+
Address: 00000000fee0300c Data: 416b
Capabilities: [78] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] Express (v2) Legacy Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #1, Speed 5GT/s, Width x8, ASPM L0s, Latency L0 unlimited, L1 unlimited
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntrySize=0
Arb: Fixed- WRR32- WRR64- WRR128- 100ns- onfig- - - TableOffset=0
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256- Fixed- RR32-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
Kernel driver in use: driver_altera

Вообщем подскажите как в регистрах MSI:
-------------------------------------------------------------
Capabilities: [50] MSI: Enable+ Count=1/32 Maskable- 64bit+
Address: 00000000fee0300c Data: 416b
-------------------------------------------------------------
сделать Maskable+ и сделать Count=32/32?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vshemm
сообщение Oct 23 2010, 19:45
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803



pci_enable_msi_block используется правильно (с поправкой на то, что count может быть степенью 2).

Наиболее вероятные причины невозможности подключения более одной линии следующие:

1. Само устройство не поддерживает несколько линий прерываний. Тут нужно смотреть даташит на него на предмет настройки разных линий прерываний для разных функций. Строчка Capabilities: [50] MSI: Enable+ Count=1/32 Maskable- 64bit+ показывает аппаратные возможности девайса, и нет общего способа их менять (опять же, нужно курить мануал на устройство).

2. Т.к. MSI требует, чтобы линии прерываний выделялись непрерывно, то возможен случай, когда не найдется 32 подряд идущих свободных линий.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:26
Рейтинг@Mail.ru


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