aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3038-drm-amd-display-add-functionality-to-get-pipe-CRC-so.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3038-drm-amd-display-add-functionality-to-get-pipe-CRC-so.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3038-drm-amd-display-add-functionality-to-get-pipe-CRC-so.patch123
1 files changed, 123 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3038-drm-amd-display-add-functionality-to-get-pipe-CRC-so.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3038-drm-amd-display-add-functionality-to-get-pipe-CRC-so.patch
new file mode 100644
index 00000000..3453e724
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3038-drm-amd-display-add-functionality-to-get-pipe-CRC-so.patch
@@ -0,0 +1,123 @@
+From 6d3236dab95ff312959904f7876c10df3b2cf218 Mon Sep 17 00:00:00 2001
+From: Dingchen Zhang <dingchen.zhang@amd.com>
+Date: Wed, 29 May 2019 18:52:52 -0400
+Subject: [PATCH 3038/4256] drm/amd/display: add functionality to get pipe CRC
+ source.
+
+[Why]
+We need to check the pipe crc source through debugfs for bypass mode test.
+
+[How]
+add implementation of amdgpu_dm_crtc_get_crc_sources and hook into drm_crtc
+callback get_crc_sources.
+
+Change-Id: Ib2b74295fda878eca3a304d4691d2228e43a6afe
+Signed-off-by: Dingchen Zhang <dingchen.zhang@amd.com>
+Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+---
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 +
+ .../drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c | 14 +++++++++++
+ .../drm/amd/display/amdgpu_dm/amdgpu_dm_crc.h | 3 +++
+ include/drm/drm_crtc.h | 23 +++++++++++++++++++
+ 4 files changed, 41 insertions(+)
+
+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 2dbf11563476..844e9442449f 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -3817,6 +3817,7 @@ static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = {
+ .atomic_destroy_state = dm_crtc_destroy_state,
+ .set_crc_source = amdgpu_dm_crtc_set_crc_source,
+ .verify_crc_source = amdgpu_dm_crtc_verify_crc_source,
++ .get_crc_sources = amdgpu_dm_crtc_get_crc_sources,
+ .enable_vblank = dm_enable_vblank,
+ .disable_vblank = dm_disable_vblank,
+ };
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
+index 54dc86e4d6bf..609f1fdc10b3 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
+@@ -29,6 +29,13 @@
+ #include "amdgpu_dm.h"
+ #include "dc.h"
+
++static const char *const pipe_crc_sources[] = {
++ "none",
++ "crtc",
++ "dprx",
++ "auto",
++};
++
+ static enum amdgpu_dm_pipe_crc_source dm_parse_crc_source(const char *source)
+ {
+ if (!source || !strcmp(source, "none"))
+@@ -41,6 +48,13 @@ static enum amdgpu_dm_pipe_crc_source dm_parse_crc_source(const char *source)
+ return AMDGPU_DM_PIPE_CRC_SOURCE_INVALID;
+ }
+
++const char *const *amdgpu_dm_crtc_get_crc_sources(struct drm_crtc *crtc,
++ size_t *count)
++{
++ *count = ARRAY_SIZE(pipe_crc_sources);
++ return pipe_crc_sources;
++}
++
+ int
+ amdgpu_dm_crtc_verify_crc_source(struct drm_crtc *crtc, const char *src_name,
+ size_t *values_cnt)
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.h
+index 3793dc872436..b63a9011f511 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.h
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.h
+@@ -46,10 +46,13 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name);
+ int amdgpu_dm_crtc_verify_crc_source(struct drm_crtc *crtc,
+ const char *src_name,
+ size_t *values_cnt);
++const char *const *amdgpu_dm_crtc_get_crc_sources(struct drm_crtc *crtc,
++ size_t *count);
+ void amdgpu_dm_crtc_handle_crc_irq(struct drm_crtc *crtc);
+ #else
+ #define amdgpu_dm_crtc_set_crc_source NULL
+ #define amdgpu_dm_crtc_verify_crc_source NULL
++#define amdgpu_dm_crtc_get_crc_sources NULL
+ #define amdgpu_dm_crtc_handle_crc_irq(x)
+ #endif
+
+diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
+index a92f548502c8..2cf8ca1ae594 100644
+--- a/include/drm/drm_crtc.h
++++ b/include/drm/drm_crtc.h
+@@ -772,6 +772,29 @@ struct drm_crtc_funcs {
+ int (*verify_crc_source)(struct drm_crtc *crtc, const char *source,
+ size_t *values_cnt);
+
++ /**
++ * @get_crc_sources:
++ *
++ * Driver callback for getting a list of all the available sources for
++ * CRC generation. This callback depends upon verify_crc_source, So
++ * verify_crc_source callback should be implemented before implementing
++ * this. Driver can pass full list of available crc sources, this
++ * callback does the verification on each crc-source before passing it
++ * to userspace.
++ *
++ * This callback is optional if the driver does not support exporting of
++ * possible CRC sources list.
++ *
++ * RETURNS:
++ *
++ * a constant character pointer to the list of all the available CRC
++ * sources. On failure driver should return NULL. count should be
++ * updated with number of sources in list. if zero we don't process any
++ * source from the list.
++ */
++ const char *const *(*get_crc_sources)(struct drm_crtc *crtc,
++ size_t *count);
++
+ /**
+ * @atomic_print_state:
+ *
+--
+2.17.1
+