diff options
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.patch | 193 |
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 + |