[PATCH 4/4] efi_loader: call smp_kick_all_cpus()

Michael Walle michael at walle.cc
Thu May 14 22:35:10 CEST 2020


Am 2020-05-14 22:17, schrieb Alexander Graf:
> On 14.05.20 20:46, Heinrich Schuchardt wrote:
>> On 5/14/20 2:38 PM, Michael Walle wrote:
>>> On some architectures, specifically the layerscape, the secondary 
>>> cores
>>> wait for an interrupt before entering the spin-tables. This applies 
>>> only
>>> to boards which doesn't have PSCI provided by TF-a and u-boot does 
>>> the
>> %s/TF-a/TF-A/, %s/u-boot/U-Boot/
>> 
>>> secondary cores handling.
>>> bootm/booti already call that function for ARM architecture; also add 
>>> it
>>> to bootelf before switching to EL2. Additionally, provide a weak noop
>>> function so we don't have to have "#ifdef CONFIG_ARM64" guards.
>>> 
>>> Signed-off-by: Michael Walle <michael at walle.cc>
>>> ---
>>>   common/bootm.c             | 9 +++++++++
>>>   lib/efi_loader/efi_setup.c | 6 ++++++
>>>   2 files changed, 15 insertions(+)
>>> 
>>> diff --git a/common/bootm.c b/common/bootm.c
>>> index db4362a643..65adf29329 100644
>>> --- a/common/bootm.c
>>> +++ b/common/bootm.c
>>> @@ -816,6 +816,15 @@ void __weak switch_to_non_secure_mode(void)
>>>   {
>>>   }
>>> 
>>> +/**
>>> + * smp_kick_all_cpus() - kick all CPUs
>>> + *
>>> + * This routine is overridden by architectures requiring this 
>>> feature.
>>> + */
>>> +void __weak smp_kick_all_cpus(void)
>>> +{
>>> +}
>>> +
>>>   #else /* USE_HOSTCC */
>>> 
>>>   #if defined(CONFIG_FIT_SIGNATURE)
>>> diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
>>> index 26a7423203..7e5364adc5 100644
>>> --- a/lib/efi_loader/efi_setup.c
>>> +++ b/lib/efi_loader/efi_setup.c
>>> @@ -132,6 +132,12 @@ efi_status_t efi_init_obj_list(void)
>>>   	/* Allow unaligned memory access */
>>>   	allow_unaligned();
>>> 
>>> +	/*
>>> +	 * Some architectures need to kick secondary cores to enter their
>>> +	 * spin table.
>>> +	 */
>>> +	smp_kick_all_cpus();
>> This will not compile with
>> 
>> CONFIG_CMD_BOOTI=n
>> CONFIG_CMD_BOOTM=n
>> CONFIG_CMD_BOOTZ=n
> 
> 
> Much worse is that in incurs needless overhead on PSCI capable
> platforms. Can we move the smp_kick_all_cpus() to the board or soc
> level of the few systems that use spin tables please? :)

By having a weak function called here instead of smp_kick_all_cpus()?

-- 
-michael


More information about the U-Boot mailing list