Lines Matching defs:kfd

51  * the /dev/kfd with the particular device encoded in the mmap offset.
52 * There will be other uses for mmap of /dev/kfd, so only a range of
57 size_t kfd_doorbell_process_slice(struct kfd_dev *kfd)
59 return roundup(kfd->device_info->doorbell_size *
65 int kfd_doorbell_init(struct kfd_dev *kfd)
78 roundup(kfd->shared_resources.doorbell_start_offset,
79 kfd_doorbell_process_slice(kfd));
82 rounddown(kfd->shared_resources.doorbell_aperture_size,
83 kfd_doorbell_process_slice(kfd));
88 kfd_doorbell_process_slice(kfd);
96 kfd->doorbell_base = kfd->shared_resources.doorbell_physical_address +
99 kfd->doorbell_base_dw_offset = doorbell_start_offset / sizeof(u32);
101 kfd->doorbell_kernel_ptr = ioremap(kfd->doorbell_base,
102 kfd_doorbell_process_slice(kfd));
104 if (!kfd->doorbell_kernel_ptr)
109 (uintptr_t)kfd->doorbell_base);
112 kfd->doorbell_base_dw_offset);
118 (uintptr_t)kfd->doorbell_base);
121 kfd->shared_resources.doorbell_aperture_size);
123 pr_debug("doorbell kernel address == %p\n", kfd->doorbell_kernel_ptr);
128 void kfd_doorbell_fini(struct kfd_dev *kfd)
130 if (kfd->doorbell_kernel_ptr)
131 iounmap(kfd->doorbell_kernel_ptr);
172 void __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd,
177 mutex_lock(&kfd->doorbell_mutex);
178 inx = find_first_zero_bit(kfd->doorbell_available_index,
181 __set_bit(inx, kfd->doorbell_available_index);
182 mutex_unlock(&kfd->doorbell_mutex);
187 inx *= kfd->device_info->doorbell_size / sizeof(u32);
193 *doorbell_off = kfd->doorbell_base_dw_offset + inx;
200 return kfd->doorbell_kernel_ptr + inx;
203 void kfd_release_kernel_doorbell(struct kfd_dev *kfd, u32 __iomem *db_addr)
207 inx = (unsigned int)(db_addr - kfd->doorbell_kernel_ptr)
208 * sizeof(u32) / kfd->device_info->doorbell_size;
210 mutex_lock(&kfd->doorbell_mutex);
211 __clear_bit(inx, kfd->doorbell_available_index);
212 mutex_unlock(&kfd->doorbell_mutex);
233 unsigned int kfd_get_doorbell_dw_offset_in_bar(struct kfd_dev *kfd,
243 return kfd->doorbell_base_dw_offset +
245 * kfd_doorbell_process_slice(kfd) / sizeof(u32) +
246 doorbell_id * kfd->device_info->doorbell_size / sizeof(u32);
249 uint64_t kfd_get_number_elems(struct kfd_dev *kfd)
251 uint64_t num_of_elems = (kfd->shared_resources.doorbell_aperture_size -
252 kfd->shared_resources.doorbell_start_offset) /
253 kfd_doorbell_process_slice(kfd) + 1;