I'm getting an undefined instruction exception when I call enable_neon_fpu() (from the SDK 1.1: file sdk/core/src/CortexA9.s). The exception is triggered when the processor tries to execute the 3rd instruction in the following piece of code:
/* set NSACR, both Secure and Non-secure access are allowed to NEON */
MRC p15, 0, r0, c1, c1, 2
ORR r0, r0, #(0x3<<10) @ enable fpu/neon
MCR p15, 0, r0, c1, c1, 2
/* Set the CPACR for access to CP10 and CP11*/
LDR r0, =0xF00000
MCR p15, 0, r0, c1, c0, 2
/* Set the FPEXC EN bit to enable the FPU */
MOV r3, #0x40000000
@VMSR FPEXC, r3
MCR p10, 7, r3, c8, c0, 0
The application is a bare-metal executable which first calls platform_init() (from the SDK 1.1: file apps/common/platform_init.c). enable_neon_fpu() is the first SDK routine called from platform_init(). The executable is loaded in the processor - an iMX6Q - using a Lauterbach USB probe and the TR32 debugger. The same binary works if I load it using an OCD compatible probe (Olimex). So I'd tend to believe that there may be an initialisation problem in the case of the Lauterbach probe. I've checked the CPSR when the exception triggers: its value is 0x600001D3 which means that the processor is in the supervisor mode.
Any idea of what could cause this exception?