Операция записи регистра блокировки ARM приводит к сбою устройства

Я провожу эксперименты с устройством ARM Cortex A-8 под управлением ядра Linux.

Я могу без проблем получить доступ и прочитать значение регистра блокировки кэша L2:

asm volatile ("mrc p15, 1, %0, c9, c0, 0" : "=r" (i));

При попытке записать значение обратно устройство сразу вылетает:

asm летучий ("mcr p15, 1, %0, c9, c0, 0" : : "r" (i));

Код работает как модуль ядра, поэтому проблем с правами доступа нет.

Интересно, не пропустил ли я что-нибудь особенное перед записью этого значения регистра?


person Cinar    schedule 01.03.2011    source источник


Ответы (1)


Есть длинный контрольный список, с которым вам нужно быть осторожным, если вы собираетесь играть с блокировкой кеша. В информационном центре ARM есть несколько советов: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344i/Chdeghcb.html

В частности, убедитесь, что прерывания отключены, а соответствующие инструкции/данные недействительны. Также убедитесь, что доступ для чтения/записи включен, чего может не быть, даже если вы находитесь в режиме ядра. Вы должны убедиться, что ваш код не пересекает страницы или строки кэша в критических точках. Это действительно сложно сделать правильно. Вы не можете просто заблокировать кэш и ожидать, что все будет работать, и вы не можете просто сделать это с помощью встроенного ASM в C.

В худшем случае вы в конечном итоге заблокируете внутреннюю конечную машину контроллера кэша L2, заблокируете неправильные данные, предотвратите полное кэширование данных и приведете к прерыванию всего или рассинхронизации тегов. Это объяснит аварию.

Кроме того, это просто эксперимент или вы пытаетесь повысить производительность? Это полезно для того, чтобы избежать прикосновения к DRAM/шине для хорошо продуманных кодовых последовательностей, например, если вы хотите отключить его (глубокий сон), но обычно это не дает выигрыша в производительности.

person John Ripley    schedule 01.03.2011
comment
Также узнайте ревизию ядра в вашем аппарате. Проверьте веб-сайт ARM на наличие ошибок в этой версии Cortex A-8. Есть удивительно большие опечатки, в основном не видимые пользователю, но эй, вы играете с системой :) - person John Ripley; 01.03.2011