aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0110-drm-amd-display-Fix-color-module-crash-when-hotplug-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0110-drm-amd-display-Fix-color-module-crash-when-hotplug-.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0110-drm-amd-display-Fix-color-module-crash-when-hotplug-.patch707
1 files changed, 0 insertions, 707 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0110-drm-amd-display-Fix-color-module-crash-when-hotplug-.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0110-drm-amd-display-Fix-color-module-crash-when-hotplug-.patch
deleted file mode 100644
index b18e530f..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.14.71/0110-drm-amd-display-Fix-color-module-crash-when-hotplug-.patch
+++ /dev/null
@@ -1,707 +0,0 @@
-From 732bedba7cc5b5dc772191b824182f5f859d1d26 Mon Sep 17 00:00:00 2001
-From: Anthony Koo <Anthony.Koo@amd.com>
-Date: Fri, 23 Dec 2016 15:43:04 -0500
-Subject: [PATCH 0110/4131] drm/amd/display: Fix color module crash when
- hotplug monitors.
-
-Assume we have two monitors, and monitor 0 is unplugged.
-This shifts the internal state of index 1 to index 0 by memcpy.
-This means there are two copies of the gamma pointer previously
-owned by state[1].
-
-When hotplug occurs, this re-assigns the new display with state[1],
-which has some garbage left over from before, including the
-gamma pointer.
-
-We should correctly clear unused states and re-initialize correctly.
-
-Also, due to async nature of the hotplug and other events like commit,
-we also need to safe guard against sink that has been removed.
-
-Signed-off-by: Anthony Koo <anthony.koo@amd.com>
-Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
-Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
-Acked-by: Harry Wentland <Harry.Wentland@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
----
- drivers/gpu/drm/amd/display/modules/color/color.c | 309 ++++++++++++----------
- 1 file changed, 175 insertions(+), 134 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/display/modules/color/color.c b/drivers/gpu/drm/amd/display/modules/color/color.c
-index 3611de9..74298c8 100644
---- a/drivers/gpu/drm/amd/display/modules/color/color.c
-+++ b/drivers/gpu/drm/amd/display/modules/color/color.c
-@@ -643,10 +643,10 @@ static void initialize_fix_point_color_values(
- /* Given a specific dc_sink* this function finds its equivalent
- * on the dc_sink array and returns the corresponding index
- */
--static unsigned int sink_index_from_sink(struct core_color *core_color,
-+static int sink_index_from_sink(struct core_color *core_color,
- const struct dc_sink *sink)
- {
-- unsigned int index = 0;
-+ int index = 0;
-
- for (index = 0; index < core_color->num_sinks; index++)
- if (core_color->caps[index].sink == sink)
-@@ -654,7 +654,7 @@ static unsigned int sink_index_from_sink(struct core_color *core_color,
-
- /* Could not find sink requested */
- ASSERT(false);
-- return index;
-+ return -1;
- }
-
- static void calculate_rgb_matrix_legacy(struct core_color *core_color,
-@@ -1427,6 +1427,65 @@ static bool update_color_gamut_data(struct color_gamut_data *input_data,
- return true;
- }
-
-+void initialize_color_state(struct core_color *core_color, int index)
-+{
-+ core_color->state[index].user_enable_color_temperature = true;
-+
-+ core_color->state[index].custom_color_temperature = 6500;
-+
-+ core_color->state[index].contrast.current = 100;
-+ core_color->state[index].contrast.min = 0;
-+ core_color->state[index].contrast.max = 200;
-+
-+ core_color->state[index].saturation.current = 100;
-+ core_color->state[index].saturation.min = 0;
-+ core_color->state[index].saturation.max = 200;
-+
-+ core_color->state[index].brightness.current = 0;
-+ core_color->state[index].brightness.min = -100;
-+ core_color->state[index].brightness.max = 100;
-+
-+ core_color->state[index].hue.current = 0;
-+ core_color->state[index].hue.min = -30;
-+ core_color->state[index].hue.max = 30;
-+
-+ core_color->state[index].gamma = NULL;
-+
-+ core_color->state[index].preferred_quantization_range =
-+ QUANTIZATION_RANGE_FULL;
-+
-+ core_color->state[index].source_gamut.color_space =
-+ color_space_srgb;
-+ core_color->state[index].source_gamut.white_point =
-+ color_white_point_type_6500k_noon;
-+ core_color->state[index].source_gamut.gamut.blueX = 1500;
-+ core_color->state[index].source_gamut.gamut.blueY = 600;
-+ core_color->state[index].source_gamut.gamut.greenX = 3000;
-+ core_color->state[index].source_gamut.gamut.greenY = 6000;
-+ core_color->state[index].source_gamut.gamut.redX = 6400;
-+ core_color->state[index].source_gamut.gamut.redY = 3300;
-+ core_color->state[index].source_gamut.gamut.whiteX = 3127;
-+ core_color->state[index].source_gamut.gamut.whiteY = 3290;
-+
-+ core_color->state[index].destination_gamut.color_space =
-+ color_space_srgb;
-+ core_color->state[index].destination_gamut.white_point =
-+ color_white_point_type_6500k_noon;
-+ core_color->state[index].destination_gamut.gamut.blueX = 1500;
-+ core_color->state[index].destination_gamut.gamut.blueY = 600;
-+ core_color->state[index].destination_gamut.gamut.greenX = 3000;
-+ core_color->state[index].destination_gamut.gamut.greenY = 6000;
-+ core_color->state[index].destination_gamut.gamut.redX = 6400;
-+ core_color->state[index].destination_gamut.gamut.redY = 3300;
-+ core_color->state[index].destination_gamut.gamut.whiteX = 3127;
-+ core_color->state[index].destination_gamut.gamut.whiteY = 3290;
-+
-+ core_color->state[index].input_transfer_function =
-+ transfer_func_srgb;
-+ core_color->state[index].output_transfer_function =
-+ transfer_func_srgb;
-+}
-+
- struct mod_color *mod_color_create(struct dc *dc)
- {
- int i = 0;
-@@ -1452,54 +1511,7 @@ struct mod_color *mod_color_create(struct dc *dc)
-
- /*hardcoded to sRGB with 6500 color temperature*/
- for (i = 0; i < MOD_COLOR_MAX_CONCURRENT_SINKS; i++) {
-- core_color->state[i].source_gamut.color_space =
-- color_space_srgb;
-- core_color->state[i].source_gamut.white_point =
-- color_white_point_type_6500k_noon;
-- core_color->state[i].source_gamut.gamut.blueX = 1500;
-- core_color->state[i].source_gamut.gamut.blueY = 600;
-- core_color->state[i].source_gamut.gamut.greenX = 3000;
-- core_color->state[i].source_gamut.gamut.greenY = 6000;
-- core_color->state[i].source_gamut.gamut.redX = 6400;
-- core_color->state[i].source_gamut.gamut.redY = 3300;
-- core_color->state[i].source_gamut.gamut.whiteX = 3127;
-- core_color->state[i].source_gamut.gamut.whiteY = 3290;
--
-- core_color->state[i].destination_gamut.color_space =
-- color_space_srgb;
-- core_color->state[i].destination_gamut.white_point =
-- color_white_point_type_6500k_noon;
-- core_color->state[i].destination_gamut.gamut.blueX = 1500;
-- core_color->state[i].destination_gamut.gamut.blueY = 600;
-- core_color->state[i].destination_gamut.gamut.greenX = 3000;
-- core_color->state[i].destination_gamut.gamut.greenY = 6000;
-- core_color->state[i].destination_gamut.gamut.redX = 6400;
-- core_color->state[i].destination_gamut.gamut.redY = 3300;
-- core_color->state[i].destination_gamut.gamut.whiteX = 3127;
-- core_color->state[i].destination_gamut.gamut.whiteY = 3290;
--
-- core_color->state[i].input_transfer_function =
-- transfer_func_srgb;
-- core_color->state[i].output_transfer_function =
-- transfer_func_srgb;
--
-- core_color->state[i].custom_color_temperature = 6500;
--
-- core_color->state[i].contrast.current = 100;
-- core_color->state[i].contrast.min = 0;
-- core_color->state[i].contrast.max = 200;
--
-- core_color->state[i].saturation.current = 100;
-- core_color->state[i].saturation.min = 0;
-- core_color->state[i].saturation.max = 200;
--
-- core_color->state[i].brightness.current = 0;
-- core_color->state[i].brightness.min = -100;
-- core_color->state[i].brightness.max = 100;
--
-- core_color->state[i].hue.current = 0;
-- core_color->state[i].hue.min = -30;
-- core_color->state[i].hue.max = 30;
-+ initialize_color_state(core_color, i);
- }
-
- if (core_color->state == NULL)
-@@ -1589,8 +1601,8 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- if (core_color->num_sinks < MOD_COLOR_MAX_CONCURRENT_SINKS) {
- dc_sink_retain(sink);
- core_color->caps[core_color->num_sinks].sink = sink;
-- core_color->state[core_color->num_sinks].
-- user_enable_color_temperature = true;
-+
-+ initialize_color_state(core_color, core_color->num_sinks);
-
- core_color->edid_caps[core_color->num_sinks].colorimetry_caps =
- edid_caps->colorimetry_caps;
-@@ -1601,7 +1613,6 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- flag.save_per_edid = true;
- flag.save_per_link = false;
-
--
- if (dm_read_persistent_data(core_dc->ctx, sink,
- COLOR_REGISTRY_NAME,
- "enablecolortempadj",
-@@ -1610,9 +1621,6 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- core_color->state[core_color->num_sinks].
- user_enable_color_temperature =
- persistent_color_temp_enable;
-- else
-- core_color->state[core_color->num_sinks].
-- user_enable_color_temperature = true;
-
- if (dm_read_persistent_data(core_dc->ctx, sink,
- COLOR_REGISTRY_NAME,
-@@ -1622,9 +1630,6 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- core_color->state[core_color->num_sinks].
- custom_color_temperature
- = persistent_custom_color_temp;
-- else
-- core_color->state[core_color->num_sinks].
-- custom_color_temperature = 6500;
-
- if (dm_read_persistent_data(core_dc->ctx, sink,
- COLOR_REGISTRY_NAME,
-@@ -1635,23 +1640,6 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- memcpy(&core_color->state[core_color->num_sinks].
- source_gamut.gamut, &persistent_source_gamut,
- sizeof(struct color_space_coordinates));
-- } else {
-- core_color->state[core_color->num_sinks].
-- source_gamut.gamut.blueX = 1500;
-- core_color->state[core_color->num_sinks].
-- source_gamut.gamut.blueY = 600;
-- core_color->state[core_color->num_sinks].
-- source_gamut.gamut.greenX = 3000;
-- core_color->state[core_color->num_sinks].
-- source_gamut.gamut.greenY = 6000;
-- core_color->state[core_color->num_sinks].
-- source_gamut.gamut.redX = 6400;
-- core_color->state[core_color->num_sinks].
-- source_gamut.gamut.redY = 3300;
-- core_color->state[core_color->num_sinks].
-- source_gamut.gamut.whiteX = 3127;
-- core_color->state[core_color->num_sinks].
-- source_gamut.gamut.whiteY = 3290;
- }
-
- if (dm_read_persistent_data(core_dc->ctx, sink, COLOR_REGISTRY_NAME,
-@@ -1663,23 +1651,6 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- destination_gamut.gamut,
- &persistent_destination_gamut,
- sizeof(struct color_space_coordinates));
-- } else {
-- core_color->state[core_color->num_sinks].
-- destination_gamut.gamut.blueX = 1500;
-- core_color->state[core_color->num_sinks].
-- destination_gamut.gamut.blueY = 600;
-- core_color->state[core_color->num_sinks].
-- destination_gamut.gamut.greenX = 3000;
-- core_color->state[core_color->num_sinks].
-- destination_gamut.gamut.greenY = 6000;
-- core_color->state[core_color->num_sinks].
-- destination_gamut.gamut.redX = 6400;
-- core_color->state[core_color->num_sinks].
-- destination_gamut.gamut.redY = 3300;
-- core_color->state[core_color->num_sinks].
-- destination_gamut.gamut.whiteX = 3127;
-- core_color->state[core_color->num_sinks].
-- destination_gamut.gamut.whiteY = 3290;
- }
-
- if (dm_read_persistent_data(core_dc->ctx, sink, COLOR_REGISTRY_NAME,
-@@ -1688,9 +1659,6 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- sizeof(int), &flag))
- core_color->state[core_color->num_sinks].
- brightness.current = persistent_brightness;
-- else
-- core_color->state[core_color->num_sinks].
-- brightness.current = 0;
-
- if (dm_read_persistent_data(core_dc->ctx, sink, COLOR_REGISTRY_NAME,
- "contrast",
-@@ -1698,9 +1666,6 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- sizeof(int), &flag))
- core_color->state[core_color->num_sinks].
- contrast.current = persistent_contrast;
-- else
-- core_color->state[core_color->num_sinks].
-- contrast.current = 100;
-
- if (dm_read_persistent_data(core_dc->ctx, sink, COLOR_REGISTRY_NAME,
- "hue",
-@@ -1708,9 +1673,6 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- sizeof(int), &flag))
- core_color->state[core_color->num_sinks].
- hue.current = persistent_hue;
-- else
-- core_color->state[core_color->num_sinks].
-- hue.current = 0;
-
- if (dm_read_persistent_data(core_dc->ctx, sink, COLOR_REGISTRY_NAME,
- "saturation",
-@@ -1718,9 +1680,6 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- sizeof(int), &flag))
- core_color->state[core_color->num_sinks].
- saturation.current = persistent_saturation;
-- else
-- core_color->state[core_color->num_sinks].
-- saturation.current = 100;
-
- if (dm_read_persistent_data(core_dc->ctx, sink,
- COLOR_REGISTRY_NAME,
-@@ -1730,9 +1689,6 @@ bool mod_color_add_sink(struct mod_color *mod_color, const struct dc_sink *sink,
- core_color->state[core_color->num_sinks].
- preferred_quantization_range =
- persistent_quantization_range;
-- else
-- core_color->state[core_color->num_sinks].
-- preferred_quantization_range = QUANTIZATION_RANGE_FULL;
-
- core_color->num_sinks++;
- return true;
-@@ -1751,6 +1707,10 @@ bool mod_color_remove_sink(struct mod_color *mod_color,
- if (core_color->state[i].gamma) {
- dc_gamma_release(&core_color->state[i].gamma);
- }
-+ memset(&core_color->state[i], 0,
-+ sizeof(struct color_state));
-+ memset(&core_color->edid_caps[i], 0,
-+ sizeof(struct color_edid_caps));
-
- /* To remove this sink, shift everything after down */
- for (j = i; j < core_color->num_sinks - 1; j++) {
-@@ -1766,6 +1726,11 @@ bool mod_color_remove_sink(struct mod_color *mod_color,
- sizeof(struct color_edid_caps));
- }
-
-+ memset(&core_color->state[core_color->num_sinks - 1], 0,
-+ sizeof(struct color_state));
-+ memset(&core_color->edid_caps[core_color->num_sinks - 1], 0,
-+ sizeof(struct color_edid_caps));
-+
- core_color->num_sinks--;
-
- dc_sink_release(sink);
-@@ -1786,11 +1751,14 @@ bool mod_color_update_gamut_to_stream(struct mod_color *mod_color,
- struct gamut_src_dst_matrix *matrix =
- dm_alloc(sizeof(struct gamut_src_dst_matrix));
-
-- unsigned int stream_index, sink_index, j;
-+ unsigned int stream_index, j;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
-
- /* Write persistent data in registry*/
- flag.save_per_edid = true;
-@@ -1880,11 +1848,14 @@ bool mod_color_adjust_source_gamut(struct mod_color *mod_color,
- {
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
-
- update_color_gamut_data(input_gamut_data,
- &core_color->state[sink_index].source_gamut);
-@@ -1903,11 +1874,14 @@ bool mod_color_adjust_source_gamut_and_tf(struct mod_color *mod_color,
- {
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
- update_color_gamut_data(input_gamut_data,
- &core_color->state[sink_index].source_gamut);
- core_color->state[sink_index].input_transfer_function =
-@@ -1926,11 +1900,14 @@ bool mod_color_adjust_destination_gamut(struct mod_color *mod_color,
- {
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
-
- update_color_gamut_data(input_gamut_data,
- &core_color->state[sink_index].destination_gamut);
-@@ -1948,12 +1925,15 @@ bool mod_color_set_white_point(struct mod_color *mod_color,
- {
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams;
- stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
- core_color->state[sink_index].source_gamut.gamut.whiteX =
- white_point->whiteX;
- core_color->state[sink_index].source_gamut.gamut.whiteY =
-@@ -1972,11 +1952,14 @@ bool mod_color_set_mastering_info(struct mod_color *mod_color,
- const struct dc_hdr_static_metadata *mastering_info)
- {
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
- memcpy(&core_color->state[sink_index].mastering_info,
- mastering_info,
- sizeof(struct dc_hdr_static_metadata));
-@@ -1991,7 +1974,10 @@ bool mod_color_get_mastering_info(struct mod_color *mod_color,
- struct core_color *core_color =
- MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int sink_index = sink_index_from_sink(core_color, sink);
-+ int sink_index = sink_index_from_sink(core_color, sink);
-+
-+ if (sink_index == -1)
-+ return false;
-
- memcpy(mastering_info, &core_color->state[sink_index].mastering_info,
- sizeof(struct dc_hdr_static_metadata));
-@@ -2007,11 +1993,14 @@ bool mod_color_set_user_enable(struct mod_color *mod_color,
- MOD_COLOR_TO_CORE(mod_color);
- struct core_dc *core_dc = DC_TO_CORE(core_color->dc);
- struct persistent_data_flag flag;
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
- core_color->state[sink_index].user_enable_color_temperature
- = user_enable;
-
-@@ -2037,7 +2026,10 @@ bool mod_color_get_user_enable(struct mod_color *mod_color,
- struct core_color *core_color =
- MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int sink_index = sink_index_from_sink(core_color, sink);
-+ int sink_index = sink_index_from_sink(core_color, sink);
-+
-+ if (sink_index == -1)
-+ return false;
-
- *user_enable = core_color->state[sink_index].
- user_enable_color_temperature;
-@@ -2052,7 +2044,10 @@ bool mod_color_get_custom_color_temperature(struct mod_color *mod_color,
- struct core_color *core_color =
- MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int sink_index = sink_index_from_sink(core_color, sink);
-+ int sink_index = sink_index_from_sink(core_color, sink);
-+
-+ if (sink_index == -1)
-+ return false;
-
- *color_temperature = core_color->state[sink_index].
- custom_color_temperature;
-@@ -2068,11 +2063,14 @@ bool mod_color_set_custom_color_temperature(struct mod_color *mod_color,
- MOD_COLOR_TO_CORE(mod_color);
- struct core_dc *core_dc = DC_TO_CORE(core_color->dc);
- struct persistent_data_flag flag;
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
- core_color->state[sink_index].custom_color_temperature
- = color_temperature;
-
-@@ -2098,7 +2096,10 @@ bool mod_color_get_color_saturation(struct mod_color *mod_color,
- struct core_color *core_color =
- MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int sink_index = sink_index_from_sink(core_color, sink);
-+ int sink_index = sink_index_from_sink(core_color, sink);
-+
-+ if (sink_index == -1)
-+ return false;
-
- *color_saturation = core_color->state[sink_index].saturation;
-
-@@ -2112,7 +2113,10 @@ bool mod_color_get_color_contrast(struct mod_color *mod_color,
- struct core_color *core_color =
- MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int sink_index = sink_index_from_sink(core_color, sink);
-+ int sink_index = sink_index_from_sink(core_color, sink);
-+
-+ if (sink_index == -1)
-+ return false;
-
- *color_contrast = core_color->state[sink_index].contrast;
-
-@@ -2126,7 +2130,10 @@ bool mod_color_get_color_brightness(struct mod_color *mod_color,
- struct core_color *core_color =
- MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int sink_index = sink_index_from_sink(core_color, sink);
-+ int sink_index = sink_index_from_sink(core_color, sink);
-+
-+ if (sink_index == -1)
-+ return false;
-
- *color_brightness = core_color->state[sink_index].brightness;
-
-@@ -2140,7 +2147,10 @@ bool mod_color_get_color_hue(struct mod_color *mod_color,
- struct core_color *core_color =
- MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int sink_index = sink_index_from_sink(core_color, sink);
-+ int sink_index = sink_index_from_sink(core_color, sink);
-+
-+ if (sink_index == -1)
-+ return false;
-
- *color_hue = core_color->state[sink_index].hue;
-
-@@ -2154,7 +2164,10 @@ bool mod_color_get_source_gamut(struct mod_color *mod_color,
- struct core_color *core_color =
- MOD_COLOR_TO_CORE(mod_color);
-
-- unsigned int sink_index = sink_index_from_sink(core_color, sink);
-+ int sink_index = sink_index_from_sink(core_color, sink);
-+
-+ if (sink_index == -1)
-+ return false;
-
- *source_gamut = core_color->state[sink_index].source_gamut.gamut;
-
-@@ -2169,11 +2182,14 @@ bool mod_color_notify_mode_change(struct mod_color *mod_color,
- struct gamut_src_dst_matrix *matrix =
- dm_alloc(sizeof(struct gamut_src_dst_matrix));
-
-- unsigned int stream_index, sink_index, j;
-+ unsigned int stream_index, j;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
-
- if (!build_gamut_remap_matrix
- (core_color->state[sink_index].source_gamut.gamut,
-@@ -2247,11 +2263,14 @@ bool mod_color_set_brightness(struct mod_color *mod_color,
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
- struct core_dc *core_dc = DC_TO_CORE(core_color->dc);
- struct persistent_data_flag flag;
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
-
- struct core_stream *core_stream =
- DC_STREAM_TO_CORE
-@@ -2291,11 +2310,14 @@ bool mod_color_set_contrast(struct mod_color *mod_color,
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
- struct core_dc *core_dc = DC_TO_CORE(core_color->dc);
- struct persistent_data_flag flag;
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
-
- struct core_stream *core_stream =
- DC_STREAM_TO_CORE
-@@ -2335,11 +2357,14 @@ bool mod_color_set_hue(struct mod_color *mod_color,
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
- struct core_dc *core_dc = DC_TO_CORE(core_color->dc);
- struct persistent_data_flag flag;
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
-
- struct core_stream *core_stream =
- DC_STREAM_TO_CORE
-@@ -2378,11 +2403,14 @@ bool mod_color_set_saturation(struct mod_color *mod_color,
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
- struct core_dc *core_dc = DC_TO_CORE(core_color->dc);
- struct persistent_data_flag flag;
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
-
- struct core_stream *core_stream =
- DC_STREAM_TO_CORE
-@@ -2420,11 +2448,14 @@ bool mod_color_set_input_gamma_correction(struct mod_color *mod_color,
- struct dc_gamma *gamma)
- {
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
-
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
-
- struct dc_surface *surface =
- dc_stream_to_surface_from_pipe_ctx(core_color,
-@@ -2471,9 +2502,12 @@ bool mod_color_persist_user_preferred_quantization_range(
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
- struct core_dc *core_dc = DC_TO_CORE(core_color->dc);
- struct persistent_data_flag flag;
-- unsigned int sink_index;
-+ int sink_index;
-
- sink_index = sink_index_from_sink(core_color, sink);
-+ if (sink_index == -1)
-+ return false;
-+
- if (core_color->state[sink_index].
- preferred_quantization_range != quantization_range) {
- core_color->state[sink_index].preferred_quantization_range =
-@@ -2498,7 +2532,11 @@ bool mod_color_get_preferred_quantization_range(struct mod_color *mod_color,
- enum dc_quantization_range *quantization_range)
- {
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
-- unsigned int sink_index = sink_index_from_sink(core_color, sink);
-+ int sink_index = sink_index_from_sink(core_color, sink);
-+
-+ if (sink_index == -1)
-+ return false;
-+
- enum dc_quantization_range user_preferred_quantization_range =
- core_color->state[sink_index].
- preferred_quantization_range;
-@@ -2601,7 +2639,8 @@ bool mod_color_update_gamut_info(struct mod_color *mod_color,
- const struct dc_stream **streams, int num_streams)
- {
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
-- unsigned int stream_index, sink_index;
-+ unsigned int stream_index;
-+ int sink_index;
- bool should_defer = false;
- bool is_hdr = false;
- enum color_color_space source_color_space;
-@@ -2612,6 +2651,8 @@ bool mod_color_update_gamut_info(struct mod_color *mod_color,
- for (stream_index = 0; stream_index < num_streams; stream_index++) {
- sink_index = sink_index_from_sink(core_color,
- streams[stream_index]->sink);
-+ if (sink_index == -1)
-+ continue;
- source_color_space =
- core_color->state[sink_index].source_gamut.color_space;
- input_transfer_function =
---
-2.7.4
-