[PATCH 3/5] drm/amdgpu/vcn: Add firmware share memory support
James Zhu
jamesz at amd.com
Mon Mar 30 15:48:30 UTC 2020
On 2020-03-30 10:21 a.m., Leo Liu wrote:
>
> On 2020-03-30 8:13 a.m., James Zhu wrote:
>> Added firmware share memory support for VCN. Current multiple
>> queue mode is enabled only.
>>
>> Signed-off-by: James Zhu <James.Zhu at amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 13 +++++++++++++
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h | 24 ++++++++++++++++++++++++
>> 2 files changed, 37 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>> index 7a0b074..328b6ce 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>> @@ -182,6 +182,14 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)
>> return r;
>> }
>> }
>> +
>> + r = amdgpu_bo_create_kernel(adev,
>> AMDGPU_GPU_PAGE_ALIGN(sizeof(struct amdgpu_fw_shared)),
>> + PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM,
>> &adev->vcn.inst[i].fw_shared_bo,
>> + &adev->vcn.inst[i].fw_shared_gpu_addr,
>> &adev->vcn.inst[i].fw_shared_cpu_addr);
>> + if (r) {
>> + dev_err(adev->dev, "VCN %d (%d) failed to allocate
>> fimware shared bo\n", i, r);
>> + return r;
>> + }
>> }
>> return 0;
>> @@ -196,6 +204,11 @@ int amdgpu_vcn_sw_fini(struct amdgpu_device *adev)
>> for (j = 0; j < adev->vcn.num_vcn_inst; ++j) {
>> if (adev->vcn.harvest_config & (1 << j))
>> continue;
>> +
>> + amdgpu_bo_free_kernel(&adev->vcn.inst[j].fw_shared_bo,
>> + &adev->vcn.inst[j].fw_shared_gpu_addr,
>> + (void **)&adev->vcn.inst[j].fw_shared_cpu_addr);
>> +
>> if (adev->vcn.indirect_sram) {
>> amdgpu_bo_free_kernel(&adev->vcn.inst[j].dpg_sram_bo,
>> &adev->vcn.inst[j].dpg_sram_gpu_addr,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>> index e913de8..853f0cc 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>> @@ -179,11 +179,14 @@ struct amdgpu_vcn_inst {
>> struct amdgpu_irq_src irq;
>> struct amdgpu_vcn_reg external;
>> struct amdgpu_bo *dpg_sram_bo;
>> + struct amdgpu_bo *fw_shared_bo;
>> struct dpg_pause_state pause_state;
>> void *dpg_sram_cpu_addr;
>> uint64_t dpg_sram_gpu_addr;
>> uint32_t *dpg_sram_curr_addr;
>> atomic_t dpg_enc_submission_cnt;
>> + void *fw_shared_cpu_addr;
>> + uint64_t fw_shared_gpu_addr;
>> };
>> struct amdgpu_vcn {
>> @@ -209,6 +212,27 @@ struct amdgpu_vcn {
>> int inst_idx, struct dpg_pause_state *new_state);
>> };
>> +#define AMDGPU_VCN_MULTI_QUEUE_FLAG (1 << 8)
>> +
>> +enum fw_queue_mode {
>> + fw_queue_ring_reset = 1,
>> + fw_queue_dpg_hold_off = 2,
>> +};
>
> Please move the define and enum to the top as others. With that fixed,
> the series are
Sure. Can you review the patches also?
Thanks!
James
>
> Reviewed-by: Leo Liu <leo.liu at amd.com>
>
>
>
>> +
>> +struct amdgpu_fw_shared_multi_queue {
>> + uint8_t decode_queue_mode;
>> + uint8_t encode_generalpurpose_queue_mode;
>> + uint8_t encode_lowlatency_queue_mode;
>> + uint8_t encode_realtime_queue_mode;
>> + uint8_t padding[4];
>> +};
>> +
>> +struct amdgpu_fw_shared {
>> + uint32_t present_flag_0;
>> + uint8_t pad[53];
>> + struct amdgpu_fw_shared_multi_queue multi_queue;
>> +} __attribute__((__packed__));
>> +
>> 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);
More information about the amd-gfx
mailing list