Lines Matching refs:pm

40 static void pm_calc_rlib_size(struct packet_manager *pm,  in pm_calc_rlib_size()  argument
47 struct kfd_dev *dev = pm->dqm->dev; in pm_calc_rlib_size()
49 process_count = pm->dqm->processes_count; in pm_calc_rlib_size()
50 queue_count = pm->dqm->queue_count; in pm_calc_rlib_size()
51 compute_queue_count = queue_count - pm->dqm->sdma_queue_count; in pm_calc_rlib_size()
64 compute_queue_count > get_queues_num(pm->dqm)) { in pm_calc_rlib_size()
69 map_queue_size = pm->pmf->map_queues_size; in pm_calc_rlib_size()
71 *rlib_size = process_count * pm->pmf->map_process_size + in pm_calc_rlib_size()
79 *rlib_size += pm->pmf->runlist_size; in pm_calc_rlib_size()
84 static int pm_allocate_runlist_ib(struct packet_manager *pm, in pm_allocate_runlist_ib() argument
92 if (WARN_ON(pm->allocated)) in pm_allocate_runlist_ib()
95 pm_calc_rlib_size(pm, rl_buffer_size, is_over_subscription); in pm_allocate_runlist_ib()
97 mutex_lock(&pm->lock); in pm_allocate_runlist_ib()
99 retval = kfd_gtt_sa_allocate(pm->dqm->dev, *rl_buffer_size, in pm_allocate_runlist_ib()
100 &pm->ib_buffer_obj); in pm_allocate_runlist_ib()
107 *(void **)rl_buffer = pm->ib_buffer_obj->cpu_ptr; in pm_allocate_runlist_ib()
108 *rl_gpu_buffer = pm->ib_buffer_obj->gpu_addr; in pm_allocate_runlist_ib()
111 pm->allocated = true; in pm_allocate_runlist_ib()
114 mutex_unlock(&pm->lock); in pm_allocate_runlist_ib()
118 static int pm_create_runlist_ib(struct packet_manager *pm, in pm_create_runlist_ib() argument
134 retval = pm_allocate_runlist_ib(pm, &rl_buffer, rl_gpu_addr, in pm_create_runlist_ib()
140 pm->ib_size_bytes = alloc_size_bytes; in pm_create_runlist_ib()
143 pm->dqm->processes_count, pm->dqm->queue_count); in pm_create_runlist_ib()
149 if (proccesses_mapped >= pm->dqm->processes_count) { in pm_create_runlist_ib()
151 pm_release_ib(pm); in pm_create_runlist_ib()
155 retval = pm->pmf->map_process(pm, &rl_buffer[rl_wptr], qpd); in pm_create_runlist_ib()
160 inc_wptr(&rl_wptr, pm->pmf->map_process_size, in pm_create_runlist_ib()
170 retval = pm->pmf->map_queues(pm, in pm_create_runlist_ib()
178 pm->pmf->map_queues_size, in pm_create_runlist_ib()
189 retval = pm->pmf->map_queues(pm, in pm_create_runlist_ib()
198 pm->pmf->map_queues_size, in pm_create_runlist_ib()
206 retval = pm->pmf->runlist(pm, &rl_buffer[rl_wptr], in pm_create_runlist_ib()
218 int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm) in pm_init() argument
229 pm->pmf = &kfd_vi_pm_funcs; in pm_init()
233 pm->pmf = &kfd_v9_pm_funcs; in pm_init()
241 pm->dqm = dqm; in pm_init()
242 mutex_init(&pm->lock); in pm_init()
243 pm->priv_queue = kernel_queue_init(dqm->dev, KFD_QUEUE_TYPE_HIQ); in pm_init()
244 if (!pm->priv_queue) { in pm_init()
245 mutex_destroy(&pm->lock); in pm_init()
248 pm->allocated = false; in pm_init()
253 void pm_uninit(struct packet_manager *pm) in pm_uninit() argument
255 mutex_destroy(&pm->lock); in pm_uninit()
256 kernel_queue_uninit(pm->priv_queue); in pm_uninit()
259 int pm_send_set_resources(struct packet_manager *pm, in pm_send_set_resources() argument
265 size = pm->pmf->set_resources_size; in pm_send_set_resources()
266 mutex_lock(&pm->lock); in pm_send_set_resources()
267 pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue, in pm_send_set_resources()
276 retval = pm->pmf->set_resources(pm, buffer, res); in pm_send_set_resources()
278 pm->priv_queue->ops.submit_packet(pm->priv_queue); in pm_send_set_resources()
280 pm->priv_queue->ops.rollback_packet(pm->priv_queue); in pm_send_set_resources()
283 mutex_unlock(&pm->lock); in pm_send_set_resources()
288 int pm_send_runlist(struct packet_manager *pm, struct list_head *dqm_queues) in pm_send_runlist() argument
295 retval = pm_create_runlist_ib(pm, dqm_queues, &rl_gpu_ib_addr, in pm_send_runlist()
302 packet_size_dwords = pm->pmf->runlist_size / sizeof(uint32_t); in pm_send_runlist()
303 mutex_lock(&pm->lock); in pm_send_runlist()
305 retval = pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue, in pm_send_runlist()
310 retval = pm->pmf->runlist(pm, rl_buffer, rl_gpu_ib_addr, in pm_send_runlist()
315 pm->priv_queue->ops.submit_packet(pm->priv_queue); in pm_send_runlist()
317 mutex_unlock(&pm->lock); in pm_send_runlist()
322 pm->priv_queue->ops.rollback_packet(pm->priv_queue); in pm_send_runlist()
324 mutex_unlock(&pm->lock); in pm_send_runlist()
326 pm_release_ib(pm); in pm_send_runlist()
330 int pm_send_query_status(struct packet_manager *pm, uint64_t fence_address, in pm_send_query_status() argument
339 size = pm->pmf->query_status_size; in pm_send_query_status()
340 mutex_lock(&pm->lock); in pm_send_query_status()
341 pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue, in pm_send_query_status()
349 retval = pm->pmf->query_status(pm, buffer, fence_address, fence_value); in pm_send_query_status()
351 pm->priv_queue->ops.submit_packet(pm->priv_queue); in pm_send_query_status()
353 pm->priv_queue->ops.rollback_packet(pm->priv_queue); in pm_send_query_status()
356 mutex_unlock(&pm->lock); in pm_send_query_status()
360 int pm_send_unmap_queue(struct packet_manager *pm, enum kfd_queue_type type, in pm_send_unmap_queue() argument
368 size = pm->pmf->unmap_queues_size; in pm_send_unmap_queue()
369 mutex_lock(&pm->lock); in pm_send_unmap_queue()
370 pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue, in pm_send_unmap_queue()
378 retval = pm->pmf->unmap_queues(pm, buffer, type, filter, filter_param, in pm_send_unmap_queue()
381 pm->priv_queue->ops.submit_packet(pm->priv_queue); in pm_send_unmap_queue()
383 pm->priv_queue->ops.rollback_packet(pm->priv_queue); in pm_send_unmap_queue()
386 mutex_unlock(&pm->lock); in pm_send_unmap_queue()
390 void pm_release_ib(struct packet_manager *pm) in pm_release_ib() argument
392 mutex_lock(&pm->lock); in pm_release_ib()
393 if (pm->allocated) { in pm_release_ib()
394 kfd_gtt_sa_free(pm->dqm->dev, pm->ib_buffer_obj); in pm_release_ib()
395 pm->allocated = false; in pm_release_ib()
397 mutex_unlock(&pm->lock); in pm_release_ib()
404 struct packet_manager *pm = data; in pm_debugfs_runlist() local
406 mutex_lock(&pm->lock); in pm_debugfs_runlist()
408 if (!pm->allocated) { in pm_debugfs_runlist()
414 pm->ib_buffer_obj->cpu_ptr, pm->ib_size_bytes, false); in pm_debugfs_runlist()
417 mutex_unlock(&pm->lock); in pm_debugfs_runlist()
421 int pm_debugfs_hang_hws(struct packet_manager *pm) in pm_debugfs_hang_hws() argument
426 size = pm->pmf->query_status_size; in pm_debugfs_hang_hws()
427 mutex_lock(&pm->lock); in pm_debugfs_hang_hws()
428 pm->priv_queue->ops.acquire_packet_buffer(pm->priv_queue, in pm_debugfs_hang_hws()
436 pm->priv_queue->ops.submit_packet(pm->priv_queue); in pm_debugfs_hang_hws()
442 mutex_unlock(&pm->lock); in pm_debugfs_hang_hws()