aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-kernel/linux/files/0739-drm-amd-dal-Clean-up-dc_temp.h.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/files/0739-drm-amd-dal-Clean-up-dc_temp.h.patch')
-rw-r--r--meta-amdfalconx86/recipes-kernel/linux/files/0739-drm-amd-dal-Clean-up-dc_temp.h.patch1390
1 files changed, 1390 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/files/0739-drm-amd-dal-Clean-up-dc_temp.h.patch b/meta-amdfalconx86/recipes-kernel/linux/files/0739-drm-amd-dal-Clean-up-dc_temp.h.patch
new file mode 100644
index 00000000..c19661c4
--- /dev/null
+++ b/meta-amdfalconx86/recipes-kernel/linux/files/0739-drm-amd-dal-Clean-up-dc_temp.h.patch
@@ -0,0 +1,1390 @@
+From 7aaf1d3c2261a553a0d07b48afd1666475344727 Mon Sep 17 00:00:00 2001
+From: Jordan Lazare <Jordan.Lazare@amd.com>
+Date: Mon, 25 Jan 2016 17:55:30 -0500
+Subject: [PATCH 0739/1110] drm/amd/dal: Clean up dc_temp.h
+
+Signed-off-by: Jordan Lazare <Jordan.Lazare@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ .../gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c | 10 +-
+ drivers/gpu/drm/amd/dal/dc/core/dc.c | 45 --
+ drivers/gpu/drm/amd/dal/dc/dc.h | 12 +-
+ drivers/gpu/drm/amd/dal/dc/dc_temp.h | 507 ---------------------
+ drivers/gpu/drm/amd/dal/dc/dc_types.h | 257 ++++++++++-
+ .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 1 +
+ drivers/gpu/drm/amd/dal/dc/dce110/dce110_ipp.h | 4 +
+ .../gpu/drm/amd/dal/dc/dce110/dce110_ipp_gamma.c | 1 +
+ .../gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c | 4 +-
+ .../gpu/drm/amd/dal/dc/dce110/dce110_mem_input.h | 2 +-
+ drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.c | 1 +
+ drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.h | 2 +
+ .../gpu/drm/amd/dal/dc/dce110/dce110_opp_regamma.c | 1 +
+ .../amd/dal/dc/dce110/dce110_transform_bit_depth.c | 2 +-
+ drivers/gpu/drm/amd/dal/dc/inc/core_types.h | 1 +
+ drivers/gpu/drm/amd/dal/dc/inc/gamma_types.h | 117 +++++
+ drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h | 9 +
+ drivers/gpu/drm/amd/dal/dc/inc/ipp.h | 1 +
+ drivers/gpu/drm/amd/dal/dc/inc/mem_input.h | 2 +-
+ drivers/gpu/drm/amd/dal/dc/inc/opp.h | 62 ++-
+ drivers/gpu/drm/amd/dal/dc/inc/transform.h | 2 +
+ drivers/gpu/drm/amd/dal/include/fixed32_32.h | 2 +
+ .../gpu/drm/amd/dal/include/video_gamma_types.h | 1 +
+ 23 files changed, 474 insertions(+), 572 deletions(-)
+ delete mode 100644 drivers/gpu/drm/amd/dal/dc/dc_temp.h
+ create mode 100644 drivers/gpu/drm/amd/dal/dc/inc/gamma_types.h
+
+diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
+index 5fe5ca4..70d5dae 100644
+--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
+@@ -59,6 +59,7 @@ struct dm_connector_state {
+ container_of((x), struct dm_connector_state, base)
+
+ #define AMDGPU_CRTC_MODE_PRIVATE_FLAGS_GAMMASET 1
++#define MAX_TARGET_NUM 6
+
+ void amdgpu_dm_encoder_destroy(struct drm_encoder *encoder)
+ {
+@@ -314,15 +315,6 @@ static int dm_crtc_cursor_move(struct drm_crtc *crtc,
+ return -EINVAL;
+ }
+
+-#if BUILD_FEATURE_TIMING_SYNC
+- {
+- struct drm_device *dev = crtc->dev;
+- struct amdgpu_device *adev = dev->dev_private;
+- struct amdgpu_display_manager *dm = &adev->dm;
+-
+- dc_print_sync_report(dm->dc);
+- }
+-#endif
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
+index 51a8589..1a17090 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
+@@ -55,11 +55,6 @@ struct dc_target_sync_report {
+ uint32_t v_count;
+ };
+
+-struct dc_sync_report {
+- uint32_t targets_num;
+- struct dc_target_sync_report trg_reports[MAX_TARGET_NUM];
+-};
+-
+ /*******************************************************************************
+ * Private functions
+ ******************************************************************************/
+@@ -794,46 +789,6 @@ void dc_resume(const struct dc *dc)
+ core_link_resume(dc->links[i]);
+ }
+
+-void dc_print_sync_report(
+- const struct dc *dc)
+-{
+- uint32_t i;
+- const struct core_target *core_target;
+- const struct core_stream *core_stream;
+- struct dc_context *dc_ctx = dc->ctx;
+- struct dc_target_sync_report *target_sync_report;
+- struct dc_sync_report sync_report = { 0 };
+-
+- if (dc->current_context.target_count > MAX_TARGET_NUM) {
+- DC_ERROR("Target count: %d > %d!\n",
+- dc->current_context.target_count,
+- MAX_TARGET_NUM);
+- return;
+- }
+-
+- sync_report.targets_num = dc->current_context.target_count;
+-
+- /* Step 1: get data for sync validation */
+- for (i = 0; i < dc->current_context.target_count; i++) {
+-
+- core_target = dc->current_context.targets[i];
+- target_sync_report = &sync_report.trg_reports[i];
+- core_stream = DC_STREAM_TO_CORE(core_target->public.streams[0]);
+-
+- dc->hwss.get_crtc_positions(
+- core_stream->tg,
+- &target_sync_report->h_count,
+- &target_sync_report->v_count);
+-
+- DC_SYNC_INFO("GSL:target[%d]: h: %d\t v: %d\n",
+- i,
+- target_sync_report->h_count,
+- target_sync_report->v_count);
+- }
+-
+- /* Step 2: validate that display pipes are synchronized (based on
+- * data from Step 1). */
+-}
+
+ bool dc_read_dpcd(
+ struct dc *dc,
+diff --git a/drivers/gpu/drm/amd/dal/dc/dc.h b/drivers/gpu/drm/amd/dal/dc/dc.h
+index a06a8a7..fcc79ed 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dc.h
++++ b/drivers/gpu/drm/amd/dal/dc/dc.h
+@@ -68,7 +68,7 @@ struct dc_surface {
+ struct rect clip_rect;
+
+ union plane_size plane_size;
+- union plane_tiling_info tiling_info;
++ union dc_tiling_info tiling_info;
+ struct plane_colorimetry colorimetry;
+
+ enum surface_pixel_format format;
+@@ -351,6 +351,16 @@ struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params);
+ /*******************************************************************************
+ * Cursor interfaces - To manages the cursor within a target
+ ******************************************************************************/
++/* TODO: Deprecated once we switch to dc_set_cursor_position */
++bool dc_target_set_cursor_attributes(
++ struct dc_target *dc_target,
++ const struct dc_cursor_attributes *attributes);
++
++bool dc_target_set_cursor_position(
++ struct dc_target *dc_target,
++ const struct dc_cursor_position *position);
++
++/* Newer interfaces */
+ struct dc_cursor {
+ struct dc_plane_address address;
+ struct dc_cursor_attributes attributes;
+diff --git a/drivers/gpu/drm/amd/dal/dc/dc_temp.h b/drivers/gpu/drm/amd/dal/dc/dc_temp.h
+deleted file mode 100644
+index fc5b810..0000000
+--- a/drivers/gpu/drm/amd/dal/dc/dc_temp.h
++++ /dev/null
+@@ -1,507 +0,0 @@
+-/*
+- * Copyright 2012-15 Advanced Micro Devices, Inc.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included in
+- * all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+- * OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Authors: AMD
+- *
+- */
+-#ifndef DC_TEMP_H_
+-#define DC_TEMP_H_
+-
+-#include "dc_types.h"
+-
+-#define MAX_SURFACE_NUM 2
+-
+-enum clamping_range {
+- CLAMPING_FULL_RANGE = 0, /* No Clamping */
+- CLAMPING_LIMITED_RANGE_8BPC, /* 8 bpc: Clamping 1 to FE */
+- CLAMPING_LIMITED_RANGE_10BPC, /* 10 bpc: Clamping 4 to 3FB */
+- CLAMPING_LIMITED_RANGE_12BPC, /* 12 bpc: Clamping 10 to FEF */
+- /* Use programmable clampping value on FMT_CLAMP_COMPONENT_R/G/B. */
+- CLAMPING_LIMITED_RANGE_PROGRAMMABLE
+-};
+-
+-struct clamping_and_pixel_encoding_params {
+- enum dc_pixel_encoding pixel_encoding; /* Pixel Encoding */
+- enum clamping_range clamping_level; /* Clamping identifier */
+- enum dc_color_depth c_depth; /* Deep color use. */
+-};
+-
+-struct bit_depth_reduction_params {
+- struct {
+- /* truncate/round */
+- /* trunc/round enabled*/
+- uint32_t TRUNCATE_ENABLED:1;
+- /* 2 bits: 0=6 bpc, 1=8 bpc, 2 = 10bpc*/
+- uint32_t TRUNCATE_DEPTH:2;
+- /* truncate or round*/
+- uint32_t TRUNCATE_MODE:1;
+-
+- /* spatial dither */
+- /* Spatial Bit Depth Reduction enabled*/
+- uint32_t SPATIAL_DITHER_ENABLED:1;
+- /* 2 bits: 0=6 bpc, 1 = 8 bpc, 2 = 10bpc*/
+- uint32_t SPATIAL_DITHER_DEPTH:2;
+- /* 0-3 to select patterns*/
+- uint32_t SPATIAL_DITHER_MODE:2;
+- /* Enable RGB random dithering*/
+- uint32_t RGB_RANDOM:1;
+- /* Enable Frame random dithering*/
+- uint32_t FRAME_RANDOM:1;
+- /* Enable HighPass random dithering*/
+- uint32_t HIGHPASS_RANDOM:1;
+-
+- /* temporal dither*/
+- /* frame modulation enabled*/
+- uint32_t FRAME_MODULATION_ENABLED:1;
+- /* same as for trunc/spatial*/
+- uint32_t FRAME_MODULATION_DEPTH:2;
+- /* 2/4 gray levels*/
+- uint32_t TEMPORAL_LEVEL:1;
+- uint32_t FRC25:2;
+- uint32_t FRC50:2;
+- uint32_t FRC75:2;
+- } flags;
+-
+- uint32_t r_seed_value;
+- uint32_t b_seed_value;
+- uint32_t g_seed_value;
+-};
+-
+-enum pipe_gating_control {
+- PIPE_GATING_CONTROL_DISABLE = 0,
+- PIPE_GATING_CONTROL_ENABLE,
+- PIPE_GATING_CONTROL_INIT
+-};
+-
+-enum surface_color_space {
+- SURFACE_COLOR_SPACE_SRGB = 0x0000,
+- SURFACE_COLOR_SPACE_BT601 = 0x0001,
+- SURFACE_COLOR_SPACE_BT709 = 0x0002,
+- SURFACE_COLOR_SPACE_XVYCC_BT601 = 0x0004,
+- SURFACE_COLOR_SPACE_XVYCC_BT709 = 0x0008,
+- SURFACE_COLOR_SPACE_XRRGB = 0x0010
+-};
+-
+-enum {
+- MAX_LANES = 2,
+- MAX_COFUNC_PATH = 6,
+- LAYER_INDEX_PRIMARY = -1,
+-};
+-
+-/* Scaling format */
+-enum scaling_transformation {
+- SCALING_TRANSFORMATION_UNINITIALIZED,
+- SCALING_TRANSFORMATION_IDENTITY = 0x0001,
+- SCALING_TRANSFORMATION_CENTER_TIMING = 0x0002,
+- SCALING_TRANSFORMATION_FULL_SCREEN_SCALE = 0x0004,
+- SCALING_TRANSFORMATION_PRESERVE_ASPECT_RATIO_SCALE = 0x0008,
+- SCALING_TRANSFORMATION_DAL_DECIDE = 0x0010,
+- SCALING_TRANSFORMATION_INVALID = 0x80000000,
+-
+- /* Flag the first and last */
+- SCALING_TRANSFORMATION_BEGING = SCALING_TRANSFORMATION_IDENTITY,
+- SCALING_TRANSFORMATION_END =
+- SCALING_TRANSFORMATION_PRESERVE_ASPECT_RATIO_SCALE
+-};
+-
+-struct view_stereo_3d_support {
+- enum view_3d_format format;
+- struct {
+- uint32_t CLONE_MODE:1;
+- uint32_t SCALING:1;
+- uint32_t SINGLE_FRAME_SW_PACKED:1;
+- } features;
+-};
+-
+-struct plane_colorimetry {
+- enum surface_color_space color_space;
+- bool limited_range;
+-};
+-
+-enum tiling_mode {
+- TILING_MODE_INVALID,
+- TILING_MODE_LINEAR,
+- TILING_MODE_TILED,
+- TILING_MODE_COUNT
+-};
+-
+-struct view_position {
+- uint32_t x;
+- uint32_t y;
+-};
+-
+-union plane_tiling_info {
+-
+- struct {
+- /* Specifies the number of memory banks for tiling
+- * purposes.
+- * Only applies to 2D and 3D tiling modes.
+- * POSSIBLE VALUES: 2,4,8,16
+- */
+- uint32_t NUM_BANKS:5;
+- /* Specifies the number of tiles in the x direction
+- * to be incorporated into the same bank.
+- * Only applies to 2D and 3D tiling modes.
+- * POSSIBLE VALUES: 1,2,4,8
+- */
+- uint32_t BANK_WIDTH:4;
+- /* Specifies the number of tiles in the y direction to
+- * be incorporated into the same bank.
+- * Only applies to 2D and 3D tiling modes.
+- * POSSIBLE VALUES: 1,2,4,8
+- */
+- uint32_t BANK_HEIGHT:4;
+- /* Specifies the macro tile aspect ratio. Only applies
+- * to 2D and 3D tiling modes.
+- */
+- uint32_t TILE_ASPECT:3;
+- /* Specifies the number of bytes that will be stored
+- * contiguously for each tile.
+- * If the tile data requires more storage than this
+- * amount, it is split into multiple slices.
+- * This field must not be larger than
+- * GB_ADDR_CONFIG.DRAM_ROW_SIZE.
+- * Only applies to 2D and 3D tiling modes.
+- * For color render targets, TILE_SPLIT >= 256B.
+- */
+- uint32_t TILE_SPLIT:3;
+- /* Specifies the addressing within a tile.
+- * 0x0 - DISPLAY_MICRO_TILING
+- * 0x1 - THIN_MICRO_TILING
+- * 0x2 - DEPTH_MICRO_TILING
+- * 0x3 - ROTATED_MICRO_TILING
+- */
+- uint32_t TILE_MODE:2;
+- /* Specifies the number of pipes and how they are
+- * interleaved in the surface.
+- * Refer to memory addressing document for complete
+- * details and constraints.
+- */
+- uint32_t PIPE_CONFIG:5;
+- /* Specifies the tiling mode of the surface.
+- * THIN tiles use an 8x8x1 tile size.
+- * THICK tiles use an 8x8x4 tile size.
+- * 2D tiling modes rotate banks for successive Z slices
+- * 3D tiling modes rotate pipes and banks for Z slices
+- * Refer to memory addressing document for complete
+- * details and constraints.
+- */
+- uint32_t ARRAY_MODE:4;
+- } grph;
+-
+-
+- struct {
+- /*possible values: 2,4,8,16*/
+- uint32_t NUM_BANKS:5;
+- /*must use enum video_array_mode*/
+- uint32_t ARRAY_MODE:4;
+- /*must use enum addr_pipe_config*/
+- uint32_t PIPE_CONFIG:5;
+- /*possible values 1,2,4,8 */
+- uint32_t BANK_WIDTH_LUMA:4;
+- /*possible values 1,2,4,8 */
+- uint32_t BANK_HEIGHT_LUMA:4;
+- /*must use enum macro_tile_aspect*/
+- uint32_t TILE_ASPECT_LUMA:3;
+- /*must use enum tile_split*/
+- uint32_t TILE_SPLIT_LUMA:3;
+- /*must use micro_tile_mode */
+- uint32_t TILE_MODE_LUMA:2;
+- /*possible values: 1,2,4,8*/
+- uint32_t BANK_WIDTH_CHROMA:4;
+- /*possible values: 1,2,4,8*/
+- uint32_t BANK_HEIGHT_CHROMA:4;
+- /*must use enum macro_tile_aspect*/
+- uint32_t TILE_ASPECT_CHROMA:3;
+- /*must use enum tile_split*/
+- uint32_t TILE_SPLIT_CHROMA:3;
+- /*must use enum micro_tile_mode*/
+- uint32_t TILE_MODE_CHROMA:2;
+-
+- } video;
+-
+- uint64_t value;
+-};
+-
+-union plane_size {
+- /* Grph or Video will be selected
+- * based on format above:
+- * Use Video structure if
+- * format >= DalPixelFormat_VideoBegin
+- * else use Grph structure
+- */
+- struct {
+- struct rect surface_size;
+- /* Graphic surface pitch in pixels.
+- * In LINEAR_GENERAL mode, pitch
+- * is 32 pixel aligned.
+- */
+- uint32_t surface_pitch;
+- } grph;
+-
+- struct {
+- struct rect luma_size;
+- /* Graphic surface pitch in pixels.
+- * In LINEAR_GENERAL mode, pitch is
+- * 32 pixel aligned.
+- */
+- uint32_t luma_pitch;
+-
+- struct rect chroma_size;
+- /* Graphic surface pitch in pixels.
+- * In LINEAR_GENERAL mode, pitch is
+- * 32 pixel aligned.
+- */
+- uint32_t chroma_pitch;
+- } video;
+-};
+-
+-enum dc_scaling_transform {
+- SCL_TRANS_CENTERED = 0,
+- SCL_TRANS_ASPECT_RATIO,
+- SCL_TRANS_FULL
+-};
+-
+-struct dev_c_lut {
+- uint8_t red;
+- uint8_t green;
+- uint8_t blue;
+-};
+-
+-struct dev_c_lut16 {
+- uint16_t red;
+- uint16_t green;
+- uint16_t blue;
+-};
+-
+-enum gamma_ramp_type {
+- GAMMA_RAMP_UNINITIALIZED = 0,
+- GAMMA_RAMP_DEFAULT,
+- GAMMA_RAMP_RBG256X3X16,
+- GAMMA_RAMP_DXGI_1,
+-};
+-
+-enum surface_type {
+- OVERLAY_SURFACE = 1, GRAPHIC_SURFACE
+-};
+-
+-#define CONST_RGB_GAMMA_VALUE 2400
+-
+-enum {
+- RGB_256X3X16 = 256, DX_GAMMA_RAMP_MAX = 1025
+-};
+-
+-struct gamma_ramp_rgb256x3x16 {
+- uint16_t red[RGB_256X3X16];
+- uint16_t green[RGB_256X3X16];
+- uint16_t blue[RGB_256X3X16];
+-};
+-
+-struct dxgi_rgb {
+- struct fixed32_32 red;
+- struct fixed32_32 green;
+- struct fixed32_32 blue;
+-};
+-
+-struct gamma_ramp_dxgi_1 {
+- struct dxgi_rgb scale;
+- struct dxgi_rgb offset;
+- struct dxgi_rgb gamma_curve[DX_GAMMA_RAMP_MAX];
+-};
+-
+-struct gamma_ramp {
+- enum gamma_ramp_type type;
+- union {
+- struct gamma_ramp_rgb256x3x16 gamma_ramp_rgb256x3x16;
+- struct gamma_ramp_dxgi_1 gamma_ramp_dxgi1;
+- };
+- uint32_t size;
+-};
+-
+-struct regamma_ramp {
+- uint16_t gamma[RGB_256X3X16 * 3];
+-};
+-
+-/* used by Graphics and Overlay gamma */
+-struct gamma_coeff {
+- int32_t gamma[3];
+- int32_t a0[3]; /* index 0 for red, 1 for green, 2 for blue */
+- int32_t a1[3];
+- int32_t a2[3];
+- int32_t a3[3];
+-};
+-
+-struct regamma_lut {
+- union {
+- struct {
+- uint32_t GRAPHICS_DEGAMMA_SRGB :1;
+- uint32_t OVERLAY_DEGAMMA_SRGB :1;
+- uint32_t GAMMA_RAMP_ARRAY :1;
+- uint32_t APPLY_DEGAMMA :1;
+- uint32_t RESERVED :28;
+- } bits;
+- uint32_t value;
+- } features;
+-
+- union {
+- struct regamma_ramp regamma_ramp;
+- struct gamma_coeff gamma_coeff;
+- };
+-};
+-
+-union gamma_flag {
+- struct {
+- uint32_t config_is_changed :1;
+- uint32_t both_pipe_req :1;
+- uint32_t regamma_update :1;
+- uint32_t gamma_update :1;
+- uint32_t reserved :28;
+- } bits;
+- uint32_t u_all;
+-};
+-
+-enum graphics_regamma_adjust {
+- GRAPHICS_REGAMMA_ADJUST_BYPASS = 0, GRAPHICS_REGAMMA_ADJUST_HW, /* without adjustments */
+- GRAPHICS_REGAMMA_ADJUST_SW /* use adjustments */
+-};
+-
+-enum graphics_gamma_lut {
+- GRAPHICS_GAMMA_LUT_LEGACY = 0, /* use only legacy LUT */
+- GRAPHICS_GAMMA_LUT_REGAMMA, /* use only regamma LUT */
+- GRAPHICS_GAMMA_LUT_LEGACY_AND_REGAMMA /* use legacy & regamma LUT's */
+-};
+-
+-enum graphics_degamma_adjust {
+- GRAPHICS_DEGAMMA_ADJUST_BYPASS = 0, GRAPHICS_DEGAMMA_ADJUST_HW, /*without adjustments */
+- GRAPHICS_DEGAMMA_ADJUST_SW /* use adjustments */
+-};
+-
+-struct gamma_parameters {
+- union gamma_flag flag;
+- enum pixel_format surface_pixel_format; /*OS surface pixel format*/
+- struct regamma_lut regamma;
+-
+- enum graphics_regamma_adjust regamma_adjust_type;
+- enum graphics_degamma_adjust degamma_adjust_type;
+-
+- enum graphics_gamma_lut selected_gamma_lut;
+-
+- bool disable_adjustments;
+-
+- /* here we grow with parameters if necessary */
+-};
+-
+-struct pixel_format_support {
+- bool INDEX8 :1;
+- bool RGB565 :1;
+- bool ARGB8888 :1;
+- bool ARGB2101010 :1;
+- bool ARGB2101010_XRBIAS :1;
+- bool FP16 :1;
+-};
+-
+-struct render_mode {
+- struct view view;
+- enum pixel_format pixel_format;
+-};
+-
+-struct refresh_rate {
+- uint32_t field_rate;
+- bool INTERLACED :1;
+- bool VIDEO_OPTIMIZED_RATE :1;
+-};
+-
+-struct stereo_3d_view {
+- enum view_3d_format view_3d_format;
+- union {
+- uint32_t raw;
+- struct /*stereo_3d_view_flags*/
+- {
+- bool SINGLE_FRAME_SW_PACKED :1;
+- bool EXCLUSIVE_3D :1;
+- } bits;
+- } flags;
+-};
+-
+-enum solution_importance {
+- SOLUTION_IMPORTANCE_PREFERRED = 1,
+- /* Means we want to use this solution
+- * even in wide topology configurations*/
+- SOLUTION_IMPORTANCE_SAFE,
+- SOLUTION_IMPORTANCE_UNSAFE,
+- SOLUTION_IMPORTANCE_DEFAULT
+-/* Temporary state , means Solution object
+- * should define importance by itself
+- */
+-};
+-
+-struct solution {
+- const struct dc_mode_timing *dc_mode_timing;
+- enum solution_importance importance;
+- bool is_custom_mode;
+- uint32_t scl_support[NUM_PIXEL_FORMATS];
+- /* bit vector of the scaling that can be supported on the timing */
+- uint32_t scl_support_guaranteed[NUM_PIXEL_FORMATS];
+- /* subset of m_sclSupport that can be guaranteed supported */
+-};
+-
+-enum timing_select {
+- TIMING_SELECT_DEFAULT,
+- TIMING_SELECT_NATIVE_ONLY,
+- TIMING_SELECT_PRESERVE_ASPECT
+-};
+-
+-enum downscale_state {
+- DOWNSCALESTATE_DEFAULT, // Disabled, but not user selected
+- DOWNSCALESTATE_DISABLED, // User disabled through CCC
+- DOWNSCALESTATE_ENABLED // User enabled through CCC
+-};
+-struct scaling_support {
+- bool IDENTITY :1;
+- bool FULL_SCREEN_SCALE :1;
+- bool PRESERVE_ASPECT_RATIO_SCALE :1;
+- bool CENTER_TIMING :1;
+-};
+-
+-
+-/* TODO: combine the two cursor functions into one to make cursor
+- * programming resistant to changes in OS call sequence. */
+-bool dc_target_set_cursor_attributes(
+- struct dc_target *dc_target,
+- const struct dc_cursor_attributes *attributes);
+-
+-bool dc_target_set_cursor_position(
+- struct dc_target *dc_target,
+- const struct dc_cursor_position *position);
+-
+-/******************************************************************************
+- * TODO: these definitions only for Timing Sync feature bring-up. Remove
+- * when the feature is complete.
+- *****************************************************************************/
+-
+-#define MAX_TARGET_NUM 6
+-
+-void dc_print_sync_report(
+- const struct dc *dc);
+-
+-/******************************************************************************/
+-
+-#endif /* DC_TEMP_H_ */
+diff --git a/drivers/gpu/drm/amd/dal/dc/dc_types.h b/drivers/gpu/drm/amd/dal/dc/dc_types.h
+index 60e5603..fe7046f 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dc_types.h
++++ b/drivers/gpu/drm/amd/dal/dc/dc_types.h
+@@ -63,6 +63,17 @@ enum dce_environment {
+ /********************************/
+
+ #define MAX_EDID_BUFFER_SIZE 512
++#define MAX_SURFACE_NUM 2
++#define NUM_PIXEL_FORMATS 10
++
++enum surface_color_space {
++ SURFACE_COLOR_SPACE_SRGB = 0x0000,
++ SURFACE_COLOR_SPACE_BT601 = 0x0001,
++ SURFACE_COLOR_SPACE_BT709 = 0x0002,
++ SURFACE_COLOR_SPACE_XVYCC_BT601 = 0x0004,
++ SURFACE_COLOR_SPACE_XVYCC_BT709 = 0x0008,
++ SURFACE_COLOR_SPACE_XRRGB = 0x0010
++};
+
+ /*Displayable pixel format in fb*/
+ enum surface_pixel_format {
+@@ -174,9 +185,6 @@ enum dc_pixel_encoding {
+ * Please increase if pixel_format enum increases
+ * num from PIXEL_FORMAT_INDEX8 to PIXEL_FORMAT_444BPP32
+ */
+-#define NUM_PIXEL_FORMATS 10
+-
+-
+
+ union large_integer {
+ struct {
+@@ -211,6 +219,11 @@ enum dc_edid_status {
+ EDID_BAD_CHECKSUM,
+ };
+
++struct plane_colorimetry {
++ enum surface_color_space color_space;
++ bool limited_range;
++};
++
+ /* audio capability from EDID*/
+ struct dc_cea_audio_mode {
+ uint8_t format_code; /* ucData[0] [6:3]*/
+@@ -710,6 +723,47 @@ enum dc_connection_type {
+ * returns 0.
+ *
+ */
++/* TODO: Deprecated */
++enum {
++ RGB_256X3X16 = 256,
++ DX_GAMMA_RAMP_MAX = 1025
++};
++
++enum gamma_ramp_type {
++ GAMMA_RAMP_UNINITIALIZED = 0,
++ GAMMA_RAMP_DEFAULT,
++ GAMMA_RAMP_RBG256X3X16,
++ GAMMA_RAMP_DXGI_1,
++};
++
++struct dxgi_rgb {
++ struct fixed32_32 red;
++ struct fixed32_32 green;
++ struct fixed32_32 blue;
++};
++
++struct gamma_ramp_dxgi_1 {
++ struct dxgi_rgb scale;
++ struct dxgi_rgb offset;
++ struct dxgi_rgb gamma_curve[DX_GAMMA_RAMP_MAX];
++};
++
++struct gamma_ramp_rgb256x3x16 {
++ uint16_t red[RGB_256X3X16];
++ uint16_t green[RGB_256X3X16];
++ uint16_t blue[RGB_256X3X16];
++};
++
++struct gamma_ramp {
++ enum gamma_ramp_type type;
++ union {
++ struct gamma_ramp_rgb256x3x16 gamma_ramp_rgb256x3x16;
++ struct gamma_ramp_dxgi_1 gamma_ramp_dxgi1;
++ };
++ uint32_t size;
++};
++
++
+ struct dc_gamma_ramp {
+ uint32_t (*get_gamma_value) (
+ void *context,
+@@ -728,6 +782,201 @@ struct dc_csc_adjustments {
+ struct fixed31_32 hue;
+ };
+
+-#include "dc_temp.h"
++
++enum {
++ MAX_LANES = 2,
++ MAX_COFUNC_PATH = 6,
++ LAYER_INDEX_PRIMARY = -1,
++};
++
++/* Scaling format */
++enum scaling_transformation {
++ SCALING_TRANSFORMATION_UNINITIALIZED,
++ SCALING_TRANSFORMATION_IDENTITY = 0x0001,
++ SCALING_TRANSFORMATION_CENTER_TIMING = 0x0002,
++ SCALING_TRANSFORMATION_FULL_SCREEN_SCALE = 0x0004,
++ SCALING_TRANSFORMATION_PRESERVE_ASPECT_RATIO_SCALE = 0x0008,
++ SCALING_TRANSFORMATION_DAL_DECIDE = 0x0010,
++ SCALING_TRANSFORMATION_INVALID = 0x80000000,
++
++ /* Flag the first and last */
++ SCALING_TRANSFORMATION_BEGING = SCALING_TRANSFORMATION_IDENTITY,
++ SCALING_TRANSFORMATION_END =
++ SCALING_TRANSFORMATION_PRESERVE_ASPECT_RATIO_SCALE
++};
++
++struct view_stereo_3d_support {
++ enum view_3d_format format;
++ struct {
++ uint32_t CLONE_MODE:1;
++ uint32_t SCALING:1;
++ uint32_t SINGLE_FRAME_SW_PACKED:1;
++ } features;
++};
++
++enum tiling_mode {
++ TILING_MODE_INVALID,
++ TILING_MODE_LINEAR,
++ TILING_MODE_TILED,
++ TILING_MODE_COUNT
++};
++
++struct view_position {
++ uint32_t x;
++ uint32_t y;
++};
++
++struct render_mode {
++ struct view view;
++ enum pixel_format pixel_format;
++};
++
++struct pixel_format_support {
++ bool INDEX8 :1;
++ bool RGB565 :1;
++ bool ARGB8888 :1;
++ bool ARGB2101010 :1;
++ bool ARGB2101010_XRBIAS :1;
++ bool FP16 :1;
++};
++
++struct stereo_3d_view {
++ enum view_3d_format view_3d_format;
++ union {
++ uint32_t raw;
++ struct /*stereo_3d_view_flags*/
++ {
++ bool SINGLE_FRAME_SW_PACKED :1;
++ bool EXCLUSIVE_3D :1;
++ } bits;
++ } flags;
++};
++
++/* TODO: Rename to dc_tiling_info */
++union dc_tiling_info {
++
++ struct {
++ /* Specifies the number of memory banks for tiling
++ * purposes.
++ * Only applies to 2D and 3D tiling modes.
++ * POSSIBLE VALUES: 2,4,8,16
++ */
++ uint32_t NUM_BANKS:5;
++ /* Specifies the number of tiles in the x direction
++ * to be incorporated into the same bank.
++ * Only applies to 2D and 3D tiling modes.
++ * POSSIBLE VALUES: 1,2,4,8
++ */
++ uint32_t BANK_WIDTH:4;
++ /* Specifies the number of tiles in the y direction to
++ * be incorporated into the same bank.
++ * Only applies to 2D and 3D tiling modes.
++ * POSSIBLE VALUES: 1,2,4,8
++ */
++ uint32_t BANK_HEIGHT:4;
++ /* Specifies the macro tile aspect ratio. Only applies
++ * to 2D and 3D tiling modes.
++ */
++ uint32_t TILE_ASPECT:3;
++ /* Specifies the number of bytes that will be stored
++ * contiguously for each tile.
++ * If the tile data requires more storage than this
++ * amount, it is split into multiple slices.
++ * This field must not be larger than
++ * GB_ADDR_CONFIG.DRAM_ROW_SIZE.
++ * Only applies to 2D and 3D tiling modes.
++ * For color render targets, TILE_SPLIT >= 256B.
++ */
++ uint32_t TILE_SPLIT:3;
++ /* Specifies the addressing within a tile.
++ * 0x0 - DISPLAY_MICRO_TILING
++ * 0x1 - THIN_MICRO_TILING
++ * 0x2 - DEPTH_MICRO_TILING
++ * 0x3 - ROTATED_MICRO_TILING
++ */
++ uint32_t TILE_MODE:2;
++ /* Specifies the number of pipes and how they are
++ * interleaved in the surface.
++ * Refer to memory addressing document for complete
++ * details and constraints.
++ */
++ uint32_t PIPE_CONFIG:5;
++ /* Specifies the tiling mode of the surface.
++ * THIN tiles use an 8x8x1 tile size.
++ * THICK tiles use an 8x8x4 tile size.
++ * 2D tiling modes rotate banks for successive Z slices
++ * 3D tiling modes rotate pipes and banks for Z slices
++ * Refer to memory addressing document for complete
++ * details and constraints.
++ */
++ uint32_t ARRAY_MODE:4;
++ } grph;
++
++
++ struct {
++ /*possible values: 2,4,8,16*/
++ uint32_t NUM_BANKS:5;
++ /*must use enum video_array_mode*/
++ uint32_t ARRAY_MODE:4;
++ /*must use enum addr_pipe_config*/
++ uint32_t PIPE_CONFIG:5;
++ /*possible values 1,2,4,8 */
++ uint32_t BANK_WIDTH_LUMA:4;
++ /*possible values 1,2,4,8 */
++ uint32_t BANK_HEIGHT_LUMA:4;
++ /*must use enum macro_tile_aspect*/
++ uint32_t TILE_ASPECT_LUMA:3;
++ /*must use enum tile_split*/
++ uint32_t TILE_SPLIT_LUMA:3;
++ /*must use micro_tile_mode */
++ uint32_t TILE_MODE_LUMA:2;
++ /*possible values: 1,2,4,8*/
++ uint32_t BANK_WIDTH_CHROMA:4;
++ /*possible values: 1,2,4,8*/
++ uint32_t BANK_HEIGHT_CHROMA:4;
++ /*must use enum macro_tile_aspect*/
++ uint32_t TILE_ASPECT_CHROMA:3;
++ /*must use enum tile_split*/
++ uint32_t TILE_SPLIT_CHROMA:3;
++ /*must use enum micro_tile_mode*/
++ uint32_t TILE_MODE_CHROMA:2;
++
++ } video;
++
++ uint64_t value;
++};
++
++union plane_size {
++ /* Grph or Video will be selected
++ * based on format above:
++ * Use Video structure if
++ * format >= DalPixelFormat_VideoBegin
++ * else use Grph structure
++ */
++ struct {
++ struct rect surface_size;
++ /* Graphic surface pitch in pixels.
++ * In LINEAR_GENERAL mode, pitch
++ * is 32 pixel aligned.
++ */
++ uint32_t surface_pitch;
++ } grph;
++
++ struct {
++ struct rect luma_size;
++ /* Graphic surface pitch in pixels.
++ * In LINEAR_GENERAL mode, pitch is
++ * 32 pixel aligned.
++ */
++ uint32_t luma_pitch;
++
++ struct rect chroma_size;
++ /* Graphic surface pitch in pixels.
++ * In LINEAR_GENERAL mode, pitch is
++ * 32 pixel aligned.
++ */
++ uint32_t chroma_pitch;
++ } video;
++};
+
+ #endif /* DC_TYPES_H_ */
+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 af7cf0d..046a9a5 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
+@@ -30,6 +30,7 @@
+ #include "resource.h"
+ #include "hw_sequencer.h"
+ #include "dc_helpers.h"
++#include "gamma_types.h"
+
+ #include "dce110/dce110_resource.h"
+ #include "dce110/dce110_timing_generator.h"
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_ipp.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_ipp.h
+index f0e9e7d..709906f 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_ipp.h
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_ipp.h
+@@ -28,6 +28,10 @@
+
+ #include "inc/ipp.h"
+
++
++struct gamma_parameters;
++struct dev_c_lut;
++
+ #define TO_DCE110_IPP(input_pixel_processor)\
+ container_of(input_pixel_processor, struct dce110_ipp, base)
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_ipp_gamma.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_ipp_gamma.c
+index 2aa432a..a30c0da 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_ipp_gamma.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_ipp_gamma.c
+@@ -32,6 +32,7 @@
+ #include "dce/dce_11_0_sh_mask.h"
+
+ #include "dce110_ipp.h"
++#include "gamma_types.h"
+
+ #define DCP_REG(reg)\
+ (reg + ipp110->offsets.dcp_offset)
+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 4e809b6..b70c8e1 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
+@@ -179,7 +179,7 @@ static void enable(struct dce110_mem_input *mem_input110)
+
+ static void program_tiling(
+ struct dce110_mem_input *mem_input110,
+- const union plane_tiling_info *info,
++ const union dc_tiling_info *info,
+ const enum surface_pixel_format pixel_format)
+ {
+ uint32_t value = 0;
+@@ -458,7 +458,7 @@ bool dce110_mem_input_program_surface_flip_and_addr(
+ bool dce110_mem_input_program_surface_config(
+ struct mem_input *mem_input,
+ enum surface_pixel_format format,
+- union plane_tiling_info *tiling_info,
++ union dc_tiling_info *tiling_info,
+ union plane_size *plane_size,
+ enum dc_rotation_angle rotation)
+ {
+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 997070b..cd19169 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
+@@ -109,7 +109,7 @@ bool dce110_mem_input_program_surface_flip_and_addr(
+ bool dce110_mem_input_program_surface_config(
+ struct mem_input *mem_input,
+ enum surface_pixel_format format,
+- union plane_tiling_info *tiling_info,
++ union dc_tiling_info *tiling_info,
+ union plane_size *plane_size,
+ enum dc_rotation_angle rotation);
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.c
+index 99163ee..7dcfd2e 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.c
+@@ -30,6 +30,7 @@
+ #include "dce/dce_11_0_sh_mask.h"
+
+ #include "dce110_opp.h"
++#include "gamma_types.h"
+
+ enum {
+ MAX_LUT_ENTRY = 256,
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.h
+index f9b828c..e53eb74 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.h
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.h
+@@ -27,7 +27,9 @@
+
+ #include "dc_types.h"
+ #include "inc/opp.h"
++#include "gamma_types.h"
+
++struct gamma_parameters;
+
+ #define FROM_DCE11_OPP(opp)\
+ container_of(opp, struct dce110_opp, base)
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_regamma.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_regamma.c
+index dceba7d..f589025 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_regamma.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_regamma.c
+@@ -30,6 +30,7 @@
+ #include "dce/dce_11_0_sh_mask.h"
+
+ #include "dce110_opp.h"
++#include "gamma_types.h"
+
+ #define DCP_REG(reg)\
+ (reg + opp110->offsets.dcp_offset)
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_transform_bit_depth.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_transform_bit_depth.c
+index d0e4b98..a64a507 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_transform_bit_depth.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_transform_bit_depth.c
+@@ -30,7 +30,7 @@
+ #include "dce/dce_11_0_sh_mask.h"
+
+ #include "dce110_transform.h"
+-
++#include "opp.h"
+ #include "include/logger_interface.h"
+ #include "include/fixed32_32.h"
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
+index d075de1..e3b5918 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
+@@ -70,6 +70,7 @@ void enable_surface_flip_reporting(struct dc_surface *dc_surface,
+ #include "audio_interface.h"
+ #include "scaler_types.h"
+ #include "hw_sequencer_types.h"
++#include "opp.h"
+
+ #define DC_STREAM_TO_CORE(dc_stream) container_of( \
+ dc_stream, struct core_stream, public)
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/gamma_types.h b/drivers/gpu/drm/amd/dal/dc/inc/gamma_types.h
+new file mode 100644
+index 0000000..048303e
+--- /dev/null
++++ b/drivers/gpu/drm/amd/dal/dc/inc/gamma_types.h
+@@ -0,0 +1,117 @@
++/*
++ * Copyright 2012-15 Advanced Micro Devices, Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: AMD
++ *
++ */
++#ifndef GAMMA_TYPES_H_
++#define GAMMA_TYPES_H_
++
++#include "dc_types.h"
++#include "dc_services_types.h"
++
++/* TODO: Used in IPP and OPP */
++struct dev_c_lut {
++ uint8_t red;
++ uint8_t green;
++ uint8_t blue;
++};
++
++struct dev_c_lut16 {
++ uint16_t red;
++ uint16_t green;
++ uint16_t blue;
++};
++
++struct regamma_ramp {
++ uint16_t gamma[RGB_256X3X16 * 3];
++};
++
++/* used by Graphics and Overlay gamma */
++struct gamma_coeff {
++ int32_t gamma[3];
++ int32_t a0[3]; /* index 0 for red, 1 for green, 2 for blue */
++ int32_t a1[3];
++ int32_t a2[3];
++ int32_t a3[3];
++};
++
++struct regamma_lut {
++ union {
++ struct {
++ uint32_t GRAPHICS_DEGAMMA_SRGB :1;
++ uint32_t OVERLAY_DEGAMMA_SRGB :1;
++ uint32_t GAMMA_RAMP_ARRAY :1;
++ uint32_t APPLY_DEGAMMA :1;
++ uint32_t RESERVED :28;
++ } bits;
++ uint32_t value;
++ } features;
++
++ union {
++ struct regamma_ramp regamma_ramp;
++ struct gamma_coeff gamma_coeff;
++ };
++};
++
++union gamma_flag {
++ struct {
++ uint32_t config_is_changed :1;
++ uint32_t both_pipe_req :1;
++ uint32_t regamma_update :1;
++ uint32_t gamma_update :1;
++ uint32_t reserved :28;
++ } bits;
++ uint32_t u_all;
++};
++
++enum graphics_regamma_adjust {
++ GRAPHICS_REGAMMA_ADJUST_BYPASS = 0, GRAPHICS_REGAMMA_ADJUST_HW, /* without adjustments */
++ GRAPHICS_REGAMMA_ADJUST_SW /* use adjustments */
++};
++
++enum graphics_gamma_lut {
++ GRAPHICS_GAMMA_LUT_LEGACY = 0, /* use only legacy LUT */
++ GRAPHICS_GAMMA_LUT_REGAMMA, /* use only regamma LUT */
++ GRAPHICS_GAMMA_LUT_LEGACY_AND_REGAMMA /* use legacy & regamma LUT's */
++};
++
++enum graphics_degamma_adjust {
++ GRAPHICS_DEGAMMA_ADJUST_BYPASS = 0, GRAPHICS_DEGAMMA_ADJUST_HW, /*without adjustments */
++ GRAPHICS_DEGAMMA_ADJUST_SW /* use adjustments */
++};
++
++struct gamma_parameters {
++ union gamma_flag flag;
++ enum pixel_format surface_pixel_format; /*OS surface pixel format*/
++ struct regamma_lut regamma;
++
++ enum graphics_regamma_adjust regamma_adjust_type;
++ enum graphics_degamma_adjust degamma_adjust_type;
++
++ enum graphics_gamma_lut selected_gamma_lut;
++
++ bool disable_adjustments;
++
++ /* here we grow with parameters if necessary */
++};
++
++#endif
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h
+index 0bbf9b5..1dedf7c 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h
+@@ -27,6 +27,15 @@
+ #define __DC_HW_SEQUENCER_H__
+ #include "core_types.h"
+
++struct gamma_parameters;
++
++enum pipe_gating_control {
++ PIPE_GATING_CONTROL_DISABLE = 0,
++ PIPE_GATING_CONTROL_ENABLE,
++ PIPE_GATING_CONTROL_INIT
++};
++
++
+ struct hw_sequencer_funcs {
+
+ enum dc_status (*apply_ctx_to_hw)(
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/ipp.h b/drivers/gpu/drm/amd/dal/dc/inc/ipp.h
+index e7151cd..8e7cc31 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/ipp.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/ipp.h
+@@ -32,6 +32,7 @@
+ #include "include/video_csc_types.h"
+ #include "include/hw_sequencer_types.h"
+
++struct dev_c_lut;
+
+ #define MAXTRIX_COEFFICIENTS_NUMBER 12
+ #define MAXTRIX_COEFFICIENTS_WRAP_NUMBER (MAXTRIX_COEFFICIENTS_NUMBER + 4)
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/mem_input.h b/drivers/gpu/drm/amd/dal/dc/inc/mem_input.h
+index 2647f84..4d653ab 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/mem_input.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/mem_input.h
+@@ -57,7 +57,7 @@ struct mem_input_funcs {
+ bool (*mem_input_program_surface_config)(
+ struct mem_input *mem_input,
+ enum surface_pixel_format format,
+- union plane_tiling_info *tiling_info,
++ union dc_tiling_info *tiling_info,
+ union plane_size *plane_size,
+ enum dc_rotation_angle rotation);
+ };
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/opp.h b/drivers/gpu/drm/amd/dal/dc/inc/opp.h
+index 543848a..f2171de 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/opp.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/opp.h
+@@ -26,14 +26,74 @@
+ #ifndef __DAL_OPP_H__
+ #define __DAL_OPP_H__
+
+-#include "dc_temp.h"
++#include "dc_types.h"
+ #include "grph_object_id.h"
+ #include "grph_csc_types.h"
++#include "dc_services_types.h"
+
+ struct fixed31_32;
++struct gamma_parameters;
+
+ /* TODO: Need cleanup */
+
++enum clamping_range {
++ CLAMPING_FULL_RANGE = 0, /* No Clamping */
++ CLAMPING_LIMITED_RANGE_8BPC, /* 8 bpc: Clamping 1 to FE */
++ CLAMPING_LIMITED_RANGE_10BPC, /* 10 bpc: Clamping 4 to 3FB */
++ CLAMPING_LIMITED_RANGE_12BPC, /* 12 bpc: Clamping 10 to FEF */
++ /* Use programmable clampping value on FMT_CLAMP_COMPONENT_R/G/B. */
++ CLAMPING_LIMITED_RANGE_PROGRAMMABLE
++};
++
++struct clamping_and_pixel_encoding_params {
++ enum dc_pixel_encoding pixel_encoding; /* Pixel Encoding */
++ enum clamping_range clamping_level; /* Clamping identifier */
++ enum dc_color_depth c_depth; /* Deep color use. */
++};
++
++struct bit_depth_reduction_params {
++ struct {
++ /* truncate/round */
++ /* trunc/round enabled*/
++ uint32_t TRUNCATE_ENABLED:1;
++ /* 2 bits: 0=6 bpc, 1=8 bpc, 2 = 10bpc*/
++ uint32_t TRUNCATE_DEPTH:2;
++ /* truncate or round*/
++ uint32_t TRUNCATE_MODE:1;
++
++ /* spatial dither */
++ /* Spatial Bit Depth Reduction enabled*/
++ uint32_t SPATIAL_DITHER_ENABLED:1;
++ /* 2 bits: 0=6 bpc, 1 = 8 bpc, 2 = 10bpc*/
++ uint32_t SPATIAL_DITHER_DEPTH:2;
++ /* 0-3 to select patterns*/
++ uint32_t SPATIAL_DITHER_MODE:2;
++ /* Enable RGB random dithering*/
++ uint32_t RGB_RANDOM:1;
++ /* Enable Frame random dithering*/
++ uint32_t FRAME_RANDOM:1;
++ /* Enable HighPass random dithering*/
++ uint32_t HIGHPASS_RANDOM:1;
++
++ /* temporal dither*/
++ /* frame modulation enabled*/
++ uint32_t FRAME_MODULATION_ENABLED:1;
++ /* same as for trunc/spatial*/
++ uint32_t FRAME_MODULATION_DEPTH:2;
++ /* 2/4 gray levels*/
++ uint32_t TEMPORAL_LEVEL:1;
++ uint32_t FRC25:2;
++ uint32_t FRC50:2;
++ uint32_t FRC75:2;
++ } flags;
++
++ uint32_t r_seed_value;
++ uint32_t b_seed_value;
++ uint32_t g_seed_value;
++};
++
++
++
+ enum wide_gamut_regamma_mode {
+ /* 0x0 - BITS2:0 Bypass */
+ WIDE_GAMUT_REGAMMA_MODE_GRAPHICS_BYPASS,
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/transform.h b/drivers/gpu/drm/amd/dal/dc/inc/transform.h
+index d453aac..2280357 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/transform.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/transform.h
+@@ -31,6 +31,8 @@
+ #include "calcs/scaler_filter.h"
+ #include "grph_object_id.h"
+
++struct bit_depth_reduction_params;
++
+ enum scaling_type {
+ SCALING_TYPE_NO_SCALING = 0,
+ SCALING_TYPE_UPSCALING,
+diff --git a/drivers/gpu/drm/amd/dal/include/fixed32_32.h b/drivers/gpu/drm/amd/dal/include/fixed32_32.h
+index 5fca957..1a26eea 100644
+--- a/drivers/gpu/drm/amd/dal/include/fixed32_32.h
++++ b/drivers/gpu/drm/amd/dal/include/fixed32_32.h
+@@ -26,6 +26,8 @@
+ #ifndef __DAL_FIXED32_32_H__
+ #define __DAL_FIXED32_32_H__
+
++#include "dc_services_types.h"
++
+ struct fixed32_32 {
+ uint64_t value;
+ };
+diff --git a/drivers/gpu/drm/amd/dal/include/video_gamma_types.h b/drivers/gpu/drm/amd/dal/include/video_gamma_types.h
+index dc294b6..6f9cd3f 100644
+--- a/drivers/gpu/drm/amd/dal/include/video_gamma_types.h
++++ b/drivers/gpu/drm/amd/dal/include/video_gamma_types.h
+@@ -27,6 +27,7 @@
+ #define __DAL_VIDEO_GAMMA_TYPES_H__
+
+ #include "set_mode_types.h"
++#include "gamma_types.h"
+
+ enum overlay_gamma_adjust {
+ OVERLAY_GAMMA_ADJUST_BYPASS,
+--
+2.7.4
+