Привет, народ! Краткое описание проблемы ноут 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
можно отключить usb в биосе. Function disabling -- стандартная фича интеловских южников, отключенные устройства не занимают никаких ресурсов и не видны в pci conf, т.е. драйвера их даже не увидят. Насчет же обнаружения места зацикливания -- поставь SoftICE, с такой загрузкой проца сразу в нужное место попадешь. Вполне возможно, что проблема и не в usb окажется.
Да , если бы ещё было отключение USB в BIOSe -проблем не возникало бы ;( Нету такой ф-ции даж в последнем апдейте биоса.
странно, должна быть. Впрочем, можно и самому грохнуть. Но сначала надо убедиться, что дело именно в usb. Накидал на скорую руку скриптик под PCIScope, вырубает UHCI и EHCI на ICH6 и его производных. После запуска надо зайти в диспетчер устройств винды и выбрать "обновить конфигурацию оборудования". В PCIScope refresh выпендривается, поэтому лучше PCIScope просто перезапустить. USB-контроллеры должны исчезнуть. Если поможет, то код из скрипта надо выполнять до загрузки винды, чтобы не обнаруживала usb-контроллеры вовсе. По идее винда при отключении девайсов в диспетчере устройств должна вырубать и ихние драйвера, не пробовал usb так отключать? Вообще конечно не помешало б в softice'е глянуть, кто конкретно грузит систему. Код (Text): var App = new ActiveXObject("PCIScope.Application"); var PciConf = App.Pci; var Mem = App.Memory; // ICH6* DIDs -- 2640h, 2641h (-M), 2642h (-W/-RW) if (PciConf.ReadWord(0, 0x1F, 0, 0x00)!=0x8086) App.MessageBox("hey your chipset sucks"); // supported SBs -- ICH6* else if ((PciConf.ReadWord(0, 0x1F, 0, 0x02)<0x2640) ||(PciConf.ReadWord(0, 0x1F, 0, 0x02)>0x2642)) App.MessageBox("Error: unsupported SB"); // SB ok, disable usb else { for(i=0;i<4;i++) // UHCI #1 - #4 { var cmdreg = PciConf.ReadWord(0, 0x1D, i, 0x04); cmdreg = (cmdreg & 0xF800) | (1<<10); PciConf.WriteWord(0, 0x1D, i, 0x04, cmdreg); } // the same for EHCI cmdreg = (PciConf.ReadWord(0, 0x1D, 7, 4) & 0xF800) | (1<<10); PciConf.WriteWord(0, 0x1D, 7, 4, cmdreg); // now disable usb via function disabling var RCBA = PciConf.ReadDword(0, 0x1F, 0, 0xF0) & 0xFFFFC000; // update FD in the Root Complex var t = Mem.ReadDword(RCBA+0x3418) | (1<<15) | (0xF << 8); Mem.WriteDword(RCBA+0x3418, t); App.MessageBox("usb function disabled"); }
Отключать любые устройства (именно отключать, а не _блокировать_) "на лету" (в винде) - нельзя (точней, можно, но тогда будет зависон). Отключать можно лишь ДО загрузки системы. Точней, даже раньше - ДО раздачи устройствам прерываний, областей ввода-вывода сотоварищи. То бишь - в биосе. Итого, для начала хотелось бы глянуть биоса. Хотя я предполагаю, что USB в приведенном случае следствие, а НЕ причина.
Хм...сорри , что сразу не отписался про скрипт. Вообще интересное кино. 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
Я уже пробовал оттуда, там не биос, а "прошифочный файл" (с прошивкой "внутри"). А, понятно, нужен сам образ прошивки. Это обозначает лишь поддержку USB-девайсов посредством драйвера оного в SMM для древних ОС (типа DOS). Что во многом подтверждает предположение о "непричинности", а "следовательности" проблем с USB.
Запустил всё-таки 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
ну еще бы -- это вовсе не ICH6*, а ICH4-M вообще-то. По ID'шникам чипсет 85x GM/PM/GMV/GME. Попробуй этот: Код (Text): var App = new ActiveXObject("PCIScope.Application"); var PciConf = App.Pci; var Mem = App.Memory; // ICH4 DID -- 24C0h, ICH4-M -- 24CCh if (PciConf.ReadWord(0, 0x1F, 0, 0x00)!=0x8086) App.MessageBox("hey your chipset sucks"); // supported SBs -- ICH4* else if ((PciConf.ReadWord(0, 0x1F, 0, 0x02) != 0x24C0) && (PciConf.ReadWord(0, 0x1F, 0, 0x02) != 0x24CC)) App.MessageBox("Error: unsupported SB (not ICH4*)"); // SB ok, disable usb else { for(i=0;i<3;i++) // UHCI #1 - #3 { var cmdreg = PciConf.ReadWord(0, 0x1D, i, 0x04); cmdreg = (cmdreg & 0xF800) | (1<<10); PciConf.WriteWord(0, 0x1D, i, 0x04, cmdreg); } // the same for EHCI cmdreg = (PciConf.ReadWord(0, 0x1D, 7, 4) & 0xF800) | (1<<10); PciConf.WriteWord(0, 0x1D, 7, 4, cmdreg); // now disable usb via function disabling var t = PciConf.ReadWord(0, 31, 0, 0xF2) | (1<<15) | (7 << 8); PciConf.WriteWord(0, 31, 0, 0xF2, t); App.MessageBox("usb function disabled"); } Насчет ошибок: 1-3 штуки -- это нормальное явление при запуске PCIScope.
мда, условие-то я забыл поменять. Поправил, попробуй. вместо репорта от PCIScope лучше бы snapshot (bpd), гораздо удобнее смотреть. Проблемное место быстрее можно локализовать, если глянуть в SoftICE'е, что за код собственно так грузит систему (и к какой программе/драйверу он относится). А pciscope после чего заработал?
может проще запустить прогу типа CPU-Z чтоб хоть установить что за мост стоит? упс, предыдущего поста не видел
Теперь ок, "usb function disabled". Но проблема осталась та же ;((( Поставил SoftICE , ток я им пользоваться не умею %) Если можно, то вкратце проинструктируйте PCIScope заработал после того как убрал Compuware Driver Studio и outpost из автозагрузки. До этого был BlackICE,а на днях решил попробовать аутпост. Кстати outpost умудрялся 50% CPU времени съедать, находясь в вечом состоянии "Запуск"... до этого это не удавалось ни одному процессу, всё System ел
Received Master Abort - указано, что это критическая ошибка. Кстати, вылезают 3 вышеуказанные ошибки постоянно и одни и те же .
Ошибки эти скорее всего безобидного происхождения. Дело в том, что винде фиолетово до 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% загрузки проца промахнуться будет сложно.
ОК спасибо. Сегодня м.б. поимею DS 3.2 По поводу ошибок - делал "reset all errors", сбрасывал 13-й бит в регистрах статуса , записывал просто "0х00"- пофиг , одно и то же при каждом перезапуске PCIScope, как в посте выше ^^ Вечером ещё скину .bpd, он и правда реально удобнее, особенно в данной ситуаци ))
Снапшот бука (до установки 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
это код из реализации KeStallExecutionProcessor если используется PM-таймер, соответственно надо узнать, кто же так неутомимо ее вызывает. Для этого когда всплывешь на выполни в айсе команду p ret и посмотри, где оказался (желательно так же переписать несколько команд). Беспрестанный вызов KeStallExecutionProcessor сам по себе довольно характерен.
Сорри что сразу не отписался ..... usbehci!.text+5342 Код (Text): F9527640: push 14 call [HAL!KeStallExecutionProcessor] push DWORD PTR[EBP+08] ;<-здесь после выполнения "p ret" add DWORD PTR[ebp+0c],14 call esi ;804d90a6==ntoskrnl!READ_REGISTER_ULONG cmp DWORD PTR [ebp+0c],000001f4 ;всегда eax=0x00001101 ja F952762C test ah,01 jnz F9527640 ;infinity loop собссно вот оно;( ээээ.... интересно что будет если jnz F9527640 забить nop-ами. Только 1. немного поигрывает одно место - а не накроется ли что нить ещё 2. не знаю, как ето сделать в SoftICE ... только что поимел русский букварь по SoftICE только старенький он 1999 года ;( Лучше буду ждать советов знающих людей, т.е _BC_
нда, исчезла интригующая составляющая. Сдохла либо интерфейсная часть USB (что скорее всего), либо сам EHCI-контроллер в южнике (что маловероятно, т.к. он в этом случае как утопающий постарался бы с собой на тот свет кого-нибудь еще прихватить, но теоретически возможно, из-за дерганий флешек на горячую и тп.). На всех портах EHCI-контроллер показывает подключенные устройства, что, конечно, не является реальностью. При обнаружении этих подключенных "устройств", драйвер выполняет Port Reset, которому не суждено закончится... По правде говоря, обречен не закончится даже ресет первого порта, т.е. до остальных дело не дойдет. Код (Text): call [HAL!KeStallExecutionProcessor] push DWORD PTR[EBP+08] ;<-здесь после выполнения "p ret" add DWORD PTR[ebp+0c],14 call esi ;804d90a6==ntoskrnl!READ_REGISTER_ULONG cmp DWORD PTR [ebp+0c],000001f4 ;всегда eax=0x00001101 ja F952762C test ah,01 jnz F9527640 ;infinity loop собссно вот оно;( Данный фрагмент выполняет ожидание завершения reset-sequence. Контроллер честно устанавливает Port Reset=1, но вот вернутся в 0 ему, увы, не судьба. usbehci.sys ждет сброса в лучших традициях мелкософта -- бесконечным циклом. Возможно именно поэтому драйвер не реагирует на отлючение устройств и тп -- некогда ему. Чтобы пофиксить проблему, надо отключать EHCI-контроллер _до_ запуска винды, чтобы при enumeration не увидела его и не трогала своими погаными руками в лице usbehci. Т.е. выполнять эту часть скриипта (в ее эквиваленте ессно): Код (Text): cmdreg = (PciConf.ReadWord(0, 0x1D, 7, 4) & 0xF800) | (1<<10); PciConf.WriteWord(0, 0x1D, 7, 4, cmdreg); // now disable usb via function disabling var t = PciConf.ReadWord(0, 31, 0, 0xF2) | (1<<15); PciConf.WriteWord(0, 31, 0, 0xF2, t); P.S. Попробуй изменить в Панель управления->Электропитание схему управления на "Включен постоянно" и перезагрузиться. Есть подозрение на баг чипсета, это как раз ноут... Это так, чтобы убедиться.