aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4924-drm-amd-display-Linux-hook-test-pattern-through-debu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4924-drm-amd-display-Linux-hook-test-pattern-through-debu.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4924-drm-amd-display-Linux-hook-test-pattern-through-debu.patch134
1 files changed, 134 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4924-drm-amd-display-Linux-hook-test-pattern-through-debu.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4924-drm-amd-display-Linux-hook-test-pattern-through-debu.patch
new file mode 100644
index 00000000..0b56bf0a
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4924-drm-amd-display-Linux-hook-test-pattern-through-debu.patch
@@ -0,0 +1,134 @@
+From 7bad2c131c178dd0937d8fd1480c5eb42d4fc8db Mon Sep 17 00:00:00 2001
+From: Hersen Wu <hersenxs.wu@amd.com>
+Date: Fri, 22 Jun 2018 13:06:01 -0400
+Subject: [PATCH 4924/5725] drm/amd/display: Linux hook test pattern through
+ debufs
+
+bug fix: phy test PLTAT is special 80bit test pattern. The 80bit
+data should be hard coded within driver so that user does not
+need input the deata. previous driver does not have hard coded
+80 bits pattern data for PLTPAT. Other than this PLTPAT, user
+has to input 80 bits pattern data. In case user input less than
+10 bytes data, un-input data byte will be filled by 0x00.
+
+Signed-off-by: Hersen Wu <hersenxs.wu@amd.com>
+Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c | 70 +++++++++++++++++-----
+ 1 file changed, 55 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
+index f20ba9d..0276e09 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
+@@ -483,16 +483,22 @@ static ssize_t dp_phy_test_pattern_debugfs_write(struct file *f, const char __us
+ char *wr_buf = NULL;
+ char *wr_buf_ptr = NULL;
+ uint32_t wr_buf_size = 100;
++ uint32_t wr_buf_count = 0;
+ int r;
+ int bytes_from_user;
+- char *sub_str;
++ char *sub_str = NULL;
+ uint8_t param_index = 0;
+- long param[11];
++ uint8_t param_nums = 0;
++ long param[11] = {0x0};
+ const char delimiter[3] = {' ', '\n', '\0'};
+ enum dp_test_pattern test_pattern = DP_TEST_PATTERN_UNSUPPORTED;
+ bool disable_hpd = false;
+ bool valid_test_pattern = false;
+- uint8_t custom_pattern[10] = {0};
++ /* init with defalut 80bit custom pattern */
++ uint8_t custom_pattern[10] = {
++ 0x1f, 0x7c, 0xf0, 0xc1, 0x07,
++ 0x1f, 0x7c, 0xf0, 0xc1, 0x07
++ };
+ struct dc_link_settings prefer_link_settings = {LANE_COUNT_UNKNOWN,
+ LINK_RATE_UNKNOWN, LINK_SPREAD_DISABLED};
+ struct dc_link_settings cur_link_settings = {LANE_COUNT_UNKNOWN,
+@@ -519,25 +525,51 @@ static ssize_t dp_phy_test_pattern_debugfs_write(struct file *f, const char __us
+
+ bytes_from_user = wr_buf_size - r;
+
+- while (isspace(*wr_buf_ptr))
++ /* check number of parameters. isspace could not differ space and \n */
++ while ((*wr_buf_ptr != 0xa) && (wr_buf_count < wr_buf_size)) {
++ /* skip space*/
++ while (isspace(*wr_buf_ptr) && (wr_buf_count < wr_buf_size)) {
++ wr_buf_ptr++;
++ wr_buf_count++;
++ }
++
++ if (wr_buf_count == wr_buf_size)
++ break;
++
++ /* skip non-space*/
++ while ((!isspace(*wr_buf_ptr)) && (wr_buf_count < wr_buf_size)) {
++ wr_buf_ptr++;
++ wr_buf_count++;
++ }
++
++ param_nums++;
++
++ if (wr_buf_count == wr_buf_size)
++ break;
++ }
++
++ /* max 11 parameters */
++ if (param_nums > 11)
++ param_nums = 11;
++
++ wr_buf_ptr = wr_buf; /* reset buf pinter */
++ wr_buf_count = 0; /* number of char already checked */
++
++ while (isspace(*wr_buf_ptr) && (wr_buf_count < wr_buf_size)) {
+ wr_buf_ptr++;
++ wr_buf_count++;
++ }
+
+- while ((*wr_buf_ptr != '\0') && (param_index < 1)) {
++ while (param_index < param_nums) {
++ /* after strsep, wr_buf_ptr will be moved to after space */
+ sub_str = strsep(&wr_buf_ptr, delimiter);
++
+ r = kstrtol(sub_str, 16, &param[param_index]);
+
+ if (r)
+ DRM_DEBUG_DRIVER("string to int convert error code: %d\n", r);
+
+ param_index++;
+- while (isspace(*wr_buf_ptr))
+- wr_buf_ptr++;
+-
+- /* DP_TEST_PATTERN_80BIT_CUSTOM need extra 80 bits
+- * whci are 10 bytes separte by space
+- */
+- if (param[0] != 0x4)
+- break;
+ }
+
+ test_pattern = param[0];
+@@ -575,8 +607,16 @@ static ssize_t dp_phy_test_pattern_debugfs_write(struct file *f, const char __us
+ }
+
+ if (test_pattern == DP_TEST_PATTERN_80BIT_CUSTOM) {
+- for (i = 0; i < 10; i++)
+- custom_pattern[i] = (uint8_t) param[i + 1];
++ for (i = 0; i < 10; i++) {
++ if ((uint8_t) param[i + 1] != 0x0)
++ break;
++ }
++
++ if (i < 10) {
++ /* not use default value */
++ for (i = 0; i < 10; i++)
++ custom_pattern[i] = (uint8_t) param[i + 1];
++ }
+ }
+
+ /* Usage: set DP physical test pattern using debugfs with normal DP
+--
+2.7.4
+