mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 06:31:31 +00:00
Revert "efi_loader: remove efi_exit_caches()"
This reverts commit 3170db63c4
.
It reportedly breaks OpenBSD/armv7 booting and I've already received
complaints from people that it breaks some Linux armv7 systems as well.
We'll have to give this whole caching story a good bit more thought.
Reported-by: Jonathan Gray <jsg@jsg.id.au>
Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
02c2f0298a
commit
f31239acff
1 changed files with 28 additions and 0 deletions
|
@ -26,6 +26,14 @@ LIST_HEAD(efi_obj_list);
|
|||
/* List of all events */
|
||||
LIST_HEAD(efi_events);
|
||||
|
||||
/*
|
||||
* If we're running on nasty systems (32bit ARM booting into non-EFI Linux)
|
||||
* we need to do trickery with caches. Since we don't want to break the EFI
|
||||
* aware boot path, only apply hacks when loading exiting directly (breaking
|
||||
* direct Linux EFI booting along the way - oh well).
|
||||
*/
|
||||
static bool efi_is_direct_boot = true;
|
||||
|
||||
#ifdef CONFIG_ARM
|
||||
/*
|
||||
* The "gd" pointer lives in a register on ARM and AArch64 that we declare
|
||||
|
@ -1707,6 +1715,8 @@ static efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
|
|||
|
||||
EFI_ENTRY("%p, %p, %p", image_handle, exit_data_size, exit_data);
|
||||
|
||||
efi_is_direct_boot = false;
|
||||
|
||||
/* call the image! */
|
||||
if (setjmp(&image_obj->exit_jmp)) {
|
||||
/*
|
||||
|
@ -1814,6 +1824,21 @@ static efi_status_t EFIAPI efi_unload_image(efi_handle_t image_handle)
|
|||
return EFI_EXIT(EFI_SUCCESS);
|
||||
}
|
||||
|
||||
/**
|
||||
* efi_exit_caches() - fix up caches for EFI payloads if necessary
|
||||
*/
|
||||
static void efi_exit_caches(void)
|
||||
{
|
||||
#if defined(CONFIG_ARM) && !defined(CONFIG_ARM64)
|
||||
/*
|
||||
* Grub on 32bit ARM needs to have caches disabled before jumping into
|
||||
* a zImage, but does not know of all cache layers. Give it a hand.
|
||||
*/
|
||||
if (efi_is_direct_boot)
|
||||
cleanup_before_linux();
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* efi_exit_boot_services() - stop all boot services
|
||||
* @image_handle: handle of the loaded image
|
||||
|
@ -1867,6 +1892,9 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
|
|||
|
||||
board_quiesce_devices();
|
||||
|
||||
/* Fix up caches for EFI payloads if necessary */
|
||||
efi_exit_caches();
|
||||
|
||||
/* This stops all lingering devices */
|
||||
bootm_disable_interrupts();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue