* [PATCH 0/3] 30bpp framebuffer support @ 2021-09-16 13:01 Mark Kettenis 2021-09-16 13:01 ` [PATCH 1/3] video: Add 30bpp support Mark Kettenis ` (2 more replies) 0 siblings, 3 replies; 12+ messages in thread From: Mark Kettenis @ 2021-09-16 13:01 UTC (permalink / raw) To: u-boot Cc: Mark Kettenis, Anatolij Gustschin, Heinrich Schuchardt, Alexander Graf Apple M1 machines come up with a framebuffer that in 30bpp mode. This series adds basic support for this mode. Mark Kettenis (3): video: Add 30bpp support efi_loader: GOP: Add 30bpp support video: simplefb: Add 30bpp support drivers/video/console_normal.c | 2 ++ drivers/video/console_rotate.c | 6 ++++++ drivers/video/console_truetype.c | 3 +++ drivers/video/simplefb.c | 3 +++ drivers/video/vidconsole-uclass.c | 7 +++++++ drivers/video/video-uclass.c | 1 + include/video.h | 1 + lib/efi_loader/efi_gop.c | 10 ++++++++++ 8 files changed, 33 insertions(+) -- 2.33.0 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/3] video: Add 30bpp support 2021-09-16 13:01 [PATCH 0/3] 30bpp framebuffer support Mark Kettenis @ 2021-09-16 13:01 ` Mark Kettenis 2021-09-25 13:40 ` Simon Glass 2021-09-16 13:01 ` [PATCH 2/3] efi_loader: GOP: " Mark Kettenis 2021-09-16 13:01 ` [PATCH 3/3] video: simplefb: " Mark Kettenis 2 siblings, 1 reply; 12+ messages in thread From: Mark Kettenis @ 2021-09-16 13:01 UTC (permalink / raw) To: u-boot Cc: Mark Kettenis, Anatolij Gustschin, Heinrich Schuchardt, Alexander Graf Add support for 30bpp mode where pixels are picked in 32-bit integers but use 10 bits instead of 8 bits for each component. Signed-off-by: Mark Kettenis <kettenis@openbsd.org> --- drivers/video/console_normal.c | 2 ++ drivers/video/console_rotate.c | 6 ++++++ drivers/video/console_truetype.c | 3 +++ drivers/video/vidconsole-uclass.c | 7 +++++++ drivers/video/video-uclass.c | 1 + include/video.h | 1 + 6 files changed, 20 insertions(+) diff --git a/drivers/video/console_normal.c b/drivers/video/console_normal.c index 04f022491e..e0b89cbb93 100644 --- a/drivers/video/console_normal.c +++ b/drivers/video/console_normal.c @@ -41,6 +41,7 @@ static int console_normal_set_row(struct udevice *dev, uint row, int clr) end = dst; break; } + case VIDEO_BPP30: case VIDEO_BPP32: if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { uint32_t *dst = line; @@ -126,6 +127,7 @@ static int console_normal_putc_xy(struct udevice *dev, uint x_frac, uint y, } break; } + case VIDEO_BPP30: case VIDEO_BPP32: if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { uint32_t *dst = line; diff --git a/drivers/video/console_rotate.c b/drivers/video/console_rotate.c index 36c8d0609d..bf81b80a39 100644 --- a/drivers/video/console_rotate.c +++ b/drivers/video/console_rotate.c @@ -40,6 +40,7 @@ static int console_set_row_1(struct udevice *dev, uint row, int clr) *dst++ = clr; break; } + case VIDEO_BPP30: case VIDEO_BPP32: if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { uint32_t *dst = line; @@ -128,6 +129,7 @@ static int console_putc_xy_1(struct udevice *dev, uint x_frac, uint y, char ch) } break; } + case VIDEO_BPP30: case VIDEO_BPP32: if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { uint32_t *dst = line; @@ -183,6 +185,7 @@ static int console_set_row_2(struct udevice *dev, uint row, int clr) end = dst; break; } + case VIDEO_BPP30: case VIDEO_BPP32: if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { uint32_t *dst = line; @@ -266,6 +269,7 @@ static int console_putc_xy_2(struct udevice *dev, uint x_frac, uint y, char ch) } break; } + case VIDEO_BPP30: case VIDEO_BPP32: if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { uint32_t *dst = line; @@ -318,6 +322,7 @@ static int console_set_row_3(struct udevice *dev, uint row, int clr) *dst++ = clr; break; } + case VIDEO_BPP30: case VIDEO_BPP32: if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { uint32_t *dst = line; @@ -402,6 +407,7 @@ static int console_putc_xy_3(struct udevice *dev, uint x_frac, uint y, char ch) } break; } + case VIDEO_BPP30: case VIDEO_BPP32: if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { uint32_t *dst = line; diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c index 98427f4c61..0195d996de 100644 --- a/drivers/video/console_truetype.c +++ b/drivers/video/console_truetype.c @@ -153,6 +153,7 @@ static int console_truetype_set_row(struct udevice *dev, uint row, int clr) } #endif #ifdef CONFIG_VIDEO_BPP32 + case VIDEO_BPP30: case VIDEO_BPP32: { u32 *dst = line; @@ -299,6 +300,7 @@ static int console_truetype_putc_xy(struct udevice *dev, uint x, uint y, } #endif #ifdef CONFIG_VIDEO_BPP32 + case VIDEO_BPP30: case VIDEO_BPP32: { u32 *dst = (u32 *)line + xoff; int i; @@ -381,6 +383,7 @@ static int console_truetype_erase(struct udevice *dev, int xstart, int ystart, } #endif #ifdef CONFIG_VIDEO_BPP32 + case VIDEO_BPP30: case VIDEO_BPP32: { uint32_t *dst = line; diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c index 8132efa55a..cc274b45fe 100644 --- a/drivers/video/vidconsole-uclass.c +++ b/drivers/video/vidconsole-uclass.c @@ -153,6 +153,13 @@ u32 vid_console_color(struct video_priv *priv, unsigned int idx) ((colors[idx].b >> 3) << 0); } break; + case VIDEO_BPP30: + if (CONFIG_IS_ENABLED(VIDEO_BPP32)) { + return (colors[idx].r << 22) | + (colors[idx].g << 12) | + (colors[idx].b << 2); + } + break; case VIDEO_BPP32: if (CONFIG_IS_ENABLED(VIDEO_BPP32)) { return (colors[idx].r << 16) | diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index 9f8cf6ef2a..28bf701f41 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -129,6 +129,7 @@ int video_clear(struct udevice *dev) *ppix++ = priv->colour_bg; break; } + case VIDEO_BPP30: case VIDEO_BPP32: if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { u32 *ppix = priv->fb; diff --git a/include/video.h b/include/video.h index 827733305e..04c636b317 100644 --- a/include/video.h +++ b/include/video.h @@ -53,6 +53,7 @@ enum video_log2_bpp { VIDEO_BPP4, VIDEO_BPP8, VIDEO_BPP16, + VIDEO_BPP30, VIDEO_BPP32, }; -- 2.33.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] video: Add 30bpp support 2021-09-16 13:01 ` [PATCH 1/3] video: Add 30bpp support Mark Kettenis @ 2021-09-25 13:40 ` Simon Glass 2021-09-25 16:55 ` Mark Kettenis 0 siblings, 1 reply; 12+ messages in thread From: Simon Glass @ 2021-09-25 13:40 UTC (permalink / raw) To: Mark Kettenis Cc: U-Boot Mailing List, Anatolij Gustschin, Heinrich Schuchardt, Alexander Graf On Thu, 16 Sept 2021 at 07:01, Mark Kettenis <kettenis@openbsd.org> wrote: > > Add support for 30bpp mode where pixels are picked in 32-bit > integers but use 10 bits instead of 8 bits for each component. > > Signed-off-by: Mark Kettenis <kettenis@openbsd.org> > --- > drivers/video/console_normal.c | 2 ++ > drivers/video/console_rotate.c | 6 ++++++ > drivers/video/console_truetype.c | 3 +++ > drivers/video/vidconsole-uclass.c | 7 +++++++ > drivers/video/video-uclass.c | 1 + > include/video.h | 1 + > 6 files changed, 20 insertions(+) > > diff --git a/drivers/video/console_normal.c b/drivers/video/console_normal.c > index 04f022491e..e0b89cbb93 100644 > --- a/drivers/video/console_normal.c > +++ b/drivers/video/console_normal.c > @@ -41,6 +41,7 @@ static int console_normal_set_row(struct udevice *dev, uint row, int clr) > end = dst; > break; > } > + case VIDEO_BPP30: > case VIDEO_BPP32: > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > uint32_t *dst = line; > @@ -126,6 +127,7 @@ static int console_normal_putc_xy(struct udevice *dev, uint x_frac, uint y, > } > break; > } > + case VIDEO_BPP30: > case VIDEO_BPP32: > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > uint32_t *dst = line; > diff --git a/drivers/video/console_rotate.c b/drivers/video/console_rotate.c > index 36c8d0609d..bf81b80a39 100644 > --- a/drivers/video/console_rotate.c > +++ b/drivers/video/console_rotate.c > @@ -40,6 +40,7 @@ static int console_set_row_1(struct udevice *dev, uint row, int clr) > *dst++ = clr; > break; > } > + case VIDEO_BPP30: > case VIDEO_BPP32: > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > uint32_t *dst = line; > @@ -128,6 +129,7 @@ static int console_putc_xy_1(struct udevice *dev, uint x_frac, uint y, char ch) > } > break; > } > + case VIDEO_BPP30: > case VIDEO_BPP32: > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > uint32_t *dst = line; > @@ -183,6 +185,7 @@ static int console_set_row_2(struct udevice *dev, uint row, int clr) > end = dst; > break; > } > + case VIDEO_BPP30: > case VIDEO_BPP32: > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > uint32_t *dst = line; > @@ -266,6 +269,7 @@ static int console_putc_xy_2(struct udevice *dev, uint x_frac, uint y, char ch) > } > break; > } > + case VIDEO_BPP30: > case VIDEO_BPP32: > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > uint32_t *dst = line; > @@ -318,6 +322,7 @@ static int console_set_row_3(struct udevice *dev, uint row, int clr) > *dst++ = clr; > break; > } > + case VIDEO_BPP30: > case VIDEO_BPP32: > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > uint32_t *dst = line; > @@ -402,6 +407,7 @@ static int console_putc_xy_3(struct udevice *dev, uint x_frac, uint y, char ch) > } > break; > } > + case VIDEO_BPP30: > case VIDEO_BPP32: > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > uint32_t *dst = line; > diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c > index 98427f4c61..0195d996de 100644 > --- a/drivers/video/console_truetype.c > +++ b/drivers/video/console_truetype.c > @@ -153,6 +153,7 @@ static int console_truetype_set_row(struct udevice *dev, uint row, int clr) > } > #endif > #ifdef CONFIG_VIDEO_BPP32 > + case VIDEO_BPP30: > case VIDEO_BPP32: { > u32 *dst = line; > > @@ -299,6 +300,7 @@ static int console_truetype_putc_xy(struct udevice *dev, uint x, uint y, > } > #endif > #ifdef CONFIG_VIDEO_BPP32 > + case VIDEO_BPP30: > case VIDEO_BPP32: { > u32 *dst = (u32 *)line + xoff; > int i; > @@ -381,6 +383,7 @@ static int console_truetype_erase(struct udevice *dev, int xstart, int ystart, > } > #endif > #ifdef CONFIG_VIDEO_BPP32 > + case VIDEO_BPP30: > case VIDEO_BPP32: { > uint32_t *dst = line; > > diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c > index 8132efa55a..cc274b45fe 100644 > --- a/drivers/video/vidconsole-uclass.c > +++ b/drivers/video/vidconsole-uclass.c > @@ -153,6 +153,13 @@ u32 vid_console_color(struct video_priv *priv, unsigned int idx) > ((colors[idx].b >> 3) << 0); > } > break; > + case VIDEO_BPP30: > + if (CONFIG_IS_ENABLED(VIDEO_BPP32)) { > + return (colors[idx].r << 22) | > + (colors[idx].g << 12) | > + (colors[idx].b << 2); > + } > + break; > case VIDEO_BPP32: > if (CONFIG_IS_ENABLED(VIDEO_BPP32)) { > return (colors[idx].r << 16) | > diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c > index 9f8cf6ef2a..28bf701f41 100644 > --- a/drivers/video/video-uclass.c > +++ b/drivers/video/video-uclass.c > @@ -129,6 +129,7 @@ int video_clear(struct udevice *dev) > *ppix++ = priv->colour_bg; > break; > } > + case VIDEO_BPP30: > case VIDEO_BPP32: > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > u32 *ppix = priv->fb; > diff --git a/include/video.h b/include/video.h > index 827733305e..04c636b317 100644 > --- a/include/video.h > +++ b/include/video. > @@ -53,6 +53,7 @@ enum video_log2_bpp { > VIDEO_BPP4, > VIDEO_BPP8, > VIDEO_BPP16, > + VIDEO_BPP30, > VIDEO_BPP32, > }; This breaks the enuam here. See the comment above: /* * Bits per pixel selector. Each value n is such that the bits-per-pixel is * 2 ^ n */ Quite a few things rely on this, so there will need to be some changes. See for example VBNBYTE() immediately below. Also don't you need a CONFIG_VIDEO_BPP30 ? Tested on: Macbook Air M1 Tested-by: Simon Glass <sjg@chromium.org> Fails on sandbox (display turns blue) Regards, Simon ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] video: Add 30bpp support 2021-09-25 13:40 ` Simon Glass @ 2021-09-25 16:55 ` Mark Kettenis 0 siblings, 0 replies; 12+ messages in thread From: Mark Kettenis @ 2021-09-25 16:55 UTC (permalink / raw) To: Simon Glass; +Cc: kettenis, u-boot, agust, xypron.glpk, agraf > From: Simon Glass <sjg@chromium.org> > Date: Sat, 25 Sep 2021 07:40:54 -0600 > > On Thu, 16 Sept 2021 at 07:01, Mark Kettenis <kettenis@openbsd.org> wrote: > > > > Add support for 30bpp mode where pixels are picked in 32-bit > > integers but use 10 bits instead of 8 bits for each component. > > > > Signed-off-by: Mark Kettenis <kettenis@openbsd.org> > > --- > > drivers/video/console_normal.c | 2 ++ > > drivers/video/console_rotate.c | 6 ++++++ > > drivers/video/console_truetype.c | 3 +++ > > drivers/video/vidconsole-uclass.c | 7 +++++++ > > drivers/video/video-uclass.c | 1 + > > include/video.h | 1 + > > 6 files changed, 20 insertions(+) > > > > diff --git a/drivers/video/console_normal.c b/drivers/video/console_normal.c > > index 04f022491e..e0b89cbb93 100644 > > --- a/drivers/video/console_normal.c > > +++ b/drivers/video/console_normal.c > > @@ -41,6 +41,7 @@ static int console_normal_set_row(struct udevice *dev, uint row, int clr) > > end = dst; > > break; > > } > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > > uint32_t *dst = line; > > @@ -126,6 +127,7 @@ static int console_normal_putc_xy(struct udevice *dev, uint x_frac, uint y, > > } > > break; > > } > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > > uint32_t *dst = line; > > diff --git a/drivers/video/console_rotate.c b/drivers/video/console_rotate.c > > index 36c8d0609d..bf81b80a39 100644 > > --- a/drivers/video/console_rotate.c > > +++ b/drivers/video/console_rotate.c > > @@ -40,6 +40,7 @@ static int console_set_row_1(struct udevice *dev, uint row, int clr) > > *dst++ = clr; > > break; > > } > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > > uint32_t *dst = line; > > @@ -128,6 +129,7 @@ static int console_putc_xy_1(struct udevice *dev, uint x_frac, uint y, char ch) > > } > > break; > > } > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > > uint32_t *dst = line; > > @@ -183,6 +185,7 @@ static int console_set_row_2(struct udevice *dev, uint row, int clr) > > end = dst; > > break; > > } > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > > uint32_t *dst = line; > > @@ -266,6 +269,7 @@ static int console_putc_xy_2(struct udevice *dev, uint x_frac, uint y, char ch) > > } > > break; > > } > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > > uint32_t *dst = line; > > @@ -318,6 +322,7 @@ static int console_set_row_3(struct udevice *dev, uint row, int clr) > > *dst++ = clr; > > break; > > } > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > > uint32_t *dst = line; > > @@ -402,6 +407,7 @@ static int console_putc_xy_3(struct udevice *dev, uint x_frac, uint y, char ch) > > } > > break; > > } > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > > uint32_t *dst = line; > > diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c > > index 98427f4c61..0195d996de 100644 > > --- a/drivers/video/console_truetype.c > > +++ b/drivers/video/console_truetype.c > > @@ -153,6 +153,7 @@ static int console_truetype_set_row(struct udevice *dev, uint row, int clr) > > } > > #endif > > #ifdef CONFIG_VIDEO_BPP32 > > + case VIDEO_BPP30: > > case VIDEO_BPP32: { > > u32 *dst = line; > > > > @@ -299,6 +300,7 @@ static int console_truetype_putc_xy(struct udevice *dev, uint x, uint y, > > } > > #endif > > #ifdef CONFIG_VIDEO_BPP32 > > + case VIDEO_BPP30: > > case VIDEO_BPP32: { > > u32 *dst = (u32 *)line + xoff; > > int i; > > @@ -381,6 +383,7 @@ static int console_truetype_erase(struct udevice *dev, int xstart, int ystart, > > } > > #endif > > #ifdef CONFIG_VIDEO_BPP32 > > + case VIDEO_BPP30: > > case VIDEO_BPP32: { > > uint32_t *dst = line; > > > > diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c > > index 8132efa55a..cc274b45fe 100644 > > --- a/drivers/video/vidconsole-uclass.c > > +++ b/drivers/video/vidconsole-uclass.c > > @@ -153,6 +153,13 @@ u32 vid_console_color(struct video_priv *priv, unsigned int idx) > > ((colors[idx].b >> 3) << 0); > > } > > break; > > + case VIDEO_BPP30: > > + if (CONFIG_IS_ENABLED(VIDEO_BPP32)) { > > + return (colors[idx].r << 22) | > > + (colors[idx].g << 12) | > > + (colors[idx].b << 2); > > + } > > + break; > > case VIDEO_BPP32: > > if (CONFIG_IS_ENABLED(VIDEO_BPP32)) { > > return (colors[idx].r << 16) | > > diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c > > index 9f8cf6ef2a..28bf701f41 100644 > > --- a/drivers/video/video-uclass.c > > +++ b/drivers/video/video-uclass.c > > @@ -129,6 +129,7 @@ int video_clear(struct udevice *dev) > > *ppix++ = priv->colour_bg; > > break; > > } > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > if (IS_ENABLED(CONFIG_VIDEO_BPP32)) { > > u32 *ppix = priv->fb; > > diff --git a/include/video.h b/include/video.h > > index 827733305e..04c636b317 100644 > > --- a/include/video.h > > +++ b/include/video. > > @@ -53,6 +53,7 @@ enum video_log2_bpp { > > VIDEO_BPP4, > > VIDEO_BPP8, > > VIDEO_BPP16, > > + VIDEO_BPP30, > > VIDEO_BPP32, > > }; > > This breaks the enuam here. See the comment above: > > /* > * Bits per pixel selector. Each value n is such that the bits-per-pixel is > * 2 ^ n > */ > > Quite a few things rely on this, so there will need to be some > changes. See for example VBNBYTE() immediately below. Bleah. I suppose I need a separate field in struct video_priv to keep track of the pixel format then. > Also don't you need a CONFIG_VIDEO_BPP30 ? The idea was that the code additions were minimal enough for that not to make sense. But I'll need re-evaluate this after I figure out a better way to distinguish between 8-bit and 10-bit color depth. ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/3] efi_loader: GOP: Add 30bpp support 2021-09-16 13:01 [PATCH 0/3] 30bpp framebuffer support Mark Kettenis 2021-09-16 13:01 ` [PATCH 1/3] video: Add 30bpp support Mark Kettenis @ 2021-09-16 13:01 ` Mark Kettenis 2021-09-17 2:56 ` Heinrich Schuchardt 2021-09-25 13:40 ` Simon Glass 2021-09-16 13:01 ` [PATCH 3/3] video: simplefb: " Mark Kettenis 2 siblings, 2 replies; 12+ messages in thread From: Mark Kettenis @ 2021-09-16 13:01 UTC (permalink / raw) To: u-boot Cc: Mark Kettenis, Anatolij Gustschin, Heinrich Schuchardt, Alexander Graf Provide correct framebuffer information for 30bpp modes. Signed-off-by: Mark Kettenis <kettenis@openbsd.org> --- lib/efi_loader/efi_gop.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c index 1206b2d7a2..42bf49b184 100644 --- a/lib/efi_loader/efi_gop.c +++ b/lib/efi_loader/efi_gop.c @@ -227,6 +227,7 @@ static efi_uintn_t gop_get_bpp(struct efi_gop *this) switch (gopobj->bpix) { #ifdef CONFIG_DM_VIDEO + case VIDEO_BPP30: case VIDEO_BPP32: #else case LCD_COLOR32: @@ -468,6 +469,7 @@ efi_status_t efi_gop_register(void) switch (bpix) { #ifdef CONFIG_DM_VIDEO case VIDEO_BPP16: + case VIDEO_BPP30: case VIDEO_BPP32: #else case LCD_COLOR32: @@ -518,6 +520,14 @@ efi_status_t efi_gop_register(void) #endif { gopobj->info.pixel_format = EFI_GOT_BGRA8; +#ifdef CONFIG_DM_VIDEO + } else if (bpix == VIDEO_BPP30) { + gopobj->info.pixel_format = EFI_GOT_BITMASK; + gopobj->info.pixel_bitmask[0] = 0x3ff00000; /* red */ + gopobj->info.pixel_bitmask[1] = 0x000ffc00; /* green */ + gopobj->info.pixel_bitmask[2] = 0x000003ff; /* blue */ + gopobj->info.pixel_bitmask[3] = 0xc0000000; /* reserved */ +#endif } else { gopobj->info.pixel_format = EFI_GOT_BITMASK; gopobj->info.pixel_bitmask[0] = 0xf800; /* red */ -- 2.33.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] efi_loader: GOP: Add 30bpp support 2021-09-16 13:01 ` [PATCH 2/3] efi_loader: GOP: " Mark Kettenis @ 2021-09-17 2:56 ` Heinrich Schuchardt 2021-09-17 9:23 ` Mark Kettenis 2021-09-25 13:40 ` Simon Glass 1 sibling, 1 reply; 12+ messages in thread From: Heinrich Schuchardt @ 2021-09-17 2:56 UTC (permalink / raw) To: Mark Kettenis, u-boot; +Cc: Anatolij Gustschin, Alexander Graf On 9/16/21 3:01 PM, Mark Kettenis wrote: > Provide correct framebuffer information for 30bpp modes. This is not enough to get a correct GOP implementation for the 30bpp mode. Have a look at efi_gop_pixel efi_vid16_to_blt_col() and efi_blt_col_to_vid16() and where they are used. > > Signed-off-by: Mark Kettenis <kettenis@openbsd.org> > --- > lib/efi_loader/efi_gop.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c > index 1206b2d7a2..42bf49b184 100644 > --- a/lib/efi_loader/efi_gop.c > +++ b/lib/efi_loader/efi_gop.c > @@ -227,6 +227,7 @@ static efi_uintn_t gop_get_bpp(struct efi_gop *this) > > switch (gopobj->bpix) { > #ifdef CONFIG_DM_VIDEO > + case VIDEO_BPP30: > case VIDEO_BPP32: > #else > case LCD_COLOR32: > @@ -468,6 +469,7 @@ efi_status_t efi_gop_register(void) > switch (bpix) { > #ifdef CONFIG_DM_VIDEO > case VIDEO_BPP16: > + case VIDEO_BPP30: > case VIDEO_BPP32: > #else > case LCD_COLOR32: > @@ -518,6 +520,14 @@ efi_status_t efi_gop_register(void) > #endif > { > gopobj->info.pixel_format = EFI_GOT_BGRA8; > +#ifdef CONFIG_DM_VIDEO This symbol is not 30bpp specific. Is there a Kconfig variable that we can use to hide 30bpp support where it is not needed? Which modes does the M1 support? Best regards Heinrich > + } else if (bpix == VIDEO_BPP30) { > + gopobj->info.pixel_format = EFI_GOT_BITMASK; > + gopobj->info.pixel_bitmask[0] = 0x3ff00000; /* red */ > + gopobj->info.pixel_bitmask[1] = 0x000ffc00; /* green */ > + gopobj->info.pixel_bitmask[2] = 0x000003ff; /* blue */ > + gopobj->info.pixel_bitmask[3] = 0xc0000000; /* reserved */ > +#endif > } else { > gopobj->info.pixel_format = EFI_GOT_BITMASK; > gopobj->info.pixel_bitmask[0] = 0xf800; /* red */ > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] efi_loader: GOP: Add 30bpp support 2021-09-17 2:56 ` Heinrich Schuchardt @ 2021-09-17 9:23 ` Mark Kettenis 2021-09-17 11:29 ` Heinrich Schuchardt 0 siblings, 1 reply; 12+ messages in thread From: Mark Kettenis @ 2021-09-17 9:23 UTC (permalink / raw) To: Heinrich Schuchardt; +Cc: kettenis, u-boot, agust, agraf > From: Heinrich Schuchardt <xypron.glpk@gmx.de> > Date: Fri, 17 Sep 2021 04:56:31 +0200 Hi Heinrich, > On 9/16/21 3:01 PM, Mark Kettenis wrote: > > Provide correct framebuffer information for 30bpp modes. > > This is not enough to get a correct GOP implementation for the 30bpp mode. > > Have a look at efi_gop_pixel efi_vid16_to_blt_col() and > efi_blt_col_to_vid16() and where they are used. Ah right. This does indeed not support EFI_GRAPHICS_OUTPUT_PROTOCOL.Blt() correctly. I shouldn't be too hard to translate between XRGB2101010 and XRGB8888. Any ideas how I could test that code? > > Signed-off-by: Mark Kettenis <kettenis@openbsd.org> > > --- > > lib/efi_loader/efi_gop.c | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c > > index 1206b2d7a2..42bf49b184 100644 > > --- a/lib/efi_loader/efi_gop.c > > +++ b/lib/efi_loader/efi_gop.c > > @@ -227,6 +227,7 @@ static efi_uintn_t gop_get_bpp(struct efi_gop *this) > > > > switch (gopobj->bpix) { > > #ifdef CONFIG_DM_VIDEO > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > #else > > case LCD_COLOR32: > > @@ -468,6 +469,7 @@ efi_status_t efi_gop_register(void) > > switch (bpix) { > > #ifdef CONFIG_DM_VIDEO > > case VIDEO_BPP16: > > + case VIDEO_BPP30: > > case VIDEO_BPP32: > > #else > > case LCD_COLOR32: > > @@ -518,6 +520,14 @@ efi_status_t efi_gop_register(void) > > #endif > > { > > gopobj->info.pixel_format = EFI_GOT_BGRA8; > > +#ifdef CONFIG_DM_VIDEO > > This symbol is not 30bpp specific. Is there a Kconfig variable that we > can use to hide 30bpp support where it is not needed? I quite deliberately didn't add a separate config option for 30bpp as there is very little code that is added to the already existing 32bpp code. In a sense 30bpp is just a different submode of the 32bpp support with just a different color map, so I thought it made sense to group it under CONFIG_VIDEO_32BPP. I did initially consider adding a separate config option for it, but it quickly turns into an #ifdef maze that makes it hard to understand the code. The CONFIG_DM_VIDEO check is just there to make sure the 30bpp is only offered in the DM model. Based on recent discussions I expect the !CONFIG_DM_VIDEO case to disappear in the near feature so adding 30bpp support for the non-DM case doesn't make sense. The EFI GOP code currently doesn't check the CONFIG_VIDEO_BPP16 and CONFIG_VIDEO_BPP32 defines to see which of these modes are enabled within U-Boot, so we don't "hide" 16bpp support on platforms that just support 32bpp either. > Which modes does the M1 support? We're not sure. It does support at least 8-bit (32bpp) and 10-bit (30bpp) color depth modes. But the firmware tends to come up with 10-bit color depth whenever it can and I'm not planning to add support for changing the framebuffer mode on the M1, since the interface to do that is "interesting" [1]. [1] See Alyssa Rozenzweig's talk at XDC 2021, https://www.youtube.com/watch?v=uTZISTjqy9Q > > > + } else if (bpix == VIDEO_BPP30) { > > + gopobj->info.pixel_format = EFI_GOT_BITMASK; > > + gopobj->info.pixel_bitmask[0] = 0x3ff00000; /* red */ > > + gopobj->info.pixel_bitmask[1] = 0x000ffc00; /* green */ > > + gopobj->info.pixel_bitmask[2] = 0x000003ff; /* blue */ > > + gopobj->info.pixel_bitmask[3] = 0xc0000000; /* reserved */ > > +#endif > > } else { > > gopobj->info.pixel_format = EFI_GOT_BITMASK; > > gopobj->info.pixel_bitmask[0] = 0xf800; /* red */ > > > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] efi_loader: GOP: Add 30bpp support 2021-09-17 9:23 ` Mark Kettenis @ 2021-09-17 11:29 ` Heinrich Schuchardt 2021-09-17 12:41 ` Mark Kettenis 0 siblings, 1 reply; 12+ messages in thread From: Heinrich Schuchardt @ 2021-09-17 11:29 UTC (permalink / raw) To: Mark Kettenis; +Cc: kettenis, u-boot, agust, agraf On 9/17/21 11:23 AM, Mark Kettenis wrote: >> From: Heinrich Schuchardt <xypron.glpk@gmx.de> >> Date: Fri, 17 Sep 2021 04:56:31 +0200 > > Hi Heinrich, > >> On 9/16/21 3:01 PM, Mark Kettenis wrote: >>> Provide correct framebuffer information for 30bpp modes. >> >> This is not enough to get a correct GOP implementation for the 30bpp mode. >> >> Have a look at efi_gop_pixel efi_vid16_to_blt_col() and >> efi_blt_col_to_vid16() and where they are used. > > Ah right. This does indeed not support EFI_GRAPHICS_OUTPUT_PROTOCOL.Blt() > correctly. I shouldn't be too hard to translate between XRGB2101010 > and XRGB8888. Any ideas how I could test that code? setenv efi_selftest block image transfer bootefi selftest should show an animated submarine with yellow portholes similar to https://gist.github.com/xypron/7e1f73408465da71e3ef946250e76776#file-sub-png Best regards Heinrich > >>> Signed-off-by: Mark Kettenis <kettenis@openbsd.org> >>> --- >>> lib/efi_loader/efi_gop.c | 10 ++++++++++ >>> 1 file changed, 10 insertions(+) >>> >>> diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c >>> index 1206b2d7a2..42bf49b184 100644 >>> --- a/lib/efi_loader/efi_gop.c >>> +++ b/lib/efi_loader/efi_gop.c >>> @@ -227,6 +227,7 @@ static efi_uintn_t gop_get_bpp(struct efi_gop *this) >>> >>> switch (gopobj->bpix) { >>> #ifdef CONFIG_DM_VIDEO >>> + case VIDEO_BPP30: >>> case VIDEO_BPP32: >>> #else >>> case LCD_COLOR32: >>> @@ -468,6 +469,7 @@ efi_status_t efi_gop_register(void) >>> switch (bpix) { >>> #ifdef CONFIG_DM_VIDEO >>> case VIDEO_BPP16: >>> + case VIDEO_BPP30: >>> case VIDEO_BPP32: >>> #else >>> case LCD_COLOR32: >>> @@ -518,6 +520,14 @@ efi_status_t efi_gop_register(void) >>> #endif >>> { >>> gopobj->info.pixel_format = EFI_GOT_BGRA8; >>> +#ifdef CONFIG_DM_VIDEO >> >> This symbol is not 30bpp specific. Is there a Kconfig variable that we >> can use to hide 30bpp support where it is not needed? > > I quite deliberately didn't add a separate config option for 30bpp as > there is very little code that is added to the already existing 32bpp > code. In a sense 30bpp is just a different submode of the 32bpp > support with just a different color map, so I thought it made sense to > group it under CONFIG_VIDEO_32BPP. I did initially consider adding a > separate config option for it, but it quickly turns into an #ifdef > maze that makes it hard to understand the code. > > The CONFIG_DM_VIDEO check is just there to make sure the 30bpp is only > offered in the DM model. Based on recent discussions I expect the > !CONFIG_DM_VIDEO case to disappear in the near feature so adding 30bpp > support for the non-DM case doesn't make sense. > > The EFI GOP code currently doesn't check the CONFIG_VIDEO_BPP16 and > CONFIG_VIDEO_BPP32 defines to see which of these modes are enabled > within U-Boot, so we don't "hide" 16bpp support on platforms that just > support 32bpp either. > >> Which modes does the M1 support? > > We're not sure. It does support at least 8-bit (32bpp) and 10-bit > (30bpp) color depth modes. But the firmware tends to come up with > 10-bit color depth whenever it can and I'm not planning to add support > for changing the framebuffer mode on the M1, since the interface to do > that is "interesting" [1]. > > [1] See Alyssa Rozenzweig's talk at XDC 2021, > https://www.youtube.com/watch?v=uTZISTjqy9Q >> >>> + } else if (bpix == VIDEO_BPP30) { >>> + gopobj->info.pixel_format = EFI_GOT_BITMASK; >>> + gopobj->info.pixel_bitmask[0] = 0x3ff00000; /* red */ >>> + gopobj->info.pixel_bitmask[1] = 0x000ffc00; /* green */ >>> + gopobj->info.pixel_bitmask[2] = 0x000003ff; /* blue */ >>> + gopobj->info.pixel_bitmask[3] = 0xc0000000; /* reserved */ >>> +#endif >>> } else { >>> gopobj->info.pixel_format = EFI_GOT_BITMASK; >>> gopobj->info.pixel_bitmask[0] = 0xf800; /* red */ >>> >> >> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] efi_loader: GOP: Add 30bpp support 2021-09-17 11:29 ` Heinrich Schuchardt @ 2021-09-17 12:41 ` Mark Kettenis 0 siblings, 0 replies; 12+ messages in thread From: Mark Kettenis @ 2021-09-17 12:41 UTC (permalink / raw) To: Heinrich Schuchardt; +Cc: kettenis, u-boot, agust, agraf > From: Heinrich Schuchardt <xypron.glpk@gmx.de> > Date: Fri, 17 Sep 2021 13:29:06 +0200 > > On 9/17/21 11:23 AM, Mark Kettenis wrote: > >> From: Heinrich Schuchardt <xypron.glpk@gmx.de> > >> Date: Fri, 17 Sep 2021 04:56:31 +0200 > > > > Hi Heinrich, > > > >> On 9/16/21 3:01 PM, Mark Kettenis wrote: > >>> Provide correct framebuffer information for 30bpp modes. > >> > >> This is not enough to get a correct GOP implementation for the 30bpp mode. > >> > >> Have a look at efi_gop_pixel efi_vid16_to_blt_col() and > >> efi_blt_col_to_vid16() and where they are used. > > > > Ah right. This does indeed not support EFI_GRAPHICS_OUTPUT_PROTOCOL.Blt() > > correctly. I shouldn't be too hard to translate between XRGB2101010 > > and XRGB8888. Any ideas how I could test that code? > > setenv efi_selftest block image transfer > bootefi selftest > > should show an animated submarine with yellow portholes similar to > > https://gist.github.com/xypron/7e1f73408465da71e3ef946250e76776#file-sub-png > > Best regards Cool thanks. Looks like my implementation works! I'll wait a bit for feedback on the other diffs in this series before sending a v2 with that. Cheers, Mark > >>> Signed-off-by: Mark Kettenis <kettenis@openbsd.org> > >>> --- > >>> lib/efi_loader/efi_gop.c | 10 ++++++++++ > >>> 1 file changed, 10 insertions(+) > >>> > >>> diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c > >>> index 1206b2d7a2..42bf49b184 100644 > >>> --- a/lib/efi_loader/efi_gop.c > >>> +++ b/lib/efi_loader/efi_gop.c > >>> @@ -227,6 +227,7 @@ static efi_uintn_t gop_get_bpp(struct efi_gop *this) > >>> > >>> switch (gopobj->bpix) { > >>> #ifdef CONFIG_DM_VIDEO > >>> + case VIDEO_BPP30: > >>> case VIDEO_BPP32: > >>> #else > >>> case LCD_COLOR32: > >>> @@ -468,6 +469,7 @@ efi_status_t efi_gop_register(void) > >>> switch (bpix) { > >>> #ifdef CONFIG_DM_VIDEO > >>> case VIDEO_BPP16: > >>> + case VIDEO_BPP30: > >>> case VIDEO_BPP32: > >>> #else > >>> case LCD_COLOR32: > >>> @@ -518,6 +520,14 @@ efi_status_t efi_gop_register(void) > >>> #endif > >>> { > >>> gopobj->info.pixel_format = EFI_GOT_BGRA8; > >>> +#ifdef CONFIG_DM_VIDEO > >> > >> This symbol is not 30bpp specific. Is there a Kconfig variable that we > >> can use to hide 30bpp support where it is not needed? > > > > I quite deliberately didn't add a separate config option for 30bpp as > > there is very little code that is added to the already existing 32bpp > > code. In a sense 30bpp is just a different submode of the 32bpp > > support with just a different color map, so I thought it made sense to > > group it under CONFIG_VIDEO_32BPP. I did initially consider adding a > > separate config option for it, but it quickly turns into an #ifdef > > maze that makes it hard to understand the code. > > > > The CONFIG_DM_VIDEO check is just there to make sure the 30bpp is only > > offered in the DM model. Based on recent discussions I expect the > > !CONFIG_DM_VIDEO case to disappear in the near feature so adding 30bpp > > support for the non-DM case doesn't make sense. > > > > The EFI GOP code currently doesn't check the CONFIG_VIDEO_BPP16 and > > CONFIG_VIDEO_BPP32 defines to see which of these modes are enabled > > within U-Boot, so we don't "hide" 16bpp support on platforms that just > > support 32bpp either. > > > >> Which modes does the M1 support? > > > > We're not sure. It does support at least 8-bit (32bpp) and 10-bit > > (30bpp) color depth modes. But the firmware tends to come up with > > 10-bit color depth whenever it can and I'm not planning to add support > > for changing the framebuffer mode on the M1, since the interface to do > > that is "interesting" [1]. > > > > [1] See Alyssa Rozenzweig's talk at XDC 2021, > > https://www.youtube.com/watch?v=uTZISTjqy9Q > >> > >>> + } else if (bpix == VIDEO_BPP30) { > >>> + gopobj->info.pixel_format = EFI_GOT_BITMASK; > >>> + gopobj->info.pixel_bitmask[0] = 0x3ff00000; /* red */ > >>> + gopobj->info.pixel_bitmask[1] = 0x000ffc00; /* green */ > >>> + gopobj->info.pixel_bitmask[2] = 0x000003ff; /* blue */ > >>> + gopobj->info.pixel_bitmask[3] = 0xc0000000; /* reserved */ > >>> +#endif > >>> } else { > >>> gopobj->info.pixel_format = EFI_GOT_BITMASK; > >>> gopobj->info.pixel_bitmask[0] = 0xf800; /* red */ > >>> > >> > >> > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] efi_loader: GOP: Add 30bpp support 2021-09-16 13:01 ` [PATCH 2/3] efi_loader: GOP: " Mark Kettenis 2021-09-17 2:56 ` Heinrich Schuchardt @ 2021-09-25 13:40 ` Simon Glass 1 sibling, 0 replies; 12+ messages in thread From: Simon Glass @ 2021-09-25 13:40 UTC (permalink / raw) To: Mark Kettenis Cc: U-Boot Mailing List, Anatolij Gustschin, Heinrich Schuchardt, Alexander Graf Hi Mark, On Thu, 16 Sept 2021 at 07:02, Mark Kettenis <kettenis@openbsd.org> wrote: > > Provide correct framebuffer information for 30bpp modes. > > Signed-off-by: Mark Kettenis <kettenis@openbsd.org> > --- > lib/efi_loader/efi_gop.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c > index 1206b2d7a2..42bf49b184 100644 > --- a/lib/efi_loader/efi_gop.c > +++ b/lib/efi_loader/efi_gop.c > @@ -227,6 +227,7 @@ static efi_uintn_t gop_get_bpp(struct efi_gop *this) > > switch (gopobj->bpix) { > #ifdef CONFIG_DM_VIDEO > + case VIDEO_BPP30: > case VIDEO_BPP32: > #else > case LCD_COLOR32: > @@ -468,6 +469,7 @@ efi_status_t efi_gop_register(void) > switch (bpix) { > #ifdef CONFIG_DM_VIDEO > case VIDEO_BPP16: > + case VIDEO_BPP30: > case VIDEO_BPP32: > #else > case LCD_COLOR32: > @@ -518,6 +520,14 @@ efi_status_t efi_gop_register(void) > #endif > { > gopobj->info.pixel_format = EFI_GOT_BGRA8; > +#ifdef CONFIG_DM_VIDEO Can avoid #ifdefs please? Does this work? if (IS_ENABLED(CONFIG_DM_VIDEO) && IS_ENABLED(CONFIG_VIDEO_BPP30) && bpix == VIDEO_BPP30) Heinrich might know if we can just require DM_VIDEO. > + } else if (bpix == VIDEO_BPP30) { > + gopobj->info.pixel_format = EFI_GOT_BITMASK; > + gopobj->info.pixel_bitmask[0] = 0x3ff00000; /* red */ > + gopobj->info.pixel_bitmask[1] = 0x000ffc00; /* green */ > + gopobj->info.pixel_bitmask[2] = 0x000003ff; /* blue */ > + gopobj->info.pixel_bitmask[3] = 0xc0000000; /* reserved */ > +#endif > } else { > gopobj->info.pixel_format = EFI_GOT_BITMASK; > gopobj->info.pixel_bitmask[0] = 0xf800; /* red */ > -- > 2.33.0 > Tested on: Macbook Air M1 Tested-by: Simon Glass <sjg@chromium.org> Regards, Simon ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 3/3] video: simplefb: Add 30bpp support 2021-09-16 13:01 [PATCH 0/3] 30bpp framebuffer support Mark Kettenis 2021-09-16 13:01 ` [PATCH 1/3] video: Add 30bpp support Mark Kettenis 2021-09-16 13:01 ` [PATCH 2/3] efi_loader: GOP: " Mark Kettenis @ 2021-09-16 13:01 ` Mark Kettenis 2021-09-25 13:41 ` Simon Glass 2 siblings, 1 reply; 12+ messages in thread From: Mark Kettenis @ 2021-09-16 13:01 UTC (permalink / raw) To: u-boot Cc: Mark Kettenis, Anatolij Gustschin, Heinrich Schuchardt, Alexander Graf Recognize the canonical format strings for framebuffers in 30bpp mode. Signed-off-by: Mark Kettenis <kettenis@openbsd.org> --- drivers/video/simplefb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/video/simplefb.c b/drivers/video/simplefb.c index fd58426cf5..7e1cc4560f 100644 --- a/drivers/video/simplefb.c +++ b/drivers/video/simplefb.c @@ -52,6 +52,9 @@ static int simple_video_probe(struct udevice *dev) uc_priv->bpix = VIDEO_BPP16; } else if (strcmp(format, "a8b8g8r8") == 0) { uc_priv->bpix = VIDEO_BPP32; + } else if (strcmp(format, "a2r10g10b10") == 0 || + strcmp(format, "x2r10g10b10") == 0) { + uc_priv->bpix = VIDEO_BPP30; } else { printf("%s: invalid format: %s\n", __func__, format); return -EINVAL; -- 2.33.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] video: simplefb: Add 30bpp support 2021-09-16 13:01 ` [PATCH 3/3] video: simplefb: " Mark Kettenis @ 2021-09-25 13:41 ` Simon Glass 0 siblings, 0 replies; 12+ messages in thread From: Simon Glass @ 2021-09-25 13:41 UTC (permalink / raw) To: Mark Kettenis Cc: U-Boot Mailing List, Anatolij Gustschin, Heinrich Schuchardt, Alexander Graf On Thu, 16 Sept 2021 at 07:02, Mark Kettenis <kettenis@openbsd.org> wrote: > > Recognize the canonical format strings for framebuffers in > 30bpp mode. > > Signed-off-by: Mark Kettenis <kettenis@openbsd.org> > --- > drivers/video/simplefb.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/video/simplefb.c b/drivers/video/simplefb.c > index fd58426cf5..7e1cc4560f 100644 > --- a/drivers/video/simplefb.c > +++ b/drivers/video/simplefb.c > @@ -52,6 +52,9 @@ static int simple_video_probe(struct udevice *dev) > uc_priv->bpix = VIDEO_BPP16; > } else if (strcmp(format, "a8b8g8r8") == 0) { > uc_priv->bpix = VIDEO_BPP32; > + } else if (strcmp(format, "a2r10g10b10") == 0 || > + strcmp(format, "x2r10g10b10") == 0) { > + uc_priv->bpix = VIDEO_BPP30; > } else { > printf("%s: invalid format: %s\n", __func__, format); > return -EINVAL; > -- > 2.33.0 > Reviewed-by: Simon Glass <sjg@chromium.org> Tested on: Macbook Air M1 Tested-by: Simon Glass <sjg@chromium.org> ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-09-25 16:55 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-09-16 13:01 [PATCH 0/3] 30bpp framebuffer support Mark Kettenis 2021-09-16 13:01 ` [PATCH 1/3] video: Add 30bpp support Mark Kettenis 2021-09-25 13:40 ` Simon Glass 2021-09-25 16:55 ` Mark Kettenis 2021-09-16 13:01 ` [PATCH 2/3] efi_loader: GOP: " Mark Kettenis 2021-09-17 2:56 ` Heinrich Schuchardt 2021-09-17 9:23 ` Mark Kettenis 2021-09-17 11:29 ` Heinrich Schuchardt 2021-09-17 12:41 ` Mark Kettenis 2021-09-25 13:40 ` Simon Glass 2021-09-16 13:01 ` [PATCH 3/3] video: simplefb: " Mark Kettenis 2021-09-25 13:41 ` Simon Glass
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.