1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef __AMDGPU_GMC_H__
27#define __AMDGPU_GMC_H__
28
29#include <linux/types.h>
30
31#include "amdgpu_irq.h"
32
33struct firmware;
34
35
36
37
38struct amdgpu_vmhub {
39 uint32_t ctx0_ptb_addr_lo32;
40 uint32_t ctx0_ptb_addr_hi32;
41 uint32_t vm_inv_eng0_req;
42 uint32_t vm_inv_eng0_ack;
43 uint32_t vm_context0_cntl;
44 uint32_t vm_l2_pro_fault_status;
45 uint32_t vm_l2_pro_fault_cntl;
46};
47
48
49
50
51struct amdgpu_gmc_funcs {
52
53 void (*flush_gpu_tlb)(struct amdgpu_device *adev,
54 uint32_t vmid);
55
56 uint64_t (*emit_flush_gpu_tlb)(struct amdgpu_ring *ring, unsigned vmid,
57 uint64_t pd_addr);
58
59 void (*emit_pasid_mapping)(struct amdgpu_ring *ring, unsigned vmid,
60 unsigned pasid);
61
62 int (*set_pte_pde)(struct amdgpu_device *adev,
63 void *cpu_pt_addr,
64 uint32_t gpu_page_idx,
65 uint64_t addr,
66 uint64_t flags);
67
68 void (*set_prt)(struct amdgpu_device *adev, bool enable);
69
70 uint64_t (*get_vm_pte_flags)(struct amdgpu_device *adev,
71 uint32_t flags);
72
73 void (*get_vm_pde)(struct amdgpu_device *adev, int level,
74 u64 *dst, u64 *flags);
75};
76
77struct amdgpu_gmc {
78 resource_size_t aper_size;
79 resource_size_t aper_base;
80
81
82 u64 mc_vram_size;
83 u64 visible_vram_size;
84 u64 gart_size;
85 u64 gart_start;
86 u64 gart_end;
87 u64 vram_start;
88 u64 vram_end;
89 unsigned vram_width;
90 u64 real_vram_size;
91 int vram_mtrr;
92 u64 mc_mask;
93 const struct firmware *fw;
94 uint32_t fw_version;
95 struct amdgpu_irq_src vm_fault;
96 uint32_t vram_type;
97 uint32_t srbm_soft_reset;
98 bool prt_warning;
99 uint64_t stolen_size;
100
101 u64 shared_aperture_start;
102 u64 shared_aperture_end;
103 u64 private_aperture_start;
104 u64 private_aperture_end;
105
106 spinlock_t invalidate_lock;
107 bool translate_further;
108
109 const struct amdgpu_gmc_funcs *gmc_funcs;
110};
111
112#endif
113