Первое, что делает ЦП Haswell+ при включении питания (после встроенного самотестирования BIST), — это выполнение микропрограммы, являющейся частью технология Intel TXT для получения FIT на 4GiB-40h и выполняет BIOS ACM (модуль кода с проверкой подлинности) и, в конечном итоге, продолжает измеренная загрузка или возврат к устаревшему вектору сброса на 4 ГБ — 10 часов.
В любом случае ЦП должен извлекать инструкции из окна памяти размером в несколько МиБ чуть меньше 4ГиБ.
ЦП не имеет интерфейса SPI, запросы к этому окну всегда перенаправляются на интерфейс DMI из соображений безопасности.
> Вы можете найти следующую карту в главе 2.6 Техническое описание 8-9 поколения Vol. 2 (правда даже в предыдущих поколениях, AFAIK):
![Карта памяти](https://i.stack.imgur.com/1NEKv.png)
что актуально в связи с этим абзацем:
Из соображений безопасности процессор положительно декодирует этот диапазон [High BIOS] в DMI. Это положительное декодирование гарантирует, что любые перекрывающиеся диапазоны будут проигнорированы. Это гарантирует, что вектор загрузки и BIOS будут выполняться вне PCH.
Таким образом, ЦП загружается с интерфейса DMI, и, следовательно, PCH (концентратор контроллера платформы) обрабатывает запросы.
Обратите внимание, что даже в старых системах, где это окно размером почти 4 ГиБ было субтрактивно декодировано в Интерфейс DMI (т. е. отправка на интерфейс DMI только в том случае, если никакое другое устройство не заявило об этом), загрузка почти всегда происходила с самого интерфейса DMI.
Новое поведение с положительным декодированием является мерой защиты от атак с загрузкой.
Если вы посмотрите на техническое описание относительно современного PCH, т.е. pch-datasheet-vol-2.pdf" rel="noreferrer">series 200 видно, что он поддерживает флэш-ПЗУ либо за мостом LPC, либо за интерфейсами SPI.
Мы ограничимся последним.
В этом чипсете мостом SPI является устройство PCI 31, функция 15.
В его конфигурационном пространстве PCI находятся стандартные регистры и:
- BAR (регистр базового адреса) для отображения окна регистра MMIO размером 4 КиБ для управления самим интерфейсом SPI.
- Регистр BIOS Decode Enable, который включает или отключает восстановление доступа к памяти в определенных окнах.
- Управляющий регистр для включения различных функций безопасности (включая загрузку с интерфейса SPI или LPC).
Остановимся на втором пункте:
![«Регистр](https://i.stack.imgur.com/sT5NK.png)
Следует отметить две вещи: во-первых, этот регистр разрешает или запрещает отправку обращений к памяти от ЦП в области 4 МиБ ниже 4 ГиБ и других в SPI.
Во-вторых, значение по умолчанию — 0ffcfh, это означает, что по умолчанию все окна сопоставляются с SPI.
Регистр управления BIOS также выбирает SPI в качестве загрузочного интерфейса по умолчанию, но это также можно настроить с помощью контактов softstrap/bootstrap. , IIRC.
И последнее, но не менее важное: когда PCH видит доступ к адресу, подобному 4GiB-10h, он не может отправить его во флэш-память, поскольку он находится за пределами досягаемости самой флэш-памяти.
Сначала он должен его декодировать, вычитание смещения. Однако это смещение зависит от размера Flash ROM.
До появления PCH (думаю, в наборе микросхем ICH8 и в некоторых не слишком новых наборах микросхем Atom) флэш-ПЗУ использовалось без дескрипторов.
Набор микросхем просто сопоставлял ПЗУ из 4GiB до 4GiB-16MiB с псевдонимом, что означает, что адрес 4GiB - X будет сопоставлен с Размером флэш-памяти - (X % размера флэш-памяти).
Эффект заключался в том, что, например, флэш-память объемом 2 МиБ отображалась 8 раз в окнах размером 16 МиБ ниже предела в 4 ГиБ.
В этих чипсетах были контакты начальной загрузки для настройки размера флэш-памяти.
Сегодняшние флэш-ПЗУ для PCH использовать дескрипторы, где флэш-память разделена на регионы (BIOS, ME, GbE и т. д.).
В адресном пространстве ЦП отображается только регион BIOS. Существует система дескрипторов безопасности, основанная на идентификаторе отправителя запроса (данном его PCI-идентификацией).
Введение в эту тему см. на странице это или лучше это для более полного описания (немного устаревшего, но все еще актуального).
Регионы важны здесь, потому что они перечислены в дескрипторе флэш-памяти со своим смещением и размером, поэтому PCH может знать, как преобразовать адреса ЦП в линейные адреса флэш-памяти.
Наконец, регистры MMIO интерфейса SPI обеспечивают непосредственный доступ к флэш-ПЗУ. Можно синтезировать команды для отправки по шине SPI, что позволяет перепрограммировать флэш-ПЗУ (например).
На них по-прежнему распространяются различные контрмеры безопасности, которые должны быть перечислены в техническом описании IIRC.
person
Margaret Bloom
schedule
13.02.2020