Есть небольшая ОС, двухуровневая организация страниц, разделение прав доступа по доменам не используются, переношу на процессор at91sam9260. Физическая память мапится в верхнюю часть виртуальной памяти со смещением 2Гб - по адресу 0xA0000000, io-адреса периферии ремапятся 1:1. Код инициализации mmu и кэшей

Код
        mov     r0, #4                  /* writethrough cache policy */
        mcr     p15, 7, r0, c15, c0, 0

        mov     r0, #0
        mcr     p15, 0, r0, c7, c10, 4  /* drain write buffer */
        mcr     p15, 0, r0, c8, c7, 0   /* flush I,D TLBs */
        ldr     r1, =BOOT_PGD_PHYS
        mcr     p15, 0, r1, c2, c0, 0   /* load page table pointer */
        mov     r0, #-1
        mcr     p15, 0, r0, c3, c0      /* load domain access register */
        mrc     p15, 0, r0, c1, c0, 0
        orr     r0, r0, #0x1000         /* I-cache enable */
        orr     r0, r0, #0x003d         /* Write buffer, mmu */
        mcr     p15, 0, r0, c1, c0, 0


Таблцы второго уровня fine page table - 1024 pte, страницы памяти tiny pages - 1024 байт. После включения MMU полет нормальный, ремап памяти проходит, но дело доходит до создания нового потока - копируются часть таблицы с системными данными, ремапится таблица векторов исключений в новую таблицу и в регистр ttb заносится адрес новой таблицы

Код
ENTRY(switch_ttb)
        mov     ip, #0
        mcr     p15, 0, ip, c7, c5, 0   /* flush I cache */
        mcr     p15, 0, ip, c7, c6, 0   /* flush D cache */
        mcr     p15, 0, ip, c7, c10, 4  /* drain the write buffer */
        mcr     p15, 0, r0, c2, c0, 0   /* set the new TTB */
        mcr     p15, 0, ip, c8, c7, 0   /* and flush the I+D tlbs */
        nop
        nop
        nop
        mov     pc, lr

Проблема в том что после переключения регистра ttb, таблицы страниц оказываются нарушенными, причем частично - код работает - то есть системные страницы на месте но например вектора исключений по 0 адресу недоступны так же и часть памяти которая до переключения была смапена и таблицы были в порядке. Что интересно - в эмуляторе qemu все работает замечательно... Если кто встречался с такой ситуацией - есть ли какие мысли, что я мог упустить или на что обратить внимание ?