ARMv8 backwards compatibility with ARMv7

Hi there,

I have been going through a lot of ARMv8 documents, and I have a very basic question:

-Can I take a Linux Kernel, compiled for a ARMv7 device, and run it on an ARMv8 device in Aarch32 execution mode?

( Lets assume that the two SOCs are identical apart from the CPU cores )

Thanks

-fali

  • The AArch32 mode is an optional part of the ARMv8 architecture. All of the current Cortex ARMv8 cores implement it, but it is possible that an ARMv8 core won't necessarily implement it.

    Where present the A32 instruction set is backwards compatible with ARMv7-A, so "should just work", although there are usually a few minor CPU-specific integration changes in the kernel side (things like the implementation-defined CP15 settings which are not entirely defined by the architecture). That said, even though the ISA (A32) is a superset of ARMv7-A ARM ISA, there are some architectural (AArch32) behaviours which are slightly different or new in ARMv8, so I suspect even if you only want a 32-bit kernel you will want to use some of the new ARMv8 features to get the most out of it.

    This might be useful:

    https://events.linuxfoundation.org/images/stories/pdf/lcna_co2012_marinas.pdf

    Pete

  • In the same context, Will there be any performance improvement between the two?

    ARMv8 running Linux Kernel compiled for ARMv7

    ARMv8 running Linux Kernel compiled for ARMv8 in A32 compatibility mode.

    Would like to know the key differences.