Re: [PATCH 2/2] efi: gop: Mark pixel_format as BLTONLY if we have sync hook

Heinrich Schuchardt xypron.glpk at gmx.de
Fri May 17 03:44:35 CEST 2024



Am 17. Mai 2024 01:03:25 MESZ schrieb Jiaxun Yang <jiaxun.yang at flygoat.com>:
>If a video device has a video_sync hook, it means some software
>intervene is required to scanout framebuffer up on change.
>
>That means EFI application can't just use it as raw framebuffer,
>it should call BLT operation to let U-Boot help with scanout.
>
>Mark pixel format as BLTONLY as per UEFI spec to reflect this
>nature.
>
>Signed-off-by: Jiaxun Yang <jiaxun.yang at flygoat.com>
>---
> include/efi_api.h        | 1 +
> lib/efi_loader/efi_gop.c | 9 ++++++++-
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
>diff --git a/include/efi_api.h b/include/efi_api.h
>index ab40b1b5ddf6..3eaefb322878 100644
>--- a/include/efi_api.h
>+++ b/include/efi_api.h
>@@ -1399,6 +1399,7 @@ struct efi_hii_config_access_protocol {
> #define EFI_GOT_RGBA8		0
> #define EFI_GOT_BGRA8		1
> #define EFI_GOT_BITMASK		2
>+#define EFI_GOT_BLTONLY		3
> 
> struct efi_gop_mode_info {
> 	u32 version;
>diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c
>index 41e12fa72460..784d43d3d39b 100644
>--- a/lib/efi_loader/efi_gop.c
>+++ b/lib/efi_loader/efi_gop.c
>@@ -467,10 +467,12 @@ efi_status_t efi_gop_register(void)
> 	struct efi_gop_obj *gopobj;
> 	u32 bpix, format, col, row;
> 	u64 fb_base, fb_size;
>+	bool needs_sync;
> 	efi_status_t ret;
> 	struct udevice *vdev;
> 	struct video_priv *priv;
> 	struct video_uc_plat *plat;
>+	struct video_ops *ops;
> 
> 	/* We only support a single video output device for now */
> 	if (uclass_first_device_err(UCLASS_VIDEO, &vdev)) {
>@@ -485,6 +487,7 @@ efi_status_t efi_gop_register(void)
> 	row = video_get_ysize(vdev);
> 
> 	plat = dev_get_uclass_plat(vdev);
>+	ops = video_get_ops(vid);
> 	fb_base = IS_ENABLED(CONFIG_VIDEO_COPY) ? plat->copy_base : plat->base;

Wasn't this line introduced to handle the video sync case by pointing the EFI application to target framebuffer?

Best regards

Heinrich

> 	fb_size = plat->size;
> 
>@@ -529,7 +532,11 @@ efi_status_t efi_gop_register(void)
> 	gopobj->info.version = 0;
> 	gopobj->info.width = col;
> 	gopobj->info.height = row;
>-	if (bpix == VIDEO_BPP32)
>+
>+	if (ops && ops->video_sync) {
>+		/* Applications can't really use it as framebuffer */
>+		gopobj->info.pixel_format = EFI_GOT_BLTONLY;
>+	} else if (bpix == VIDEO_BPP32)
> 	{
> 		if (format == VIDEO_X2R10G10B10) {
> 			gopobj->info.pixel_format = EFI_GOT_BITMASK;
>


More information about the U-Boot mailing list