Board.KolibriOS.org
http://board.kolibrios.org/

APIC
http://board.kolibrios.org/viewtopic.php?f=1&t=1195
Страница 1 из 12

Автор:  Ghost [ Вс янв 11, 2009 9:06 am ]
Заголовок сообщения:  APIC

Работаю над поддержкой APIC. В приложении патчь.
Патчь дает поддержку 24 IRQ. Теперь не демаскируются все IRQ, только те что используются, плюс некоторая чистка кода.
Осталось сделать:
1) калибровку таймера LAPIC (FIX ME в core/apic.inc)
2) исправить код shutdown.inc
3) перевод части IRQ на PIC, для поддержки устройств работающих через BIOS (v86)

Патчь не очень стабилен из за не правильной калибровки таймера, и рекоммендуется выключить поддержку BIOS дисков.
Продолжу работу не раньше сегодняшнего вечера. Пока жду комментариев, предложений.

P.S. diamond: спасибо за вчерашнюю помощь.

Вложения:
patch.txt [31.19 КБ]
250 скачиваний

Автор:  Serge [ Вс янв 11, 2009 7:48 pm ]
Заголовок сообщения:  Re: APIC

Проверил у себя - работает но есть проблемы.
1) Индикатор показывает 100% загрузку, а CPU 0-1% загрузку OS/IDLE
2) При переходе на IOAPIC теряются номера irq из pci config. Аудиодрайвер перестаёт работать.

>перевод части IRQ на PIC, для поддержки устройств работающих через BIOS (v86)

Разве PIC и IOAPIC могут работать вместе ?

Автор:  Gluk [ Вс янв 11, 2009 9:13 pm ]
Заголовок сообщения:  Re: APIC

"Теперь не демаскируются все IRQ"

это решает проблему из viewtopic.php?f=1&t=1112 ?

Автор:  Ghost [ Вс янв 11, 2009 9:14 pm ]
Заголовок сообщения:  Re: APIC

Исправил калибровку таймера LAPIC, теперь проблемы со 100% загрузкой нет. Было связано с сильно маленьким квантом времени, сейчас настраивается как и положено 0,01 sec
Serge подробнее, что значит "теряются номера irq из pci config"? В некоторых звуковых драйверах есть работа с PIC на прямую, если перенастраивается irq, но в условиях как они лежат на svn этого нет.

> Разве PIC и IOAPIC могут работать вместе ?
Сейчас это проверяю ) по хорошему это разные микросхемы (как было изначально) паралельно подключенные к INT и INTA, и никто не мешает путем маскирования на одном, и демоскирования на другом выбирать от кого хотим получать IRQ.

Так как не модифицировал shutdown.inc то не работает перезагрузка ядра, выключение и перезагрузка работают.
У кого есть желание проверьте работаспособность, может ещё какие то баги найдутся.

Gluk твою проблему с irq 0x0e думаю да, тебе и карты в руки проверять )

Вложения:
patch2.zip [9.57 КБ]
189 скачиваний

Автор:  Gluk [ Вс янв 11, 2009 9:22 pm ]
Заголовок сообщения:  Re: APIC

щас попробую - отпишусь..

попробовал

вку.. работает!
все круто, супер))
теперь не придется держать
два репозитория - для ноута и домашнего компа!..

Автор:  Serge [ Вс янв 11, 2009 10:56 pm ]
Заголовок сообщения:  Re: APIC

Биос программирует чипсет и линии PIC и записывает их номера в pci config устройств. В режиме APIC прерывания от pci устройств намертво припаяны к линиям APIC ( точно до ICH5 включительно). На моём чипсете Биос назначает АС97 IRQ5, а в режиме APIC это #PIRQB = IRQ17.

Автор:  Ghost [ Вс янв 11, 2009 11:14 pm ]
Заголовок сообщения:  Re: APIC

Serge
В MultiProcessor Specification есть глава 5. Default Configurations, с веселыми картинками ), судя по которым PIC каскадно подключен к APIC и через ключь к процессору, и его можно использовать паралельно с APIC.

P.S. тепер понял про проблему с PCI, надо что то решать. Как первый варинт (и прозьба за одно проверить), регистрировать драйвер на IRQ17, за одно проверим работают ли IRQ > 15.

Автор:  Serge [ Пн янв 12, 2009 6:21 pm ]
Заголовок сообщения:  Re: APIC

Ghost

Драйвер заработал через irq 17 но надо программировать irq 16-23 какак level-triggered active-low

Цитата:
2. When programming the polarity of internal interrupt sources on the APIC, interrupts 0 through 15 receive
active-high internal interrupt sources, while interrupts 16 through 23 receive active-low internal interrupt
sources.
4. PCI Message interrupts are not prevented by hardware in these cases. However, the system must not
program these interrupts as edge-triggered (as required for PCI message interrupts) because the internal
and external PIRQs on these inputs must be programmed in level-triggered modes.

Код:
   ; Reroute IOAPIC & mask all interrupts
    xor ecx, ecx
    mov eax, IOAPIC_REDTBL
@@:
    mov ebx, eax
    call    IOAPIC_read
    mov ah, 0x09           ; Delivery Mode: Lowest Priority, Destination Mode: Logical
    mov al, cl
    add al, 0x20           ; vector
    or  eax, 0x10000       ; Mask Interrupt
    cmp ecx, 16
    jb  .set
    or eax, 0xa000         ;<<< level-triggered active-low
.set:
    xchg    eax, ebx
    call    IOAPIC_write

Автор:  Ghost [ Пн янв 12, 2009 7:24 pm ]
Заголовок сообщения:  Re: APIC

О! А доки на ICH5 я не читал, буду читать....

Есть идея irq0-15 завести через PIC (IOAPIC 0 Ext.), остальные через APIC. И вектора развести, от PIC отсавить 0x20+, а от APIC например 0x50+

Еще вопрос, у устройства можно узнать что оно к #PIRQB подключено?

Автор:  Serge [ Вт янв 13, 2009 12:23 pm ]
Заголовок сообщения:  Re: APIC

Ghost

Похоже что самый надёжный способ через ACPI. Я попробую сделать дамп таблиц. Там есть MADT с настройками векторов для IOAPIC

Автор:  Ghost [ Вт янв 13, 2009 12:54 pm ]
Заголовок сообщения:  Re: APIC

Serge это будет прекрассно, не хотел сам братся за ACPI, в лучшем случае подумывал о MPTable, но она у UP машин есть редко.

Идея завести irq0-15 через PIC связана с поддержкой BIOS дисков, BIOS в части вызова функций в RM про APIC не знает, он работает в рамках PIC.

Автор:  Serge [ Вт янв 13, 2009 4:46 pm ]
Заголовок сообщения:  Re: APIC

Прочитал MADT. Всё как в учебнике PIT назначен на irq2, контроллер ACPI на irq9
Цитата:
Local APIC at fee00000

Local APIC [Id: 0x0, CPU Id: 0x0, enabled]
Local APIC [Id: 0x1, CPU Id: 0x1, enabled]
I/O APIC [Id: 0x2, IRQ base: 0, Addr: 0xfec00000]

Interrupt Override [ISA, Bus IRQ: 0, Glob IRQ: 2, Pol: conform, Trigger: conform]
Interrupt Override [ISA, Bus IRQ: 9, Glob IRQ: 9, Pol: active high, Trigger: level]

Local APIC NMI
[CPU id: 0, LINT#: 1 Pol: conform, Trigger: conform]

Local APIC NMI
[CPU id: 1, LINT#: 1 Pol: conform, Trigger: conform]

Автор:  Ghost [ Вт янв 13, 2009 6:46 pm ]
Заголовок сообщения:  Re: APIC

как из таблицы видно что "PIT назначен на irq2, контроллер ACPI на irq9"?
то что PIT подключен к INTIN2 это дефолтная конфигурация, тут все понятно (кстати это не аксиома, на некоторых машинах и в qemu не так, код есть apic.inc -> unmask_timer).
Что делать с прерыванием ACPI?

P.S. в приложении work copy целиком
Всех с наступающим!

Вложения:
workcopy.zip [571.17 КБ]
218 скачиваний

Автор:  Serge [ Вт янв 13, 2009 7:40 pm ]
Заголовок сообщения:  Re: APIC

Interrupt Override [ISA, Bus IRQ: 0, Glob IRQ: 2, Pol: conform, Trigger: conform]
ISA, Bus IRQ: 0 - irq 0 на шине ISA мапится на Glob IRQ 2
Glob IRQ это линии APIC (0 - 23)

>Что делать с прерыванием ACPI?
Он и на PIC идёт как irq9. Но у него нестантдартные настройки: active high и по уровню а все ISA стоят по фронту. Замапить и замаскировать. Это не расшареное прерывание.

Автор:  Serge [ Ср янв 14, 2009 2:12 pm ]
Заголовок сообщения:  Re: APIC

Скомпилировал acpica драйвер. Уже загружается и проходит инициализацию, ставит обработчик на irq9. Остаётся сделать нормальный frontend и будет полноценная поддержка acpi.

Страница 1 из 12 Часовой пояс: UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/