oh, well. I guess, the OP was asking something what Brendan has answered to. Not about this ARM mess.
Aarch32 and Aarch64 are "execution states" of the processor. Both are 32 bit wide instructions (except thumb/thumb2 for aarch32). A64 and A32 are ISAs. Basically, A32 is the old ARMv7 compatible ISA. Almost the same, with some additions and redefinitions. But highly compatible. A64 is more MIPS-ish. And the most significant change in the execution state (Aarch64), as for me, - the amount of general purpose registers not just doubled, but in the absolute number, it went from 16 to 32! It's huge. MIPS and PPC both had 32 registers even being 32 bit yet, x64 doubled as well, but in the absolute number, it added only 8 registers, and here - 16!
Every EL can be in any of these two execution states (but if I understood right - only in one of them, so, for example EL3 could be implemented either in the aarch32 or aarch64 execution state on a machine, but not in both). Still, execution states of different ELs are not totally independent and switching between ELs is a little bit tricky.
Namely, EL switching happens only on Reset or taking an exception/returning from it.
In the latter cases, if the transition is from ELx->ELy where y > x, then the execution state can only either:
remain the same or be aarch32->aarch64.
On return - the same, but in the reverse order.
If the exception doesn't change EL, then the execution state cannot change too.
And finally, exception cannot be taken into the lower EL.
ARMv8 Exception Levels are loosely an ARMv7 Privilege Levels evolvement. They are rather terminological redefinitions of the latter. In the attempt of making it clearer. yup.
But in fact, if you are OK with 5842 pages of ARMv8 Architecture Reference Manual (ARM), it's comprehensible. with some effort. Section G4.1 "Execution privilege, Exception levels, and AArch32 Privilege levels", p. 4042, is a good point to try to get the idea of what they thought about PL/EL connection.
ELs are not exactly about Secure/Non-Secure state. Yes, EL2 could be only Nonsecure and EL3 is always Secure no matter what. But EL1 and EL0 could be both. Exception levels are not about "hypervisors" either, they really are mostly oriented at the execution state definition for the environment where exceptions are taken into. Some exceptions are architecturally assigned to be taken into predefined ELs, some are configured. EL1 is for OSes and not just "guest" OSes. EL0 is user mode. Basically every EL except EL0 is privileged.
EL3 controls everything. On ARMv7, it was Monitor Mode. Secure world has even a separate system address space. I cannot say about it much yet. Entering it is through a special software interrupt gateway instruction - SMC. On reset, CPU starts into EL3. How does this God Mode distinguish between Secure and Nonsecure system spaces - forgot completely.
EL2 is virtualization bullshit. just a noisy overhead. As EL3, does have its own,
single virtual address space (for what?). Adds yet another stage of memory mapping for EL1 (turning it into VA<->IPA<->PA chain instead of normal VA<->PA and thus - introducing "stage 2 MMU" *rolleyes). Basically if you are not excited about HV (like me) - forget about it ASAP. Yes, it's Hypervisor Mode of ARMv7 and it's for hypervisors for intercepting real hardware interrupts etc. The only interesting thing for me is how to disable that thing. I found out that on a board I try to work with, uboot transfers control to my code in EL2. So, given all the clumsiness of EL switching and the fact, we cannot really do multiple VA spaces over here, we need to jump into a real OS level, EL1.
EL1, finally a normal OS level. Can be either Secure or Non Secure. Here, you have a real separation for process(or) address spaces - processes. You configure some pages (blocks) to be either EL0 accessible or not - nonprivileged access. Also, this is what we think of when thinking about memory "protection" between different processes. It is here. And it's almost the same as with x86.
From what I am seeing here, Exception Levels were added in ARMv8 as a way of providing secure modes for Hypervisors
No. Ironically, "hypervisors" are always Nonsecure on ARM. It's 2 totally different stuff - HV and Secure/Nonsecure split. The former, well, is HV bullshit. And the latter is making 1 machine to look like 2, but with really 2 independent HW resources. One is for "teh security". Different system address space, different OS, different peripheral set.
Monitor/EL3 thing is a way more interesting than HV. It challenges you to think out new things for the architecture it introduces really interesting things. But it's not always accessible.
or at least, of better managing which mode the exception handling was in when an exception occurs. For this reason, it sounds to me like EL only applies to PI 3 and later.
yes, exactly for this. It applies for any ARMv8 CPU SoC. Not necessarily 64 bit. after all, there are such things as Cortex-A35, a 32 bit only ARMv8 CPU IP. Unfortunately yet not found on the SBC range.
EL3 - Secure Monitor, only available in Aarch64 CPUs.
Wrong. can be available in both states. It's up to the implementer what to choose. And be sure they don't choose to be straightforward with this respect.
they, being lazy, stay with the 32 bit one, introducing a great deal of mess and confusing for everybody so excited to run 64 bit on 64 bit machines (with me includingly).
This is a sounding example, read the comment.