aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0737-drm-amd-display-implement-DXGI-Gamma-Ramps.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0737-drm-amd-display-implement-DXGI-Gamma-Ramps.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0737-drm-amd-display-implement-DXGI-Gamma-Ramps.patch150
1 files changed, 150 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0737-drm-amd-display-implement-DXGI-Gamma-Ramps.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0737-drm-amd-display-implement-DXGI-Gamma-Ramps.patch
new file mode 100644
index 00000000..3114fbe1
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0737-drm-amd-display-implement-DXGI-Gamma-Ramps.patch
@@ -0,0 +1,150 @@
+From 2f03d203e6caca405983c086d3774601a385c318 Mon Sep 17 00:00:00 2001
+From: Anthony Koo <Anthony.Koo@amd.com>
+Date: Thu, 3 Aug 2017 09:59:23 -0400
+Subject: [PATCH 0737/4131] drm/amd/display: implement DXGI Gamma Ramps
+
+Support for gamma correction ramp in Floating Point format
+
+Signed-off-by: Anthony Koo <anthony.koo@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 +++++++-------
+ drivers/gpu/drm/amd/display/dc/dc_hw_types.h | 21 ++++++++++++++++-----
+ drivers/gpu/drm/amd/display/dc/dce/dce_ipp.c | 14 ++++++++++----
+ drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c | 11 +++++++----
+ 4 files changed, 40 insertions(+), 20 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index 031f31c..ced885a 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -1879,15 +1879,14 @@ static int fill_plane_attributes_from_fb(
+
+ }
+
+-#define NUM_OF_RAW_GAMMA_RAMP_RGB_256 256
+-
+ static void fill_gamma_from_crtc_state(
+ const struct drm_crtc_state *crtc_state,
+ struct dc_plane_state *plane_state)
+ {
+ int i;
+ struct dc_gamma *gamma;
+- struct drm_color_lut *lut = (struct drm_color_lut *) crtc_state->gamma_lut->data;
++ struct drm_color_lut *lut =
++ (struct drm_color_lut *) crtc_state->gamma_lut->data;
+
+ gamma = dc_create_gamma();
+
+@@ -1896,10 +1895,11 @@ static void fill_gamma_from_crtc_state(
+ return;
+ }
+
+- for (i = 0; i < NUM_OF_RAW_GAMMA_RAMP_RGB_256; i++) {
+- gamma->red[i] = lut[i].red;
+- gamma->green[i] = lut[i].green;
+- gamma->blue[i] = lut[i].blue;
++ gamma->type = GAMMA_RGB_256_ENTRIES;
++ for (i = 0; i < GAMMA_RGB_256_ENTRIES; i++) {
++ gamma->entries.red[i] = dal_fixed31_32_from_int(lut[i].red);
++ gamma->entries.green[i] = dal_fixed31_32_from_int(lut[i].green);
++ gamma->entries.blue[i] = dal_fixed31_32_from_int(lut[i].blue);
+ }
+
+ plane_state->gamma_correction = gamma;
+diff --git a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
+index 778bd55..8d15046 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
++++ b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
+@@ -409,20 +409,31 @@ struct dc_cursor_mi_param {
+ /* IPP related types */
+
+ enum {
+- INPUT_LUT_ENTRIES = 256
++ GAMMA_RGB_256_ENTRIES = 256,
++ GAMMA_RGB_FLOAT_1024_ENTRIES = 1024,
++ GAMMA_MAX_ENTRIES = 1024
++};
++
++enum dc_gamma_type {
++ GAMMA_RGB_256 = 1,
++ GAMMA_RGB_FLOAT_1024 = 2
+ };
+
+ struct dc_gamma {
+- uint16_t red[INPUT_LUT_ENTRIES];
+- uint16_t green[INPUT_LUT_ENTRIES];
+- uint16_t blue[INPUT_LUT_ENTRIES];
++ enum dc_gamma_type type;
++ unsigned int num_entries;
++
++ struct dc_gamma_entries {
++ struct fixed31_32 red[GAMMA_MAX_ENTRIES];
++ struct fixed31_32 green[GAMMA_MAX_ENTRIES];
++ struct fixed31_32 blue[GAMMA_MAX_ENTRIES];
++ } entries;
+
+ /* private to DC core */
+ struct dc_context *ctx;
+
+ /* private to dc_surface.c */
+ int ref_count;
+-
+ };
+
+ /* Used by both ipp amd opp functions*/
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_ipp.c b/drivers/gpu/drm/amd/display/dc/dce/dce_ipp.c
+index 9e8f0a3..e010cf1 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_ipp.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_ipp.c
+@@ -193,10 +193,16 @@ static void dce_ipp_program_input_lut(
+ REG_SET(DC_LUT_RW_INDEX, 0,
+ DC_LUT_RW_INDEX, 0);
+
+- for (i = 0; i < INPUT_LUT_ENTRIES; i++) {
+- REG_SET(DC_LUT_SEQ_COLOR, 0, DC_LUT_SEQ_COLOR, gamma->red[i]);
+- REG_SET(DC_LUT_SEQ_COLOR, 0, DC_LUT_SEQ_COLOR, gamma->green[i]);
+- REG_SET(DC_LUT_SEQ_COLOR, 0, DC_LUT_SEQ_COLOR, gamma->blue[i]);
++ for (i = 0; i < gamma->num_entries; i++) {
++ REG_SET(DC_LUT_SEQ_COLOR, 0, DC_LUT_SEQ_COLOR,
++ dal_fixed31_32_round(
++ gamma->entries.red[i]));
++ REG_SET(DC_LUT_SEQ_COLOR, 0, DC_LUT_SEQ_COLOR,
++ dal_fixed31_32_round(
++ gamma->entries.green[i]));
++ REG_SET(DC_LUT_SEQ_COLOR, 0, DC_LUT_SEQ_COLOR,
++ dal_fixed31_32_round(
++ gamma->entries.blue[i]));
+ }
+
+ /* power off LUT memory */
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c
+index ee12f67..8ee8305 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c
+@@ -910,13 +910,16 @@ static void ippn10_program_input_lut(
+ CM_IGAM_LUT_FORMAT_B, 3);
+ // Start at index 0 of IGAM LUT
+ REG_UPDATE(CM_IGAM_LUT_RW_INDEX, CM_IGAM_LUT_RW_INDEX, 0);
+- for (i = 0; i < INPUT_LUT_ENTRIES; i++) {
++ for (i = 0; i < gamma->num_entries; i++) {
+ REG_SET(CM_IGAM_LUT_SEQ_COLOR, 0, CM_IGAM_LUT_SEQ_COLOR,
+- gamma->red[i]);
++ dal_fixed31_32_round(
++ gamma->entries.red[i]));
+ REG_SET(CM_IGAM_LUT_SEQ_COLOR, 0, CM_IGAM_LUT_SEQ_COLOR,
+- gamma->green[i]);
++ dal_fixed31_32_round(
++ gamma->entries.green[i]));
+ REG_SET(CM_IGAM_LUT_SEQ_COLOR, 0, CM_IGAM_LUT_SEQ_COLOR,
+- gamma->blue[i]);
++ dal_fixed31_32_round(
++ gamma->entries.blue[i]));
+ }
+ // Power off LUT memory
+ REG_SET(CM_MEM_PWR_CTRL, 0, SHARED_MEM_PWR_DIS, 0);
+--
+2.7.4
+