diff options
author | Dave Airlie <airlied@redhat.com> | 2016-03-13 19:42:34 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-03-13 19:46:02 -0400 |
commit | 9b61c0fcdf0cfd20a85d9856d46142e7f297de0a (patch) | |
tree | d4abe6aa3f4e1e088f9da1d0597e078b1fe58912 /drivers/gpu/drm/amd/amdgpu | |
parent | 550e3b23a53c88adfa46e64f9d442743e65d47da (diff) | |
parent | 125234dc8b1cc862f52d8bd5b37c36cc59b2cb86 (diff) |
Merge drm-fixes into drm-next.
Nouveau wanted this to avoid some worse conflicts when I merge that.
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
26 files changed, 361 insertions, 281 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 0c42a85ca5a5..d0489722fc7e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -85,6 +85,8 @@ extern int amdgpu_vm_debug; | |||
85 | extern int amdgpu_sched_jobs; | 85 | extern int amdgpu_sched_jobs; |
86 | extern int amdgpu_sched_hw_submission; | 86 | extern int amdgpu_sched_hw_submission; |
87 | extern int amdgpu_powerplay; | 87 | extern int amdgpu_powerplay; |
88 | extern unsigned amdgpu_pcie_gen_cap; | ||
89 | extern unsigned amdgpu_pcie_lane_cap; | ||
88 | 90 | ||
89 | #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 | 91 | #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 |
90 | #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */ | 92 | #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */ |
@@ -127,47 +129,6 @@ extern int amdgpu_powerplay; | |||
127 | #define AMDGPU_RESET_VCE (1 << 13) | 129 | #define AMDGPU_RESET_VCE (1 << 13) |
128 | #define AMDGPU_RESET_VCE1 (1 << 14) | 130 | #define AMDGPU_RESET_VCE1 (1 << 14) |
129 | 131 | ||
130 | /* CG block flags */ | ||
131 | #define AMDGPU_CG_BLOCK_GFX (1 << 0) | ||
132 | #define AMDGPU_CG_BLOCK_MC (1 << 1) | ||
133 | #define AMDGPU_CG_BLOCK_SDMA (1 << 2) | ||
134 | #define AMDGPU_CG_BLOCK_UVD (1 << 3) | ||
135 | #define AMDGPU_CG_BLOCK_VCE (1 << 4) | ||
136 | #define AMDGPU_CG_BLOCK_HDP (1 << 5) | ||
137 | #define AMDGPU_CG_BLOCK_BIF (1 << 6) | ||
138 | |||
139 | /* CG flags */ | ||
140 | #define AMDGPU_CG_SUPPORT_GFX_MGCG (1 << 0) | ||
141 | #define AMDGPU_CG_SUPPORT_GFX_MGLS (1 << 1) | ||
142 | #define AMDGPU_CG_SUPPORT_GFX_CGCG (1 << 2) | ||
143 | #define AMDGPU_CG_SUPPORT_GFX_CGLS (1 << 3) | ||
144 | #define AMDGPU_CG_SUPPORT_GFX_CGTS (1 << 4) | ||
145 | #define AMDGPU_CG_SUPPORT_GFX_CGTS_LS (1 << 5) | ||
146 | #define AMDGPU_CG_SUPPORT_GFX_CP_LS (1 << 6) | ||
147 | #define AMDGPU_CG_SUPPORT_GFX_RLC_LS (1 << 7) | ||
148 | #define AMDGPU_CG_SUPPORT_MC_LS (1 << 8) | ||
149 | #define AMDGPU_CG_SUPPORT_MC_MGCG (1 << 9) | ||
150 | #define AMDGPU_CG_SUPPORT_SDMA_LS (1 << 10) | ||
151 | #define AMDGPU_CG_SUPPORT_SDMA_MGCG (1 << 11) | ||
152 | #define AMDGPU_CG_SUPPORT_BIF_LS (1 << 12) | ||
153 | #define AMDGPU_CG_SUPPORT_UVD_MGCG (1 << 13) | ||
154 | #define AMDGPU_CG_SUPPORT_VCE_MGCG (1 << 14) | ||
155 | #define AMDGPU_CG_SUPPORT_HDP_LS (1 << 15) | ||
156 | #define AMDGPU_CG_SUPPORT_HDP_MGCG (1 << 16) | ||
157 | |||
158 | /* PG flags */ | ||
159 | #define AMDGPU_PG_SUPPORT_GFX_PG (1 << 0) | ||
160 | #define AMDGPU_PG_SUPPORT_GFX_SMG (1 << 1) | ||
161 | #define AMDGPU_PG_SUPPORT_GFX_DMG (1 << 2) | ||
162 | #define AMDGPU_PG_SUPPORT_UVD (1 << 3) | ||
163 | #define AMDGPU_PG_SUPPORT_VCE (1 << 4) | ||
164 | #define AMDGPU_PG_SUPPORT_CP (1 << 5) | ||
165 | #define AMDGPU_PG_SUPPORT_GDS (1 << 6) | ||
166 | #define AMDGPU_PG_SUPPORT_RLC_SMU_HS (1 << 7) | ||
167 | #define AMDGPU_PG_SUPPORT_SDMA (1 << 8) | ||
168 | #define AMDGPU_PG_SUPPORT_ACP (1 << 9) | ||
169 | #define AMDGPU_PG_SUPPORT_SAMU (1 << 10) | ||
170 | |||
171 | /* GFX current status */ | 132 | /* GFX current status */ |
172 | #define AMDGPU_GFX_NORMAL_MODE 0x00000000L | 133 | #define AMDGPU_GFX_NORMAL_MODE 0x00000000L |
173 | #define AMDGPU_GFX_SAFE_MODE 0x00000001L | 134 | #define AMDGPU_GFX_SAFE_MODE 0x00000001L |
@@ -592,8 +553,6 @@ struct amdgpu_sa_manager { | |||
592 | uint32_t align; | 553 | uint32_t align; |
593 | }; | 554 | }; |
594 | 555 | ||
595 | struct amdgpu_sa_bo; | ||
596 | |||
597 | /* sub-allocation buffer */ | 556 | /* sub-allocation buffer */ |
598 | struct amdgpu_sa_bo { | 557 | struct amdgpu_sa_bo { |
599 | struct list_head olist; | 558 | struct list_head olist; |
@@ -2357,6 +2316,7 @@ void amdgpu_ttm_placement_from_domain(struct amdgpu_bo *rbo, u32 domain); | |||
2357 | bool amdgpu_ttm_bo_is_amdgpu_bo(struct ttm_buffer_object *bo); | 2316 | bool amdgpu_ttm_bo_is_amdgpu_bo(struct ttm_buffer_object *bo); |
2358 | int amdgpu_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr, | 2317 | int amdgpu_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr, |
2359 | uint32_t flags); | 2318 | uint32_t flags); |
2319 | bool amdgpu_ttm_tt_has_userptr(struct ttm_tt *ttm); | ||
2360 | struct mm_struct *amdgpu_ttm_tt_get_usermm(struct ttm_tt *ttm); | 2320 | struct mm_struct *amdgpu_ttm_tt_get_usermm(struct ttm_tt *ttm); |
2361 | bool amdgpu_ttm_tt_affect_userptr(struct ttm_tt *ttm, unsigned long start, | 2321 | bool amdgpu_ttm_tt_affect_userptr(struct ttm_tt *ttm, unsigned long start, |
2362 | unsigned long end); | 2322 | unsigned long end); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c index a081dda9fa2f..7a4b101e10c6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | |||
@@ -795,6 +795,12 @@ static int amdgpu_cgs_query_system_info(void *cgs_device, | |||
795 | case CGS_SYSTEM_INFO_PCIE_MLW: | 795 | case CGS_SYSTEM_INFO_PCIE_MLW: |
796 | sys_info->value = adev->pm.pcie_mlw_mask; | 796 | sys_info->value = adev->pm.pcie_mlw_mask; |
797 | break; | 797 | break; |
798 | case CGS_SYSTEM_INFO_CG_FLAGS: | ||
799 | sys_info->value = adev->cg_flags; | ||
800 | break; | ||
801 | case CGS_SYSTEM_INFO_PG_FLAGS: | ||
802 | sys_info->value = adev->pg_flags; | ||
803 | break; | ||
798 | default: | 804 | default: |
799 | return -ENODEV; | 805 | return -ENODEV; |
800 | } | 806 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c index 89c3dd62ba21..119cdc2c43e7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | |||
@@ -77,7 +77,7 @@ void amdgpu_connector_hotplug(struct drm_connector *connector) | |||
77 | } else if (amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) { | 77 | } else if (amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) { |
78 | /* Don't try to start link training before we | 78 | /* Don't try to start link training before we |
79 | * have the dpcd */ | 79 | * have the dpcd */ |
80 | if (!amdgpu_atombios_dp_get_dpcd(amdgpu_connector)) | 80 | if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector)) |
81 | return; | 81 | return; |
82 | 82 | ||
83 | /* set it to OFF so that drm_helper_connector_dpms() | 83 | /* set it to OFF so that drm_helper_connector_dpms() |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index db20d2783def..2139da773da6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |||
@@ -1762,15 +1762,20 @@ int amdgpu_resume_kms(struct drm_device *dev, bool resume, bool fbcon) | |||
1762 | } | 1762 | } |
1763 | 1763 | ||
1764 | /* post card */ | 1764 | /* post card */ |
1765 | amdgpu_atom_asic_init(adev->mode_info.atom_context); | 1765 | if (!amdgpu_card_posted(adev)) |
1766 | amdgpu_atom_asic_init(adev->mode_info.atom_context); | ||
1766 | 1767 | ||
1767 | r = amdgpu_resume(adev); | 1768 | r = amdgpu_resume(adev); |
1769 | if (r) | ||
1770 | DRM_ERROR("amdgpu_resume failed (%d).\n", r); | ||
1768 | 1771 | ||
1769 | amdgpu_fence_driver_resume(adev); | 1772 | amdgpu_fence_driver_resume(adev); |
1770 | 1773 | ||
1771 | r = amdgpu_ib_ring_tests(adev); | 1774 | if (resume) { |
1772 | if (r) | 1775 | r = amdgpu_ib_ring_tests(adev); |
1773 | DRM_ERROR("ib ring test failed (%d).\n", r); | 1776 | if (r) |
1777 | DRM_ERROR("ib ring test failed (%d).\n", r); | ||
1778 | } | ||
1774 | 1779 | ||
1775 | r = amdgpu_late_init(adev); | 1780 | r = amdgpu_late_init(adev); |
1776 | if (r) | 1781 | if (r) |
@@ -1903,80 +1908,97 @@ retry: | |||
1903 | return r; | 1908 | return r; |
1904 | } | 1909 | } |
1905 | 1910 | ||
1911 | #define AMDGPU_DEFAULT_PCIE_GEN_MASK 0x30007 /* gen: chipset 1/2, asic 1/2/3 */ | ||
1912 | #define AMDGPU_DEFAULT_PCIE_MLW_MASK 0x2f0000 /* 1/2/4/8/16 lanes */ | ||
1913 | |||
1906 | void amdgpu_get_pcie_info(struct amdgpu_device *adev) | 1914 | void amdgpu_get_pcie_info(struct amdgpu_device *adev) |
1907 | { | 1915 | { |
1908 | u32 mask; | 1916 | u32 mask; |
1909 | int ret; | 1917 | int ret; |
1910 | 1918 | ||
1911 | if (pci_is_root_bus(adev->pdev->bus)) | 1919 | if (amdgpu_pcie_gen_cap) |
1912 | return; | 1920 | adev->pm.pcie_gen_mask = amdgpu_pcie_gen_cap; |
1913 | 1921 | ||
1914 | if (amdgpu_pcie_gen2 == 0) | 1922 | if (amdgpu_pcie_lane_cap) |
1915 | return; | 1923 | adev->pm.pcie_mlw_mask = amdgpu_pcie_lane_cap; |
1916 | 1924 | ||
1917 | if (adev->flags & AMD_IS_APU) | 1925 | /* covers APUs as well */ |
1926 | if (pci_is_root_bus(adev->pdev->bus)) { | ||
1927 | if (adev->pm.pcie_gen_mask == 0) | ||
1928 | adev->pm.pcie_gen_mask = AMDGPU_DEFAULT_PCIE_GEN_MASK; | ||
1929 | if (adev->pm.pcie_mlw_mask == 0) | ||
1930 | adev->pm.pcie_mlw_mask = AMDGPU_DEFAULT_PCIE_MLW_MASK; | ||
1918 | return; | 1931 | return; |
1932 | } | ||
1919 | 1933 | ||
1920 | ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask); | 1934 | if (adev->pm.pcie_gen_mask == 0) { |
1921 | if (!ret) { | 1935 | ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask); |
1922 | adev->pm.pcie_gen_mask = (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 | | 1936 | if (!ret) { |
1923 | CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 | | 1937 | adev->pm.pcie_gen_mask = (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 | |
1924 | CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3); | 1938 | CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 | |
1925 | 1939 | CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3); | |
1926 | if (mask & DRM_PCIE_SPEED_25) | 1940 | |
1927 | adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1; | 1941 | if (mask & DRM_PCIE_SPEED_25) |
1928 | if (mask & DRM_PCIE_SPEED_50) | 1942 | adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1; |
1929 | adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2; | 1943 | if (mask & DRM_PCIE_SPEED_50) |
1930 | if (mask & DRM_PCIE_SPEED_80) | 1944 | adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2; |
1931 | adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3; | 1945 | if (mask & DRM_PCIE_SPEED_80) |
1932 | } | 1946 | adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3; |
1933 | ret = drm_pcie_get_max_link_width(adev->ddev, &mask); | 1947 | } else { |
1934 | if (!ret) { | 1948 | adev->pm.pcie_gen_mask = AMDGPU_DEFAULT_PCIE_GEN_MASK; |
1935 | switch (mask) { | 1949 | } |
1936 | case 32: | 1950 | } |
1937 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X32 | | 1951 | if (adev->pm.pcie_mlw_mask == 0) { |
1938 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 | | 1952 | ret = drm_pcie_get_max_link_width(adev->ddev, &mask); |
1939 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | | 1953 | if (!ret) { |
1940 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | | 1954 | switch (mask) { |
1941 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | | 1955 | case 32: |
1942 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | 1956 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X32 | |
1943 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | 1957 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 | |
1944 | break; | 1958 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | |
1945 | case 16: | 1959 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | |
1946 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 | | 1960 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | |
1947 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | | 1961 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | |
1948 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | | 1962 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); |
1949 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | | 1963 | break; |
1950 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | 1964 | case 16: |
1951 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | 1965 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 | |
1952 | break; | 1966 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | |
1953 | case 12: | 1967 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | |
1954 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | | 1968 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | |
1955 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | | 1969 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | |
1956 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | | 1970 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); |
1957 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | 1971 | break; |
1958 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | 1972 | case 12: |
1959 | break; | 1973 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | |
1960 | case 8: | 1974 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | |
1961 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | | 1975 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | |
1962 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | | 1976 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | |
1963 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | 1977 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); |
1964 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | 1978 | break; |
1965 | break; | 1979 | case 8: |
1966 | case 4: | 1980 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | |
1967 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | | 1981 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | |
1968 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | 1982 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | |
1969 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | 1983 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); |
1970 | break; | 1984 | break; |
1971 | case 2: | 1985 | case 4: |
1972 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | 1986 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | |
1973 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | 1987 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | |
1974 | break; | 1988 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); |
1975 | case 1: | 1989 | break; |
1976 | adev->pm.pcie_mlw_mask = CAIL_PCIE_LINK_WIDTH_SUPPORT_X1; | 1990 | case 2: |
1977 | break; | 1991 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | |
1978 | default: | 1992 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); |
1979 | break; | 1993 | break; |
1994 | case 1: | ||
1995 | adev->pm.pcie_mlw_mask = CAIL_PCIE_LINK_WIDTH_SUPPORT_X1; | ||
1996 | break; | ||
1997 | default: | ||
1998 | break; | ||
1999 | } | ||
2000 | } else { | ||
2001 | adev->pm.pcie_mlw_mask = AMDGPU_DEFAULT_PCIE_MLW_MASK; | ||
1980 | } | 2002 | } |
1981 | } | 2003 | } |
1982 | } | 2004 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c index 2cb53c24dec0..f0ed974bd4e0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | |||
@@ -70,8 +70,8 @@ static void amdgpu_flip_work_func(struct work_struct *__work) | |||
70 | 70 | ||
71 | struct drm_crtc *crtc = &amdgpuCrtc->base; | 71 | struct drm_crtc *crtc = &amdgpuCrtc->base; |
72 | unsigned long flags; | 72 | unsigned long flags; |
73 | unsigned i; | 73 | unsigned i, repcnt = 4; |
74 | int vpos, hpos, stat, min_udelay; | 74 | int vpos, hpos, stat, min_udelay = 0; |
75 | struct drm_vblank_crtc *vblank = &crtc->dev->vblank[work->crtc_id]; | 75 | struct drm_vblank_crtc *vblank = &crtc->dev->vblank[work->crtc_id]; |
76 | 76 | ||
77 | if (amdgpu_flip_handle_fence(work, &work->excl)) | 77 | if (amdgpu_flip_handle_fence(work, &work->excl)) |
@@ -97,7 +97,7 @@ static void amdgpu_flip_work_func(struct work_struct *__work) | |||
97 | * In practice this won't execute very often unless on very fast | 97 | * In practice this won't execute very often unless on very fast |
98 | * machines because the time window for this to happen is very small. | 98 | * machines because the time window for this to happen is very small. |
99 | */ | 99 | */ |
100 | for (;;) { | 100 | while (amdgpuCrtc->enabled && --repcnt) { |
101 | /* GET_DISTANCE_TO_VBLANKSTART returns distance to real vblank | 101 | /* GET_DISTANCE_TO_VBLANKSTART returns distance to real vblank |
102 | * start in hpos, and to the "fudged earlier" vblank start in | 102 | * start in hpos, and to the "fudged earlier" vblank start in |
103 | * vpos. | 103 | * vpos. |
@@ -113,12 +113,24 @@ static void amdgpu_flip_work_func(struct work_struct *__work) | |||
113 | break; | 113 | break; |
114 | 114 | ||
115 | /* Sleep at least until estimated real start of hw vblank */ | 115 | /* Sleep at least until estimated real start of hw vblank */ |
116 | spin_unlock_irqrestore(&crtc->dev->event_lock, flags); | ||
117 | min_udelay = (-hpos + 1) * max(vblank->linedur_ns / 1000, 5); | 116 | min_udelay = (-hpos + 1) * max(vblank->linedur_ns / 1000, 5); |
117 | if (min_udelay > vblank->framedur_ns / 2000) { | ||
118 | /* Don't wait ridiculously long - something is wrong */ | ||
119 | repcnt = 0; | ||
120 | break; | ||
121 | } | ||
122 | spin_unlock_irqrestore(&crtc->dev->event_lock, flags); | ||
118 | usleep_range(min_udelay, 2 * min_udelay); | 123 | usleep_range(min_udelay, 2 * min_udelay); |
119 | spin_lock_irqsave(&crtc->dev->event_lock, flags); | 124 | spin_lock_irqsave(&crtc->dev->event_lock, flags); |
120 | }; | 125 | }; |
121 | 126 | ||
127 | if (!repcnt) | ||
128 | DRM_DEBUG_DRIVER("Delay problem on crtc %d: min_udelay %d, " | ||
129 | "framedur %d, linedur %d, stat %d, vpos %d, " | ||
130 | "hpos %d\n", work->crtc_id, min_udelay, | ||
131 | vblank->framedur_ns / 1000, | ||
132 | vblank->linedur_ns / 1000, stat, vpos, hpos); | ||
133 | |||
122 | /* set the flip status */ | 134 | /* set the flip status */ |
123 | amdgpuCrtc->pflip_status = AMDGPU_FLIP_SUBMITTED; | 135 | amdgpuCrtc->pflip_status = AMDGPU_FLIP_SUBMITTED; |
124 | spin_unlock_irqrestore(&crtc->dev->event_lock, flags); | 136 | spin_unlock_irqrestore(&crtc->dev->event_lock, flags); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 01b4fd6115c2..74a2f8a6be1f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | |||
@@ -80,6 +80,8 @@ int amdgpu_exp_hw_support = 0; | |||
80 | int amdgpu_sched_jobs = 32; | 80 | int amdgpu_sched_jobs = 32; |
81 | int amdgpu_sched_hw_submission = 2; | 81 | int amdgpu_sched_hw_submission = 2; |
82 | int amdgpu_powerplay = -1; | 82 | int amdgpu_powerplay = -1; |
83 | unsigned amdgpu_pcie_gen_cap = 0; | ||
84 | unsigned amdgpu_pcie_lane_cap = 0; | ||
83 | 85 | ||
84 | MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes"); | 86 | MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes"); |
85 | module_param_named(vramlimit, amdgpu_vram_limit, int, 0600); | 87 | module_param_named(vramlimit, amdgpu_vram_limit, int, 0600); |
@@ -158,6 +160,12 @@ MODULE_PARM_DESC(powerplay, "Powerplay component (1 = enable, 0 = disable, -1 = | |||
158 | module_param_named(powerplay, amdgpu_powerplay, int, 0444); | 160 | module_param_named(powerplay, amdgpu_powerplay, int, 0444); |
159 | #endif | 161 | #endif |
160 | 162 | ||
163 | MODULE_PARM_DESC(pcie_gen_cap, "PCIE Gen Caps (0: autodetect (default))"); | ||
164 | module_param_named(pcie_gen_cap, amdgpu_pcie_gen_cap, uint, 0444); | ||
165 | |||
166 | MODULE_PARM_DESC(pcie_lane_cap, "PCIE Lane Caps (0: autodetect (default))"); | ||
167 | module_param_named(pcie_lane_cap, amdgpu_pcie_lane_cap, uint, 0444); | ||
168 | |||
161 | static struct pci_device_id pciidlist[] = { | 169 | static struct pci_device_id pciidlist[] = { |
162 | #ifdef CONFIG_DRM_AMDGPU_CIK | 170 | #ifdef CONFIG_DRM_AMDGPU_CIK |
163 | /* Kaveri */ | 171 | /* Kaveri */ |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 2e26a517f2d6..7a47c45b2131 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |||
@@ -606,7 +606,8 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data, | |||
606 | break; | 606 | break; |
607 | } | 607 | } |
608 | ttm_eu_backoff_reservation(&ticket, &list); | 608 | ttm_eu_backoff_reservation(&ticket, &list); |
609 | if (!r && !(args->flags & AMDGPU_VM_DELAY_UPDATE)) | 609 | if (!r && !(args->flags & AMDGPU_VM_DELAY_UPDATE) && |
610 | !amdgpu_vm_debug) | ||
610 | amdgpu_gem_va_update_vm(adev, bo_va, args->operation); | 611 | amdgpu_gem_va_update_vm(adev, bo_va, args->operation); |
611 | 612 | ||
612 | drm_gem_object_unreference_unlocked(gobj); | 613 | drm_gem_object_unreference_unlocked(gobj); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c index d77b2bdbe800..ff9597ce268c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | |||
@@ -113,6 +113,10 @@ static ssize_t amdgpu_get_dpm_forced_performance_level(struct device *dev, | |||
113 | struct drm_device *ddev = dev_get_drvdata(dev); | 113 | struct drm_device *ddev = dev_get_drvdata(dev); |
114 | struct amdgpu_device *adev = ddev->dev_private; | 114 | struct amdgpu_device *adev = ddev->dev_private; |
115 | 115 | ||
116 | if ((adev->flags & AMD_IS_PX) && | ||
117 | (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) | ||
118 | return snprintf(buf, PAGE_SIZE, "off\n"); | ||
119 | |||
116 | if (adev->pp_enabled) { | 120 | if (adev->pp_enabled) { |
117 | enum amd_dpm_forced_level level; | 121 | enum amd_dpm_forced_level level; |
118 | 122 | ||
@@ -142,6 +146,11 @@ static ssize_t amdgpu_set_dpm_forced_performance_level(struct device *dev, | |||
142 | enum amdgpu_dpm_forced_level level; | 146 | enum amdgpu_dpm_forced_level level; |
143 | int ret = 0; | 147 | int ret = 0; |
144 | 148 | ||
149 | /* Can't force performance level when the card is off */ | ||
150 | if ((adev->flags & AMD_IS_PX) && | ||
151 | (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) | ||
152 | return -EINVAL; | ||
153 | |||
145 | if (strncmp("low", buf, strlen("low")) == 0) { | 154 | if (strncmp("low", buf, strlen("low")) == 0) { |
146 | level = AMDGPU_DPM_FORCED_LEVEL_LOW; | 155 | level = AMDGPU_DPM_FORCED_LEVEL_LOW; |
147 | } else if (strncmp("high", buf, strlen("high")) == 0) { | 156 | } else if (strncmp("high", buf, strlen("high")) == 0) { |
@@ -161,6 +170,7 @@ static ssize_t amdgpu_set_dpm_forced_performance_level(struct device *dev, | |||
161 | mutex_lock(&adev->pm.mutex); | 170 | mutex_lock(&adev->pm.mutex); |
162 | if (adev->pm.dpm.thermal_active) { | 171 | if (adev->pm.dpm.thermal_active) { |
163 | count = -EINVAL; | 172 | count = -EINVAL; |
173 | mutex_unlock(&adev->pm.mutex); | ||
164 | goto fail; | 174 | goto fail; |
165 | } | 175 | } |
166 | ret = amdgpu_dpm_force_performance_level(adev, level); | 176 | ret = amdgpu_dpm_force_performance_level(adev, level); |
@@ -171,8 +181,6 @@ static ssize_t amdgpu_set_dpm_forced_performance_level(struct device *dev, | |||
171 | mutex_unlock(&adev->pm.mutex); | 181 | mutex_unlock(&adev->pm.mutex); |
172 | } | 182 | } |
173 | fail: | 183 | fail: |
174 | mutex_unlock(&adev->pm.mutex); | ||
175 | |||
176 | return count; | 184 | return count; |
177 | } | 185 | } |
178 | 186 | ||
@@ -469,8 +477,14 @@ static ssize_t amdgpu_hwmon_show_temp(struct device *dev, | |||
469 | char *buf) | 477 | char *buf) |
470 | { | 478 | { |
471 | struct amdgpu_device *adev = dev_get_drvdata(dev); | 479 | struct amdgpu_device *adev = dev_get_drvdata(dev); |
480 | struct drm_device *ddev = adev->ddev; | ||
472 | int temp; | 481 | int temp; |
473 | 482 | ||
483 | /* Can't get temperature when the card is off */ | ||
484 | if ((adev->flags & AMD_IS_PX) && | ||
485 | (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) | ||
486 | return -EINVAL; | ||
487 | |||
474 | if (!adev->pp_enabled && !adev->pm.funcs->get_temperature) | 488 | if (!adev->pp_enabled && !adev->pm.funcs->get_temperature) |
475 | temp = 0; | 489 | temp = 0; |
476 | else | 490 | else |
@@ -919,11 +933,6 @@ force: | |||
919 | 933 | ||
920 | /* update display watermarks based on new power state */ | 934 | /* update display watermarks based on new power state */ |
921 | amdgpu_display_bandwidth_update(adev); | 935 | amdgpu_display_bandwidth_update(adev); |
922 | /* update displays */ | ||
923 | amdgpu_dpm_display_configuration_changed(adev); | ||
924 | |||
925 | adev->pm.dpm.current_active_crtcs = adev->pm.dpm.new_active_crtcs; | ||
926 | adev->pm.dpm.current_active_crtc_count = adev->pm.dpm.new_active_crtc_count; | ||
927 | 936 | ||
928 | /* wait for the rings to drain */ | 937 | /* wait for the rings to drain */ |
929 | for (i = 0; i < AMDGPU_MAX_RINGS; i++) { | 938 | for (i = 0; i < AMDGPU_MAX_RINGS; i++) { |
@@ -940,6 +949,12 @@ force: | |||
940 | 949 | ||
941 | amdgpu_dpm_post_set_power_state(adev); | 950 | amdgpu_dpm_post_set_power_state(adev); |
942 | 951 | ||
952 | /* update displays */ | ||
953 | amdgpu_dpm_display_configuration_changed(adev); | ||
954 | |||
955 | adev->pm.dpm.current_active_crtcs = adev->pm.dpm.new_active_crtcs; | ||
956 | adev->pm.dpm.current_active_crtc_count = adev->pm.dpm.new_active_crtc_count; | ||
957 | |||
943 | if (adev->pm.funcs->force_performance_level) { | 958 | if (adev->pm.funcs->force_performance_level) { |
944 | if (adev->pm.dpm.thermal_active) { | 959 | if (adev->pm.dpm.thermal_active) { |
945 | enum amdgpu_dpm_forced_level level = adev->pm.dpm.forced_level; | 960 | enum amdgpu_dpm_forced_level level = adev->pm.dpm.forced_level; |
@@ -1174,12 +1189,16 @@ static int amdgpu_debugfs_pm_info(struct seq_file *m, void *data) | |||
1174 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 1189 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
1175 | struct drm_device *dev = node->minor->dev; | 1190 | struct drm_device *dev = node->minor->dev; |
1176 | struct amdgpu_device *adev = dev->dev_private; | 1191 | struct amdgpu_device *adev = dev->dev_private; |
1192 | struct drm_device *ddev = adev->ddev; | ||
1177 | 1193 | ||
1178 | if (!adev->pm.dpm_enabled) { | 1194 | if (!adev->pm.dpm_enabled) { |
1179 | seq_printf(m, "dpm not enabled\n"); | 1195 | seq_printf(m, "dpm not enabled\n"); |
1180 | return 0; | 1196 | return 0; |
1181 | } | 1197 | } |
1182 | if (adev->pp_enabled) { | 1198 | if ((adev->flags & AMD_IS_PX) && |
1199 | (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) { | ||
1200 | seq_printf(m, "PX asic powered off\n"); | ||
1201 | } else if (adev->pp_enabled) { | ||
1183 | amdgpu_dpm_debugfs_print_current_performance_level(adev, m); | 1202 | amdgpu_dpm_debugfs_print_current_performance_level(adev, m); |
1184 | } else { | 1203 | } else { |
1185 | mutex_lock(&adev->pm.mutex); | 1204 | mutex_lock(&adev->pm.mutex); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c index b9d0d55f6b47..3cb6d6c413c7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c | |||
@@ -143,8 +143,10 @@ static int amdgpu_pp_late_init(void *handle) | |||
143 | adev->powerplay.pp_handle); | 143 | adev->powerplay.pp_handle); |
144 | 144 | ||
145 | #ifdef CONFIG_DRM_AMD_POWERPLAY | 145 | #ifdef CONFIG_DRM_AMD_POWERPLAY |
146 | if (adev->pp_enabled) | 146 | if (adev->pp_enabled) { |
147 | amdgpu_pm_sysfs_init(adev); | 147 | amdgpu_pm_sysfs_init(adev); |
148 | amdgpu_dpm_dispatch_task(adev, AMD_PP_EVENT_COMPLETE_INIT, NULL, NULL); | ||
149 | } | ||
148 | #endif | 150 | #endif |
149 | return ret; | 151 | return ret; |
150 | } | 152 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c index 7d8f8f1e3f7f..2faf03bcda21 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c | |||
@@ -357,12 +357,15 @@ int amdgpu_sa_bo_new(struct amdgpu_sa_manager *sa_manager, | |||
357 | 357 | ||
358 | for (i = 0, count = 0; i < AMDGPU_MAX_RINGS; ++i) | 358 | for (i = 0, count = 0; i < AMDGPU_MAX_RINGS; ++i) |
359 | if (fences[i]) | 359 | if (fences[i]) |
360 | fences[count++] = fences[i]; | 360 | fences[count++] = fence_get(fences[i]); |
361 | 361 | ||
362 | if (count) { | 362 | if (count) { |
363 | spin_unlock(&sa_manager->wq.lock); | 363 | spin_unlock(&sa_manager->wq.lock); |
364 | t = fence_wait_any_timeout(fences, count, false, | 364 | t = fence_wait_any_timeout(fences, count, false, |
365 | MAX_SCHEDULE_TIMEOUT); | 365 | MAX_SCHEDULE_TIMEOUT); |
366 | for (i = 0; i < count; ++i) | ||
367 | fence_put(fences[i]); | ||
368 | |||
366 | r = (t > 0) ? 0 : t; | 369 | r = (t > 0) ? 0 : t; |
367 | spin_lock(&sa_manager->wq.lock); | 370 | spin_lock(&sa_manager->wq.lock); |
368 | } else { | 371 | } else { |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index e52fc641edfb..9ccdd189d717 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |||
@@ -725,7 +725,7 @@ static int amdgpu_ttm_tt_populate(struct ttm_tt *ttm) | |||
725 | 0, PAGE_SIZE, | 725 | 0, PAGE_SIZE, |
726 | PCI_DMA_BIDIRECTIONAL); | 726 | PCI_DMA_BIDIRECTIONAL); |
727 | if (pci_dma_mapping_error(adev->pdev, gtt->ttm.dma_address[i])) { | 727 | if (pci_dma_mapping_error(adev->pdev, gtt->ttm.dma_address[i])) { |
728 | while (--i) { | 728 | while (i--) { |
729 | pci_unmap_page(adev->pdev, gtt->ttm.dma_address[i], | 729 | pci_unmap_page(adev->pdev, gtt->ttm.dma_address[i], |
730 | PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); | 730 | PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); |
731 | gtt->ttm.dma_address[i] = 0; | 731 | gtt->ttm.dma_address[i] = 0; |
diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_dp.c b/drivers/gpu/drm/amd/amdgpu/atombios_dp.c index 21aacc1f45c1..bf731e9f643e 100644 --- a/drivers/gpu/drm/amd/amdgpu/atombios_dp.c +++ b/drivers/gpu/drm/amd/amdgpu/atombios_dp.c | |||
@@ -265,15 +265,27 @@ static int amdgpu_atombios_dp_get_dp_link_config(struct drm_connector *connector | |||
265 | unsigned max_lane_num = drm_dp_max_lane_count(dpcd); | 265 | unsigned max_lane_num = drm_dp_max_lane_count(dpcd); |
266 | unsigned lane_num, i, max_pix_clock; | 266 | unsigned lane_num, i, max_pix_clock; |
267 | 267 | ||
268 | for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) { | 268 | if (amdgpu_connector_encoder_get_dp_bridge_encoder_id(connector) == |
269 | for (i = 0; i < ARRAY_SIZE(link_rates) && link_rates[i] <= max_link_rate; i++) { | 269 | ENCODER_OBJECT_ID_NUTMEG) { |
270 | max_pix_clock = (lane_num * link_rates[i] * 8) / bpp; | 270 | for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) { |
271 | max_pix_clock = (lane_num * 270000 * 8) / bpp; | ||
271 | if (max_pix_clock >= pix_clock) { | 272 | if (max_pix_clock >= pix_clock) { |
272 | *dp_lanes = lane_num; | 273 | *dp_lanes = lane_num; |
273 | *dp_rate = link_rates[i]; | 274 | *dp_rate = 270000; |
274 | return 0; | 275 | return 0; |
275 | } | 276 | } |
276 | } | 277 | } |
278 | } else { | ||
279 | for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) { | ||
280 | for (i = 0; i < ARRAY_SIZE(link_rates) && link_rates[i] <= max_link_rate; i++) { | ||
281 | max_pix_clock = (lane_num * link_rates[i] * 8) / bpp; | ||
282 | if (max_pix_clock >= pix_clock) { | ||
283 | *dp_lanes = lane_num; | ||
284 | *dp_rate = link_rates[i]; | ||
285 | return 0; | ||
286 | } | ||
287 | } | ||
288 | } | ||
277 | } | 289 | } |
278 | 290 | ||
279 | return -EINVAL; | 291 | return -EINVAL; |
diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c index 8b4731d4e10e..474ca02b0949 100644 --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include "ci_dpm.h" | 31 | #include "ci_dpm.h" |
32 | #include "gfx_v7_0.h" | 32 | #include "gfx_v7_0.h" |
33 | #include "atom.h" | 33 | #include "atom.h" |
34 | #include "amd_pcie.h" | ||
34 | #include <linux/seq_file.h> | 35 | #include <linux/seq_file.h> |
35 | 36 | ||
36 | #include "smu/smu_7_0_1_d.h" | 37 | #include "smu/smu_7_0_1_d.h" |
@@ -5835,18 +5836,16 @@ static int ci_dpm_init(struct amdgpu_device *adev) | |||
5835 | u8 frev, crev; | 5836 | u8 frev, crev; |
5836 | struct ci_power_info *pi; | 5837 | struct ci_power_info *pi; |
5837 | int ret; | 5838 | int ret; |
5838 | u32 mask; | ||
5839 | 5839 | ||
5840 | pi = kzalloc(sizeof(struct ci_power_info), GFP_KERNEL); | 5840 | pi = kzalloc(sizeof(struct ci_power_info), GFP_KERNEL); |
5841 | if (pi == NULL) | 5841 | if (pi == NULL) |
5842 | return -ENOMEM; | 5842 | return -ENOMEM; |
5843 | adev->pm.dpm.priv = pi; | 5843 | adev->pm.dpm.priv = pi; |
5844 | 5844 | ||
5845 | ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask); | 5845 | pi->sys_pcie_mask = |
5846 | if (ret) | 5846 | (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_MASK) >> |
5847 | pi->sys_pcie_mask = 0; | 5847 | CAIL_PCIE_LINK_SPEED_SUPPORT_SHIFT; |
5848 | else | 5848 | |
5849 | pi->sys_pcie_mask = mask; | ||
5850 | pi->force_pcie_gen = AMDGPU_PCIE_GEN_INVALID; | 5849 | pi->force_pcie_gen = AMDGPU_PCIE_GEN_INVALID; |
5851 | 5850 | ||
5852 | pi->pcie_gen_performance.max = AMDGPU_PCIE_GEN1; | 5851 | pi->pcie_gen_performance.max = AMDGPU_PCIE_GEN1; |
diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c index 6b1f0539ce9d..192ab13e9f05 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik.c +++ b/drivers/gpu/drm/amd/amdgpu/cik.c | |||
@@ -1462,6 +1462,9 @@ static void cik_program_aspm(struct amdgpu_device *adev) | |||
1462 | if (amdgpu_aspm == 0) | 1462 | if (amdgpu_aspm == 0) |
1463 | return; | 1463 | return; |
1464 | 1464 | ||
1465 | if (pci_is_root_bus(adev->pdev->bus)) | ||
1466 | return; | ||
1467 | |||
1465 | /* XXX double check APUs */ | 1468 | /* XXX double check APUs */ |
1466 | if (adev->flags & AMD_IS_APU) | 1469 | if (adev->flags & AMD_IS_APU) |
1467 | return; | 1470 | return; |
@@ -2032,72 +2035,72 @@ static int cik_common_early_init(void *handle) | |||
2032 | switch (adev->asic_type) { | 2035 | switch (adev->asic_type) { |
2033 | case CHIP_BONAIRE: | 2036 | case CHIP_BONAIRE: |
2034 | adev->cg_flags = | 2037 | adev->cg_flags = |
2035 | AMDGPU_CG_SUPPORT_GFX_MGCG | | 2038 | AMD_CG_SUPPORT_GFX_MGCG | |
2036 | AMDGPU_CG_SUPPORT_GFX_MGLS | | 2039 | AMD_CG_SUPPORT_GFX_MGLS | |
2037 | /*AMDGPU_CG_SUPPORT_GFX_CGCG |*/ | 2040 | /*AMD_CG_SUPPORT_GFX_CGCG |*/ |
2038 | AMDGPU_CG_SUPPORT_GFX_CGLS | | 2041 | AMD_CG_SUPPORT_GFX_CGLS | |
2039 | AMDGPU_CG_SUPPORT_GFX_CGTS | | 2042 | AMD_CG_SUPPORT_GFX_CGTS | |
2040 | AMDGPU_CG_SUPPORT_GFX_CGTS_LS | | 2043 | AMD_CG_SUPPORT_GFX_CGTS_LS | |
2041 | AMDGPU_CG_SUPPORT_GFX_CP_LS | | 2044 | AMD_CG_SUPPORT_GFX_CP_LS | |
2042 | AMDGPU_CG_SUPPORT_MC_LS | | 2045 | AMD_CG_SUPPORT_MC_LS | |
2043 | AMDGPU_CG_SUPPORT_MC_MGCG | | 2046 | AMD_CG_SUPPORT_MC_MGCG | |
2044 | AMDGPU_CG_SUPPORT_SDMA_MGCG | | 2047 | AMD_CG_SUPPORT_SDMA_MGCG | |
2045 | AMDGPU_CG_SUPPORT_SDMA_LS | | 2048 | AMD_CG_SUPPORT_SDMA_LS | |
2046 | AMDGPU_CG_SUPPORT_BIF_LS | | 2049 | AMD_CG_SUPPORT_BIF_LS | |
2047 | AMDGPU_CG_SUPPORT_VCE_MGCG | | 2050 | AMD_CG_SUPPORT_VCE_MGCG | |
2048 | AMDGPU_CG_SUPPORT_UVD_MGCG | | 2051 | AMD_CG_SUPPORT_UVD_MGCG | |
2049 | AMDGPU_CG_SUPPORT_HDP_LS | | 2052 | AMD_CG_SUPPORT_HDP_LS | |
2050 | AMDGPU_CG_SUPPORT_HDP_MGCG; | 2053 | AMD_CG_SUPPORT_HDP_MGCG; |
2051 | adev->pg_flags = 0; | 2054 | adev->pg_flags = 0; |
2052 | adev->external_rev_id = adev->rev_id + 0x14; | 2055 | adev->external_rev_id = adev->rev_id + 0x14; |
2053 | break; | 2056 | break; |
2054 | case CHIP_HAWAII: | 2057 | case CHIP_HAWAII: |
2055 | adev->cg_flags = | 2058 | adev->cg_flags = |
2056 | AMDGPU_CG_SUPPORT_GFX_MGCG | | 2059 | AMD_CG_SUPPORT_GFX_MGCG | |
2057 | AMDGPU_CG_SUPPORT_GFX_MGLS | | 2060 | AMD_CG_SUPPORT_GFX_MGLS | |
2058 | /*AMDGPU_CG_SUPPORT_GFX_CGCG |*/ | 2061 | /*AMD_CG_SUPPORT_GFX_CGCG |*/ |
2059 | AMDGPU_CG_SUPPORT_GFX_CGLS | | 2062 | AMD_CG_SUPPORT_GFX_CGLS | |
2060 | AMDGPU_CG_SUPPORT_GFX_CGTS | | 2063 | AMD_CG_SUPPORT_GFX_CGTS | |
2061 | AMDGPU_CG_SUPPORT_GFX_CP_LS | | 2064 | AMD_CG_SUPPORT_GFX_CP_LS | |
2062 | AMDGPU_CG_SUPPORT_MC_LS | | 2065 | AMD_CG_SUPPORT_MC_LS | |
2063 | AMDGPU_CG_SUPPORT_MC_MGCG | | 2066 | AMD_CG_SUPPORT_MC_MGCG | |
2064 | AMDGPU_CG_SUPPORT_SDMA_MGCG | | 2067 | AMD_CG_SUPPORT_SDMA_MGCG | |
2065 | AMDGPU_CG_SUPPORT_SDMA_LS | | 2068 | AMD_CG_SUPPORT_SDMA_LS | |
2066 | AMDGPU_CG_SUPPORT_BIF_LS | | 2069 | AMD_CG_SUPPORT_BIF_LS | |
2067 | AMDGPU_CG_SUPPORT_VCE_MGCG | | 2070 | AMD_CG_SUPPORT_VCE_MGCG | |
2068 | AMDGPU_CG_SUPPORT_UVD_MGCG | | 2071 | AMD_CG_SUPPORT_UVD_MGCG | |
2069 | AMDGPU_CG_SUPPORT_HDP_LS | | 2072 | AMD_CG_SUPPORT_HDP_LS | |
2070 | AMDGPU_CG_SUPPORT_HDP_MGCG; | 2073 | AMD_CG_SUPPORT_HDP_MGCG; |
2071 | adev->pg_flags = 0; | 2074 | adev->pg_flags = 0; |
2072 | adev->external_rev_id = 0x28; | 2075 | adev->external_rev_id = 0x28; |
2073 | break; | 2076 | break; |
2074 | case CHIP_KAVERI: | 2077 | case CHIP_KAVERI: |
2075 | adev->cg_flags = | 2078 | adev->cg_flags = |
2076 | AMDGPU_CG_SUPPORT_GFX_MGCG | | 2079 | AMD_CG_SUPPORT_GFX_MGCG | |
2077 | AMDGPU_CG_SUPPORT_GFX_MGLS | | 2080 | AMD_CG_SUPPORT_GFX_MGLS | |
2078 | /*AMDGPU_CG_SUPPORT_GFX_CGCG |*/ | 2081 | /*AMD_CG_SUPPORT_GFX_CGCG |*/ |
2079 | AMDGPU_CG_SUPPORT_GFX_CGLS | | 2082 | AMD_CG_SUPPORT_GFX_CGLS | |
2080 | AMDGPU_CG_SUPPORT_GFX_CGTS | | 2083 | AMD_CG_SUPPORT_GFX_CGTS | |
2081 | AMDGPU_CG_SUPPORT_GFX_CGTS_LS | | 2084 | AMD_CG_SUPPORT_GFX_CGTS_LS | |
2082 | AMDGPU_CG_SUPPORT_GFX_CP_LS | | 2085 | AMD_CG_SUPPORT_GFX_CP_LS | |
2083 | AMDGPU_CG_SUPPORT_SDMA_MGCG | | 2086 | AMD_CG_SUPPORT_SDMA_MGCG | |
2084 | AMDGPU_CG_SUPPORT_SDMA_LS | | 2087 | AMD_CG_SUPPORT_SDMA_LS | |
2085 | AMDGPU_CG_SUPPORT_BIF_LS | | 2088 | AMD_CG_SUPPORT_BIF_LS | |
2086 | AMDGPU_CG_SUPPORT_VCE_MGCG | | 2089 | AMD_CG_SUPPORT_VCE_MGCG | |
2087 | AMDGPU_CG_SUPPORT_UVD_MGCG | | 2090 | AMD_CG_SUPPORT_UVD_MGCG | |
2088 | AMDGPU_CG_SUPPORT_HDP_LS | | 2091 | AMD_CG_SUPPORT_HDP_LS | |
2089 | AMDGPU_CG_SUPPORT_HDP_MGCG; | 2092 | AMD_CG_SUPPORT_HDP_MGCG; |
2090 | adev->pg_flags = | 2093 | adev->pg_flags = |
2091 | /*AMDGPU_PG_SUPPORT_GFX_PG | | 2094 | /*AMD_PG_SUPPORT_GFX_PG | |
2092 | AMDGPU_PG_SUPPORT_GFX_SMG | | 2095 | AMD_PG_SUPPORT_GFX_SMG | |
2093 | AMDGPU_PG_SUPPORT_GFX_DMG |*/ | 2096 | AMD_PG_SUPPORT_GFX_DMG |*/ |
2094 | AMDGPU_PG_SUPPORT_UVD | | 2097 | AMD_PG_SUPPORT_UVD | |
2095 | /*AMDGPU_PG_SUPPORT_VCE | | 2098 | /*AMD_PG_SUPPORT_VCE | |
2096 | AMDGPU_PG_SUPPORT_CP | | 2099 | AMD_PG_SUPPORT_CP | |
2097 | AMDGPU_PG_SUPPORT_GDS | | 2100 | AMD_PG_SUPPORT_GDS | |
2098 | AMDGPU_PG_SUPPORT_RLC_SMU_HS | | 2101 | AMD_PG_SUPPORT_RLC_SMU_HS | |
2099 | AMDGPU_PG_SUPPORT_ACP | | 2102 | AMD_PG_SUPPORT_ACP | |
2100 | AMDGPU_PG_SUPPORT_SAMU |*/ | 2103 | AMD_PG_SUPPORT_SAMU |*/ |
2101 | 0; | 2104 | 0; |
2102 | if (adev->pdev->device == 0x1312 || | 2105 | if (adev->pdev->device == 0x1312 || |
2103 | adev->pdev->device == 0x1316 || | 2106 | adev->pdev->device == 0x1316 || |
@@ -2109,29 +2112,29 @@ static int cik_common_early_init(void *handle) | |||
2109 | case CHIP_KABINI: | 2112 | case CHIP_KABINI: |
2110 | case CHIP_MULLINS: | 2113 | case CHIP_MULLINS: |
2111 | adev->cg_flags = | 2114 | adev->cg_flags = |
2112 | AMDGPU_CG_SUPPORT_GFX_MGCG | | 2115 | AMD_CG_SUPPORT_GFX_MGCG | |
2113 | AMDGPU_CG_SUPPORT_GFX_MGLS | | 2116 | AMD_CG_SUPPORT_GFX_MGLS | |
2114 | /*AMDGPU_CG_SUPPORT_GFX_CGCG |*/ | 2117 | /*AMD_CG_SUPPORT_GFX_CGCG |*/ |
2115 | AMDGPU_CG_SUPPORT_GFX_CGLS | | 2118 | AMD_CG_SUPPORT_GFX_CGLS | |
2116 | AMDGPU_CG_SUPPORT_GFX_CGTS | | 2119 | AMD_CG_SUPPORT_GFX_CGTS | |
2117 | AMDGPU_CG_SUPPORT_GFX_CGTS_LS | | 2120 | AMD_CG_SUPPORT_GFX_CGTS_LS | |
2118 | AMDGPU_CG_SUPPORT_GFX_CP_LS | | 2121 | AMD_CG_SUPPORT_GFX_CP_LS | |
2119 | AMDGPU_CG_SUPPORT_SDMA_MGCG | | 2122 | AMD_CG_SUPPORT_SDMA_MGCG | |
2120 | AMDGPU_CG_SUPPORT_SDMA_LS | | 2123 | AMD_CG_SUPPORT_SDMA_LS | |
2121 | AMDGPU_CG_SUPPORT_BIF_LS | | 2124 | AMD_CG_SUPPORT_BIF_LS | |
2122 | AMDGPU_CG_SUPPORT_VCE_MGCG | | 2125 | AMD_CG_SUPPORT_VCE_MGCG | |
2123 | AMDGPU_CG_SUPPORT_UVD_MGCG | | 2126 | AMD_CG_SUPPORT_UVD_MGCG | |
2124 | AMDGPU_CG_SUPPORT_HDP_LS | | 2127 | AMD_CG_SUPPORT_HDP_LS | |
2125 | AMDGPU_CG_SUPPORT_HDP_MGCG; | 2128 | AMD_CG_SUPPORT_HDP_MGCG; |
2126 | adev->pg_flags = | 2129 | adev->pg_flags = |
2127 | /*AMDGPU_PG_SUPPORT_GFX_PG | | 2130 | /*AMD_PG_SUPPORT_GFX_PG | |
2128 | AMDGPU_PG_SUPPORT_GFX_SMG | */ | 2131 | AMD_PG_SUPPORT_GFX_SMG | */ |
2129 | AMDGPU_PG_SUPPORT_UVD | | 2132 | AMD_PG_SUPPORT_UVD | |
2130 | /*AMDGPU_PG_SUPPORT_VCE | | 2133 | /*AMD_PG_SUPPORT_VCE | |
2131 | AMDGPU_PG_SUPPORT_CP | | 2134 | AMD_PG_SUPPORT_CP | |
2132 | AMDGPU_PG_SUPPORT_GDS | | 2135 | AMD_PG_SUPPORT_GDS | |
2133 | AMDGPU_PG_SUPPORT_RLC_SMU_HS | | 2136 | AMD_PG_SUPPORT_RLC_SMU_HS | |
2134 | AMDGPU_PG_SUPPORT_SAMU |*/ | 2137 | AMD_PG_SUPPORT_SAMU |*/ |
2135 | 0; | 2138 | 0; |
2136 | if (adev->asic_type == CHIP_KABINI) { | 2139 | if (adev->asic_type == CHIP_KABINI) { |
2137 | if (adev->rev_id == 0) | 2140 | if (adev->rev_id == 0) |
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c index e4e4b2ac77b7..266db15daf2c 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c | |||
@@ -856,7 +856,7 @@ static void cik_enable_sdma_mgcg(struct amdgpu_device *adev, | |||
856 | { | 856 | { |
857 | u32 orig, data; | 857 | u32 orig, data; |
858 | 858 | ||
859 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_SDMA_MGCG)) { | 859 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_SDMA_MGCG)) { |
860 | WREG32(mmSDMA0_CLK_CTRL + SDMA0_REGISTER_OFFSET, 0x00000100); | 860 | WREG32(mmSDMA0_CLK_CTRL + SDMA0_REGISTER_OFFSET, 0x00000100); |
861 | WREG32(mmSDMA0_CLK_CTRL + SDMA1_REGISTER_OFFSET, 0x00000100); | 861 | WREG32(mmSDMA0_CLK_CTRL + SDMA1_REGISTER_OFFSET, 0x00000100); |
862 | } else { | 862 | } else { |
@@ -877,7 +877,7 @@ static void cik_enable_sdma_mgls(struct amdgpu_device *adev, | |||
877 | { | 877 | { |
878 | u32 orig, data; | 878 | u32 orig, data; |
879 | 879 | ||
880 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_SDMA_LS)) { | 880 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_SDMA_LS)) { |
881 | orig = data = RREG32(mmSDMA0_POWER_CNTL + SDMA0_REGISTER_OFFSET); | 881 | orig = data = RREG32(mmSDMA0_POWER_CNTL + SDMA0_REGISTER_OFFSET); |
882 | data |= 0x100; | 882 | data |= 0x100; |
883 | if (orig != data) | 883 | if (orig != data) |
diff --git a/drivers/gpu/drm/amd/amdgpu/cz_dpm.c b/drivers/gpu/drm/amd/amdgpu/cz_dpm.c index 4dd17f2dd905..e7ef2261ff4a 100644 --- a/drivers/gpu/drm/amd/amdgpu/cz_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/cz_dpm.c | |||
@@ -445,13 +445,13 @@ static int cz_dpm_init(struct amdgpu_device *adev) | |||
445 | pi->gfx_pg_threshold = 500; | 445 | pi->gfx_pg_threshold = 500; |
446 | pi->caps_fps = true; | 446 | pi->caps_fps = true; |
447 | /* uvd */ | 447 | /* uvd */ |
448 | pi->caps_uvd_pg = (adev->pg_flags & AMDGPU_PG_SUPPORT_UVD) ? true : false; | 448 | pi->caps_uvd_pg = (adev->pg_flags & AMD_PG_SUPPORT_UVD) ? true : false; |
449 | pi->caps_uvd_dpm = true; | 449 | pi->caps_uvd_dpm = true; |
450 | /* vce */ | 450 | /* vce */ |
451 | pi->caps_vce_pg = (adev->pg_flags & AMDGPU_PG_SUPPORT_VCE) ? true : false; | 451 | pi->caps_vce_pg = (adev->pg_flags & AMD_PG_SUPPORT_VCE) ? true : false; |
452 | pi->caps_vce_dpm = true; | 452 | pi->caps_vce_dpm = true; |
453 | /* acp */ | 453 | /* acp */ |
454 | pi->caps_acp_pg = (adev->pg_flags & AMDGPU_PG_SUPPORT_ACP) ? true : false; | 454 | pi->caps_acp_pg = (adev->pg_flags & AMD_PG_SUPPORT_ACP) ? true : false; |
455 | pi->caps_acp_dpm = true; | 455 | pi->caps_acp_dpm = true; |
456 | 456 | ||
457 | pi->caps_stable_power_state = false; | 457 | pi->caps_stable_power_state = false; |
@@ -2202,8 +2202,7 @@ static void cz_dpm_powergate_vce(struct amdgpu_device *adev, bool gate) | |||
2202 | AMD_PG_STATE_GATE); | 2202 | AMD_PG_STATE_GATE); |
2203 | 2203 | ||
2204 | cz_enable_vce_dpm(adev, false); | 2204 | cz_enable_vce_dpm(adev, false); |
2205 | /* TODO: to figure out why vce can't be poweroff. */ | 2205 | cz_send_msg_to_smc(adev, PPSMC_MSG_VCEPowerOFF); |
2206 | /* cz_send_msg_to_smc(adev, PPSMC_MSG_VCEPowerOFF); */ | ||
2207 | pi->vce_power_gated = true; | 2206 | pi->vce_power_gated = true; |
2208 | } else { | 2207 | } else { |
2209 | cz_send_msg_to_smc(adev, PPSMC_MSG_VCEPowerON); | 2208 | cz_send_msg_to_smc(adev, PPSMC_MSG_VCEPowerON); |
@@ -2226,10 +2225,8 @@ static void cz_dpm_powergate_vce(struct amdgpu_device *adev, bool gate) | |||
2226 | } | 2225 | } |
2227 | } else { /*pi->caps_vce_pg*/ | 2226 | } else { /*pi->caps_vce_pg*/ |
2228 | cz_update_vce_dpm(adev); | 2227 | cz_update_vce_dpm(adev); |
2229 | cz_enable_vce_dpm(adev, true); | 2228 | cz_enable_vce_dpm(adev, !gate); |
2230 | } | 2229 | } |
2231 | |||
2232 | return; | ||
2233 | } | 2230 | } |
2234 | 2231 | ||
2235 | const struct amd_ip_funcs cz_dpm_ip_funcs = { | 2232 | const struct amd_ip_funcs cz_dpm_ip_funcs = { |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index 8fb7ebf3be3e..4411b94775db 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | |||
@@ -3041,6 +3041,19 @@ static void gfx_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring, | |||
3041 | unsigned vm_id, uint64_t pd_addr) | 3041 | unsigned vm_id, uint64_t pd_addr) |
3042 | { | 3042 | { |
3043 | int usepfp = (ring->type == AMDGPU_RING_TYPE_GFX); | 3043 | int usepfp = (ring->type == AMDGPU_RING_TYPE_GFX); |
3044 | uint32_t seq = ring->fence_drv.sync_seq; | ||
3045 | uint64_t addr = ring->fence_drv.gpu_addr; | ||
3046 | |||
3047 | amdgpu_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5)); | ||
3048 | amdgpu_ring_write(ring, (WAIT_REG_MEM_MEM_SPACE(1) | /* memory */ | ||
3049 | WAIT_REG_MEM_FUNCTION(3) | /* equal */ | ||
3050 | WAIT_REG_MEM_ENGINE(usepfp))); /* pfp or me */ | ||
3051 | amdgpu_ring_write(ring, addr & 0xfffffffc); | ||
3052 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); | ||
3053 | amdgpu_ring_write(ring, seq); | ||
3054 | amdgpu_ring_write(ring, 0xffffffff); | ||
3055 | amdgpu_ring_write(ring, 4); /* poll interval */ | ||
3056 | |||
3044 | if (usepfp) { | 3057 | if (usepfp) { |
3045 | /* synce CE with ME to prevent CE fetch CEIB before context switch done */ | 3058 | /* synce CE with ME to prevent CE fetch CEIB before context switch done */ |
3046 | amdgpu_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0)); | 3059 | amdgpu_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0)); |
@@ -3522,7 +3535,7 @@ static void gfx_v7_0_enable_cgcg(struct amdgpu_device *adev, bool enable) | |||
3522 | 3535 | ||
3523 | orig = data = RREG32(mmRLC_CGCG_CGLS_CTRL); | 3536 | orig = data = RREG32(mmRLC_CGCG_CGLS_CTRL); |
3524 | 3537 | ||
3525 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_GFX_CGCG)) { | 3538 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_GFX_CGCG)) { |
3526 | gfx_v7_0_enable_gui_idle_interrupt(adev, true); | 3539 | gfx_v7_0_enable_gui_idle_interrupt(adev, true); |
3527 | 3540 | ||
3528 | tmp = gfx_v7_0_halt_rlc(adev); | 3541 | tmp = gfx_v7_0_halt_rlc(adev); |
@@ -3560,9 +3573,9 @@ static void gfx_v7_0_enable_mgcg(struct amdgpu_device *adev, bool enable) | |||
3560 | { | 3573 | { |
3561 | u32 data, orig, tmp = 0; | 3574 | u32 data, orig, tmp = 0; |
3562 | 3575 | ||
3563 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_GFX_MGCG)) { | 3576 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_GFX_MGCG)) { |
3564 | if (adev->cg_flags & AMDGPU_CG_SUPPORT_GFX_MGLS) { | 3577 | if (adev->cg_flags & AMD_CG_SUPPORT_GFX_MGLS) { |
3565 | if (adev->cg_flags & AMDGPU_CG_SUPPORT_GFX_CP_LS) { | 3578 | if (adev->cg_flags & AMD_CG_SUPPORT_GFX_CP_LS) { |
3566 | orig = data = RREG32(mmCP_MEM_SLP_CNTL); | 3579 | orig = data = RREG32(mmCP_MEM_SLP_CNTL); |
3567 | data |= CP_MEM_SLP_CNTL__CP_MEM_LS_EN_MASK; | 3580 | data |= CP_MEM_SLP_CNTL__CP_MEM_LS_EN_MASK; |
3568 | if (orig != data) | 3581 | if (orig != data) |
@@ -3589,14 +3602,14 @@ static void gfx_v7_0_enable_mgcg(struct amdgpu_device *adev, bool enable) | |||
3589 | 3602 | ||
3590 | gfx_v7_0_update_rlc(adev, tmp); | 3603 | gfx_v7_0_update_rlc(adev, tmp); |
3591 | 3604 | ||
3592 | if (adev->cg_flags & AMDGPU_CG_SUPPORT_GFX_CGTS) { | 3605 | if (adev->cg_flags & AMD_CG_SUPPORT_GFX_CGTS) { |
3593 | orig = data = RREG32(mmCGTS_SM_CTRL_REG); | 3606 | orig = data = RREG32(mmCGTS_SM_CTRL_REG); |
3594 | data &= ~CGTS_SM_CTRL_REG__SM_MODE_MASK; | 3607 | data &= ~CGTS_SM_CTRL_REG__SM_MODE_MASK; |
3595 | data |= (0x2 << CGTS_SM_CTRL_REG__SM_MODE__SHIFT); | 3608 | data |= (0x2 << CGTS_SM_CTRL_REG__SM_MODE__SHIFT); |
3596 | data |= CGTS_SM_CTRL_REG__SM_MODE_ENABLE_MASK; | 3609 | data |= CGTS_SM_CTRL_REG__SM_MODE_ENABLE_MASK; |
3597 | data &= ~CGTS_SM_CTRL_REG__OVERRIDE_MASK; | 3610 | data &= ~CGTS_SM_CTRL_REG__OVERRIDE_MASK; |
3598 | if ((adev->cg_flags & AMDGPU_CG_SUPPORT_GFX_MGLS) && | 3611 | if ((adev->cg_flags & AMD_CG_SUPPORT_GFX_MGLS) && |
3599 | (adev->cg_flags & AMDGPU_CG_SUPPORT_GFX_CGTS_LS)) | 3612 | (adev->cg_flags & AMD_CG_SUPPORT_GFX_CGTS_LS)) |
3600 | data &= ~CGTS_SM_CTRL_REG__LS_OVERRIDE_MASK; | 3613 | data &= ~CGTS_SM_CTRL_REG__LS_OVERRIDE_MASK; |
3601 | data &= ~CGTS_SM_CTRL_REG__ON_MONITOR_ADD_MASK; | 3614 | data &= ~CGTS_SM_CTRL_REG__ON_MONITOR_ADD_MASK; |
3602 | data |= CGTS_SM_CTRL_REG__ON_MONITOR_ADD_EN_MASK; | 3615 | data |= CGTS_SM_CTRL_REG__ON_MONITOR_ADD_EN_MASK; |
@@ -3662,7 +3675,7 @@ static void gfx_v7_0_enable_sclk_slowdown_on_pu(struct amdgpu_device *adev, | |||
3662 | u32 data, orig; | 3675 | u32 data, orig; |
3663 | 3676 | ||
3664 | orig = data = RREG32(mmRLC_PG_CNTL); | 3677 | orig = data = RREG32(mmRLC_PG_CNTL); |
3665 | if (enable && (adev->pg_flags & AMDGPU_PG_SUPPORT_RLC_SMU_HS)) | 3678 | if (enable && (adev->pg_flags & AMD_PG_SUPPORT_RLC_SMU_HS)) |
3666 | data |= RLC_PG_CNTL__SMU_CLK_SLOWDOWN_ON_PU_ENABLE_MASK; | 3679 | data |= RLC_PG_CNTL__SMU_CLK_SLOWDOWN_ON_PU_ENABLE_MASK; |
3667 | else | 3680 | else |
3668 | data &= ~RLC_PG_CNTL__SMU_CLK_SLOWDOWN_ON_PU_ENABLE_MASK; | 3681 | data &= ~RLC_PG_CNTL__SMU_CLK_SLOWDOWN_ON_PU_ENABLE_MASK; |
@@ -3676,7 +3689,7 @@ static void gfx_v7_0_enable_sclk_slowdown_on_pd(struct amdgpu_device *adev, | |||
3676 | u32 data, orig; | 3689 | u32 data, orig; |
3677 | 3690 | ||
3678 | orig = data = RREG32(mmRLC_PG_CNTL); | 3691 | orig = data = RREG32(mmRLC_PG_CNTL); |
3679 | if (enable && (adev->pg_flags & AMDGPU_PG_SUPPORT_RLC_SMU_HS)) | 3692 | if (enable && (adev->pg_flags & AMD_PG_SUPPORT_RLC_SMU_HS)) |
3680 | data |= RLC_PG_CNTL__SMU_CLK_SLOWDOWN_ON_PD_ENABLE_MASK; | 3693 | data |= RLC_PG_CNTL__SMU_CLK_SLOWDOWN_ON_PD_ENABLE_MASK; |
3681 | else | 3694 | else |
3682 | data &= ~RLC_PG_CNTL__SMU_CLK_SLOWDOWN_ON_PD_ENABLE_MASK; | 3695 | data &= ~RLC_PG_CNTL__SMU_CLK_SLOWDOWN_ON_PD_ENABLE_MASK; |
@@ -3689,7 +3702,7 @@ static void gfx_v7_0_enable_cp_pg(struct amdgpu_device *adev, bool enable) | |||
3689 | u32 data, orig; | 3702 | u32 data, orig; |
3690 | 3703 | ||
3691 | orig = data = RREG32(mmRLC_PG_CNTL); | 3704 | orig = data = RREG32(mmRLC_PG_CNTL); |
3692 | if (enable && (adev->pg_flags & AMDGPU_PG_SUPPORT_CP)) | 3705 | if (enable && (adev->pg_flags & AMD_PG_SUPPORT_CP)) |
3693 | data &= ~0x8000; | 3706 | data &= ~0x8000; |
3694 | else | 3707 | else |
3695 | data |= 0x8000; | 3708 | data |= 0x8000; |
@@ -3702,7 +3715,7 @@ static void gfx_v7_0_enable_gds_pg(struct amdgpu_device *adev, bool enable) | |||
3702 | u32 data, orig; | 3715 | u32 data, orig; |
3703 | 3716 | ||
3704 | orig = data = RREG32(mmRLC_PG_CNTL); | 3717 | orig = data = RREG32(mmRLC_PG_CNTL); |
3705 | if (enable && (adev->pg_flags & AMDGPU_PG_SUPPORT_GDS)) | 3718 | if (enable && (adev->pg_flags & AMD_PG_SUPPORT_GDS)) |
3706 | data &= ~0x2000; | 3719 | data &= ~0x2000; |
3707 | else | 3720 | else |
3708 | data |= 0x2000; | 3721 | data |= 0x2000; |
@@ -3783,7 +3796,7 @@ static void gfx_v7_0_enable_gfx_cgpg(struct amdgpu_device *adev, | |||
3783 | { | 3796 | { |
3784 | u32 data, orig; | 3797 | u32 data, orig; |
3785 | 3798 | ||
3786 | if (enable && (adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_PG)) { | 3799 | if (enable && (adev->pg_flags & AMD_PG_SUPPORT_GFX_PG)) { |
3787 | orig = data = RREG32(mmRLC_PG_CNTL); | 3800 | orig = data = RREG32(mmRLC_PG_CNTL); |
3788 | data |= RLC_PG_CNTL__GFX_POWER_GATING_ENABLE_MASK; | 3801 | data |= RLC_PG_CNTL__GFX_POWER_GATING_ENABLE_MASK; |
3789 | if (orig != data) | 3802 | if (orig != data) |
@@ -3846,7 +3859,7 @@ static void gfx_v7_0_enable_gfx_static_mgpg(struct amdgpu_device *adev, | |||
3846 | u32 data, orig; | 3859 | u32 data, orig; |
3847 | 3860 | ||
3848 | orig = data = RREG32(mmRLC_PG_CNTL); | 3861 | orig = data = RREG32(mmRLC_PG_CNTL); |
3849 | if (enable && (adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_SMG)) | 3862 | if (enable && (adev->pg_flags & AMD_PG_SUPPORT_GFX_SMG)) |
3850 | data |= RLC_PG_CNTL__STATIC_PER_CU_PG_ENABLE_MASK; | 3863 | data |= RLC_PG_CNTL__STATIC_PER_CU_PG_ENABLE_MASK; |
3851 | else | 3864 | else |
3852 | data &= ~RLC_PG_CNTL__STATIC_PER_CU_PG_ENABLE_MASK; | 3865 | data &= ~RLC_PG_CNTL__STATIC_PER_CU_PG_ENABLE_MASK; |
@@ -3860,7 +3873,7 @@ static void gfx_v7_0_enable_gfx_dynamic_mgpg(struct amdgpu_device *adev, | |||
3860 | u32 data, orig; | 3873 | u32 data, orig; |
3861 | 3874 | ||
3862 | orig = data = RREG32(mmRLC_PG_CNTL); | 3875 | orig = data = RREG32(mmRLC_PG_CNTL); |
3863 | if (enable && (adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_DMG)) | 3876 | if (enable && (adev->pg_flags & AMD_PG_SUPPORT_GFX_DMG)) |
3864 | data |= RLC_PG_CNTL__DYN_PER_CU_PG_ENABLE_MASK; | 3877 | data |= RLC_PG_CNTL__DYN_PER_CU_PG_ENABLE_MASK; |
3865 | else | 3878 | else |
3866 | data &= ~RLC_PG_CNTL__DYN_PER_CU_PG_ENABLE_MASK; | 3879 | data &= ~RLC_PG_CNTL__DYN_PER_CU_PG_ENABLE_MASK; |
@@ -4027,15 +4040,15 @@ static void gfx_v7_0_get_csb_buffer(struct amdgpu_device *adev, | |||
4027 | 4040 | ||
4028 | static void gfx_v7_0_init_pg(struct amdgpu_device *adev) | 4041 | static void gfx_v7_0_init_pg(struct amdgpu_device *adev) |
4029 | { | 4042 | { |
4030 | if (adev->pg_flags & (AMDGPU_PG_SUPPORT_GFX_PG | | 4043 | if (adev->pg_flags & (AMD_PG_SUPPORT_GFX_PG | |
4031 | AMDGPU_PG_SUPPORT_GFX_SMG | | 4044 | AMD_PG_SUPPORT_GFX_SMG | |
4032 | AMDGPU_PG_SUPPORT_GFX_DMG | | 4045 | AMD_PG_SUPPORT_GFX_DMG | |
4033 | AMDGPU_PG_SUPPORT_CP | | 4046 | AMD_PG_SUPPORT_CP | |
4034 | AMDGPU_PG_SUPPORT_GDS | | 4047 | AMD_PG_SUPPORT_GDS | |
4035 | AMDGPU_PG_SUPPORT_RLC_SMU_HS)) { | 4048 | AMD_PG_SUPPORT_RLC_SMU_HS)) { |
4036 | gfx_v7_0_enable_sclk_slowdown_on_pu(adev, true); | 4049 | gfx_v7_0_enable_sclk_slowdown_on_pu(adev, true); |
4037 | gfx_v7_0_enable_sclk_slowdown_on_pd(adev, true); | 4050 | gfx_v7_0_enable_sclk_slowdown_on_pd(adev, true); |
4038 | if (adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_PG) { | 4051 | if (adev->pg_flags & AMD_PG_SUPPORT_GFX_PG) { |
4039 | gfx_v7_0_init_gfx_cgpg(adev); | 4052 | gfx_v7_0_init_gfx_cgpg(adev); |
4040 | gfx_v7_0_enable_cp_pg(adev, true); | 4053 | gfx_v7_0_enable_cp_pg(adev, true); |
4041 | gfx_v7_0_enable_gds_pg(adev, true); | 4054 | gfx_v7_0_enable_gds_pg(adev, true); |
@@ -4047,14 +4060,14 @@ static void gfx_v7_0_init_pg(struct amdgpu_device *adev) | |||
4047 | 4060 | ||
4048 | static void gfx_v7_0_fini_pg(struct amdgpu_device *adev) | 4061 | static void gfx_v7_0_fini_pg(struct amdgpu_device *adev) |
4049 | { | 4062 | { |
4050 | if (adev->pg_flags & (AMDGPU_PG_SUPPORT_GFX_PG | | 4063 | if (adev->pg_flags & (AMD_PG_SUPPORT_GFX_PG | |
4051 | AMDGPU_PG_SUPPORT_GFX_SMG | | 4064 | AMD_PG_SUPPORT_GFX_SMG | |
4052 | AMDGPU_PG_SUPPORT_GFX_DMG | | 4065 | AMD_PG_SUPPORT_GFX_DMG | |
4053 | AMDGPU_PG_SUPPORT_CP | | 4066 | AMD_PG_SUPPORT_CP | |
4054 | AMDGPU_PG_SUPPORT_GDS | | 4067 | AMD_PG_SUPPORT_GDS | |
4055 | AMDGPU_PG_SUPPORT_RLC_SMU_HS)) { | 4068 | AMD_PG_SUPPORT_RLC_SMU_HS)) { |
4056 | gfx_v7_0_update_gfx_pg(adev, false); | 4069 | gfx_v7_0_update_gfx_pg(adev, false); |
4057 | if (adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_PG) { | 4070 | if (adev->pg_flags & AMD_PG_SUPPORT_GFX_PG) { |
4058 | gfx_v7_0_enable_cp_pg(adev, false); | 4071 | gfx_v7_0_enable_cp_pg(adev, false); |
4059 | gfx_v7_0_enable_gds_pg(adev, false); | 4072 | gfx_v7_0_enable_gds_pg(adev, false); |
4060 | } | 4073 | } |
@@ -5089,14 +5102,14 @@ static int gfx_v7_0_set_powergating_state(void *handle, | |||
5089 | if (state == AMD_PG_STATE_GATE) | 5102 | if (state == AMD_PG_STATE_GATE) |
5090 | gate = true; | 5103 | gate = true; |
5091 | 5104 | ||
5092 | if (adev->pg_flags & (AMDGPU_PG_SUPPORT_GFX_PG | | 5105 | if (adev->pg_flags & (AMD_PG_SUPPORT_GFX_PG | |
5093 | AMDGPU_PG_SUPPORT_GFX_SMG | | 5106 | AMD_PG_SUPPORT_GFX_SMG | |
5094 | AMDGPU_PG_SUPPORT_GFX_DMG | | 5107 | AMD_PG_SUPPORT_GFX_DMG | |
5095 | AMDGPU_PG_SUPPORT_CP | | 5108 | AMD_PG_SUPPORT_CP | |
5096 | AMDGPU_PG_SUPPORT_GDS | | 5109 | AMD_PG_SUPPORT_GDS | |
5097 | AMDGPU_PG_SUPPORT_RLC_SMU_HS)) { | 5110 | AMD_PG_SUPPORT_RLC_SMU_HS)) { |
5098 | gfx_v7_0_update_gfx_pg(adev, gate); | 5111 | gfx_v7_0_update_gfx_pg(adev, gate); |
5099 | if (adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_PG) { | 5112 | if (adev->pg_flags & AMD_PG_SUPPORT_GFX_PG) { |
5100 | gfx_v7_0_enable_cp_pg(adev, gate); | 5113 | gfx_v7_0_enable_cp_pg(adev, gate); |
5101 | gfx_v7_0_enable_gds_pg(adev, gate); | 5114 | gfx_v7_0_enable_gds_pg(adev, gate); |
5102 | } | 5115 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index e37378fe1edc..1b85c001f860 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -4691,7 +4691,8 @@ static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring, | |||
4691 | 4691 | ||
4692 | amdgpu_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5)); | 4692 | amdgpu_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5)); |
4693 | amdgpu_ring_write(ring, (WAIT_REG_MEM_MEM_SPACE(1) | /* memory */ | 4693 | amdgpu_ring_write(ring, (WAIT_REG_MEM_MEM_SPACE(1) | /* memory */ |
4694 | WAIT_REG_MEM_FUNCTION(3))); /* equal */ | 4694 | WAIT_REG_MEM_FUNCTION(3) | /* equal */ |
4695 | WAIT_REG_MEM_ENGINE(usepfp))); /* pfp or me */ | ||
4695 | amdgpu_ring_write(ring, addr & 0xfffffffc); | 4696 | amdgpu_ring_write(ring, addr & 0xfffffffc); |
4696 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); | 4697 | amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); |
4697 | amdgpu_ring_write(ring, seq); | 4698 | amdgpu_ring_write(ring, seq); |
@@ -4877,7 +4878,7 @@ static int gfx_v8_0_set_priv_reg_fault_state(struct amdgpu_device *adev, | |||
4877 | case AMDGPU_IRQ_STATE_ENABLE: | 4878 | case AMDGPU_IRQ_STATE_ENABLE: |
4878 | cp_int_cntl = RREG32(mmCP_INT_CNTL_RING0); | 4879 | cp_int_cntl = RREG32(mmCP_INT_CNTL_RING0); |
4879 | cp_int_cntl = REG_SET_FIELD(cp_int_cntl, CP_INT_CNTL_RING0, | 4880 | cp_int_cntl = REG_SET_FIELD(cp_int_cntl, CP_INT_CNTL_RING0, |
4880 | PRIV_REG_INT_ENABLE, 0); | 4881 | PRIV_REG_INT_ENABLE, 1); |
4881 | WREG32(mmCP_INT_CNTL_RING0, cp_int_cntl); | 4882 | WREG32(mmCP_INT_CNTL_RING0, cp_int_cntl); |
4882 | break; | 4883 | break; |
4883 | default: | 4884 | default: |
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c index 68ee66b38e5c..711840a23bd3 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | |||
@@ -793,7 +793,7 @@ static void gmc_v7_0_enable_mc_ls(struct amdgpu_device *adev, | |||
793 | 793 | ||
794 | for (i = 0; i < ARRAY_SIZE(mc_cg_registers); i++) { | 794 | for (i = 0; i < ARRAY_SIZE(mc_cg_registers); i++) { |
795 | orig = data = RREG32(mc_cg_registers[i]); | 795 | orig = data = RREG32(mc_cg_registers[i]); |
796 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_MC_LS)) | 796 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_MC_LS)) |
797 | data |= mc_cg_ls_en[i]; | 797 | data |= mc_cg_ls_en[i]; |
798 | else | 798 | else |
799 | data &= ~mc_cg_ls_en[i]; | 799 | data &= ~mc_cg_ls_en[i]; |
@@ -810,7 +810,7 @@ static void gmc_v7_0_enable_mc_mgcg(struct amdgpu_device *adev, | |||
810 | 810 | ||
811 | for (i = 0; i < ARRAY_SIZE(mc_cg_registers); i++) { | 811 | for (i = 0; i < ARRAY_SIZE(mc_cg_registers); i++) { |
812 | orig = data = RREG32(mc_cg_registers[i]); | 812 | orig = data = RREG32(mc_cg_registers[i]); |
813 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_MC_MGCG)) | 813 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_MC_MGCG)) |
814 | data |= mc_cg_en[i]; | 814 | data |= mc_cg_en[i]; |
815 | else | 815 | else |
816 | data &= ~mc_cg_en[i]; | 816 | data &= ~mc_cg_en[i]; |
@@ -826,7 +826,7 @@ static void gmc_v7_0_enable_bif_mgls(struct amdgpu_device *adev, | |||
826 | 826 | ||
827 | orig = data = RREG32_PCIE(ixPCIE_CNTL2); | 827 | orig = data = RREG32_PCIE(ixPCIE_CNTL2); |
828 | 828 | ||
829 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_BIF_LS)) { | 829 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_BIF_LS)) { |
830 | data = REG_SET_FIELD(data, PCIE_CNTL2, SLV_MEM_LS_EN, 1); | 830 | data = REG_SET_FIELD(data, PCIE_CNTL2, SLV_MEM_LS_EN, 1); |
831 | data = REG_SET_FIELD(data, PCIE_CNTL2, MST_MEM_LS_EN, 1); | 831 | data = REG_SET_FIELD(data, PCIE_CNTL2, MST_MEM_LS_EN, 1); |
832 | data = REG_SET_FIELD(data, PCIE_CNTL2, REPLAY_MEM_LS_EN, 1); | 832 | data = REG_SET_FIELD(data, PCIE_CNTL2, REPLAY_MEM_LS_EN, 1); |
@@ -849,7 +849,7 @@ static void gmc_v7_0_enable_hdp_mgcg(struct amdgpu_device *adev, | |||
849 | 849 | ||
850 | orig = data = RREG32(mmHDP_HOST_PATH_CNTL); | 850 | orig = data = RREG32(mmHDP_HOST_PATH_CNTL); |
851 | 851 | ||
852 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_HDP_MGCG)) | 852 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_HDP_MGCG)) |
853 | data = REG_SET_FIELD(data, HDP_HOST_PATH_CNTL, CLOCK_GATING_DIS, 0); | 853 | data = REG_SET_FIELD(data, HDP_HOST_PATH_CNTL, CLOCK_GATING_DIS, 0); |
854 | else | 854 | else |
855 | data = REG_SET_FIELD(data, HDP_HOST_PATH_CNTL, CLOCK_GATING_DIS, 1); | 855 | data = REG_SET_FIELD(data, HDP_HOST_PATH_CNTL, CLOCK_GATING_DIS, 1); |
@@ -865,7 +865,7 @@ static void gmc_v7_0_enable_hdp_ls(struct amdgpu_device *adev, | |||
865 | 865 | ||
866 | orig = data = RREG32(mmHDP_MEM_POWER_LS); | 866 | orig = data = RREG32(mmHDP_MEM_POWER_LS); |
867 | 867 | ||
868 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_HDP_LS)) | 868 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_HDP_LS)) |
869 | data = REG_SET_FIELD(data, HDP_MEM_POWER_LS, LS_ENABLE, 1); | 869 | data = REG_SET_FIELD(data, HDP_MEM_POWER_LS, LS_ENABLE, 1); |
870 | else | 870 | else |
871 | data = REG_SET_FIELD(data, HDP_MEM_POWER_LS, LS_ENABLE, 0); | 871 | data = REG_SET_FIELD(data, HDP_MEM_POWER_LS, LS_ENABLE, 0); |
diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c index 7e9154c7f1db..654d76723bc3 100644 --- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c | |||
@@ -2859,11 +2859,11 @@ static int kv_dpm_init(struct amdgpu_device *adev) | |||
2859 | pi->voltage_drop_t = 0; | 2859 | pi->voltage_drop_t = 0; |
2860 | pi->caps_sclk_throttle_low_notification = false; | 2860 | pi->caps_sclk_throttle_low_notification = false; |
2861 | pi->caps_fps = false; /* true? */ | 2861 | pi->caps_fps = false; /* true? */ |
2862 | pi->caps_uvd_pg = (adev->pg_flags & AMDGPU_PG_SUPPORT_UVD) ? true : false; | 2862 | pi->caps_uvd_pg = (adev->pg_flags & AMD_PG_SUPPORT_UVD) ? true : false; |
2863 | pi->caps_uvd_dpm = true; | 2863 | pi->caps_uvd_dpm = true; |
2864 | pi->caps_vce_pg = (adev->pg_flags & AMDGPU_PG_SUPPORT_VCE) ? true : false; | 2864 | pi->caps_vce_pg = (adev->pg_flags & AMD_PG_SUPPORT_VCE) ? true : false; |
2865 | pi->caps_samu_pg = (adev->pg_flags & AMDGPU_PG_SUPPORT_SAMU) ? true : false; | 2865 | pi->caps_samu_pg = (adev->pg_flags & AMD_PG_SUPPORT_SAMU) ? true : false; |
2866 | pi->caps_acp_pg = (adev->pg_flags & AMDGPU_PG_SUPPORT_ACP) ? true : false; | 2866 | pi->caps_acp_pg = (adev->pg_flags & AMD_PG_SUPPORT_ACP) ? true : false; |
2867 | pi->caps_stable_p_state = false; | 2867 | pi->caps_stable_p_state = false; |
2868 | 2868 | ||
2869 | ret = kv_parse_sys_info_table(adev); | 2869 | ret = kv_parse_sys_info_table(adev); |
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c index 70ed73fa5156..c606ccb38d8b 100644 --- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c | |||
@@ -588,7 +588,7 @@ static void uvd_v4_2_enable_mgcg(struct amdgpu_device *adev, | |||
588 | { | 588 | { |
589 | u32 orig, data; | 589 | u32 orig, data; |
590 | 590 | ||
591 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_UVD_MGCG)) { | 591 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_UVD_MGCG)) { |
592 | data = RREG32_UVD_CTX(ixUVD_CGC_MEM_CTRL); | 592 | data = RREG32_UVD_CTX(ixUVD_CGC_MEM_CTRL); |
593 | data = 0xfff; | 593 | data = 0xfff; |
594 | WREG32_UVD_CTX(ixUVD_CGC_MEM_CTRL, data); | 594 | WREG32_UVD_CTX(ixUVD_CGC_MEM_CTRL, data); |
@@ -814,6 +814,9 @@ static int uvd_v4_2_set_clockgating_state(void *handle, | |||
814 | bool gate = false; | 814 | bool gate = false; |
815 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 815 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
816 | 816 | ||
817 | if (!(adev->cg_flags & AMD_CG_SUPPORT_UVD_MGCG)) | ||
818 | return 0; | ||
819 | |||
817 | if (state == AMD_CG_STATE_GATE) | 820 | if (state == AMD_CG_STATE_GATE) |
818 | gate = true; | 821 | gate = true; |
819 | 822 | ||
@@ -832,7 +835,10 @@ static int uvd_v4_2_set_powergating_state(void *handle, | |||
832 | * revisit this when there is a cleaner line between | 835 | * revisit this when there is a cleaner line between |
833 | * the smc and the hw blocks | 836 | * the smc and the hw blocks |
834 | */ | 837 | */ |
835 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 838 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
839 | |||
840 | if (!(adev->pg_flags & AMD_PG_SUPPORT_UVD)) | ||
841 | return 0; | ||
836 | 842 | ||
837 | if (state == AMD_PG_STATE_GATE) { | 843 | if (state == AMD_PG_STATE_GATE) { |
838 | uvd_v4_2_stop(adev); | 844 | uvd_v4_2_stop(adev); |
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c index 578ffb62fdb2..e3c852d9d79a 100644 --- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c | |||
@@ -757,6 +757,11 @@ static int uvd_v5_0_process_interrupt(struct amdgpu_device *adev, | |||
757 | static int uvd_v5_0_set_clockgating_state(void *handle, | 757 | static int uvd_v5_0_set_clockgating_state(void *handle, |
758 | enum amd_clockgating_state state) | 758 | enum amd_clockgating_state state) |
759 | { | 759 | { |
760 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | ||
761 | |||
762 | if (!(adev->cg_flags & AMD_CG_SUPPORT_UVD_MGCG)) | ||
763 | return 0; | ||
764 | |||
760 | return 0; | 765 | return 0; |
761 | } | 766 | } |
762 | 767 | ||
@@ -772,6 +777,9 @@ static int uvd_v5_0_set_powergating_state(void *handle, | |||
772 | */ | 777 | */ |
773 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 778 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
774 | 779 | ||
780 | if (!(adev->pg_flags & AMD_PG_SUPPORT_UVD)) | ||
781 | return 0; | ||
782 | |||
775 | if (state == AMD_PG_STATE_GATE) { | 783 | if (state == AMD_PG_STATE_GATE) { |
776 | uvd_v5_0_stop(adev); | 784 | uvd_v5_0_stop(adev); |
777 | return 0; | 785 | return 0; |
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c index d4da1f04378c..3375e614ac67 100644 --- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | |||
@@ -536,7 +536,7 @@ static int uvd_v6_0_start(struct amdgpu_device *adev) | |||
536 | uvd_v6_0_mc_resume(adev); | 536 | uvd_v6_0_mc_resume(adev); |
537 | 537 | ||
538 | /* Set dynamic clock gating in S/W control mode */ | 538 | /* Set dynamic clock gating in S/W control mode */ |
539 | if (adev->cg_flags & AMDGPU_CG_SUPPORT_UVD_MGCG) { | 539 | if (adev->cg_flags & AMD_CG_SUPPORT_UVD_MGCG) { |
540 | if (adev->flags & AMD_IS_APU) | 540 | if (adev->flags & AMD_IS_APU) |
541 | cz_set_uvd_clock_gating_branches(adev, false); | 541 | cz_set_uvd_clock_gating_branches(adev, false); |
542 | else | 542 | else |
@@ -983,7 +983,7 @@ static int uvd_v6_0_set_clockgating_state(void *handle, | |||
983 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 983 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
984 | bool enable = (state == AMD_CG_STATE_GATE) ? true : false; | 984 | bool enable = (state == AMD_CG_STATE_GATE) ? true : false; |
985 | 985 | ||
986 | if (!(adev->cg_flags & AMDGPU_CG_SUPPORT_UVD_MGCG)) | 986 | if (!(adev->cg_flags & AMD_CG_SUPPORT_UVD_MGCG)) |
987 | return 0; | 987 | return 0; |
988 | 988 | ||
989 | if (enable) { | 989 | if (enable) { |
@@ -1013,6 +1013,9 @@ static int uvd_v6_0_set_powergating_state(void *handle, | |||
1013 | */ | 1013 | */ |
1014 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 1014 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
1015 | 1015 | ||
1016 | if (!(adev->pg_flags & AMD_PG_SUPPORT_UVD)) | ||
1017 | return 0; | ||
1018 | |||
1016 | if (state == AMD_PG_STATE_GATE) { | 1019 | if (state == AMD_PG_STATE_GATE) { |
1017 | uvd_v6_0_stop(adev); | 1020 | uvd_v6_0_stop(adev); |
1018 | return 0; | 1021 | return 0; |
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c index 9c804f436974..c7e885bcfd41 100644 --- a/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c | |||
@@ -373,7 +373,7 @@ static void vce_v2_0_enable_mgcg(struct amdgpu_device *adev, bool enable) | |||
373 | { | 373 | { |
374 | bool sw_cg = false; | 374 | bool sw_cg = false; |
375 | 375 | ||
376 | if (enable && (adev->cg_flags & AMDGPU_CG_SUPPORT_VCE_MGCG)) { | 376 | if (enable && (adev->cg_flags & AMD_CG_SUPPORT_VCE_MGCG)) { |
377 | if (sw_cg) | 377 | if (sw_cg) |
378 | vce_v2_0_set_sw_cg(adev, true); | 378 | vce_v2_0_set_sw_cg(adev, true); |
379 | else | 379 | else |
@@ -608,6 +608,9 @@ static int vce_v2_0_set_powergating_state(void *handle, | |||
608 | */ | 608 | */ |
609 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 609 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
610 | 610 | ||
611 | if (!(adev->pg_flags & AMD_PG_SUPPORT_VCE)) | ||
612 | return 0; | ||
613 | |||
611 | if (state == AMD_PG_STATE_GATE) | 614 | if (state == AMD_PG_STATE_GATE) |
612 | /* XXX do we need a vce_v2_0_stop()? */ | 615 | /* XXX do we need a vce_v2_0_stop()? */ |
613 | return 0; | 616 | return 0; |
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c index 8f8d479061f8..ce468ee5da2a 100644 --- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c | |||
@@ -277,7 +277,7 @@ static int vce_v3_0_start(struct amdgpu_device *adev) | |||
277 | WREG32_P(mmVCE_STATUS, 0, ~1); | 277 | WREG32_P(mmVCE_STATUS, 0, ~1); |
278 | 278 | ||
279 | /* Set Clock-Gating off */ | 279 | /* Set Clock-Gating off */ |
280 | if (adev->cg_flags & AMDGPU_CG_SUPPORT_VCE_MGCG) | 280 | if (adev->cg_flags & AMD_CG_SUPPORT_VCE_MGCG) |
281 | vce_v3_0_set_vce_sw_clock_gating(adev, false); | 281 | vce_v3_0_set_vce_sw_clock_gating(adev, false); |
282 | 282 | ||
283 | if (r) { | 283 | if (r) { |
@@ -676,7 +676,7 @@ static int vce_v3_0_set_clockgating_state(void *handle, | |||
676 | bool enable = (state == AMD_CG_STATE_GATE) ? true : false; | 676 | bool enable = (state == AMD_CG_STATE_GATE) ? true : false; |
677 | int i; | 677 | int i; |
678 | 678 | ||
679 | if (!(adev->cg_flags & AMDGPU_CG_SUPPORT_VCE_MGCG)) | 679 | if (!(adev->cg_flags & AMD_CG_SUPPORT_VCE_MGCG)) |
680 | return 0; | 680 | return 0; |
681 | 681 | ||
682 | mutex_lock(&adev->grbm_idx_mutex); | 682 | mutex_lock(&adev->grbm_idx_mutex); |
@@ -728,6 +728,9 @@ static int vce_v3_0_set_powergating_state(void *handle, | |||
728 | */ | 728 | */ |
729 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 729 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
730 | 730 | ||
731 | if (!(adev->pg_flags & AMD_PG_SUPPORT_VCE)) | ||
732 | return 0; | ||
733 | |||
731 | if (state == AMD_PG_STATE_GATE) | 734 | if (state == AMD_PG_STATE_GATE) |
732 | /* XXX do we need a vce_v3_0_stop()? */ | 735 | /* XXX do we need a vce_v3_0_stop()? */ |
733 | return 0; | 736 | return 0; |
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c index 125003517544..b72cf063df1a 100644 --- a/drivers/gpu/drm/amd/amdgpu/vi.c +++ b/drivers/gpu/drm/amd/amdgpu/vi.c | |||
@@ -1092,8 +1092,7 @@ static int vi_common_early_init(void *handle) | |||
1092 | case CHIP_STONEY: | 1092 | case CHIP_STONEY: |
1093 | adev->has_uvd = true; | 1093 | adev->has_uvd = true; |
1094 | adev->cg_flags = 0; | 1094 | adev->cg_flags = 0; |
1095 | /* Disable UVD pg */ | 1095 | adev->pg_flags = 0; |
1096 | adev->pg_flags = /* AMDGPU_PG_SUPPORT_UVD | */AMDGPU_PG_SUPPORT_VCE; | ||
1097 | adev->external_rev_id = adev->rev_id + 0x1; | 1096 | adev->external_rev_id = adev->rev_id + 0x1; |
1098 | break; | 1097 | break; |
1099 | default: | 1098 | default: |