diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-11-23 03:04:05 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-11-23 03:04:05 -0500 |
commit | 92907cbbef8625bb3998d1eb385fc88f23c97a3f (patch) | |
tree | 15626ff9287e37c3cb81c7286d6db5a7fd77c854 /drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |
parent | 15fbfccfe92c62ae8d1ecc647c44157ed01ac02e (diff) | |
parent | 1ec218373b8ebda821aec00bb156a9c94fad9cd4 (diff) |
Merge tag 'v4.4-rc2' into drm-intel-next-queued
Linux 4.4-rc2
Backmerge to get at
commit 1b0e3a049efe471c399674fd954500ce97438d30
Author: Imre Deak <imre.deak@intel.com>
Date: Thu Nov 5 23:04:11 2015 +0200
drm/i915/skl: disable display side power well support for now
so that we can proplery re-eanble skl power wells in -next.
Conflicts are just adjacent lines changed, except for intel_fbdev.c
where we need to interleave the changs. Nothing nefarious.
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 6068d8207d10..d5b421330145 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |||
@@ -57,6 +57,7 @@ static const char *amdgpu_asic_name[] = { | |||
57 | "TONGA", | 57 | "TONGA", |
58 | "FIJI", | 58 | "FIJI", |
59 | "CARRIZO", | 59 | "CARRIZO", |
60 | "STONEY", | ||
60 | "LAST", | 61 | "LAST", |
61 | }; | 62 | }; |
62 | 63 | ||
@@ -1022,7 +1023,7 @@ static void amdgpu_check_arguments(struct amdgpu_device *adev) | |||
1022 | * amdgpu_switcheroo_set_state - set switcheroo state | 1023 | * amdgpu_switcheroo_set_state - set switcheroo state |
1023 | * | 1024 | * |
1024 | * @pdev: pci dev pointer | 1025 | * @pdev: pci dev pointer |
1025 | * @state: vga switcheroo state | 1026 | * @state: vga_switcheroo state |
1026 | * | 1027 | * |
1027 | * Callback for the switcheroo driver. Suspends or resumes the | 1028 | * Callback for the switcheroo driver. Suspends or resumes the |
1028 | * the asics before or after it is powered up using ACPI methods. | 1029 | * the asics before or after it is powered up using ACPI methods. |
@@ -1165,7 +1166,8 @@ static int amdgpu_early_init(struct amdgpu_device *adev) | |||
1165 | case CHIP_TONGA: | 1166 | case CHIP_TONGA: |
1166 | case CHIP_FIJI: | 1167 | case CHIP_FIJI: |
1167 | case CHIP_CARRIZO: | 1168 | case CHIP_CARRIZO: |
1168 | if (adev->asic_type == CHIP_CARRIZO) | 1169 | case CHIP_STONEY: |
1170 | if (adev->asic_type == CHIP_CARRIZO || adev->asic_type == CHIP_STONEY) | ||
1169 | adev->family = AMDGPU_FAMILY_CZ; | 1171 | adev->family = AMDGPU_FAMILY_CZ; |
1170 | else | 1172 | else |
1171 | adev->family = AMDGPU_FAMILY_VI; | 1173 | adev->family = AMDGPU_FAMILY_VI; |
@@ -1418,7 +1420,6 @@ int amdgpu_device_init(struct amdgpu_device *adev, | |||
1418 | mutex_init(&adev->gfx.gpu_clock_mutex); | 1420 | mutex_init(&adev->gfx.gpu_clock_mutex); |
1419 | mutex_init(&adev->srbm_mutex); | 1421 | mutex_init(&adev->srbm_mutex); |
1420 | mutex_init(&adev->grbm_idx_mutex); | 1422 | mutex_init(&adev->grbm_idx_mutex); |
1421 | init_rwsem(&adev->exclusive_lock); | ||
1422 | mutex_init(&adev->mn_lock); | 1423 | mutex_init(&adev->mn_lock); |
1423 | hash_init(adev->mn_hash); | 1424 | hash_init(adev->mn_hash); |
1424 | 1425 | ||
@@ -1657,11 +1658,21 @@ int amdgpu_suspend_kms(struct drm_device *dev, bool suspend, bool fbcon) | |||
1657 | } | 1658 | } |
1658 | drm_modeset_unlock_all(dev); | 1659 | drm_modeset_unlock_all(dev); |
1659 | 1660 | ||
1660 | /* unpin the front buffers */ | 1661 | /* unpin the front buffers and cursors */ |
1661 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { | 1662 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { |
1663 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); | ||
1662 | struct amdgpu_framebuffer *rfb = to_amdgpu_framebuffer(crtc->primary->fb); | 1664 | struct amdgpu_framebuffer *rfb = to_amdgpu_framebuffer(crtc->primary->fb); |
1663 | struct amdgpu_bo *robj; | 1665 | struct amdgpu_bo *robj; |
1664 | 1666 | ||
1667 | if (amdgpu_crtc->cursor_bo) { | ||
1668 | struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo); | ||
1669 | r = amdgpu_bo_reserve(aobj, false); | ||
1670 | if (r == 0) { | ||
1671 | amdgpu_bo_unpin(aobj); | ||
1672 | amdgpu_bo_unreserve(aobj); | ||
1673 | } | ||
1674 | } | ||
1675 | |||
1665 | if (rfb == NULL || rfb->obj == NULL) { | 1676 | if (rfb == NULL || rfb->obj == NULL) { |
1666 | continue; | 1677 | continue; |
1667 | } | 1678 | } |
@@ -1713,6 +1724,7 @@ int amdgpu_resume_kms(struct drm_device *dev, bool resume, bool fbcon) | |||
1713 | { | 1724 | { |
1714 | struct drm_connector *connector; | 1725 | struct drm_connector *connector; |
1715 | struct amdgpu_device *adev = dev->dev_private; | 1726 | struct amdgpu_device *adev = dev->dev_private; |
1727 | struct drm_crtc *crtc; | ||
1716 | int r; | 1728 | int r; |
1717 | 1729 | ||
1718 | if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) | 1730 | if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) |
@@ -1746,6 +1758,24 @@ int amdgpu_resume_kms(struct drm_device *dev, bool resume, bool fbcon) | |||
1746 | if (r) | 1758 | if (r) |
1747 | return r; | 1759 | return r; |
1748 | 1760 | ||
1761 | /* pin cursors */ | ||
1762 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { | ||
1763 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); | ||
1764 | |||
1765 | if (amdgpu_crtc->cursor_bo) { | ||
1766 | struct amdgpu_bo *aobj = gem_to_amdgpu_bo(amdgpu_crtc->cursor_bo); | ||
1767 | r = amdgpu_bo_reserve(aobj, false); | ||
1768 | if (r == 0) { | ||
1769 | r = amdgpu_bo_pin(aobj, | ||
1770 | AMDGPU_GEM_DOMAIN_VRAM, | ||
1771 | &amdgpu_crtc->cursor_addr); | ||
1772 | if (r != 0) | ||
1773 | DRM_ERROR("Failed to pin cursor BO (%d)\n", r); | ||
1774 | amdgpu_bo_unreserve(aobj); | ||
1775 | } | ||
1776 | } | ||
1777 | } | ||
1778 | |||
1749 | /* blat the mode back in */ | 1779 | /* blat the mode back in */ |
1750 | if (fbcon) { | 1780 | if (fbcon) { |
1751 | drm_helper_resume_force_mode(dev); | 1781 | drm_helper_resume_force_mode(dev); |
@@ -1785,14 +1815,6 @@ int amdgpu_gpu_reset(struct amdgpu_device *adev) | |||
1785 | int i, r; | 1815 | int i, r; |
1786 | int resched; | 1816 | int resched; |
1787 | 1817 | ||
1788 | down_write(&adev->exclusive_lock); | ||
1789 | |||
1790 | if (!adev->needs_reset) { | ||
1791 | up_write(&adev->exclusive_lock); | ||
1792 | return 0; | ||
1793 | } | ||
1794 | |||
1795 | adev->needs_reset = false; | ||
1796 | atomic_inc(&adev->gpu_reset_counter); | 1818 | atomic_inc(&adev->gpu_reset_counter); |
1797 | 1819 | ||
1798 | /* block TTM */ | 1820 | /* block TTM */ |
@@ -1856,7 +1878,6 @@ retry: | |||
1856 | dev_info(adev->dev, "GPU reset failed\n"); | 1878 | dev_info(adev->dev, "GPU reset failed\n"); |
1857 | } | 1879 | } |
1858 | 1880 | ||
1859 | up_write(&adev->exclusive_lock); | ||
1860 | return r; | 1881 | return r; |
1861 | } | 1882 | } |
1862 | 1883 | ||