Расширяем возможности BIOS с помощью WPCREDIT

14 сентября 2007, пятница 15:49
для раздела Блоги
Расширяем возможности BIOS с помощью WPCREDIT

Достаточно часто список доступных для настройки в BIOS параметров ограничен. Не секрет, что зачастую это зависит от производителя материнской платы и её позиционирования. Так, десктопная плата верхнего ценового сегмента от Asus будет иметь на порядок больше настроек, нежели Elitegroup, или серверное решение от Tyan. Платы Intel также не блещут числом доступных для изменения пунктов. Наиболее распространённым примером таких настроек и безусловно, одним из важнейших являются настройки памяти. Чаще всего это тайминги, но не одни они. Вот на примере таких настроек я и хочу показать, как же можно изменить их, даже если производитель платы нам такой возможности не предоставил.

Кратко о PCI регистрах

Все подобного рода возможности предоставляются нам северным мостом. А сами настройки расположены в PCR - PCI Configuration Registers, конфигурационных регистрах PCI адресного пространства. Именно эти регистры и настраивает BIOS при загрузке. Это справедливо для всех чипсетов, начиная с самых старых, за исключением Intel , начиная с i915, где используется PCI-E адресное пространство. Также Nvidia в своих чипсетах, возможно тоже использует уже PCI-E адресное пространство, что без даташита на них сказать затруднительно.

В адресном пространстве PCI нужная таблица регистров определяется тремя числами, Bus, Device, Function. Согласно спецификации PCI Specification revision 2.3 максимальным числом возможных шин определено 256, числом устройств - 32, функций - 8. Для наглядности посмотрим на рисунок:


Знакомство с WPCREDIT

Если мы откроем утилиту WPCREDIT, написанную H'Oda, то увидим таблицу 16*16 ячеек по одному байту каждая. Это и есть поле действий. Все числа и адреса представлены в шестнадцатеричной системе счисления, HEX.



Программа очень проста в применении. Она предоставляет нам как раз то, что нужно - позволяет считать и изменить значения регистров PCI, которые нельзя выставить посредством BIOS. Если сравнить её с программами для настройки параметров памяти и вообще чипсета, то стоит признать, что она менее удобна. Нет выбора значений из списка, наглядности, нужно переводить значения из двоичного вида в шестнадцатеричный. Но её преимущества с лихвой перекрывают недостатки - при наличии хорошего сборника файлов с описанием регистров, она становится универсальной и подходит практически ко всем чипсетам. Плюс она не ограничивает число настроек, что доступны к изменению. Хотим - меняем тайминги, режим AGP, работу процессора, всё что позволяет чипсет. Даже не только чипсет, но и другие устройства. Это делает её намного более предпочтительной, ибо многие, начавшие всерьёз копаться с настройками предпочтут чуть повозиться, но получить доступ к большему числу параметров.

В группе кнопок File доступны следующие действия: PCR open - открывает файл с описанием, Register Load - загрузка сохранённых регистров из файла, Register Save - сохранение текущих значений регистров в файл, Environment Save - сохраняет настройки программы, вроде цветовой гаммы, Exit. В группе Edit: Undo\Redo, Copy, Device - выбор устройства для редактирования регистров. Доступно и посредством кнопки на панели инструментов.
View: Bit mode, Structure view, Color, Font.
Help: About.

Настраиваем чипсет

Настройки, нам нужные лежат в устройстве 0,0,0 - Host bridge. Первые регистры 00-40H являются заголовком PCI. Там описаны функции, поддерживаемые устройством, с точки зрения спецификаций PCI. Примером является наличие поддержки PCI66 и Bus Mastering. Идентификатор производителя и устройства (VendorID, DeviceID) также прописаны в заголовке. Потому, очевидно, что нам нужны регистры, идущие после 40-го. Но как же узнать, какие за что отвечают в конкретном мосте или чипсете? Расшифровку можно найти в виде специального PCR файла для этой программы. Название состоит из VendorID и DevID и для указанного на рисунке выше чипсета (Nforce) будет 10DE01E0.pcr. Файл должен лежать в одной программе, тогда она при запуске прочтёт VendorID, DevID и подгрузит одноимённый PCR если таковой имеется. Иначе, придётся подгружать PCR файл отдельно, кнопкой File-PCR open. Но этот вариант применим для распространённых чипсетов, для которых есть документация. Чаще же (и для Nforce2 в частности) PCR файла нет. Но его формат чрезвычайно прост (текстовый) и написать его при наличии документации на чипсет не составит труда.
Если PCR файла нет, то на помощь нам придёт даташит. В нём, помимо прочего, прописана расшифровка регистров и их значений. Возьмём, к примеру, даташит на чипсет VIA Apollo pro 133 (693A), поскольку на нём выпускали дешёвые платы, не удосуживаясь или специально ограничивая их возможности, чтобы они не конкурировали с платами на дорогом и "быстром" Intel.



Итак, мы видим, какие биты регистра отвечают за какие настройки и какое значение нужно выставить для желаемого результата. Выбираем нужный регистр, например, 50 и смотрим в нижнюю часть окна.



Мы видим выбранный регистр (Offset), его значение (Data) в шестнадцатеричном (Hex) и двоичном (Bin) видах. Нумерация идёт от 7 к 0 биту. Можно менять как группу из четырёх битов при изменении шестнадцатеричного значения, так и по одному, в двоичном. При этом, если у нас загружен PCR файл, то в правой части окна будут подписываться описания бит регистра. Далее всё просто. Смотрим в регистре 50 значение бита 7. Если оно равно 1, то IOQ настроен верно и менять его не нужно. Если 0, то изменяем на 1 и жмём кнопку Set. Применяется следующего вида запись 50[7]=1 - регистр 50, бит 7, значение 1. Если нужно указать диапазон бит, например, с таймингом CAS Latency в регистрах 67-64, то пишут так 64[5:4]=10. Как видим это значение соответствует CL=3T. Если мы хотим повысить скорость работы с памятью, то изменяем на значение 64[5:4]=01. В программе это будет идентично инверсии бита 5 (изменению с 1 на 0), затем инверсии бита 4 и потом нажатия кнопки "выставить (Set)". Таким образом, можно настроить практически все желаемые параметры. Более подробно настройкой чипсета VIA693A занимался apple_rom, о чём можно прочесть в его статье: "Так ли уж медленны VIA-шки?"

Заключение

Возникает вопрос, даже два - что будет если выставить слишком агрессивное значение? Ответ - ничего, система или повиснет или перезагрузится. После перезагрузки значения регистров будут изначальными, ибо BIOS выставляет их при каждой загрузке. И второй - как мне сделать так, что не нужно было каждый раз ставить значения регистров вручную при загрузке? Для этого есть программа того же автора - WPCRSET. Её интерфейс ещё проще первой. Сначала добавляем запись в реестр (reg файл, в зависимости от типа ОС). Потом запускаем.Из нужных: можно включить\выключить её автозагрузку, добавить значение регистра (выбираем шину, устройство, функцию, регистр и его значение), изменить его и удалить из списка. Всё, система оттестирована на стабильность в форсированном режиме, установки добавлены в автозагрузку, можно отдохнуть и порадоваться, что мы настроили плату, со скудным набором настроек в BIOS.

Теперь немного о грустном - большинство производителей северных мостов скрывают даташиты на свою продукцию. Исключение здесь - Intel, хотя они и неполны. Но в Сети порой появляются даташиты, потому не стоит отчаиваться. Как вариант, можно попросить обладателя "продвинутой" платы покрутить настройки и прислать дампы регистров. Тогда можно вычислить адрес и нужное значение регистра. И затем, написать для него PCR файл, чтобы помочь другим. Если у вас есть даташиты или PCR файлы, которых нет здесь, прошу писать.

Ссылки:
WPCREDIT
WPCRSET
PCR Files
Datasheets

Обсудить можно здесь.

Antinomy, 14.09.07
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают