Lines Matching full:dev
34 agx_bo_free(struct agx_device *dev, struct agx_bo *bo) in agx_bo_free() argument
46 heap = &dev->usc_heap; in agx_bo_free()
47 bo_addr += dev->shader_base; in agx_bo_free()
49 heap = &dev->main_heap; in agx_bo_free()
52 simple_mtx_lock(&dev->vma_lock); in agx_bo_free()
53 util_vma_heap_free(heap, bo_addr, bo->size + dev->guard_size); in agx_bo_free()
54 simple_mtx_unlock(&dev->vma_lock); in agx_bo_free()
69 drmIoctl(dev->fd, DRM_IOCTL_GEM_CLOSE, &args); in agx_bo_free()
73 agx_bo_bind(struct agx_device *dev, struct agx_bo *bo, uint64_t addr, in agx_bo_bind() argument
80 agx_bo_alloc(struct agx_device *dev, size_t size, size_t align, in agx_bo_alloc() argument
86 size = ALIGN_POT(size, dev->params.vm_page_size); in agx_bo_alloc()
93 pthread_mutex_lock(&dev->bo_map_lock); in agx_bo_alloc()
94 bo = agx_lookup_bo(dev, handle); in agx_bo_alloc()
95 dev->max_handle = MAX2(dev->max_handle, handle); in agx_bo_alloc()
96 pthread_mutex_unlock(&dev->bo_map_lock); in agx_bo_alloc()
103 bo->align = MAX2(dev->params.vm_page_size, align); in agx_bo_alloc()
105 bo->dev = dev; in agx_bo_alloc()
113 heap = &dev->usc_heap; in agx_bo_alloc()
115 heap = &dev->main_heap; in agx_bo_alloc()
117 simple_mtx_lock(&dev->vma_lock); in agx_bo_alloc()
118 bo->ptr.gpu = util_vma_heap_alloc(heap, size + dev->guard_size, bo->align); in agx_bo_alloc()
119 simple_mtx_unlock(&dev->vma_lock); in agx_bo_alloc()
122 agx_bo_free(dev, bo); in agx_bo_alloc()
133 int ret = agx_bo_bind(dev, bo, bo->ptr.gpu, bind); in agx_bo_alloc()
135 agx_bo_free(dev, bo); in agx_bo_alloc()
142 bo->ptr.gpu -= dev->shader_base; in agx_bo_alloc()
156 agx_bo_import(struct agx_device *dev, int fd) in agx_bo_import() argument
162 pthread_mutex_lock(&dev->bo_map_lock); in agx_bo_import()
164 ret = drmPrimeFDToHandle(dev->fd, fd, &gem_handle); in agx_bo_import()
167 pthread_mutex_unlock(&dev->bo_map_lock); in agx_bo_import()
171 bo = agx_lookup_bo(dev, gem_handle); in agx_bo_import()
172 dev->max_handle = MAX2(dev->max_handle, gem_handle); in agx_bo_import()
174 if (!bo->dev) { in agx_bo_import()
175 bo->dev = dev; in agx_bo_import()
183 pthread_mutex_unlock(&dev->bo_map_lock); in agx_bo_import()
186 if (bo->size & (dev->params.vm_page_size - 1)) { in agx_bo_import()
202 simple_mtx_lock(&dev->vma_lock); in agx_bo_import()
204 &dev->main_heap, bo->size + dev->guard_size, dev->params.vm_page_size); in agx_bo_import()
205 simple_mtx_unlock(&dev->vma_lock); in agx_bo_import()
216 agx_bo_bind(dev, bo, bo->ptr.gpu, ASAHI_BIND_READ | ASAHI_BIND_WRITE); in agx_bo_import()
238 pthread_mutex_unlock(&dev->bo_map_lock); in agx_bo_import()
244 pthread_mutex_unlock(&dev->bo_map_lock); in agx_bo_import()
255 if (drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC, &fd)) in agx_bo_export()
270 drmSyncobjExportSyncFile(bo->dev->fd, writer_syncobj, &out_sync_fd); in agx_bo_export()
274 ret = agx_import_sync_file(bo->dev, bo, out_sync_fd); in agx_bo_export()
285 agx_get_global_ids(struct agx_device *dev) in agx_get_global_ids() argument
287 dev->next_global_id = 0; in agx_get_global_ids()
288 dev->last_global_id = 0x1000000; in agx_get_global_ids()
292 agx_get_global_id(struct agx_device *dev) in agx_get_global_id() argument
294 if (unlikely(dev->next_global_id >= dev->last_global_id)) { in agx_get_global_id()
295 agx_get_global_ids(dev); in agx_get_global_id()
298 return dev->next_global_id++; in agx_get_global_id()
302 agx_get_params(struct agx_device *dev, void *buf, size_t size) in agx_get_params() argument
309 agx_open_device(void *memctx, struct agx_device *dev) in agx_open_device() argument
316 params_size = agx_get_params(dev, &dev->params, sizeof(dev->params)); in agx_open_device()
321 assert(params_size >= sizeof(dev->params)); in agx_open_device()
326 util_sparse_array_init(&dev->bo_map, sizeof(struct agx_bo), 512); in agx_open_device()
327 pthread_mutex_init(&dev->bo_map_lock, NULL); in agx_open_device()
329 simple_mtx_init(&dev->bo_cache.lock, mtx_plain); in agx_open_device()
330 list_inithead(&dev->bo_cache.lru); in agx_open_device()
332 for (unsigned i = 0; i < ARRAY_SIZE(dev->bo_cache.buckets); ++i) in agx_open_device()
333 list_inithead(&dev->bo_cache.buckets[i]); in agx_open_device()
337 simple_mtx_init(&dev->vma_lock, mtx_plain); in agx_open_device()
338 util_vma_heap_init(&dev->main_heap, dev->params.vm_user_start, in agx_open_device()
339 dev->params.vm_user_end - dev->params.vm_user_start + 1); in agx_open_device()
341 &dev->usc_heap, dev->params.vm_shader_start, in agx_open_device()
342 dev->params.vm_shader_end - dev->params.vm_shader_start + 1); in agx_open_device()
344 agx_get_global_ids(dev); in agx_open_device()
350 dev->libagx = nir_deserialize(memctx, &agx_nir_options, &blob); in agx_open_device()
352 dev->helper = agx_build_helper(dev); in agx_open_device()
358 agx_close_device(struct agx_device *dev) in agx_close_device() argument
360 if (dev->helper) in agx_close_device()
361 agx_bo_unreference(dev->helper); in agx_close_device()
363 agx_bo_cache_evict_all(dev); in agx_close_device()
364 util_sparse_array_finish(&dev->bo_map); in agx_close_device()
366 util_vma_heap_finish(&dev->main_heap); in agx_close_device()
367 util_vma_heap_finish(&dev->usc_heap); in agx_close_device()
370 close(dev->fd); in agx_close_device()
374 agx_create_command_queue(struct agx_device *dev, uint32_t caps) in agx_create_command_queue() argument
380 agx_import_sync_file(struct agx_device *dev, struct agx_bo *bo, int fd) in agx_import_sync_file() argument
398 agx_export_sync_file(struct agx_device *dev, struct agx_bo *bo) in agx_export_sync_file() argument
416 agx_debug_fault(struct agx_device *dev, uint64_t addr) in agx_debug_fault() argument
418 pthread_mutex_lock(&dev->bo_map_lock); in agx_debug_fault()
422 for (uint32_t handle = 0; handle < dev->max_handle; handle++) { in agx_debug_fault()
423 struct agx_bo *bo = agx_lookup_bo(dev, handle); in agx_debug_fault()
426 bo_addr += dev->shader_base; in agx_debug_fault()
428 if (!bo->dev || bo_addr > addr) in agx_debug_fault()
456 pthread_mutex_unlock(&dev->bo_map_lock); in agx_debug_fault()
460 agx_get_gpu_timestamp(struct agx_device *dev) in agx_get_gpu_timestamp() argument