diff options
author | Christian König <christian.koenig@amd.com> | 2016-05-06 11:50:03 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-05-11 13:30:31 -0400 |
commit | d88bf583bd06eecb31f82871c90ef6a5a09b5766 (patch) | |
tree | 122631666a828a4705350d6f2e68be19c312bc74 | |
parent | 92f250989b7098f4b52d50183a7b2fc4e010731b (diff) |
drm/amdgpu: move VM fields into job
They are the same for all IBs.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 36 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 19 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 3 |
14 files changed, 66 insertions, 66 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 9b55ad351602..d4c1eb7816f0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -283,7 +283,8 @@ struct amdgpu_ring_funcs { | |||
283 | int (*parse_cs)(struct amdgpu_cs_parser *p, uint32_t ib_idx); | 283 | int (*parse_cs)(struct amdgpu_cs_parser *p, uint32_t ib_idx); |
284 | /* command emit functions */ | 284 | /* command emit functions */ |
285 | void (*emit_ib)(struct amdgpu_ring *ring, | 285 | void (*emit_ib)(struct amdgpu_ring *ring, |
286 | struct amdgpu_ib *ib, bool ctx_switch); | 286 | struct amdgpu_ib *ib, |
287 | unsigned vm_id, bool ctx_switch); | ||
287 | void (*emit_fence)(struct amdgpu_ring *ring, uint64_t addr, | 288 | void (*emit_fence)(struct amdgpu_ring *ring, uint64_t addr, |
288 | uint64_t seq, unsigned flags); | 289 | uint64_t seq, unsigned flags); |
289 | void (*emit_pipeline_sync)(struct amdgpu_ring *ring); | 290 | void (*emit_pipeline_sync)(struct amdgpu_ring *ring); |
@@ -741,11 +742,6 @@ struct amdgpu_ib { | |||
741 | uint64_t gpu_addr; | 742 | uint64_t gpu_addr; |
742 | uint32_t *ptr; | 743 | uint32_t *ptr; |
743 | struct amdgpu_user_fence *user; | 744 | struct amdgpu_user_fence *user; |
744 | unsigned vm_id; | ||
745 | uint64_t vm_pd_addr; | ||
746 | uint32_t gds_base, gds_size; | ||
747 | uint32_t gws_base, gws_size; | ||
748 | uint32_t oa_base, oa_size; | ||
749 | uint32_t flags; | 745 | uint32_t flags; |
750 | /* resulting sequence number */ | 746 | /* resulting sequence number */ |
751 | uint64_t sequence; | 747 | uint64_t sequence; |
@@ -1262,6 +1258,11 @@ struct amdgpu_job { | |||
1262 | uint32_t num_ibs; | 1258 | uint32_t num_ibs; |
1263 | void *owner; | 1259 | void *owner; |
1264 | uint64_t ctx; | 1260 | uint64_t ctx; |
1261 | unsigned vm_id; | ||
1262 | uint64_t vm_pd_addr; | ||
1263 | uint32_t gds_base, gds_size; | ||
1264 | uint32_t gws_base, gws_size; | ||
1265 | uint32_t oa_base, oa_size; | ||
1265 | struct amdgpu_user_fence uf; | 1266 | struct amdgpu_user_fence uf; |
1266 | }; | 1267 | }; |
1267 | #define to_amdgpu_job(sched_job) \ | 1268 | #define to_amdgpu_job(sched_job) \ |
@@ -2221,7 +2222,7 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring) | |||
2221 | #define amdgpu_ring_get_rptr(r) (r)->funcs->get_rptr((r)) | 2222 | #define amdgpu_ring_get_rptr(r) (r)->funcs->get_rptr((r)) |
2222 | #define amdgpu_ring_get_wptr(r) (r)->funcs->get_wptr((r)) | 2223 | #define amdgpu_ring_get_wptr(r) (r)->funcs->get_wptr((r)) |
2223 | #define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r)) | 2224 | #define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r)) |
2224 | #define amdgpu_ring_emit_ib(r, ib, c) (r)->funcs->emit_ib((r), (ib), (c)) | 2225 | #define amdgpu_ring_emit_ib(r, ib, vm_id, c) (r)->funcs->emit_ib((r), (ib), (vm_id), (c)) |
2225 | #define amdgpu_ring_emit_pipeline_sync(r) (r)->funcs->emit_pipeline_sync((r)) | 2226 | #define amdgpu_ring_emit_pipeline_sync(r) (r)->funcs->emit_pipeline_sync((r)) |
2226 | #define amdgpu_ring_emit_vm_flush(r, vmid, addr) (r)->funcs->emit_vm_flush((r), (vmid), (addr)) | 2227 | #define amdgpu_ring_emit_vm_flush(r, vmid, addr) (r)->funcs->emit_vm_flush((r), (vmid), (addr)) |
2227 | #define amdgpu_ring_emit_fence(r, addr, seq, flags) (r)->funcs->emit_fence((r), (addr), (seq), (flags)) | 2228 | #define amdgpu_ring_emit_fence(r, addr, seq, flags) (r)->funcs->emit_fence((r), (addr), (seq), (flags)) |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 2895d63c9979..9ab2f0886a14 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |||
@@ -473,6 +473,9 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, | |||
473 | goto error_validate; | 473 | goto error_validate; |
474 | 474 | ||
475 | if (p->bo_list) { | 475 | if (p->bo_list) { |
476 | struct amdgpu_bo *gds = p->bo_list->gds_obj; | ||
477 | struct amdgpu_bo *gws = p->bo_list->gws_obj; | ||
478 | struct amdgpu_bo *oa = p->bo_list->oa_obj; | ||
476 | struct amdgpu_vm *vm = &fpriv->vm; | 479 | struct amdgpu_vm *vm = &fpriv->vm; |
477 | unsigned i; | 480 | unsigned i; |
478 | 481 | ||
@@ -481,6 +484,19 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, | |||
481 | 484 | ||
482 | p->bo_list->array[i].bo_va = amdgpu_vm_bo_find(vm, bo); | 485 | p->bo_list->array[i].bo_va = amdgpu_vm_bo_find(vm, bo); |
483 | } | 486 | } |
487 | |||
488 | if (gds) { | ||
489 | p->job->gds_base = amdgpu_bo_gpu_offset(gds); | ||
490 | p->job->gds_size = amdgpu_bo_size(gds); | ||
491 | } | ||
492 | if (gws) { | ||
493 | p->job->gws_base = amdgpu_bo_gpu_offset(gws); | ||
494 | p->job->gws_size = amdgpu_bo_size(gws); | ||
495 | } | ||
496 | if (oa) { | ||
497 | p->job->oa_base = amdgpu_bo_gpu_offset(oa); | ||
498 | p->job->oa_size = amdgpu_bo_size(oa); | ||
499 | } | ||
484 | } | 500 | } |
485 | 501 | ||
486 | error_validate: | 502 | error_validate: |
@@ -744,26 +760,6 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev, | |||
744 | j++; | 760 | j++; |
745 | } | 761 | } |
746 | 762 | ||
747 | /* add GDS resources to first IB */ | ||
748 | if (parser->bo_list) { | ||
749 | struct amdgpu_bo *gds = parser->bo_list->gds_obj; | ||
750 | struct amdgpu_bo *gws = parser->bo_list->gws_obj; | ||
751 | struct amdgpu_bo *oa = parser->bo_list->oa_obj; | ||
752 | struct amdgpu_ib *ib = &parser->job->ibs[0]; | ||
753 | |||
754 | if (gds) { | ||
755 | ib->gds_base = amdgpu_bo_gpu_offset(gds); | ||
756 | ib->gds_size = amdgpu_bo_size(gds); | ||
757 | } | ||
758 | if (gws) { | ||
759 | ib->gws_base = amdgpu_bo_gpu_offset(gws); | ||
760 | ib->gws_size = amdgpu_bo_size(gws); | ||
761 | } | ||
762 | if (oa) { | ||
763 | ib->oa_base = amdgpu_bo_gpu_offset(oa); | ||
764 | ib->oa_size = amdgpu_bo_size(oa); | ||
765 | } | ||
766 | } | ||
767 | /* wrap the last IB with user fence */ | 763 | /* wrap the last IB with user fence */ |
768 | if (parser->job->uf.bo) { | 764 | if (parser->job->uf.bo) { |
769 | struct amdgpu_ib *ib = &parser->job->ibs[parser->job->num_ibs - 1]; | 765 | struct amdgpu_ib *ib = &parser->job->ibs[parser->job->num_ibs - 1]; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c index dacbd2e32072..201aceb01d8a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | |||
@@ -74,8 +74,6 @@ int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm, | |||
74 | ib->gpu_addr = amdgpu_sa_bo_gpu_addr(ib->sa_bo); | 74 | ib->gpu_addr = amdgpu_sa_bo_gpu_addr(ib->sa_bo); |
75 | } | 75 | } |
76 | 76 | ||
77 | ib->vm_id = 0; | ||
78 | |||
79 | return 0; | 77 | return 0; |
80 | } | 78 | } |
81 | 79 | ||
@@ -147,7 +145,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, | |||
147 | return -EINVAL; | 145 | return -EINVAL; |
148 | } | 146 | } |
149 | 147 | ||
150 | if (vm && !ibs->vm_id) { | 148 | if (vm && !job->vm_id) { |
151 | dev_err(adev->dev, "VM IB without ID\n"); | 149 | dev_err(adev->dev, "VM IB without ID\n"); |
152 | return -EINVAL; | 150 | return -EINVAL; |
153 | } | 151 | } |
@@ -162,10 +160,10 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, | |||
162 | patch_offset = amdgpu_ring_init_cond_exec(ring); | 160 | patch_offset = amdgpu_ring_init_cond_exec(ring); |
163 | 161 | ||
164 | if (vm) { | 162 | if (vm) { |
165 | r = amdgpu_vm_flush(ring, ib->vm_id, ib->vm_pd_addr, | 163 | r = amdgpu_vm_flush(ring, job->vm_id, job->vm_pd_addr, |
166 | ib->gds_base, ib->gds_size, | 164 | job->gds_base, job->gds_size, |
167 | ib->gws_base, ib->gws_size, | 165 | job->gws_base, job->gws_size, |
168 | ib->oa_base, ib->oa_size); | 166 | job->oa_base, job->oa_size); |
169 | if (r) { | 167 | if (r) { |
170 | amdgpu_ring_undo(ring); | 168 | amdgpu_ring_undo(ring); |
171 | return r; | 169 | return r; |
@@ -187,7 +185,8 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, | |||
187 | if ((ib->flags & AMDGPU_IB_FLAG_PREAMBLE) && skip_preamble) | 185 | if ((ib->flags & AMDGPU_IB_FLAG_PREAMBLE) && skip_preamble) |
188 | continue; | 186 | continue; |
189 | 187 | ||
190 | amdgpu_ring_emit_ib(ring, ib, need_ctx_switch); | 188 | amdgpu_ring_emit_ib(ring, ib, job ? job->vm_id : 0, |
189 | need_ctx_switch); | ||
191 | need_ctx_switch = false; | 190 | need_ctx_switch = false; |
192 | } | 191 | } |
193 | 192 | ||
@@ -197,8 +196,8 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, | |||
197 | r = amdgpu_fence_emit(ring, &hwf); | 196 | r = amdgpu_fence_emit(ring, &hwf); |
198 | if (r) { | 197 | if (r) { |
199 | dev_err(adev->dev, "failed to emit fence (%d)\n", r); | 198 | dev_err(adev->dev, "failed to emit fence (%d)\n", r); |
200 | if (ib->vm_id) | 199 | if (job && job->vm_id) |
201 | amdgpu_vm_reset_id(adev, ib->vm_id); | 200 | amdgpu_vm_reset_id(adev, job->vm_id); |
202 | amdgpu_ring_undo(ring); | 201 | amdgpu_ring_undo(ring); |
203 | return r; | 202 | return r; |
204 | } | 203 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c index a0961f2a93d2..8ea68d0cfad6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | |||
@@ -142,23 +142,15 @@ static struct fence *amdgpu_job_dependency(struct amd_sched_job *sched_job) | |||
142 | 142 | ||
143 | struct fence *fence = amdgpu_sync_get_fence(&job->sync); | 143 | struct fence *fence = amdgpu_sync_get_fence(&job->sync); |
144 | 144 | ||
145 | if (fence == NULL && vm && !job->ibs->vm_id) { | 145 | if (fence == NULL && vm && !job->vm_id) { |
146 | struct amdgpu_ring *ring = job->ring; | 146 | struct amdgpu_ring *ring = job->ring; |
147 | unsigned i, vm_id; | ||
148 | uint64_t vm_pd_addr; | ||
149 | int r; | 147 | int r; |
150 | 148 | ||
151 | r = amdgpu_vm_grab_id(vm, ring, &job->sync, | 149 | r = amdgpu_vm_grab_id(vm, ring, &job->sync, |
152 | &job->base.s_fence->base, | 150 | &job->base.s_fence->base, |
153 | &vm_id, &vm_pd_addr); | 151 | &job->vm_id, &job->vm_pd_addr); |
154 | if (r) | 152 | if (r) |
155 | DRM_ERROR("Error getting VM ID (%d)\n", r); | 153 | DRM_ERROR("Error getting VM ID (%d)\n", r); |
156 | else { | ||
157 | for (i = 0; i < job->num_ibs; ++i) { | ||
158 | job->ibs[i].vm_id = vm_id; | ||
159 | job->ibs[i].vm_pd_addr = vm_pd_addr; | ||
160 | } | ||
161 | } | ||
162 | 154 | ||
163 | fence = amdgpu_sync_get_fence(&job->sync); | 155 | fence = amdgpu_sync_get_fence(&job->sync); |
164 | } | 156 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c index ad91664a7649..875626a2eccb 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | |||
@@ -762,7 +762,8 @@ out: | |||
762 | * @ib: the IB to execute | 762 | * @ib: the IB to execute |
763 | * | 763 | * |
764 | */ | 764 | */ |
765 | void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib, bool ctx_switch) | 765 | void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib, |
766 | unsigned vm_id, bool ctx_switch) | ||
766 | { | 767 | { |
767 | amdgpu_ring_write(ring, VCE_CMD_IB); | 768 | amdgpu_ring_write(ring, VCE_CMD_IB); |
768 | amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr)); | 769 | amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr)); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h index 40d0650e3a37..f40cf761c66f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h | |||
@@ -34,7 +34,8 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle, | |||
34 | bool direct, struct fence **fence); | 34 | bool direct, struct fence **fence); |
35 | void amdgpu_vce_free_handles(struct amdgpu_device *adev, struct drm_file *filp); | 35 | void amdgpu_vce_free_handles(struct amdgpu_device *adev, struct drm_file *filp); |
36 | int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx); | 36 | int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx); |
37 | void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib, bool ctx_switch); | 37 | void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib, |
38 | unsigned vm_id, bool ctx_switch); | ||
38 | void amdgpu_vce_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq, | 39 | void amdgpu_vce_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq, |
39 | unsigned flags); | 40 | unsigned flags); |
40 | int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring); | 41 | int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring); |
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c index 6c2aa2b863b2..518dca43b133 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c | |||
@@ -210,9 +210,10 @@ static void cik_sdma_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count) | |||
210 | * Schedule an IB in the DMA ring (CIK). | 210 | * Schedule an IB in the DMA ring (CIK). |
211 | */ | 211 | */ |
212 | static void cik_sdma_ring_emit_ib(struct amdgpu_ring *ring, | 212 | static void cik_sdma_ring_emit_ib(struct amdgpu_ring *ring, |
213 | struct amdgpu_ib *ib, bool ctx_switch) | 213 | struct amdgpu_ib *ib, |
214 | unsigned vm_id, bool ctx_switch) | ||
214 | { | 215 | { |
215 | u32 extra_bits = ib->vm_id & 0xf; | 216 | u32 extra_bits = vm_id & 0xf; |
216 | u32 next_rptr = ring->wptr + 5; | 217 | u32 next_rptr = ring->wptr + 5; |
217 | 218 | ||
218 | while ((next_rptr & 7) != 4) | 219 | while ((next_rptr & 7) != 4) |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index 189ef2b23668..7f18a53ab53a 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | |||
@@ -2030,7 +2030,8 @@ static void gfx_v7_0_ring_emit_fence_compute(struct amdgpu_ring *ring, | |||
2030 | * on the gfx ring for execution by the GPU. | 2030 | * on the gfx ring for execution by the GPU. |
2031 | */ | 2031 | */ |
2032 | static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring, | 2032 | static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring, |
2033 | struct amdgpu_ib *ib, bool ctx_switch) | 2033 | struct amdgpu_ib *ib, |
2034 | unsigned vm_id, bool ctx_switch) | ||
2034 | { | 2035 | { |
2035 | u32 header, control = 0; | 2036 | u32 header, control = 0; |
2036 | u32 next_rptr = ring->wptr + 5; | 2037 | u32 next_rptr = ring->wptr + 5; |
@@ -2056,7 +2057,7 @@ static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring, | |||
2056 | else | 2057 | else |
2057 | header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); | 2058 | header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); |
2058 | 2059 | ||
2059 | control |= ib->length_dw | (ib->vm_id << 24); | 2060 | control |= ib->length_dw | (vm_id << 24); |
2060 | 2061 | ||
2061 | amdgpu_ring_write(ring, header); | 2062 | amdgpu_ring_write(ring, header); |
2062 | amdgpu_ring_write(ring, | 2063 | amdgpu_ring_write(ring, |
@@ -2069,7 +2070,8 @@ static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring, | |||
2069 | } | 2070 | } |
2070 | 2071 | ||
2071 | static void gfx_v7_0_ring_emit_ib_compute(struct amdgpu_ring *ring, | 2072 | static void gfx_v7_0_ring_emit_ib_compute(struct amdgpu_ring *ring, |
2072 | struct amdgpu_ib *ib, bool ctx_switch) | 2073 | struct amdgpu_ib *ib, |
2074 | unsigned vm_id, bool ctx_switch) | ||
2073 | { | 2075 | { |
2074 | u32 header, control = 0; | 2076 | u32 header, control = 0; |
2075 | u32 next_rptr = ring->wptr + 5; | 2077 | u32 next_rptr = ring->wptr + 5; |
@@ -2084,7 +2086,7 @@ static void gfx_v7_0_ring_emit_ib_compute(struct amdgpu_ring *ring, | |||
2084 | 2086 | ||
2085 | header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); | 2087 | header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); |
2086 | 2088 | ||
2087 | control |= ib->length_dw | (ib->vm_id << 24); | 2089 | control |= ib->length_dw | (vm_id << 24); |
2088 | 2090 | ||
2089 | amdgpu_ring_write(ring, header); | 2091 | amdgpu_ring_write(ring, header); |
2090 | amdgpu_ring_write(ring, | 2092 | amdgpu_ring_write(ring, |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 0d556c907ab6..92647fbf5b8b 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -5646,7 +5646,8 @@ static void gfx_v8_0_ring_emit_hdp_invalidate(struct amdgpu_ring *ring) | |||
5646 | } | 5646 | } |
5647 | 5647 | ||
5648 | static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring, | 5648 | static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring, |
5649 | struct amdgpu_ib *ib, bool ctx_switch) | 5649 | struct amdgpu_ib *ib, |
5650 | unsigned vm_id, bool ctx_switch) | ||
5650 | { | 5651 | { |
5651 | u32 header, control = 0; | 5652 | u32 header, control = 0; |
5652 | u32 next_rptr = ring->wptr + 5; | 5653 | u32 next_rptr = ring->wptr + 5; |
@@ -5672,7 +5673,7 @@ static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring, | |||
5672 | else | 5673 | else |
5673 | header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); | 5674 | header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); |
5674 | 5675 | ||
5675 | control |= ib->length_dw | (ib->vm_id << 24); | 5676 | control |= ib->length_dw | (vm_id << 24); |
5676 | 5677 | ||
5677 | amdgpu_ring_write(ring, header); | 5678 | amdgpu_ring_write(ring, header); |
5678 | amdgpu_ring_write(ring, | 5679 | amdgpu_ring_write(ring, |
@@ -5685,7 +5686,8 @@ static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring, | |||
5685 | } | 5686 | } |
5686 | 5687 | ||
5687 | static void gfx_v8_0_ring_emit_ib_compute(struct amdgpu_ring *ring, | 5688 | static void gfx_v8_0_ring_emit_ib_compute(struct amdgpu_ring *ring, |
5688 | struct amdgpu_ib *ib, bool ctx_switch) | 5689 | struct amdgpu_ib *ib, |
5690 | unsigned vm_id, bool ctx_switch) | ||
5689 | { | 5691 | { |
5690 | u32 header, control = 0; | 5692 | u32 header, control = 0; |
5691 | u32 next_rptr = ring->wptr + 5; | 5693 | u32 next_rptr = ring->wptr + 5; |
@@ -5701,7 +5703,7 @@ static void gfx_v8_0_ring_emit_ib_compute(struct amdgpu_ring *ring, | |||
5701 | 5703 | ||
5702 | header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); | 5704 | header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); |
5703 | 5705 | ||
5704 | control |= ib->length_dw | (ib->vm_id << 24); | 5706 | control |= ib->length_dw | (vm_id << 24); |
5705 | 5707 | ||
5706 | amdgpu_ring_write(ring, header); | 5708 | amdgpu_ring_write(ring, header); |
5707 | amdgpu_ring_write(ring, | 5709 | amdgpu_ring_write(ring, |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c index de94adb2b19e..f4c3130d3fdb 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | |||
@@ -242,9 +242,10 @@ static void sdma_v2_4_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count) | |||
242 | * Schedule an IB in the DMA ring (VI). | 242 | * Schedule an IB in the DMA ring (VI). |
243 | */ | 243 | */ |
244 | static void sdma_v2_4_ring_emit_ib(struct amdgpu_ring *ring, | 244 | static void sdma_v2_4_ring_emit_ib(struct amdgpu_ring *ring, |
245 | struct amdgpu_ib *ib, bool ctx_switch) | 245 | struct amdgpu_ib *ib, |
246 | unsigned vm_id, bool ctx_switch) | ||
246 | { | 247 | { |
247 | u32 vmid = ib->vm_id & 0xf; | 248 | u32 vmid = vm_id & 0xf; |
248 | u32 next_rptr = ring->wptr + 5; | 249 | u32 next_rptr = ring->wptr + 5; |
249 | 250 | ||
250 | while ((next_rptr & 7) != 2) | 251 | while ((next_rptr & 7) != 2) |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c index ca2aee3e88a3..063f08a9957a 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | |||
@@ -400,9 +400,10 @@ static void sdma_v3_0_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count) | |||
400 | * Schedule an IB in the DMA ring (VI). | 400 | * Schedule an IB in the DMA ring (VI). |
401 | */ | 401 | */ |
402 | static void sdma_v3_0_ring_emit_ib(struct amdgpu_ring *ring, | 402 | static void sdma_v3_0_ring_emit_ib(struct amdgpu_ring *ring, |
403 | struct amdgpu_ib *ib, bool ctx_switch) | 403 | struct amdgpu_ib *ib, |
404 | unsigned vm_id, bool ctx_switch) | ||
404 | { | 405 | { |
405 | u32 vmid = ib->vm_id & 0xf; | 406 | u32 vmid = vm_id & 0xf; |
406 | u32 next_rptr = ring->wptr + 5; | 407 | u32 next_rptr = ring->wptr + 5; |
407 | 408 | ||
408 | while ((next_rptr & 7) != 2) | 409 | while ((next_rptr & 7) != 2) |
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c index a75ffb5b11b2..f07551476a70 100644 --- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c | |||
@@ -489,7 +489,8 @@ static int uvd_v4_2_ring_test_ring(struct amdgpu_ring *ring) | |||
489 | * Write ring commands to execute the indirect buffer | 489 | * Write ring commands to execute the indirect buffer |
490 | */ | 490 | */ |
491 | static void uvd_v4_2_ring_emit_ib(struct amdgpu_ring *ring, | 491 | static void uvd_v4_2_ring_emit_ib(struct amdgpu_ring *ring, |
492 | struct amdgpu_ib *ib, bool ctx_switch) | 492 | struct amdgpu_ib *ib, |
493 | unsigned vm_id, bool ctx_switch) | ||
493 | { | 494 | { |
494 | amdgpu_ring_write(ring, PACKET0(mmUVD_RBC_IB_BASE, 0)); | 495 | amdgpu_ring_write(ring, PACKET0(mmUVD_RBC_IB_BASE, 0)); |
495 | amdgpu_ring_write(ring, ib->gpu_addr); | 496 | amdgpu_ring_write(ring, ib->gpu_addr); |
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c index ecb81014d836..e0a76a883d46 100644 --- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c | |||
@@ -539,7 +539,8 @@ static int uvd_v5_0_ring_test_ring(struct amdgpu_ring *ring) | |||
539 | * Write ring commands to execute the indirect buffer | 539 | * Write ring commands to execute the indirect buffer |
540 | */ | 540 | */ |
541 | static void uvd_v5_0_ring_emit_ib(struct amdgpu_ring *ring, | 541 | static void uvd_v5_0_ring_emit_ib(struct amdgpu_ring *ring, |
542 | struct amdgpu_ib *ib, bool ctx_switch) | 542 | struct amdgpu_ib *ib, |
543 | unsigned vm_id, bool ctx_switch) | ||
543 | { | 544 | { |
544 | amdgpu_ring_write(ring, PACKET0(mmUVD_LMI_RBC_IB_64BIT_BAR_LOW, 0)); | 545 | amdgpu_ring_write(ring, PACKET0(mmUVD_LMI_RBC_IB_64BIT_BAR_LOW, 0)); |
545 | amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr)); | 546 | amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr)); |
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c index a43f1a7c58bc..c9929d665c01 100644 --- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | |||
@@ -631,7 +631,8 @@ static int uvd_v6_0_ring_test_ring(struct amdgpu_ring *ring) | |||
631 | * Write ring commands to execute the indirect buffer | 631 | * Write ring commands to execute the indirect buffer |
632 | */ | 632 | */ |
633 | static void uvd_v6_0_ring_emit_ib(struct amdgpu_ring *ring, | 633 | static void uvd_v6_0_ring_emit_ib(struct amdgpu_ring *ring, |
634 | struct amdgpu_ib *ib, bool ctx_switch) | 634 | struct amdgpu_ib *ib, |
635 | unsigned vm_id, bool ctx_switch) | ||
635 | { | 636 | { |
636 | amdgpu_ring_write(ring, PACKET0(mmUVD_LMI_RBC_IB_64BIT_BAR_LOW, 0)); | 637 | amdgpu_ring_write(ring, PACKET0(mmUVD_LMI_RBC_IB_64BIT_BAR_LOW, 0)); |
637 | amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr)); | 638 | amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr)); |