The memory copy is not inline asm (will lead to subtle corruption), the memory copy and the stack switching are not in one inline asm block (gcc is free to insert arbitrary code in between), and the stack is switched in the middle of a function (gcc may use some non-clobbered regs to access the old stack, or simply die).
I fixed that with recent patch. Is it what you checked?
Myles, please check
1) If it does work without my patch ;) 2) Add the
static void set_init_ram_access_uc(void) { set_var_mtrr(0, 0x00000000, CONFIG_RAMTOP, MTRR_TYPE_UNCACHED); }
And call the set_init_ram_access_uc instead of set_init_ram_access and call again set_init_ram_access after the copy.
The CAR code as it is now is doing at least evictions to L2 maybe this will help.
Rudolf