Резервирую я вот таким способом через device tree.
Если указываю размер 0x100000 то резервируется нормально и всё работает пучком. Попробовали мы как-то зарезервировать 0x1000 или 0x10000. И вот тут начинается интересное. Ядро резервирует запрошенную память (во всех случаях адрес был 0x10000000) и висит в функции void __init map_lowmem(void) (arch/arm/mm/mmu.c).
Никто не в курсе, с чем связана невозможность резервирования памяти небольшого размера? Вроде бы и 0x1000 и 0x10000 больше PAGE_SIZE, с этим проблем быть не должно..