Процессор всегда работает с включенным страничным преобразованием адреса. Поэтому, прежде чем обращаться к области памяти адресуемые через шины PLB и OPB (вся внешняя память и кэш) необходимо иметь дескрипторы описывающие эти области в слотах буфера трансляции адреса - MMU TLB. Там 64 слота. Для доступа к регистрам периферии адресуемым по шине DCR (c помощью команд mtdcr, mfdcr) дескрипторов в TLB не нужно. В случае отсутсвия записи в TLB для адреса по которому производится выборка генерируется исключение. Адреса обработчиков исключение задаются регистрами IVPR, IVOR0-IVOR15. IVPR - 16 старших бит адреса блока кода обработчиков, IVOR0-IVOR15 смешение каждого обработчика относительно IVPR.
После сброса процессор создает в теневом регистре TBL дескрипртр последних 4K адресного пространства и выполняет выборку инструкции из последнего двовойного слова по адресу 0xFFFFFFFC. Память отбражаемая в эти 4К определяется загрузочной конфигурацией. Она выставляется линиями UART0_DCD, UART0_DSR, UART0_CTS. Например, последние 4К 2Mb flash на nCS0.
Далее необходимо (примерно) - выполнить набор команд покрывающие Core Errata, - Отключить кэш - Явно загрузить в TBL дескриптор верхних 4К - Загрузить остальные дескрирторы в TLB - Выполнть синхронизацию, чтобы измениения в TLB вступили в силу (isync, rfi) - Инициализировать таблицу обработчиков исключений - Инициализировать периферию - И только протом исполнять applicatiоn код.
Теперь вкратце о том, как это реализовано в UBOOTе. -------------------------------------------------------- Точка входа находится в -> /cpu/ppc4xx/start.S Дескрипторы TLB в -> /board/amcc/board_name/init.S обработчики исключений -> /cpu/ppc4xx/traps.c инициализация стандартной перефирии -> /cpu/ppc4xx/peripheral_name.c инициализация нестандартной перефирии -> /board/amcc/board_name/board_name.c последовательность инициализации платформы -> /lib_ppc/board.c скрипт линковки -> /board/amcc/board_name/u-boot.lds
Из/lib_ppc/board.c производится вызов main_loop.
Прежде чем начинается исполнение c-кода, устанавливается стек на D-Cache (32K).
Код для PPC460EX (для платы canyon) лежит в /board/amcc/canyonlands/
|