public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Andre Przywara <andre.przywara@arm.com>
To: Tom Rini <trini@konsulko.com>, Michal Simek <monstr@monstr.eu>
Cc: Peter Hoyes <peter.hoyes@arm.com>,
	u-boot@lists.denx.de, patrick.delaunay@foss.st.com,
	sjg@chromium.org, diego.sueiro@arm.com,
	Michael Walle <michael@walle.cc>,
	Priyanka Singh <priyanka.singh@nxp.com>
Subject: Re: [PATCH v2 5/6] arm: Use armv8_switch_to_el1 env to switch to EL1
Date: Thu, 26 Aug 2021 12:36:31 +0100	[thread overview]
Message-ID: <e692566e-e6fa-26e4-5f6f-a19514820f93@arm.com> (raw)
In-Reply-To: <20210820170554.GF858@bill-the-cat>

On 8/20/21 6:05 PM, Tom Rini wrote:
> On Fri, Aug 20, 2021 at 05:57:51PM +0100, Andre Przywara wrote:
>> On 8/19/21 4:53 PM, Peter Hoyes wrote:

Hi,

>>> From: Peter Hoyes <Peter.Hoyes@arm.com>
>>>
>>> Use the environment variable armv8_switch_to_el1 to determine whether
>>> to switch to EL1 at runtime. This is an alternative to the
>>> CONFIG_ARMV8_SWITCH_TO_EL1 compile-time option.
>>
>> This might be useful outside of the v8-R64 FVP. I cannot find
>> CONFIG_ARMV8_SWITCH_TO_EL1 being set anywhere, which makes me wonder how
>> this is used? Are there certain custom builds which define this somehow?
> 
> Adding Michal ...

Michal, I see that Xilinx Versal and ZynqMP have a commented "define 
CONFIG_ARMV8_SWITCH_TO_EL1" in their include headers. Can you say what 
is the use case here?
 From an architectural point of view it sounds useful to have this 
feature in general and the dynamic switch-ability on top of that for all 
ARM64 platforms, but I would first like to understand how this is used 
with those Xilink platforms.

> asking for a Kconfig migration too :)

That sounds reasonable. I will have a stab once we agree how to address 
this feature in general.

Cheers,
Andre

> 
>>
>> In any case forcing "kernel" entry in either EL1 or EL2, and deciding this
>> at runtime sounds useful for certain scenarios in general, and be it for
>> debugging and testing. So shall we get rid of this compile time option at
>> all, or shall this be retained to avoid extra code?
>>
>>> The environment variable will be ineffective if the ARMV8_MULTIENTRY
>>> config is used.
>>>
>>> This is required by the Armv8r64 architecture, which must be able to
>>> boot at S-EL1 for Linux but may need to boot at other ELs for other
>>> systems.
>>>
>>> Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
>>> ---
>>>    arch/arm/lib/bootm.c | 40 +++++++++++++++++++++++++---------------
>>>    1 file changed, 25 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
>>> index f60ee3a7e6..ea9bfe7570 100644
>>> --- a/arch/arm/lib/bootm.c
>>> +++ b/arch/arm/lib/bootm.c
>>> @@ -317,7 +317,6 @@ __weak void update_os_arch_secondary_cores(uint8_t os_arch)
>>>    {
>>>    }
>>> -#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
>>>    static void switch_to_el1(void)
>>>    {
>>>    	if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
>>> @@ -332,7 +331,6 @@ static void switch_to_el1(void)
>>>    				    ES_TO_AARCH64);
>>>    }
>>>    #endif
>>> -#endif
>>>    /* Subcommand: GO */
>>>    static void boot_jump_linux(bootm_headers_t *images, int flag)
>>> @@ -359,21 +357,33 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
>>>    		update_os_arch_secondary_cores(images->os.arch);
>>> -#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
>>> -		armv8_switch_to_el2((u64)images->ft_addr, 0, 0, 0,
>>> -				    (u64)switch_to_el1, ES_TO_AARCH64);
>>> +#ifdef CONFIG_ARMV8_MULTIENTRY
>>> +		int armv8_switch_to_el1 = -1;
>>>    #else
>>> -		if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
>>> -		    (images->os.arch == IH_ARCH_ARM))
>>> -			armv8_switch_to_el2(0, (u64)gd->bd->bi_arch_number,
>>> -					    (u64)images->ft_addr, 0,
>>> -					    (u64)images->ep,
>>> -					    ES_TO_AARCH32);
>>> -		else
>>> -			armv8_switch_to_el2((u64)images->ft_addr, 0, 0, 0,
>>> -					    images->ep,
>>> -					    ES_TO_AARCH64);
>>> +		int armv8_switch_to_el1 = env_get_yesno("armv8_switch_to_el1");
>>>    #endif
>>> +#ifdef CONFIG_ARMV8_SWITCH_TO_EL1
>>> +		if (armv8_switch_to_el1 == -1) {
>>> +			armv8_switch_to_el1 = 1;
>>> +		}
>>> +#endif
>>> +		if (armv8_switch_to_el1 == 1) {
>>
>> This looks confusing. Can't we use CONFIG_IS_ENABLED() and override
>> armv8_switch_to_el1, then use this one variable to trigger the action?
>>
>> Cheers,
>> Andre
>>
>>> +			armv8_switch_to_el2((u64)images->ft_addr, 0, 0, 0,
>>> +					    (u64)switch_to_el1, ES_TO_AARCH64);
>>> +		} else {
>>> +			if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
>>> +					(images->os.arch == IH_ARCH_ARM))
>>> +				armv8_switch_to_el2(0,
>>> +						    (u64)gd->bd->bi_arch_number,
>>> +						    (u64)images->ft_addr, 0,
>>> +						    (u64)images->ep,
>>> +						    ES_TO_AARCH32);
>>> +			else
>>> +				armv8_switch_to_el2((u64)images->ft_addr,
>>> +						    0, 0, 0,
>>> +						    images->ep,
>>> +						    ES_TO_AARCH64);
>>> +		}
>>>    	}
>>>    #else
>>>    	unsigned long machid = gd->bd->bi_arch_number;
>>>
>>
> 


  reply	other threads:[~2021-08-26 11:36 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-19 15:53 [PATCH v2 0/6] Armv8r64 + BASER_FVP board support Peter Hoyes
2021-08-19 15:53 ` [PATCH v2 1/6] armv8: Disable pointer authentication traps for EL1 Peter Hoyes
2021-08-20 14:44   ` Andre Przywara
2021-08-20 15:04     ` Michael Walle
2021-09-02 22:41   ` Tom Rini
2021-08-19 15:53 ` [PATCH v2 2/6] armv8: Ensure EL1&0 VMSA is enabled Peter Hoyes
2021-09-02 22:41   ` Tom Rini
2021-08-19 15:53 ` [PATCH v2 3/6] armv8: Add ARMv8 MPU configuration logic Peter Hoyes
2021-08-20 15:22   ` Andre Przywara
2021-09-02 22:41   ` Tom Rini
2021-08-19 15:53 ` [PATCH v2 4/6] vexpress64: Add BASER_FVP vexpress board variant Peter Hoyes
2021-09-02 22:42   ` Tom Rini
2021-08-19 15:53 ` [PATCH v2 5/6] arm: Use armv8_switch_to_el1 env to switch to EL1 Peter Hoyes
2021-08-20 16:57   ` Andre Przywara
2021-08-20 17:05     ` Tom Rini
2021-08-26 11:36       ` Andre Przywara [this message]
2021-09-02 22:42   ` Tom Rini
2021-09-02 23:07     ` Andre Przywara
2021-09-02 23:49       ` Tom Rini
2021-09-03 10:19         ` Peter Hoyes
2021-09-03 14:00           ` Tom Rini
2021-08-19 15:53 ` [PATCH v2 6/6] doc: Add documentation for the Arm vexpress board configs Peter Hoyes
2021-09-02 22:42   ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e692566e-e6fa-26e4-5f6f-a19514820f93@arm.com \
    --to=andre.przywara@arm.com \
    --cc=diego.sueiro@arm.com \
    --cc=michael@walle.cc \
    --cc=monstr@monstr.eu \
    --cc=patrick.delaunay@foss.st.com \
    --cc=peter.hoyes@arm.com \
    --cc=priyanka.singh@nxp.com \
    --cc=sjg@chromium.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox