efi: Support copy framebuffer

Add support for this to EFI in case it becomes useful. At present it just
slows things down. You can enable CONFIG_VIDEO_COPY to turn it on.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2023-03-10 12:47:16 -08:00 committed by Heinrich Schuchardt
parent 4f9a8f33f0
commit f62229227c
2 changed files with 26 additions and 1 deletions

View file

@ -27,6 +27,7 @@
};
efi-fb {
compatible = "efi-fb";
bootph-some-ram;
};
};

View file

@ -129,7 +129,6 @@ static int save_vesa_mode(struct vesa_mode_info *vesa, u64 *fbp)
struct efi_gop_mode_info *info;
int ret;
printf("start\n");
if (IS_ENABLED(CONFIG_EFI_APP))
ret = get_mode_info(vesa, fbp, &info);
else
@ -207,6 +206,30 @@ err:
return ret;
}
static int efi_video_bind(struct udevice *dev)
{
if (IS_ENABLED(CONFIG_VIDEO_COPY)) {
struct video_uc_plat *plat = dev_get_uclass_plat(dev);
struct vesa_mode_info vesa;
int ret;
u64 fb;
/*
* Initialise vesa_mode_info structure so we can figure out the
* required framebuffer size. If something goes wrong, just do
* without a copy framebuffer
*/
ret = save_vesa_mode(&vesa, &fb);
if (!ret) {
/* this is not reached if the EFI call failed */
plat->copy_size = vesa.bytes_per_scanline *
vesa.y_resolution;
}
}
return 0;
}
static const struct udevice_id efi_video_ids[] = {
{ .compatible = "efi-fb" },
{ }
@ -216,5 +239,6 @@ U_BOOT_DRIVER(efi_video) = {
.name = "efi_video",
.id = UCLASS_VIDEO,
.of_match = efi_video_ids,
.bind = efi_video_bind,
.probe = efi_video_probe,
};