Hi Heinrich, [...]
> + > +/** > + * current_exception_level() > + * > + * Return: current exception level, 0 - 3 > + */ > +static unsigned int current_exception_level(void) > +{ > + unsigned long el; > + > + asm volatile ( > + "MRS %0, CurrentEL" > + : "=r" (el) : : ); > + > + return (el >> 2) & 0x3; > +} > + We have an identical function in arch/arm/include/asm/system.h, can we use that? It's static inline so you may be able to just include the header file directly. Also, that function adds a 'cc,' which tells the compiler that the instruction might change the condition code flags. I don't remember if this is needed, but it doesn't hurt to have it. > +/** > + * execute() - execute test > + * > + * Check that the exception level is not EL3. > + */ > +static int execute(void) > +{ > + unsigned int el = current_exception_level(); > + > + efi_st_printf("Exception level EL%u\n", el); > + if (el != 1 && el != 2) { > + efi_st_error("EL1 or EL2 expected"); > + return EFI_ST_FAILURE; > + } > + > + return EFI_ST_SUCCESS; > +} > + > +EFI_UNIT_TEST(el) = { > + .name = "exception level", > + .phase = EFI_EXECUTE_BEFORE_BOOTTIME_EXIT, > + .execute = execute, > +}; > -- > 2.48.1 > Other than that LGTM /Ilias