diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0143-drm-amd-display-Disable-Modules-at-Runtime.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0143-drm-amd-display-Disable-Modules-at-Runtime.patch | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0143-drm-amd-display-Disable-Modules-at-Runtime.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0143-drm-amd-display-Disable-Modules-at-Runtime.patch new file mode 100644 index 00000000..f6d3a01c --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0143-drm-amd-display-Disable-Modules-at-Runtime.patch @@ -0,0 +1,212 @@ +From 9ec0f87c6fa853f682aa9d0d5159d188793f9b77 Mon Sep 17 00:00:00 2001 +From: Anthony Koo <Anthony.Koo@amd.com> +Date: Thu, 12 Jan 2017 14:24:11 -0500 +Subject: [PATCH 0143/4131] drm/amd/display: Disable Modules at Runtime + +Add NULL check in modules + +Signed-off-by: Anthony Koo <anthony.koo@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + .../drm/amd/display/modules/freesync/freesync.c | 94 +++++++++++++++------- + .../gpu/drm/amd/display/modules/inc/mod_freesync.h | 7 -- + 2 files changed, 65 insertions(+), 36 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c +index 6f4d169..e0703c5 100644 +--- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c ++++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c +@@ -205,11 +205,16 @@ static unsigned int map_index_from_stream(struct core_freesync *core_freesync, + bool mod_freesync_add_stream(struct mod_freesync *mod_freesync, + const struct dc_stream *stream, struct mod_freesync_caps *caps) + { +- struct core_freesync *core_freesync = +- MOD_FREESYNC_TO_CORE(mod_freesync); +- struct core_stream *core_stream = +- DC_STREAM_TO_CORE(stream); +- struct core_dc *core_dc = DC_TO_CORE(core_freesync->dc); ++ struct core_stream *core_stream = NULL; ++ struct core_dc *core_dc = NULL; ++ struct core_freesync *core_freesync = NULL; ++ ++ if (mod_freesync == NULL) ++ return false; ++ ++ core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync); ++ core_stream = DC_STREAM_TO_CORE(stream); ++ core_dc = DC_TO_CORE(core_freesync->dc); + + int persistent_freesync_enable = 0; + struct persistent_data_flag flag; +@@ -270,11 +275,16 @@ bool mod_freesync_add_stream(struct mod_freesync *mod_freesync, + bool mod_freesync_remove_stream(struct mod_freesync *mod_freesync, + const struct dc_stream *stream) + { +- struct core_freesync *core_freesync = +- MOD_FREESYNC_TO_CORE(mod_freesync); +- + int i = 0; +- unsigned int index = map_index_from_stream(core_freesync, stream); ++ struct core_freesync *core_freesync = NULL; ++ unsigned int index = 0; ++ ++ if (mod_freesync == NULL) ++ return false; ++ ++ core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync); ++ index = map_index_from_stream(core_freesync, stream); ++ + dc_stream_release(core_freesync->map[index].stream); + core_freesync->map[index].stream = NULL; + /* To remove this entity, shift everything after down */ +@@ -621,11 +631,14 @@ static void set_static_ramp_variables(struct core_freesync *core_freesync, + void mod_freesync_handle_v_update(struct mod_freesync *mod_freesync, + const struct dc_stream **streams, int num_streams) + { +- struct core_freesync *core_freesync = +- MOD_FREESYNC_TO_CORE(mod_freesync); +- + unsigned int index, v_total = 0; + struct freesync_state *state; ++ struct core_freesync *core_freesync = NULL; ++ ++ if (mod_freesync == NULL) ++ return; ++ ++ core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync); + + if (core_freesync->num_entities == 0) + return; +@@ -691,11 +704,15 @@ void mod_freesync_update_state(struct mod_freesync *mod_freesync, + const struct dc_stream **streams, int num_streams, + struct mod_freesync_params *freesync_params) + { +- struct core_freesync *core_freesync = +- MOD_FREESYNC_TO_CORE(mod_freesync); + bool freesync_program_required = false; + unsigned int stream_index; + struct freesync_state *state; ++ struct core_freesync *core_freesync = NULL; ++ ++ if (mod_freesync == NULL) ++ return; ++ ++ core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync); + + if (core_freesync->num_entities == 0) + return; +@@ -762,10 +779,14 @@ bool mod_freesync_get_state(struct mod_freesync *mod_freesync, + const struct dc_stream *stream, + struct mod_freesync_params *freesync_params) + { +- struct core_freesync *core_freesync = +- MOD_FREESYNC_TO_CORE(mod_freesync); ++ unsigned int index = NULL; ++ struct core_freesync *core_freesync = NULL; + +- unsigned int index = map_index_from_stream(core_freesync, stream); ++ if (mod_freesync == NULL) ++ return false; ++ ++ core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync); ++ index = map_index_from_stream(core_freesync, stream); + + if (core_freesync->map[index].state.fullscreen) { + freesync_params->state = FREESYNC_STATE_FULLSCREEN; +@@ -794,13 +815,17 @@ bool mod_freesync_set_user_enable(struct mod_freesync *mod_freesync, + const struct dc_stream **streams, int num_streams, + struct mod_freesync_user_enable *user_enable) + { +- struct core_freesync *core_freesync = +- MOD_FREESYNC_TO_CORE(mod_freesync); +- struct core_dc *core_dc = DC_TO_CORE(core_freesync->dc); +- + unsigned int stream_index, map_index; + int persistent_data = 0; + struct persistent_data_flag flag; ++ struct core_dc *core_dc = NULL; ++ struct core_freesync *core_freesync = NULL; ++ ++ if (mod_freesync == NULL) ++ return false; ++ ++ core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync); ++ core_dc = DC_TO_CORE(core_freesync->dc); + + flag.save_per_edid = true; + flag.save_per_link = false; +@@ -842,10 +867,14 @@ bool mod_freesync_get_user_enable(struct mod_freesync *mod_freesync, + const struct dc_stream *stream, + struct mod_freesync_user_enable *user_enable) + { +- struct core_freesync *core_freesync = +- MOD_FREESYNC_TO_CORE(mod_freesync); ++ unsigned int index = 0; ++ struct core_freesync *core_freesync = NULL; + +- unsigned int index = map_index_from_stream(core_freesync, stream); ++ if (mod_freesync == NULL) ++ return false; ++ ++ core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync); ++ index = map_index_from_stream(core_freesync, stream); + + *user_enable = core_freesync->map[index].user_enable; + +@@ -855,12 +884,15 @@ bool mod_freesync_get_user_enable(struct mod_freesync *mod_freesync, + void mod_freesync_notify_mode_change(struct mod_freesync *mod_freesync, + const struct dc_stream **streams, int num_streams) + { +- struct core_freesync *core_freesync = +- MOD_FREESYNC_TO_CORE(mod_freesync); +- + unsigned int stream_index, map_index; + unsigned min_frame_duration_in_ns, max_frame_duration_in_ns; + struct freesync_state *state; ++ struct core_freesync *core_freesync = NULL; ++ ++ if (mod_freesync == NULL) ++ return; ++ ++ core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync); + + for (stream_index = 0; stream_index < num_streams; stream_index++) { + +@@ -1121,8 +1153,12 @@ void mod_freesync_pre_update_plane_addresses(struct mod_freesync *mod_freesync, + unsigned int curr_time_stamp_in_us) + { + unsigned int stream_index, map_index, last_render_time_in_us = 0; +- struct core_freesync *core_freesync = +- MOD_FREESYNC_TO_CORE(mod_freesync); ++ struct core_freesync *core_freesync = NULL; ++ ++ if (mod_freesync == NULL) ++ return; ++ ++ core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync); + + for (stream_index = 0; stream_index < num_streams; stream_index++) { + +diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_freesync.h b/drivers/gpu/drm/amd/display/modules/inc/mod_freesync.h +index 7abfe34..783ff2e 100644 +--- a/drivers/gpu/drm/amd/display/modules/inc/mod_freesync.h ++++ b/drivers/gpu/drm/amd/display/modules/inc/mod_freesync.h +@@ -110,13 +110,6 @@ bool mod_freesync_remove_stream(struct mod_freesync *mod_freesync, + const struct dc_stream *stream); + + /* +- * Build additional parameters for dc_stream when creating stream for +- * sink to support freesync +- */ +-void mod_freesync_update_stream(struct mod_freesync *mod_freesync, +- struct dc_stream *stream); +- +-/* + * Update the freesync state flags for each display and program + * freesync accordingly + */ +-- +2.7.4 + |