hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/i915/gvt/aperture_gm.c
....@@ -35,12 +35,13 @@
3535 */
3636
3737 #include "i915_drv.h"
38
+#include "gt/intel_ggtt_fencing.h"
3839 #include "gvt.h"
3940
4041 static int alloc_gm(struct intel_vgpu *vgpu, bool high_gm)
4142 {
4243 struct intel_gvt *gvt = vgpu->gvt;
43
- struct drm_i915_private *dev_priv = gvt->dev_priv;
44
+ struct intel_gt *gt = gvt->gt;
4445 unsigned int flags;
4546 u64 start, end, size;
4647 struct drm_mm_node *node;
....@@ -60,12 +61,14 @@
6061 flags = PIN_MAPPABLE;
6162 }
6263
63
- mutex_lock(&dev_priv->drm.struct_mutex);
64
- ret = i915_gem_gtt_insert(&dev_priv->ggtt.vm, node,
64
+ mutex_lock(&gt->ggtt->vm.mutex);
65
+ mmio_hw_access_pre(gt);
66
+ ret = i915_gem_gtt_insert(&gt->ggtt->vm, node,
6567 size, I915_GTT_PAGE_SIZE,
6668 I915_COLOR_UNEVICTABLE,
6769 start, end, flags);
68
- mutex_unlock(&dev_priv->drm.struct_mutex);
70
+ mmio_hw_access_post(gt);
71
+ mutex_unlock(&gt->ggtt->vm.mutex);
6972 if (ret)
7073 gvt_err("fail to alloc %s gm space from host\n",
7174 high_gm ? "high" : "low");
....@@ -76,7 +79,7 @@
7679 static int alloc_vgpu_gm(struct intel_vgpu *vgpu)
7780 {
7881 struct intel_gvt *gvt = vgpu->gvt;
79
- struct drm_i915_private *dev_priv = gvt->dev_priv;
82
+ struct intel_gt *gt = gvt->gt;
8083 int ret;
8184
8285 ret = alloc_gm(vgpu, false);
....@@ -95,20 +98,21 @@
9598
9699 return 0;
97100 out_free_aperture:
98
- mutex_lock(&dev_priv->drm.struct_mutex);
101
+ mutex_lock(&gt->ggtt->vm.mutex);
99102 drm_mm_remove_node(&vgpu->gm.low_gm_node);
100
- mutex_unlock(&dev_priv->drm.struct_mutex);
103
+ mutex_unlock(&gt->ggtt->vm.mutex);
101104 return ret;
102105 }
103106
104107 static void free_vgpu_gm(struct intel_vgpu *vgpu)
105108 {
106
- struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
109
+ struct intel_gvt *gvt = vgpu->gvt;
110
+ struct intel_gt *gt = gvt->gt;
107111
108
- mutex_lock(&dev_priv->drm.struct_mutex);
112
+ mutex_lock(&gt->ggtt->vm.mutex);
109113 drm_mm_remove_node(&vgpu->gm.low_gm_node);
110114 drm_mm_remove_node(&vgpu->gm.high_gm_node);
111
- mutex_unlock(&dev_priv->drm.struct_mutex);
115
+ mutex_unlock(&gt->ggtt->vm.mutex);
112116 }
113117
114118 /**
....@@ -125,28 +129,29 @@
125129 u32 fence, u64 value)
126130 {
127131 struct intel_gvt *gvt = vgpu->gvt;
128
- struct drm_i915_private *dev_priv = gvt->dev_priv;
129
- struct drm_i915_fence_reg *reg;
132
+ struct drm_i915_private *i915 = gvt->gt->i915;
133
+ struct intel_uncore *uncore = gvt->gt->uncore;
134
+ struct i915_fence_reg *reg;
130135 i915_reg_t fence_reg_lo, fence_reg_hi;
131136
132
- assert_rpm_wakelock_held(dev_priv);
137
+ assert_rpm_wakelock_held(uncore->rpm);
133138
134
- if (WARN_ON(fence >= vgpu_fence_sz(vgpu)))
139
+ if (drm_WARN_ON(&i915->drm, fence >= vgpu_fence_sz(vgpu)))
135140 return;
136141
137142 reg = vgpu->fence.regs[fence];
138
- if (WARN_ON(!reg))
143
+ if (drm_WARN_ON(&i915->drm, !reg))
139144 return;
140145
141146 fence_reg_lo = FENCE_REG_GEN6_LO(reg->id);
142147 fence_reg_hi = FENCE_REG_GEN6_HI(reg->id);
143148
144
- I915_WRITE(fence_reg_lo, 0);
145
- POSTING_READ(fence_reg_lo);
149
+ intel_uncore_write(uncore, fence_reg_lo, 0);
150
+ intel_uncore_posting_read(uncore, fence_reg_lo);
146151
147
- I915_WRITE(fence_reg_hi, upper_32_bits(value));
148
- I915_WRITE(fence_reg_lo, lower_32_bits(value));
149
- POSTING_READ(fence_reg_lo);
152
+ intel_uncore_write(uncore, fence_reg_hi, upper_32_bits(value));
153
+ intel_uncore_write(uncore, fence_reg_lo, lower_32_bits(value));
154
+ intel_uncore_posting_read(uncore, fence_reg_lo);
150155 }
151156
152157 static void _clear_vgpu_fence(struct intel_vgpu *vgpu)
....@@ -160,41 +165,43 @@
160165 static void free_vgpu_fence(struct intel_vgpu *vgpu)
161166 {
162167 struct intel_gvt *gvt = vgpu->gvt;
163
- struct drm_i915_private *dev_priv = gvt->dev_priv;
164
- struct drm_i915_fence_reg *reg;
168
+ struct intel_uncore *uncore = gvt->gt->uncore;
169
+ struct i915_fence_reg *reg;
170
+ intel_wakeref_t wakeref;
165171 u32 i;
166172
167
- if (WARN_ON(!vgpu_fence_sz(vgpu)))
173
+ if (drm_WARN_ON(&gvt->gt->i915->drm, !vgpu_fence_sz(vgpu)))
168174 return;
169175
170
- intel_runtime_pm_get(dev_priv);
176
+ wakeref = intel_runtime_pm_get(uncore->rpm);
171177
172
- mutex_lock(&dev_priv->drm.struct_mutex);
178
+ mutex_lock(&gvt->gt->ggtt->vm.mutex);
173179 _clear_vgpu_fence(vgpu);
174180 for (i = 0; i < vgpu_fence_sz(vgpu); i++) {
175181 reg = vgpu->fence.regs[i];
176182 i915_unreserve_fence(reg);
177183 vgpu->fence.regs[i] = NULL;
178184 }
179
- mutex_unlock(&dev_priv->drm.struct_mutex);
185
+ mutex_unlock(&gvt->gt->ggtt->vm.mutex);
180186
181
- intel_runtime_pm_put(dev_priv);
187
+ intel_runtime_pm_put(uncore->rpm, wakeref);
182188 }
183189
184190 static int alloc_vgpu_fence(struct intel_vgpu *vgpu)
185191 {
186192 struct intel_gvt *gvt = vgpu->gvt;
187
- struct drm_i915_private *dev_priv = gvt->dev_priv;
188
- struct drm_i915_fence_reg *reg;
193
+ struct intel_uncore *uncore = gvt->gt->uncore;
194
+ struct i915_fence_reg *reg;
195
+ intel_wakeref_t wakeref;
189196 int i;
190197
191
- intel_runtime_pm_get(dev_priv);
198
+ wakeref = intel_runtime_pm_get(uncore->rpm);
192199
193200 /* Request fences from host */
194
- mutex_lock(&dev_priv->drm.struct_mutex);
201
+ mutex_lock(&gvt->gt->ggtt->vm.mutex);
195202
196203 for (i = 0; i < vgpu_fence_sz(vgpu); i++) {
197
- reg = i915_reserve_fence(dev_priv);
204
+ reg = i915_reserve_fence(gvt->gt->ggtt);
198205 if (IS_ERR(reg))
199206 goto out_free_fence;
200207
....@@ -203,9 +210,10 @@
203210
204211 _clear_vgpu_fence(vgpu);
205212
206
- mutex_unlock(&dev_priv->drm.struct_mutex);
207
- intel_runtime_pm_put(dev_priv);
213
+ mutex_unlock(&gvt->gt->ggtt->vm.mutex);
214
+ intel_runtime_pm_put(uncore->rpm, wakeref);
208215 return 0;
216
+
209217 out_free_fence:
210218 gvt_vgpu_err("Failed to alloc fences\n");
211219 /* Return fences to host, if fail */
....@@ -216,8 +224,8 @@
216224 i915_unreserve_fence(reg);
217225 vgpu->fence.regs[i] = NULL;
218226 }
219
- mutex_unlock(&dev_priv->drm.struct_mutex);
220
- intel_runtime_pm_put(dev_priv);
227
+ mutex_unlock(&gvt->gt->ggtt->vm.mutex);
228
+ intel_runtime_pm_put_unchecked(uncore->rpm);
221229 return -ENOSPC;
222230 }
223231
....@@ -311,11 +319,11 @@
311319 */
312320 void intel_vgpu_reset_resource(struct intel_vgpu *vgpu)
313321 {
314
- struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
322
+ struct intel_gvt *gvt = vgpu->gvt;
323
+ intel_wakeref_t wakeref;
315324
316
- intel_runtime_pm_get(dev_priv);
317
- _clear_vgpu_fence(vgpu);
318
- intel_runtime_pm_put(dev_priv);
325
+ with_intel_runtime_pm(gvt->gt->uncore->rpm, wakeref)
326
+ _clear_vgpu_fence(vgpu);
319327 }
320328
321329 /**