aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2669-amdgpu-dce-Use-actual-number-of-CRTCs-and-HPDs-in-se.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2669-amdgpu-dce-Use-actual-number-of-CRTCs-and-HPDs-in-se.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2669-amdgpu-dce-Use-actual-number-of-CRTCs-and-HPDs-in-se.patch193
1 files changed, 193 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2669-amdgpu-dce-Use-actual-number-of-CRTCs-and-HPDs-in-se.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2669-amdgpu-dce-Use-actual-number-of-CRTCs-and-HPDs-in-se.patch
new file mode 100644
index 00000000..35023fd4
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2669-amdgpu-dce-Use-actual-number-of-CRTCs-and-HPDs-in-se.patch
@@ -0,0 +1,193 @@
+From 8ee536e96aa9cdb16d786ac247ad4b511b6c2f0e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com>
+Date: Tue, 24 Oct 2017 11:03:21 +0200
+Subject: [PATCH 2669/4131] amdgpu/dce: Use actual number of CRTCs and HPDs in
+ set_irq_funcs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Hardcoding the maximum numbers could result in spurious error messages
+from the IRQ state callbacks, e.g. on Polaris 11/12:
+
+[drm:dce_v11_0_set_pageflip_irq_state [amdgpu]] *ERROR* invalid pageflip crtc 5
+[drm:amdgpu_irq_disable_all [amdgpu]] *ERROR* error disabling interrupt (-22)
+
+Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Acked-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 12 ++++++++----
+ drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 12 ++++++++----
+ drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 12 ++++++++----
+ drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 12 ++++++++----
+ 4 files changed, 32 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+index 492787f..a397111 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+@@ -2773,7 +2773,6 @@ static int dce_v10_0_early_init(void *handle)
+ adev->audio_endpt_wreg = &dce_v10_0_audio_endpt_wreg;
+
+ dce_v10_0_set_display_funcs(adev);
+- dce_v10_0_set_irq_funcs(adev);
+
+ adev->mode_info.num_crtc = dce_v10_0_get_num_crtc(adev);
+
+@@ -2788,6 +2787,8 @@ static int dce_v10_0_early_init(void *handle)
+ return -EINVAL;
+ }
+
++ dce_v10_0_set_irq_funcs(adev);
++
+ return 0;
+ }
+
+@@ -3635,13 +3636,16 @@ static const struct amdgpu_irq_src_funcs dce_v10_0_hpd_irq_funcs = {
+
+ static void dce_v10_0_set_irq_funcs(struct amdgpu_device *adev)
+ {
+- adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_LAST;
++ if (adev->mode_info.num_crtc > 0)
++ adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_VLINE1 + adev->mode_info.num_crtc;
++ else
++ adev->crtc_irq.num_types = 0;
+ adev->crtc_irq.funcs = &dce_v10_0_crtc_irq_funcs;
+
+- adev->pageflip_irq.num_types = AMDGPU_PAGEFLIP_IRQ_LAST;
++ adev->pageflip_irq.num_types = adev->mode_info.num_crtc;
+ adev->pageflip_irq.funcs = &dce_v10_0_pageflip_irq_funcs;
+
+- adev->hpd_irq.num_types = AMDGPU_HPD_LAST;
++ adev->hpd_irq.num_types = adev->mode_info.num_hpd;
+ adev->hpd_irq.funcs = &dce_v10_0_hpd_irq_funcs;
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+index 9ba75f8..67e6709 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+@@ -2876,7 +2876,6 @@ static int dce_v11_0_early_init(void *handle)
+ adev->audio_endpt_wreg = &dce_v11_0_audio_endpt_wreg;
+
+ dce_v11_0_set_display_funcs(adev);
+- dce_v11_0_set_irq_funcs(adev);
+
+ adev->mode_info.num_crtc = dce_v11_0_get_num_crtc(adev);
+
+@@ -2903,6 +2902,8 @@ static int dce_v11_0_early_init(void *handle)
+ return -EINVAL;
+ }
+
++ dce_v11_0_set_irq_funcs(adev);
++
+ return 0;
+ }
+
+@@ -3759,13 +3760,16 @@ static const struct amdgpu_irq_src_funcs dce_v11_0_hpd_irq_funcs = {
+
+ static void dce_v11_0_set_irq_funcs(struct amdgpu_device *adev)
+ {
+- adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_LAST;
++ if (adev->mode_info.num_crtc > 0)
++ adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_VLINE1 + adev->mode_info.num_crtc;
++ else
++ adev->crtc_irq.num_types = 0;
+ adev->crtc_irq.funcs = &dce_v11_0_crtc_irq_funcs;
+
+- adev->pageflip_irq.num_types = AMDGPU_PAGEFLIP_IRQ_LAST;
++ adev->pageflip_irq.num_types = adev->mode_info.num_crtc;
+ adev->pageflip_irq.funcs = &dce_v11_0_pageflip_irq_funcs;
+
+- adev->hpd_irq.num_types = AMDGPU_HPD_LAST;
++ adev->hpd_irq.num_types = adev->mode_info.num_hpd;
+ adev->hpd_irq.funcs = &dce_v11_0_hpd_irq_funcs;
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+index a51e35f..bd2c4f7 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+@@ -2639,7 +2639,6 @@ static int dce_v6_0_early_init(void *handle)
+ adev->audio_endpt_wreg = &dce_v6_0_audio_endpt_wreg;
+
+ dce_v6_0_set_display_funcs(adev);
+- dce_v6_0_set_irq_funcs(adev);
+
+ adev->mode_info.num_crtc = dce_v6_0_get_num_crtc(adev);
+
+@@ -2658,6 +2657,8 @@ static int dce_v6_0_early_init(void *handle)
+ return -EINVAL;
+ }
+
++ dce_v6_0_set_irq_funcs(adev);
++
+ return 0;
+ }
+
+@@ -3441,13 +3442,16 @@ static const struct amdgpu_irq_src_funcs dce_v6_0_hpd_irq_funcs = {
+
+ static void dce_v6_0_set_irq_funcs(struct amdgpu_device *adev)
+ {
+- adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_LAST;
++ if (adev->mode_info.num_crtc > 0)
++ adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_VLINE1 + adev->mode_info.num_crtc;
++ else
++ adev->crtc_irq.num_types = 0;
+ adev->crtc_irq.funcs = &dce_v6_0_crtc_irq_funcs;
+
+- adev->pageflip_irq.num_types = AMDGPU_PAGEFLIP_IRQ_LAST;
++ adev->pageflip_irq.num_types = adev->mode_info.num_crtc;
+ adev->pageflip_irq.funcs = &dce_v6_0_pageflip_irq_funcs;
+
+- adev->hpd_irq.num_types = AMDGPU_HPD_LAST;
++ adev->hpd_irq.num_types = adev->mode_info.num_hpd;
+ adev->hpd_irq.funcs = &dce_v6_0_hpd_irq_funcs;
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+index 9cf14b8..c008dc0 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+@@ -2664,7 +2664,6 @@ static int dce_v8_0_early_init(void *handle)
+ adev->audio_endpt_wreg = &dce_v8_0_audio_endpt_wreg;
+
+ dce_v8_0_set_display_funcs(adev);
+- dce_v8_0_set_irq_funcs(adev);
+
+ adev->mode_info.num_crtc = dce_v8_0_get_num_crtc(adev);
+
+@@ -2688,6 +2687,8 @@ static int dce_v8_0_early_init(void *handle)
+ return -EINVAL;
+ }
+
++ dce_v8_0_set_irq_funcs(adev);
++
+ return 0;
+ }
+
+@@ -3525,13 +3526,16 @@ static const struct amdgpu_irq_src_funcs dce_v8_0_hpd_irq_funcs = {
+
+ static void dce_v8_0_set_irq_funcs(struct amdgpu_device *adev)
+ {
+- adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_LAST;
++ if (adev->mode_info.num_crtc > 0)
++ adev->crtc_irq.num_types = AMDGPU_CRTC_IRQ_VLINE1 + adev->mode_info.num_crtc;
++ else
++ adev->crtc_irq.num_types = 0;
+ adev->crtc_irq.funcs = &dce_v8_0_crtc_irq_funcs;
+
+- adev->pageflip_irq.num_types = AMDGPU_PAGEFLIP_IRQ_LAST;
++ adev->pageflip_irq.num_types = adev->mode_info.num_crtc;
+ adev->pageflip_irq.funcs = &dce_v8_0_pageflip_irq_funcs;
+
+- adev->hpd_irq.num_types = AMDGPU_HPD_LAST;
++ adev->hpd_irq.num_types = adev->mode_info.num_hpd;
+ adev->hpd_irq.funcs = &dce_v8_0_hpd_irq_funcs;
+ }
+
+--
+2.7.4
+