]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Correct color depth for SelectCRTC_Source
authorTimur Kristóf <timur.kristof@gmail.com>
Sat, 6 Dec 2025 02:31:03 +0000 (03:31 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 5 Jan 2026 22:31:24 +0000 (17:31 -0500)
Pass the correct enum values as expected by the VBIOS.
Previously the actual bit depth integer value was passed,
which was a mistake.

Fixes: 7fb4f254c8eb ("drm/amd/display: Add SelectCRTC_Source to BIOS parser")
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit cdf6e4c0cdab129ffc4e41a8ac53a0738f805072)

drivers/gpu/drm/amd/display/dc/bios/command_table.c
drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
drivers/gpu/drm/amd/display/include/bios_parser_types.h

index 22457f417e65c76b5613018a2b50f9a048744ca6..d56c0d3763ddd26a2d484d0aceff0a88e46dcf69 100644 (file)
@@ -1797,7 +1797,30 @@ static enum bp_result select_crtc_source_v3(
                &params.ucEncodeMode))
                return BP_RESULT_BADINPUT;
 
-       params.ucDstBpc = bp_params->bit_depth;
+       switch (bp_params->color_depth) {
+       case COLOR_DEPTH_UNDEFINED:
+               params.ucDstBpc = PANEL_BPC_UNDEFINE;
+               break;
+       case COLOR_DEPTH_666:
+               params.ucDstBpc = PANEL_6BIT_PER_COLOR;
+               break;
+       default:
+       case COLOR_DEPTH_888:
+               params.ucDstBpc = PANEL_8BIT_PER_COLOR;
+               break;
+       case COLOR_DEPTH_101010:
+               params.ucDstBpc = PANEL_10BIT_PER_COLOR;
+               break;
+       case COLOR_DEPTH_121212:
+               params.ucDstBpc = PANEL_12BIT_PER_COLOR;
+               break;
+       case COLOR_DEPTH_141414:
+               dm_error("14-bit color not supported by SelectCRTC_Source v3\n");
+               break;
+       case COLOR_DEPTH_161616:
+               params.ucDstBpc = PANEL_16BIT_PER_COLOR;
+               break;
+       }
 
        if (EXEC_BIOS_CMD_TABLE(SelectCRTC_Source, params))
                result = BP_RESULT_OK;
index 0cdd8c74abdfa1a7e6cbccf42f60e73930ff5fd5..ebd74b43e935eeab6333e77238ca98dcaad80e96 100644 (file)
@@ -1610,38 +1610,12 @@ dce110_select_crtc_source(struct pipe_ctx *pipe_ctx)
        struct dc_bios *bios = link->ctx->dc_bios;
        struct bp_crtc_source_select crtc_source_select = {0};
        enum engine_id engine_id = link->link_enc->preferred_engine;
-       uint8_t bit_depth;
 
        if (dc_is_rgb_signal(pipe_ctx->stream->signal))
                engine_id = link->link_enc->analog_engine;
 
-       switch (pipe_ctx->stream->timing.display_color_depth) {
-       case COLOR_DEPTH_UNDEFINED:
-               bit_depth = 0;
-               break;
-       case COLOR_DEPTH_666:
-               bit_depth = 6;
-               break;
-       default:
-       case COLOR_DEPTH_888:
-               bit_depth = 8;
-               break;
-       case COLOR_DEPTH_101010:
-               bit_depth = 10;
-               break;
-       case COLOR_DEPTH_121212:
-               bit_depth = 12;
-               break;
-       case COLOR_DEPTH_141414:
-               bit_depth = 14;
-               break;
-       case COLOR_DEPTH_161616:
-               bit_depth = 16;
-               break;
-       }
-
        crtc_source_select.controller_id = CONTROLLER_ID_D0 + pipe_ctx->stream_res.tg->inst;
-       crtc_source_select.bit_depth = bit_depth;
+       crtc_source_select.color_depth = pipe_ctx->stream->timing.display_color_depth;
        crtc_source_select.engine_id = engine_id;
        crtc_source_select.sink_signal = pipe_ctx->stream->signal;
 
index 973b6bdbac63e5007f494a362987c58096fb24d9..f40dc612ec73b655507ff805db5bbe9aa3fe22a7 100644 (file)
@@ -136,7 +136,7 @@ struct bp_crtc_source_select {
        enum engine_id engine_id;
        enum controller_id controller_id;
        enum signal_type sink_signal;
-       uint8_t bit_depth;
+       enum dc_color_depth color_depth;
 };
 
 struct bp_transmitter_control {