diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0820-drm-amd-dal-Define-new-ipp-functions-for-diags.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0820-drm-amd-dal-Define-new-ipp-functions-for-diags.patch | 517 |
1 files changed, 517 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0820-drm-amd-dal-Define-new-ipp-functions-for-diags.patch b/common/recipes-kernel/linux/files/0820-drm-amd-dal-Define-new-ipp-functions-for-diags.patch new file mode 100644 index 00000000..543dc7bc --- /dev/null +++ b/common/recipes-kernel/linux/files/0820-drm-amd-dal-Define-new-ipp-functions-for-diags.patch @@ -0,0 +1,517 @@ +From 0db01598b1e4618521164542693767fdf92e4260 Mon Sep 17 00:00:00 2001 +From: Eric Yang <eric.yang2@amd.com> +Date: Fri, 19 Feb 2016 14:50:16 -0500 +Subject: [PATCH 0820/1110] drm/amd/dal: Define new ipp functions for diags + +Define new ipp functions for diags, created new file +hw_shared.h for types shared between different +virtual HW blocks. Minor clean up. + +Signed-off-by: Eric Yang <eric.yang2@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +--- + drivers/gpu/drm/amd/dal/dc/calcs/gamma_calcs.c | 2 +- + .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 4 +- + drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.h | 2 +- + .../gpu/drm/amd/dal/dc/dce110/dce110_opp_regamma.c | 6 +- + .../drm/amd/dal/dc/dce110/dce110_opp_regamma_v.c | 6 +- + drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_v.h | 2 +- + drivers/gpu/drm/amd/dal/dc/dce80/dce80_opp.h | 2 +- + .../gpu/drm/amd/dal/dc/dce80/dce80_opp_regamma.c | 6 +- + drivers/gpu/drm/amd/dal/dc/inc/gamma_calcs.h | 2 +- + drivers/gpu/drm/amd/dal/dc/inc/hw_shared.h | 74 ++++++++++++++++++++++ + drivers/gpu/drm/amd/dal/dc/inc/ipp.h | 41 +++++++++--- + drivers/gpu/drm/amd/dal/dc/inc/opp.h | 68 +++++++------------- + .../gpu/drm/amd/dal/include/hw_sequencer_types.h | 8 --- + drivers/gpu/drm/amd/dal/include/video_csc_types.h | 11 ---- + 14 files changed, 146 insertions(+), 88 deletions(-) + create mode 100644 drivers/gpu/drm/amd/dal/dc/inc/hw_shared.h + +diff --git a/drivers/gpu/drm/amd/dal/dc/calcs/gamma_calcs.c b/drivers/gpu/drm/amd/dal/dc/calcs/gamma_calcs.c +index e3a41b3..2fc1809 100644 +--- a/drivers/gpu/drm/amd/dal/dc/calcs/gamma_calcs.c ++++ b/drivers/gpu/drm/amd/dal/dc/calcs/gamma_calcs.c +@@ -1287,7 +1287,7 @@ static bool convert_to_custom_float( + return true; + } + +-void calculate_regamma_params(struct regamma_params *params, ++void calculate_regamma_params(struct pwl_params *params, + struct temp_params *temp_params, + const struct core_gamma *ramp, + const struct core_surface *surface) +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 79ab334..76c2cad 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 +@@ -500,7 +500,7 @@ static bool set_gamma_ramp( + const struct core_surface *surface) + { + struct ipp_prescale_params *prescale_params; +- struct regamma_params *regamma_params; ++ struct pwl_params *regamma_params; + struct temp_params *temp_params; + bool result = false; + +@@ -511,7 +511,7 @@ static bool set_gamma_ramp( + goto prescale_alloc_fail; + + regamma_params = dm_alloc(opp->ctx, +- sizeof(struct regamma_params)); ++ sizeof(struct pwl_params)); + if (regamma_params == NULL) + goto regamma_alloc_fail; + +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 fada94d..cad4efa 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.h ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp.h +@@ -108,7 +108,7 @@ void dce110_opp_power_on_regamma_lut( + + bool dce110_opp_program_regamma_pwl( + struct output_pixel_processor *opp, +- const struct regamma_params *params); ++ const struct pwl_params *params); + + void dce110_opp_set_regamma_mode(struct output_pixel_processor *opp, + enum opp_regamma mode); +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 88803eb..e4f4fe0 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 +@@ -62,7 +62,7 @@ enum { + */ + static void regamma_config_regions_and_segments( + struct dce110_opp *opp110, +- const struct regamma_params *params) ++ const struct pwl_params *params) + { + const struct gamma_curve *curve; + uint32_t value = 0; +@@ -385,7 +385,7 @@ static void regamma_config_regions_and_segments( + + static void program_pwl( + struct dce110_opp *opp110, +- const struct regamma_params *params) ++ const struct pwl_params *params) + { + uint32_t value; + +@@ -485,7 +485,7 @@ static void program_pwl( + + bool dce110_opp_program_regamma_pwl( + struct output_pixel_processor *opp, +- const struct regamma_params *params) ++ const struct pwl_params *params) + { + struct dce110_opp *opp110 = TO_DCE110_OPP(opp); + +diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_regamma_v.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_regamma_v.c +index 8f4cb96..0004c9e 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_regamma_v.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_regamma_v.c +@@ -129,7 +129,7 @@ static void configure_regamma_mode(struct dce110_opp *opp110, uint32_t mode) + ***************************************************************************** + */ + static void regamma_config_regions_and_segments( +- struct dce110_opp *opp110, const struct regamma_params *params) ++ struct dce110_opp *opp110, const struct pwl_params *params) + { + const struct gamma_curve *curve; + uint32_t value = 0; +@@ -450,7 +450,7 @@ static void regamma_config_regions_and_segments( + } + + static void program_pwl(struct dce110_opp *opp110, +- const struct regamma_params *params) ++ const struct pwl_params *params) + { + uint32_t value = 0; + +@@ -493,7 +493,7 @@ static void program_pwl(struct dce110_opp *opp110, + + bool dce110_opp_program_regamma_pwl_v( + struct output_pixel_processor *opp, +- const struct regamma_params *params) ++ const struct pwl_params *params) + { + struct dce110_opp *opp110 = TO_DCE110_OPP(opp); + +diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_v.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_v.h +index d78395a..cb257fb 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_v.h ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_opp_v.h +@@ -47,7 +47,7 @@ void dce110_opp_v_set_csc_adjustment( + + bool dce110_opp_program_regamma_pwl_v( + struct output_pixel_processor *opp, +- const struct regamma_params *params); ++ const struct pwl_params *params); + + void dce110_opp_power_on_regamma_lut_v( + struct output_pixel_processor *opp, +diff --git a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_opp.h b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_opp.h +index db5e0eb..725f18c 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_opp.h ++++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_opp.h +@@ -98,7 +98,7 @@ void dce80_opp_power_on_regamma_lut( + + bool dce80_opp_program_regamma_pwl( + struct output_pixel_processor *opp, +- const struct regamma_params *pamras); ++ const struct pwl_params *pamras); + + void dce80_opp_set_regamma_mode(struct output_pixel_processor *opp, + enum opp_regamma mode); +diff --git a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_opp_regamma.c b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_opp_regamma.c +index ef95e98..5b9663c 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_opp_regamma.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_opp_regamma.c +@@ -67,7 +67,7 @@ struct curve_config { + ***************************************************************************** + */ + static void regamma_config_regions_and_segments( +- struct dce80_opp *opp80, const struct regamma_params *params) ++ struct dce80_opp *opp80, const struct pwl_params *params) + { + const struct gamma_curve *curve; + uint32_t value = 0; +@@ -390,7 +390,7 @@ static void regamma_config_regions_and_segments( + + static void program_pwl( + struct dce80_opp *opp80, +- const struct regamma_params *params) ++ const struct pwl_params *params) + { + uint32_t value; + +@@ -517,7 +517,7 @@ void dce80_opp_power_on_regamma_lut( + + bool dce80_opp_program_regamma_pwl( + struct output_pixel_processor *opp, +- const struct regamma_params *params) ++ const struct pwl_params *params) + { + + struct dce80_opp *opp80 = TO_DCE80_OPP(opp); +diff --git a/drivers/gpu/drm/amd/dal/dc/inc/gamma_calcs.h b/drivers/gpu/drm/amd/dal/dc/inc/gamma_calcs.h +index 4e35960..baab77a 100644 +--- a/drivers/gpu/drm/amd/dal/dc/inc/gamma_calcs.h ++++ b/drivers/gpu/drm/amd/dal/dc/inc/gamma_calcs.h +@@ -23,7 +23,7 @@ struct temp_params { + + }; + +-void calculate_regamma_params(struct regamma_params *params, ++void calculate_regamma_params(struct pwl_params *params, + struct temp_params *temp_params, + const struct core_gamma *ramp, + const struct core_surface *surface); +diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw_shared.h b/drivers/gpu/drm/amd/dal/dc/inc/hw_shared.h +new file mode 100644 +index 0000000..3b0e616 +--- /dev/null ++++ b/drivers/gpu/drm/amd/dal/dc/inc/hw_shared.h +@@ -0,0 +1,74 @@ ++/* ++ * Copyright 2015 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 __DAL_HW_SHARED_H__ ++#define __DAL_HW_SHARED_H__ ++ ++/****************************************************************************** ++ * Data types shared between different Virtual HW blocks ++ ******************************************************************************/ ++struct gamma_curve { ++ uint32_t offset; ++ uint32_t segments_num; ++}; ++ ++struct curve_points { ++ struct fixed31_32 x; ++ struct fixed31_32 y; ++ struct fixed31_32 offset; ++ struct fixed31_32 slope; ++ ++ uint32_t custom_float_x; ++ uint32_t custom_float_y; ++ uint32_t custom_float_offset; ++ uint32_t custom_float_slope; ++}; ++ ++struct pwl_result_data { ++ struct fixed31_32 red; ++ struct fixed31_32 green; ++ struct fixed31_32 blue; ++ ++ struct fixed31_32 delta_red; ++ struct fixed31_32 delta_green; ++ struct fixed31_32 delta_blue; ++ ++ uint32_t red_reg; ++ uint32_t green_reg; ++ uint32_t blue_reg; ++ ++ uint32_t delta_red_reg; ++ uint32_t delta_green_reg; ++ uint32_t delta_blue_reg; ++}; ++ ++struct pwl_params { ++ uint32_t *data; ++ struct gamma_curve arr_curve_points[16]; ++ struct curve_points arr_points[3]; ++ struct pwl_result_data rgb_resulted[256 + 3]; ++ uint32_t hw_points_num; ++}; ++#endif /* __DAL_HW_SHARED_H__ */ +diff --git a/drivers/gpu/drm/amd/dal/dc/inc/ipp.h b/drivers/gpu/drm/amd/dal/dc/inc/ipp.h +index 4599d68..9081820 100644 +--- a/drivers/gpu/drm/amd/dal/dc/inc/ipp.h ++++ b/drivers/gpu/drm/amd/dal/dc/inc/ipp.h +@@ -27,11 +27,7 @@ + #ifndef __DAL_IPP_H__ + #define __DAL_IPP_H__ + +-#include "include/grph_object_id.h" +-#include "include/video_csc_types.h" +-#include "include/hw_sequencer_types.h" +- +-struct dev_c_lut; ++#include "hw_shared.h" + + #define MAXTRIX_COEFFICIENTS_NUMBER 12 + #define MAXTRIX_COEFFICIENTS_WRAP_NUMBER (MAXTRIX_COEFFICIENTS_NUMBER + 4) +@@ -78,9 +74,20 @@ struct dcp_video_matrix { + int32_t value[MAXTRIX_COEFFICIENTS_NUMBER]; + }; + ++enum expansion_mode { ++ EXPANSION_MODE_ZERO, ++ EXPANSION_MODE_DYNAMIC ++}; ++ ++enum ipp_output_format { ++ IPP_OUTPUT_FORMAT_12_BIT_FIX, ++ IPP_OUTPUT_FORMAT_16_BIT_BYPASS, ++ IPP_OUTPUT_FORMAT_FLOAT ++}; ++ + struct ipp_funcs { + +- /* CURSOR RELATED */ ++ /*** cursor ***/ + bool (*ipp_cursor_set_position)( + struct input_pixel_processor *ipp, + const struct dc_cursor_position *position); +@@ -89,14 +96,30 @@ struct ipp_funcs { + struct input_pixel_processor *ipp, + const struct dc_cursor_attributes *attributes); + +- /* DEGAMMA RELATED */ ++ /*** setup input pixel processing ***/ ++ ++ /* put the entire pixel processor to bypass */ ++ void (*ipp_full_bypass)(struct input_pixel_processor *ipp); ++ ++ /* setup ipp to expand/convert input to pixel processor internal format */ ++ void (*ipp_setup)( ++ enum surface_pixel_format input_format, ++ enum expansion_mode mode, ++ enum ipp_output_format output_format); ++ ++ /* DCE function to setup IPP. TODO: see if we can consolidate to setup */ ++ void (*ipp_program_prescale)( ++ struct input_pixel_processor *ipp, ++ struct ipp_prescale_params *params); ++ ++ /*** DEGAMMA RELATED ***/ + bool (*ipp_set_degamma)( + struct input_pixel_processor *ipp, + enum ipp_degamma_mode mode); + +- void (*ipp_program_prescale)( ++ bool (*ipp_program_degamma_pwl)( + struct input_pixel_processor *ipp, +- struct ipp_prescale_params *params); ++ const struct pwl_params *params); + + }; + +diff --git a/drivers/gpu/drm/amd/dal/dc/inc/opp.h b/drivers/gpu/drm/amd/dal/dc/inc/opp.h +index 3d8fe0d..5335b0e 100644 +--- a/drivers/gpu/drm/amd/dal/dc/inc/opp.h ++++ b/drivers/gpu/drm/amd/dal/dc/inc/opp.h +@@ -30,6 +30,7 @@ + #include "grph_object_id.h" + #include "video_csc_types.h" + #include "hw_sequencer_types.h" ++#include "hw_shared.h" + + struct fixed31_32; + struct gamma_parameters; +@@ -116,47 +117,12 @@ enum wide_gamut_regamma_mode { + WIDE_GAMUT_REGAMMA_MODE_OVL_MATRIX_B + }; + +-struct pwl_result_data { +- struct fixed31_32 red; +- struct fixed31_32 green; +- struct fixed31_32 blue; +- +- struct fixed31_32 delta_red; +- struct fixed31_32 delta_green; +- struct fixed31_32 delta_blue; +- +- uint32_t red_reg; +- uint32_t green_reg; +- uint32_t blue_reg; +- +- uint32_t delta_red_reg; +- uint32_t delta_green_reg; +- uint32_t delta_blue_reg; +-}; +- + struct gamma_pixel { + struct fixed31_32 r; + struct fixed31_32 g; + struct fixed31_32 b; + }; + +-struct gamma_curve { +- uint32_t offset; +- uint32_t segments_num; +-}; +- +-struct curve_points { +- struct fixed31_32 x; +- struct fixed31_32 y; +- struct fixed31_32 offset; +- struct fixed31_32 slope; +- +- uint32_t custom_float_x; +- uint32_t custom_float_y; +- uint32_t custom_float_offset; +- uint32_t custom_float_slope; +-}; +- + enum channel_name { + CHANNEL_NAME_RED, + CHANNEL_NAME_GREEN, +@@ -260,14 +226,6 @@ enum fmt_stereo_action { + FMT_STEREO_ACTION_UPDATE_POLARITY + }; + +-struct regamma_params { +- uint32_t *data; +- struct gamma_curve arr_curve_points[16]; +- struct curve_points arr_points[3]; +- struct pwl_result_data rgb_resulted[256 + 3]; +- uint32_t hw_points_num; +-}; +- + enum graphics_csc_adjust_type { + GRAPHICS_CSC_ADJUST_TYPE_BYPASS = 0, + GRAPHICS_CSC_ADJUST_TYPE_HW, /* without adjustments */ +@@ -300,6 +258,28 @@ struct opp_grph_csc_adjustment { + int32_t grph_hue; + }; + ++ ++/* Underlay related types */ ++ ++struct hw_adjustment_range { ++ int32_t hw_default; ++ int32_t min; ++ int32_t max; ++ int32_t step; ++ uint32_t divider; /* (actually HW range is min/divider; divider !=0) */ ++}; ++ ++enum ovl_csc_adjust_item { ++ OVERLAY_BRIGHTNESS = 0, ++ OVERLAY_GAMMA, ++ OVERLAY_CONTRAST, ++ OVERLAY_SATURATION, ++ OVERLAY_HUE, ++ OVERLAY_ALPHA, ++ OVERLAY_ALPHA_PER_PIX, ++ OVERLAY_COLOR_TEMPERATURE ++}; ++ + struct opp_funcs { + void (*opp_power_on_regamma_lut)( + struct output_pixel_processor *opp, +@@ -307,7 +287,7 @@ struct opp_funcs { + + bool (*opp_program_regamma_pwl)( + struct output_pixel_processor *opp, +- const struct regamma_params *params); ++ const struct pwl_params *params); + + void (*opp_set_regamma_mode)(struct output_pixel_processor *opp, + enum opp_regamma mode); +diff --git a/drivers/gpu/drm/amd/dal/include/hw_sequencer_types.h b/drivers/gpu/drm/amd/dal/include/hw_sequencer_types.h +index ad7b906..9e32674 100644 +--- a/drivers/gpu/drm/amd/dal/include/hw_sequencer_types.h ++++ b/drivers/gpu/drm/amd/dal/include/hw_sequencer_types.h +@@ -293,12 +293,4 @@ enum channel_command_type { + #define TMDS_MAX_PIXEL_CLOCK_IN_KHZ 165000 + #define NATIVE_HDMI_MAX_PIXEL_CLOCK_IN_KHZ 297000 + +-struct hw_adjustment_range { +- int32_t hw_default; +- int32_t min; +- int32_t max; +- int32_t step; +- uint32_t divider; /* (actually HW range is min/divider; divider !=0) */ +-}; +- + #endif +diff --git a/drivers/gpu/drm/amd/dal/include/video_csc_types.h b/drivers/gpu/drm/amd/dal/include/video_csc_types.h +index 515f75b..d8526d3 100644 +--- a/drivers/gpu/drm/amd/dal/include/video_csc_types.h ++++ b/drivers/gpu/drm/amd/dal/include/video_csc_types.h +@@ -107,17 +107,6 @@ struct ovl_csc_adjustment { + + }; + +-enum ovl_csc_adjust_item { +- OVERLAY_BRIGHTNESS = 0, +- OVERLAY_GAMMA, +- OVERLAY_CONTRAST, +- OVERLAY_SATURATION, +- OVERLAY_HUE, +- OVERLAY_ALPHA, +- OVERLAY_ALPHA_PER_PIX, +- OVERLAY_COLOR_TEMPERATURE +-}; +- + struct input_csc_matrix { + enum color_space color_space; + uint16_t regval[12]; +-- +2.7.4 + |