Hi Thomas, On Fri, Feb 18, 2022 at 9:14 AM Thomas Zimmermann <tzimmermann@xxxxxxx> wrote: > Am 17.02.22 um 17:12 schrieb Geert Uytterhoeven: > > On Thu, Feb 17, 2022 at 3:57 PM Thomas Zimmermann <tzimmermann@xxxxxxx> wrote: > >> Am 15.02.22 um 17:52 schrieb Geert Uytterhoeven: > >>> Add support for color-indexed frame buffer formats with two, four, and > >>> sixteen colors to the DRM framebuffer helper functions: > >>> 1. Add support for depths 1/2/4 to the damage helper, > >>> 2. For color-indexed modes, the length of the color bitfields must be > >>> set to the color depth, else the logo code may pick a logo with too > >>> many colors. Drop the incorrect DAC width comment, which > >>> originates from the i915 driver. > >>> 3. Accept C[124] modes when validating or filling in struct > >>> fb_var_screeninfo, and use the correct number of bits per pixel. > >>> 4. Set the visual to FB_VISUAL_PSEUDOCOLOR for all supported > >>> color-indexed modes. > >>> > >>> Signed-off-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> > > > >>> --- a/drivers/gpu/drm/drm_fb_helper.c > >>> +++ b/drivers/gpu/drm/drm_fb_helper.c > >>> @@ -376,12 +376,34 @@ static void drm_fb_helper_damage_blit_real(struct drm_fb_helper *fb_helper, > >>> struct iosys_map *dst) > >>> { > >>> struct drm_framebuffer *fb = fb_helper->fb; > >>> - unsigned int cpp = fb->format->cpp[0]; > >>> - size_t offset = clip->y1 * fb->pitches[0] + clip->x1 * cpp; > >>> - void *src = fb_helper->fbdev->screen_buffer + offset; > >>> - size_t len = (clip->x2 - clip->x1) * cpp; > >>> + size_t offset = clip->y1 * fb->pitches[0]; > >>> + size_t len = clip->x2 - clip->x1; > >>> unsigned int y; > >>> + void *src; > >>> > >>> + switch (fb->format->depth) { > >> > >> The depth field is deprecated. It's probably better to use > >> fb->format->format and test against 4CC codes. > > > > The reason I checked for depth instead of a 4CC code is that the only > > thing that matters here is the number of bits per pixel. Hence this > > function won't need any changes to support R1, R2, R4, and D1 later. > > When we get here, we already know that we are using a format that > > is supported by the fbdev helper code, and thus passed the 4CC > > checks elsewhere. > > At some point, we will probably have to change several of these tests to > 4cc. C8 and RGB332 both have 8-bit depth/bpp; same for C4 and RGB121; or > whatever low-color formats we also want to add. > > It's not a blocker now, but maybe something to keep in mind. > > > > > Alternatively, we could introduce drm_format_info_bpp() earlier in > > the series, and use that? > > Having a helper for this might indeed be useful. We use depth for the > number of color bits and bpp for the number of bits in he pixel. That's > important for XRGB8888, where depth is 24, or XRGB555 where depth is 15. > > If that makes sense, maybe have a helper for depth and one for bpp, even > if they return the same value in most of the cases. The helper for bpp is introduced in "[PATCH 3/8] drm/fourcc: Add drm_format_info_bpp() helper". I don't think we need a helper for depth, there's already the .depth field. It might be deprecated, but it's still used? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds