aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0974-drm-amd-dal-Filter-HDMI-4k60-for-dce10.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0974-drm-amd-dal-Filter-HDMI-4k60-for-dce10.patch')
-rw-r--r--common/recipes-kernel/linux/files/0974-drm-amd-dal-Filter-HDMI-4k60-for-dce10.patch400
1 files changed, 400 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0974-drm-amd-dal-Filter-HDMI-4k60-for-dce10.patch b/common/recipes-kernel/linux/files/0974-drm-amd-dal-Filter-HDMI-4k60-for-dce10.patch
new file mode 100644
index 00000000..bf066ca4
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0974-drm-amd-dal-Filter-HDMI-4k60-for-dce10.patch
@@ -0,0 +1,400 @@
+From 0e2f792c9b2feea587fd068e98c6204efc20619e Mon Sep 17 00:00:00 2001
+From: Jordan Lazare <Jordan.Lazare@amd.com>
+Date: Wed, 16 Mar 2016 13:44:46 -0400
+Subject: [PATCH 0974/1110] drm/amd/dal: Filter HDMI@4k60 for dce10
+
+Refactor code to use hdmi pixel clock maximums per dce
+
+Signed-off-by: Jordan Lazare <Jordan.Lazare@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/dal/dc/dce100/Makefile | 2 +-
+ .../drm/amd/dal/dc/dce100/dce100_link_encoder.c | 89 ++++++++++++++++++++++
+ .../drm/amd/dal/dc/dce100/dce100_link_encoder.h | 42 ++++++++++
+ .../gpu/drm/amd/dal/dc/dce100/dce100_resource.c | 9 +--
+ .../drm/amd/dal/dc/dce110/dce110_link_encoder.c | 32 +++-----
+ .../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 5 --
+ .../gpu/drm/amd/dal/dc/dce112/dce112_resource.c | 5 --
+ .../gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c | 5 ++
+ drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c | 5 --
+ drivers/gpu/drm/amd/dal/dc/inc/core_types.h | 7 --
+ drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h | 4 +-
+ 11 files changed, 153 insertions(+), 52 deletions(-)
+ create mode 100644 drivers/gpu/drm/amd/dal/dc/dce100/dce100_link_encoder.c
+ create mode 100644 drivers/gpu/drm/amd/dal/dc/dce100/dce100_link_encoder.h
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce100/Makefile b/drivers/gpu/drm/amd/dal/dc/dce100/Makefile
+index 656c38e..5fb7e7b 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce100/Makefile
++++ b/drivers/gpu/drm/amd/dal/dc/dce100/Makefile
+@@ -2,7 +2,7 @@
+ # Makefile for the 'controller' sub-component of DAL.
+ # It provides the control and status of HW CRTC block.
+
+-DCE100 = dce100_resource.o dce100_hw_sequencer.o
++DCE100 = dce100_resource.o dce100_hw_sequencer.o dce100_link_encoder.o
+
+ AMD_DAL_DCE100 = $(addprefix $(AMDDALPATH)/dc/dce100/,$(DCE100))
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_link_encoder.c
+new file mode 100644
+index 0000000..5f294ee
+--- /dev/null
++++ b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_link_encoder.c
+@@ -0,0 +1,89 @@
++/*
++ * 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
++ *
++ */
++
++#include "dm_services.h"
++#include "core_types.h"
++#include "dce100_link_encoder.h"
++#include "stream_encoder.h"
++#include "../dce110/dce110_link_encoder.h"
++#include "i2caux_interface.h"
++
++/* TODO: change to dce80 header file */
++#include "dce/dce_10_0_d.h"
++#include "dce/dce_10_0_sh_mask.h"
++#include "dce/dce_10_0_enum.h"
++
++#define LINK_REG(reg)\
++ (enc110->link_regs->reg)
++
++#define DCE10_UNIPHY_MAX_PIXEL_CLK_IN_KHZ 300000
++
++
++static struct link_encoder_funcs dce100_lnk_enc_funcs = {
++ .validate_output_with_stream =
++ dce110_link_encoder_validate_output_with_stream,
++ .hw_init = dce110_link_encoder_hw_init,
++ .setup = dce110_link_encoder_setup,
++ .enable_tmds_output = dce110_link_encoder_enable_tmds_output,
++ .enable_dp_output = dce110_link_encoder_enable_dp_output,
++ .enable_dp_mst_output = dce110_link_encoder_enable_dp_mst_output,
++ .disable_output = dce110_link_encoder_disable_output,
++ .dp_set_lane_settings = dce110_link_encoder_dp_set_lane_settings,
++ .dp_set_phy_pattern = dce110_link_encoder_dp_set_phy_pattern,
++ .update_mst_stream_allocation_table =
++ dce110_link_encoder_update_mst_stream_allocation_table,
++ .set_lcd_backlight_level = dce110_link_encoder_set_lcd_backlight_level,
++ .backlight_control = dce110_link_encoder_edp_backlight_control,
++ .power_control = dce110_link_encoder_edp_power_control,
++ .connect_dig_be_to_fe = dce110_link_encoder_connect_dig_be_to_fe,
++ .destroy = dce110_link_encoder_destroy
++};
++
++bool dce100_link_encoder_construct(
++ struct dce110_link_encoder *enc110,
++ const struct encoder_init_data *init_data,
++ const struct dce110_link_enc_registers *link_regs,
++ const struct dce110_link_enc_aux_registers *aux_regs,
++ const struct dce110_link_enc_bl_registers *bl_regs)
++{
++ dce110_link_encoder_construct(
++ enc110,
++ init_data,
++ link_regs,
++ aux_regs,
++ bl_regs);
++
++ enc110->base.funcs = &dce100_lnk_enc_funcs;
++
++ enc110->base.features.flags.bits.IS_HBR3_CAPABLE = false;
++ enc110->base.features.flags.bits.IS_TPS4_CAPABLE = false;
++
++ enc110->base.features.max_hdmi_pixel_clock =
++ DCE10_UNIPHY_MAX_PIXEL_CLK_IN_KHZ;
++ enc110->base.features.max_deep_color = COLOR_DEPTH_121212;
++ enc110->base.features.max_hdmi_deep_color = COLOR_DEPTH_121212;
++
++ return true;
++}
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_link_encoder.h b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_link_encoder.h
+new file mode 100644
+index 0000000..ae0712f
+--- /dev/null
++++ b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_link_encoder.h
+@@ -0,0 +1,42 @@
++/*
++ * 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_LINK_ENCODER__DCE100_H__
++#define __DC_LINK_ENCODER__DCE100_H__
++
++#include "link_encoder.h"
++#include "../dce110/dce110_link_encoder.h"
++
++#define TO_DCE100_LINK_ENC(link_encoder)\
++ container_of(link_encoder, struct dce100_link_encoder, base)
++
++bool dce100_link_encoder_construct(
++ struct dce110_link_encoder *enc110,
++ const struct encoder_init_data *init_data,
++ const struct dce110_link_enc_registers *link_regs,
++ const struct dce110_link_enc_aux_registers *aux_regs,
++ const struct dce110_link_enc_bl_registers *bl_regs);
++
++#endif /* __DC_LINK_ENCODER__DCE100_H__ */
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
+index a4dba58..5185e91 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
+@@ -39,6 +39,7 @@
+ #include "dce110/dce110_mem_input_v.h"
+ #include "dce110/dce110_ipp.h"
+ #include "dce110/dce110_transform.h"
++#include "dce100/dce100_link_encoder.h"
+ #include "dce110/dce110_stream_encoder.h"
+ #include "dce110/dce110_opp.h"
+ #include "dce110/dce110_clock_source.h"
+@@ -442,7 +443,7 @@ struct link_encoder *dce100_link_encoder_create(
+ if (!enc110)
+ return NULL;
+
+- if (dce110_link_encoder_construct(
++ if (dce100_link_encoder_construct(
+ enc110,
+ enc_init_data,
+ &link_enc_regs[enc_init_data->transmitter],
+@@ -683,11 +684,6 @@ static void get_pixel_clock_parameters(
+
+ static enum dc_status build_pipe_hw_param(struct pipe_ctx *pipe_ctx)
+ {
+- /*TODO: unhardcode*/
+- pipe_ctx->max_tmds_clk_from_edid_in_mhz = 0;
+- pipe_ctx->max_hdmi_deep_color = COLOR_DEPTH_121212;
+- pipe_ctx->max_hdmi_pixel_clock = 600000;
+-
+ get_pixel_clock_parameters(pipe_ctx, &pipe_ctx->pix_clk_params);
+ pipe_ctx->clock_source->funcs->get_pix_clk_dividers(
+ pipe_ctx->clock_source,
+@@ -741,7 +737,6 @@ static enum dc_status validate_mapped_resource(
+ return DC_FAIL_ENC_VALIDATE;
+
+ /* TODO: validate audio ASIC caps, encoder */
+-
+ status = dc_link_validate_mode_timing(stream->sink,
+ link,
+ &stream->public.timing);
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c
+index 0e5588a..8da3e4d 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c
+@@ -929,20 +929,13 @@ static bool validate_dvi_output(
+
+ static bool validate_hdmi_output(
+ const struct dce110_link_encoder *enc110,
+- const struct dc_crtc_timing *crtc_timing,
+- uint32_t max_tmds_clk_from_edid_in_mhz,
+- enum dc_color_depth max_hdmi_deep_color,
+- uint32_t max_hdmi_pixel_clock)
++ const struct dc_crtc_timing *crtc_timing)
+ {
+- enum dc_color_depth max_deep_color = max_hdmi_deep_color;
++ enum dc_color_depth max_deep_color =
++ enc110->base.features.max_hdmi_deep_color;
+ /* expressed in KHz */
+ uint32_t pixel_clock = 0;
+
+- /*TODO: unhardcode*/
+- max_tmds_clk_from_edid_in_mhz = 0;
+- max_hdmi_deep_color = COLOR_DEPTH_121212;
+- max_hdmi_pixel_clock = 600000;
+-
+ if (max_deep_color > enc110->base.features.max_deep_color)
+ max_deep_color = enc110->base.features.max_deep_color;
+
+@@ -972,12 +965,8 @@ static bool validate_hdmi_output(
+ break;
+ }
+
+- if (max_tmds_clk_from_edid_in_mhz > 0)
+- if (pixel_clock > max_tmds_clk_from_edid_in_mhz * 1000)
+- return false;
+-
+ if ((pixel_clock == 0) ||
+- (pixel_clock > max_hdmi_pixel_clock) ||
++ (pixel_clock > enc110->base.features.max_hdmi_pixel_clock) ||
+ (pixel_clock > enc110->base.features.max_pixel_clock))
+ return false;
+
+@@ -1081,7 +1070,12 @@ bool dce110_link_encoder_construct(
+ enc110->base.features.flags.bits.IS_AUDIO_CAPABLE = true;
+
+ enc110->base.features.max_pixel_clock =
+- DCE11_UNIPHY_MAX_PIXEL_CLK_IN_KHZ;
++ MAX_ENCODER_CLK;
++
++ enc110->base.features.max_hdmi_pixel_clock =
++ DCE11_UNIPHY_MAX_PIXEL_CLK_IN_KHZ;
++ enc110->base.features.max_deep_color = COLOR_DEPTH_121212;
++ enc110->base.features.max_hdmi_deep_color = COLOR_DEPTH_121212;
+
+ /* set the flag to indicate whether driver poll the I2C data pin
+ * while doing the DP sink detect
+@@ -1156,7 +1150,6 @@ bool dce110_link_encoder_construct(
+
+ /* test pattern 3 support */
+ enc110->base.features.flags.bits.IS_TPS3_CAPABLE = true;
+- enc110->base.features.max_deep_color = COLOR_DEPTH_121212;
+
+ enc110->base.features.flags.bits.IS_Y_ONLY_CAPABLE =
+ dal_adapter_service_is_feature_supported(
+@@ -1188,10 +1181,7 @@ bool dce110_link_encoder_validate_output_with_stream(
+ case SIGNAL_TYPE_HDMI_TYPE_A:
+ is_valid = validate_hdmi_output(
+ enc110,
+- &stream->public.timing,
+- pipe_ctx->max_tmds_clk_from_edid_in_mhz,
+- pipe_ctx->max_hdmi_deep_color,
+- pipe_ctx->max_hdmi_pixel_clock);
++ &stream->public.timing);
+ break;
+ case SIGNAL_TYPE_RGB:
+ is_valid = validate_rgb_output(
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
+index b8fc445..ccf6bd8 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
+@@ -630,11 +630,6 @@ static void get_pixel_clock_parameters(
+
+ static enum dc_status build_pipe_hw_param(struct pipe_ctx *pipe_ctx)
+ {
+- /*TODO: unhardcode*/
+- pipe_ctx->max_tmds_clk_from_edid_in_mhz = 0;
+- pipe_ctx->max_hdmi_deep_color = COLOR_DEPTH_121212;
+- pipe_ctx->max_hdmi_pixel_clock = 600000;
+-
+ get_pixel_clock_parameters(pipe_ctx, &pipe_ctx->pix_clk_params);
+ pipe_ctx->clock_source->funcs->get_pix_clk_dividers(
+ pipe_ctx->clock_source,
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c
+index 420b8ca..7b3dee1 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c
+@@ -723,11 +723,6 @@ static void get_pixel_clock_parameters(
+
+ static enum dc_status build_pipe_hw_param(struct pipe_ctx *pipe_ctx)
+ {
+- /*TODO: unhardcode*/
+- pipe_ctx->max_tmds_clk_from_edid_in_mhz = 0;
+- pipe_ctx->max_hdmi_deep_color = COLOR_DEPTH_121212;
+- pipe_ctx->max_hdmi_pixel_clock = 600000;
+-
+ get_pixel_clock_parameters(pipe_ctx, &pipe_ctx->pix_clk_params);
+ pipe_ctx->clock_source->funcs->get_pix_clk_dividers(
+ pipe_ctx->clock_source,
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c
+index e25fca2..4615c34 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c
+@@ -239,6 +239,11 @@ bool dce80_link_encoder_construct(
+
+ enc110->base.features.max_pixel_clock = DCE8_UNIPHY_MAX_PIXEL_CLK_IN_KHZ;
+
++ enc110->base.features.max_hdmi_pixel_clock =
++ DCE8_UNIPHY_MAX_PIXEL_CLK_IN_KHZ;
++ enc110->base.features.max_deep_color = COLOR_DEPTH_121212;
++ enc110->base.features.max_hdmi_deep_color = COLOR_DEPTH_121212;
++
+ /* set the flag to indicate whether driver poll the I2C data pin
+ * while doing the DP sink detect
+ */
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
+index 311f5fa..56487fd 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
+@@ -641,11 +641,6 @@ static void get_pixel_clock_parameters(
+
+ static enum dc_status build_pipe_hw_param(struct pipe_ctx *pipe_ctx)
+ {
+- /*TODO: unhardcode*/
+- pipe_ctx->max_tmds_clk_from_edid_in_mhz = 0;
+- pipe_ctx->max_hdmi_deep_color = COLOR_DEPTH_121212;
+- pipe_ctx->max_hdmi_pixel_clock = 600000;
+-
+ get_pixel_clock_parameters(pipe_ctx, &pipe_ctx->pix_clk_params);
+ pipe_ctx->clock_source->funcs->get_pix_clk_dividers(
+ pipe_ctx->clock_source,
+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 4ec6192..14b62ab 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
+@@ -303,13 +303,6 @@ struct pipe_ctx {
+
+ enum signal_type signal;
+
+- /* timing validation (HDMI only) */
+- uint32_t max_tmds_clk_from_edid_in_mhz;
+- /* maximum supported deep color depth for HDMI */
+- enum dc_color_depth max_hdmi_deep_color;
+- /* maximum supported pixel clock for HDMI */
+- uint32_t max_hdmi_pixel_clock;
+-
+ struct pixel_clk_params pix_clk_params;
+ struct pll_settings pll_settings;
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h b/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h
+index 24d318d..115ef54 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h
+@@ -60,8 +60,10 @@ struct encoder_feature_support {
+ } flags;
+ /* maximum supported deep color depth */
+ enum dc_color_depth max_deep_color;
++ enum dc_color_depth max_hdmi_deep_color;
+ /* maximum supported clock */
+- uint32_t max_pixel_clock;
++ unsigned int max_pixel_clock;
++ unsigned int max_hdmi_pixel_clock;
+ };
+
+ struct link_enc_status {
+--
+2.7.4
+