Commit cdc5e048 authored by Vitaly Prosyak's avatar Vitaly Prosyak Committed by Alex Deucher

drm/amd/display: Fix for hdmi frame pack stereo

Signed-off-by: default avatarVitaly Prosyak <vitaly.prosyak@amd.com>
Reviewed-by: default avatarCharlene Liu <Charlene.Liu@amd.com>
Acked-by: default avatarHarry Wentland <Harry.Wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 46239f73
...@@ -987,7 +987,15 @@ bool dcn_validate_bandwidth( ...@@ -987,7 +987,15 @@ bool dcn_validate_bandwidth(
if (pipe->surface) { if (pipe->surface) {
struct pipe_ctx *hsplit_pipe = pipe->bottom_pipe; struct pipe_ctx *hsplit_pipe = pipe->bottom_pipe;
if (v->dpp_per_plane[input_idx] == 2) { if (v->dpp_per_plane[input_idx] == 2 ||
((pipe->stream->public.view_format ==
VIEW_3D_FORMAT_SIDE_BY_SIDE ||
pipe->stream->public.view_format ==
VIEW_3D_FORMAT_TOP_AND_BOTTOM) &&
(pipe->stream->public.timing.timing_3d_format ==
TIMING_3D_FORMAT_TOP_AND_BOTTOM ||
pipe->stream->public.timing.timing_3d_format ==
TIMING_3D_FORMAT_SIDE_BY_SIDE))) {
if (hsplit_pipe && hsplit_pipe->surface == pipe->surface) { if (hsplit_pipe && hsplit_pipe->surface == pipe->surface) {
/* update previously split pipe */ /* update previously split pipe */
hsplit_pipe->pipe_dlg_param.vupdate_width = v->v_update_width[input_idx]; hsplit_pipe->pipe_dlg_param.vupdate_width = v->v_update_width[input_idx];
......
...@@ -967,7 +967,6 @@ bool dc_commit_streams( ...@@ -967,7 +967,6 @@ bool dc_commit_streams(
DC_SURFACE_TO_CORE(context->stream_status[i].surfaces[j]); DC_SURFACE_TO_CORE(context->stream_status[i].surfaces[j]);
core_dc->hwss.apply_ctx_for_surface(core_dc, surface, context); core_dc->hwss.apply_ctx_for_surface(core_dc, surface, context);
dc_enable_stereo(dc, context, streams, stream_count);
} }
CONN_MSG_MODE(sink->link, "{%ux%u, %ux%u@%u, %ux%u@%uKhz}", CONN_MSG_MODE(sink->link, "{%ux%u, %ux%u@%u, %ux%u@%uKhz}",
...@@ -982,7 +981,7 @@ bool dc_commit_streams( ...@@ -982,7 +981,7 @@ bool dc_commit_streams(
context->streams[i]->public.timing.v_total, context->streams[i]->public.timing.v_total,
context->streams[i]->public.timing.pix_clk_khz); context->streams[i]->public.timing.pix_clk_khz);
} }
dc_enable_stereo(dc, context, streams, stream_count);
dc_resource_validate_ctx_destruct(core_dc->current_context); dc_resource_validate_ctx_destruct(core_dc->current_context);
dm_free(core_dc->current_context); dm_free(core_dc->current_context);
......
...@@ -626,7 +626,7 @@ static void calculate_scaling_ratios(struct pipe_ctx *pipe_ctx) ...@@ -626,7 +626,7 @@ static void calculate_scaling_ratios(struct pipe_ctx *pipe_ctx)
if (stream->public.view_format == VIEW_3D_FORMAT_SIDE_BY_SIDE) if (stream->public.view_format == VIEW_3D_FORMAT_SIDE_BY_SIDE)
pipe_ctx->scl_data.ratios.horz.value *= 2; pipe_ctx->scl_data.ratios.horz.value *= 2;
else if (surface->stereo_format == PLANE_STEREO_FORMAT_TOP_AND_BOTTOM) else if (stream->public.view_format == VIEW_3D_FORMAT_TOP_AND_BOTTOM)
pipe_ctx->scl_data.ratios.vert.value *= 2; pipe_ctx->scl_data.ratios.vert.value *= 2;
pipe_ctx->scl_data.ratios.vert.value = div64_s64( pipe_ctx->scl_data.ratios.vert.value = div64_s64(
......
...@@ -891,7 +891,6 @@ static void reset_hw_ctx_wrap( ...@@ -891,7 +891,6 @@ static void reset_hw_ctx_wrap(
} }
} }
static bool patch_address_for_sbs_tb_stereo( static bool patch_address_for_sbs_tb_stereo(
struct pipe_ctx *pipe_ctx, PHYSICAL_ADDRESS_LOC *addr) struct pipe_ctx *pipe_ctx, PHYSICAL_ADDRESS_LOC *addr)
{ {
...@@ -904,11 +903,17 @@ static bool patch_address_for_sbs_tb_stereo( ...@@ -904,11 +903,17 @@ static bool patch_address_for_sbs_tb_stereo(
pipe_ctx->stream->public.timing.timing_3d_format == pipe_ctx->stream->public.timing.timing_3d_format ==
TIMING_3D_FORMAT_TOP_AND_BOTTOM)) { TIMING_3D_FORMAT_TOP_AND_BOTTOM)) {
*addr = surface->public.address.grph_stereo.left_addr; *addr = surface->public.address.grph_stereo.left_addr;
surface->public.address.grph_stereo.left_addr =\ surface->public.address.grph_stereo.left_addr =
surface->public.address.grph_stereo.right_addr; surface->public.address.grph_stereo.right_addr;
return true; return true;
} else {
if (pipe_ctx->stream->public.view_format != VIEW_3D_FORMAT_NONE &&
surface->public.address.type != PLN_ADDR_TYPE_GRPH_STEREO) {
surface->public.address.type = PLN_ADDR_TYPE_GRPH_STEREO;
surface->public.address.grph_stereo.right_addr =
surface->public.address.grph_stereo.left_addr;
}
} }
return false; return false;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment