Нельзя ли пояснить - Вы хотите сказать что в режиме когда mmu выключено доступ к кэшам есть но ничего кэшироваться не может?
--------------------------------------------------- Кстати ещё вопрос (вдогонку) - на freescale imx21 в доках написано что режим работы с памятью только little endian, хотя пишут что процессоры арм позволяют использовать big endian. Возникает вопрос - от чего (архитектурно) зависит возможность варьирования endianess при наличии этой возможности в процессоре. ---------------------------------------------------
> Нельзя ли пояснить - Вы хотите сказать что в режиме когда mmu выключено доступ к кэшам есть но ничего кэшироваться не может?
Да, доступ через специальные инструкции сопроцессора. Можно писать-читать-сбрасывать кеши, но включить их как кеши нельзя. А в чем проблема включить mmu?
По второму вопросу. Различные режимы обеспечиваются прослойкой на шине данных, которая так или иначе переворачивает байты. Соответственно или ее просто выкинули при синтезе (что весьма маловероятно), или просто недокументировали.
"процессоры арм" понятие очень размытое. Их много и они разные. Лучше использовать обозначение архитектуры ядра (характерный вид ARMv***) как описано в доке DDI100, ну или коммерческое название ядра(ARM7**, 9**, 11**).
Тогда возникает резонный вопрос - почему (с какой целью) сделано так что эта возможность отсутствует при выключенном mmu? И соотвественно чем определяется такая возможность - я имею ввиду что в отличие от случая с endianess здесь (наверно) определяется не архитекурой board'ы а архитектурой процессора - вроде armv4t. Я тут ещё прочитал что вроде как на sparc'ах при выключенном mmu I и D кэши работают аналогично но при этом отсутствуют тэги виртуальных адресов. (В спеках посмотрю чуть позже...)
По поводу ARM1136 (ARMv6 архитектура) - D cache должен быть отключен, когда отключен MMU, доступ данным noncacheable. I cache отключать не обязательно, доступ зависит от I бита в cp16 control register.
В iMX.21 reference manual указана поддержка только Little Endian.
> отличие от случая с endianess здесь (наверно) определяется не архитекурой board'ы а архитектурой процессора
endianess тоже определяется архитектурой процессора. Прослойка про которую я говорил находится на кристале.
Почему так работают кеши - не знаю. Вероятно просто их работа как-то завязана на MMU. Я не вижу проблем создать mapping 1:1 и включить MMU. Наверное потому что так можно сделать никто и не думал о кешах :)
Странное дело - посмотрел ARM DDI0198B (ARM926EJ-S) - написано что включить можно при выкл mmu, но похоже действительно - доступ к данным будет noncachable и nonbufferable. Кстати в главе про кэши написано что структура кэшей такова что позволяет избежать очистки при context switch - что то я не совсем понял каким это образом.