Skip to content

Commit c4c905e

Browse files
Jack Xiaoalexdeucher
authored andcommitted
drm/amdgpu: add flags to emit_ib interface v2
Replace the last bool type parameter with a general flags parameter, to make the last parameter be able to contain more information. v2: drop setting need_ctx_switch = false Reviewed-by: Christian König <[email protected]> Reviewed-by: Hawking Zhang <[email protected]> Signed-off-by: Jack Xiao <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent a7cd977 commit c4c905e

20 files changed

+34
-34
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,12 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
202202
amdgpu_asic_flush_hdp(adev, ring);
203203
}
204204

205+
if (need_ctx_switch)
206+
status |= AMDGPU_HAVE_CTX_SWITCH;
207+
205208
skip_preamble = ring->current_ctx == fence_ctx;
206209
if (job && ring->funcs->emit_cntxcntl) {
207-
if (need_ctx_switch)
208-
status |= AMDGPU_HAVE_CTX_SWITCH;
209210
status |= job->preamble_status;
210-
211211
amdgpu_ring_emit_cntxcntl(ring, status);
212212
}
213213

@@ -221,8 +221,8 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
221221
!amdgpu_sriov_vf(adev)) /* for SRIOV preemption, Preamble CE ib must be inserted anyway */
222222
continue;
223223

224-
amdgpu_ring_emit_ib(ring, job, ib, need_ctx_switch);
225-
need_ctx_switch = false;
224+
amdgpu_ring_emit_ib(ring, job, ib, status);
225+
status &= ~AMDGPU_HAVE_CTX_SWITCH;
226226
}
227227

228228
if (ring->funcs->emit_tmz)

drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ struct amdgpu_ring_funcs {
131131
void (*emit_ib)(struct amdgpu_ring *ring,
132132
struct amdgpu_job *job,
133133
struct amdgpu_ib *ib,
134-
bool ctx_switch);
134+
uint32_t flags);
135135
void (*emit_fence)(struct amdgpu_ring *ring, uint64_t addr,
136136
uint64_t seq, unsigned flags);
137137
void (*emit_pipeline_sync)(struct amdgpu_ring *ring);
@@ -229,7 +229,7 @@ struct amdgpu_ring {
229229
#define amdgpu_ring_get_rptr(r) (r)->funcs->get_rptr((r))
230230
#define amdgpu_ring_get_wptr(r) (r)->funcs->get_wptr((r))
231231
#define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r))
232-
#define amdgpu_ring_emit_ib(r, job, ib, c) ((r)->funcs->emit_ib((r), (job), (ib), (c)))
232+
#define amdgpu_ring_emit_ib(r, job, ib, flags) ((r)->funcs->emit_ib((r), (job), (ib), (flags)))
233233
#define amdgpu_ring_emit_pipeline_sync(r) (r)->funcs->emit_pipeline_sync((r))
234234
#define amdgpu_ring_emit_vm_flush(r, vmid, addr) (r)->funcs->emit_vm_flush((r), (vmid), (addr))
235235
#define amdgpu_ring_emit_fence(r, addr, seq, flags) (r)->funcs->emit_fence((r), (addr), (seq), (flags))

drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1035,7 +1035,7 @@ int amdgpu_vce_ring_parse_cs_vm(struct amdgpu_cs_parser *p, uint32_t ib_idx)
10351035
void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring,
10361036
struct amdgpu_job *job,
10371037
struct amdgpu_ib *ib,
1038-
bool ctx_switch)
1038+
uint32_t flags)
10391039
{
10401040
amdgpu_ring_write(ring, VCE_CMD_IB);
10411041
amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr));

drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void amdgpu_vce_free_handles(struct amdgpu_device *adev, struct drm_file *filp);
6666
int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx);
6767
int amdgpu_vce_ring_parse_cs_vm(struct amdgpu_cs_parser *p, uint32_t ib_idx);
6868
void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_job *job,
69-
struct amdgpu_ib *ib, bool ctx_switch);
69+
struct amdgpu_ib *ib, uint32_t flags);
7070
void amdgpu_vce_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq,
7171
unsigned flags);
7272
int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring);

drivers/gpu/drm/amd/amdgpu/cik_sdma.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ static void cik_sdma_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count)
220220
static void cik_sdma_ring_emit_ib(struct amdgpu_ring *ring,
221221
struct amdgpu_job *job,
222222
struct amdgpu_ib *ib,
223-
bool ctx_switch)
223+
uint32_t flags)
224224
{
225225
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
226226
u32 extra_bits = vmid & 0xf;

drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,13 +1842,13 @@ static void gfx_v6_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr,
18421842
static void gfx_v6_0_ring_emit_ib(struct amdgpu_ring *ring,
18431843
struct amdgpu_job *job,
18441844
struct amdgpu_ib *ib,
1845-
bool ctx_switch)
1845+
uint32_t flags)
18461846
{
18471847
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
18481848
u32 header, control = 0;
18491849

18501850
/* insert SWITCH_BUFFER packet before first IB in the ring frame */
1851-
if (ctx_switch) {
1851+
if (flags & AMDGPU_HAVE_CTX_SWITCH) {
18521852
amdgpu_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0));
18531853
amdgpu_ring_write(ring, 0);
18541854
}

drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2228,13 +2228,13 @@ static void gfx_v7_0_ring_emit_fence_compute(struct amdgpu_ring *ring,
22282228
static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
22292229
struct amdgpu_job *job,
22302230
struct amdgpu_ib *ib,
2231-
bool ctx_switch)
2231+
uint32_t flags)
22322232
{
22332233
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
22342234
u32 header, control = 0;
22352235

22362236
/* insert SWITCH_BUFFER packet before first IB in the ring frame */
2237-
if (ctx_switch) {
2237+
if (flags & AMDGPU_HAVE_CTX_SWITCH) {
22382238
amdgpu_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0));
22392239
amdgpu_ring_write(ring, 0);
22402240
}
@@ -2259,7 +2259,7 @@ static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
22592259
static void gfx_v7_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
22602260
struct amdgpu_job *job,
22612261
struct amdgpu_ib *ib,
2262-
bool ctx_switch)
2262+
uint32_t flags)
22632263
{
22642264
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
22652265
u32 control = INDIRECT_BUFFER_VALID | ib->length_dw | (vmid << 24);

drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6047,7 +6047,7 @@ static void gfx_v8_0_ring_emit_vgt_flush(struct amdgpu_ring *ring)
60476047
static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
60486048
struct amdgpu_job *job,
60496049
struct amdgpu_ib *ib,
6050-
bool ctx_switch)
6050+
uint32_t flags)
60516051
{
60526052
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
60536053
u32 header, control = 0;
@@ -6079,7 +6079,7 @@ static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
60796079
static void gfx_v8_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
60806080
struct amdgpu_job *job,
60816081
struct amdgpu_ib *ib,
6082-
bool ctx_switch)
6082+
uint32_t flags)
60836083
{
60846084
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
60856085
u32 control = INDIRECT_BUFFER_VALID | ib->length_dw | (vmid << 24);

drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3972,7 +3972,7 @@ static void gfx_v9_0_ring_emit_hdp_flush(struct amdgpu_ring *ring)
39723972
static void gfx_v9_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
39733973
struct amdgpu_job *job,
39743974
struct amdgpu_ib *ib,
3975-
bool ctx_switch)
3975+
uint32_t flags)
39763976
{
39773977
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
39783978
u32 header, control = 0;
@@ -4005,7 +4005,7 @@ static void gfx_v9_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
40054005
static void gfx_v9_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
40064006
struct amdgpu_job *job,
40074007
struct amdgpu_ib *ib,
4008-
bool ctx_switch)
4008+
uint32_t flags)
40094009
{
40104010
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
40114011
u32 control = INDIRECT_BUFFER_VALID | ib->length_dw | (vmid << 24);

drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ static void sdma_v2_4_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count)
247247
static void sdma_v2_4_ring_emit_ib(struct amdgpu_ring *ring,
248248
struct amdgpu_job *job,
249249
struct amdgpu_ib *ib,
250-
bool ctx_switch)
250+
uint32_t flags)
251251
{
252252
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
253253

drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ static void sdma_v3_0_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count)
421421
static void sdma_v3_0_ring_emit_ib(struct amdgpu_ring *ring,
422422
struct amdgpu_job *job,
423423
struct amdgpu_ib *ib,
424-
bool ctx_switch)
424+
uint32_t flags)
425425
{
426426
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
427427

drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ static void sdma_v4_0_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count)
500500
static void sdma_v4_0_ring_emit_ib(struct amdgpu_ring *ring,
501501
struct amdgpu_job *job,
502502
struct amdgpu_ib *ib,
503-
bool ctx_switch)
503+
uint32_t flags)
504504
{
505505
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
506506

drivers/gpu/drm/amd/amdgpu/si_dma.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ static void si_dma_ring_set_wptr(struct amdgpu_ring *ring)
6363
static void si_dma_ring_emit_ib(struct amdgpu_ring *ring,
6464
struct amdgpu_job *job,
6565
struct amdgpu_ib *ib,
66-
bool ctx_switch)
66+
uint32_t flags)
6767
{
6868
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
6969
/* The indirect buffer packet must end on an 8 DW boundary in the DMA ring.

drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ static int uvd_v4_2_ring_test_ring(struct amdgpu_ring *ring)
511511
static void uvd_v4_2_ring_emit_ib(struct amdgpu_ring *ring,
512512
struct amdgpu_job *job,
513513
struct amdgpu_ib *ib,
514-
bool ctx_switch)
514+
uint32_t flags)
515515
{
516516
amdgpu_ring_write(ring, PACKET0(mmUVD_RBC_IB_BASE, 0));
517517
amdgpu_ring_write(ring, ib->gpu_addr);

drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ static int uvd_v5_0_ring_test_ring(struct amdgpu_ring *ring)
526526
static void uvd_v5_0_ring_emit_ib(struct amdgpu_ring *ring,
527527
struct amdgpu_job *job,
528528
struct amdgpu_ib *ib,
529-
bool ctx_switch)
529+
uint32_t flags)
530530
{
531531
amdgpu_ring_write(ring, PACKET0(mmUVD_LMI_RBC_IB_64BIT_BAR_LOW, 0));
532532
amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr));

drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,7 @@ static int uvd_v6_0_ring_test_ring(struct amdgpu_ring *ring)
977977
static void uvd_v6_0_ring_emit_ib(struct amdgpu_ring *ring,
978978
struct amdgpu_job *job,
979979
struct amdgpu_ib *ib,
980-
bool ctx_switch)
980+
uint32_t flags)
981981
{
982982
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
983983

@@ -1003,7 +1003,7 @@ static void uvd_v6_0_ring_emit_ib(struct amdgpu_ring *ring,
10031003
static void uvd_v6_0_enc_ring_emit_ib(struct amdgpu_ring *ring,
10041004
struct amdgpu_job *job,
10051005
struct amdgpu_ib *ib,
1006-
bool ctx_switch)
1006+
uint32_t flags)
10071007
{
10081008
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
10091009

drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1272,7 +1272,7 @@ static int uvd_v7_0_ring_patch_cs_in_place(struct amdgpu_cs_parser *p,
12721272
static void uvd_v7_0_ring_emit_ib(struct amdgpu_ring *ring,
12731273
struct amdgpu_job *job,
12741274
struct amdgpu_ib *ib,
1275-
bool ctx_switch)
1275+
uint32_t flags)
12761276
{
12771277
struct amdgpu_device *adev = ring->adev;
12781278
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
@@ -1303,7 +1303,7 @@ static void uvd_v7_0_ring_emit_ib(struct amdgpu_ring *ring,
13031303
static void uvd_v7_0_enc_ring_emit_ib(struct amdgpu_ring *ring,
13041304
struct amdgpu_job *job,
13051305
struct amdgpu_ib *ib,
1306-
bool ctx_switch)
1306+
uint32_t flags)
13071307
{
13081308
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
13091309

drivers/gpu/drm/amd/amdgpu/vce_v3_0.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -834,7 +834,7 @@ static void vce_v3_0_get_clockgating_state(void *handle, u32 *flags)
834834
static void vce_v3_0_ring_emit_ib(struct amdgpu_ring *ring,
835835
struct amdgpu_job *job,
836836
struct amdgpu_ib *ib,
837-
bool ctx_switch)
837+
uint32_t flags)
838838
{
839839
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
840840

drivers/gpu/drm/amd/amdgpu/vce_v4_0.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ static int vce_v4_0_set_powergating_state(void *handle,
947947
#endif
948948

949949
static void vce_v4_0_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_job *job,
950-
struct amdgpu_ib *ib, bool ctx_switch)
950+
struct amdgpu_ib *ib, uint32_t flags)
951951
{
952952
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
953953

drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,7 +1371,7 @@ static void vcn_v1_0_dec_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64
13711371
static void vcn_v1_0_dec_ring_emit_ib(struct amdgpu_ring *ring,
13721372
struct amdgpu_job *job,
13731373
struct amdgpu_ib *ib,
1374-
bool ctx_switch)
1374+
uint32_t flags)
13751375
{
13761376
struct amdgpu_device *adev = ring->adev;
13771377
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
@@ -1531,7 +1531,7 @@ static void vcn_v1_0_enc_ring_insert_end(struct amdgpu_ring *ring)
15311531
static void vcn_v1_0_enc_ring_emit_ib(struct amdgpu_ring *ring,
15321532
struct amdgpu_job *job,
15331533
struct amdgpu_ib *ib,
1534-
bool ctx_switch)
1534+
uint32_t flags)
15351535
{
15361536
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
15371537

@@ -1736,7 +1736,7 @@ static void vcn_v1_0_jpeg_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u6
17361736
static void vcn_v1_0_jpeg_ring_emit_ib(struct amdgpu_ring *ring,
17371737
struct amdgpu_job *job,
17381738
struct amdgpu_ib *ib,
1739-
bool ctx_switch)
1739+
uint32_t flags)
17401740
{
17411741
struct amdgpu_device *adev = ring->adev;
17421742
unsigned vmid = AMDGPU_JOB_GET_VMID(job);

0 commit comments

Comments
 (0)