Lines Matching refs:kfd
52 size_t kfd_doorbell_process_slice(struct kfd_dev *kfd) in kfd_doorbell_process_slice() argument
54 return roundup(kfd->device_info->doorbell_size * in kfd_doorbell_process_slice()
60 int kfd_doorbell_init(struct kfd_dev *kfd) in kfd_doorbell_init() argument
73 roundup(kfd->shared_resources.doorbell_start_offset, in kfd_doorbell_init()
74 kfd_doorbell_process_slice(kfd)); in kfd_doorbell_init()
77 rounddown(kfd->shared_resources.doorbell_aperture_size, in kfd_doorbell_init()
78 kfd_doorbell_process_slice(kfd)); in kfd_doorbell_init()
83 kfd_doorbell_process_slice(kfd); in kfd_doorbell_init()
91 kfd->doorbell_base = kfd->shared_resources.doorbell_physical_address + in kfd_doorbell_init()
94 kfd->doorbell_id_offset = doorbell_start_offset / sizeof(u32); in kfd_doorbell_init()
96 kfd->doorbell_kernel_ptr = ioremap(kfd->doorbell_base, in kfd_doorbell_init()
97 kfd_doorbell_process_slice(kfd)); in kfd_doorbell_init()
99 if (!kfd->doorbell_kernel_ptr) in kfd_doorbell_init()
104 (uintptr_t)kfd->doorbell_base); in kfd_doorbell_init()
107 kfd->doorbell_id_offset); in kfd_doorbell_init()
113 (uintptr_t)kfd->doorbell_base); in kfd_doorbell_init()
116 kfd->shared_resources.doorbell_aperture_size); in kfd_doorbell_init()
118 pr_debug("doorbell kernel address == %p\n", kfd->doorbell_kernel_ptr); in kfd_doorbell_init()
123 void kfd_doorbell_fini(struct kfd_dev *kfd) in kfd_doorbell_fini() argument
125 if (kfd->doorbell_kernel_ptr) in kfd_doorbell_fini()
126 iounmap(kfd->doorbell_kernel_ptr); in kfd_doorbell_fini()
167 void __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd, in kfd_get_kernel_doorbell() argument
172 mutex_lock(&kfd->doorbell_mutex); in kfd_get_kernel_doorbell()
173 inx = find_first_zero_bit(kfd->doorbell_available_index, in kfd_get_kernel_doorbell()
176 __set_bit(inx, kfd->doorbell_available_index); in kfd_get_kernel_doorbell()
177 mutex_unlock(&kfd->doorbell_mutex); in kfd_get_kernel_doorbell()
182 inx *= kfd->device_info->doorbell_size / sizeof(u32); in kfd_get_kernel_doorbell()
188 *doorbell_off = kfd->doorbell_id_offset + inx; in kfd_get_kernel_doorbell()
195 return kfd->doorbell_kernel_ptr + inx; in kfd_get_kernel_doorbell()
198 void kfd_release_kernel_doorbell(struct kfd_dev *kfd, u32 __iomem *db_addr) in kfd_release_kernel_doorbell() argument
202 inx = (unsigned int)(db_addr - kfd->doorbell_kernel_ptr) in kfd_release_kernel_doorbell()
203 * sizeof(u32) / kfd->device_info->doorbell_size; in kfd_release_kernel_doorbell()
205 mutex_lock(&kfd->doorbell_mutex); in kfd_release_kernel_doorbell()
206 __clear_bit(inx, kfd->doorbell_available_index); in kfd_release_kernel_doorbell()
207 mutex_unlock(&kfd->doorbell_mutex); in kfd_release_kernel_doorbell()
228 unsigned int kfd_doorbell_id_to_offset(struct kfd_dev *kfd, in kfd_doorbell_id_to_offset() argument
238 return kfd->doorbell_id_offset + in kfd_doorbell_id_to_offset()
240 * kfd_doorbell_process_slice(kfd) / sizeof(u32) + in kfd_doorbell_id_to_offset()
241 doorbell_id * kfd->device_info->doorbell_size / sizeof(u32); in kfd_doorbell_id_to_offset()
244 uint64_t kfd_get_number_elems(struct kfd_dev *kfd) in kfd_get_number_elems() argument
246 uint64_t num_of_elems = (kfd->shared_resources.doorbell_aperture_size - in kfd_get_number_elems()
247 kfd->shared_resources.doorbell_start_offset) / in kfd_get_number_elems()
248 kfd_doorbell_process_slice(kfd) + 1; in kfd_get_number_elems()