Hello all, I'm porting linux for a board with a R4KECr2. So far I was using CONFIG_CPU_MIPS32_R1 and the kernel (2.6.14) was running well. But I'm unable to get it working with CONFIG_CPU_MIPS32_R2, it freezes somewhere in trap_init, more exactly in r4k_flush_icache_range(). Here is a snippet from the generated assembly code: 00002624 <r4k_flush_icache_range>: 2624: 27bdffd0 addiu sp,sp,-48 2628: 3c020000 lui v0,0x0 262c: afb30024 sw s3,36(sp) 2630: afb20020 sw s2,32(sp) 2634: afbf0028 sw ra,40(sp) 2638: afb1001c sw s1,28(sp) 263c: afb00018 sw s0,24(sp) [...] 26a0: bc900000 cache 0x10,0(a0) 26a4: 1464fffd bne v1,a0,269c <r4k_flush_icache_range+0x78> 26a8: 3c020000 lui v0,0x0 26ac: 2442277c addiu v0,v0,10108 <---------- 26b0: 00400408 jr.hb v0 26b4: 00000000 nop [...] 272c: 8c43000c lw v1,12(v0) 2730: 0060f809 jalr v1 2734: 00000000 nop 2738: 3c020000 lui v0,0x0 273c: 2442277c addiu v0,v0,10108 <---------- 2740: 00400408 jr.hb v0 2744: 00000000 nop 2748: 8fbf0028 lw ra,40(sp) 274c: 8fb30024 lw s3,36(sp) 2750: 8fb20020 lw s2,32(sp) 2754: 8fb1001c lw s1,28(sp) 2758: 8fb00018 lw s0,24(sp) 275c: 03e00008 jr ra 2760: 27bd0030 addiu sp,sp,48 2764: 3c020000 lui v0,0x0 2768: 8c430018 lw v1,24(v0) 276c: 0060f809 jalr v1 2770: 00000000 nop 2774: 0800099c j 2670 <r4k_flush_icache_range+0x4c> 2778: 3c030000 lui v1,0x0 0000277c <r4k_dma_cache_inv>: [...] At offset 0x26ac and 0x273c, we can see that instruction_hazard() got duplicated due to inlining, and that the jr.hb is going to send us to 10108 (0x277C), outside the function... The only way I managed to get a good value in v0 was by using -O0 and making r4k_flush_icache_range return int. Now I'm really not familiar with gcc inline assembly so I don't know if this is a compiler bug or if something is missing in instruction_hazard(). # mipsel-linux-gcc -v Using built-in specs. Target: mipsel-linux-uclibc Configured with: /home/work/buildroot/toolchain_build_mipsel/gcc-4.0.2/configure --prefix=/opt/toolchains/mipsel-uclibc-0.9.28-gcc-4.0.2 --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=mipsel-linux-uclibc --enable-languages=c,c++ --enable-shared --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-nls --enable-threads --enable-multilib Thread model: posix gcc version 4.0.2 # Thanks, -- Maxime