File Index
Files and directories
Sign in
FILE

panthor_mmu.h

File preview with syntax highlighting.

linux-6.19.14/drivers/gpu/drm/panthor/panthor_mmu.h 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 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.