Overview#

This feature provides support for ARMv7 architecture processors. This revision of the architecture extends the ARMv6 architecture with:

QNX does not support Thumb or Jazelle (Java instruction set) so the core OS support requires only a few changes to the existing ARMv6 support implemented in libstartup.a and procnto-v6:

Board/BSP specific details for specific target boards using Cortex-A8 are outside the scope of this design document.

PR60971 is being used to track the code changes that are specific to ARMv7 and Cortex-A8 development work for 6.4.1

Design Review Status#

No general design review was performed for this work because:

Startup Support#

Generic ARMv7 Support#

The generic support for ARMv7 includes the following:

Note that there is one outstanding issue: the current cstart.S implementation uses a CP15 cache invalidate operation that is not implemented in ARMv7. That code is intended to flush instruction/data caches and TLBs before jumping to the kernel entry point.

The current workaround for this is to implement a custom cstart.S in the board startup directory until a cleaner approach can be implemented.

Cortex-A8 Support#

The Cortex-A8 support includes the following:

Kernel Support#

VFPv3/Neon Support#

The current kernel code implements context swithc support for the VFPv2 implementation. The VFPv3 architecture differs in a number of ways relevant to context switch code:

This requires the vfp_init() function to detect which VFP version is present an use the appropriate context switch routines.

Miscellaneous Support#



Athough non-ARM instruction sets are not supported by QNX, it is possible that user code could execute in Thumb, Thumb2 or ThumbEE due to buggy code that causes an interworking branch that switches instruction set.

Various areas of kernel code may need to check the user instruction set mode to prevent incorrect operation:

Data Abort Handler#

Undefined Instruction Handler#

Forced User Code Execution#

This currently occurs for the following cases: