Lines Matching refs:kfd

49 size_t kfd_doorbell_process_slice(struct kfd_dev *kfd)  in kfd_doorbell_process_slice()  argument
51 return roundup(kfd->device_info->doorbell_size * in kfd_doorbell_process_slice()
57 int kfd_doorbell_init(struct kfd_dev *kfd) in kfd_doorbell_init() argument
70 roundup(kfd->shared_resources.doorbell_start_offset, in kfd_doorbell_init()
71 kfd_doorbell_process_slice(kfd)); in kfd_doorbell_init()
74 rounddown(kfd->shared_resources.doorbell_aperture_size, in kfd_doorbell_init()
75 kfd_doorbell_process_slice(kfd)); in kfd_doorbell_init()
80 kfd_doorbell_process_slice(kfd); in kfd_doorbell_init()
84 if (!kfd->max_doorbell_slices || in kfd_doorbell_init()
85 doorbell_process_limit < kfd->max_doorbell_slices) in kfd_doorbell_init()
86 kfd->max_doorbell_slices = doorbell_process_limit; in kfd_doorbell_init()
88 kfd->doorbell_base = kfd->shared_resources.doorbell_physical_address + in kfd_doorbell_init()
91 kfd->doorbell_base_dw_offset = doorbell_start_offset / sizeof(u32); in kfd_doorbell_init()
93 kfd->doorbell_kernel_ptr = ioremap(kfd->doorbell_base, in kfd_doorbell_init()
94 kfd_doorbell_process_slice(kfd)); in kfd_doorbell_init()
96 if (!kfd->doorbell_kernel_ptr) in kfd_doorbell_init()
101 (uintptr_t)kfd->doorbell_base); in kfd_doorbell_init()
104 kfd->doorbell_base_dw_offset); in kfd_doorbell_init()
110 (uintptr_t)kfd->doorbell_base); in kfd_doorbell_init()
113 kfd->shared_resources.doorbell_aperture_size); in kfd_doorbell_init()
115 pr_debug("doorbell kernel address == %p\n", kfd->doorbell_kernel_ptr); in kfd_doorbell_init()
120 void kfd_doorbell_fini(struct kfd_dev *kfd) in kfd_doorbell_fini() argument
122 if (kfd->doorbell_kernel_ptr) in kfd_doorbell_fini()
123 iounmap(kfd->doorbell_kernel_ptr); in kfd_doorbell_fini()
168 void __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd, in kfd_get_kernel_doorbell() argument
173 mutex_lock(&kfd->doorbell_mutex); in kfd_get_kernel_doorbell()
174 inx = find_first_zero_bit(kfd->doorbell_available_index, in kfd_get_kernel_doorbell()
177 __set_bit(inx, kfd->doorbell_available_index); in kfd_get_kernel_doorbell()
178 mutex_unlock(&kfd->doorbell_mutex); in kfd_get_kernel_doorbell()
183 inx *= kfd->device_info->doorbell_size / sizeof(u32); in kfd_get_kernel_doorbell()
189 *doorbell_off = kfd->doorbell_base_dw_offset + inx; in kfd_get_kernel_doorbell()
196 return kfd->doorbell_kernel_ptr + inx; in kfd_get_kernel_doorbell()
199 void kfd_release_kernel_doorbell(struct kfd_dev *kfd, u32 __iomem *db_addr) in kfd_release_kernel_doorbell() argument
203 inx = (unsigned int)(db_addr - kfd->doorbell_kernel_ptr) in kfd_release_kernel_doorbell()
204 * sizeof(u32) / kfd->device_info->doorbell_size; in kfd_release_kernel_doorbell()
206 mutex_lock(&kfd->doorbell_mutex); in kfd_release_kernel_doorbell()
207 __clear_bit(inx, kfd->doorbell_available_index); in kfd_release_kernel_doorbell()
208 mutex_unlock(&kfd->doorbell_mutex); in kfd_release_kernel_doorbell()
229 unsigned int kfd_get_doorbell_dw_offset_in_bar(struct kfd_dev *kfd, in kfd_get_doorbell_dw_offset_in_bar() argument
239 return kfd->doorbell_base_dw_offset + in kfd_get_doorbell_dw_offset_in_bar()
241 * kfd_doorbell_process_slice(kfd) / sizeof(u32) + in kfd_get_doorbell_dw_offset_in_bar()
242 doorbell_id * kfd->device_info->doorbell_size / sizeof(u32); in kfd_get_doorbell_dw_offset_in_bar()
245 uint64_t kfd_get_number_elems(struct kfd_dev *kfd) in kfd_get_number_elems() argument
247 uint64_t num_of_elems = (kfd->shared_resources.doorbell_aperture_size - in kfd_get_number_elems()
248 kfd->shared_resources.doorbell_start_offset) / in kfd_get_number_elems()
249 kfd_doorbell_process_slice(kfd) + 1; in kfd_get_number_elems()
261 int kfd_alloc_process_doorbells(struct kfd_dev *kfd, unsigned int *doorbell_index) in kfd_alloc_process_doorbells() argument
263 int r = ida_simple_get(&kfd->doorbell_ida, 1, kfd->max_doorbell_slices, in kfd_alloc_process_doorbells()
271 void kfd_free_process_doorbells(struct kfd_dev *kfd, unsigned int doorbell_index) in kfd_free_process_doorbells() argument
274 ida_simple_remove(&kfd->doorbell_ida, doorbell_index); in kfd_free_process_doorbells()