Особенности AMI UEFI firmware

    В одной из предыдущих публикаций[1] мы затронули такой, казалось бы, очевидный вопрос: «Как убедиться в том, что флешка работает в USB 3.0?» Голоса в обсуждении сначала ехидно отметили, что той статье не хватает тэга «садомазо», а затем как бы испугавшись собственного эго, вычеркнули эту мысль из нашего сознания.

    Но эта мысль уже ранила неокрепшие умы экспериментаторов. Появилось желание проверить доступность USB 3.0 для любого подключенного устройства еще на этапе старта (например, в UEFI Shell) до запуска операционной системы. Для начала была написана небольшая утилита CheckUSB (которая, правда, пока рассчитана только на работу с некоторыми реализациями 8-й версии чипсетов Intel).

    image
    Рис 1. Эксперименты с утилитой CheckUSB на ноутбуке ASUS T300LA

    В подходе к мобильной платформе оказалось, что в ряде случаев, при перезагрузке, UEFI firmware ноутбука инициализирует USB-подсистему не полностью, оставляя часть работы операционной системе.

    Опция xHCI Pre-Boot Mode в установках UEFI firmware
    Рис 2. Опция xHCI Pre-Boot Mode в установках UEFI firmware ноутбуке ASUS T300LA

    Например, если в CMOS Setup исходное состояние опции xHCI Pre-Boot Mode установлено Disable, заменяем на Smart Auto, и не загружая операционную систему запускаем утилиту CheckUSB, то видим, что список устройств, подключенных к контроллеру xHCI пуст. Это означает, что для обслуживания подключенных USB-устройств используется контроллер EHCI.
    USB Routing to EHCI
    Рис 3. Подключение USB-устройств к Enhanced Host Controller Interface на ноутбуке ASUS N750JK до запуска Windows

    Итак, если сразу после включения загрузиться в UEFI, не запуская Windows, то получаем:
    • USB 2.0 Port Routing = 0, 14 соединений USB2 подключены к EHCI
    • USB 3.0 Port SuperSpeed Enable = 0, 4 соединения USB3 отключены

    При этом значения масок показывают, что операционная система имеет право переключить соединения на обслуживание xHCI:
    • USB 2.0 Port Routing Mask = 00003FFFh
    • USB 3.0 Port Routing Mask = 0000000Fh

    Список устройств пуст, поскольку мы отображаем только регистры xHCI, а устройства переведены на обслуживание EHCI с использованием RMH. Описание битовых полей доступно в статье «Диагностическая утилита CheckUSB»[2], [3].

    Если перезагрузку повторить после старта операционной системы, все устройства оказываются корректно подключенными к контроллеру xHCI.
    USB Routing to xHCI
    Рис 4. Подключение USB-устройств к eXtensible Host Controller Interface на ноутбуке ASUS N750JK при загрузке после Windows

    Логика управления доступом к портам «помнит» состояние, имевшее место до перезагрузки:
    • USB 2.0 Port Routing = 03FFFh, 14 соединений USB2 подключены к USB2-подсистеме xHCI
    • USB 3.0 Port SuperSpeed Enable = 0Fh, 4 соединения USB3 могут использовать режим SuperSpeed
    .
    Напомним, что количество внешних USB3-портов на исследуемой платформе ASUS N750JK равно 4.

    Ссылки


    1. Как убедиться, что флешка работает в USB 3.0?
    2. Диагностическая утилита CheckUSB
    3. Как проверить режим USB3?
    Метки:
    • +10
    • 16,5k
    • 1
    Поделиться публикацией
    Комментарии 1
    • +2
      Молодцы, что опубликовали исходник диагностической утилиты (еще и неплохо откомментированный).

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.