diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 52 | 
1 files changed, 39 insertions, 13 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h index a40a6a993bb0..9ecb7f663e19 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h @@ -284,6 +284,10 @@ struct amdgpu_vm {  	struct drm_sched_entity	immediate;  	struct drm_sched_entity	delayed; +	/* Last finished delayed update */ +	atomic64_t		tlb_seq; +	struct dma_fence	*last_tlb_flush; +  	/* Last unlocked submission to the scheduler entities */  	struct dma_fence	*last_unlocked; @@ -317,8 +321,6 @@ struct amdgpu_vm {  	/* Store positions of group of BOs */  	struct ttm_lru_bulk_move lru_bulk_move; -	/* mark whether can do the bulk move */ -	bool			bulk_moveable;  	/* Flag to indicate if VM is used for compute */  	bool			is_compute_context;  }; @@ -397,18 +399,17 @@ int amdgpu_vm_clear_freed(struct amdgpu_device *adev,  			  struct dma_fence **fence);  int amdgpu_vm_handle_moved(struct amdgpu_device *adev,  			   struct amdgpu_vm *vm); -int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev, -				struct amdgpu_device *bo_adev, -				struct amdgpu_vm *vm, bool immediate, -				bool unlocked, struct dma_resv *resv, -				uint64_t start, uint64_t last, -				uint64_t flags, uint64_t offset, -				struct ttm_resource *res, -				dma_addr_t *pages_addr, -				struct dma_fence **fence, bool *free_table); +void amdgpu_vm_bo_base_init(struct amdgpu_vm_bo_base *base, +			    struct amdgpu_vm *vm, struct amdgpu_bo *bo); +int amdgpu_vm_update_range(struct amdgpu_device *adev, struct amdgpu_vm *vm, +			   bool immediate, bool unlocked, bool flush_tlb, +			   struct dma_resv *resv, uint64_t start, uint64_t last, +			   uint64_t flags, uint64_t offset, uint64_t vram_base, +			   struct ttm_resource *res, dma_addr_t *pages_addr, +			   struct dma_fence **fence);  int amdgpu_vm_bo_update(struct amdgpu_device *adev,  			struct amdgpu_bo_va *bo_va, -			bool clear, bool *table_freed); +			bool clear);  bool amdgpu_vm_evictable(struct amdgpu_bo *bo);  void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev,  			     struct amdgpu_bo *bo, bool evicted); @@ -454,12 +455,37 @@ void amdgpu_vm_set_task_info(struct amdgpu_vm *vm);  void amdgpu_vm_move_to_lru_tail(struct amdgpu_device *adev,  				struct amdgpu_vm *vm); -void amdgpu_vm_del_from_lru_notify(struct ttm_buffer_object *bo);  void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem,  				uint64_t *gtt_mem, uint64_t *cpu_mem); +int amdgpu_vm_pt_clear(struct amdgpu_device *adev, struct amdgpu_vm *vm, +		       struct amdgpu_bo_vm *vmbo, bool immediate); +int amdgpu_vm_pt_create(struct amdgpu_device *adev, struct amdgpu_vm *vm, +			int level, bool immediate, struct amdgpu_bo_vm **vmbo); +void amdgpu_vm_pt_free_root(struct amdgpu_device *adev, struct amdgpu_vm *vm); +bool amdgpu_vm_pt_is_root_clean(struct amdgpu_device *adev, +				struct amdgpu_vm *vm); + +int amdgpu_vm_pde_update(struct amdgpu_vm_update_params *params, +			 struct amdgpu_vm_bo_base *entry); +int amdgpu_vm_ptes_update(struct amdgpu_vm_update_params *params, +			  uint64_t start, uint64_t end, +			  uint64_t dst, uint64_t flags); +  #if defined(CONFIG_DEBUG_FS)  void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m);  #endif +/** + * amdgpu_vm_tlb_seq - return tlb flush sequence number + * @vm: the amdgpu_vm structure to query + * + * Returns the tlb flush sequence number which indicates that the VM TLBs needs + * to be invalidated whenever the sequence number change. + */ +static inline uint64_t amdgpu_vm_tlb_seq(struct amdgpu_vm *vm) +{ +	return atomic64_read(&vm->tlb_seq); +} +  #endif | 
