diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0749-drm-amd-dal-Don-t-try-to-do-bandwidth-validation-on-.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0749-drm-amd-dal-Don-t-try-to-do-bandwidth-validation-on-.patch | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0749-drm-amd-dal-Don-t-try-to-do-bandwidth-validation-on-.patch b/common/recipes-kernel/linux/files/0749-drm-amd-dal-Don-t-try-to-do-bandwidth-validation-on-.patch new file mode 100644 index 00000000..e1d75f2d --- /dev/null +++ b/common/recipes-kernel/linux/files/0749-drm-amd-dal-Don-t-try-to-do-bandwidth-validation-on-.patch @@ -0,0 +1,201 @@ +From c236b72b86f24d361b03e203998bc69c74f295a1 Mon Sep 17 00:00:00 2001 +From: Harry Wentland <harry.wentland@amd.com> +Date: Thu, 28 Jan 2016 16:26:18 -0500 +Subject: [PATCH 0749/1110] drm/amd/dal: Don't try to do bandwidth validation + on DCE 10 + +Currently bandwidth calculation isn't implemented for DCE 10. +Make sure we're not calling wrong bandwidth calc code. + +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +--- + .../gpu/drm/amd/dal/dc/dce100/dce100_resource.c | 170 +-------------------- + 1 file changed, 2 insertions(+), 168 deletions(-) + +diff --git a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c +index 0c1757b..9d438a9 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c +@@ -772,176 +772,10 @@ enum dc_status dce100_validate_bandwidth( + const struct dc *dc, + struct validate_context *context) + { +- uint8_t i, j; +- enum dc_status result = DC_ERROR_UNEXPECTED; +- uint8_t number_of_displays = 0; +- uint8_t max_htaps = 1; +- uint8_t max_vtaps = 1; +- bool all_displays_in_sync = true; +- struct dc_crtc_timing prev_timing; +- +- memset(&context->bw_mode_data, 0, sizeof(context->bw_mode_data)); ++ /* TODO implement when needed */ + +- for (i = 0; i < context->target_count; i++) { +- struct core_target *target = context->targets[i]; +- +- for (j = 0; j < target->public.stream_count; j++) { +- struct core_stream *stream = +- DC_STREAM_TO_CORE(target->public.streams[j]); +- struct bw_calcs_input_single_display *disp = &context-> +- bw_mode_data.displays_data[number_of_displays]; +- +- if (target->status.surface_count == 0) { +- disp->graphics_scale_ratio = bw_int_to_fixed(1); +- disp->graphics_h_taps = 2; +- disp->graphics_v_taps = 2; +- +- /* TODO: remove when bw formula accepts taps per +- * display +- */ +- if (max_vtaps < 2) +- max_vtaps = 2; +- if (max_htaps < 2) +- max_htaps = 2; +- +- } else { +- disp->graphics_scale_ratio = +- fixed31_32_to_bw_fixed( +- stream->ratios.vert.value); +- disp->graphics_h_taps = stream->taps.h_taps; +- disp->graphics_v_taps = stream->taps.v_taps; +- +- /* TODO: remove when bw formula accepts taps per +- * display +- */ +- if (max_vtaps < stream->taps.v_taps) +- max_vtaps = stream->taps.v_taps; +- if (max_htaps < stream->taps.h_taps) +- max_htaps = stream->taps.h_taps; +- } +- +- disp->graphics_src_width = +- stream->public.timing.h_addressable; +- disp->graphics_src_height = +- stream->public.timing.v_addressable; +- disp->h_total = stream->public.timing.h_total; +- disp->pixel_rate = bw_frc_to_fixed( +- stream->public.timing.pix_clk_khz, 1000); +- +- /*TODO: get from surface*/ +- disp->graphics_bytes_per_pixel = 4; +- disp->graphics_tiling_mode = bw_def_tiled; +- +- /* DCE11 defaults*/ +- disp->graphics_lb_bpc = 10; +- disp->graphics_interlace_mode = false; +- disp->fbc_enable = false; +- disp->lpt_enable = false; +- disp->graphics_stereo_mode = bw_def_mono; +- disp->underlay_mode = bw_def_none; +- +- /*All displays will be synchronized if timings are all +- * the same +- */ +- if (number_of_displays != 0 && all_displays_in_sync) +- if (dal_memcmp(&prev_timing, +- &stream->public.timing, +- sizeof(struct dc_crtc_timing)) != 0) +- all_displays_in_sync = false; +- if (number_of_displays == 0) +- prev_timing = stream->public.timing; +- +- number_of_displays++; +- } +- } ++ return DC_OK; + +- /* TODO: remove when bw formula accepts taps per +- * display +- */ +- context->bw_mode_data.displays_data[0].graphics_v_taps = max_vtaps; +- context->bw_mode_data.displays_data[0].graphics_h_taps = max_htaps; +- +- context->bw_mode_data.number_of_displays = number_of_displays; +- context->bw_mode_data.display_synchronization_enabled = +- all_displays_in_sync; +- +- dal_logger_write( +- dc->ctx->logger, +- LOG_MAJOR_BWM, +- LOG_MINOR_BWM_REQUIRED_BANDWIDTH_CALCS, +- "%s: start\n", +- __func__); +- +- if (!bw_calcs( +- dc->ctx, +- &dc->bw_dceip, +- &dc->bw_vbios, +- &context->bw_mode_data, +- &context->bw_results)) +- result = DC_FAIL_BANDWIDTH_VALIDATE; +- else +- result = DC_OK; +- +- if (result == DC_FAIL_BANDWIDTH_VALIDATE) +- dal_logger_write(dc->ctx->logger, +- LOG_MAJOR_BWM, +- LOG_MINOR_BWM_MODE_VALIDATION, +- "%s: Bandwidth validation failed!", +- __func__); +- +- if (dal_memcmp(&dc->current_context.bw_results, +- &context->bw_results, sizeof(context->bw_results))) { +- struct log_entry log_entry; +- +- dal_logger_open( +- dc->ctx->logger, +- &log_entry, +- LOG_MAJOR_BWM, +- LOG_MINOR_BWM_REQUIRED_BANDWIDTH_CALCS); +- dal_logger_append(&log_entry, "%s: finish, numDisplays: %d\n" +- "nbpMark_b: %d nbpMark_a: %d urgentMark_b: %d urgentMark_a: %d\n" +- "stutMark_b: %d stutMark_a: %d\n", +- __func__, number_of_displays, +- context->bw_results.nbp_state_change_wm_ns[0].b_mark, +- context->bw_results.nbp_state_change_wm_ns[0].a_mark, +- context->bw_results.urgent_wm_ns[0].b_mark, +- context->bw_results.urgent_wm_ns[0].a_mark, +- context->bw_results.stutter_exit_wm_ns[0].b_mark, +- context->bw_results.stutter_exit_wm_ns[0].a_mark); +- dal_logger_append(&log_entry, +- "nbpMark_b: %d nbpMark_a: %d urgentMark_b: %d urgentMark_a: %d\n" +- "stutMark_b: %d stutMark_a: %d\n", +- context->bw_results.nbp_state_change_wm_ns[1].b_mark, +- context->bw_results.nbp_state_change_wm_ns[1].a_mark, +- context->bw_results.urgent_wm_ns[1].b_mark, +- context->bw_results.urgent_wm_ns[1].a_mark, +- context->bw_results.stutter_exit_wm_ns[1].b_mark, +- context->bw_results.stutter_exit_wm_ns[1].a_mark); +- dal_logger_append(&log_entry, +- "nbpMark_b: %d nbpMark_a: %d urgentMark_b: %d urgentMark_a: %d\n" +- "stutMark_b: %d stutMark_a: %d stutter_mode_enable: %d\n", +- context->bw_results.nbp_state_change_wm_ns[2].b_mark, +- context->bw_results.nbp_state_change_wm_ns[2].a_mark, +- context->bw_results.urgent_wm_ns[2].b_mark, +- context->bw_results.urgent_wm_ns[2].a_mark, +- context->bw_results.stutter_exit_wm_ns[2].b_mark, +- context->bw_results.stutter_exit_wm_ns[2].a_mark, +- context->bw_results.stutter_mode_enable); +- dal_logger_append(&log_entry, +- "cstate: %d pstate: %d nbpstate: %d sync: %d dispclk: %d\n" +- "sclk: %d sclk_sleep: %d yclk: %d blackout_duration: %d\n", +- context->bw_results.cpuc_state_change_enable, +- context->bw_results.cpup_state_change_enable, +- context->bw_results.nbp_state_change_enable, +- context->bw_results.all_displays_in_sync, +- context->bw_results.dispclk_khz, +- context->bw_results.required_sclk, +- context->bw_results.required_sclk_deep_sleep, +- context->bw_results.required_yclk, +- context->bw_results.required_blackout_duration_us); +- dal_logger_close(&log_entry); +- } +- return result; + } + + static void set_target_unchanged( +-- +2.7.4 + |