LINUX.ORG.RU

Вопрос к гуру железа (PCI особенно)


0

2

Я не спец в железе, но мне нужно разобраться с девайсом и добавить в свой продукт возможность получать с него некую информацю. Есть уникальное (сделанное на заказ) устройство подключенное через PCI9052 мост (PLX). Управляется этот мост неким стандартным модулем который входит в ядро (phantom, hisax) по информации из udevadm. Проблема заключается в том, что если phantom и любое другое устройство получает одно и тоже прерывание происходит зависание системы, причем критичность зависит от того как часто второе устройство использует прерывание. К примеру если это попадает на клаву то ОС загружается и работает нормально пока не трогаешь клавиши, каждое нажатие будет отрабатываться сек 30, причем сопровождаться полным зависанием системы на это время... Проблема пропадает с включением в BIOS-е APIC. Только у меня возник вопрос о том как работает эта байда (APIC). APIC распределил PLX-у отдельное прерывание, но осознано ли? Может оно когда-то закинет на то прерывание еще какой-то девайс?

Можно как-то помониторить аппаратуру на уровне ОС, чтобы узнать что происходит? Тесть получается, что phantom получает все прерывания (допустим irq 19) не анализируя от кого те пришли, долго над ними колдует, а потом передает следующему обработчику?

Ну и как всегда, на виндовсе оно работает, на данной железяке :(

этот комментарий может содержать много бреда)

Ну и как всегда, на виндовсе оно работает, на данной железяке :(

менять в DSDT номер прерывания для phantom на незанятое ничеми\никем
слабо себе представляю как явно указать прерывание именно для модуля

phantom получает все прерывания

нужно сделать дами DSDT, декомпилить его и там явно, ручками прописать все прерывания
но это лишнее ибо

Проблема пропадает с включением в BIOS-е APIC.

smilessss ★★★★★
()

Три раза перечитал мессагу, но так и не понял - причем тут hisax и phantom. Ты написал драйвер на эту железку, или наддешься, что ее подхватят стандартные драйверы ядра?

tailgunner ★★★★★
()
Ответ на: комментарий от DenisPA

А вроде написано

В том, что написано, полезной информации - на фразу «устройство генерирует прерывание, которое невозможно сбросить».

Это же мост! Устройство за ним!

Ахренеть. Я не знаю, сильно ли отличается PLX9052 от PLX9054, с которым я работал, но, если не сильно, то именно он является PCI-устройством. Что находится «за ним» - системе неизвестно.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Хм, как показала практика это не така, там есть такая хреть как SubDevice. Вижу ее через hwinfo, вот на нее зачемто и вешается этот phantom...

Нашел дровапод линь, пойду компилить...

LinuxDebian ★★★★
() автор топика
Ответ на: комментарий от LinuxDebian

Хм, как показала практика это не така, там есть такая хреть как SubDevice.

Мде. Ну, если ты и сам крутой спец по PCI, то...

Нашел дровапод линь, пойду компилить...

Удачи, чо.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Мде. Ну, если ты и сам крутой спец по PCI, то...

Я вообще не спец, мне дали эту байду и сказали разбирайся... Вот я и пытаюсь собрать какуюто инфу. Оперирую только теми фактами которые вижу: Дали девайс, девайс завесил ОС. Я посмотрел какие дрова юзает девайс, посмотрел карту прерываний. Как показал эксперемент с клавой, девайс с данными дровами должен иметь выделенное прерывание, ок, включил APIC.

Что находится «за ним» - системе неизвестно.

Я интуитивно понимаю, что так должно и быть. На как показал мой примитивный експеремент: втыкнул планту без зашитого в EEPROM SubDevice и она не грузит «фантом» и система не висниет. От сюда и умозаключиение, что SubDevice пробрасывает устройство через мост и ОС неправильно приписывает ему драйвер.

Недавно чувак работавший с этой платой по виндой дал мне исходники ПЛХ СДК таи м дрова есть... Ок теперь я знаю, что под ПЛХ есть родные дрова под линь...

Все, что я хотел в этой теме это узнать как обеспечить стабильную работу ОС, чтобы начать разбиратся, может ли APIC гарантировать это. Думал может тот кто работал скажет к примеру, что то особе, что могло бы вызвать такое поведение... К примеру: «у меня не грузится никакой 'фантом'...»

LinuxDebian ★★★★
() автор топика
Ответ на: комментарий от LinuxDebian

Я вообще не спец,

Это очевидно. Еще очевидно, что ты не умеешь слушать.

мне дали эту байду и сказали разбирайся...

И в чем твое задание? Драйвер написать?

Недавно чувак работавший с этой платой по виндой дал мне исходники ПЛХ СДК таи м дрова есть... Ок теперь я знаю, что под ПЛХ есть родные дрова под линь...

Вангую, что это говно на WinDriver.

Все, что я хотел в этой теме это узнать как обеспечить стабильную работу ОС, чтобы начать разбиратся, может ли APIC гарантировать это.

Пока ты не разберешься, в чем проблема - не узнаешь. Насколько _я_ понимаю, твоя плата сама по себе выдает прерывание, которое никто не может сбросить; поэтому, если у платы общий IRQ с каким-нибудь устройством, оно перестает работать (и да, может зависнуть система). APIC проблему не решает, а скрывает - он выделяет плате отдельный IRQ, на котором залипшее прерывание ни на что не влияет. Ищи в логах фразу «IRQnn - nobody cared».

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Спасибо за информацию!

Вангую, что это говно на WinDriver.

Да, вы правы он не парился использовал WinDriver.

И в чем твое задание? Драйвер написать?

Есть продукт который должен будет получать информацию с этого утройства. Мне нужно, как мне сказали, общатся с мостом + инициализировать мост. Вроде ПЛХ СДК это позволяет, как я видел в мануале.

«IRQnn - nobody cared»

Есть только такое, достал из дмесседжа. Или вы имели в виду с отключенным APIC получить лог, а потом помотреть его...

d[    0.000000] ACPI: IRQ0 used by override.
[    0.000000] ACPI: IRQ2 used by override.
[    0.000000] ACPI: IRQ9 used by override.
[    0.000000] NR_IRQS:2304 nr_irqs:256
[    0.111613] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 *5 6 7 10 12 14 15)
[    0.111722] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 *5 6 7 11 12 14 15)
[    0.111835] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 *5 6 7 10 12 14 15)
[    0.111941] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 *5 6 7 11 12 14 15)
[    0.112058] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 *5 6 7 10 12 14 15)
[    0.112164] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 *5 6 7 11 12 14 15)
[    0.112274] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 *5 6 7 10 12 14 15)
[    0.112380] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 *5 6 7 11 12 14 15)
[    0.113094] PCI: Using ACPI for IRQ routing
[    0.825145] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[    0.826414] serial 0000:03:0c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.829239] ata_piix 0000:00:1f.1: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[    0.831556] ehci_hcd 0000:00:1d.7: PCI INT D -> GSI 23 (level, low) -> IRQ 23
[    0.848337] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.848637] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19
[    0.848916] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18
[    1.284225] e1000 0000:02:00.0: PCI INT A -> GSI 21 (level, low) -> IRQ 21
[    1.742607] e1000 0000:02:01.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22
[   10.707036] i801_smbus 0000:00:1f.3: PCI INT B -> GSI 17 (level, low) -> IRQ 17
[   10.894854] phantom 0000:03:0d.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[   10.894959] IRQ 17/phantom: IRQF_DISABLED is not guaranteed on shared IRQs
[   11.386634] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[   11.677095] TEWS TECHNOLOGIES - TDRV009 Driver 0000:03:0b.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19

Меня заверяют, что утройство не может быть инициализатором оно работает через мост и не может испускать прерываний...

И вопрос по поводу «подустройства», так все таки его мост пробрасывает на PCI или нет?

LinuxDebian ★★★★
() автор топика
Ответ на: Спасибо за информацию! от LinuxDebian

он не парился использовал WinDriver.

Когда я смотрел (давно), WinDriver был беспомощным говном, и проще было написать свой драйвер.

Мне нужно, как мне сказали, общатся с мостом + инициализировать мост. Вроде ПЛХ СДК это позволяет, как я видел в мануале.

Что такое этот SDK - ядерный драйвер? Usermode-программа? Просто документация по регистрам? Исходный код есть?

Или вы имели в виду с отключенным APIC получить лог, а потом помотреть его...

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

Меня заверяют,

Первая заповедь драйверописателя: железячники косячат, а потом изворачиваются и сваливают вину на софт.

что утройство не может быть инициализатором оно работает через мост и не может испускать прерываний...

Устройство может попросить «мост» сгенерировать прерывание.

И вопрос по поводу «подустройства», так все таки его мост пробрасывает на PCI или нет?

Я не могу тебе ответить, потому что твой вопрос бессмысленен. Если ты не знаешь ничего о PCI-устройствах, тебе нужен вводный курс. Почитай хотя бы: http://lwn.net/images/pdf/LDD3/ch12.pdf

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.