diff options
author | Dave Airlie <airlied@redhat.com> | 2018-02-27 20:39:52 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2018-02-27 20:39:52 -0500 |
commit | 219b3b22df9d828367a4eeceed7600890e2ff4ef (patch) | |
tree | ea7a671b56f792b21723788d5dfea0de1e3f96e5 | |
parent | 4a3928c6f8a53fa1aed28ccba227742486e8ddcb (diff) | |
parent | 2c83029cda55a5e7665c7c6326909427d6a01350 (diff) |
Merge branch 'drm-fixes-4.16' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
- Powerplay fixes for cards with no displays attached
- Couple of DC fixes
- radeon workaround for PPC64
* 'drm-fixes-4.16' of git://people.freedesktop.org/~agd5f/linux:
drm/radeon: insist on 32-bit DMA for Cedar on PPC64/PPC64LE
drm/amd/display: VGA black screen from s3 when attached to hook
drm/amdgpu: Unify the dm resume calls into one
drm/amdgpu: Add a missing lock for drm_mm_takedown
Revert "drm/radeon/pm: autoswitch power state when in balanced mode"
drm/amd/powerplay/smu7: allow mclk switching with no displays
drm/amd/powerplay/vega10: allow mclk switching with no displays
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_device.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_pm.c | 6 |
8 files changed, 24 insertions, 25 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 00a50cc5ec9a..829dc2edace6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |||
@@ -2284,14 +2284,6 @@ int amdgpu_device_resume(struct drm_device *dev, bool resume, bool fbcon) | |||
2284 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); | 2284 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); |
2285 | } | 2285 | } |
2286 | drm_modeset_unlock_all(dev); | 2286 | drm_modeset_unlock_all(dev); |
2287 | } else { | ||
2288 | /* | ||
2289 | * There is no equivalent atomic helper to turn on | ||
2290 | * display, so we defined our own function for this, | ||
2291 | * once suspend resume is supported by the atomic | ||
2292 | * framework this will be reworked | ||
2293 | */ | ||
2294 | amdgpu_dm_display_resume(adev); | ||
2295 | } | 2287 | } |
2296 | } | 2288 | } |
2297 | 2289 | ||
@@ -2726,7 +2718,6 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev, | |||
2726 | if (amdgpu_device_has_dc_support(adev)) { | 2718 | if (amdgpu_device_has_dc_support(adev)) { |
2727 | if (drm_atomic_helper_resume(adev->ddev, state)) | 2719 | if (drm_atomic_helper_resume(adev->ddev, state)) |
2728 | dev_info(adev->dev, "drm resume failed:%d\n", r); | 2720 | dev_info(adev->dev, "drm resume failed:%d\n", r); |
2729 | amdgpu_dm_display_resume(adev); | ||
2730 | } else { | 2721 | } else { |
2731 | drm_helper_resume_force_mode(adev->ddev); | 2722 | drm_helper_resume_force_mode(adev->ddev); |
2732 | } | 2723 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c index e14ab34d8262..7c2be32c5aea 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | |||
@@ -75,7 +75,7 @@ static int amdgpu_gtt_mgr_init(struct ttm_mem_type_manager *man, | |||
75 | static int amdgpu_gtt_mgr_fini(struct ttm_mem_type_manager *man) | 75 | static int amdgpu_gtt_mgr_fini(struct ttm_mem_type_manager *man) |
76 | { | 76 | { |
77 | struct amdgpu_gtt_mgr *mgr = man->priv; | 77 | struct amdgpu_gtt_mgr *mgr = man->priv; |
78 | 78 | spin_lock(&mgr->lock); | |
79 | drm_mm_takedown(&mgr->mm); | 79 | drm_mm_takedown(&mgr->mm); |
80 | spin_unlock(&mgr->lock); | 80 | spin_unlock(&mgr->lock); |
81 | kfree(mgr); | 81 | kfree(mgr); |
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 1ce4c98385e3..862835dc054e 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | |||
@@ -629,11 +629,13 @@ static int dm_resume(void *handle) | |||
629 | { | 629 | { |
630 | struct amdgpu_device *adev = handle; | 630 | struct amdgpu_device *adev = handle; |
631 | struct amdgpu_display_manager *dm = &adev->dm; | 631 | struct amdgpu_display_manager *dm = &adev->dm; |
632 | int ret = 0; | ||
632 | 633 | ||
633 | /* power on hardware */ | 634 | /* power on hardware */ |
634 | dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D0); | 635 | dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D0); |
635 | 636 | ||
636 | return 0; | 637 | ret = amdgpu_dm_display_resume(adev); |
638 | return ret; | ||
637 | } | 639 | } |
638 | 640 | ||
639 | int amdgpu_dm_display_resume(struct amdgpu_device *adev) | 641 | int amdgpu_dm_display_resume(struct amdgpu_device *adev) |
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c index 33d91e4474ea..639421a00ab6 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | |||
@@ -1465,7 +1465,7 @@ void decide_link_settings(struct dc_stream_state *stream, | |||
1465 | /* MST doesn't perform link training for now | 1465 | /* MST doesn't perform link training for now |
1466 | * TODO: add MST specific link training routine | 1466 | * TODO: add MST specific link training routine |
1467 | */ | 1467 | */ |
1468 | if (is_mst_supported(link)) { | 1468 | if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST) { |
1469 | *link_setting = link->verified_link_cap; | 1469 | *link_setting = link->verified_link_cap; |
1470 | return; | 1470 | return; |
1471 | } | 1471 | } |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c index 41e42beff213..45be31327340 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | |||
@@ -2756,10 +2756,13 @@ static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr, | |||
2756 | PHM_PlatformCaps_DisableMclkSwitchingForFrameLock); | 2756 | PHM_PlatformCaps_DisableMclkSwitchingForFrameLock); |
2757 | 2757 | ||
2758 | 2758 | ||
2759 | disable_mclk_switching = ((1 < info.display_count) || | 2759 | if (info.display_count == 0) |
2760 | disable_mclk_switching_for_frame_lock || | 2760 | disable_mclk_switching = false; |
2761 | smu7_vblank_too_short(hwmgr, mode_info.vblank_time_us) || | 2761 | else |
2762 | (mode_info.refresh_rate > 120)); | 2762 | disable_mclk_switching = ((1 < info.display_count) || |
2763 | disable_mclk_switching_for_frame_lock || | ||
2764 | smu7_vblank_too_short(hwmgr, mode_info.vblank_time_us) || | ||
2765 | (mode_info.refresh_rate > 120)); | ||
2763 | 2766 | ||
2764 | sclk = smu7_ps->performance_levels[0].engine_clock; | 2767 | sclk = smu7_ps->performance_levels[0].engine_clock; |
2765 | mclk = smu7_ps->performance_levels[0].memory_clock; | 2768 | mclk = smu7_ps->performance_levels[0].memory_clock; |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c index 2d55dabc77d4..5f9c3efb532f 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | |||
@@ -3168,10 +3168,13 @@ static int vega10_apply_state_adjust_rules(struct pp_hwmgr *hwmgr, | |||
3168 | disable_mclk_switching_for_vr = PP_CAP(PHM_PlatformCaps_DisableMclkSwitchForVR); | 3168 | disable_mclk_switching_for_vr = PP_CAP(PHM_PlatformCaps_DisableMclkSwitchForVR); |
3169 | force_mclk_high = PP_CAP(PHM_PlatformCaps_ForceMclkHigh); | 3169 | force_mclk_high = PP_CAP(PHM_PlatformCaps_ForceMclkHigh); |
3170 | 3170 | ||
3171 | disable_mclk_switching = (info.display_count > 1) || | 3171 | if (info.display_count == 0) |
3172 | disable_mclk_switching_for_frame_lock || | 3172 | disable_mclk_switching = false; |
3173 | disable_mclk_switching_for_vr || | 3173 | else |
3174 | force_mclk_high; | 3174 | disable_mclk_switching = (info.display_count > 1) || |
3175 | disable_mclk_switching_for_frame_lock || | ||
3176 | disable_mclk_switching_for_vr || | ||
3177 | force_mclk_high; | ||
3175 | 3178 | ||
3176 | sclk = vega10_ps->performance_levels[0].gfx_clock; | 3179 | sclk = vega10_ps->performance_levels[0].gfx_clock; |
3177 | mclk = vega10_ps->performance_levels[0].mem_clock; | 3180 | mclk = vega10_ps->performance_levels[0].mem_clock; |
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 8d3e3d2e0090..7828a5e10629 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
@@ -1365,6 +1365,10 @@ int radeon_device_init(struct radeon_device *rdev, | |||
1365 | if ((rdev->flags & RADEON_IS_PCI) && | 1365 | if ((rdev->flags & RADEON_IS_PCI) && |
1366 | (rdev->family <= CHIP_RS740)) | 1366 | (rdev->family <= CHIP_RS740)) |
1367 | rdev->need_dma32 = true; | 1367 | rdev->need_dma32 = true; |
1368 | #ifdef CONFIG_PPC64 | ||
1369 | if (rdev->family == CHIP_CEDAR) | ||
1370 | rdev->need_dma32 = true; | ||
1371 | #endif | ||
1368 | 1372 | ||
1369 | dma_bits = rdev->need_dma32 ? 32 : 40; | 1373 | dma_bits = rdev->need_dma32 ? 32 : 40; |
1370 | r = pci_set_dma_mask(rdev->pdev, DMA_BIT_MASK(dma_bits)); | 1374 | r = pci_set_dma_mask(rdev->pdev, DMA_BIT_MASK(dma_bits)); |
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c index 326ad068c15a..4b6542538ff9 100644 --- a/drivers/gpu/drm/radeon/radeon_pm.c +++ b/drivers/gpu/drm/radeon/radeon_pm.c | |||
@@ -47,7 +47,6 @@ static bool radeon_pm_in_vbl(struct radeon_device *rdev); | |||
47 | static bool radeon_pm_debug_check_in_vbl(struct radeon_device *rdev, bool finish); | 47 | static bool radeon_pm_debug_check_in_vbl(struct radeon_device *rdev, bool finish); |
48 | static void radeon_pm_update_profile(struct radeon_device *rdev); | 48 | static void radeon_pm_update_profile(struct radeon_device *rdev); |
49 | static void radeon_pm_set_clocks(struct radeon_device *rdev); | 49 | static void radeon_pm_set_clocks(struct radeon_device *rdev); |
50 | static void radeon_pm_compute_clocks_dpm(struct radeon_device *rdev); | ||
51 | 50 | ||
52 | int radeon_pm_get_type_index(struct radeon_device *rdev, | 51 | int radeon_pm_get_type_index(struct radeon_device *rdev, |
53 | enum radeon_pm_state_type ps_type, | 52 | enum radeon_pm_state_type ps_type, |
@@ -80,8 +79,6 @@ void radeon_pm_acpi_event_handler(struct radeon_device *rdev) | |||
80 | radeon_dpm_enable_bapm(rdev, rdev->pm.dpm.ac_power); | 79 | radeon_dpm_enable_bapm(rdev, rdev->pm.dpm.ac_power); |
81 | } | 80 | } |
82 | mutex_unlock(&rdev->pm.mutex); | 81 | mutex_unlock(&rdev->pm.mutex); |
83 | /* allow new DPM state to be picked */ | ||
84 | radeon_pm_compute_clocks_dpm(rdev); | ||
85 | } else if (rdev->pm.pm_method == PM_METHOD_PROFILE) { | 82 | } else if (rdev->pm.pm_method == PM_METHOD_PROFILE) { |
86 | if (rdev->pm.profile == PM_PROFILE_AUTO) { | 83 | if (rdev->pm.profile == PM_PROFILE_AUTO) { |
87 | mutex_lock(&rdev->pm.mutex); | 84 | mutex_lock(&rdev->pm.mutex); |
@@ -885,8 +882,7 @@ static struct radeon_ps *radeon_dpm_pick_power_state(struct radeon_device *rdev, | |||
885 | dpm_state = POWER_STATE_TYPE_INTERNAL_3DPERF; | 882 | dpm_state = POWER_STATE_TYPE_INTERNAL_3DPERF; |
886 | /* balanced states don't exist at the moment */ | 883 | /* balanced states don't exist at the moment */ |
887 | if (dpm_state == POWER_STATE_TYPE_BALANCED) | 884 | if (dpm_state == POWER_STATE_TYPE_BALANCED) |
888 | dpm_state = rdev->pm.dpm.ac_power ? | 885 | dpm_state = POWER_STATE_TYPE_PERFORMANCE; |
889 | POWER_STATE_TYPE_PERFORMANCE : POWER_STATE_TYPE_BATTERY; | ||
890 | 886 | ||
891 | restart_search: | 887 | restart_search: |
892 | /* Pick the best power state based on current conditions */ | 888 | /* Pick the best power state based on current conditions */ |