FILE
panthor_mmu.h
File preview with syntax highlighting.
linux-6.19.14/drivers/gpu/drm/panthor/panthor_mmu.h
1/* SPDX-License-Identifier: GPL-2.0 or MIT */ 2/* Copyright 2019 Linaro, Ltd, Rob Herring <robh@kernel.org> */ 3/* Copyright 2023 Collabora ltd. */ 4 5#ifndef __PANTHOR_MMU_H__ 6#define __PANTHOR_MMU_H__ 7 8#include <linux/dma-resv.h> 9 10struct drm_exec; 11struct drm_sched_job; 12struct drm_memory_stats; 13struct panthor_gem_object; 14struct panthor_heap_pool; 15struct panthor_vm; 16struct panthor_vma; 17struct panthor_mmu; 18 19int panthor_mmu_init(struct panthor_device *ptdev); 20void panthor_mmu_unplug(struct panthor_device *ptdev); 21void panthor_mmu_pre_reset(struct panthor_device *ptdev); 22void panthor_mmu_post_reset(struct panthor_device *ptdev); 23void panthor_mmu_suspend(struct panthor_device *ptdev); 24void panthor_mmu_resume(struct panthor_device *ptdev); 25 26int panthor_vm_map_bo_range(struct panthor_vm *vm, struct panthor_gem_object *bo, 27 u64 offset, u64 size, u64 va, u32 flags); 28int panthor_vm_unmap_range(struct panthor_vm *vm, u64 va, u64 size); 29struct panthor_gem_object * 30panthor_vm_get_bo_for_va(struct panthor_vm *vm, u64 va, u64 *bo_offset); 31 32int panthor_vm_active(struct panthor_vm *vm); 33void panthor_vm_idle(struct panthor_vm *vm); 34u32 panthor_vm_page_size(struct panthor_vm *vm); 35int panthor_vm_as(struct panthor_vm *vm); 36 37struct panthor_heap_pool * 38panthor_vm_get_heap_pool(struct panthor_vm *vm, bool create); 39 40void panthor_vm_heaps_sizes(struct panthor_file *pfile, struct drm_memory_stats *stats); 41 42struct panthor_vm *panthor_vm_get(struct panthor_vm *vm); 43void panthor_vm_put(struct panthor_vm *vm); 44struct panthor_vm *panthor_vm_create(struct panthor_device *ptdev, bool for_mcu, 45 u64 kernel_va_start, u64 kernel_va_size, 46 u64 kernel_auto_va_start, 47 u64 kernel_auto_va_size); 48 49int panthor_vm_prepare_mapped_bos_resvs(struct drm_exec *exec, 50 struct panthor_vm *vm, 51 u32 slot_count); 52int panthor_vm_add_bos_resvs_deps_to_job(struct panthor_vm *vm, 53 struct drm_sched_job *job); 54void panthor_vm_add_job_fence_to_bos_resvs(struct panthor_vm *vm, 55 struct drm_sched_job *job); 56 57struct dma_resv *panthor_vm_resv(struct panthor_vm *vm); 58struct drm_gem_object *panthor_vm_root_gem(struct panthor_vm *vm); 59 60void panthor_vm_pool_destroy(struct panthor_file *pfile); 61int panthor_vm_pool_create(struct panthor_file *pfile); 62int panthor_vm_pool_create_vm(struct panthor_device *ptdev, 63 struct panthor_vm_pool *pool, 64 struct drm_panthor_vm_create *args); 65int panthor_vm_pool_destroy_vm(struct panthor_vm_pool *pool, u32 handle); 66struct panthor_vm *panthor_vm_pool_get_vm(struct panthor_vm_pool *pool, u32 handle); 67 68bool panthor_vm_has_unhandled_faults(struct panthor_vm *vm); 69bool panthor_vm_is_unusable(struct panthor_vm *vm); 70 71/* 72 * PANTHOR_VM_KERNEL_AUTO_VA: Use this magic address when you want the GEM 73 * logic to auto-allocate the virtual address in the reserved kernel VA range. 74 */ 75#define PANTHOR_VM_KERNEL_AUTO_VA ~0ull 76 77int panthor_vm_alloc_va(struct panthor_vm *vm, u64 va, u64 size, 78 struct drm_mm_node *va_node); 79void panthor_vm_free_va(struct panthor_vm *vm, struct drm_mm_node *va_node); 80 81int panthor_vm_bind_exec_sync_op(struct drm_file *file, 82 struct panthor_vm *vm, 83 struct drm_panthor_vm_bind_op *op); 84 85struct drm_sched_job * 86panthor_vm_bind_job_create(struct drm_file *file, 87 struct panthor_vm *vm, 88 const struct drm_panthor_vm_bind_op *op); 89void panthor_vm_bind_job_put(struct drm_sched_job *job); 90int panthor_vm_bind_job_prepare_resvs(struct drm_exec *exec, 91 struct drm_sched_job *job); 92void panthor_vm_bind_job_update_resvs(struct drm_exec *exec, struct drm_sched_job *job); 93 94void panthor_vm_update_resvs(struct panthor_vm *vm, struct drm_exec *exec, 95 struct dma_fence *fence, 96 enum dma_resv_usage private_usage, 97 enum dma_resv_usage extobj_usage); 98 99int panthor_mmu_pt_cache_init(void); 100void panthor_mmu_pt_cache_fini(void); 101 102#ifdef CONFIG_DEBUG_FS 103void panthor_mmu_debugfs_init(struct drm_minor *minor); 104#endif 105 106#endif
~/
Read-only file preview.