aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch')
-rw-r--r--common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch99
1 files changed, 99 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch b/common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch
new file mode 100644
index 00000000..e8ae8725
--- /dev/null
+++ b/common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch
@@ -0,0 +1,99 @@
+From dc3a2c4818810b2dc5be400943da7dbf802482da Mon Sep 17 00:00:00 2001
+From: Jordan Lazare <Jordan.Lazare@amd.com>
+Date: Mon, 4 Apr 2016 19:43:13 -0400
+Subject: [PATCH 1004/1110] drm/amd/dal: Fix incorrect max size of validation
+ array
+
+Was leading to stack corruption with >4 displays
+
+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/amdgpu_dm/amdgpu_dm_types.c | 12 ++++--------
+ drivers/gpu/drm/amd/dal/dc/core/dc.c | 2 +-
+ drivers/gpu/drm/amd/dal/dc/dc.h | 4 +++-
+ 3 files changed, 8 insertions(+), 10 deletions(-)
+
+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 a091d97..8ad78f5 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
+@@ -58,7 +58,6 @@ 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)
+ {
+@@ -813,9 +812,6 @@ static void fill_audio_info(
+
+ }
+
+-/*TODO: move these defines elsewhere*/
+-#define DAL_MAX_CONTROLLERS 4
+-
+ static void copy_crtc_timing_for_drm_display_mode(
+ const struct drm_display_mode *src_mode,
+ struct drm_display_mode *dst_mode)
+@@ -2110,8 +2106,8 @@ int amdgpu_dm_atomic_commit(
+ struct drm_crtc *crtc;
+ struct drm_crtc_state *old_crtc_state;
+
+- struct dc_target *commit_targets[DAL_MAX_CONTROLLERS];
+- struct amdgpu_crtc *new_crtcs[DAL_MAX_CONTROLLERS];
++ struct dc_target *commit_targets[MAX_TARGETS];
++ struct amdgpu_crtc *new_crtcs[MAX_TARGETS];
+
+ /* In this step all new fb would be pinned */
+
+@@ -2516,8 +2512,8 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ int ret;
+ int set_count;
+ int new_target_count;
+- struct dc_validation_set set[MAX_TARGET_NUM] = {{ 0 }};
+- struct dc_target *new_targets[MAX_TARGET_NUM] = { 0 };
++ struct dc_validation_set set[MAX_TARGETS] = {{ 0 }};
++ struct dc_target *new_targets[MAX_TARGETS] = { 0 };
+ struct amdgpu_device *adev = dev->dev_private;
+ struct dc *dc = adev->dm.dc;
+ bool need_to_validate = false;
+diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
+index e71088d..d49ab5e 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
+@@ -720,7 +720,7 @@ bool dc_commit_targets(
+ struct dc_bios *dcb = core_dc->ctx->dc_bios;
+ enum dc_status result = DC_ERROR_UNEXPECTED;
+ struct validate_context *context;
+- struct dc_validation_set set[4];
++ struct dc_validation_set set[MAX_TARGETS];
+ uint8_t i;
+
+ if (false == targets_changed(core_dc, targets, target_count))
+diff --git a/drivers/gpu/drm/amd/dal/dc/dc.h b/drivers/gpu/drm/amd/dal/dc/dc.h
+index e394dd2..dbc972f 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dc.h
++++ b/drivers/gpu/drm/amd/dal/dc/dc.h
+@@ -33,6 +33,8 @@
+ #include "gpio_types.h"
+ #include "link_service_types.h"
+
++#define MAX_TARGETS 6
++#define MAX_SURFACES 6
+ #define MAX_SINKS_PER_LINK 4
+
+ /*******************************************************************************
+@@ -271,7 +273,7 @@ enum dc_irq_source dc_target_get_irq_src(
+ */
+ struct dc_validation_set {
+ const struct dc_target *target;
+- const struct dc_surface *surfaces[4];
++ const struct dc_surface *surfaces[MAX_SURFACES];
+ uint8_t surface_count;
+ };
+
+--
+2.7.4
+