Page 5 of 7

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 9:42 am
by lastar
вот фото со старой kolibri_IDEUSB_trytofix4_dbg и включенным пунктом D http://yadi.sk/d/LTdL-PjVJDwZw никаких дополнительных сообщений на экране не было . Сейчас сделаю лог kolibri_IDEUSB_trytofix4_dbg2.7z

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 10:03 am
by lastar
kolibri_IDEUSB_trytofix4_dbg2.7z тоже висит и при обычной загрузке и при включении C и D пунктов :

http://yadi.sk/d/ByBZAPkYJDzWT
http://yadi.sk/d/vUzlVOinJDzWK

K: Kernel SVN r4575
K: 2 CPU detected
K: Attach Interrupt 6 Handler 8002FFF1
K: Set IDE IRQ6 return code 8005CD00






K: Dev: Optiarc DVD RW AD-5200S
K: PIO mode 00000003
K: Multiword DMA mode 00000007
K: Ultra DMA mode 0000203F
K: Primary Bus Master IDE Status Register 00000020
K: Secondary Bus Master IDE Status Register 00000060
K: Attach Interrupt 15 Handler 80031040
K: Set IDE IRQ15 return code 8005CD14

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 10:22 am
by Mario_r4
Итого: установленный обработчик IRQ15 для IDE контроллера не вызывается совсем.
Я прописал там вывод отладочных сообщениий в:
kernel\trunk\blkdev\hd_drv.inc
Spoiler:

Code: Select all

;-----------------------------------------------------------------------------
align 4
IDE_irq_14_handler:
        DEBUGF  1, "K : IDE_irq_14_handler \n"
        cmp     [IDE_common_irq_param], irq14_num
        jne     .exit

        pushfd
        cli
        pushad
        mov     [IDE_common_irq_param], 0
        mov     dx, [IDEContrRegsBaseAddr]
; test whether it is our interrupt?
        add     edx, 2
        in      al, dx
        test    al, 100b
        jz      @f
; clear Bus Master IDE Status register
; clear Interrupt bit
        out     dx, al
; clear Bus Master IDE Command register
        sub     edx, 2
        xor     eax, eax
        out     dx, al
; read status register and remove the interrupt request
        mov     edx, [hdbase]
        add     edx, 0x7
        in      al, dx
        popad
        popfd
        mov     al, 1
        ret
;--------------------------------------
align 4
@@:
        popad
        popfd
;--------------------------------------
align 4
.exit:
        mov     al, 0
        ret
;-----------------------------------------------------------------------------
align 4
IDE_irq_15_handler:
        DEBUGF  1, "K : IDE_irq_15_handler \n"
        cmp     [IDE_common_irq_param], irq15_num
        jne     .exit

        pushfd
        cli
        pushad
        mov     [IDE_common_irq_param], 0
        mov     dx, [IDEContrRegsBaseAddr]
        add     dx, 8
; test whether it is our interrupt?
        add     edx, 2
        in      al, dx
        test    al, 100b
        jz      @f
; clear Bus Master IDE Status register
; clear Interrupt bit
        out     dx, al
; clear Bus Master IDE Command register
        sub     edx, 2
        mov     al, 0
        out     dx, al
; read status register and remove the interrupt request
        mov     edx, [hdbase]
        add     edx, 0x7
        in      al, dx
        popad
        popfd
        mov     al, 1
        ret
;--------------------------------------
align 4
@@:
        popad
        popfd
;--------------------------------------
align 4
.exit:
        mov     al, 0
        ret
;-----------------------------------------------------------------------------
align 4
IDE_common_irq_handler:
        pushfd
        cli
        pushad
        DEBUGF  1, "K : IDE_common_irq_handler \n"	
        xor     ebx, ebx
        mov     eax, IDE_common_irq_param
	DEBUGF  1, "K : [IDE_common_irq_param] %x \n", [eax]:2
        mov     [eax], bl
; test whether it is our interrupt?
        mov     dx, [IDEContrRegsBaseAddr]
        add     edx, 2
        in      al, dx
	DEBUGF  1, "K : channel 1 interrupt? %x \n", eax
        test    al, 100b ; check channel 1 interrupt
	jnz	@f
	
	add     dx, 8
        in      al, dx
	DEBUGF  1, "K : channel 2 interrupt? %x \n", eax
        test    al, 100b ; check channel 2 interrupt
	jnz	@f
        DEBUGF  1, "K : IDE - no, it's not our interrupt \n"
        popad
        popfd
        mov     al, 0 ; no, it's not our interrupt
        ret
;--------------------------------------
align 4
@@:
; clear Bus Master IDE Status register
; clear Interrupt bit
	DEBUGF  1, "K : IDE - clear Interrupt bit \n"
        out     dx, al
; clear Bus Master IDE Command register
        sub     edx, 2
        xor     eax, eax
	DEBUGF  1, "K : IDE -  clear Bus Master IDE Command register \n"
        out     dx, al
; read status register and remove the interrupt request
        mov     edx, [hdbase]
        add     edx, 0x7
        in      al, dx
	DEBUGF  1, "K : read status register and remove the interrupt request %x \n", eax
	
        DEBUGF  1, "K : IDE - yes, this is our interrupt \n"
        popad
        popfd
        mov     al, 1 ; yes, this is our interrupt
        ret
;-----------------------------------------------------------------------------
И получается контроллер IDE вроде и не при чем...

Что возвращает нас к вопросу:
Кто убил кролика Роджера?
Почему зависает при инициализации USB.

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 10:34 am
by lastar
Может все таки дело в usb драйвере . Хотя вам виднее я не программист . Как бывает в больницах врачи проводят заседания по сложным вопросам так и тут может стоит собрать разработчиков Колибри и устроить собеседование . Одна голова хорошо а две лучше .

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 1:48 pm
by CleverMouse
При чём тут IRQ15? Контроллер жёсткого диска 00:1f.1 висит на IRQ10, обработчик IRQ15 и не должен вызываться.

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 2:01 pm
by Mario_r4
CleverMouse wrote:При чём тут IRQ15? Контроллер жёсткого диска 00:1f.1 висит на IRQ10, обработчик IRQ15 и не должен вызываться.
Если посмотреть фото, то можно увидеть, как 15 прерывание устанавливается на контроллер IDE диска, а затем согласно выводимому логу на 15 прерывание же вешается один из USB контроллеров. Тот контроллер, который повешен на IRQ10, вообще не трогается кодом работы с IDE. Получается парадокс - контроллер генерирует прерывание без какого-либо обращения к нему.

З.Ы. Сдается мне в текущей схеме, где кодом поддерживается только один контроллер проблема вообще не имеет решения.

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 2:13 pm
by CleverMouse
Mario_r4 wrote:
CleverMouse wrote:При чём тут IRQ15? Контроллер жёсткого диска 00:1f.1 висит на IRQ10, обработчик IRQ15 и не должен вызываться.
Если посмотреть фото, то можно увидеть, как 15 прерывание устанавливается на контроллер IDE диска, а затем согласно выводимому логу на 15 прерывание же вешается один из USB контроллеров. Тот контроллер, который повешен на IRQ10, вообще не трогается кодом работы с IDE. Получается парадокс - контроллер генерирует прерывание без какого-либо обращения к нему.

З.Ы. Сдается мне в текущей схеме, где кодом поддерживается только один контроллер проблема вообще не имеет решения.
Тот USB-контроллер, который вешается на IRQ15, молчит в тряпочку, зависание происходит сразу после того, как следующий USB-контроллер - который тоже молчит в тряпочку и будет молчать как минимум 100 мс на USB-шный initial debounce, а если к нему ничего не подключено, то вообще пока не подключат что-нибудь - устанавливает свой обработчик на IRQ10 и размаскирует IRQ10. Почему вообще код контроллера IDE-диска думает, что IDE-диск всегда даёт IRQ15? Здесь он даёт IRQ10.

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 2:15 pm
by lastar
Вот тут решалась проблема работы моего контроллера в ReactOS http://jira.reactos.org/browse/CORE-6668


Вот в этой теме похоже про это прерывание написал автор UniATA Alter :

Alter added a comment - 2012-09-17 13:14
Seems it is incorrectly handled USB Interrupt.
Infinite ISR loop happens immediately after connecting to IRQ 15 (which is shared between IDE and USB controllers)
There were no operations with IDE, those can cause and interrupt, thus, interrupt is treated as unexpected for IDE and should be passed to other handler.
Similar problem had already been observed in the past (I don't remember exact BUG ID).
---
00:1d.2 USB Controller [0c03]: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 [8086:27ca] (rev 01)
Subsystem: P5KPL-VM Motherboard [1043:8179]
Flags: bus master, medium devsel, latency 0, IRQ 15
I/O ports at b400 [size=1K]
Device is using IRQ 15! ISA Cards using that IRQ may fail!
Device is an Intel UHCI (USB) Controller. Turn off Legacy USB in your BIOS!
---
00:1f.1 IDE interface [0101]: Intel Corporation 82801G (ICH7 Family) IDE Controller [8086:27df] (rev 01)
Subsystem: P5KPL-VM Motherboard [1043:8179]
Flags: bus master, medium devsel, latency 0, IRQ 15
I/O ports at c080
I/O ports at c000 [size=16K]
I/O ports at 08f0
I/O ports at 08f8
I/O ports at b800 [size=2K]

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 2:20 pm
by Mario_r4
CleverMouse wrote:Почему вообще код контроллера IDE-диска думает, что IDE-диск всегда даёт IRQ15? Здесь он даёт IRQ10.
Потому что он получил это значение от BIOS, еще в Real Mode CPU
kernel\trunk\boot\bootcode.inc
Spoiler:

Code: Select all

; \begin{Mario79}
; find HDD IDE DMA PCI device
; check for PCI BIOS
        mov     ax, 0xB101
        int     0x1A
        jc      .nopci
        cmp     edx, 'PCI '
        jnz     .nopci
; find PCI class code
; class 1 = mass storage
; subclass 1 = IDE controller
; a) class 1, subclass 1, programming interface 0x80
; This is a Parallel IDE Controller which uses IRQs 14 and 15.
        mov     ax, 0xB103
        mov     ecx, 1*10000h + 1*100h + 0x80
        mov     [es:BOOT_IDE_PI_16], cx
        xor     si, si  ; device index = 0
        int     0x1A
        jnc     .found_1 ; Parallel IDE Controller
; b) class 1, subclass 1, programming interface 0x8f
        mov     ax, 0xB103
        mov     ecx, 1*10000h + 1*100h + 0x8f
        mov     [es:BOOT_IDE_PI_16], cx
        xor     si, si  ; device index = 0
        int     0x1A
        jnc     .found_1
; c) class 1, subclass 1, programming interface 0x85
        mov     ax, 0xB103
        mov     ecx, 1*10000h + 1*100h + 0x85
        mov     [es:BOOT_IDE_PI_16], cx
        xor     si, si  ; device index = 0
        int     0x1A
        jnc     .found_1
; d) class 1, subclass 1, programming interface 0x8A
; This is a Parallel IDE Controller which uses IRQs 14 and 15.
        mov     ax, 0xB103
        mov     ecx, 1*10000h + 1*100h + 0x8A
        mov     [es:BOOT_IDE_PI_16], cx
        xor     si, si  ; device index = 0
        int     0x1A
        jnc     .found_1 ; Parallel IDE Controller
; Controller not found!
        xor     ax, ax
        mov     [es:BOOT_IDE_PI_16], ax
        jmp     .nopci
;--------------------------------------
.found_1:
; get memory base BAR4
        mov     ax, 0xB10A
        mov     di, 0x20        ; memory base is config register at 0x20
        push    cx
        int     0x1A
        jc      .no_BAR4        ;.nopci
        and     cx, 0xFFFC      ; clear address decode type
        mov     [es:BOOT_IDE_BASE_ADDR], cx
.no_BAR4:
        pop     cx
;--------------------------------------
.found:
; get Interrupt Line
        mov     ax, 0xB10A
        mov     di, 0x3c        ; memory base is config register at 0x3c
        push    cx
        int     0x1A
        jc      .no_Interrupt        ;.nopci

        mov     [es:BOOT_IDE_INTERR_16], cx
.no_Interrupt:
        pop     cx
;--------------------------------------
; get memory base BAR0
        mov     ax, 0xB10A
        mov     di, 0x10        ; memory base is config register at 0x10
        push    cx
        int     0x1A
        jc      .no_BAR0        ;.nopci

        mov     [es:BOOT_IDE_BAR0_16], cx
.no_BAR0:
        pop     cx
;--------------------------------------
; get memory base BAR1
        mov     ax, 0xB10A
        mov     di, 0x14        ; memory base is config register at 0x14
        push    cx
        int     0x1A
        jc      .no_BAR1        ;.nopci

        mov     [es:BOOT_IDE_BAR1_16], cx
.no_BAR1:
        pop     cx
;--------------------------------------
; get memory base BAR2
        mov     ax, 0xB10A
        mov     di, 0x18        ; memory base is config register at 0x18
        push    cx
        int     0x1A
        jc      .no_BAR2        ;.nopci

        mov     [es:BOOT_IDE_BAR2_16], cx
.no_BAR2:
        pop     cx
;--------------------------------------
; get memory base BAR3
        mov     ax, 0xB10A
        mov     di, 0x1C        ; memory base is config register at 0x1c
        push    cx
        int     0x1A
        jc      .no_BAR3        ;.nopci

        mov     [es:BOOT_IDE_BAR3_16], cx
.no_BAR3:
        pop     cx
;--------------------------------------
.nopci:
; \end{Mario79}
И мне почему то казалось, что прерывания после перехода в Protected Mode CPU не меняются. Если же они меняются, то мне интересно какой код это делает? Почему то у lastar, если отключен контроллер USB, то эта схема прокатывает, т.е. назначенный BIOS в Real Mode CPU номер прерывания не меняется после перехода в Protected Mode CPU.

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 2:24 pm
by CleverMouse
Mario_r4 wrote:
CleverMouse wrote:Почему вообще код контроллера IDE-диска думает, что IDE-диск всегда даёт IRQ15? Здесь он даёт IRQ10.
Потому что он получил это значение от BIOS, еще в RealMode CPU
kernel\trunk\boot\bootcode.inc
И мне почему то казалось, что прерывания после перехода в Protected Mode CPU не меняются. Если же они меняются, то мне интересно какой код это делает? Почему то у lastar, если отключен контроллер USB, то эта схема прокатывает, т.е. назначенный BIOS в RealMode CPU номер прерывания не меняется после перехода в Protected Mode CPU.
Убедительно. Не меняются.

lastar, нужен лог от вот этой версии ядра, она показывает все PCI-устройства с точки зрения ядра.

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 2:33 pm
by lastar
все пошел на перезагрузку для теста

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 2:44 pm
by lastar
http://yadi.sk/d/6LKFaPerJExoK
http://yadi.sk/d/lqEYi_VuJEyB6
http://yadi.sk/d/tXlu9EMdJEycR

Если плохо видно и надо будет переписать в ручную лог с экрана то напишите


Вот тут решалась проблема работы моего контроллера в ReactOS http://jira.reactos.org/browse/CORE-6668


Вот в этой теме похоже про это прерывание написал автор UniATA Alter :

Alter added a comment - 2012-09-17 13:14
Seems it is incorrectly handled USB Interrupt.
Infinite ISR loop happens immediately after connecting to IRQ 15 (which is shared between IDE and USB controllers)
There were no operations with IDE, those can cause and interrupt, thus, interrupt is treated as unexpected for IDE and should be passed to other handler.
Similar problem had already been observed in the past (I don't remember exact BUG ID).
---
00:1d.2 USB Controller [0c03]: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 [8086:27ca] (rev 01)
Subsystem: P5KPL-VM Motherboard [1043:8179]
Flags: bus master, medium devsel, latency 0, IRQ 15
I/O ports at b400 [size=1K]
Device is using IRQ 15! ISA Cards using that IRQ may fail!
Device is an Intel UHCI (USB) Controller. Turn off Legacy USB in your BIOS!
---
00:1f.1 IDE interface [0101]: Intel Corporation 82801G (ICH7 Family) IDE Controller [8086:27df] (rev 01)
Subsystem: P5KPL-VM Motherboard [1043:8179]
Flags: bus master, medium devsel, latency 0, IRQ 15
I/O ports at c080
I/O ports at c000 [size=16K]
I/O ports at 08f0
I/O ports at 08f8
I/O ports at b800 [size=2K]

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 3:03 pm
by lastar
Вот Фото получше сделал поэкспериментировал с настройками камеры телефона :

http://yadi.sk/d/X3txobXUJF3pe

http://yadi.sk/d/FbjhBUJ6JF494

http://yadi.sk/d/aYZubhaAJF4AZ

http://yadi.sk/d/jYGMUNWcJF4Cq

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 3:11 pm
by CleverMouse
Проверь, пожалуйста, это ядро.

Re: Зависает при загрузке на реальном компьютере. Как снять

Posted: Thu Feb 20, 2014 3:39 pm
by lastar
CleverMouse Колибри загрузилась

1 BOARD лог со стандартными параметрами http://yadi.sk/d/Py3J7WzXJFAx5
2 BOARD лог со включенным пунктом D http://yadi.sk/d/G8p4QAW0JFAxb и скриншоты со включенным пунктом D http://yadi.sk/d/K6cVZL0pJFBhK http://yadi.sk/d/bUea-bYQJFBjP http://yadi.sk/d/TXz9KMX2JFBmm


В чем же была проблема ?