diff options
author | Dave Airlie <airlied@redhat.com> | 2017-11-08 20:14:47 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2017-11-08 20:14:47 -0500 |
commit | 086711708b5a0b1662fb86a10dbf2ae9b3c18d0a (patch) | |
tree | 172c1d0c5ca0cbd0254ccd341950836f465f5b62 | |
parent | d65d31388a23b14df9494135ad6c6549a59a3caa (diff) | |
parent | cdd9a8b8599b952e2b39763090689ec2ad8e40c3 (diff) |
Merge branch 'drm-next-4.15' of git://people.freedesktop.org/~agd5f/linux into drm-next
A few more fixes for 4.15.
* 'drm-next-4.15' of git://people.freedesktop.org/~agd5f/linux:
drm/amdgpu: use irq-safe lock for kiq->ring_lock
drm/amdgpu: bypass lru touch for KIQ ring submission
drm/amdgpu: Potential uninitialized variable in amdgpu_vm_update_directories()
drm/amdgpu: potential uninitialized variable in amdgpu_vce_ring_parse_cs()
drm/amd/powerplay: initialize a variable before using it
drm/amd/powerplay: suppress KASAN out of bounds warning in vega10_populate_all_memory_levels
drm/amd/amdgpu: fix evicted VRAM bo adjudgement condition
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 6 |
6 files changed, 17 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c index e5ece1fae149..a98fbbb4739f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | |||
@@ -136,7 +136,8 @@ void amdgpu_ring_commit(struct amdgpu_ring *ring) | |||
136 | if (ring->funcs->end_use) | 136 | if (ring->funcs->end_use) |
137 | ring->funcs->end_use(ring); | 137 | ring->funcs->end_use(ring); |
138 | 138 | ||
139 | amdgpu_ring_lru_touch(ring->adev, ring); | 139 | if (ring->funcs->type != AMDGPU_RING_TYPE_KIQ) |
140 | amdgpu_ring_lru_touch(ring->adev, ring); | ||
140 | } | 141 | } |
141 | 142 | ||
142 | /** | 143 | /** |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index b577b717caa0..1f036af85ba6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |||
@@ -1193,9 +1193,6 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo, | |||
1193 | unsigned long num_pages = bo->mem.num_pages; | 1193 | unsigned long num_pages = bo->mem.num_pages; |
1194 | struct drm_mm_node *node = bo->mem.mm_node; | 1194 | struct drm_mm_node *node = bo->mem.mm_node; |
1195 | 1195 | ||
1196 | if (bo->mem.start != AMDGPU_BO_INVALID_OFFSET) | ||
1197 | return ttm_bo_eviction_valuable(bo, place); | ||
1198 | |||
1199 | switch (bo->mem.mem_type) { | 1196 | switch (bo->mem.mem_type) { |
1200 | case TTM_PL_TT: | 1197 | case TTM_PL_TT: |
1201 | return true; | 1198 | return true; |
@@ -1210,7 +1207,7 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo, | |||
1210 | num_pages -= node->size; | 1207 | num_pages -= node->size; |
1211 | ++node; | 1208 | ++node; |
1212 | } | 1209 | } |
1213 | break; | 1210 | return false; |
1214 | 1211 | ||
1215 | default: | 1212 | default: |
1216 | break; | 1213 | break; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c index b46280c1279f..2918de2f39ec 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | |||
@@ -648,7 +648,7 @@ int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx) | |||
648 | uint32_t allocated = 0; | 648 | uint32_t allocated = 0; |
649 | uint32_t tmp, handle = 0; | 649 | uint32_t tmp, handle = 0; |
650 | uint32_t *size = &tmp; | 650 | uint32_t *size = &tmp; |
651 | int i, r, idx = 0; | 651 | int i, r = 0, idx = 0; |
652 | 652 | ||
653 | p->job->vm = NULL; | 653 | p->job->vm = NULL; |
654 | ib->gpu_addr = amdgpu_sa_bo_gpu_addr(ib->sa_bo); | 654 | ib->gpu_addr = amdgpu_sa_bo_gpu_addr(ib->sa_bo); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c index 4e4a476593e8..6738df836a70 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | |||
@@ -114,18 +114,19 @@ void amdgpu_virt_init_setting(struct amdgpu_device *adev) | |||
114 | uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg) | 114 | uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg) |
115 | { | 115 | { |
116 | signed long r; | 116 | signed long r; |
117 | unsigned long flags; | ||
117 | uint32_t val, seq; | 118 | uint32_t val, seq; |
118 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; | 119 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; |
119 | struct amdgpu_ring *ring = &kiq->ring; | 120 | struct amdgpu_ring *ring = &kiq->ring; |
120 | 121 | ||
121 | BUG_ON(!ring->funcs->emit_rreg); | 122 | BUG_ON(!ring->funcs->emit_rreg); |
122 | 123 | ||
123 | spin_lock(&kiq->ring_lock); | 124 | spin_lock_irqsave(&kiq->ring_lock, flags); |
124 | amdgpu_ring_alloc(ring, 32); | 125 | amdgpu_ring_alloc(ring, 32); |
125 | amdgpu_ring_emit_rreg(ring, reg); | 126 | amdgpu_ring_emit_rreg(ring, reg); |
126 | amdgpu_fence_emit_polling(ring, &seq); | 127 | amdgpu_fence_emit_polling(ring, &seq); |
127 | amdgpu_ring_commit(ring); | 128 | amdgpu_ring_commit(ring); |
128 | spin_unlock(&kiq->ring_lock); | 129 | spin_unlock_irqrestore(&kiq->ring_lock, flags); |
129 | 130 | ||
130 | r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); | 131 | r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); |
131 | if (r < 1) { | 132 | if (r < 1) { |
@@ -140,18 +141,19 @@ uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg) | |||
140 | void amdgpu_virt_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v) | 141 | void amdgpu_virt_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v) |
141 | { | 142 | { |
142 | signed long r; | 143 | signed long r; |
144 | unsigned long flags; | ||
143 | uint32_t seq; | 145 | uint32_t seq; |
144 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; | 146 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; |
145 | struct amdgpu_ring *ring = &kiq->ring; | 147 | struct amdgpu_ring *ring = &kiq->ring; |
146 | 148 | ||
147 | BUG_ON(!ring->funcs->emit_wreg); | 149 | BUG_ON(!ring->funcs->emit_wreg); |
148 | 150 | ||
149 | spin_lock(&kiq->ring_lock); | 151 | spin_lock_irqsave(&kiq->ring_lock, flags); |
150 | amdgpu_ring_alloc(ring, 32); | 152 | amdgpu_ring_alloc(ring, 32); |
151 | amdgpu_ring_emit_wreg(ring, reg, v); | 153 | amdgpu_ring_emit_wreg(ring, reg, v); |
152 | amdgpu_fence_emit_polling(ring, &seq); | 154 | amdgpu_fence_emit_polling(ring, &seq); |
153 | amdgpu_ring_commit(ring); | 155 | amdgpu_ring_commit(ring); |
154 | spin_unlock(&kiq->ring_lock); | 156 | spin_unlock_irqrestore(&kiq->ring_lock, flags); |
155 | 157 | ||
156 | r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); | 158 | r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); |
157 | if (r < 1) | 159 | if (r < 1) |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 010d14195a5e..c8c26f21993c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |||
@@ -1244,7 +1244,7 @@ static void amdgpu_vm_invalidate_level(struct amdgpu_vm *vm, | |||
1244 | int amdgpu_vm_update_directories(struct amdgpu_device *adev, | 1244 | int amdgpu_vm_update_directories(struct amdgpu_device *adev, |
1245 | struct amdgpu_vm *vm) | 1245 | struct amdgpu_vm *vm) |
1246 | { | 1246 | { |
1247 | int r; | 1247 | int r = 0; |
1248 | 1248 | ||
1249 | spin_lock(&vm->status_lock); | 1249 | spin_lock(&vm->status_lock); |
1250 | while (!list_empty(&vm->relocated)) { | 1250 | while (!list_empty(&vm->relocated)) { |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c index 4239b98cf6db..4f79c21f27ed 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | |||
@@ -1807,6 +1807,10 @@ static int vega10_populate_all_memory_levels(struct pp_hwmgr *hwmgr) | |||
1807 | mem_channels = (cgs_read_register(hwmgr->device, reg) & | 1807 | mem_channels = (cgs_read_register(hwmgr->device, reg) & |
1808 | DF_CS_AON0_DramBaseAddress0__IntLvNumChan_MASK) >> | 1808 | DF_CS_AON0_DramBaseAddress0__IntLvNumChan_MASK) >> |
1809 | DF_CS_AON0_DramBaseAddress0__IntLvNumChan__SHIFT; | 1809 | DF_CS_AON0_DramBaseAddress0__IntLvNumChan__SHIFT; |
1810 | PP_ASSERT_WITH_CODE(mem_channels < ARRAY_SIZE(channel_number), | ||
1811 | "Mem Channel Index Exceeded maximum!", | ||
1812 | return -1); | ||
1813 | |||
1810 | pp_table->NumMemoryChannels = cpu_to_le16(mem_channels); | 1814 | pp_table->NumMemoryChannels = cpu_to_le16(mem_channels); |
1811 | pp_table->MemoryChannelWidth = | 1815 | pp_table->MemoryChannelWidth = |
1812 | cpu_to_le16(HBM_MEMORY_CHANNEL_WIDTH * | 1816 | cpu_to_le16(HBM_MEMORY_CHANNEL_WIDTH * |
@@ -3134,6 +3138,8 @@ static int vega10_apply_state_adjust_rules(struct pp_hwmgr *hwmgr, | |||
3134 | minimum_clocks.memoryClock = hwmgr->display_config.min_mem_set_clock; | 3138 | minimum_clocks.memoryClock = hwmgr->display_config.min_mem_set_clock; |
3135 | 3139 | ||
3136 | if (PP_CAP(PHM_PlatformCaps_StablePState)) { | 3140 | if (PP_CAP(PHM_PlatformCaps_StablePState)) { |
3141 | stable_pstate_sclk_dpm_percentage = | ||
3142 | data->registry_data.stable_pstate_sclk_dpm_percentage; | ||
3137 | PP_ASSERT_WITH_CODE( | 3143 | PP_ASSERT_WITH_CODE( |
3138 | data->registry_data.stable_pstate_sclk_dpm_percentage >= 1 && | 3144 | data->registry_data.stable_pstate_sclk_dpm_percentage >= 1 && |
3139 | data->registry_data.stable_pstate_sclk_dpm_percentage <= 100, | 3145 | data->registry_data.stable_pstate_sclk_dpm_percentage <= 100, |