Radeon inside
реклама
DeviceId
DeviceId (идентификатор устройства) состоит из двух полей - основного и дополнительного. Основной (биты с 2-го по 15) задается битами с фиксированным значением и перемычками (резисторами) на корпусе чипа.
Дополнительный DeviceId (биты 0 и 1) задается младшими двумя битами байта номер 74h во FLASH BIOS. Обычно, там лежит число 90h.
В состав процессора видеокарты входит ASIC (Application Specific Integrated Circuits) - относительно простой контроллер ввода-вывода и управления. На него возлагаются функции интерфейса внутренних узлов видеокарты с одной стороны, и остальных компонентов компьютера с другой стороны. Также, он выполняет начальную настройку и конфигурирование внутренних узлов видеокарты. По аппаратному сигналу reset ASIC Radeon'а выполняет чтение ряда байт из FLASH BIOS и по значению этих двух бит устанавливает младшие два бита в DeviceId. Вообще говоря, подобная технология достаточно распространена (только у Nvidia считываются "перемычки" на адресной шине) и достаточно удобна для производителя. Хочу особо предостеречь от бездумного изменения этого и близлежащих байт, особенно по адресу 75h - видеокарта может перейти в такой режим, что никакая дополнительная PCI карта не спасет!
Предполагаю, ASIC конфигурируется этим байтом, а одно из его состояний - "disable". При отключенном ASIC программное обновление FLASH BIOS невозможно. Впрочем, если у Вас есть паяльная станция SMD и программатор с соответствующей колодкой - можете попробовать.
Разбивка DeviceId на фиксированную и переменную часть дает возможность гарантировать неизменность типа устройства и гибкость для отбраковки по качеству используемых комплектующих как на этапе сборки, так и при финальном тестировании. Т.е., можно разграничивать, по сути, одно и то же устройство на варианты low, normal, high, super. Для плат Radeon 9500 Pro / 9700 ATI сделала принципиальное упущение - у них один и тот же тип 4E44h и Radeon 9500 Pro надо было назвать Radeon 9700 Lite, так было бы честнее :).
реклама
Основное поле DeviceId не может быть изменено без перестановки перемычек (перепайка одного или двух резисторов) на корпусе графического процессора. Другой, вполне возможный, вариант изменения значения этого регистра - воспользоваться JTAG, но что-то слабо верится в перспективность этого направления (JTAG - специальный последовательный интерфейс к внутренней архитектуре процессора). Это дает возможность читать и корректировать значения регистров даже при работающем процессоре. Технология очень распространена, но способ доступа весьма специфичен для каждого типа устройств.
Дополнительное поле DeviceId можно изменить соответствующей коррекцией двух младших бит байта по адресу 74h в BIOS. Делать это "на лету" нельзя - его значение "защелкивается" по reset и последующее изменение теряет всякий смысл (примечание: сигнал reset является общим для всех PCI/AGP устройств).
Таким образом, DeviceId может изменяться только в пределах своего типа. Например, для R9500 это будет 4144h ... 4147h, для R9700 - 4E44h ... 4E47h и так далее. Сам BIOS этот DeviceId не интересует, что лишний раз подтверждает унифицированность BIOS'ов для всего семейства. Впрочем, есть одно небольшое, но очень неприятное исключение ....
Начальный запуск
При старте BIOS должен знать адреса доступа к собственному устройству, но по технологии PnP эти адреса могут переназначаться основным BIOS в произвольное место. Чтобы узнать эти параметры, BIOS сканирует PCI configuration space на наличие собственного устройства. Для поиска берется пара DeviceId / VendorId (идентификатор производителя) как критерий соответствия. Это все правильно, как же иначе отождествить собственную аппаратуру? К слову сказать, Nvidia поступает проще - "не трясет" и работает через стандартный порт VGA. Так вот, если (случайно) прошить BIOS с не тем DeviceId или VendorId, то BIOS при запуске не найдет такого устройства, не сможет работать с аппаратурой и мы получим черный экран. Можно ограничить поиск только по VendorId, но ATI делает не только видеокарты и проблемы возможны. Т.е. этот прием допустим только для исследовательских целей, чтоб не мешался дополнительный DeviceId:
push eax
push bx
mov bx,cs:[***]
label1: xor dx,dx
call *****
cmp eax,cs:[offset DeviceVendorId]
jne label2
mov dl,14h
call *****
mov dh,ah
jmps label3
label2: add bx,8
cmp bh,9
jb label2
mov dx,cs:[***]
label3: xor dl,dl
pop bx
pop eax
retn
В строке cmp eax,cs:[offset DeviceVendorId] надо заменить 66h на 90h.
Прошу не забывать - там две почти одинаковых процедуры, править придется обе.
Еще раз обращаю внимание - это нельзя оставлять на всегда, проблемы будут.
Я не привожу конкретные адреса и коды для поиска/замены - они несколько меняются для разных BIOS'ов даже одного и того же устройства, примерный адрес порядка 5A00h.
реклама
Память и тайминги
Существует распространенное мнение, что максимальная рабочая частота памяти зависит исключительно от таймингов (временных соотношений управляющих сигналов). Это так и это не так. Когда началась разработка проекта TestMem4 , ко мне обратился обратился один человек с интересным наблюдением - достаточно известная фирма что-то изменила в очередной версии BIOS материнской платы и разгонный потенциал памяти резко упал. Точнее, память перестала работать на своей частоте. Оказалось, что они честно следовали спецификациям и изменяли мощность (силу тока, импеданс) выходных каскадов шин адреса, данных в контроллере DRAM в зависимости от количества установленных модулей DIMM. Это правильно, но нагрузочные характеристики DRAM зависят и от фирмы производителя чипов, и от PCB и от партии. Так в TestMem4 появилась настройка интерфейса для некоторых чипсетов. Я заговорил о мощности управляющих сигналов вовсе неспроста - боюсь, что низкий разгонный потенциал связан именно с этим эффектом. Весьма возможно, что это делается умышленно самой ATI для разграничения продуктов.
Если сравнить внешнее проявление переразгона по памяти для Nvidia и ATI, то будет сильно заметен разный принцип сбоев. Для Nvidia это мусор на экране, и при снижении частоты дефект бесследно исчезает, а у ATI - дефекты в виде вспышек линий, и еще хотя бы при мизерном повышении частоты что-то "ломается". Лечится только полным выключением/включением питания, даже теплая перезагрузка не всегда спасает. Этот дефект никак не может быть вызван сбоями шин адреса или данных, а вот от сбоя управляющих сигналов это произойдет наверняка. Особенность идеологии SDRAM в том, что она программируется контроллером DRAM на нужные параметры. Программирование осуществляется специальным (временным) соотношением управляющих сигналов с передачей параметров по шине адреса. Это делает ASIC по командам BIOS при стартовой инициализации. Таким образом, один сбой управляющего сигнала и "голову" у SDRAM безвозвратно "сносит" до последующей холодной перезагрузки компьютера. Короче говоря, проблема или в мощности выходного каскада или в предкомпенсациях (небольших задержках сигнала) для некоторых управляющих сигналов.
"Чужой" BIOS
Обычно, для смены DeviceId ищется какой-то особенный "взломанный" BIOS. Пробовал различные версии и под различные видеокарты (R9500 / R9500 Pro / R9700** / R9800**) - лучше ни разу не было, только хуже. Вообще говоря, родной BIOS настраивают исходя их настроек платы и именно он должен больше всего подходить под существующую плату. Да, при переборе разных BIOS разброс разгонных свойств отличался достаточно сильно, например, для памяти разброс был в 100MHz, но проверялось это только для маленького фрагмента видеопамяти - текстового буфера по признаку появления мусора и помех на экране. Тестирование в TestVideoRAM на полном объеме памяти показало значительно меньший разброс частот. Наверно, корректнее будет изменить DeviceId в старом BIOS, если будут перепаиваться резисторы?
Утилиты
Ну, с этого все начиналось, так что - VBE под ATI R9500-9800. Она повторяет идеологию версии под Nvidia, но есть и некоторые различия. VBE (Video BIOS extender) - меню настройки для видеокарты по аналогии с обычным BIOS материнской платы.
Начальная версия может управлять частотой GPU и памяти, включать TV-out (PAL) и выбирать тайминги из четырех вариантов - собственных и 3 заданных. Селективная установка каждого параметра таймингов весьма нетривиальное занятие и это проще делать другой программой - TestVideoRAM, реинкарнацию которой я также сделал.
TestVideoRAM - программа для тестирования видеопамяти карт Nvidia и ATI Radeon 9500-9800. При этом можно устанавливать начальные частоты GPU и памяти, отдельные тайминги памяти. Сам регистр таймингов выводится на экран, потом можно внести его или в VBE или в сам BIOS. Программа пытается найти максимально возможные частоты GPU и памяти, что может пригодиться при выборе предельных частот в Windows. Если упрощенно, то принцип программы прост - повышается частота до появления сбоев, потом снижается. Да, это может сопровождаться дефектами на экране, но это делается в DOS и делается очень маленькими шагами, что обеспечивает "щадящий" режим тестирования. Аналогичное тестирование в Windows может привести к зависанию. Но Windows держит открытыми файлы и копию FAT, часть из них кешируется, и подобный эксцесс иногда заканчивается печально.
Для ATI тестирование на максимальную частоту GPU не производится. Вообще говоря, ситуация с ATI очень напоминает ранние видеокарты Nvidia - Riva TnT и TnT2. В них не было (расширенной) системы кэширования. Очень неприятный "эффект" и хорошо бы его исследовать.
реклама
Загрузчик видео BIOS Loader позволяет перегружать BIOS на свое законное место. Loader очень хорошо подходит для первичного тестирования BIOS'а. Из положительных черт, кроме его возможности перезаписи в shadow RAM, можно отнести его устойчивость к BIOS'ам с интегрированным VBE и отсутствием проверок на правильность контрольных сумм. Это позволяет значительно проще корректировать BIOS. Но у Loader'а есть и существенный недостаток - ATI что-то нехорошее делает с BIOS (точнее - множественные проверки на "не ROM ли это") и файл BIOS'а работает не совсем честно, остается часть настроек от старого BIOS. Loader изначально писался под Nvidia, что ж тут поделаешь? Существует другая аналогичная программа - RAMBIOS. Эта программа корректно загружает BIOS, но также имеет ограничения: она несовместима с VBE-BIOS'ами (я использую видеопамять для хранения своих временных данных), и тратит 64 КБ под каждую загрузку BIOS. Это не так уж и мало, после 7-8 загрузок весь DOS раздел закончится и придется перегружаться.
Текущий список "глюков" программ
VBE для видеокарт ATI:
- не сохраняет временные параметры и при засыпании/просыпании компьютера настройки сбрасываются в BIOS-default. Событие редкое, будет исправлено в ближайшей версии;
- раздел "CPU" находится в разработке, будет сделан в следующей версии.
TestVideoRAM 1.0:
- программа переписывалась практически заново и тест на видеокартах Nvidia работает неустойчиво, для них пользуйтесь предыдущей версией.
Ссылки
- Video BIOS Extender для видеокарт ATI (5 КБ), описание .
- Video BIOS Extender для видеокарт Nvidia (5 КБ), описание .
- TestVideoRAM 1.0 (10 КБ), описание .
- Video BIOS Loader 0.3 beta (1 КБ), описание .
Благодарности
Ну кому, конечно www.Overclockers.ru за оказанное содействие. Если есть вопросы - прошу в соответствующие разделы конференции.
реклама
Теги
Лента материалов раздела
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Сейчас обсуждают