aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0725-drm-amd-dal-Fix-issue-with-pipe-powergating-sequence.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0725-drm-amd-dal-Fix-issue-with-pipe-powergating-sequence.patch')
-rw-r--r--common/recipes-kernel/linux/files/0725-drm-amd-dal-Fix-issue-with-pipe-powergating-sequence.patch152
1 files changed, 0 insertions, 152 deletions
diff --git a/common/recipes-kernel/linux/files/0725-drm-amd-dal-Fix-issue-with-pipe-powergating-sequence.patch b/common/recipes-kernel/linux/files/0725-drm-amd-dal-Fix-issue-with-pipe-powergating-sequence.patch
deleted file mode 100644
index 294bd40e..00000000
--- a/common/recipes-kernel/linux/files/0725-drm-amd-dal-Fix-issue-with-pipe-powergating-sequence.patch
+++ /dev/null
@@ -1,152 +0,0 @@
-From 660c54dae5f3de13f4a4ed6232575f3c598a5a6a Mon Sep 17 00:00:00 2001
-From: Anthony Koo <Anthony.Koo@amd.com>
-Date: Wed, 20 Jan 2016 18:16:03 -0500
-Subject: [PATCH 0725/1110] drm/amd/dal: Fix issue with pipe powergating
- sequence
-
-[Description]
-It looks like pipe powergating was previously never working
-properly and pipe0 was mostly always forced on.
-After fixing the pipe powergating we find severe underflow
-issues that is caused by bad sequence.
-
-We need to unpowergate the pipe early, before we program
-watermarks.
-
-Signed-off-by: Anthony Koo <Anthony.Koo@amd.com>
-Acked-by: Harry Wentland <harry.wentland@amd.com>
----
- drivers/gpu/drm/amd/dal/dc/core/dc_target.c | 46 +++++++++++++++++++---
- .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 21 ++++++++--
- 2 files changed, 58 insertions(+), 9 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_target.c b/drivers/gpu/drm/amd/dal/dc/core/dc_target.c
-index a71034c..7f4f2f3 100644
---- a/drivers/gpu/drm/amd/dal/dc/core/dc_target.c
-+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_target.c
-@@ -193,6 +193,34 @@ gamma_param_fail:
- return result;
- }
-
-+static bool validate_surface_address(
-+ struct dc_plane_address address)
-+{
-+ bool is_valid_address = false;
-+
-+ switch (address.type) {
-+ case PLN_ADDR_TYPE_GRAPHICS:
-+ if (address.grph.addr.quad_part != 0)
-+ is_valid_address = true;
-+ break;
-+ case PLN_ADDR_TYPE_GRPH_STEREO:
-+ if ((address.grph_stereo.left_addr.quad_part != 0) &&
-+ (address.grph_stereo.right_addr.quad_part != 0)) {
-+ is_valid_address = true;
-+ }
-+ break;
-+ case PLN_ADDR_TYPE_VIDEO_PROGRESSIVE:
-+ case PLN_ADDR_TYPE_VIDEO_INTERLACED:
-+ case PLN_ADDR_TYPE_VIDEO_PROGRESSIVE_STEREO:
-+ case PLN_ADDR_TYPE_VIDEO_INTERLACED_STEREO:
-+ default:
-+ /* not supported */
-+ BREAK_TO_DEBUGGER();
-+ }
-+
-+ return is_valid_address;
-+}
-+
- bool dc_commit_surfaces_to_target(
- struct dc *dc,
- struct dc_surface *new_surfaces[],
-@@ -200,12 +228,17 @@ bool dc_commit_surfaces_to_target(
- struct dc_target *dc_target)
-
- {
-- uint8_t i, j;
-+ int i, j;
- uint32_t prev_disp_clk = dc->current_context.bw_results.dispclk_khz;
- struct core_target *target = DC_TARGET_TO_CORE(dc_target);
-
-- bool current_enabled_surface_count = 0;
-- bool new_enabled_surface_count = 0;
-+ int current_enabled_surface_count = 0;
-+ int new_enabled_surface_count = 0;
-+
-+ if (!dal_adapter_service_is_in_accelerated_mode(
-+ dc->res_pool.adapter_srv)) {
-+ return false;
-+ }
-
- for (i = 0; i < target->status.surface_count; i++)
- if (target->status.surfaces[i]->visible)
-@@ -218,7 +251,7 @@ bool dc_commit_surfaces_to_target(
- dal_logger_write(dc->ctx->logger,
- LOG_MAJOR_INTERFACE_TRACE,
- LOG_MINOR_COMPONENT_DC,
-- "%s: commit %d surfaces to target 0x%x",
-+ "%s: commit %d surfaces to target 0x%x\n",
- __func__,
- new_surface_count,
- dc_target);
-@@ -254,6 +287,8 @@ bool dc_commit_surfaces_to_target(
- for (i = 0; i < new_surface_count; i++) {
- struct dc_surface *surface = new_surfaces[i];
- struct core_surface *core_surface = DC_SURFACE_TO_CORE(surface);
-+ bool is_valid_address =
-+ validate_surface_address(surface->address);
-
- dal_logger_write(dc->ctx->logger,
- LOG_MAJOR_INTERFACE_TRACE,
-@@ -269,7 +304,8 @@ bool dc_commit_surfaces_to_target(
- core_surface,
- target);
-
-- dc->hwss.update_plane_address(core_surface, target);
-+ if (is_valid_address)
-+ dc->hwss.update_plane_address(core_surface, target);
- }
-
- if (current_enabled_surface_count == 0 && new_enabled_surface_count > 0)
-diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c
-index 0eafe16..674e795 100644
---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c
-+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c
-@@ -797,10 +797,6 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx,
- context->res_ctx.pool.adapter_srv);
-
- if (timing_changed) {
-- dce110_enable_display_power_gating(
-- stream->ctx, controller_idx, dcb,
-- PIPE_GATING_CONTROL_DISABLE);
--
- /* Must blank CRTC after disabling power gating and before any
- * programming, otherwise CRTC will be hung in bad state
- */
-@@ -1280,6 +1276,23 @@ static enum dc_status apply_ctx_to_hw(
-
- update_bios_scratch_critical_state(context->res_ctx.pool.adapter_srv,
- true);
-+
-+ for (i = 0; i < pool->controller_count; i++) {
-+ struct controller_ctx *ctlr_ctx
-+ = &context->res_ctx.controller_ctx[i];
-+ struct dc_bios *dcb;
-+
-+ if (ctlr_ctx->flags.unchanged || !ctlr_ctx->stream)
-+ continue;
-+
-+ dcb = dal_adapter_service_get_bios_parser(
-+ context->res_ctx.pool.adapter_srv);
-+
-+ dce110_enable_display_power_gating(
-+ dc->ctx, i, dcb,
-+ PIPE_GATING_CONTROL_DISABLE);
-+ }
-+
- set_safe_displaymarks(context);
- /*TODO: when pplib works*/
- /*dc_set_clocks_and_clock_state(context);*/
---
-2.7.4
-