Lines Matching +full:com +full:- +full:offset

2  * Copyright(c) 2011-2016 Intel Corporation. All rights reserved.
25 * Kevin Tian <kevin.tian@intel.com>
29 * Tina Zhang <tina.zhang@intel.com>
30 * Min He <min.he@intel.com>
31 * Niu Bing <bing.niu@intel.com>
32 * Zhi Wang <zhi.a.wang@intel.com>
43 * intel_vgpu_gpa_to_mmio_offset - translate a GPA to MMIO offset
53 return gpa - gttmmio_gpa; in intel_vgpu_gpa_to_mmio_offset()
57 (reg >= 0 && reg < gvt->device_info.mmio_size)
60 (reg >= gvt->device_info.gtt_start_offset \
61 && reg < gvt->device_info.gtt_start_offset + gvt_ggtt_sz(gvt))
68 unsigned int offset = 0; in failsafe_emulate_mmio_rw() local
73 gvt = vgpu->gvt; in failsafe_emulate_mmio_rw()
74 mutex_lock(&vgpu->vgpu_lock); in failsafe_emulate_mmio_rw()
75 offset = intel_vgpu_gpa_to_mmio_offset(vgpu, pa); in failsafe_emulate_mmio_rw()
76 if (reg_is_mmio(gvt, offset)) { in failsafe_emulate_mmio_rw()
78 intel_vgpu_default_mmio_read(vgpu, offset, p_data, in failsafe_emulate_mmio_rw()
81 intel_vgpu_default_mmio_write(vgpu, offset, p_data, in failsafe_emulate_mmio_rw()
83 } else if (reg_is_gtt(gvt, offset)) { in failsafe_emulate_mmio_rw()
84 offset -= gvt->device_info.gtt_start_offset; in failsafe_emulate_mmio_rw()
85 pt = vgpu->gtt.ggtt_mm->ggtt_mm.virtual_ggtt + offset; in failsafe_emulate_mmio_rw()
92 mutex_unlock(&vgpu->vgpu_lock); in failsafe_emulate_mmio_rw()
96 * intel_vgpu_emulate_mmio_read - emulate MMIO read
108 struct intel_gvt *gvt = vgpu->gvt; in intel_vgpu_emulate_mmio_read()
109 struct drm_i915_private *i915 = gvt->gt->i915; in intel_vgpu_emulate_mmio_read()
110 unsigned int offset = 0; in intel_vgpu_emulate_mmio_read() local
111 int ret = -EINVAL; in intel_vgpu_emulate_mmio_read()
113 if (vgpu->failsafe) { in intel_vgpu_emulate_mmio_read()
117 mutex_lock(&vgpu->vgpu_lock); in intel_vgpu_emulate_mmio_read()
119 offset = intel_vgpu_gpa_to_mmio_offset(vgpu, pa); in intel_vgpu_emulate_mmio_read()
121 if (drm_WARN_ON(&i915->drm, bytes > 8)) in intel_vgpu_emulate_mmio_read()
124 if (reg_is_gtt(gvt, offset)) { in intel_vgpu_emulate_mmio_read()
125 if (drm_WARN_ON(&i915->drm, !IS_ALIGNED(offset, 4) && in intel_vgpu_emulate_mmio_read()
126 !IS_ALIGNED(offset, 8))) in intel_vgpu_emulate_mmio_read()
128 if (drm_WARN_ON(&i915->drm, bytes != 4 && bytes != 8)) in intel_vgpu_emulate_mmio_read()
130 if (drm_WARN_ON(&i915->drm, in intel_vgpu_emulate_mmio_read()
131 !reg_is_gtt(gvt, offset + bytes - 1))) in intel_vgpu_emulate_mmio_read()
134 ret = intel_vgpu_emulate_ggtt_mmio_read(vgpu, offset, in intel_vgpu_emulate_mmio_read()
141 if (drm_WARN_ON_ONCE(&i915->drm, !reg_is_mmio(gvt, offset))) { in intel_vgpu_emulate_mmio_read()
146 if (drm_WARN_ON(&i915->drm, !reg_is_mmio(gvt, offset + bytes - 1))) in intel_vgpu_emulate_mmio_read()
149 if (!intel_gvt_mmio_is_unalign(gvt, offset)) { in intel_vgpu_emulate_mmio_read()
150 if (drm_WARN_ON(&i915->drm, !IS_ALIGNED(offset, bytes))) in intel_vgpu_emulate_mmio_read()
154 ret = intel_vgpu_mmio_reg_rw(vgpu, offset, p_data, bytes, true); in intel_vgpu_emulate_mmio_read()
158 intel_gvt_mmio_set_accessed(gvt, offset); in intel_vgpu_emulate_mmio_read()
164 offset, bytes); in intel_vgpu_emulate_mmio_read()
166 mutex_unlock(&vgpu->vgpu_lock); in intel_vgpu_emulate_mmio_read()
171 * intel_vgpu_emulate_mmio_write - emulate MMIO write
183 struct intel_gvt *gvt = vgpu->gvt; in intel_vgpu_emulate_mmio_write()
184 struct drm_i915_private *i915 = gvt->gt->i915; in intel_vgpu_emulate_mmio_write()
185 unsigned int offset = 0; in intel_vgpu_emulate_mmio_write() local
186 int ret = -EINVAL; in intel_vgpu_emulate_mmio_write()
188 if (vgpu->failsafe) { in intel_vgpu_emulate_mmio_write()
193 mutex_lock(&vgpu->vgpu_lock); in intel_vgpu_emulate_mmio_write()
195 offset = intel_vgpu_gpa_to_mmio_offset(vgpu, pa); in intel_vgpu_emulate_mmio_write()
197 if (drm_WARN_ON(&i915->drm, bytes > 8)) in intel_vgpu_emulate_mmio_write()
200 if (reg_is_gtt(gvt, offset)) { in intel_vgpu_emulate_mmio_write()
201 if (drm_WARN_ON(&i915->drm, !IS_ALIGNED(offset, 4) && in intel_vgpu_emulate_mmio_write()
202 !IS_ALIGNED(offset, 8))) in intel_vgpu_emulate_mmio_write()
204 if (drm_WARN_ON(&i915->drm, bytes != 4 && bytes != 8)) in intel_vgpu_emulate_mmio_write()
206 if (drm_WARN_ON(&i915->drm, in intel_vgpu_emulate_mmio_write()
207 !reg_is_gtt(gvt, offset + bytes - 1))) in intel_vgpu_emulate_mmio_write()
210 ret = intel_vgpu_emulate_ggtt_mmio_write(vgpu, offset, in intel_vgpu_emulate_mmio_write()
217 if (drm_WARN_ON_ONCE(&i915->drm, !reg_is_mmio(gvt, offset))) { in intel_vgpu_emulate_mmio_write()
222 ret = intel_vgpu_mmio_reg_rw(vgpu, offset, p_data, bytes, false); in intel_vgpu_emulate_mmio_write()
226 intel_gvt_mmio_set_accessed(gvt, offset); in intel_vgpu_emulate_mmio_write()
230 gvt_vgpu_err("fail to emulate MMIO write %08x len %d\n", offset, in intel_vgpu_emulate_mmio_write()
233 mutex_unlock(&vgpu->vgpu_lock); in intel_vgpu_emulate_mmio_write()
239 * intel_vgpu_reset_mmio - reset virtual MMIO space
245 struct intel_gvt *gvt = vgpu->gvt; in intel_vgpu_reset_mmio()
246 const struct intel_gvt_device_info *info = &gvt->device_info; in intel_vgpu_reset_mmio()
247 void *mmio = gvt->firmware.mmio; in intel_vgpu_reset_mmio()
250 memcpy(vgpu->mmio.vreg, mmio, info->mmio_size); in intel_vgpu_reset_mmio()
254 /* set the bit 0:2(Core C-State ) to C0 */ in intel_vgpu_reset_mmio()
260 if (IS_BROXTON(vgpu->gvt->gt->i915)) { in intel_vgpu_reset_mmio()
298 memcpy(vgpu->mmio.vreg, mmio, GVT_GEN8_MMIO_RESET_OFFSET); in intel_vgpu_reset_mmio()
304 * intel_vgpu_init_mmio - init MMIO space
312 const struct intel_gvt_device_info *info = &vgpu->gvt->device_info; in intel_vgpu_init_mmio()
314 vgpu->mmio.vreg = vzalloc(info->mmio_size); in intel_vgpu_init_mmio()
315 if (!vgpu->mmio.vreg) in intel_vgpu_init_mmio()
316 return -ENOMEM; in intel_vgpu_init_mmio()
324 * intel_vgpu_clean_mmio - clean MMIO space
330 vfree(vgpu->mmio.vreg); in intel_vgpu_clean_mmio()
331 vgpu->mmio.vreg = NULL; in intel_vgpu_clean_mmio()