summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinrich Schuchardt <[email protected]>2026-05-01 17:05:50 +0200
committerHeinrich Schuchardt <[email protected]>2026-07-27 18:50:27 +0200
commit0786aea46596d37f6f7485d892a756f28d73939b (patch)
tree1a7c07447709c2365a96b1884263102cc1763d37
parentb635d43bca429500cb8ef20aa151cb5773b9a8a5 (diff)
efi_loader: set correct frame buffer address
If we use video copy, bit image transfers need to write to the in memory copy of the physical frame buffer. Damage control will sync the changes to the physical frame buffer. Cyclic video copy will catch all changes done by EFI applications directly accessing the frame buffer copy. gopobj->mode.fb_base must be a valid pointer to memory and not a virtual sandbox address. With this change the block image transfer test works again on the sandbox. setenv efi_selftest block image transfer bootefi selftest Fixes: a75cf70d23ac ("efi: Correct handling of frame buffer") Signed-off-by: Heinrich Schuchardt <[email protected]>
-rw-r--r--lib/efi_loader/efi_gop.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c
index 9403e09691e..ae44d140289 100644
--- a/lib/efi_loader/efi_gop.c
+++ b/lib/efi_loader/efi_gop.c
@@ -471,7 +471,7 @@ efi_status_t efi_gop_register(void)
{
struct efi_gop_obj *gopobj;
u32 bpix, format, col, row;
- u64 fb_base, fb_size;
+ u64 fb_size;
efi_status_t ret;
struct udevice *vdev;
struct video_priv *priv;
@@ -490,7 +490,6 @@ efi_status_t efi_gop_register(void)
row = video_get_ysize(vdev);
plat = dev_get_uclass_plat(vdev);
- fb_base = IS_ENABLED(CONFIG_VIDEO_COPY) ? plat->copy_base : plat->base;
fb_size = plat->size;
switch (bpix) {
@@ -528,7 +527,7 @@ efi_status_t efi_gop_register(void)
gopobj->mode.info = &gopobj->info;
gopobj->mode.info_size = sizeof(gopobj->info);
- gopobj->mode.fb_base = fb_base;
+ gopobj->mode.fb_base = (uintptr_t)priv->fb;
gopobj->mode.fb_size = fb_size;
gopobj->info.version = 0;
@@ -553,7 +552,7 @@ efi_status_t efi_gop_register(void)
}
gopobj->info.pixels_per_scanline = col;
gopobj->bpix = bpix;
- gopobj->fb = map_sysmem(fb_base, fb_size);
+ gopobj->fb = priv->fb;
gopobj->vdev = vdev;
return EFI_SUCCESS;