Hi Heinrich On Fri, 11 Apr 2025 at 15:05, Heinrich Schuchardt <[email protected]> wrote: > > On 4/11/25 12:00, Ilias Apalodimas wrote: > > 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. > > The function current_el() in arch/arm/include/asm/system.h is already > used in switch_to_non_secure_mode() when determining if U-Boot should > switch the exception state. Including the same function both in the code > under test and in the test should be avoided.
Fair enough > > https://developer.arm.com/documentation/ddi0597/2025-03/Base-Instructions/MRS--Move-Special-register-to-general-purpose-register- > does not describe any side effects when reading the CurrentEL flags? Thanks for the link. It seems there isn't. It's only a read and should not affect condition flags at all. Reviewed-by: Ilias Apalodimas <[email protected]> > > Best regards > > Heinrich > > > > > > >> +/** > >> + * 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 >

