Skip to content

Commit 11f9eb8

Browse files
author
Jocelyn Falempe
committed
drm/mgag200: Fix gamma lut not initialized for G200ER, G200EV, G200SE
When mgag200 switched from simple KMS to regular atomic helpers, the initialization of the gamma settings was lost. This leads to a black screen, if the bios/uefi doesn't use the same pixel color depth. This has been fixed with commit ad81e23 ("drm/mgag200: Fix gamma lut not initialized.") for most G200, but G200ER, G200EV, G200SE use their own version of crtc_helper_atomic_enable() and need to be fixed too. Fixes: 1baf912 ("drm/mgag200: Replace simple-KMS with regular atomic helpers") Cc: <stable@vger.kernel.org> #v6.1+ Reported-by: Roger Sewell <roger.sewell@cantab.net> Suggested-by: Roger Sewell <roger.sewell@cantab.net> Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patchwork.freedesktop.org/patch/msgid/20231214163849.359691-1-jfalempe@redhat.com
1 parent 35ba6bd commit 11f9eb8

File tree

5 files changed

+25
-5
lines changed

5 files changed

+25
-5
lines changed

drivers/gpu/drm/mgag200/mgag200_drv.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,11 @@ void mgag200_primary_plane_helper_atomic_disable(struct drm_plane *plane,
392392
.destroy = drm_plane_cleanup, \
393393
DRM_GEM_SHADOW_PLANE_FUNCS
394394

395+
void mgag200_crtc_set_gamma_linear(struct mga_device *mdev, const struct drm_format_info *format);
396+
void mgag200_crtc_set_gamma(struct mga_device *mdev,
397+
const struct drm_format_info *format,
398+
struct drm_color_lut *lut);
399+
395400
enum drm_mode_status mgag200_crtc_helper_mode_valid(struct drm_crtc *crtc,
396401
const struct drm_display_mode *mode);
397402
int mgag200_crtc_helper_atomic_check(struct drm_crtc *crtc, struct drm_atomic_state *new_state);

drivers/gpu/drm/mgag200/mgag200_g200er.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,11 @@ static void mgag200_g200er_crtc_helper_atomic_enable(struct drm_crtc *crtc,
202202

203203
mgag200_g200er_reset_tagfifo(mdev);
204204

205+
if (crtc_state->gamma_lut)
206+
mgag200_crtc_set_gamma(mdev, format, crtc_state->gamma_lut->data);
207+
else
208+
mgag200_crtc_set_gamma_linear(mdev, format);
209+
205210
mgag200_enable_display(mdev);
206211

207212
if (funcs->enable_vidrst)

drivers/gpu/drm/mgag200/mgag200_g200ev.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,11 @@ static void mgag200_g200ev_crtc_helper_atomic_enable(struct drm_crtc *crtc,
203203

204204
mgag200_g200ev_set_hiprilvl(mdev);
205205

206+
if (crtc_state->gamma_lut)
207+
mgag200_crtc_set_gamma(mdev, format, crtc_state->gamma_lut->data);
208+
else
209+
mgag200_crtc_set_gamma_linear(mdev, format);
210+
206211
mgag200_enable_display(mdev);
207212

208213
if (funcs->enable_vidrst)

drivers/gpu/drm/mgag200/mgag200_g200se.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,11 @@ static void mgag200_g200se_crtc_helper_atomic_enable(struct drm_crtc *crtc,
334334

335335
mgag200_g200se_set_hiprilvl(mdev, adjusted_mode, format);
336336

337+
if (crtc_state->gamma_lut)
338+
mgag200_crtc_set_gamma(mdev, format, crtc_state->gamma_lut->data);
339+
else
340+
mgag200_crtc_set_gamma_linear(mdev, format);
341+
337342
mgag200_enable_display(mdev);
338343

339344
if (funcs->enable_vidrst)

drivers/gpu/drm/mgag200/mgag200_mode.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
* This file contains setup code for the CRTC.
2929
*/
3030

31-
static void mgag200_crtc_set_gamma_linear(struct mga_device *mdev,
32-
const struct drm_format_info *format)
31+
void mgag200_crtc_set_gamma_linear(struct mga_device *mdev,
32+
const struct drm_format_info *format)
3333
{
3434
int i;
3535

@@ -65,9 +65,9 @@ static void mgag200_crtc_set_gamma_linear(struct mga_device *mdev,
6565
}
6666
}
6767

68-
static void mgag200_crtc_set_gamma(struct mga_device *mdev,
69-
const struct drm_format_info *format,
70-
struct drm_color_lut *lut)
68+
void mgag200_crtc_set_gamma(struct mga_device *mdev,
69+
const struct drm_format_info *format,
70+
struct drm_color_lut *lut)
7171
{
7272
int i;
7373

0 commit comments

Comments
 (0)