Здравствуйте. В настоящее время разбираю чипсет 945P. Конкретно регистр C0DRTx (Timing register). Разбираю для того, чтобы написать заплатку на биос - изменение таймингов памяти.
Смутил меня такой момент. Timing register располагается в i945 по смещению 114h. Но это его размещение относительно содержимого регистра MCHBAR, который в свою очередь находится по смещению 44h относительно bus:0,dev:0,func:0.
Не знаю, как добраться до него через регистр MCHBAR. В формате обращения к шине PCI под смещение выделено 8 младших бит, отсюда следует, что просто записать по смещению число 114h не удастся (размерность не та).
Пока действия вырисовываются примерно следующие:
1. Получить доступ к MCHBAR (enable-бит в 1 для b:0,d:0,f:0,o:44h)
2. Взять из него базовый адрес и добавить к нему смещение 114h (Timing Register)
А вот что потом делать с этим полученным адресом? Как его использовать, чтобы все же получить доступ к регистру? Вот на этом и остановился.
Даташит на чипсет можно взять здесь:
[url=http://download.intel.com/design/chipsets/datashts/30146705.pdf
]download.intel.com/design/chipsets/datashts/30146705.pdf[/url]
1. enable-bit - в 54h регистре (DEVEN по даташиту)
2. да (только прочитать примечание - биты 14-31 старшие, младшие - 0). И добавить. Вот тебе и адрес C0DRT1.
Что с ним делать? Ну, видимо, читать и писать согласно описанию C0DRT1, что там неясно?
А кому счас легко...
Спасибо за столь оперативный ответ.
По поводу:
Имел в виду вот что:
mov eax, 80000044 mov dx, 0CF8h out dx, eax
Т.е. 31-й бит в 1, чтобы разрешить чтение-запись этого регистра (MCHBAR) через шину PCI.
DEVEN посмотрел, и если правильно понял, надо взвести 4 и 3 биты. Но если можно - распишите подробнее этот момент
(взаимосвязь (G)MCH и памяти).
Примечание прочитал, но не понял как тогда стыковать базовый адрес в MCHBAR и смещение 114h. Раньше думал, что надо сдвигать адресные биты MCHBAR вправо (точнее не в нем, а в аккумуляторе, куда эти данные считали) до такого состояния, чтобы 14 бит стал нулевым, после чего складывать с 114h. Если не так то как?
Это значит что младшие остутствуют?
Неясно вот что. Как я понял, общение через PCI происходит следующим образом:
1. Записали в порт 0CF8 адрес регистра с которым будем работать.
2. Через порт CFC читаем или пишем информацию в этот регистр.
Это справедливо для MCHBAR (в куске кода, приведенном выше), но вот что делать с тем адресом который получится в результате сложения? Не могу ведь я занести в порт CF0 новый адрес:
mov eax, 800000xxx
Т.к. под смещение отведено 8 бит, а в данном случае, 114h даже без прибавления перекрывает размерность отведенного смещения. Следовательно используется не такой метод. Вот какой способ (обращения к C0DRT1) применяется в данном случае мне и не понятно. Если не затруднит, приведите, пожалуйста, кусок кода.
По-моему, так. (с) Винни-Пух
P.S. bit 28 - маску считай сам, мне лень.
А кому счас легко...
Хотя там как-то мутно про маппинг MCHBAR написано. Возможно, я и неправ. Вопрос
"Вот какой способ (обращения к C0DRT1) применяется в данном случае мне и не понятно." в силе для гуру.
Возможно, все же
А кому счас легко...
Одновременно задаём базовый адрес и активируем MCHBAR регистры. Дальнейшее обращение идет от базового адреса.
-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам
Вот и я о том же Но в любом случае большое спасибо за такие быстрые ответы.
И кроме этого еще смущает вот что:
у регистров, отталкивающихся от MCHBAR, максимальная разрядность смещения - 12 бит, таким образом, при таком простом сложении в середине получившегоося адреса постоянно свободны два бита (т.е. = 0). Конечно допускаю, что это задел на будущее, но тогда логичнее было бы оставлять эти пустые биты с краю. Такой момент.
P.S. После первого твоего ответа все смотрел в даташит на 945 чипсет и думал - при чем здесь DEVEN? (дело в том, что в 945 бит MCHBAREN находится в самом MCHBAR). И только после второго ответа догадался заглянуть в даташит на 915. Так что свои слова про:
Забираю назад. А данный вопрос в силе, неохота проверять информацию методом проб и ошибок.
Santa писал:
Можно поподробнее?
Так, быстрые ответы кончились. Что-то не работает вроде как... Завтра будут медленные...
А кому счас легко...
Нельзя. Только только сел листинги смотреть, но там как-то в явном виде адреса MCHBAR Register не видны. Надеялся получить что-то типа FED14114h, а вижу только FED14041h, FED14BD4h и иже с ними.
ЗЫ Вы, xname, и сами можете в прошивке поглядеть - как там реализовано.. Ещё и здесь посмотрите..
-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам
:) Завтра - это тоже быстрее, чем я ожидал..
Думаю Вы меня переоцениваете. Но если правильно понял - в первом адресе 114h не просто так стоит. Единственное отмечу, что в 945 чипсете 0-й бит в MCHBAR служебный (отведен под MCHBAREN) - так что если листинги не конкретно под 915, то после инициализации регистра он будет взведен.
А за ссылку спасибо, раньше не встречал.
Вот рабочая ссылка на даташит 945-го:
sunsite.rediris.es/pub/mirror/intel/chipsets/datashts/30750203.pdf
P.S. только что обновил рисунки в браузере и увидел, что комментарий
содержит фрагмент Иды
Отправить комментарий