[PATCH] drm/amd/display: only collect data if debug gamut_remap is available

Melissa Wen mwen at igalia.com
Tue May 13 18:36:42 UTC 2025



On 13/05/2025 15:27, Alex Hung wrote:
>
>
> On 4/25/25 14:49, Melissa Wen wrote:
>> Color gamut_remap state log may be not avaiable for some hw versions, so
>> prevent null pointer dereference by checking it there is a function to
>> collect data for this hw version.
>>
>> Signed-off-by: Melissa Wen <mwen at igalia.com>
>> ---
>>   .../amd/display/dc/hwss/dcn20/dcn20_hwseq.c   | 26 +++++++++++++------
>>   .../amd/display/dc/hwss/dcn30/dcn30_hwseq.c   | 24 ++++++++++++-----
>>   2 files changed, 35 insertions(+), 15 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c 
>> b/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
>> index 5e78b553adbd..b0f9e46e202a 100644
>> --- a/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
>> +++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
>> @@ -76,6 +76,7 @@ void dcn20_log_color_state(struct dc *dc,
>>   {
>>       struct dc_context *dc_ctx = dc->ctx;
>>       struct resource_pool *pool = dc->res_pool;
>> +    bool is_gamut_remap_available;
>>       int i;
>>         DTN_INFO("DPP:  DGAM mode  SHAPER mode  3DLUT mode 3DLUT bit 
>> depth"
>> @@ -89,15 +90,15 @@ void dcn20_log_color_state(struct dc *dc,
>>           struct dcn_dpp_state s = {0};
>>             dpp->funcs->dpp_read_state(dpp, &s);
>> -        dpp->funcs->dpp_get_gamut_remap(dpp, &s.gamut_remap);
>> +        if (dpp->funcs->dpp_get_gamut_remap) {
>> +            dpp->funcs->dpp_get_gamut_remap(dpp, &s.gamut_remap);
>> +            is_gamut_remap_available = true;
>> +        }
>>             if (!s.is_enabled)
>>               continue;
>>   -        DTN_INFO("[%2d]:  %8s  %11s  %10s  %15s  %10s  %9s %12s  "
>> -             "%010lld %010lld %010lld %010lld "
>> -             "%010lld %010lld %010lld %010lld "
>> -             "%010lld %010lld %010lld %010lld",
>> +        DTN_INFO("[%2d]:  %8s  %11s  %10s  %15s  %10s  %9s",
>>               dpp->inst,
>>               (s.dgam_lut_mode == 0) ? "Bypass" :
>>                ((s.dgam_lut_mode == 1) ? "sRGB" :
>> @@ -114,10 +115,17 @@ void dcn20_log_color_state(struct dc *dc,
>>               (s.lut3d_bit_depth <= 0) ? "12-bit" : "10-bit",
>>               (s.lut3d_size == 0) ? "17x17x17" : "9x9x9",
>>               (s.rgam_lut_mode == 1) ? "RAM A" :
>> -             ((s.rgam_lut_mode == 1) ? "RAM B" : "Bypass"),
>> +             ((s.rgam_lut_mode == 1) ? "RAM B" : "Bypass"));
>> +
>> +        if (is_gamut_remap_available) {
>
> is_gamut_remap_available can be uninitialized before used.

Ops. Let me send a new version.
>
>> +            DTN_INFO("  %12s  "
>> +                 "%010lld %010lld %010lld %010lld "
>> +                 "%010lld %010lld %010lld %010lld "
>> +                 "%010lld %010lld %010lld %010lld",
>> +
>>               (s.gamut_remap.gamut_adjust_type == 0) ? "Bypass" :
>> -             ((s.gamut_remap.gamut_adjust_type == 1) ? "HW" :
>> -                                   "SW"),
>> +                ((s.gamut_remap.gamut_adjust_type == 1) ? "HW" :
>> +                                      "SW"),
>>               s.gamut_remap.temperature_matrix[0].value,
>>               s.gamut_remap.temperature_matrix[1].value,
>>               s.gamut_remap.temperature_matrix[2].value,
>> @@ -130,6 +138,8 @@ void dcn20_log_color_state(struct dc *dc,
>>               s.gamut_remap.temperature_matrix[9].value,
>>               s.gamut_remap.temperature_matrix[10].value,
>>               s.gamut_remap.temperature_matrix[11].value);
>> +        }
>> +
>>           DTN_INFO("\n");
>>       }
>>       DTN_INFO("\n");
>> diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c 
>> b/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
>> index e89ebfda4873..931cd2e886b8 100644
>> --- a/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
>> +++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
>> @@ -74,6 +74,7 @@ void dcn30_log_color_state(struct dc *dc,
>>   {
>>       struct dc_context *dc_ctx = dc->ctx;
>>       struct resource_pool *pool = dc->res_pool;
>> +    bool is_gamut_remap_available;
>>       int i;
>>         DTN_INFO("DPP:  DGAM ROM  DGAM ROM type  DGAM LUT SHAPER mode"
>> @@ -88,16 +89,16 @@ void dcn30_log_color_state(struct dc *dc,
>>           struct dcn_dpp_state s = {0};
>>             dpp->funcs->dpp_read_state(dpp, &s);
>> -        dpp->funcs->dpp_get_gamut_remap(dpp, &s.gamut_remap);
>> +
>> +        if (dpp->funcs->dpp_get_gamut_remap) {
>> +            dpp->funcs->dpp_get_gamut_remap(dpp, &s.gamut_remap);
>> +            is_gamut_remap_available = true;
>> +        }
>>             if (!s.is_enabled)
>>               continue;
>>   -        DTN_INFO("[%2d]:  %7x  %13s  %8s  %11s  %10s  %15s %10s  %9s"
>> -             "  %12s  "
>> -             "%010lld %010lld %010lld %010lld "
>> -             "%010lld %010lld %010lld %010lld "
>> -             "%010lld %010lld %010lld %010lld",
>> +        DTN_INFO("[%2d]:  %7x  %13s  %8s  %11s  %10s  %15s %10s  %9s",
>>               dpp->inst,
>>               s.pre_dgam_mode,
>>               (s.pre_dgam_select == 0) ? "sRGB" :
>> @@ -121,7 +122,14 @@ void dcn30_log_color_state(struct dc *dc,
>>               (s.lut3d_size == 0) ? "17x17x17" : "9x9x9",
>>               (s.rgam_lut_mode == 0) ? "Bypass" :
>>                ((s.rgam_lut_mode == 1) ? "RAM A" :
>> -                           "RAM B"),
>> +                           "RAM B"));
>> +
>> +        if (is_gamut_remap_available) {
>
> is_gamut_remap_available can be uninitialized before used.
>
>> +            DTN_INFO("  %12s  "
>> +                 "%010lld %010lld %010lld %010lld "
>> +                 "%010lld %010lld %010lld %010lld "
>> +                 "%010lld %010lld %010lld %010lld",
>> +
>>               (s.gamut_remap.gamut_adjust_type == 0) ? "Bypass" :
>>                   ((s.gamut_remap.gamut_adjust_type == 1) ? "HW" :
>>                                         "SW"),
>> @@ -137,6 +145,8 @@ void dcn30_log_color_state(struct dc *dc,
>>               s.gamut_remap.temperature_matrix[9].value,
>>               s.gamut_remap.temperature_matrix[10].value,
>>               s.gamut_remap.temperature_matrix[11].value);
>> +        }
>> +
>>           DTN_INFO("\n");
>>       }
>>       DTN_INFO("\n");
>



More information about the amd-gfx mailing list