Здравствуйте. Есть мать Asus P9D-WS (проц Intel Xeon E3-1275 v3, южный мост C226, родной биос AMI Aptio UEFI). В целях выяснения одной аппаратной особенности, я пытаюсь запустить свой бутблок и заставить его вывести что-нибудь наружу. Нужно запустить диагностический код как можно раньше.
Образ распаковываю через Intel Flash Image Tool, заменяю bios region на свой бинарник, зашиваю программатором. При старте код POST 0xFF, такой-же как при отсутствии микросхемы биоса, и тишина, ничего не работает. Для диагностики использую Asus G.P. Diagnostics Card шедшую в комплекте с матерью, а также вывод символов в COM порт.
Код моего бутблока:
use16 macro INIT_COM_PORT { mov al, 0x80 mov dx, 0x3f8 + 3 out dx, al ; LCR.DLAB = 1 ; xor al, al mov dx, 0x3f8 + 0 out dx, al ; DivisorLow = 0 mov dx, 0x3f8 + 1 out dx, al ; DivisorHigh = 0, speed = 115200 ; mov dx, 0x3f8 + 3 mov al, 0x03 out dx, al ; LCR.DLAB = 0, 8 bits, no parity, one stop bit ; mov dx, 0x3f8 + 1 xor al, al out dx, al ; IER = 0, disable all interrupts ; mov dx, 0x3f8 + 2 mov al, 0xC7 out dx, al ; Enable FIFO, clear them, with 14-byte threshold ; mov dx, 0x3f8 + 4 mov al, 0x03 out dx, al ; Enable RTS and DTR } macro OUT_CHAR chr { ; load output char to cl mov cl, chr ; wait for buffer ready @@: mov dx, 0x3f8 + 5 in al, dx test al, 0x20 jz @B ; out char mov dx, 0x3f8 + 0 mov al, cl out dx, al } start_of_boot_block: fninit cli mov ax, 0F000h mov ds, ax INIT_COM_PORT OUT_CHAR 'F' OUT_CHAR 'U' OUT_CHAR 'C' OUT_CHAR 'K' OUT_CHAR '!' OUT_CHAR 13 OUT_CHAR 10 hlt ; 0xFFFFFFF0 here mov al, 0x12 out 0x80, al jmp start_of_boot_block db 0, 0, 0, 0, 0, 0, 0 DB 0xF0, 0xFF
В оригинальном BIOS Region код бутблока начинается по такому-же оффсету с конца, как и у меня. Последние два байта 0xF0, 0xFF перенесены на всякий случай. Но не работает. Тот-же самый код, запущенный на PEI стадии, работает. Есть идеи в чем причина?
А кто Вам сказал, что у Вас есть COM-порт на данной стадии?
А кому счас легко...
Т.е. порты ввода-вывода нужно как-то инициализировать? 80й порт post card тоже?
Я смотрел reset vector из проекта coreboot, там вывод пост кодов идет в самом начале, еще до всякой инициализации. У меня же горит FF.
Пробовал выставлять 1 бит в регистре LPC_EN чипсета. Нет результатов. Пробовал делать две зашивки, одна с jmp $ на точке входа, другая с cli / hlt, и мерял потребляемую мощность. Никакой разницы. Похоже код не запускается.
А какая связь POST-кодов и вывода в COM-порт? Тьфу, не заметил в самом начале, сорри.
Вообще-то POST-карта Ваша - вещь в себе. Никто не гарантирует, что она на 80h, да и вообще на PCI-шине.
А кому счас легко...
Она на LPC, работает по порту 80, то проверено. Втыкается в разъем TPM. LPC шину надо как-то инициализировать?
Кхем, не забудьте, что на вашей плате скорее всего прописалась технология AMT. А в интеловских чипсетах, гдето с шестой серии именно AMT часть стартует тактовый генератор и прочее. Более того, с правильно отключенным AMT многие платы работают ровно 30 минут, далее отключение (так хочет интел увы).
Broadcast message from PAO EC
Power is going down for shutdown NOW!
Отправить комментарий