From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8704AC433F5 for ; Sun, 26 Sep 2021 06:51:32 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 917D460F9C for ; Sun, 26 Sep 2021 06:51:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 917D460F9C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmx.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E22628350D; Sun, 26 Sep 2021 08:51:28 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="krkpnO0i"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 0FA22835A2; Sun, 26 Sep 2021 08:51:27 +0200 (CEST) Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 83BB4834E2 for ; Sun, 26 Sep 2021 08:51:22 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=xypron.glpk@gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=badeba3b8450; t=1632639081; bh=oCFFzfFLcvsw8Gg7/TyCDRy+VpnwpuWc1IH4qO6799c=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=krkpnO0igeCoWm1Vhl8fSf9bQMobb3Xs7tUjkVBmJw7OqL35ck/kTU6PyGyWf1muQ +XzKRaFhgGg3DvX/SdTP878kZfFpS2DBcqoGhjQsfA8iLis3lw8qLjyp6YNwZn0Zdl EKvIXPqxp++PuGzAhwf9OMXPWXvrPdyM6J5VnlfA= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.123.35] ([88.152.144.157]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MFKGZ-1mbGoz3CLB-00FmVM; Sun, 26 Sep 2021 08:51:20 +0200 Subject: Re: [PATCH v2 4/4] efi_loader: GOP: Fix 30bpp block transfer support To: Mark Kettenis , u-boot@lists.denx.de Cc: Anatolij Gustschin , Alexander Graf References: <20210925204740.52468-1-kettenis@openbsd.org> <20210925204740.52468-5-kettenis@openbsd.org> From: Heinrich Schuchardt Message-ID: Date: Sun, 26 Sep 2021 08:51:15 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: <20210925204740.52468-5-kettenis@openbsd.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:t26iH5vKOCysCEdspfKDoFiCLDoY8BhFhMDrse6XYQkZqgwHojb 9Aha/ItrrnQ5KoKumLu/FM7P1G2A4RKv9o1elQR5Ojzn+DXvUwIeUO8TjwpEFzONxI9hdkW qrvdJSoSEZsh+Z8BxMaMhmtCRCcJIb+cqh0h3HJjYuJ/BFNkcvef+c2I3Eu1q5E/VedrsEX aXR61tF/Zi5kKjxyyRBEg== X-UI-Out-Filterresults: notjunk:1;V03:K0:BHVq3S6fNF8=:uBeCkyelJvEKioUX35TaES dZRkzJ0uZb2QQV8JquaiPNKeU+jomkyMA3gbKCTPrMdbNNDnkH0UknodjVjnQC28vPRsUgoev fL4HZ/fL9l+MFa6KO9ecZVic/mvYc6nObaoyqOvHTrz5BZmwrSOlx8Ls2xxt4P2FIhpuQfN/0 yRemxOD1yg6P0cHTd/WIiHlwrqkCNGsK6blsEGmJgj+/OprG/Rzpx0bMSOrg2URFc7flWpM/Q PcjnNtwZ4/T8v1dSP9evCqhzbjKMIW6B6emujtlfpt+7V57xL7LgXjlaYIovLZ5JjX2DGyqKR S12skjDp6SQfvzdEGJ/vtyLH/ejEGLeMmj5udnJfsiCByYwILw+v20Y0lBN8pqrbwkAvghcck MeyHVmSrIvCTeEJKe6IftPesAl74CgiCnJ/4LKJ1dskjAPfqFaJFNs/QwDiMPYOcEABj4aZHU zzYRI6o7dOIop3DhFh0UCkr1wJhpVJ3z/fhWF1Eq0RL8aZ6U2UTl+UuNg5dJ3IJtlZlAkZwfZ 4Nj0dl0H5jK6tD85lym59sOBS3wYUW+Dv5gaeOKlSvZ4fGn4H0I17tfop8WOf8UsbqUyiQhw0 oinrso9LNSoUB3mQd4MLFB7LTYp5s3hTox9fP7TtjsFBA6NNt4H430aGhupOMublrznXX1Lcm RUujhuU3hZF/81qjfhDiuPttGOQvYqD1jXZc30qCxdujP4xQHzV8H24w7kfpvLtDuwBQrJnVA vgy2Jv3L67gfpyHccZnSltSII+PhbUEFcpDaqm8uZ84WiRqSNS/g+ro5kE7VFytYfp0gMTorK ihaMAAeqb4An82x+7GS8Es+42x/5m1bpJECCn3wrfJfnLUTkiEb4WTeS2Qe4+mkR4DAyhFGN9 OSnX3laoV8G0GSfUBG+kCgnCjiTdaNNVTYxynOyUPrgJFAfJ7K3xCaTXPHV6zBuIoILkudrcM SvAxXC395Y4NaOmW18mJsG+sR+3HbSmhp+n/QqTqIHA1uhccmc5vwE7RNl+OrkQkT0E5J8baR R2Uf0OOW9UxPsb0Bpg8eVFwL/SXY8WgAicbCspdgDmVlwR4f8QHSjRIpAwBdmw/4DEaSbT7j+ of2miuO5lrYaZY= X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean On 9/25/21 10:47 PM, Mark Kettenis wrote: > Convert pixel values when necessary like we do for 16bpp > framebuffers. > > Signed-off-by: Mark Kettenis Reviewed-by: Heinrich Schuchardt > --- > lib/efi_loader/efi_gop.c | 47 +++++++++++++++++++++++++++++++++++++++- > 1 file changed, 46 insertions(+), 1 deletion(-) > > diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c > index 5033a2c9e3..7683a34a96 100644 > --- a/lib/efi_loader/efi_gop.c > +++ b/lib/efi_loader/efi_gop.c > @@ -64,6 +64,27 @@ out: > return EFI_EXIT(ret); > } > > +static __always_inline struct efi_gop_pixel efi_vid30_to_blt_col(u32 vi= d) > +{ > + struct efi_gop_pixel blt =3D { > + .reserved =3D 0, > + }; > + > + blt.blue =3D (vid & 0x3ff) >> 2; > + vid >>=3D 10; > + blt.green =3D (vid & 0x3ff) >> 2; > + vid >>=3D 10; > + blt.red =3D (vid & 0x3ff) >> 2; > + return blt; > +} > + > +static __always_inline u32 efi_blt_col_to_vid30(struct efi_gop_pixel *b= lt) > +{ > + return (u32)(blt->red << 2) << 20 | > + (u32)(blt->green << 2) << 10 | > + (u32)(blt->blue << 2); > +} > + > static __always_inline struct efi_gop_pixel efi_vid16_to_blt_col(u16 v= id) > { > struct efi_gop_pixel blt =3D { > @@ -191,6 +212,9 @@ static __always_inline efi_status_t gop_blt_int(stru= ct efi_gop *this, > if (vid_bpp =3D=3D 32) > pix =3D *(struct efi_gop_pixel *)&fb32[ > slineoff + j + sx]; > + else if (vid_bpp =3D=3D 30) > + pix =3D efi_vid30_to_blt_col(fb32[ > + slineoff + j + sx]); > else > pix =3D efi_vid16_to_blt_col(fb16[ > slineoff + j + sx]); > @@ -207,6 +231,9 @@ static __always_inline efi_status_t gop_blt_int(stru= ct efi_gop *this, > case EFI_BLT_VIDEO_TO_VIDEO: > if (vid_bpp =3D=3D 32) > fb32[dlineoff + j + dx] =3D *(u32 *)&pix; > + else if (vid_bpp =3D=3D 30) > + fb32[dlineoff + j + dx] =3D > + efi_blt_col_to_vid30(&pix); > else > fb16[dlineoff + j + dx] =3D > efi_blt_col_to_vid16(&pix); > @@ -231,7 +258,10 @@ static efi_uintn_t gop_get_bpp(struct efi_gop *this= ) > #else > case LCD_COLOR32: > #endif > - vid_bpp =3D 32; > + if (gopobj->info.pixel_format =3D=3D EFI_GOT_BGRA8) > + vid_bpp =3D 32; > + else > + vid_bpp =3D 30; > break; > #ifdef CONFIG_DM_VIDEO > case VIDEO_BPP16: > @@ -277,6 +307,17 @@ static efi_status_t gop_blt_buf_to_vid16(struct efi= _gop *this, > dy, width, height, delta, 16); > } > > +static efi_status_t gop_blt_buf_to_vid30(struct efi_gop *this, > + struct efi_gop_pixel *buffer, > + u32 foo, efi_uintn_t sx, > + efi_uintn_t sy, efi_uintn_t dx, > + efi_uintn_t dy, efi_uintn_t width, > + efi_uintn_t height, efi_uintn_t delta) > +{ > + return gop_blt_int(this, buffer, EFI_BLT_BUFFER_TO_VIDEO, sx, sy, dx, > + dy, width, height, delta, 30); > +} > + > static efi_status_t gop_blt_buf_to_vid32(struct efi_gop *this, > struct efi_gop_pixel *buffer, > u32 foo, efi_uintn_t sx, > @@ -394,6 +435,10 @@ efi_status_t EFIAPI gop_blt(struct efi_gop *this, s= truct efi_gop_pixel *buffer, > ret =3D gop_blt_buf_to_vid32(this, buffer, operation, sx, > sy, dx, dy, width, height, > delta); > + else if (vid_bpp =3D=3D 30) > + ret =3D gop_blt_buf_to_vid30(this, buffer, operation, sx, > + sy, dx, dy, width, height, > + delta); > else > ret =3D gop_blt_buf_to_vid16(this, buffer, operation, sx, > sy, dx, dy, width, height, >