Битый Южный Мост .

Тема в разделе "WASM.HARDWARE", создана пользователем liliput, 9 фев 2007.

  1. liliput

    liliput New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    22
    Привет, народ!
    Краткое описание проблемы
    ноут Dell Inspiron 510m , всё железо пашет норм, кроме USB .
    1. не работают USB порты , не видит ни флэшку ни модем ни принтер, ни встроенный usb FDD
    2. Видимо, как следствие этого , в XP SP2 загрузка ЦП (Centrino) 100% а именно процессом System = 99%
    3. Из-за этого ( имхо) камень греется до 70 С , производительность крайне низкая, всё тормозит. Если не грузить ось, то нагрев меньше, но какая T= хз. МОж 50 С

    Винду переустанавливали, меняли камень, HDD, память, обновили BIOS -> проблема одинаково остается
    Винда всё касаемо USB ( HUB , концентраторы) видит устанавливает, но толку=0
    Диагностика по F12 показывает все абсолютно тесты как PASSED.......
    На матери стоит ICH6 82801DBM , она и рулит USB . Не перегревается вроде t=40-45 C
    На ногах разъема USB питание +5 имеется, на ногах 2 и 3 постоянно висит около 1 вольта, причём вроде на 2 и 3 должно слегка осициллировать, но этого не видно, по кр. мере лучом С1-67 а, другого нет %).
    Цель = не починить USB, а УБРАТЬ загрузку проца.
    Подумалось , что проц постоянно пытается общаться с битой частью южного моста, типа вечный цикл...можно ли как нить отрубить эти запросы или игнорировать на уровне какого-нить самопального драйвера?
    Готового решения не прошу, тока вопрос, теоретически возможно ли это ?
    Проблема у многих имеется, а менять ЮМ - дело недешёвое, особенно когда всё остальное в ЮМ работает...а если USB нужны, то можно PC Card USB впихнуть
    на новые модели с другим ЮМ ( типа GBM) вообще тяжко найти з/ч.

    зы.
    Есть даташит на этот чипсет
    http://download.intel.com/design/mobile/datashts/25233701.pdf
     
  2. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    можно отключить usb в биосе. Function disabling -- стандартная фича интеловских южников, отключенные устройства не занимают никаких ресурсов и не видны в pci conf, т.е. драйвера их даже не увидят.
    Насчет же обнаружения места зацикливания -- поставь SoftICE, с такой загрузкой проца сразу в нужное место попадешь. Вполне возможно, что проблема и не в usb окажется.
     
  3. liliput

    liliput New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    22
    Да , если бы ещё было отключение USB в BIOSe -проблем не возникало бы ;(
    Нету такой ф-ции даж в последнем апдейте биоса.
     
  4. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    странно, должна быть. Впрочем, можно и самому грохнуть. ;) Но сначала надо убедиться, что дело именно в usb. Накидал на скорую руку скриптик под PCIScope, вырубает UHCI и EHCI на ICH6 и его производных. После запуска надо зайти в диспетчер устройств винды и выбрать "обновить конфигурацию оборудования". В PCIScope refresh выпендривается, поэтому лучше PCIScope просто перезапустить. USB-контроллеры должны исчезнуть. Если поможет, то код из скрипта надо выполнять до загрузки винды, чтобы не обнаруживала usb-контроллеры вовсе. По идее винда при отключении девайсов в диспетчере устройств должна вырубать и ихние драйвера, не пробовал usb так отключать? Вообще конечно не помешало б в softice'е глянуть, кто конкретно грузит систему.

    Код (Text):
    1. var App = new ActiveXObject("PCIScope.Application");
    2. var PciConf = App.Pci;
    3. var Mem = App.Memory;
    4.  
    5. // ICH6* DIDs -- 2640h, 2641h (-M), 2642h (-W/-RW)
    6. if (PciConf.ReadWord(0, 0x1F, 0, 0x00)!=0x8086) App.MessageBox("hey your chipset sucks");
    7. // supported SBs -- ICH6*
    8. else if ((PciConf.ReadWord(0, 0x1F, 0, 0x02)<0x2640) ||(PciConf.ReadWord(0, 0x1F, 0, 0x02)>0x2642))
    9.     App.MessageBox("Error: unsupported SB");
    10. // SB ok, disable usb
    11. else
    12. {
    13.     for(i=0;i<4;i++)    // UHCI #1 - #4
    14.     {
    15.         var cmdreg = PciConf.ReadWord(0, 0x1D, i, 0x04);
    16.         cmdreg = (cmdreg & 0xF800) | (1<<10);
    17.         PciConf.WriteWord(0, 0x1D, i, 0x04, cmdreg);
    18.     }
    19.     // the same for EHCI
    20.     cmdreg = (PciConf.ReadWord(0, 0x1D, 7, 4) & 0xF800) | (1<<10);
    21.     PciConf.WriteWord(0, 0x1D, 7, 4, cmdreg);
    22.  
    23.     // now disable usb via function disabling
    24.     var RCBA = PciConf.ReadDword(0, 0x1F, 0, 0xF0) & 0xFFFFC000;
    25.     // update FD in the Root Complex
    26.     var t = Mem.ReadDword(RCBA+0x3418) | (1<<15) | (0xF << 8);
    27.     Mem.WriteDword(RCBA+0x3418, t);
    28.     App.MessageBox("usb function disabled");
    29. }
     
  5. apple_rom

    apple_rom Роман

    Публикаций:
    0
    Регистрация:
    1 авг 2006
    Сообщения:
    34
    Адрес:
    Минск
    Отключать любые устройства (именно отключать, а не _блокировать_) "на лету" (в винде) - нельзя (точней, можно, но тогда будет зависон). Отключать можно лишь ДО загрузки системы. Точней, даже раньше - ДО раздачи устройствам прерываний, областей ввода-вывода сотоварищи. То бишь - в биосе.
    Итого, для начала хотелось бы глянуть биоса. Хотя я предполагаю, что USB в приведенном случае следствие, а НЕ причина.
     
  6. liliput

    liliput New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    22
    Хм...сорри , что сразу не отписался про скрипт.
    Вообще интересное кино. PCIScope при запуске показывает своё окошко и наглухо вешает систему, завис тачпада и клавы... до регистрации окошко с таймера застывало на "30".
    Скрипт проверить не получается никак. ;( С чем это м.б. связано ???

    По поводу отключения usb в диспетчере - конечно пробовал, при отключении любого из 4 хост-контроллеров появляются песочные часики, которые вообще никак не хотят исчезать с окошка дисп. устр-в. Обновление конфигурации просто не возможно произвести.
    Пререзагруз - и видим что уже все 4 концентратора выключены. Но толку = 0.
    По БИОС. Что старый A07, что новый A11 бук ведёт себя одинаково.
    В биосе есть только usb emulation en/dis .
    Написано так: USB emulation allows a USB keyboard, USB mouse and USB floppy drive to work with operation systems that do not have direct USB support...etc blablaba
    Новый Биос брал отсюда.
    http://support.dell.com/support/dow...&s=gen&SystemID=INS_PNT_PM_510M&os=WW1&osl=EN
     
  7. apple_rom

    apple_rom Роман

    Публикаций:
    0
    Регистрация:
    1 авг 2006
    Сообщения:
    34
    Адрес:
    Минск
    Я уже пробовал оттуда, там не биос, а "прошифочный файл" (с прошивкой "внутри"). А, понятно, нужен сам образ прошивки.
    Это обозначает лишь поддержку USB-девайсов посредством драйвера оного в SMM для древних ОС (типа DOS).
    Что во многом подтверждает предположение о "непричинности", а "следовательности" проблем с USB.
     
  8. liliput

    liliput New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    22
    Запустил всё-таки PCIScope
    Пишет 3 ошибки
    00:1E:00 Intel Corporation - 82801BAM/CAM/DBM (ICH2-M/3-M/4-M) Hub Interface to PCI Bridge............ : Detected Parity Error (Status Register)
    00:00:00 Intel Corporation - 82852GM/GME/GMV/PM, 855GM/GME Montara Host-Hub Interface Bridge (A2-step) : Received Master Abort (Status Register)
    00:1E:00 Intel Corporation - 82801BAM/CAM/DBM (ICH2-M/3-M/4-M) Hub Interface to PCI Bridge............ : Received Master-Abort (Secondary Status)

    Скрипт пишет "Error, unsupported SB"
    Сделал на вский случай report из PCIScope, лежит тут:
    http://www.sendspace.com/file/otq19z
     
  9. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    ну еще бы -- это вовсе не ICH6*, а ICH4-M вообще-то. По ID'шникам чипсет 85x GM/PM/GMV/GME. Попробуй этот:
    Код (Text):
    1. var App = new ActiveXObject("PCIScope.Application");
    2. var PciConf = App.Pci;
    3. var Mem = App.Memory;
    4.  
    5. // ICH4 DID -- 24C0h, ICH4-M -- 24CCh
    6. if (PciConf.ReadWord(0, 0x1F, 0, 0x00)!=0x8086) App.MessageBox("hey your chipset sucks");
    7. // supported SBs -- ICH4*
    8. else if ((PciConf.ReadWord(0, 0x1F, 0, 0x02) != 0x24C0) && (PciConf.ReadWord(0, 0x1F, 0, 0x02) != 0x24CC))
    9.     App.MessageBox("Error: unsupported SB (not ICH4*)");
    10. // SB ok, disable usb
    11. else
    12. {
    13.     for(i=0;i<3;i++)    // UHCI #1 - #3
    14.     {
    15.         var cmdreg = PciConf.ReadWord(0, 0x1D, i, 0x04);
    16.         cmdreg = (cmdreg & 0xF800) | (1<<10);
    17.         PciConf.WriteWord(0, 0x1D, i, 0x04, cmdreg);
    18.     }
    19.     // the same for EHCI
    20.     cmdreg = (PciConf.ReadWord(0, 0x1D, 7, 4) & 0xF800) | (1<<10);
    21.     PciConf.WriteWord(0, 0x1D, 7, 4, cmdreg);
    22.  
    23.     // now disable usb via function disabling
    24.     var t = PciConf.ReadWord(0, 31, 0, 0xF2) | (1<<15) | (7 << 8);
    25.     PciConf.WriteWord(0, 31, 0, 0xF2, t);
    26.     App.MessageBox("usb function disabled");
    27. }
    Насчет ошибок: 1-3 штуки -- это нормальное явление при запуске PCIScope.
     
  10. liliput

    liliput New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    22
    Error: unsupported SB (not ICH4*)
    Мож какую ещё инфу надо дать для полноты картины ?
     
  11. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    мда, условие-то я забыл поменять. Поправил, попробуй.
    вместо репорта от PCIScope лучше бы snapshot (bpd), гораздо удобнее смотреть.
    Проблемное место быстрее можно локализовать, если глянуть в SoftICE'е, что за код собственно так грузит систему (и к какой программе/драйверу он относится).
    А pciscope после чего заработал?
     
  12. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    может проще запустить прогу типа CPU-Z чтоб хоть установить что за мост стоит?
    упс, предыдущего поста не видел
     
  13. liliput

    liliput New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    22
    Теперь ок, "usb function disabled". Но проблема осталась та же ;(((

    Поставил SoftICE , ток я им пользоваться не умею %) Если можно, то вкратце проинструктируйте

    PCIScope заработал после того как убрал Compuware Driver Studio и outpost из автозагрузки.

    До этого был BlackICE,а на днях решил попробовать аутпост. Кстати outpost умудрялся 50% CPU времени съедать, находясь в вечом состоянии "Запуск"... до этого это не удавалось ни одному процессу, всё System ел ;)
     
  14. liliput

    liliput New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    22
    Received Master Abort - указано, что это критическая ошибка.
    Кстати, вылезают 3 вышеуказанные ошибки постоянно и одни и те же .
     
  15. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Ошибки эти скорее всего безобидного происхождения. Дело в том, что винде фиолетово до PCI-ошибок и, как следствие, флажки в PCISTS она не трогает. А т.к. они write-clear, то сохраняют свое состояние пока их не сбросят. Чтобы какой-либо *Abort-флажок стал 1, не обязательно иметь место быть какой-нть фатальной ситуации, можно генерить ошибки и на вполне мирные вещи. Вышеупомянутый received master abort можно поймать, к примеру, на чтении pci conf несуществующего девайса, например, при скане pci conf. Проверить ошибки на критичность можно самим pciscope -- обычно при первом запуске он показывает 1-3 ошибки, после сброса которых (reset all errors) при последующих запусках он уже ошибки не кажет. Вот если он те 3 ошибки будет выдавать при каждом запуске (со сбросом ошибок) -- вот это уже интересней.

    SoftICE лучше брать со студии 3.2, рипы могут быть корявыми. Весьма желательно поставить апдейт до 3.2.1 и скачать свежий osinfo.dat. Всё что требуется -- повсплывать по ctrl+d n раз, и посмотреть в каком модуле он приземляется (строчка под окном кода). При 99% загрузки проца промахнуться будет сложно. ;)
     
  16. liliput

    liliput New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    22
    ОК спасибо.
    Сегодня м.б. поимею DS 3.2

    По поводу ошибок - делал "reset all errors", сбрасывал 13-й бит в регистрах статуса , записывал просто "0х00"- пофиг , одно и то же при каждом перезапуске PCIScope, как в посте выше ^^

    Вечером ещё скину .bpd, он и правда реально удобнее, особенно в данной ситуаци ;)))
     
  17. liliput

    liliput New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    22
    Снапшот бука (до установки DS3.2): http://www.sendspace.com/file/zxfdnz

    ---
    SoftICE в 90 % приземляется в Hal!.text+1019
    HAL!KeGetCurrentIrql+0175

    806ed420: sub eax,01 <--here
    806ed423: jnz 806ed420
    ---
    в 9 % в Hal!.text+7198
    HAL!HalRequestIpi+0538

    in eax,dx ;edx=00000808
    mov ecx,[806f37a4] <---here
    ---
    и 1% в ntoskrnl!.text+1b2a
    ntoskrnl!READ_REGISTER_ULONG

    ret 0004<---here
     
  18. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    это код из реализации KeStallExecutionProcessor если используется PM-таймер, соответственно надо узнать, кто же так неутомимо ее вызывает. Для этого когда всплывешь на
    выполни в айсе команду p ret и посмотри, где оказался (желательно так же переписать несколько команд). Беспрестанный вызов KeStallExecutionProcessor сам по себе довольно характерен.
     
  19. liliput

    liliput New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    22
    Сорри что сразу не отписался .....
    usbehci!.text+5342
    Код (Text):
    1. F9527640: push 14
    2.              call [HAL!KeStallExecutionProcessor]
    3.              push DWORD PTR[EBP+08] ;<-здесь после выполнения "p ret"
    4.              add DWORD PTR[ebp+0c],14
    5.              call esi ;804d90a6==ntoskrnl!READ_REGISTER_ULONG
    6.              cmp DWORD PTR [ebp+0c],000001f4 ;всегда eax=0x00001101
    7.              ja F952762C
    8.              test ah,01
    9.              jnz F9527640 ;infinity loop собссно вот оно;(
    ээээ.... интересно что будет если jnz F9527640 забить nop-ами. Только
    1. немного поигрывает одно место - а не накроется ли что нить ещё
    2. не знаю, как ето сделать в SoftICE ... только что поимел русский букварь по SoftICE только старенький он 1999 года ;(
    Лучше буду ждать советов знающих людей, т.е _BC_ ;)
     
  20. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    нда, исчезла интригующая составляющая. Сдохла либо интерфейсная часть USB (что скорее всего), либо сам EHCI-контроллер в южнике (что маловероятно, т.к. он в этом случае как утопающий постарался бы с собой на тот свет кого-нибудь еще прихватить, но теоретически возможно, из-за дерганий флешек на горячую и тп.).

    На всех портах EHCI-контроллер показывает подключенные устройства, что, конечно, не является реальностью. При обнаружении этих подключенных "устройств", драйвер выполняет Port Reset, которому не суждено закончится... По правде говоря, обречен не закончится даже ресет первого порта, т.е. до остальных дело не дойдет. ;)
    Код (Text):
    1.              call [HAL!KeStallExecutionProcessor]
    2.              push DWORD PTR[EBP+08] ;<-здесь после выполнения "p ret"
    3.              add DWORD PTR[ebp+0c],14
    4.              call esi ;804d90a6==ntoskrnl!READ_REGISTER_ULONG
    5.              cmp DWORD PTR [ebp+0c],000001f4 ;всегда eax=0x00001101
    6.              ja F952762C
    7.              test ah,01
    8.              jnz F9527640 ;infinity loop собссно вот оно;(
    Данный фрагмент выполняет ожидание завершения reset-sequence. Контроллер честно устанавливает Port Reset=1, но вот вернутся в 0 ему, увы, не судьба. usbehci.sys ждет сброса в лучших традициях мелкософта -- бесконечным циклом. Возможно именно поэтому драйвер не реагирует на отлючение устройств и тп -- некогда ему. ;)

    Чтобы пофиксить проблему, надо отключать EHCI-контроллер _до_ запуска винды, чтобы при enumeration не увидела его и не трогала своими погаными руками в лице usbehci. Т.е. выполнять эту часть скриипта (в ее эквиваленте ессно):
    Код (Text):
    1.     cmdreg = (PciConf.ReadWord(0, 0x1D, 7, 4) & 0xF800) | (1<<10);
    2.     PciConf.WriteWord(0, 0x1D, 7, 4, cmdreg);
    3.     // now disable usb via function disabling
    4.     var t = PciConf.ReadWord(0, 31, 0, 0xF2) | (1<<15);
    5.     PciConf.WriteWord(0, 31, 0, 0xF2, t);
    P.S. Попробуй изменить в Панель управления->Электропитание схему управления на "Включен постоянно" и перезагрузиться. Есть подозрение на баг чипсета, это как раз ноут... Это так, чтобы убедиться. ;)