Lines Matching refs:adev

75 int amdgpu_vce_sw_init(struct amdgpu_device *adev, unsigned long size)  in amdgpu_vce_sw_init()  argument
82 INIT_DELAYED_WORK(&adev->vce.idle_work, amdgpu_vce_idle_work_handler); in amdgpu_vce_sw_init()
84 switch (adev->asic_type) { in amdgpu_vce_sw_init()
119 r = request_firmware(&adev->vce.fw, fw_name, adev->dev); in amdgpu_vce_sw_init()
121 dev_err(adev->dev, "amdgpu_vce: Can't load firmware \"%s\"\n", in amdgpu_vce_sw_init()
126 r = amdgpu_ucode_validate(adev->vce.fw); in amdgpu_vce_sw_init()
128 dev_err(adev->dev, "amdgpu_vce: Can't validate firmware \"%s\"\n", in amdgpu_vce_sw_init()
130 release_firmware(adev->vce.fw); in amdgpu_vce_sw_init()
131 adev->vce.fw = NULL; in amdgpu_vce_sw_init()
135 hdr = (const struct common_firmware_header *)adev->vce.fw->data; in amdgpu_vce_sw_init()
143 adev->vce.fw_version = ((version_major << 24) | (version_minor << 16) | in amdgpu_vce_sw_init()
148 r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, in amdgpu_vce_sw_init()
151 NULL, NULL, &adev->vce.vcpu_bo); in amdgpu_vce_sw_init()
153 dev_err(adev->dev, "(%d) failed to allocate VCE bo\n", r); in amdgpu_vce_sw_init()
157 r = amdgpu_bo_reserve(adev->vce.vcpu_bo, false); in amdgpu_vce_sw_init()
159 amdgpu_bo_unref(&adev->vce.vcpu_bo); in amdgpu_vce_sw_init()
160 dev_err(adev->dev, "(%d) failed to reserve VCE bo\n", r); in amdgpu_vce_sw_init()
164 r = amdgpu_bo_pin(adev->vce.vcpu_bo, AMDGPU_GEM_DOMAIN_VRAM, in amdgpu_vce_sw_init()
165 &adev->vce.gpu_addr); in amdgpu_vce_sw_init()
166 amdgpu_bo_unreserve(adev->vce.vcpu_bo); in amdgpu_vce_sw_init()
168 amdgpu_bo_unref(&adev->vce.vcpu_bo); in amdgpu_vce_sw_init()
169 dev_err(adev->dev, "(%d) VCE bo pin failed\n", r); in amdgpu_vce_sw_init()
174 atomic_set(&adev->vce.handles[i], 0); in amdgpu_vce_sw_init()
175 adev->vce.filp[i] = NULL; in amdgpu_vce_sw_init()
188 int amdgpu_vce_sw_fini(struct amdgpu_device *adev) in amdgpu_vce_sw_fini() argument
190 if (adev->vce.vcpu_bo == NULL) in amdgpu_vce_sw_fini()
193 amdgpu_bo_unref(&adev->vce.vcpu_bo); in amdgpu_vce_sw_fini()
195 amdgpu_ring_fini(&adev->vce.ring[0]); in amdgpu_vce_sw_fini()
196 amdgpu_ring_fini(&adev->vce.ring[1]); in amdgpu_vce_sw_fini()
198 release_firmware(adev->vce.fw); in amdgpu_vce_sw_fini()
209 int amdgpu_vce_suspend(struct amdgpu_device *adev) in amdgpu_vce_suspend() argument
213 if (adev->vce.vcpu_bo == NULL) in amdgpu_vce_suspend()
217 if (atomic_read(&adev->vce.handles[i])) in amdgpu_vce_suspend()
223 cancel_delayed_work_sync(&adev->vce.idle_work); in amdgpu_vce_suspend()
234 int amdgpu_vce_resume(struct amdgpu_device *adev) in amdgpu_vce_resume() argument
241 if (adev->vce.vcpu_bo == NULL) in amdgpu_vce_resume()
244 r = amdgpu_bo_reserve(adev->vce.vcpu_bo, false); in amdgpu_vce_resume()
246 dev_err(adev->dev, "(%d) failed to reserve VCE bo\n", r); in amdgpu_vce_resume()
250 r = amdgpu_bo_kmap(adev->vce.vcpu_bo, &cpu_addr); in amdgpu_vce_resume()
252 amdgpu_bo_unreserve(adev->vce.vcpu_bo); in amdgpu_vce_resume()
253 dev_err(adev->dev, "(%d) VCE map failed\n", r); in amdgpu_vce_resume()
257 hdr = (const struct common_firmware_header *)adev->vce.fw->data; in amdgpu_vce_resume()
259 memcpy(cpu_addr, (adev->vce.fw->data) + offset, in amdgpu_vce_resume()
260 (adev->vce.fw->size) - offset); in amdgpu_vce_resume()
262 amdgpu_bo_kunmap(adev->vce.vcpu_bo); in amdgpu_vce_resume()
264 amdgpu_bo_unreserve(adev->vce.vcpu_bo); in amdgpu_vce_resume()
278 struct amdgpu_device *adev = in amdgpu_vce_idle_work_handler() local
281 if ((amdgpu_fence_count_emitted(&adev->vce.ring[0]) == 0) && in amdgpu_vce_idle_work_handler()
282 (amdgpu_fence_count_emitted(&adev->vce.ring[1]) == 0)) { in amdgpu_vce_idle_work_handler()
283 if (adev->pm.dpm_enabled) { in amdgpu_vce_idle_work_handler()
284 amdgpu_dpm_enable_vce(adev, false); in amdgpu_vce_idle_work_handler()
286 amdgpu_asic_set_vce_clocks(adev, 0, 0); in amdgpu_vce_idle_work_handler()
289 schedule_delayed_work(&adev->vce.idle_work, in amdgpu_vce_idle_work_handler()
301 static void amdgpu_vce_note_usage(struct amdgpu_device *adev) in amdgpu_vce_note_usage() argument
304 bool set_clocks = !cancel_delayed_work_sync(&adev->vce.idle_work); in amdgpu_vce_note_usage()
305 set_clocks &= schedule_delayed_work(&adev->vce.idle_work, in amdgpu_vce_note_usage()
308 if (adev->pm.dpm_enabled) { in amdgpu_vce_note_usage()
314 if (adev->pm.dpm_enabled) { in amdgpu_vce_note_usage()
315 amdgpu_dpm_enable_vce(adev, true); in amdgpu_vce_note_usage()
317 amdgpu_asic_set_vce_clocks(adev, 53300, 40000); in amdgpu_vce_note_usage()
330 void amdgpu_vce_free_handles(struct amdgpu_device *adev, struct drm_file *filp) in amdgpu_vce_free_handles() argument
332 struct amdgpu_ring *ring = &adev->vce.ring[0]; in amdgpu_vce_free_handles()
335 uint32_t handle = atomic_read(&adev->vce.handles[i]); in amdgpu_vce_free_handles()
336 if (!handle || adev->vce.filp[i] != filp) in amdgpu_vce_free_handles()
339 amdgpu_vce_note_usage(adev); in amdgpu_vce_free_handles()
345 adev->vce.filp[i] = NULL; in amdgpu_vce_free_handles()
346 atomic_set(&adev->vce.handles[i], 0); in amdgpu_vce_free_handles()
353 amdgpu_ib_free(job->adev, job->ibs); in amdgpu_vce_free_job()
374 struct amdgpu_device *adev = ring->adev; in amdgpu_vce_get_create_msg() local
396 if ((ring->adev->vce.fw_version >> 24) >= 52) in amdgpu_vce_get_create_msg()
411 if ((ring->adev->vce.fw_version >> 24) >= 52) { in amdgpu_vce_get_create_msg()
427 r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, ib, 1, in amdgpu_vce_get_create_msg()
439 amdgpu_ib_free(adev, ib); in amdgpu_vce_get_create_msg()
460 struct amdgpu_device *adev = ring->adev; in amdgpu_vce_get_destroy_msg() local
494 r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, ib, 1, in amdgpu_vce_get_destroy_msg()
506 amdgpu_ib_free(adev, ib); in amdgpu_vce_get_destroy_msg()
579 if (atomic_read(&p->adev->vce.handles[i]) == handle) { in amdgpu_vce_validate_handle()
580 if (p->adev->vce.filp[i] != p->filp) { in amdgpu_vce_validate_handle()
590 if (!atomic_cmpxchg(&p->adev->vce.handles[i], 0, handle)) { in amdgpu_vce_validate_handle()
591 p->adev->vce.filp[i] = p->filp; in amdgpu_vce_validate_handle()
592 p->adev->vce.img_size[i] = 0; in amdgpu_vce_validate_handle()
620 amdgpu_vce_note_usage(p->adev); in amdgpu_vce_ring_parse_cs()
645 size = &p->adev->vce.img_size[session_idx]; in amdgpu_vce_ring_parse_cs()
740 atomic_cmpxchg(&p->adev->vce.handles[i], handle, 0); in amdgpu_vce_ring_parse_cs()
813 struct amdgpu_device *adev = ring->adev; in amdgpu_vce_ring_test_ring() local
827 for (i = 0; i < adev->usec_timeout; i++) { in amdgpu_vce_ring_test_ring()
833 if (i < adev->usec_timeout) { in amdgpu_vce_ring_test_ring()
857 if (ring == &ring->adev->vce.ring[1]) in amdgpu_vce_ring_test_ib()