Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Dec 08, 2019 5:18 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 52 posts ]  Go to page Previous 1 2 3 4
Author Message
PostPosted: Mon Jul 08, 2013 1:20 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
Рестарт ядра снова виснет. Пишет установка обработчиков IDE и всё. Причем у меня установлен AHCI, и контроллеров IDE нет.

Будем посмотреть.
Вообще заметил такую жопу - куча устройств на одном прерывании может висеть и attach_int_handler в этом случае отрабатывает как то криво.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Mon Jul 08, 2013 1:24 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario_r4
На PCI обычно надо прочитать или записать несколько бит в регистрах устройства, чтобы снять запрос прерывания. Проблемы возникают если драйвер этого не делает.
Ну и надо учитывать что работа ядра в режиме обработчика прерывания сильно отличается от обычной. Многие функции ядра нельзя использовать.


Top
   
PostPosted: Mon Jul 08, 2013 1:46 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
На PCI обычно надо прочитать или записать несколько бит в регистрах устройства, чтобы снять запрос прерывания. Проблемы возникают если драйвер этого не делает.

Вообще-то подробности бы не помешали.
Serge wrote:
Ну и надо учитывать что работа ядра в режиме обработчика прерывания сильно отличается от обычной. Многие функции ядра нельзя использовать.

Там всего-то обнуление переменной, да запись в порт IDE.

И вообще в AHCI назначение не должно производиться вообще, т.к. контроллер не найден. Скорее всего у меня в коде нужны кое-какие проверки еще.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Mon Jul 08, 2013 2:11 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Вообще-то подробности бы не помешали.

Это надо внимательно документацию на контроллер читать. С isa проблем нет, там прерывание выставлено по фронту. Импульс от чипа прошёл, и всё. А PCI по уровню. Контроллер его должен снять. У некоторых устройств достаточно прочитать регистр статуса прерываний и они автоматом сбросятся. У других надо эти биты переписать для сброса.


Top
   
PostPosted: Tue Jul 09, 2013 3:37 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
Рестарт ядра снова виснет. Пишет установка обработчиков IDE и всё. Причем у меня установлен AHCI, и контроллеров IDE нет.

Проверь пожалуйста SVN r.3785, если не прокатит, то теперь (благодаря усилиям yogev_ezra) есть отображение лога BOARD в черный фон при загрузке, вторым столбцом. Сделай фото экрана в этом случае.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Tue Jul 09, 2013 10:36 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Spoiler: Show
K : Attach Interrupt 6 Handler 8003070B
K : Set IDE IRQ6 return code 80059C10
Intel videocard detected, PciId=8086:0102, which is known
EDID successfully read:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
K : edx=00036881
K : has_ownership
K : edx=00036881
K : has_ownership
K : HCSPARAMS=00200002, HCCPARAMS=00036881
K : attaching to IRQ 0A
K : Attach Interrupt 10 Handler 8002E3E0
K : EHCI controller at 00:D0 with 2 ports initialized
K : HCSPARAMS=00200002, HCCPARAMS=00036881
K : attaching to IRQ 03
K : Attach Interrupt 3 Handler 8002E3E0
K : EHCI controller at 00:E8 with 2 ports initialized
K : Attach Interrupt 1 Handler 800325D0
K : IRQ1 error code 80059C4C
K : kernel SVN r3785
K : 4 CPU detected
K : BAR0 01F0
K : BAR1 03F4
K : BAR2 0170
K : BAR3 0374
K : BAR4 0000
K : IDEContrProgrammingInterface 0000
K : IDE_Interrupt 0202
K : [2] EHCI 80991094: status of port 0 changed to 00001803
K : [2] EHCI 80995094: status of port 0 changed to 00001803
Loading RTL8169 driver
Hooking into device, dev:0, bus:3, irq:A, addr:0000DE00
K : [12] EHCI 80991094 port 0 state is 00001801
K : [12] EHCI 80991094: port 0 has HS or FS device, resetting
K : [12] EHCI 80995094 port 0 state is 00001801
K : [12] EHCI 80995094: port 0 has HS or FS device, resetting
K : [14] EHCI 80991094: reset port 0 done
K : [14] EHCI 80995094: reset port 0 done
K : [16] EHCI 80991094 status of port 0 is 00001005
K : [16] EHCI 80995094 status of port 0 is 00001005
K : address set in device
K : async advance doorbell
K : address set in device
K : async advance doorbell
K : async advance int
K : address set for controller
K : async advance int
K : address set for controller
K : async advance doorbell
K : async advance doorbell
K : async advance int
K : async advance int
K : device descriptor: 12 01 00 02 09 00 01 40 87 80 24 00 00 00 00 00 00 01
K : found USB device with ID 8087:0024, 1 configuration(s)
K : device descriptor: 12 01 00 02 09 00 01 40 87 80 24 00 00 00 00 00 00 01
K : found USB device with ID 8087:0024, 1 configuration(s)
K : config descriptor: 09 02 19 00 01 01 00 E0 00 09 04 00 00 01 09 00 00 00 07 05 81 03 01 00 0C
K : USB interface class/subclass/protocol = 09/00/00
K : config descriptor: 09 02 19 00 01 01 00 E0 00 09 04 00 00 01 09 00 00 00 07 05 81 03 02 00 0C
K : hub config: 09 29 06 09 00 32 00 00 FF
K : found hub with 6 ports
K : USB interface class/subclass/protocol = 09/00/00
K : hub config: 0B 29 08 09 00 32 00 00 00 FF FF
K : found hub with 8 ports
========= tmpdisk 0.45 =========
trying to add disk
disk size is not specified
10% from free RAM will be used, new DiskSize: 324 MB
operation completed successfully
K : final: hub 808246D0 port 0 status 0101 change 01
K : final: hub 808247D0 port 2 status 0101 change 01
K : final: hub 808247D0 port 4 status 0101 change 01
K : address set in device
K : async advance doorbell
K : async advance int
K : address set for controller
K : async advance doorbell
K : async advance int
K : device descriptor: 12 01 00 02 00 00 00 08 6D 04 62 C0 00 31 01 02 00 01
K : found USB device with ID 046D:C062, 1 configuration(s)
K : config descriptor: 09 02 22 00 01 01 00 A0 31 09 04 00 00 01 03 01 02 00 09 21 10 01 00 01 22 47 00 07 05 81 03 06 00 0A
K : USB interface class/subclass/protocol = 03/01/02
K : USB HID device detected
K : report descriptor: 05 01 09 02 A1 01 09 01 A1 00 05 09 19 01 29 08 15 00 25 01 95 08 75 01 81 02 95 00 81 03 05 01 09 30 09 31 16 01 F8 26 FF 07 75 0C 95 02 81 06 09 38 15 81 25 7F 75 08 95 01 81 06 05 0C 0A 38 02 95 01 81 06 C0 C0
K : address set in device
K : async advance doorbell
K : async advance int
K : address set for controller
K : async advance doorbell
K : async advance int
K : device descriptor: 12 01 10 01 00 00 00 08 2A 06 01 02 00 01 00 01 00 01
K : found USB device with ID 062A:0201, 1 configuration(s)
K : config descriptor: 09 02 3B 00 02 01 00 A0 32 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 41 00 07 05 81 03 08 00 0A 09 04 01 00 01 03 01 02 00 09 21 10 01 00 01 22 98 00 07 05 82 03 04 00 0A
K : USB interface class/subclass/protocol = 03/01/01
K : USB HID device detected
K : USB interface class/subclass/protocol = 03/01/02
K : USB HID device detected
K : report descriptor: 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 81 01 95 03 75 01 05 08 19 01 29 03 91 02 95 05 75 01 91 01 95 06 75 08 15 00 26 FF 00 05 07 19 00 2A FF 00 81 00 C0
K : report descriptor: 05 01 09 02 A1 01 85 05 09 38 09 30 09 31 15 81 25 7F 75 08 95 03 81 06 C0 05 0C 09 01 A1 01 85 01 19 00 2A 3C 02 15 00 26 3C 02 95 01 75 10 81 00 C0 05 01 09 80 A1 01 85 02 19 81 29 83 25 01 75 01 95 03 81 02 95 05 81 01 C0 05 09 09 01 A1 01 85 04 0A 56 01 0A 57 01 0A 58 01 0A 59 01 0A 5A 01 0A 5B 01 0A B2 00 0A 06 02 15 00 25 01 75 01 95 08 81 02 C0 05 09 09 01 A1 01 85 06 15 00 25 01 75 01 95 15 81 01 0A 5C 01 75 01 95 01 81 02 75 01 95 02 81 01 C0
K : final: hub 808247D0 port 4 status 0503 change 10
K : address set in device
K : async advance doorbell
K : async advance int
K : address set for controller
K : async advance doorbell
K : async advance int
K : device descriptor: 12 01 00 02 00 00 00 40 51 09 42 16 00 01 01 02 03 01
K : found USB device with ID 0951:1642, 1 configuration(s)
K : config descriptor: 09 02 20 00 01 01 00 80 32 09 04 00 00 02 08 06 50 00 07 05 81 02 00 02 FF 07 05 02 02 00 02 FF
K : USB interface class/subclass/protocol = 08/06/50
K : USB mass storage device detected
K : 1 logical unit(s)
K : media is ready
K : 0 attempts, 24 ticks
K : peripheral device type is 00
K : direct-access mass storage device detected
K : sector size is 512, last sector is 30233587
K : Attach Interrupt 10 Handler 809A4A54
ETH_input: Unknown packet type=0018
ETH_input: Unknown packet type=0888
На рестарте после
K : IDEContrProgrammingInterface 0000
K : IDE_Interrupt 0202
пишет
'K : warning: relinking handler from IRQ3 to IRQ10
и всё виснет.

Update. Нашел ошибки в коде.
Code:
        stdcall attach_int_handler, 14, IDE_common_irq_handler, 0
        DEBUGF  1, "K : Set IDE IRQ14 return code %x\n", eax
        stdcall attach_int_handler, 15, IDE_common_irq_handler, 0
        DEBUGF  1, "K : Set IDE IRQ15 return code %x\n", eax

        stdcall enable_irq, 14 <<<<<<лишний вызов, attach_int_handler  уже размаскировала линию irq
        stdcall enable_irq, 15 <<<<<<лишний вызов

        jmp     .enable_IDE_interrupt
;--------------------------------------
.sata_ide:
        cmp     ax, 0x0185
        je      .sata_ide_1

        cmp     ax, 0x018f
        jne     .end_set_interrupts
;--------------------------------------
.sata_ide_1:
        cmp     [IDEContrRegsBaseAddr], 0
        je      .end_set_interrupts

        mov     ax, [IDE_Interrupt]
        movzx   eax, al
        stdcall attach_int_handler, eax, IDE_common_irq_handler, 0
        DEBUGF  1, "K : Set IDE IRQ%d return code %x\n", [IDE_Interrupt]:1, eax

        stdcall enable_irq, eax <<<<<<в eax содержится адрес структуры обработчика
Update 2.
Mario
Думаю, твой код здесь ни при чём.
Методом научного тыка установил, что рестарт с включённым APIC не приводит к зависанию ядра. Когда я правил sound.asm у меня в образе лежал devices.dat и ядро работало в режиме apic. Потом я обновлял образ, когда менял /addappl на /KolibriOS, ядро работало в дефолтном PIC и перестало рестартовать.


Attachments:
File comment: рестарт ядра в режиме apic
restart-apic.txt [5.75 KiB]
Downloaded 170 times
Top
   
PostPosted: Tue Jul 09, 2013 1:09 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Quote:
stdcall enable_irq, eax <<<<<<в eax содержится адрес структуры обработчика

Serge - ну, ты мозг! Я уже свой сломал почти, почему у меня DMA для такого режима не пашет. :-)
Вот так вот тупейшая ошибка, а у меня глаз уже "замылился".

З.Ы. В ревизии 3791 убрал лишние вызовы stdcall enable_irq. DMA все еще не хочет дружить с контроллерами SATA IDE, но по крайней мере теперь при включенном DMA у меня хотя бы Dell Inspiron загружаться начал.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 52 posts ]  Go to page Previous 1 2 3 4

All times are UTC+03:00


Who is online

Users browsing this forum: Google [Bot] and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited