Главная » Хабрахабр » [Из песочницы] Тест памяти, убивающий ноутбуки — почти детектив

[Из песочницы] Тест памяти, убивающий ноутбуки — почти детектив

Умер бы один — никто и разбираться не стал. Недавно у нас произошла душераздирающая история — за одно утро умерли два ноутбука Lenovo T500. Тем более, что по крайней мере один из них (и это подтверждают три пользователя!) нормально работал до последней минуты, был выключен кнопкой питания, перенесен за 100 метров в переговорку и… не включился. Но два за одно утро — это уже слишком!

Ровно ноль — ноутбуки продолжали находиться в состоянии кирпичей. Естественно, в первую очередь были опробованы все кустарные способы реанимации: заменить батарею, заменить адаптер питания… Вытащить батарею и обесточить, сбросить CMOS и так далее… Результат?

Выяснилось следующее: Стали восстанавливать картину событий, чтобы найти хоть какую-то зацепку.

  • В день "Д-1" обоим ноутбукам добавляли память. После замены планок памяти, оба включились и штатно работали до вечера
  • В ночь на день "Д", на обоих компьютерах запустили memtest (точнее — memtest86+ 5.01-3 из дистрибутива Debian)
  • Утром в день "Д" оба компьютера были выключены кнопкой питания, и не включились
  • Кроме того, их на короткое время подключали по VGA-разъему к одному и тому же проектору, и к одному и тому же адаптеру питания в комнате

Но с чем именно ? Очевидно, что смерть ноутбуков должна быть связана с одной из трех вещей: адаптер питания, проектор, или memtest.

Криминала не нашли, а кроме того выяснили что в этот день (но позже) к нему подключали другие ноутбуки, которые остались живы и здоровы. В первую очередь, проверили проектор. Во вторую очередь проверили адаптер питания — он вроде бы занижал напряжение, и его изолировали в карантин.

Пришлось вскрывать тушки самим (благо в сети можно найти и схемы и сервисные руководства на старую серию Thinkpad-ов). Ноутбуки отдали в сервис, который вернул их обратно со следующим результатом: "отказ материнской платы, запчасти отсутствуют!".

Но было совершенно не очевидно — как именно? К этому моменту все стали (методом исключения) подозревать в гибели ноутбуков memtest. Ан нет! В конце концов, оставалась вероятность что гибель ноутбуков — это редкое, неприятное, но все же совпадение.

В более простых устройствах, управление питанием отдается либо процессору/чипсету, либо специализированному контроллеру материнской платы (System controller, он же Embedded controller). Здесь следует сделать лирическое отступление о построении системы управления питанием на буках IBM/Lenovo (по крайней мере старых серий). Но не в IBM/Lenovo! Условно говоря, эта штука отвечает за рефлекторно-спинномозговые функции ноутбука: переключение источников тока, заряд батареи, опознание батареек/vendor lock-in, и тому подобные штуки.

Разумеется, у EC есть свой watchdog, но и он не панацея. Инженеры IBM, видимо, задумывались над тем, что прошивка EC может содержать ошибки или сам контроллер вдруг зависнет. Силовые ключи же отпирают и запирают две специализированные микросхемы (и не бездумно, а сопоставляя желания EC с показаниями термодатчиков, наличием требуемых для очередного шага напряжений на шинах и т.п.). Поэтому, в обязанности EC входит только генерация высокоуровневых сигналов управления питанием. Эти микросхемы: RINKAN (расшифровка неизвестна) и PMH_7 (Power Management Hub rev7)

RINKAN в интерьере

image

Одна из важных (и неочевидных) функций RINKAN — это генерация стабильного напряжения 3. Обратите внимание, что RINKAN не имеет выходов на шины CPU — он в принципе недостижим для процессора. Поскольку рядом нет никаких дросселей — можно предположить, что построен этот регулятор по простой линейной схеме. 3v на шину VCC3SW (назовем ее стартовой шиной). 3v. То есть где-то там внутри сидит транзистор с обвязкой и своим активным сопротивлением высаживает мощность, оставляя после себя только 3. То есть он работает вообще всегда (потому и маломощный — нужен очень малый ток собственного потребления!) Запитывается этот регулятор по ноге VREGIN20, на которую через диоды объединены все источники питания ноутбука (док-станция, адаптер питания, главная батарея и батарея ultrabay).

PMH_7 в рабочей обстановке

image

Как минимум, у нее есть связь с EC по шине SPI. PMH — более интеллектуальная микросхема. Обе микросхемы заказные, без наличия datasheet-ов. Кроме того, она включает или выключает целую кучу напряжений и тактовых сигналов на материнской плате ноутбука. Однако, вряд ли их оставили висеть в воздухе. Поскольку Lenovo/IBM использует одни и те же заказные микросхемы для разных линеек устройств — некоторые ноги PMH в T500-ом не используются. Запомним это. Типовые рекомендации предлагают подтягивать неиспользуемые выводы либо к питанию схемы, либо к земле.

PMH доступен в адресном пространстве CPU. Несмотря на отсутствие документации, команда проекта Coreboot сумела (сопоставляя схемы ноутбуков серии T60, T40 и старше — где функции RINKAN/PMH еще были разделены между микросхемами меньшей степени интеграции) накопать кое-что интересное. Чтобы поднять или опустить ногу PMH они используют следующую последовательность операций (pmh7.c): Не напрямую, конечно, а через EC — но все-таки доступен!

outb(reg, EC_LENOVO_PMH7_ADDR); val = inb(EC_LENOVO_PMH7_DATA); outb(reg, EC_LENOVO_PMH7_ADDR); outb(val | (1 << bit), EC_LENOVO_PMH7_DATA);

Хотим, например, включить подсветку (нога 55 PMH): пишем в регистр 0x55 бит 2 — все просто. То есть сначала пишем в регистр EC (отображенный в адресное пространство CPU) код регистра PMH, а потом можем читать или записывать его содержимое.

Теоретически, BIOS должен описывать области памяти, зарезервированные под устройства ввода-вывода. К большому сожалению, memtest делает примерно то же самое — читает и пишет разные значения в разные области памяти. И, видимо, в какой-то момент то-ли поднял, то-ли опустил неудачную ногу PMH. А memtest не должен туда ничего записывать — но… записал! Соответственно, через выходной транзистор ноги PMH, шина питания VCC3SW оказалась накоротко замкнута на землю...

Дальше RINKAN начал греться. Что было дальше? Но внешне, это никак не проявлялось: во включенном ноутбуке никто не ест с маломощного источника 3. Потому что ток рос, транзитор PMH в ключевом режиме его без проблем протаскивал, а полуоткрытому транзистору в LDO RINKAN становилось все хуже. 3 и 5 вольт соответственно. 3в, а питание подает специальный мощный DC/DC запитывающий главные шины 3.

Питания же на стартовой шине 3. Ну а когда нажали кнопку питания — главные шины обесточились. И ноутбук превратился в тыкву кирпичик. 3в уже не было!

С этой теорией приступили к диагностике:

На шине VCC3SW вместо 3. Первый ноутбук — плата COR5SOPV3 с двойной графикой. 2 вольта. 3, всего 1. Аккуратно отпаяли и подняли выход преобразователя напряжения RINKAN. Сопротивление на землю — около 400 ом. Подали напряжение 3. Сопротивление по шине сразу возросло до сотни кило-ом. В результате, подобрали внешний маломощный LDO (LP2930-3. 3в с внешнего источника — бук ожил. По итогам тестов обнаружилось, что перенесенная клиническая смерть оставила отпечаток на характере устройства — ноутбук отказывается включаться, если в него вставлена батарея но не вставлен адаптер. 3), который питает стартовую шину вместо RINKAN-а. Все остальные функции (заряд, автономная работа, сон, и т.д) без проблем, а включаться — только так и не иначе. Хотите включить — вытащите батарею, включите адаптер питания, и после этого батарею можно вставлять обратно. Первому страдальцу повезло! Заморачиваться не стали — решили вопрос административно: использовать сон или перезагрузку вместо выключения.

После отрывания ноги VCC3SW лучше не стало — то же малое сопротивление по VREGIN20. А второму — нет… Там плата C5ISOVP с интегрированной графикой — напряжения на шине нет совсем, и сопротивление на землю — десятки ом. 3 и 5 вольт на главной. Оторвали еще и ее, включили внешнее питание на стартовую шину — увидели 3. Видимо, повреждена внутренняя логика микросхем, и это не лечится... Однако, несмотря на обнадеживающее начало, сигналов Power-good на выходе PMH/RINKAN не появилось и система стартовать не смогла.

Начиная с T430/530 изменен способ коммуникации с EC, и записью в память до регистров PMH долезть нельзя в принципе. Весьма вероятно, что memtest может убивать таким образом ноутбуки начиная с серии T6x, и заканчивая серией T420/520 включительно. Багрепорт debian-мейнтейнерам пакета отписан, может быть с апстримами чего и найдут... Возможно, этому подвержены только определенные версии BIOS или прошивки EC.

На этом все — удачи!

И это… вы с тестами памяти давайте все-таки поосторожнее — оно вот ведь как бывает!


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Микроинтеракции в iOS. Лекция Яндекса

Несколько недель назад в офисе Яндекса прошло специальное мероприятие сообщества CocoaHeads — более масштабное, чем традиционные митапы. Разработчик Антон Сергеев выступил на этой встрече и рассказал о модели микроинтеракций, которой обычно пользуются UX-дизайнеры, а также о том, как применить заложенные ...

Пишем загрузчик ПЛИС в LabVIEW. Часть 2

Часть 1 Загрузка конфигурации в ПЛИС через USB или разбираем FTDI MPSSEПишем загрузчик ПЛИС в LabVIEW. В этот раз мы познакомимся с новыми приемами работы в LabVIEW, разберем особенности обработки ошибок и завершим проект: реализуем протокол загрузки файла конфигурации в ...