brintos

brintos / linux-shallow public Read only

0
0
Text · 3.8 KiB · 8d21e83 Raw
105 lines · c
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 panthor_gem_object;13struct panthor_heap_pool;14struct panthor_vm;15struct panthor_vma;16struct panthor_mmu;17 18int panthor_mmu_init(struct panthor_device *ptdev);19void panthor_mmu_unplug(struct panthor_device *ptdev);20void panthor_mmu_pre_reset(struct panthor_device *ptdev);21void panthor_mmu_post_reset(struct panthor_device *ptdev);22void panthor_mmu_suspend(struct panthor_device *ptdev);23void panthor_mmu_resume(struct panthor_device *ptdev);24 25int panthor_vm_map_bo_range(struct panthor_vm *vm, struct panthor_gem_object *bo,26			    u64 offset, u64 size, u64 va, u32 flags);27int panthor_vm_unmap_range(struct panthor_vm *vm, u64 va, u64 size);28struct panthor_gem_object *29panthor_vm_get_bo_for_va(struct panthor_vm *vm, u64 va, u64 *bo_offset);30 31int panthor_vm_active(struct panthor_vm *vm);32void panthor_vm_idle(struct panthor_vm *vm);33u32 panthor_vm_page_size(struct panthor_vm *vm);34int panthor_vm_as(struct panthor_vm *vm);35int panthor_vm_flush_all(struct panthor_vm *vm);36 37struct panthor_heap_pool *38panthor_vm_get_heap_pool(struct panthor_vm *vm, bool create);39 40struct panthor_vm *panthor_vm_get(struct panthor_vm *vm);41void panthor_vm_put(struct panthor_vm *vm);42struct panthor_vm *panthor_vm_create(struct panthor_device *ptdev, bool for_mcu,43				     u64 kernel_va_start, u64 kernel_va_size,44				     u64 kernel_auto_va_start,45				     u64 kernel_auto_va_size);46 47int panthor_vm_prepare_mapped_bos_resvs(struct drm_exec *exec,48					struct panthor_vm *vm,49					u32 slot_count);50int panthor_vm_add_bos_resvs_deps_to_job(struct panthor_vm *vm,51					 struct drm_sched_job *job);52void panthor_vm_add_job_fence_to_bos_resvs(struct panthor_vm *vm,53					   struct drm_sched_job *job);54 55struct dma_resv *panthor_vm_resv(struct panthor_vm *vm);56struct drm_gem_object *panthor_vm_root_gem(struct panthor_vm *vm);57 58void panthor_vm_pool_destroy(struct panthor_file *pfile);59int panthor_vm_pool_create(struct panthor_file *pfile);60int panthor_vm_pool_create_vm(struct panthor_device *ptdev,61			      struct panthor_vm_pool *pool,62			      struct drm_panthor_vm_create *args);63int panthor_vm_pool_destroy_vm(struct panthor_vm_pool *pool, u32 handle);64struct panthor_vm *panthor_vm_pool_get_vm(struct panthor_vm_pool *pool, u32 handle);65 66bool panthor_vm_has_unhandled_faults(struct panthor_vm *vm);67bool panthor_vm_is_unusable(struct panthor_vm *vm);68 69/*70 * PANTHOR_VM_KERNEL_AUTO_VA: Use this magic address when you want the GEM71 * logic to auto-allocate the virtual address in the reserved kernel VA range.72 */73#define PANTHOR_VM_KERNEL_AUTO_VA		~0ull74 75int panthor_vm_alloc_va(struct panthor_vm *vm, u64 va, u64 size,76			struct drm_mm_node *va_node);77void panthor_vm_free_va(struct panthor_vm *vm, struct drm_mm_node *va_node);78 79int panthor_vm_bind_exec_sync_op(struct drm_file *file,80				 struct panthor_vm *vm,81				 struct drm_panthor_vm_bind_op *op);82 83struct drm_sched_job *84panthor_vm_bind_job_create(struct drm_file *file,85			   struct panthor_vm *vm,86			   const struct drm_panthor_vm_bind_op *op);87void panthor_vm_bind_job_put(struct drm_sched_job *job);88int panthor_vm_bind_job_prepare_resvs(struct drm_exec *exec,89				      struct drm_sched_job *job);90void panthor_vm_bind_job_update_resvs(struct drm_exec *exec, struct drm_sched_job *job);91 92void panthor_vm_update_resvs(struct panthor_vm *vm, struct drm_exec *exec,93			     struct dma_fence *fence,94			     enum dma_resv_usage private_usage,95			     enum dma_resv_usage extobj_usage);96 97int panthor_mmu_pt_cache_init(void);98void panthor_mmu_pt_cache_fini(void);99 100#ifdef CONFIG_DEBUG_FS101void panthor_mmu_debugfs_init(struct drm_minor *minor);102#endif103 104#endif105