Главная » Электронная техническая библиотека » Проблема «Memory was installed twice»

Проблема «Memory was installed twice»

Как известно, текущая версия документа от AMI, описывающего POST-коды и звуковые сигналы Aptio, — называется Document Revision 2.03. Но еще Document Revision 2.01 содержит описание вывода на системный динамик сообщения об ошибке, которое вынесено в заголовок нашей статьи. Полностью комментарий выглядит так: «Memory was installed twice (InstallPeiMemory routine in PEI Core called twice)». Казалось бы — в новой ревизии этого нет и можно двигаться дальше? Давайте проанализируем ситуацию, тем более, что она беспокоит не только нас. В частности, на cyberforum также поднята эта проблема, и до сих пор она не имеет решения.

Комментарий American Megatrends к звуковым сигналам UEFI BIOS

О чем умалчивает UEFI-спецификация?

Согласно UEFI Platform Initialization Specification, подпрограмма InstallPeiMemory, выполняет диспетчерские функции — используя параметры MemoryBegin, MemoryLength, регистрирует в системной таблице PEI Foundation обнаруженный диапазон оперативной памяти: его базовый адрес и длину.

Исходный код подпрограммы InstallPeiMemory в AMI Aptio v5.0

Фактически, это протоколирование результатов работы ранее запущенных процедур, выполняющих детектирование ОЗУ. Как следует из документа, само детектирование ОЗУ, не входит в обязанности данной процедуры, она только сохраняет полученные результаты. Ошибка, связанная с попыткой многократной регистрации диапазона оперативной памяти также описана в спецификации. Там она имеет следующий вид.

Описание ошибки, связанной с попыткой многократной регистрации диапазона оперативной памяти

Вопрос дальнейшего толкования данной ошибки, возникающей при инициализации оперативной памяти, требует анализа исходного кода проекта Aptio, являющегося базисом для современной версии AMIBIOS.

В закромах American Megatrends

Если обратится к первоисточникам от American Megatrends, то характерным подходом к инициализации оперативной памяти может служить следующий фрагмент кода:

//*** AMI PORTING BEGIN ***//
if (PrivateData->PeiMemoryInstalled) {
//This function should be called once. Report error if this is the second call
PEI_ERROR_CODE(PeiServices, PEI_MEMORY_INSTALLED_TWICE, EFI_ERROR_MINOR);
}else {
//Debug message
PEI_TRACE((TRACE_PEICORE, PeiServices, "Memory Installed: Address=%lX;
Length=%lXn",MemoryBegin,MemoryLength));
}
//*** AMI PORTING END *****//

Здесь показательно, что процедура, регистрирующая диапазон, в котором подтверждено наличие RAM, и контролирующая ошибку, связанную с повторной регистрацией данного диапазона, откомментирована фразой «Report error if this is the second call».

Рабочие гипотезы

Поскольку данная ошибка фигурирует не только в исходниках Aptio UEFI, но и регламентируется Platform Initialization Specification, то, скорее всего, программисты American Megatrends при составлении таблицы ошибок просто скопировали соответствующую информацию из спецификации. Совсем необязательно, что данная ошибка имеет место быть в каких бы то ни было конкретных продуктах.

Системная плата с AMI Aptio на борту

Однако, наивероятнейший сценарий, при котором она все же может возникать, связан с нарушением координации BootStrap-процессора и процессоров приложений (AP): не стоит считать разработчиков настолько безалаберными, чтобы они просто продублировали такое действие в однопотоковом коде.

Предположительно, повторный вызов процедуры InstallPeiMemory, запуск которой необходимо выполнить однократно, происходит из-за ошибок координации параллельной работы BSP и AP. В результате чего, инициализация выполняется многократно и приводит к ошибке, о которой система информирует пользователя выводом на системный динамик звукового сообщения.

Отметим, что сделать инициализационную процедуру полностью однопотоковой, выполняемой только процессором BSP, нельзя, так как одно из необходимых действий — инициализация регистров MSR, а MSR одного ядра недоступны для другого ядра, в отличие от конфигурационных регистров и Memory Mapped I/O.

Практические выводы

В создавшейся ситуации полезным может оказаться тестовый запуск платформы, у которой заполнены только DIMM-сокеты, подключенные к гнезду стартового процессора. Для мобильных платформ, сигнализирующих о том, что InstallPeiMemory routine in PEI Core called twice, максимум внимания стоит уделить исправности центрального процессора и качеству его монтажа на материнской плате. Вместе с тем, данный вид ошибки, если его описание трактовать строго в соответствии с официальной документацией, в большей степени характерен для процесса отладки UEFI BIOS, а не как реакция на аппаратный сбой.


21.07.2017
Яндекс.Метрика Рейтинг@Mail.ru