Skip to content

Commit 4cdc8f1

Browse files
committed
Merge branch 'drm-fixes-4.16' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
A few fixes for 4.16: - Fix a backlight S/R regression on amdgpu - Fix prime teardown on radeon and amdgpu - DP fix for amdgpu * 'drm-fixes-4.16' of git://people.freedesktop.org/~agd5f/linux: drm/amdgpu/dce: Don't turn off DP sink when disconnected drm/amdgpu: save/restore backlight level in legacy dce code drm/radeon: fix prime teardown order drm/amdgpu: fix prime teardown order
2 parents 0c8efd6 + 7d61726 commit 4cdc8f1

File tree

12 files changed

+56
-25
lines changed

12 files changed

+56
-25
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -69,25 +69,18 @@ void amdgpu_connector_hotplug(struct drm_connector *connector)
6969
/* don't do anything if sink is not display port, i.e.,
7070
* passive dp->(dvi|hdmi) adaptor
7171
*/
72-
if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
73-
int saved_dpms = connector->dpms;
74-
/* Only turn off the display if it's physically disconnected */
75-
if (!amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd)) {
76-
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
77-
} else if (amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
78-
/* Don't try to start link training before we
79-
* have the dpcd */
80-
if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
81-
return;
82-
83-
/* set it to OFF so that drm_helper_connector_dpms()
84-
* won't return immediately since the current state
85-
* is ON at this point.
86-
*/
87-
connector->dpms = DRM_MODE_DPMS_OFF;
88-
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
89-
}
90-
connector->dpms = saved_dpms;
72+
if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT &&
73+
amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd) &&
74+
amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
75+
/* Don't start link training before we have the DPCD */
76+
if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
77+
return;
78+
79+
/* Turn the connector off and back on immediately, which
80+
* will trigger link training
81+
*/
82+
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
83+
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
9184
}
9285
}
9386
}

drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ void amdgpu_gem_object_free(struct drm_gem_object *gobj)
3636
struct amdgpu_bo *robj = gem_to_amdgpu_bo(gobj);
3737

3838
if (robj) {
39-
if (robj->gem_base.import_attach)
40-
drm_prime_gem_destroy(&robj->gem_base, robj->tbo.sg);
4139
amdgpu_mn_unregister(robj);
4240
amdgpu_bo_unref(&robj);
4341
}

drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ struct amdgpu_mode_info {
352352
u16 firmware_flags;
353353
/* pointer to backlight encoder */
354354
struct amdgpu_encoder *bl_encoder;
355+
u8 bl_level; /* saved backlight level */
355356
struct amdgpu_audio audio; /* audio stuff */
356357
int num_crtc; /* number of crtcs */
357358
int num_hpd; /* number of hpd pins */

drivers/gpu/drm/amd/amdgpu/amdgpu_object.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ static void amdgpu_ttm_bo_destroy(struct ttm_buffer_object *tbo)
5656

5757
amdgpu_bo_kunmap(bo);
5858

59+
if (bo->gem_base.import_attach)
60+
drm_prime_gem_destroy(&bo->gem_base, bo->tbo.sg);
5961
drm_gem_object_release(&bo->gem_base);
6062
amdgpu_bo_unref(&bo->parent);
6163
if (!list_empty(&bo->shadow_list)) {

drivers/gpu/drm/amd/amdgpu/atombios_encoders.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
#include <linux/backlight.h>
3535
#include "bif/bif_4_1_d.h"
3636

37-
static u8
37+
u8
3838
amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev)
3939
{
4040
u8 backlight_level;
@@ -48,7 +48,7 @@ amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev)
4848
return backlight_level;
4949
}
5050

51-
static void
51+
void
5252
amdgpu_atombios_encoder_set_backlight_level_to_reg(struct amdgpu_device *adev,
5353
u8 backlight_level)
5454
{

drivers/gpu/drm/amd/amdgpu/atombios_encoders.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
#ifndef __ATOMBIOS_ENCODER_H__
2525
#define __ATOMBIOS_ENCODER_H__
2626

27+
u8
28+
amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev);
29+
void
30+
amdgpu_atombios_encoder_set_backlight_level_to_reg(struct amdgpu_device *adev,
31+
u8 backlight_level);
2732
u8
2833
amdgpu_atombios_encoder_get_backlight_level(struct amdgpu_encoder *amdgpu_encoder);
2934
void

drivers/gpu/drm/amd/amdgpu/dce_v10_0.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2921,6 +2921,11 @@ static int dce_v10_0_hw_fini(void *handle)
29212921

29222922
static int dce_v10_0_suspend(void *handle)
29232923
{
2924+
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2925+
2926+
adev->mode_info.bl_level =
2927+
amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
2928+
29242929
return dce_v10_0_hw_fini(handle);
29252930
}
29262931

@@ -2929,6 +2934,9 @@ static int dce_v10_0_resume(void *handle)
29292934
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
29302935
int ret;
29312936

2937+
amdgpu_atombios_encoder_set_backlight_level_to_reg(adev,
2938+
adev->mode_info.bl_level);
2939+
29322940
ret = dce_v10_0_hw_init(handle);
29332941

29342942
/* turn on the BL */

drivers/gpu/drm/amd/amdgpu/dce_v11_0.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3047,6 +3047,11 @@ static int dce_v11_0_hw_fini(void *handle)
30473047

30483048
static int dce_v11_0_suspend(void *handle)
30493049
{
3050+
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
3051+
3052+
adev->mode_info.bl_level =
3053+
amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
3054+
30503055
return dce_v11_0_hw_fini(handle);
30513056
}
30523057

@@ -3055,6 +3060,9 @@ static int dce_v11_0_resume(void *handle)
30553060
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
30563061
int ret;
30573062

3063+
amdgpu_atombios_encoder_set_backlight_level_to_reg(adev,
3064+
adev->mode_info.bl_level);
3065+
30583066
ret = dce_v11_0_hw_init(handle);
30593067

30603068
/* turn on the BL */

drivers/gpu/drm/amd/amdgpu/dce_v6_0.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2787,6 +2787,11 @@ static int dce_v6_0_hw_fini(void *handle)
27872787

27882788
static int dce_v6_0_suspend(void *handle)
27892789
{
2790+
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2791+
2792+
adev->mode_info.bl_level =
2793+
amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
2794+
27902795
return dce_v6_0_hw_fini(handle);
27912796
}
27922797

@@ -2795,6 +2800,9 @@ static int dce_v6_0_resume(void *handle)
27952800
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
27962801
int ret;
27972802

2803+
amdgpu_atombios_encoder_set_backlight_level_to_reg(adev,
2804+
adev->mode_info.bl_level);
2805+
27982806
ret = dce_v6_0_hw_init(handle);
27992807

28002808
/* turn on the BL */

drivers/gpu/drm/amd/amdgpu/dce_v8_0.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2819,6 +2819,11 @@ static int dce_v8_0_hw_fini(void *handle)
28192819

28202820
static int dce_v8_0_suspend(void *handle)
28212821
{
2822+
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
2823+
2824+
adev->mode_info.bl_level =
2825+
amdgpu_atombios_encoder_get_backlight_level_from_reg(adev);
2826+
28222827
return dce_v8_0_hw_fini(handle);
28232828
}
28242829

@@ -2827,6 +2832,9 @@ static int dce_v8_0_resume(void *handle)
28272832
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
28282833
int ret;
28292834

2835+
amdgpu_atombios_encoder_set_backlight_level_to_reg(adev,
2836+
adev->mode_info.bl_level);
2837+
28302838
ret = dce_v8_0_hw_init(handle);
28312839

28322840
/* turn on the BL */

drivers/gpu/drm/radeon/radeon_gem.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ void radeon_gem_object_free(struct drm_gem_object *gobj)
3434
struct radeon_bo *robj = gem_to_radeon_bo(gobj);
3535

3636
if (robj) {
37-
if (robj->gem_base.import_attach)
38-
drm_prime_gem_destroy(&robj->gem_base, robj->tbo.sg);
3937
radeon_mn_unregister(robj);
4038
radeon_bo_unref(&robj);
4139
}

drivers/gpu/drm/radeon/radeon_object.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ static void radeon_ttm_bo_destroy(struct ttm_buffer_object *tbo)
8282
mutex_unlock(&bo->rdev->gem.mutex);
8383
radeon_bo_clear_surface_reg(bo);
8484
WARN_ON_ONCE(!list_empty(&bo->va));
85+
if (bo->gem_base.import_attach)
86+
drm_prime_gem_destroy(&bo->gem_base, bo->tbo.sg);
8587
drm_gem_object_release(&bo->gem_base);
8688
kfree(bo);
8789
}

0 commit comments

Comments
 (0)