aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0749-drm-amd-dal-Don-t-try-to-do-bandwidth-validation-on-.patch
diff options
context:
space:
mode:
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-.patch201
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
+