aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2018-03-08 09:56:01 -0500
committerAlex Deucher <alexander.deucher@amd.com>2018-03-14 16:08:40 -0400
commita59b3c80fd0041223ccf720504974a543b81b1d0 (patch)
treea882f3883661b92385cc0d1365c4ba6f9497754f /drivers/gpu/drm/amd
parent0660b58c9038f5ef94b8fe33716449945ea786e5 (diff)
drm/amdgpu: save/restore backlight level in legacy dce code
Save/restore the backlight level scratch register in S3/S4 so the backlight level comes back at the previously requested level. Bug: https://bugzilla.kernel.org/show_bug.cgi?id=199047 Fixes: 4ec6ecf48c64d (drm/amdgpu: drop scratch regs save and restore from S3/S4 handling) Acked-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/atombios_encoders.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/atombios_encoders.h5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v10_0.c8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v11_0.c8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v6_0.c8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v8_0.c8
7 files changed, 40 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
index d9533bbc467c..588cf6594391 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
@@ -350,6 +350,7 @@ struct amdgpu_mode_info {
350 u16 firmware_flags; 350 u16 firmware_flags;
351 /* pointer to backlight encoder */ 351 /* pointer to backlight encoder */
352 struct amdgpu_encoder *bl_encoder; 352 struct amdgpu_encoder *bl_encoder;
353 u8 bl_level; /* saved backlight level */
353 struct amdgpu_audio audio; /* audio stuff */ 354 struct amdgpu_audio audio; /* audio stuff */
354 int num_crtc; /* number of crtcs */ 355 int num_crtc; /* number of crtcs */
355 int num_hpd; /* number of hpd pins */ 356 int num_hpd; /* number of hpd pins */
diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
index 2af26d2da127..d702fb8e3427 100644
--- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
+++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
@@ -34,7 +34,7 @@
34#include <linux/backlight.h> 34#include <linux/backlight.h>
35#include "bif/bif_4_1_d.h" 35#include "bif/bif_4_1_d.h"
36 36
37static u8 37u8
38amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev) 38amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev)
39{ 39{
40 u8 backlight_level; 40 u8 backlight_level;
@@ -48,7 +48,7 @@ amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev)
48 return backlight_level; 48 return backlight_level;
49} 49}
50 50
51static void 51void
52amdgpu_atombios_encoder_set_backlight_level_to_reg(struct amdgpu_device *adev, 52amdgpu_atombios_encoder_set_backlight_level_to_reg(struct amdgpu_device *adev,
53 u8 backlight_level) 53 u8 backlight_level)
54{ 54{
diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.h b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.h
index 2bdec40515ce..f77cbdef679e 100644
--- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.h
+++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.h
@@ -25,6 +25,11 @@
25#define __ATOMBIOS_ENCODER_H__ 25#define __ATOMBIOS_ENCODER_H__
26 26
27u8 27u8
28amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev);
29void
30amdgpu_atombios_encoder_set_backlight_level_to_reg(struct amdgpu_device *adev,
31 u8 backlight_level);
32u8
28amdgpu_atombios_encoder_get_backlight_level(struct amdgpu_encoder *amdgpu_encoder); 33amdgpu_atombios_encoder_get_backlight_level(struct amdgpu_encoder *amdgpu_encoder);
29void 34void
30amdgpu_atombios_encoder_set_backlight_level(struct amdgpu_encoder *amdgpu_encoder, 35amdgpu_atombios_encoder_set_backlight_level(struct amdgpu_encoder *amdgpu_encoder,
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index 7ea900010702..452f88ea46a2 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -2862,6 +2862,11 @@ static int dce_v10_0_hw_fini(void *handle)
2862 2862
2863static int dce_v10_0_suspend(void *handle) 2863static int dce_v10_0_suspend(void *handle)
2864{ 2864{
2865 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2866
2867 adev->mode_info.bl_level =
2868 amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
2869
2865 return dce_v10_0_hw_fini(handle); 2870 return dce_v10_0_hw_fini(handle);
2866} 2871}
2867 2872
@@ -2870,6 +2875,9 @@ static int dce_v10_0_resume(void *handle)
2870 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 2875 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2871 int ret; 2876 int ret;
2872 2877
2878 amdgpu_atombios_encoder_set_backlight_level_to_reg(adev,
2879 adev->mode_info.bl_level);
2880
2873 ret = dce_v10_0_hw_init(handle); 2881 ret = dce_v10_0_hw_init(handle);
2874 2882
2875 /* turn on the BL */ 2883 /* turn on the BL */
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index 158b92ea435f..a7c1c584a191 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -2988,6 +2988,11 @@ static int dce_v11_0_hw_fini(void *handle)
2988 2988
2989static int dce_v11_0_suspend(void *handle) 2989static int dce_v11_0_suspend(void *handle)
2990{ 2990{
2991 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2992
2993 adev->mode_info.bl_level =
2994 amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
2995
2991 return dce_v11_0_hw_fini(handle); 2996 return dce_v11_0_hw_fini(handle);
2992} 2997}
2993 2998
@@ -2996,6 +3001,9 @@ static int dce_v11_0_resume(void *handle)
2996 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 3001 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2997 int ret; 3002 int ret;
2998 3003
3004 amdgpu_atombios_encoder_set_backlight_level_to_reg(adev,
3005 adev->mode_info.bl_level);
3006
2999 ret = dce_v11_0_hw_init(handle); 3007 ret = dce_v11_0_hw_init(handle);
3000 3008
3001 /* turn on the BL */ 3009 /* turn on the BL */
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
index ee2162e81da9..9f67b7fd3487 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
@@ -2730,6 +2730,11 @@ static int dce_v6_0_hw_fini(void *handle)
2730 2730
2731static int dce_v6_0_suspend(void *handle) 2731static int dce_v6_0_suspend(void *handle)
2732{ 2732{
2733 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2734
2735 adev->mode_info.bl_level =
2736 amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
2737
2733 return dce_v6_0_hw_fini(handle); 2738 return dce_v6_0_hw_fini(handle);
2734} 2739}
2735 2740
@@ -2738,6 +2743,9 @@ static int dce_v6_0_resume(void *handle)
2738 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 2743 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2739 int ret; 2744 int ret;
2740 2745
2746 amdgpu_atombios_encoder_set_backlight_level_to_reg(adev,
2747 adev->mode_info.bl_level);
2748
2741 ret = dce_v6_0_hw_init(handle); 2749 ret = dce_v6_0_hw_init(handle);
2742 2750
2743 /* turn on the BL */ 2751 /* turn on the BL */
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
index 8dbe97dff58c..f55422cbd77a 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -2760,6 +2760,11 @@ static int dce_v8_0_hw_fini(void *handle)
2760 2760
2761static int dce_v8_0_suspend(void *handle) 2761static int dce_v8_0_suspend(void *handle)
2762{ 2762{
2763 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2764
2765 adev->mode_info.bl_level =
2766 amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
2767
2763 return dce_v8_0_hw_fini(handle); 2768 return dce_v8_0_hw_fini(handle);
2764} 2769}
2765 2770
@@ -2768,6 +2773,9 @@ static int dce_v8_0_resume(void *handle)
2768 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 2773 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2769 int ret; 2774 int ret;
2770 2775
2776 amdgpu_atombios_encoder_set_backlight_level_to_reg(adev,
2777 adev->mode_info.bl_level);
2778
2771 ret = dce_v8_0_hw_init(handle); 2779 ret = dce_v8_0_hw_init(handle);
2772 2780
2773 /* turn on the BL */ 2781 /* turn on the BL */