Page 11 of 18

Re: SATA в режиме IDE - полная поддержка

Posted: Wed Nov 27, 2013 7:31 am
by Mario_r4
punk_joker
Да, у тебя работает как задумано.

Re: SATA в режиме IDE - полная поддержка

Posted: Wed Nov 27, 2013 6:31 pm
by Mario_r4
yogev_ezra
Просьба протестировать SVN r. 4303 на VMware.

Re: SATA в режиме IDE - полная поддержка

Posted: Wed Nov 27, 2013 9:22 pm
by yogev_ezra
Mario_r4 wrote:yogev_ezra
Просьба протестировать SVN r. 4303 на VMware.
Протестировал SVN r. 4305, теперь вроде устанавливает как и задумано - Hard Disk: DMA, CD-ROM: PIO.
Как я могу проверить, есть ли разница в скорости между PIO и DMA? Есть какая-то утилита для тестирования?

Re: SATA в режиме IDE - полная поддержка

Posted: Wed Nov 27, 2013 9:33 pm
by Mario_r4
Утилит нет, только косвенно - например прочитав/скопировав большой файл и засекая время.
Если есть желание можешь написать такую утилиту сам.

Re: SATA в режиме IDE - полная поддержка

Posted: Wed Nov 27, 2013 9:38 pm
by yogev_ezra
Mario_r4 wrote:Утилит нет, только косвенно - например прочитав/скопировав большой файл и засекая время.
Если есть желание можешь написать такую утилиту сам.
Ясно. Ну логи-то хоть правильные теперь были?

Re: SATA в режиме IDE - полная поддержка

Posted: Wed Nov 27, 2013 9:41 pm
by Mario_r4
yogev_ezra wrote:Ну логи-то хоть правильные теперь были?
Да.

Re: SATA в режиме IDE - полная поддержка

Posted: Wed Nov 27, 2013 11:16 pm
by 0CodErr
Archive.7z (1.91 KiB)
pcidev(r3534 sata+pata).txt
pcidev(r3534 pata).txt
pcidev(r3502 SATA+PATA).txt
pcidev(r3502 PATA).txt
Boardlog(r3534 SATA+PATA).txt
Boardlog(r3534 pata).txt
Downloaded 227 times

Re: SATA в режиме IDE - полная поддержка

Posted: Thu Nov 28, 2013 10:12 am
by Mario_r4
0CodErr
Просьба проверить SVN r.4307

Re: SATA в режиме IDE - полная поддержка

Posted: Thu Nov 28, 2013 5:14 pm
by 0CodErr
Mario_r4, у меня без изменений. Работает в режиме только SATA.

В логе пишется, что dma установлен — но это ведь никак не проверяется?
yogev_ezra wrote:Как я могу проверить, есть ли разница в скорости между PIO и DMA?
Мне тоже стало интересно. Сделал небольшую программку.
Spoiler:Создаётся файл "/hd0/1/_t_e_s_t_f_i_l_e_" размером 100 Mb.
И читается 10 раз полностью в буфер размером 100 Mb.
Не уверен, в каких именно "попугаях" получается результат, но по ощущениям кажется, что долго.

Code: Select all

ORG 0
BITS 32
; ---------------------------------------------------------------------------- ;
FILE_SIZE              equ (1024 * 1024 * 100)
LOOP_COUNT             equ 10
TIMER_TICKS_PER_SECOND equ 100
BYTES_PER_MEGABYTES    equ 1024 * 1024
OUT_STRING_LEFT        equ 16
STACK_SIZE             equ 256
; ---------------------------------------------------------------------------- ;
MENUET01       db 'MENUET01'
version        dd 1
program.start  dd START
program.end    dd END
program.memory dd END + FILE_SIZE + STACK_SIZE
program.stack  dd END + FILE_SIZE + STACK_SIZE
program.params dd 0
program.path   dd 0
; ---------------------------------------------------------------------------- ;
action_string  dd sz_start
timer_ticks    dd 0
result         dd 0
; ---------------------------------------------------------------------------- ;
file_info:
.action        dd 0
.position      dd FILE_SIZE ; for "create file"
               dd 0
.count         dd 0
.buffer        dd 0
               db 0
.file_path     dd sz_file_path
; ---------------------------------------------------------------------------- ;
sz_caption     db "test",0
sz_start       db "start..",0
sz_done        db " done. ",0
sz_error       db " error ",0
sz_file_path   db "/hd0/1/_t_e_s_t_f_i_l_e_",0
; ---------------------------------------------------------------------------- ;
START:
; set.event:
        mov    eax, 40
        mov    ebx, 5 ; redraw + button
        int    64
        call   On_Redraw
; ----------------------------------
        call   StartTest
        call   DrawInfo
; ----------------------------------
WaitEvent:
        mov    eax, 10
        int    64
        dec    eax
        jnz    Terminate
        call   On_Redraw
        jmp    WaitEvent
Terminate:
        or     eax, -1
        int    64
; ---------------------------------------------------------------------------- ;
On_Redraw:
; redraw.start
        mov    eax, 12
        mov    ebx, 1
        int    64
; draw.window
        xor    eax, eax
        mov    ebx, 200
        mov    ecx, 100
        mov    edx, 0x34CCDDEE
        mov    edi, sz_caption
        int    64
        call   DrawInfo
; redraw.finish
        mov    eax, 12
        mov    ebx, 2
        int    64
        ret
; ---------------------------------------------------------------------------- ;
DrawInfo:
; draw action
        mov    eax, 4
        mov    ecx, 0xC0000000
        mov    edi, 0x00CCDDEE
        mov    ebx, (OUT_STRING_LEFT << 16) | 10
        mov    edx, [action_string]
        int    64
; draw result
        mov    eax, 47
        mov    ebx, (10 << 16)
        mov    edx, (OUT_STRING_LEFT << 16) | 20
        mov    esi, 0x70000000
        mov    edi, 0x00FFFFFF
        mov    ecx, [result]
        int    64
        ret
; ---------------------------------------------------------------------------- ;
StartTest:
; if error then we go to .exit and action_string="error"
;                else before .exit action_string="done."
        mov    [action_string], dword sz_error
; try create file
        mov    eax, 70
        mov    [file_info.action], dword 2
        lea    ebx, [file_info]
        int    64
        test   eax, eax
        jnz    .exit
; try resize created file
        mov    eax, 70
        mov    [file_info.action], dword 4
        lea    ebx, [file_info]
        int    64
        test   eax, eax
        jnz    .exit
; get timer ticks
        mov    eax, 26
        mov    ebx, 9
        int    64
        mov    [timer_ticks], eax
; read from file
        mov    [file_info.position], dword 0
        mov    [file_info.action], dword 0
        mov    [file_info.count], dword FILE_SIZE
        mov    [file_info.buffer], dword END
        lea    edx, [file_info]
        mov    ecx, LOOP_COUNT
; ----------------------------------
.next:
        mov    eax, 70
        mov    ebx, edx
        int    64
        loop   .next
; ----------------------------------
; get timer ticks
        mov    eax, 26
        mov    ebx, 9
        int    64
; calculate result
; result = (FILE_SIZE * LOOP_COUNT / (delta(timer_ticks)) / (BYTES_PER_MEGABYTES * LOOP_COUNT / TIMER_TICKS_PER_SECOND)
        sub    eax, [timer_ticks]
        inc    eax ; to avoid next possible division by zero
        mov    ecx, eax
        mov    eax, FILE_SIZE * LOOP_COUNT
        xor    edx, edx
        div    ecx
        mov    ecx, BYTES_PER_MEGABYTES * LOOP_COUNT / TIMER_TICKS_PER_SECOND
        xor    edx, edx
        div    ecx
        mov    [action_string], dword sz_done
.exit:
        mov    [result], eax
        ret
; ---------------------------------------------------------------------------- ;
END:
rdt.kex (498 Bytes)
Downloaded 215 times

Re: SATA в режиме IDE - полная поддержка

Posted: Thu Nov 28, 2013 5:58 pm
by Mario_r4
0CodErr wrote:у меня без изменений. Работает в режиме только SATA.
Значит сброс прерывания надо сделать в другом месте. Я предположительно определил в чем проблема. Поскольку прерывание от контроллера диска не погашено, а на то же прерывание повешен обработчик UHCI, то прерывание бесконечно генерируется, а обработчик UHCI его бесконечно отбрасывает, так как у него нету признака, что прерывание его. Вопрос в том чтобы надежно заглушить остаточное прерывание от IDE DMA. Хоть прерывания от него и запрещены, но видимо твой контроолер имеет собственное мнение на этот счет. :)
0CodErr wrote:В логе пишется, что dma установлен — но это ведь никак не проверяется?
Проверки свойств самого диска я не делал, но если бы устройство не поддерживало UltraDMA, то доступа к диску вообще бы не было.

Re: SATA в режиме IDE - полная поддержка

Posted: Thu Nov 28, 2013 9:00 pm
by Mario_r4
0CodErr
Просьба проверить ядро:
kernel.7z (86.58 KiB)
Downloaded 213 times

Re: SATA в режиме IDE - полная поддержка

Posted: Thu Nov 28, 2013 10:50 pm
by 0CodErr
Mario_r4, теперь заработало.
Archive.7z (2.1 KiB)
pcidev(sata+pata).txt
pcidev(pata).txt
Boardlog(sata+pata).txt
Boardlog(pata).txt
Downloaded 231 times

Re: SATA в режиме IDE - полная поддержка

Posted: Thu Nov 28, 2013 10:58 pm
by Mario_r4
0CodErr wrote:Mario_r4, теперь заработало.
Залил SVN r.4311.

Re: SATA в режиме IDE - полная поддержка

Posted: Mon Dec 02, 2013 4:04 am
by punk_joker
Samsung rv508 все работает как задуманно. Логи прилагаю.

Re: SATA в режиме IDE - полная поддержка

Posted: Mon Dec 02, 2013 7:17 am
by Mario_r4
punk_joker wrote:Samsung rv508 все работает как задуманно. Логи прилагаю.
Вот только PCIDEV явно при других настройках сделан, либо от другой машины. Там нет IDE контроллера, только AHCI.