aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2018-03-28 00:30:41 -0400
committerDave Airlie <airlied@redhat.com>2018-03-28 00:30:41 -0400
commit2b4f44eec2be2688511c2b617d0e1b4f94c45ba4 (patch)
tree533c03602f4ae6d6404db6fa56c88e6f83e1bebe /drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
parent33d009cd889490838c5db9b9339856c9e3d3facc (diff)
parent3eb2ce825ea1ad89d20f7a3b5780df850e4be274 (diff)
Backmerge tag 'v4.16-rc7' into drm-next
Linux 4.16-rc7 This was requested by Daniel, and things were getting a bit hard to reconcile, most of the conflicts were trivial though.
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c58
1 files changed, 38 insertions, 20 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
index 9da8d5802980..96501ff0e55b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
@@ -729,9 +729,11 @@ amdgpu_connector_lvds_detect(struct drm_connector *connector, bool force)
729 enum drm_connector_status ret = connector_status_disconnected; 729 enum drm_connector_status ret = connector_status_disconnected;
730 int r; 730 int r;
731 731
732 r = pm_runtime_get_sync(connector->dev->dev); 732 if (!drm_kms_helper_is_poll_worker()) {
733 if (r < 0) 733 r = pm_runtime_get_sync(connector->dev->dev);
734 return connector_status_disconnected; 734 if (r < 0)
735 return connector_status_disconnected;
736 }
735 737
736 if (encoder) { 738 if (encoder) {
737 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); 739 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder);
@@ -750,8 +752,12 @@ amdgpu_connector_lvds_detect(struct drm_connector *connector, bool force)
750 /* check acpi lid status ??? */ 752 /* check acpi lid status ??? */
751 753
752 amdgpu_connector_update_scratch_regs(connector, ret); 754 amdgpu_connector_update_scratch_regs(connector, ret);
753 pm_runtime_mark_last_busy(connector->dev->dev); 755
754 pm_runtime_put_autosuspend(connector->dev->dev); 756 if (!drm_kms_helper_is_poll_worker()) {
757 pm_runtime_mark_last_busy(connector->dev->dev);
758 pm_runtime_put_autosuspend(connector->dev->dev);
759 }
760
755 return ret; 761 return ret;
756} 762}
757 763
@@ -861,9 +867,11 @@ amdgpu_connector_vga_detect(struct drm_connector *connector, bool force)
861 enum drm_connector_status ret = connector_status_disconnected; 867 enum drm_connector_status ret = connector_status_disconnected;
862 int r; 868 int r;
863 869
864 r = pm_runtime_get_sync(connector->dev->dev); 870 if (!drm_kms_helper_is_poll_worker()) {
865 if (r < 0) 871 r = pm_runtime_get_sync(connector->dev->dev);
866 return connector_status_disconnected; 872 if (r < 0)
873 return connector_status_disconnected;
874 }
867 875
868 encoder = amdgpu_connector_best_single_encoder(connector); 876 encoder = amdgpu_connector_best_single_encoder(connector);
869 if (!encoder) 877 if (!encoder)
@@ -917,8 +925,10 @@ amdgpu_connector_vga_detect(struct drm_connector *connector, bool force)
917 amdgpu_connector_update_scratch_regs(connector, ret); 925 amdgpu_connector_update_scratch_regs(connector, ret);
918 926
919out: 927out:
920 pm_runtime_mark_last_busy(connector->dev->dev); 928 if (!drm_kms_helper_is_poll_worker()) {
921 pm_runtime_put_autosuspend(connector->dev->dev); 929 pm_runtime_mark_last_busy(connector->dev->dev);
930 pm_runtime_put_autosuspend(connector->dev->dev);
931 }
922 932
923 return ret; 933 return ret;
924} 934}
@@ -981,9 +991,11 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
981 enum drm_connector_status ret = connector_status_disconnected; 991 enum drm_connector_status ret = connector_status_disconnected;
982 bool dret = false, broken_edid = false; 992 bool dret = false, broken_edid = false;
983 993
984 r = pm_runtime_get_sync(connector->dev->dev); 994 if (!drm_kms_helper_is_poll_worker()) {
985 if (r < 0) 995 r = pm_runtime_get_sync(connector->dev->dev);
986 return connector_status_disconnected; 996 if (r < 0)
997 return connector_status_disconnected;
998 }
987 999
988 if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) { 1000 if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) {
989 ret = connector->status; 1001 ret = connector->status;
@@ -1108,8 +1120,10 @@ out:
1108 amdgpu_connector_update_scratch_regs(connector, ret); 1120 amdgpu_connector_update_scratch_regs(connector, ret);
1109 1121
1110exit: 1122exit:
1111 pm_runtime_mark_last_busy(connector->dev->dev); 1123 if (!drm_kms_helper_is_poll_worker()) {
1112 pm_runtime_put_autosuspend(connector->dev->dev); 1124 pm_runtime_mark_last_busy(connector->dev->dev);
1125 pm_runtime_put_autosuspend(connector->dev->dev);
1126 }
1113 1127
1114 return ret; 1128 return ret;
1115} 1129}
@@ -1352,9 +1366,11 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
1352 struct drm_encoder *encoder = amdgpu_connector_best_single_encoder(connector); 1366 struct drm_encoder *encoder = amdgpu_connector_best_single_encoder(connector);
1353 int r; 1367 int r;
1354 1368
1355 r = pm_runtime_get_sync(connector->dev->dev); 1369 if (!drm_kms_helper_is_poll_worker()) {
1356 if (r < 0) 1370 r = pm_runtime_get_sync(connector->dev->dev);
1357 return connector_status_disconnected; 1371 if (r < 0)
1372 return connector_status_disconnected;
1373 }
1358 1374
1359 if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) { 1375 if (!force && amdgpu_connector_check_hpd_status_unchanged(connector)) {
1360 ret = connector->status; 1376 ret = connector->status;
@@ -1424,8 +1440,10 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
1424 1440
1425 amdgpu_connector_update_scratch_regs(connector, ret); 1441 amdgpu_connector_update_scratch_regs(connector, ret);
1426out: 1442out:
1427 pm_runtime_mark_last_busy(connector->dev->dev); 1443 if (!drm_kms_helper_is_poll_worker()) {
1428 pm_runtime_put_autosuspend(connector->dev->dev); 1444 pm_runtime_mark_last_busy(connector->dev->dev);
1445 pm_runtime_put_autosuspend(connector->dev->dev);
1446 }
1429 1447
1430 return ret; 1448 return ret;
1431} 1449}