drm/i915: Drop runtime-pm assert from vgpu io accessors
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 11 Aug 2020 09:25:32 +0000 (10:25 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 20 Oct 2020 10:25:44 +0000 (11:25 +0100)
The "mmio" writes into vgpu registers are simple memory traps from the
guest into the host. We do not need to assert in the guest that the
device is awake for the io as we do not write to the device itself.

However, over time we have refactored all the mmio accessors with the
result that the vgpu reuses the gen2 accessors and so inherits the
assert for runtime-pm of the native device. The assert though has
actually been there since commit 3be0bf5acca6 ("drm/i915: Create vGPU
specific MMIO operations to reduce traps").

References: 3be0bf5acca6 ("drm/i915: Create vGPU specific MMIO operations to reduce traps")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Yan Zhao <yan.y.zhao@intel.com>
Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
Reviewed-by: Zhenyu Wang <zhenyuw@linux.intel.com>
Cc: stable@vger.kernel.org
Link: https://patchwork.freedesktop.org/patch/msgid/20200811092532.13753-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/intel_uncore.c

index 1332dde6ff9908b35de4b3ad4f19f50a108aec3d..1c14a07eba7d6f651b7a66208f1f484b20a8f1e6 100644 (file)
@@ -1278,6 +1278,18 @@ unclaimed_reg_debug(struct intel_uncore *uncore,
                spin_unlock(&uncore->debug->lock);
 }
 
+#define __vgpu_read(x) \
+static u##x \
+vgpu_read##x(struct intel_uncore *uncore, i915_reg_t reg, bool trace) { \
+       u##x val = __raw_uncore_read##x(uncore, reg); \
+       trace_i915_reg_rw(false, reg, val, sizeof(val), trace); \
+       return val; \
+}
+__vgpu_read(8)
+__vgpu_read(16)
+__vgpu_read(32)
+__vgpu_read(64)
+
 #define GEN2_READ_HEADER(x) \
        u##x val = 0; \
        assert_rpm_wakelock_held(uncore->rpm);
@@ -1483,6 +1495,16 @@ __gen_reg_write_funcs(gen8);
 #undef GEN6_WRITE_FOOTER
 #undef GEN6_WRITE_HEADER
 
+#define __vgpu_write(x) \
+static void \
+vgpu_write##x(struct intel_uncore *uncore, i915_reg_t reg, u##x val, bool trace) { \
+       trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \
+       __raw_uncore_write##x(uncore, reg, val); \
+}
+__vgpu_write(8)
+__vgpu_write(16)
+__vgpu_write(32)
+
 #define ASSIGN_RAW_WRITE_MMIO_VFUNCS(uncore, x) \
 do { \
        (uncore)->funcs.mmio_writeb = x##_write8; \
@@ -1808,7 +1830,10 @@ static void uncore_raw_init(struct intel_uncore *uncore)
 {
        GEM_BUG_ON(intel_uncore_has_forcewake(uncore));
 
-       if (IS_GEN(uncore->i915, 5)) {
+       if (intel_vgpu_active(uncore->i915)) {
+               ASSIGN_RAW_WRITE_MMIO_VFUNCS(uncore, vgpu);
+               ASSIGN_RAW_READ_MMIO_VFUNCS(uncore, vgpu);
+       } else if (IS_GEN(uncore->i915, 5)) {
                ASSIGN_RAW_WRITE_MMIO_VFUNCS(uncore, gen5);
                ASSIGN_RAW_READ_MMIO_VFUNCS(uncore, gen5);
        } else {