Пытаюсь запустить свой бутблок на матери Asus P9D-WS

Здравствуйте. Есть мать 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 стадии, работает. Есть идеи в чем причина?

Аватар пользователя savely

А кто Вам сказал, что у Вас есть COM-порт на данной стадии?

А кому счас легко...

Т.е. порты ввода-вывода нужно как-то инициализировать? 80й порт post card тоже?
Я смотрел reset vector из проекта coreboot, там вывод пост кодов идет в самом начале, еще до всякой инициализации. У меня же горит FF.

Пробовал выставлять 1 бит в регистре LPC_EN чипсета. Нет результатов. Пробовал делать две зашивки, одна с jmp $ на точке входа, другая с cli / hlt, и мерял потребляемую мощность. Никакой разницы. Похоже код не запускается.

Аватар пользователя savely

А какая связь POST-кодов и вывода в COM-порт? Тьфу, не заметил в самом начале, сорри.

Вообще-то POST-карта Ваша - вещь в себе. Никто не гарантирует, что она на 80h, да и вообще на PCI-шине.

А кому счас легко...

Она на LPC, работает по порту 80, то проверено. Втыкается в разъем TPM. LPC шину надо как-то инициализировать?

Аватар пользователя GetinakS

Кхем, не забудьте, что на вашей плате скорее всего прописалась технология AMT. А в интеловских чипсетах, гдето с шестой серии именно AMT часть стартует тактовый генератор и прочее. Более того, с правильно отключенным AMT многие платы работают ровно 30 минут, далее отключение (так хочет интел увы).

Broadcast message from PAO EC
Power is going down for shutdown NOW!

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей