Coreboot поднял DRAM Bay Trail, поселив ранний код в кэше CPU
До первого обращения к DRAM прошивка почти лишена рабочего пространства: ей нужны стек, временные таблицы и данные о модулях памяти, однако сама память ещё не отвечает. В классической цепочке загрузки этот узел часто отдан закрытому бинарному блоку производителя SoC. Для Intel Bay Trail Мате Кукри показал прототип native raminit для coreboot, который проходит эту фазу собственным открытым кодом.
Кэш становится временной оперативной памятью
Вместо полноценной оперативной памяти ранний код использует CPU cache как маленькое временное хранилище. Этого достаточно, чтобы пережить момент, в котором нужно определить параметры установленных чипов, свести характеристики каналов, запрограммировать memory controller и DDR PHY, а затем выполнить специфичные для SoC и предусмотренные JEDEC процедуры training. После успешного обучения линии данных и стробов DRAM становится обычной рабочей памятью, и загрузка продолжается.
Самая красивая часть истории начинается ещё до написания замены blob. Закрытый код не обязательно разбирать до последней ветки дизассемблера. Его можно заставить исполниться в контролируемой среде, записать аппаратно наблюдаемые последствия и искать за ними протокол: какие регистры меняются, в каком порядке, какие обращения к MMIO разделяют этапы инициализации, где стартует training.
Снять осциллограмму с закрытого blob
SerialICE здесь служит окном в раннее исполнение firmware, а Unicorn Engine позволяет быстро собирать harnesses вокруг фрагментов кода и проверять гипотезы без бесконечных перезапусков реальной платы. Получается подход из мира измерительного железа, перенесённый в firmware: вместо догадки о внутренностях чёрного ящика сначала снимается его временная диаграмма на интерфейсе с железом.
Из этой диаграммы всё ещё нельзя механически получить универсальный драйвер DDR. Training зависит от топологии платы, разводки, типа микросхем и особенностей контроллера; часть действий blob может быть защитной, диагностической либо рассчитанной на другие варианты платформы. Но последовательность «наблюдать исполнение, выделить обязательные операции, собрать минимальную открытую реализацию» превращает закрытую загрузочную магию в инженерный объект с проверяемыми шагами.
Из трассы — в открытый протокол
Для Bay Trail такая работа особенно уместна: это давно не новая платформа, зато у неё есть реальные платы и большой запас накопленного firmware-долга. Native raminit открывает для coreboot и более странные режимы. Прошивка получает возможность сознательно не поднимать DRAM и остаться в кэше CPU, если задача ранней диагностики, восстановления или исследования требует именно такого запуска.
Прототип, а не готовая замена всей firmware
Пока это следует называть прототипом автора доклада, способным загрузиться на нескольких реальных платах. Публичных патчей, репозитория, логов training или свидетельств включения реализации в upstream coreboot в доступных материалах нет. Результат не отменяет остальные закрытые компоненты в firmware-цепочке Bay Trail, но убирает один из наиболее неприятных: тот, без которого процессор прежде не мог получить собственную RAM.