[PATCH 39/76] drm/amd/dal: Rotation and mirror support
Harry Wentland
harry.wentland at amd.com
Mon Nov 21 23:00:59 UTC 2016
From: Vitaly Prosyak <vitaly.prosyak at amd.com>
Add hardware programming for horizontal mirror.
Signed-off-by: Vitaly Prosyak <vitaly.prosyak at amd.com>
Acked-by: Harry Wentland <harry.wentland at amd.com>
---
drivers/gpu/drm/amd/dal/dc/core/dc.c | 3 +++
drivers/gpu/drm/amd/dal/dc/dc.h | 1 +
drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 4 +++-
drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c | 3 ++-
drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.h | 3 ++-
drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input_v.c | 3 ++-
drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h | 3 ++-
7 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
index 766cdb1d4286..3b29ac471056 100644
--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
@@ -1354,6 +1354,7 @@ bool dc_commit_surfaces_to_target(
plane_info[i].format = new_surfaces[i]->format;
plane_info[i].plane_size = new_surfaces[i]->plane_size;
plane_info[i].rotation = new_surfaces[i]->rotation;
+ plane_info[i].horizontal_mirror = new_surfaces[i]->horizontal_mirror;
plane_info[i].stereo_format = new_surfaces[i]->stereo_format;
plane_info[i].tiling_info = new_surfaces[i]->tiling_info;
plane_info[i].visible = new_surfaces[i]->visible;
@@ -1456,6 +1457,8 @@ void dc_update_surfaces_for_target(struct dc *dc, struct dc_surface_update *upda
updates[i].plane_info->plane_size;
surface->public.rotation =
updates[i].plane_info->rotation;
+ surface->public.horizontal_mirror =
+ updates[i].plane_info->horizontal_mirror;
surface->public.stereo_format =
updates[i].plane_info->stereo_format;
surface->public.tiling_info =
diff --git a/drivers/gpu/drm/amd/dal/dc/dc.h b/drivers/gpu/drm/amd/dal/dc/dc.h
index 0451b610b3e2..ba8190f8d168 100644
--- a/drivers/gpu/drm/amd/dal/dc/dc.h
+++ b/drivers/gpu/drm/amd/dal/dc/dc.h
@@ -238,6 +238,7 @@ struct dc_plane_info {
union dc_tiling_info tiling_info;
enum surface_pixel_format format;
enum dc_rotation_angle rotation;
+ bool horizontal_mirror;
enum plane_stereo_format stereo_format;
enum dc_color_space color_space; /*todo: wrong place, fits in scaling info*/
bool visible;
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 486fdfa98608..a6679a95694e 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
@@ -1677,7 +1677,8 @@ static void set_plane_config(
&surface->public.tiling_info,
&surface->public.plane_size,
surface->public.rotation,
- NULL);
+ NULL,
+ false);
if (dc->public.config.gpu_vm_support)
mi->funcs->mem_input_program_pte_vm(
@@ -2019,6 +2020,7 @@ static void dce110_program_front_end_for_pipe(
&surface->public.tiling_info,
&surface->public.plane_size,
surface->public.rotation,
+ false,
false);
if (dc->public.config.gpu_vm_support)
diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c
index 3183728ed417..3eb0e73d2eb6 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c
@@ -525,7 +525,8 @@ bool dce110_mem_input_program_surface_config(
union dc_tiling_info *tiling_info,
union plane_size *plane_size,
enum dc_rotation_angle rotation,
- struct dc_plane_dcc_param *dcc)
+ struct dc_plane_dcc_param *dcc,
+ bool horizotal_mirror)
{
struct dce110_mem_input *mem_input110 = TO_DCE110_MEM_INPUT(mem_input);
diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.h
index c9e3f5c1fa22..7a521c56e8d9 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.h
+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.h
@@ -128,7 +128,8 @@ bool dce110_mem_input_program_surface_config(
union dc_tiling_info *tiling_info,
union plane_size *plane_size,
enum dc_rotation_angle rotation,
- struct dc_plane_dcc_param *dcc);
+ struct dc_plane_dcc_param *dcc,
+ bool horizontal_mirror);
/*
* dce110_mem_input_program_pte_vm
diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input_v.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input_v.c
index 5376fed66c29..0903d3b4913d 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input_v.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input_v.c
@@ -666,7 +666,8 @@ bool dce110_mem_input_v_program_surface_config(
union dc_tiling_info *tiling_info,
union plane_size *plane_size,
enum dc_rotation_angle rotation,
- struct dc_plane_dcc_param *dcc)
+ struct dc_plane_dcc_param *dcc,
+ bool horizotal_mirror)
{
struct dce110_mem_input *mem_input110 = TO_DCE110_MEM_INPUT(mem_input);
diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h b/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h
index 9ad3b4218cb0..c743ae13cdf5 100644
--- a/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h
+++ b/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h
@@ -80,7 +80,8 @@ struct mem_input_funcs {
union dc_tiling_info *tiling_info,
union plane_size *plane_size,
enum dc_rotation_angle rotation,
- struct dc_plane_dcc_param *dcc);
+ struct dc_plane_dcc_param *dcc,
+ bool horizontal_mirror);
bool (*mem_input_is_flip_pending)(struct mem_input *mem_input);
};
--
2.10.1
More information about the amd-gfx
mailing list