Loading...
Note: File does not exist in v3.1.
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 GEM
71 * logic to auto-allocate the virtual address in the reserved kernel VA range.
72 */
73#define PANTHOR_VM_KERNEL_AUTO_VA ~0ull
74
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_FS
101void panthor_mmu_debugfs_init(struct drm_minor *minor);
102#endif
103
104#endif