diff options
| -rw-r--r-- | drivers/gpu/drm/i915/gvt/aperture_gm.c | 29 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/gvt/gvt.h | 1 |
2 files changed, 28 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/gvt/aperture_gm.c b/drivers/gpu/drm/i915/gvt/aperture_gm.c index 65200313515c..f7bce8603958 100644 --- a/drivers/gpu/drm/i915/gvt/aperture_gm.c +++ b/drivers/gpu/drm/i915/gvt/aperture_gm.c | |||
| @@ -158,6 +158,14 @@ void intel_vgpu_write_fence(struct intel_vgpu *vgpu, | |||
| 158 | POSTING_READ(fence_reg_lo); | 158 | POSTING_READ(fence_reg_lo); |
| 159 | } | 159 | } |
| 160 | 160 | ||
| 161 | static void _clear_vgpu_fence(struct intel_vgpu *vgpu) | ||
| 162 | { | ||
| 163 | int i; | ||
| 164 | |||
| 165 | for (i = 0; i < vgpu_fence_sz(vgpu); i++) | ||
| 166 | intel_vgpu_write_fence(vgpu, i, 0); | ||
| 167 | } | ||
| 168 | |||
| 161 | static void free_vgpu_fence(struct intel_vgpu *vgpu) | 169 | static void free_vgpu_fence(struct intel_vgpu *vgpu) |
| 162 | { | 170 | { |
| 163 | struct intel_gvt *gvt = vgpu->gvt; | 171 | struct intel_gvt *gvt = vgpu->gvt; |
| @@ -171,9 +179,9 @@ static void free_vgpu_fence(struct intel_vgpu *vgpu) | |||
| 171 | intel_runtime_pm_get(dev_priv); | 179 | intel_runtime_pm_get(dev_priv); |
| 172 | 180 | ||
| 173 | mutex_lock(&dev_priv->drm.struct_mutex); | 181 | mutex_lock(&dev_priv->drm.struct_mutex); |
| 182 | _clear_vgpu_fence(vgpu); | ||
| 174 | for (i = 0; i < vgpu_fence_sz(vgpu); i++) { | 183 | for (i = 0; i < vgpu_fence_sz(vgpu); i++) { |
| 175 | reg = vgpu->fence.regs[i]; | 184 | reg = vgpu->fence.regs[i]; |
| 176 | intel_vgpu_write_fence(vgpu, i, 0); | ||
| 177 | list_add_tail(®->link, | 185 | list_add_tail(®->link, |
| 178 | &dev_priv->mm.fence_list); | 186 | &dev_priv->mm.fence_list); |
| 179 | } | 187 | } |
| @@ -201,13 +209,14 @@ static int alloc_vgpu_fence(struct intel_vgpu *vgpu) | |||
| 201 | continue; | 209 | continue; |
| 202 | list_del(pos); | 210 | list_del(pos); |
| 203 | vgpu->fence.regs[i] = reg; | 211 | vgpu->fence.regs[i] = reg; |
| 204 | intel_vgpu_write_fence(vgpu, i, 0); | ||
| 205 | if (++i == vgpu_fence_sz(vgpu)) | 212 | if (++i == vgpu_fence_sz(vgpu)) |
| 206 | break; | 213 | break; |
| 207 | } | 214 | } |
| 208 | if (i != vgpu_fence_sz(vgpu)) | 215 | if (i != vgpu_fence_sz(vgpu)) |
| 209 | goto out_free_fence; | 216 | goto out_free_fence; |
| 210 | 217 | ||
| 218 | _clear_vgpu_fence(vgpu); | ||
| 219 | |||
| 211 | mutex_unlock(&dev_priv->drm.struct_mutex); | 220 | mutex_unlock(&dev_priv->drm.struct_mutex); |
| 212 | intel_runtime_pm_put(dev_priv); | 221 | intel_runtime_pm_put(dev_priv); |
| 213 | return 0; | 222 | return 0; |
| @@ -307,6 +316,22 @@ void intel_vgpu_free_resource(struct intel_vgpu *vgpu) | |||
| 307 | } | 316 | } |
| 308 | 317 | ||
| 309 | /** | 318 | /** |
| 319 | * intel_vgpu_reset_resource - reset resource state owned by a vGPU | ||
| 320 | * @vgpu: a vGPU | ||
| 321 | * | ||
| 322 | * This function is used to reset resource state owned by a vGPU. | ||
| 323 | * | ||
| 324 | */ | ||
| 325 | void intel_vgpu_reset_resource(struct intel_vgpu *vgpu) | ||
| 326 | { | ||
| 327 | struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv; | ||
| 328 | |||
| 329 | intel_runtime_pm_get(dev_priv); | ||
| 330 | _clear_vgpu_fence(vgpu); | ||
| 331 | intel_runtime_pm_put(dev_priv); | ||
| 332 | } | ||
| 333 | |||
| 334 | /** | ||
| 310 | * intel_alloc_vgpu_resource - allocate HW resource for a vGPU | 335 | * intel_alloc_vgpu_resource - allocate HW resource for a vGPU |
| 311 | * @vgpu: vGPU | 336 | * @vgpu: vGPU |
| 312 | * @param: vGPU creation params | 337 | * @param: vGPU creation params |
diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h index 0af17016f33f..455281d07d75 100644 --- a/drivers/gpu/drm/i915/gvt/gvt.h +++ b/drivers/gpu/drm/i915/gvt/gvt.h | |||
| @@ -323,6 +323,7 @@ struct intel_vgpu_creation_params { | |||
| 323 | 323 | ||
| 324 | int intel_vgpu_alloc_resource(struct intel_vgpu *vgpu, | 324 | int intel_vgpu_alloc_resource(struct intel_vgpu *vgpu, |
| 325 | struct intel_vgpu_creation_params *param); | 325 | struct intel_vgpu_creation_params *param); |
| 326 | void intel_vgpu_reset_resource(struct intel_vgpu *vgpu); | ||
| 326 | void intel_vgpu_free_resource(struct intel_vgpu *vgpu); | 327 | void intel_vgpu_free_resource(struct intel_vgpu *vgpu); |
| 327 | void intel_vgpu_write_fence(struct intel_vgpu *vgpu, | 328 | void intel_vgpu_write_fence(struct intel_vgpu *vgpu, |
| 328 | u32 fence, u64 value); | 329 | u32 fence, u64 value); |
