Page 8 of 12

Posted: Wed Dec 13, 2006 3:16 pm
by Ghost
Сначало было начал исправлять код, потом покурил маны, вот что они говорят :

Для IT8705F :

8.3.3 Chip ID Byte 1 (Index=20h, Default=87h)
8.3.4 Chip ID Byte 2 (Index=21h, Default=05h)
9.5.3.2.36 Code ID Register (Index=5Bh, Default=12h) {ITE Vendor ID}

Для IT8712F :

8.3.3 Chip ID Byte 1 (Index=20h, Default=87h)
8.3.4 Chip ID Byte 2 (Index=21h, Default=12h)
9.6.2.2.37 Code ID Register (Index=5Bh, Default=12h) {ITE Vendor ID}

Для IT8716F :

8.3.3 Chip ID Byte 1 (Index=20h, Default=87h)
8.3.4 Chip ID Byte 2 (Index=21h, Default=16h)
9.6.2.2.37 Code ID Register (Index=5Bh, Default=12h) {ITE Vendor ID}

как видим 0x5B не о том.
VaStaNi: если сможеш решить проблему Serge (у тебя видимо чип тоже не определяется верно), буду благодарен.
P.S. На svn есть более свежая версия (видимо теперь там исправления будут появлятся чаще, хотя ftp ссылка жива, и по возможности будет обновлятся) но в плане вопроса там нет изменений.

Posted: Wed Dec 13, 2006 4:51 pm
by VaStaNi
Ghost приятно общаться с серьёзным человеком, курящим мануалы. Давай покурим вместе. Итак.
Для однозначности взаимопонимания беру то, что совпадает добуквенно с твоим, это 8705F.
Теперь акцентирую твоёвнимание именно на том, что
8.3 Global Configuration Registers
8.3.1 Configure Control (Index=02h)
..........................
8.3.3 Chip ID Byte 1 (Index=20h, Default=87h)
This read only register is the Chip ID Byte 1. Bits [7:0]=87h when read.
8.3.4 Chip ID Byte 2 (Index=21h, Default=05h)

Не стоит забывать, что данный чипак комплексный и имеет в своем составе, если можно так сказать, целяй ряд контроллеров............., и в том числе ЧАСТИЧКУ ответственную за мониторинг, о котором идет речь и код соответственно!
Естественно "доступ к телу" каждого из них индивидуального плана! Значит от общего к частному.. ну как каталог корня, подкаталог 1 уровня, в нем 2го и тп.....
Ведь 8.3.1. говорит об Индексном номере= 02, а уж ВНУТРИ его имеется 8.3.3 Индекс=21h и на этом же уровне вложенности второй Индекс=21h !!!! ВО! Вот где собака зарылася!
В данном коде(выше), и я бы сказал механизме доступа к МОНИТОРИНГОВОЙ ЧАСТИ, которую имеем по базе 0x290 мы ВПРАВЕ владеть лишь регистрами из таблицы см. Table 9-2. Environment Controller Registers = Лист91 у меня.
Таким образом послав 20h в 0x295 и прочитав из 0x296 значение, мы имеем по таблице... э-э-э-э....
VIN0 Voltage Reading Register --- НАПРЯЖЕНИЕ на пине VIN0.
Согласен? ;)

Posted: Wed Dec 13, 2006 7:02 pm
by Ghost
VaStaNi: видимо можеш уже не проверять почту )

Posted: Wed Dec 13, 2006 11:27 pm
by Serge
Ghost
Я разобрался с ITE. Регистры 0х20 и 0х21 относятся к конфигурационными
и читаются через порты 0x2e/0x2f или 0x4e/0x4f

Чтобы получить к ним доступ надо перевести чип в "MB PnP Mode"
для этого записать ключ 0x87015555 в порт 0x2e или 0x870155AA в 0х4E

для выхода из режима установить в "1" бит 1 в регистра 0х02

В ДОС этот код дал правильные результаты 0х87 для 0х20 и 0х12 для 0х21

mov eax, 0x55550187 ;переход в режим
out 0x2e, al
shr eax, 8
out 0x2e, al
shr eax, 8
out 0x2e, al
shr eax, 8
out 0x2e, al

mov al, 0x20
out 0x2e, al
in al, 0x2f ; al = 0x87

mov al, 0x21
out 0x2e, al
in al, 0x2f ; al = 0x12

mov al, 2
out 0x2e, al
mov ah, al
in al, 0x2f ; читаем регистр 0x02
or al, 2 ; выход из режима
xchg ah, al
out 0x2e, al ;записываем регистр 0x02
mov al, ah
out 0x2f, al

Читать показания датчиков через порты 0х295-0х296 не совсем
верно. Базовый адрес регистров "Enviroment control" (EC) по умолчанию 0x290
тоже хранится в конфигурационном пространстве LDN=4 MSBreg 0x60 LSBreg 0x62

mov al, 7 LDN index reg
out 0x2e, al
mov al, 4 LDN val
out 0x2f, al
mov ax, 0x6160
out ox2e, al
in al, 0x2f ;MSB
xchg ah, al
out 0x2e, al
in al, 0x2F ;LSB
mov [EC_base], ax

адресный регистр EC base+5 данных base+6

Posted: Wed Dec 13, 2006 11:58 pm
by Ghost
Serge: спасибо за код и за разяснения, примерно тоже я слал VaStaNi, только там были догатки (про 0x55550187) взятые из какого то кода на delphi. Прикручу на выходных (если есть желание, можеш сам), прейдётся ядро править, а то оно 0x2e, 0x2f, 0x4e, 0x4f не даст. Кстати на этих портах Fintek висит, будет время, прикручу и его.

P.S. А если чип висит на SMBus, тогда как? Я сам в руках держал двухкамнёвку под AthlonMP с двумя IT8712F, один через ISA(LPC), другой через SMBus.

Posted: Thu Dec 14, 2006 12:45 am
by Serge
У чипов есть контакт JP3/SOUT1 по сигналу на котором они себя различают. После записи ключа в порт 0х2е/0х4е оба перейдут в режим настройки. Потом надо записать правильное значение в регистр 0х22. Бит 7 определяет какой чип будет настраиваться 0 или 1. После записи чип у которого сигнал на JP3 не совпадает с битом 7 рег. 0х22 выйдет из режима. Тогда можно считать правильные значения из конфигурационных регистров а потом всё повторить для второго чипа.

Как работать с SMBus не знаю. Надо читать System Management Bus (SMBus) Specification, Version 2.0.

Posted: Thu Dec 14, 2006 10:54 am
by VaStaNi
Скупо как то вы ребята поясняете, я хоть и догадываюсь, но лучше спрошу ниже. И потом нас ведь МОГУТ читать совсем несведущие ребятки и для них сведения из конференции могут быть на уровне ОТКРЫТИЯ в личном плане понимания чеголибо...
Serge wrote: Я разобрался с ITE. Регистры 0х20 и 0х21 относятся к конфигурационными
и читаются через порты 0x2e/0x2f или 0x4e/0x4f
Конфигурац. чего, кого? PCI CFG? Данного чипа? Данного южника матери?.........
Данные конкретные адреса портов откуда взялись? Для какого чипсета справедливы они? На ASUS ни есть? На NFORCE имеются? У людей разные "покупки" разных лет....
Serge wrote: Чтобы получить к ним доступ надо перевести чип в "MB PnP Mode"
для этого записать ключ 0x87015555 в порт 0x2e или 0x870155AA в 0х4E
Из чего это следует? Где прочитать можно? Опять же для какого..... справедливо или испытывалось, работает?
Serge wrote: Читать показания датчиков через порты 0х295-0х296 не совсем
верно. Базовый адрес регистров "Enviroment control" (EC) по умолчанию 0x290
тоже хранится в конфигурационном пространстве LDN=4 MSBreg 0x60 LSBreg 0x62
Если очень сурово подходить к этому то - ДА! Если проще и обобщая, то на сегодня, достаточно определить есть ли такие порты вообще и если есть то работать с ними спокойно. Такие вещи считаю де-факто портами, равно как порт 0x3F8, я не могу считать портом для LPT или мониторинговым или... просто он настолько "устаканился", что все просто знают однозначность - это COM1 для нормальных осей.
Serge wrote: Как работать с SMBus не знаю. Надо читать System Management Bus (SMBus) Specification, Version 2.0.
Я давно занимаюсь эпизодически этой темой, наряду с кучей остальных интересов по железу :)
Могу сказать сразу - чтением этого мануала делу не поможешь. Разве так только просветиться в общих чертах. С точки зрения практики ПОМОГАЕТ ТОЛЬКО КОНКРЕТНЫЙ РЕВЕРСИНГ КОДА из BIOS (или соотв.прог если им доверять) конкретной матери (производителя)
http://lowlevel.h14.ru/cgi-bin/yabb/YaB ... 1165931685
Могу по ходу доводки поделиться исходниками в обмен на взаимную помошь в реверсинге и обкатке кодов процедур работы на SMBus, их долизыванию до унифицированного применения на широком кругу матерей. Нужны реальные и другие (не интел) матери, чипсеты, раальность проверки и доводки кода на них и в первую очередь слизывание прошивки с них и её реверсинг силами владельца или мы вместе с ним... Короче SMBus - ужасно проста, но вендорозависима и опасна, т.к. запросто угробить кое что можно, посему видимо и не афишируется, а всякие жлобы еще и деньгу за это хотят то тут то там в виде приложений по мониторингу и пр.... Тут я читывал, что кто то IDA уважал... Не Ghost ли? В принципе можно обсудить детали и круг участников, но нужны сведущие, а не любопытствующие, ибо от последних, в последнее время меня чтото тошнит, т.к. они, как минимум просто тормозят дело.... Лучше по финалу дела пусть.....

Posted: Thu Dec 14, 2006 11:54 am
by Serge
Ghost
Посмотрел описание 8712F и 8718F там нет ничего о SMBus. Похоже что они не работают с этой шиной иначе было бы упоминание. Правда не совсем понятно каким образом два чипа могут сидеть на одной LPC шине. Вообще неясно зачем второй SuperIO чип. Если только для мониторинга то это сложно и дороже чем специальным чипом.

Для выхода из конфигурационного режима читать регистр 0х02 не обязательно так что код упрощается до
mov al, 0x02
out 0x2E, al
out 0x2F, al

VaStaNi
Регистры доступные через порты 2E-2F/4E-4F отвечают за настройку чипа.
Всё подробно описано в
8.1 Configuring Sequence Description
8.2 Description of the Configurftion Registers
8.3 Global Configurftion Registers
официального руководства.
http://www.ite.com.tw/product_info/file ... V0.8.2.pdf
На сайте есть и заготовка с кодом настройки чипа для разработчиков BIOS.

Posted: Thu Dec 14, 2006 2:01 pm
by VaStaNi
Serge, на SMBus ITE`шники не работают Winbond - имеет вариант работы по манам, SMSC чипаки на последних матерях интела (реально пробовал) на этой шине и висит (6d103.pdf)
Вопрос. Порты 2E-2F/... де-факто??? Или это только для интел справедливо? А что если в южнике он указан в PCICFG данных конкретно для LPC. В манах на ICH есть данные касаемо LPC.... Кто нить знает?
Где то раньше на машины .... летней давности читал про супер-пупер сервисн-конфиг порты материнки типа 22h-23h. Может это тоже но сегоняшних дней?
Попробую, наверное, их насщупать на I945GNT где SMSC чипак на SMBus висит, любопытный может быть расклад...

Posted: Thu Dec 14, 2006 3:34 pm
by Serge
VaStaNi
2E-2F или 4E-4F других вариантов нет. Всё это написано в документации. Там даже блок-схема есть с последовательностью конфигурирования.

Posted: Thu Dec 14, 2006 5:52 pm
by VaStaNi
Чем дальше в лес, тем больше помидоров... ;)
Итак, задачка! Имеются 2 машины I915 и I945 (ICh6 и ICH7 соответственно), никаких портов 2E,2F не наблюдаются, а очень вероятный их "близнец" вычитывается парами с четким шагом близнецов по содержанию чтения:
24-25 28-29 2C-2D 30-31 34-35 38-39 3C-3D
Для тех, кто знаком со схемотехническими принципами дешифраци адресов в цифр.техн. ясен вывод 1:
--- производитель не стал морочить голову с полной дешифрацией адресов в этом диапазоне и некоторые адресные линии "простил" себе самому и не стал заводить на.... результат лицезреем.
Вывод 2:
--- порты 2E-2F - НЕ де-факто! И еще непонятно кому они принадлежат, эти адреса надо достоверно знать, определять, проверять и т.п. (есть предположение, что через эти порты регулируется паряжение питания CPU!)
Примечание.
У первой машины IT8712 (на LPC, производитель ITE) у второй EMC6D103 (на SMBus, производитель SMSC).
Надеюсь кому то это интересно и я говорю не сам с собой :)

Posted: Thu Dec 14, 2006 6:55 pm
by Serge
VaStaNi
Ещё раз. 2E-2F или 4E-4F. Это написано в документации чёрным по-белому. Порты становятся доступны после записи ключа 0x87015555 для 0x2e или 0x870155AA для 0х4E. Если этого не сделать то контроллер игнорирует все чтения из портов
in al, 0x2E = 0xFF

Posted: Thu Dec 14, 2006 7:31 pm
by Serge
Ghost
Есть у них SMBus. Только они здорово замаскировались. В блоке мониторинга упоминается Serial bus и Serial Bus base register. Только найти в карте его не удалось. Есть контакты SIN1,SIN2 и SOUT1,SOUT2. Наверное если прочитать "незанятые" регистры то можно найти те что относятся к SMBus.

Posted: Thu Dec 14, 2006 10:10 pm
by Ghost
Serge
Вот упоминания о IT8712F (кстати на той матери были IT8712F-A, но как я понял это значит первая редакция?)
http://www.mjmwired.net/kernel/Documentation/hwmon/it87
This driver also supports IT8712F, which adds SMBus access...
правда потом появилось : http://lists.lm-sensors.org/pipermail/l ... 18044.html,
... available on a small number of motherboard models ...
видимо я видел редкую модель, хотя на многих двухкамнёвках мониторинг одного камня идёт через LPC а второго через I2C (SMBus).

Маркировку той матери не знаю, на логике AMD была, вроде на ASUS A7V600 тоже IT8712F на SMBus.

VaStaNi
Об этих регистрах говорится и в манах Winbond в разделе PnP.
По поводу SMBus можно почитать например lm-sensors.org, но как я понял с шиной ты уже разобрался, тебя интересует определение базового адреса, многое можно узнать из ядра linux. За реверс я могу взятся но не скоро, в районе января/февраля (хотя всякое может быть).

Posted: Fri Dec 15, 2006 10:57 am
by VaStaNi
Привет! Ребята ВЫ ПРАВЫ!!! Беру свои слова обратно. Действительно ДЕТАЛЬНАЯ ПРОВЕРКА + коды биосов разных машин (производителей, года выпуска) говорят о том, что 2E, 2F присутствуют и выковырянный код подтверждает ВСЕ приведенное выше и маны! Биосы "говорят", также о аналогично-хитрых портах (аналогичная парочка индексный+данные) - 0x22, 0x23 пока загадка, но узелок на память :)
ПОРТЫ 0x2E и 0x2F - можно сказать де-факто порты на матерях, где ITE чипы применены про остальные утверждать не буду.

Ребята, поверьте, по SMBus я перерыл многое, но саное путевое и достоверное (+ уверенность что оно именно на этой машине должно работать) - код биоса!
Короче, так, дабы пытливые упрямцы, аналогичные мне, набили себе шишек поменьше... даю сегодня, смышленым и пытливым, "вкусный пирожек" по SMBus и надеюсь меня не забудут, и когда то кто то "угостит" меня своим и ПРИНЦИПАЛЬНО новым по алгоритму работы, регистрам, портам.

Принцип нахождения РЕАЛЬНО РАБОТАЮЩИХ SMBus процедур и алгоритмов:
1. Определяем базовый порт SMBus.
Самый наглядный проги под винду: тестовые, SpeedFan и т.п. Рекомендую SpeedFan, т.к. там на вкладке просканируете эту шину на предмет адресов устройств (ведь шину можно воспринимать, как микро-сеть :) со схемой взаимодействия мастер(хост)-ведомые)
2. Берем прошивку или сливаем ее оригинал, Потрошим(распаковываем) ее на составляющие файлы (кто неграмотен, как и чем идет на http://www.rom.by)
В первом куске прошивки (первый упакованный файл) есть код процедур SMBus. Обычно он 128Кб.
3. В IDA грузим его, незабыв указать сегмент 0xE000! Далее все логично. Поиск HEX = Word БАЗА SMBus, БАЗА+1, БАЗА+2, БАЗА+3, БАЗА+4 (у NFORCE еще БАЗА+20h, БАЗА+40h и еще +1,2,4 относительно них есть)
4. Причесываем выуженный код и имеем для интелов:

Code: Select all

                mov     dx, 500h
loc_E92F7:
                in      al, dx
                out     0EBh, al
                out     dx, al
                and     al, 0BFh
                or      al, al
                jnz     loc_E92F7

                mov     dx, 504h
                mov     al, ch
                or      al, 1
                out     dx, al
                mov     al, cl
                mov     dx, 503h
                out     dx, al
                mov     dx, 502h
                mov     al, 74h ; 't'
                out     dx, al
                out     0EBh, al

                xor     cx, cx
                mov     dx, 500h
loc_E931C:
                in      al, dx
                out     0EBh, al
                test    al, 4
                jnz     loc_E932D
                test    al, 2
                jz      loc_E932B
                test    al, 80h
                jnz     loc_E932D
loc_E932B:
                loop    loc_E931C
loc_E932D:
                out     dx, al

                mov     dx, 507h
                in      al, dx
                ret

5. база у этой машины, конечно 0x500, пытливый берет ман на южник интела... находит соотв., раздел вкуривает что такое +2 +3 +4 +7 от базы... разгадывает для себя загадку почему именно 0x74 засылается в.... как готовность оценивается и как правильно формируется СЕТЕВОЙ адрес в CH регистре на входе процедуры(внимание Бит0!)
6. Начинаются вопросы другого плана ))) http://www.wasm.ru/forum/viewtopic.php?id=17706
УСПЕХОВ и ПОБЕД!