[PATCH 2/5] drm/amdgpu/vcn:set vcn encode ring priority level
Christian König
christian.koenig at amd.com
Thu Aug 26 12:34:50 UTC 2021
Am 26.08.21 um 14:31 schrieb Sharma, Shashank:
> On 8/26/2021 5:54 PM, Christian König wrote:
>> Am 26.08.21 um 13:32 schrieb Sharma, Shashank:
>>> Hi Satyajit,
>>>
>>> On 8/26/2021 12:43 PM, Satyajit Sahu wrote:
>>>> There are multiple rings available in VCN encode. Map each ring
>>>> to different priority.
>>>>
>>>> Signed-off-by: Satyajit Sahu <satyajit.sahu at amd.com>
>>>> ---
>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 14 ++++++++++++++
>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h | 9 +++++++++
>>>> 2 files changed, 23 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>>>> index 6780df0fb265..ce40e7a3ce05 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>>>> @@ -951,3 +951,17 @@ int amdgpu_vcn_enc_ring_test_ib(struct
>>>> amdgpu_ring *ring, long timeout)
>>>> return r;
>>>> }
>>>> +
>>>> +enum vcn_enc_ring_priority amdgpu_vcn_get_enc_ring_prio(int index)
>>>> +{
>>>> + switch(index) {
>>>> + case 0:
>>>
>>> As discussed in the previous patches, its far better to have MACROS
>>> or enums instead of having 0/1/2 cases. As a matter of fact, we can
>>> always call it RING_0 RING_1 and so on.
>>
>> I strongly disagree. Adding macros or enums just to have names for
>> the numbered rings doesn't gives you any advantage at all. That's
>> just extra loc.
>>
>
> Honestly, when I just see case '0', its a magic number for me, and is
> making code less readable, harder for review, and even harder to
> debug. RING_0 tells me that we are mapping a ring to a priority, and
> clarifies the intention.
Well we should probably rename the variable then, e.g. like ring_idx or
just ring.
A switch on the variable named "ring" with a value of 0 has the same
meaning than RING_0, it's just not so much code to maintain.
Christian.
>
> - Shashank
>
>> We could use the ring pointers to identify a ring instead, but using
>> the switch here which is then used inside the init loop is perfectly
>> fine.
>>
>> Regards,
>> Christian.
>>
>>>
>>>
>>> If this is being done just for the traditional reasons, we can have
>>> a separate patch to replace it across the driver as well.
>>>
>>> - Shashank
>>>
>>>
>>>> + return AMDGPU_VCN_ENC_PRIO_NORMAL;
>>>> + case 1:
>>>> + return AMDGPU_VCN_ENC_PRIO_HIGH;
>>>> + case 2:
>>>> + return AMDGPU_VCN_ENC_PRIO_VERY_HIGH;
>>>> + default:
>>>> + return AMDGPU_VCN_ENC_PRIO_NORMAL;
>>>> + }
>>>> +}
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>>>> index d74c62b49795..938ee73dfbfc 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>>>> @@ -290,6 +290,13 @@ enum vcn_ring_type {
>>>> VCN_UNIFIED_RING,
>>>> };
>>>> +enum vcn_enc_ring_priority {
>>>> + AMDGPU_VCN_ENC_PRIO_NORMAL = 1,
>>>> + AMDGPU_VCN_ENC_PRIO_HIGH,
>>>> + AMDGPU_VCN_ENC_PRIO_VERY_HIGH,
>>>> + AMDGPU_VCN_ENC_PRIO_MAX
>>>> +};
>>>> +
>>>> int amdgpu_vcn_sw_init(struct amdgpu_device *adev);
>>>> int amdgpu_vcn_sw_fini(struct amdgpu_device *adev);
>>>> int amdgpu_vcn_suspend(struct amdgpu_device *adev);
>>>> @@ -308,4 +315,6 @@ int amdgpu_vcn_dec_sw_ring_test_ib(struct
>>>> amdgpu_ring *ring, long timeout);
>>>> int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring);
>>>> int amdgpu_vcn_enc_ring_test_ib(struct amdgpu_ring *ring, long
>>>> timeout);
>>>> +enum vcn_enc_ring_priority amdgpu_vcn_get_enc_ring_prio(int index);
>>>> +
>>>> #endif
>>>>
>>
More information about the amd-gfx
mailing list