Lines Matching refs:pm
46 static void pm_calc_rlib_size(struct packet_manager *pm, in pm_calc_rlib_size() argument
54 struct kfd_node *node = pm->dqm->dev; in pm_calc_rlib_size()
57 process_count = pm->dqm->processes_count; in pm_calc_rlib_size()
58 queue_count = pm->dqm->active_queue_count; in pm_calc_rlib_size()
59 compute_queue_count = pm->dqm->active_cp_queue_count; in pm_calc_rlib_size()
60 gws_queue_count = pm->dqm->gws_queue_count; in pm_calc_rlib_size()
74 if (compute_queue_count > get_cp_queues_num(pm->dqm)) in pm_calc_rlib_size()
84 map_queue_size = pm->pmf->map_queues_size; in pm_calc_rlib_size()
86 *rlib_size = process_count * pm->pmf->map_process_size + in pm_calc_rlib_size()
94 *rlib_size += pm->pmf->runlist_size; in pm_calc_rlib_size()
99 static int pm_allocate_runlist_ib(struct packet_manager *pm, in pm_allocate_runlist_ib() argument
106 struct kfd_node *node = pm->dqm->dev; in pm_allocate_runlist_ib()
110 if (WARN_ON(pm->allocated)) in pm_allocate_runlist_ib()
113 pm_calc_rlib_size(pm, rl_buffer_size, is_over_subscription, in pm_allocate_runlist_ib()
116 mutex_lock(&pm->lock); in pm_allocate_runlist_ib()
118 retval = kfd_gtt_sa_allocate(node, *rl_buffer_size, &pm->ib_buffer_obj); in pm_allocate_runlist_ib()
125 *(void **)rl_buffer = pm->ib_buffer_obj->cpu_ptr; in pm_allocate_runlist_ib()
126 *rl_gpu_buffer = pm->ib_buffer_obj->gpu_addr; in pm_allocate_runlist_ib()
129 pm->allocated = true; in pm_allocate_runlist_ib()
132 mutex_unlock(&pm->lock); in pm_allocate_runlist_ib()
136 static int pm_create_runlist_ib(struct packet_manager *pm, in pm_create_runlist_ib() argument
143 struct kfd_node *node = pm->dqm->dev; in pm_create_runlist_ib()
169 retval = pm_allocate_runlist_ib(pm, &rl_buffer, rl_gpu_addr, in pm_create_runlist_ib()
176 pm->ib_size_bytes = alloc_size_bytes; in pm_create_runlist_ib()
179 pm->dqm->processes_count, pm->dqm->active_queue_count); in pm_create_runlist_ib()
189 if (processes_mapped >= pm->dqm->processes_count) { in pm_create_runlist_ib()
191 pm_release_ib(pm); in pm_create_runlist_ib()
195 retval = pm->pmf->map_process(pm, &rl_buffer[rl_wptr], qpd); in pm_create_runlist_ib()
200 inc_wptr(&rl_wptr, pm->pmf->map_process_size, in pm_create_runlist_ib()
211 retval = pm->pmf->map_queues(pm, in pm_create_runlist_ib()
219 pm->pmf->map_queues_size, in pm_create_runlist_ib()
231 retval = pm->pmf->map_queues(pm, in pm_create_runlist_ib()
240 pm->pmf->map_queues_size, in pm_create_runlist_ib()
254 if (!pm->is_over_subscription) in pm_create_runlist_ib()
265 retval = pm->pmf->runlist(pm, &rl_buffer[rl_wptr], in pm_create_runlist_ib()
270 pm->is_over_subscription = !!is_over_subscription; in pm_create_runlist_ib()
279 int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm) in pm_init() argument
292 pm->pmf = &kfd_vi_pm_funcs; in pm_init()
299 pm->pmf = &kfd_aldebaran_pm_funcs; in pm_init()
301 pm->pmf = &kfd_v9_pm_funcs; in pm_init()
309 pm->dqm = dqm; in pm_init()
310 mutex_init(&pm->lock); in pm_init()
311 pm->priv_queue = kernel_queue_init(dqm->dev, KFD_QUEUE_TYPE_HIQ); in pm_init()
312 if (!pm->priv_queue) { in pm_init()
313 mutex_destroy(&pm->lock); in pm_init()
316 pm->allocated = false; in pm_init()
321 void pm_uninit(struct packet_manager *pm) in pm_uninit() argument
323 mutex_destroy(&pm->lock); in pm_uninit()
324 kernel_queue_uninit(pm->priv_queue); in pm_uninit()
325 pm->priv_queue = NULL; in pm_uninit()
328 int pm_send_set_resources(struct packet_manager *pm, in pm_send_set_resources() argument
331 struct kfd_node *node = pm->dqm->dev; in pm_send_set_resources()
336 size = pm->pmf->set_resources_size; in pm_send_set_resources()
337 mutex_lock(&pm->lock); in pm_send_set_resources()
338 kq_acquire_packet_buffer(pm->priv_queue, in pm_send_set_resources()
347 retval = pm->pmf->set_resources(pm, buffer, res); in pm_send_set_resources()
349 retval = kq_submit_packet(pm->priv_queue); in pm_send_set_resources()
351 kq_rollback_packet(pm->priv_queue); in pm_send_set_resources()
354 mutex_unlock(&pm->lock); in pm_send_set_resources()
359 int pm_send_runlist(struct packet_manager *pm, struct list_head *dqm_queues) in pm_send_runlist() argument
366 retval = pm_create_runlist_ib(pm, dqm_queues, &rl_gpu_ib_addr, in pm_send_runlist()
373 packet_size_dwords = pm->pmf->runlist_size / sizeof(uint32_t); in pm_send_runlist()
374 mutex_lock(&pm->lock); in pm_send_runlist()
376 retval = kq_acquire_packet_buffer(pm->priv_queue, in pm_send_runlist()
381 retval = pm->pmf->runlist(pm, rl_buffer, rl_gpu_ib_addr, in pm_send_runlist()
386 retval = kq_submit_packet(pm->priv_queue); in pm_send_runlist()
388 mutex_unlock(&pm->lock); in pm_send_runlist()
393 kq_rollback_packet(pm->priv_queue); in pm_send_runlist()
395 mutex_unlock(&pm->lock); in pm_send_runlist()
397 pm_release_ib(pm); in pm_send_runlist()
401 int pm_send_query_status(struct packet_manager *pm, uint64_t fence_address, in pm_send_query_status() argument
404 struct kfd_node *node = pm->dqm->dev; in pm_send_query_status()
412 size = pm->pmf->query_status_size; in pm_send_query_status()
413 mutex_lock(&pm->lock); in pm_send_query_status()
414 kq_acquire_packet_buffer(pm->priv_queue, in pm_send_query_status()
422 retval = pm->pmf->query_status(pm, buffer, fence_address, fence_value); in pm_send_query_status()
424 retval = kq_submit_packet(pm->priv_queue); in pm_send_query_status()
426 kq_rollback_packet(pm->priv_queue); in pm_send_query_status()
429 mutex_unlock(&pm->lock); in pm_send_query_status()
442 int pm_config_dequeue_wait_counts(struct packet_manager *pm, in pm_config_dequeue_wait_counts() argument
446 struct kfd_node *node = pm->dqm->dev; in pm_config_dequeue_wait_counts()
451 if (!pm->pmf->config_dequeue_wait_counts || in pm_config_dequeue_wait_counts()
452 !pm->pmf->config_dequeue_wait_counts_size) in pm_config_dequeue_wait_counts()
455 if (cmd == KFD_DEQUEUE_WAIT_INIT && (KFD_GC_VERSION(pm->dqm->dev) < IP_VERSION(9, 4, 1) || in pm_config_dequeue_wait_counts()
456 KFD_GC_VERSION(pm->dqm->dev) >= IP_VERSION(10, 0, 0))) in pm_config_dequeue_wait_counts()
459 size = pm->pmf->config_dequeue_wait_counts_size; in pm_config_dequeue_wait_counts()
461 mutex_lock(&pm->lock); in pm_config_dequeue_wait_counts()
464 kq_acquire_packet_buffer(pm->priv_queue, in pm_config_dequeue_wait_counts()
475 retval = pm->pmf->config_dequeue_wait_counts(pm, buffer, in pm_config_dequeue_wait_counts()
478 retval = kq_submit_packet(pm->priv_queue); in pm_config_dequeue_wait_counts()
482 update_dqm_wait_times(pm->dqm); in pm_config_dequeue_wait_counts()
484 kq_rollback_packet(pm->priv_queue); in pm_config_dequeue_wait_counts()
488 mutex_unlock(&pm->lock); in pm_config_dequeue_wait_counts()
492 int pm_send_unmap_queue(struct packet_manager *pm, in pm_send_unmap_queue() argument
496 struct kfd_node *node = pm->dqm->dev; in pm_send_unmap_queue()
501 size = pm->pmf->unmap_queues_size; in pm_send_unmap_queue()
502 mutex_lock(&pm->lock); in pm_send_unmap_queue()
503 kq_acquire_packet_buffer(pm->priv_queue, in pm_send_unmap_queue()
511 retval = pm->pmf->unmap_queues(pm, buffer, filter, filter_param, reset); in pm_send_unmap_queue()
513 retval = kq_submit_packet(pm->priv_queue); in pm_send_unmap_queue()
515 kq_rollback_packet(pm->priv_queue); in pm_send_unmap_queue()
518 mutex_unlock(&pm->lock); in pm_send_unmap_queue()
522 void pm_release_ib(struct packet_manager *pm) in pm_release_ib() argument
524 mutex_lock(&pm->lock); in pm_release_ib()
525 if (pm->allocated) { in pm_release_ib()
526 kfd_gtt_sa_free(pm->dqm->dev, pm->ib_buffer_obj); in pm_release_ib()
527 pm->allocated = false; in pm_release_ib()
529 mutex_unlock(&pm->lock); in pm_release_ib()
536 struct packet_manager *pm = data; in pm_debugfs_runlist() local
538 mutex_lock(&pm->lock); in pm_debugfs_runlist()
540 if (!pm->allocated) { in pm_debugfs_runlist()
546 pm->ib_buffer_obj->cpu_ptr, pm->ib_size_bytes, false); in pm_debugfs_runlist()
549 mutex_unlock(&pm->lock); in pm_debugfs_runlist()
553 int pm_debugfs_hang_hws(struct packet_manager *pm) in pm_debugfs_hang_hws() argument
555 struct kfd_node *node = pm->dqm->dev; in pm_debugfs_hang_hws()
560 if (!pm->priv_queue) in pm_debugfs_hang_hws()
563 size = pm->pmf->query_status_size; in pm_debugfs_hang_hws()
564 mutex_lock(&pm->lock); in pm_debugfs_hang_hws()
565 kq_acquire_packet_buffer(pm->priv_queue, in pm_debugfs_hang_hws()
573 kq_submit_packet(pm->priv_queue); in pm_debugfs_hang_hws()
579 mutex_unlock(&pm->lock); in pm_debugfs_hang_hws()