| From c380f681245d7ae57f17d9ebbbe8f8f1557ee1fb Mon Sep 17 00:00:00 2001 |
| From: Zhenyu Wang <zhenyuw@linux.intel.com> |
| Date: Fri, 9 Jun 2017 15:48:05 +0800 |
| Subject: drm/i915: Fix GVT-g PVINFO version compatibility check |
| |
| From: Zhenyu Wang <zhenyuw@linux.intel.com> |
| |
| commit c380f681245d7ae57f17d9ebbbe8f8f1557ee1fb upstream. |
| |
| 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> |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/i915/i915_pvinfo.h | 8 ++------ |
| drivers/gpu/drm/i915/i915_vgpu.c | 10 ++++------ |
| 2 files changed, 6 insertions(+), 12 deletions(-) |
| |
| --- a/drivers/gpu/drm/i915/i915_pvinfo.h |
| +++ b/drivers/gpu/drm/i915/i915_pvinfo.h |
| @@ -36,10 +36,6 @@ |
| #define VGT_VERSION_MAJOR 1 |
| #define VGT_VERSION_MINOR 0 |
| |
| -#define INTEL_VGT_IF_VERSION_ENCODE(major, minor) ((major) << 16 | (minor)) |
| -#define INTEL_VGT_IF_VERSION \ |
| - INTEL_VGT_IF_VERSION_ENCODE(VGT_VERSION_MAJOR, VGT_VERSION_MINOR) |
| - |
| /* |
| * notifications from guest to vgpu device model |
| */ |
| @@ -55,8 +51,8 @@ enum vgt_g2v_type { |
| |
| struct vgt_if { |
| u64 magic; /* VGT_MAGIC */ |
| - uint16_t version_major; |
| - uint16_t version_minor; |
| + u16 version_major; |
| + u16 version_minor; |
| u32 vgt_id; /* ID of vGT instance */ |
| u32 rsv1[12]; /* pad to offset 0x40 */ |
| /* |
| --- a/drivers/gpu/drm/i915/i915_vgpu.c |
| +++ b/drivers/gpu/drm/i915/i915_vgpu.c |
| @@ -60,8 +60,8 @@ |
| */ |
| void i915_check_vgpu(struct drm_i915_private *dev_priv) |
| { |
| - uint64_t magic; |
| - uint32_t version; |
| + u64 magic; |
| + u16 version_major; |
| |
| BUILD_BUG_ON(sizeof(struct vgt_if) != VGT_PVINFO_SIZE); |
| |
| @@ -69,10 +69,8 @@ void i915_check_vgpu(struct drm_i915_pri |
| if (magic != VGT_MAGIC) |
| return; |
| |
| - version = INTEL_VGT_IF_VERSION_ENCODE( |
| - __raw_i915_read16(dev_priv, vgtif_reg(version_major)), |
| - __raw_i915_read16(dev_priv, vgtif_reg(version_minor))); |
| - if (version != INTEL_VGT_IF_VERSION) { |
| + version_major = __raw_i915_read16(dev_priv, vgtif_reg(version_major)); |
| + if (version_major < VGT_VERSION_MAJOR) { |
| DRM_INFO("VGT interface version mismatch!\n"); |
| return; |
| } |