Commit f9f40321 authored by Melissa Wen's avatar Melissa Wen Committed by Alex Deucher
Browse files

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



Color gamut_remap state log may be not available for some hw versions,
so prevent null pointer dereference by checking if there is a function
to collect data for this hw version.

Signed-off-by: default avatarMelissa Wen <mwen@igalia.com>
Reviewed-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent dd649566
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -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 = false;
	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);
		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,7 +115,14 @@ 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) {
			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"),
@@ -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");
+17 −7
Original line number Diff line number Diff line
@@ -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 = false;
	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);

		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) {
			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");