aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2017-11-08 20:14:47 -0500
committerDave Airlie <airlied@redhat.com>2017-11-08 20:14:47 -0500
commit086711708b5a0b1662fb86a10dbf2ae9b3c18d0a (patch)
tree172c1d0c5ca0cbd0254ccd341950836f465f5b62
parentd65d31388a23b14df9494135ad6c6549a59a3caa (diff)
parentcdd9a8b8599b952e2b39763090689ec2ad8e40c3 (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.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c10
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c2
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c6
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)
114uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg) 114uint32_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)
140void amdgpu_virt_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v) 141void 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,
1244int amdgpu_vm_update_directories(struct amdgpu_device *adev, 1244int 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,