From mboxrd@z Thu Jan 1 00:00:00 1970 From: Huan Wang Date: Mon, 29 Aug 2016 09:29:48 +0000 Subject: [U-Boot] [PATCH] armv8: Remove the codes about switching to EL1 before jumping to kernel In-Reply-To: References: <1467872700-45942-1-git-send-email-b18965@freescale.com> <577E4092.8070007@suse.de> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de > On 18.07.16 05:24, Huan Wang wrote: > > Hi, Alex, > > > > > > > > As there is strong objection to remove the codes about > > switching to EL1, I think we have to remain it, do you agree? > > I agree, yes. > > > If it is remained, I think your suggestion about > > **always** jumping to ep for both switching to AArch64 and AArch32 > > modes will make the code hard to realize and very complicated. So I > > prefer to keep the process in v4 patches. What is your opinion? > > I think we should still convert it to a function call based approach. > You can either just convert the current flow to functions: > > static void enter_in_el1(...) > { > call_in_el1(payload_pc, payload_bits, ...); } > > #ifdef ENTER_PAYLOAD_IN_EL1 > call_in_el2(enter_in_el1, 64bit, ...); > #else > call_in_el2(payload_pc, payload_bits, ...); #endif > > Or you could add a check in the EL1 caller if you are in EL3 that you > want to go to EL2 first: > > long call_in_el1(...) > { > if (current_el() == 3) > return call_in_el2(call_in_el1, ...); > > asm_call_in_el1(...); > } > > [Alison Wang] Yes, it can work for primary core and secondary cores for LayerScape. For other ARMv8 platforms, such as arch/arm/mach-exynos/soc.c, void lowlevel_init(void) { armv8_switch_to_el2(); armv8_switch_to_el1(); } Is there any appropriate ep we can transfer for these functions? Even for the common arch/arm/cpu/armv8/start.S, bl armv8_switch_to_el2 #ifdef CONFIG_ARMV8_SWITCH_TO_EL1 bl armv8_switch_to_el1 #endif The ep is hard to define. "msr elr_el3, lr" really make sense. Best Regards, Alison Wang