diff options
author | Zhenyu Wang <zhenyuw@linux.intel.com> | 2017-06-09 03:48:05 -0400 |
---|---|---|
committer | Jani Nikula <jani.nikula@intel.com> | 2017-06-13 04:19:22 -0400 |
commit | c380f681245d7ae57f17d9ebbbe8f8f1557ee1fb (patch) | |
tree | 9f71164aceb4e5ba34746ff9ea023961ac194cd4 | |
parent | 1c2d6bbf0433ddf7c978ac5f2bd582e9e7d34687 (diff) |
drm/i915: Fix GVT-g PVINFO version compatibility check
Current it's strictly checked if PVINFO version matches 1.0
for GVT-g i915 guest which doesn't help for compatibility at
all and forces GVT-g host can't extend PVINFO easily with version
bump for real compatibility check.
This fixes that to check minimal required PVINFO version instead.
v2:
- drop unneeded version macro
- use only major version for sanity check
v3:
- fix up PVInfo value with kernel type
- one indent fix
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Chuanxiao Dong <chuanxiao.dong@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: stable@vger.kernel.org # v4.10+
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170609074805.5101-1-zhenyuw@linux.intel.com
(cherry picked from commit 0c8792d00d38de85b6ceb1dd67d3ee009d7c8e42)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
-rw-r--r-- | drivers/gpu/drm/i915/i915_pvinfo.h | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_vgpu.c | 10 |
2 files changed, 6 insertions, 12 deletions
diff --git a/drivers/gpu/drm/i915/i915_pvinfo.h b/drivers/gpu/drm/i915/i915_pvinfo.h index c0cb2974caac..2cfe96d3e5d1 100644 --- a/drivers/gpu/drm/i915/i915_pvinfo.h +++ b/drivers/gpu/drm/i915/i915_pvinfo.h | |||
@@ -36,10 +36,6 @@ | |||
36 | #define VGT_VERSION_MAJOR 1 | 36 | #define VGT_VERSION_MAJOR 1 |
37 | #define VGT_VERSION_MINOR 0 | 37 | #define VGT_VERSION_MINOR 0 |
38 | 38 | ||
39 | #define INTEL_VGT_IF_VERSION_ENCODE(major, minor) ((major) << 16 | (minor)) | ||
40 | #define INTEL_VGT_IF_VERSION \ | ||
41 | INTEL_VGT_IF_VERSION_ENCODE(VGT_VERSION_MAJOR, VGT_VERSION_MINOR) | ||
42 | |||
43 | /* | 39 | /* |
44 | * notifications from guest to vgpu device model | 40 | * notifications from guest to vgpu device model |
45 | */ | 41 | */ |
@@ -55,8 +51,8 @@ enum vgt_g2v_type { | |||
55 | 51 | ||
56 | struct vgt_if { | 52 | struct vgt_if { |
57 | u64 magic; /* VGT_MAGIC */ | 53 | u64 magic; /* VGT_MAGIC */ |
58 | uint16_t version_major; | 54 | u16 version_major; |
59 | uint16_t version_minor; | 55 | u16 version_minor; |
60 | u32 vgt_id; /* ID of vGT instance */ | 56 | u32 vgt_id; /* ID of vGT instance */ |
61 | u32 rsv1[12]; /* pad to offset 0x40 */ | 57 | u32 rsv1[12]; /* pad to offset 0x40 */ |
62 | /* | 58 | /* |
diff --git a/drivers/gpu/drm/i915/i915_vgpu.c b/drivers/gpu/drm/i915/i915_vgpu.c index 4ab8a973b61f..2e739018fb4c 100644 --- a/drivers/gpu/drm/i915/i915_vgpu.c +++ b/drivers/gpu/drm/i915/i915_vgpu.c | |||
@@ -60,8 +60,8 @@ | |||
60 | */ | 60 | */ |
61 | void i915_check_vgpu(struct drm_i915_private *dev_priv) | 61 | void i915_check_vgpu(struct drm_i915_private *dev_priv) |
62 | { | 62 | { |
63 | uint64_t magic; | 63 | u64 magic; |
64 | uint32_t version; | 64 | u16 version_major; |
65 | 65 | ||
66 | BUILD_BUG_ON(sizeof(struct vgt_if) != VGT_PVINFO_SIZE); | 66 | BUILD_BUG_ON(sizeof(struct vgt_if) != VGT_PVINFO_SIZE); |
67 | 67 | ||
@@ -69,10 +69,8 @@ void i915_check_vgpu(struct drm_i915_private *dev_priv) | |||
69 | if (magic != VGT_MAGIC) | 69 | if (magic != VGT_MAGIC) |
70 | return; | 70 | return; |
71 | 71 | ||
72 | version = INTEL_VGT_IF_VERSION_ENCODE( | 72 | version_major = __raw_i915_read16(dev_priv, vgtif_reg(version_major)); |
73 | __raw_i915_read16(dev_priv, vgtif_reg(version_major)), | 73 | if (version_major < VGT_VERSION_MAJOR) { |
74 | __raw_i915_read16(dev_priv, vgtif_reg(version_minor))); | ||
75 | if (version != INTEL_VGT_IF_VERSION) { | ||
76 | DRM_INFO("VGT interface version mismatch!\n"); | 74 | DRM_INFO("VGT interface version mismatch!\n"); |
77 | return; | 75 | return; |
78 | } | 76 | } |