На плате MSI MS-6380 (KT333+8233, AMIBIOSCORE700) не работает Suspend to RAM под линуксом (под Win2000 работает).
Что бы разобраться, в чем дело открыл бутблок в ИДА.
jnz POST_14 ; jmp if not STR F000:DA13 B0 11 mov al, 11h ; POST 11 F000:DA13 ; Next, checking if End or Ins keys were pressed F000:DA13 ; during power on.Initializing CMOS RAM if the F000:DA13 ; Initialize CMOS RAM in every boot AMIBIOS POST F000:DA13 ; option was set in AMIBCP or the End key was pressed F000:DA15 BE 1B DA mov si, 0DA1Bh F000:DA18 E9 49 02 jmp debug_80 .... POST_13: ; DATA XREF: seg000:off_FDAE6o F000:DAE8 B0 13 mov al, 13h F000:DAEA BE F0 DA mov si, offset loc_FDAF0 ; STR WakeUp routine? F000:DAED E9 74 01 jmp debug_80 F000:DAF0 ; --------------------------------------------------------------------------- F000:DAF0 F000:DAF0 loc_FDAF0: ; DATA XREF: seg000:DAEAo F000:DAF0 EA 97 80 00 B0 jmp far ptr 0B000h:8097h ; STR WakeUp routine? F000:DAF5 ; --------------------------------------------------------------------------- F000:DAF5 F000:DAF5 POST_14: ; CODE XREF: seg000:DA0Fj F000:DAF5 B0 14 mov al, 14h ; 8254 timer test will begin next F000:DAF7 BE FD DA mov si, 0DAFDh F000:DAFA E9 67 01 jmp debug_80
После старта проверяется модус из которого вышел ПК, если не S3, переход (jnz POST_14) к POST_14.
Ещё просьба, если есть наработки по Reverse Engineering, выложите их. А то сколько раз велосипед изобретается снова, и ещё разных моделей.
Я сам собираюсь выложить, когда время будет (в принципе ничего особенного), например:
write_PCI: ; CODE XREF: seg000:D94Fj ; seg000:D97Bj db 66h ; Function: write dword to PCI bswap edx ; Input: DX = Dev. and Func. ; AH = register; ECX = value ; Destroy: EAX (Highword o.), ; EDX (Highword only) mov dx, ax db 66h bswap edx mov al, 80h ; '� mov ah, dh db 66h bswap eax mov ah, dl db 66h bswap edx mov al, dh and al, 0FCh db 66h bswap edx mov dx, 0CF8h out dx, eax shr eax, 8 mov dx, 0CFCh xchg eax, ecx out dx, eax xchg eax, ecx db 66h bswap edx xchg ax, dx jmp di
Обратите внимание на bswap и xchg, запутаешся, зато AX и DX можно дальше использовать.
Скачал материал по SMM, получается a0000-bffff SMRAM (параллельно с VRAM). Линукс вроде SMM не использует, регистры востанавливаются вручную.
В SMRAM находится x86-код, его можно "достать"?
У меня уже была идея, сделать переход на свою процедуру, которая найдёт wakeup vector и сделает переход.
Надо только знать в каком состоянии должен быть процессор.
Надо поковырять другой АМИ, с которым работает, я с АВАРД много не работал. А АМИ иногда слишком умные.
Кстати, есть где описание MSR атлона?
*** Oep
Дай пожалуйста ссылку на материал по SMM. Тема интересная. У меня те же чипы, та же проблема. Только материнка ноутбучная. Хочу присоединиться к теме.
TO SWmail:
rcollins.org/ddj/Mar97/Mar97.html
Там много чего интересного. Всякие там "Developer’s Manual" можно найти через Гугл.
Открывал биос от MSI 865pe-neo2-p(бутблок 64КБ, ужас), тот же jmp far ptr 0B000h:8097h.
Открывал биос от Asus A7V133(AWARD), с которым работает без всякого колдовства.
После АМИ трудновато (многое знакомо), у АМИ открываеш 16КБ бутблока, проходиш его, контроль
переходит к Runtime Interface, Runtime Interface распаковывает Runtime, контроль переходит к Runtime ...
В АВАРД, начало F000:E0xx, потом ROMCALL F000:3xxx ... S3 Resume пока не нашёл.
Я пробовал посмотреть (это был бы лёгкий путь) по адресу B000h:8097h, сразу после STR,
там была какая-то чепуха. Всякие там видео биос видно, а это нет. Читал, что затирается,
наверное чтоб враги не узнали.
А код добыт распаковыванием биоса?
В каком модуле, это делается? Откуда куда копируется/распаковывается?
Конец не интересен,
это должен быть soft reset, если S3 resume, не удалось.
А адреса 0000AXXX странные.
Ну можно было предположить, что снято на плате с АМИ.
Ну кому как, мне иногда проще сделать дамп. А то надо найти модуль и место. Глаз у меня ещё не тот.
А за модуль спасибо (модуль Notebook, никогда бы не подумал, хотя вроде вроде что-то было с Power Management), значит не надо будет портачить в бутблоке. Дома посмотрю.
Отправить комментарий