On Wed, Jul 10, 2024 at 2:10 PM <boyuan.zhang@xxxxxxx> wrote: > > From: Boyuan Zhang <boyuan.zhang@xxxxxxx> > > Determine whether VCN using unified queue in sw_init, instead of calling > functions later on. > > Signed-off-by: Boyuan Zhang <boyuan.zhang@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 39 ++++++++++--------------- > drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h | 1 + > 2 files changed, 16 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c > index dad5f9722e14..43bed7730bd1 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c > @@ -139,6 +139,10 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) > } > } > > + /* from vcn4 and above, only unified queue is used */ > + adev->vcn.using_unified_queue = > + amdgpu_ip_version(adev, UVD_HWIP, 0) >= IP_VERSION(4, 0, 0) ? true : false; You can drop the "? true : false" part. A lot of static checkers will complain about that as it's not necessary. With that fixed, the series is: Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > + > hdr = (const struct common_firmware_header *)adev->vcn.fw->data; > adev->vcn.fw_version = le32_to_cpu(hdr->ucode_version); > > @@ -266,18 +270,6 @@ int amdgpu_vcn_sw_fini(struct amdgpu_device *adev) > return 0; > } > > -/* from vcn4 and above, only unified queue is used */ > -static bool amdgpu_vcn_using_unified_queue(struct amdgpu_ring *ring) > -{ > - struct amdgpu_device *adev = ring->adev; > - bool ret = false; > - > - if (amdgpu_ip_version(adev, UVD_HWIP, 0) >= IP_VERSION(4, 0, 0)) > - ret = true; > - > - return ret; > -} > - > bool amdgpu_vcn_is_disabled_vcn(struct amdgpu_device *adev, enum vcn_ring_type type, uint32_t vcn_instance) > { > bool ret = false; > @@ -747,12 +739,11 @@ static int amdgpu_vcn_dec_sw_send_msg(struct amdgpu_ring *ring, > struct amdgpu_job *job; > struct amdgpu_ib *ib; > uint64_t addr = AMDGPU_GPU_PAGE_ALIGN(ib_msg->gpu_addr); > - bool sq = amdgpu_vcn_using_unified_queue(ring); > uint32_t *ib_checksum; > uint32_t ib_pack_in_dw; > int i, r; > > - if (sq) > + if (adev->vcn.using_unified_queue) > ib_size_dw += 8; > > r = amdgpu_job_alloc_with_ib(ring->adev, NULL, NULL, > @@ -765,7 +756,7 @@ static int amdgpu_vcn_dec_sw_send_msg(struct amdgpu_ring *ring, > ib->length_dw = 0; > > /* single queue headers */ > - if (sq) { > + if (adev->vcn.using_unified_queue) { > ib_pack_in_dw = sizeof(struct amdgpu_vcn_decode_buffer) / sizeof(uint32_t) > + 4 + 2; /* engine info + decoding ib in dw */ > ib_checksum = amdgpu_vcn_unified_ring_ib_header(ib, ib_pack_in_dw, false); > @@ -784,7 +775,7 @@ static int amdgpu_vcn_dec_sw_send_msg(struct amdgpu_ring *ring, > for (i = ib->length_dw; i < ib_size_dw; ++i) > ib->ptr[i] = 0x0; > > - if (sq) > + if (adev->vcn.using_unified_queue) > amdgpu_vcn_unified_ring_ib_checksum(&ib_checksum, ib_pack_in_dw); > > r = amdgpu_job_submit_direct(job, ring, &f); > @@ -874,15 +865,15 @@ static int amdgpu_vcn_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t hand > struct dma_fence **fence) > { > unsigned int ib_size_dw = 16; > + struct amdgpu_device *adev = ring->adev; > struct amdgpu_job *job; > struct amdgpu_ib *ib; > struct dma_fence *f = NULL; > uint32_t *ib_checksum = NULL; > uint64_t addr; > - bool sq = amdgpu_vcn_using_unified_queue(ring); > int i, r; > > - if (sq) > + if (adev->vcn.using_unified_queue) > ib_size_dw += 8; > > r = amdgpu_job_alloc_with_ib(ring->adev, NULL, NULL, > @@ -896,7 +887,7 @@ static int amdgpu_vcn_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t hand > > ib->length_dw = 0; > > - if (sq) > + if (adev->vcn.using_unified_queue) > ib_checksum = amdgpu_vcn_unified_ring_ib_header(ib, 0x11, true); > > ib->ptr[ib->length_dw++] = 0x00000018; > @@ -918,7 +909,7 @@ static int amdgpu_vcn_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t hand > for (i = ib->length_dw; i < ib_size_dw; ++i) > ib->ptr[i] = 0x0; > > - if (sq) > + if (adev->vcn.using_unified_queue) > amdgpu_vcn_unified_ring_ib_checksum(&ib_checksum, 0x11); > > r = amdgpu_job_submit_direct(job, ring, &f); > @@ -941,15 +932,15 @@ static int amdgpu_vcn_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t han > struct dma_fence **fence) > { > unsigned int ib_size_dw = 16; > + struct amdgpu_device *adev = ring->adev; > struct amdgpu_job *job; > struct amdgpu_ib *ib; > struct dma_fence *f = NULL; > uint32_t *ib_checksum = NULL; > uint64_t addr; > - bool sq = amdgpu_vcn_using_unified_queue(ring); > int i, r; > > - if (sq) > + if (adev->vcn.using_unified_queue) > ib_size_dw += 8; > > r = amdgpu_job_alloc_with_ib(ring->adev, NULL, NULL, > @@ -963,7 +954,7 @@ static int amdgpu_vcn_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t han > > ib->length_dw = 0; > > - if (sq) > + if (adev->vcn.using_unified_queue) > ib_checksum = amdgpu_vcn_unified_ring_ib_header(ib, 0x11, true); > > ib->ptr[ib->length_dw++] = 0x00000018; > @@ -985,7 +976,7 @@ static int amdgpu_vcn_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t han > for (i = ib->length_dw; i < ib_size_dw; ++i) > ib->ptr[i] = 0x0; > > - if (sq) > + if (adev->vcn.using_unified_queue) > amdgpu_vcn_unified_ring_ib_checksum(&ib_checksum, 0x11); > > r = amdgpu_job_submit_direct(job, ring, &f); > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h > index 081695e74932..838c0935f683 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h > @@ -329,6 +329,7 @@ struct amdgpu_vcn { > > uint16_t inst_mask; > uint8_t num_inst_per_aid; > + bool using_unified_queue; > }; > > struct amdgpu_fw_shared_rb_ptrs_struct { > -- > 2.34.1 >