drm/i915/gvt: Add PTE IPS bit operations
authorChangbin Du <changbin.du@intel.com>
Tue, 15 May 2018 02:35:34 +0000 (10:35 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Mon, 9 Jul 2018 02:22:45 +0000 (10:22 +0800)
Add three IPS operation functions to test/set/clear IPS in PDE.

Signed-off-by: Changbin Du <changbin.du@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/gtt.c
drivers/gpu/drm/i915/gvt/gtt.h

index 03f2a5b26546c50797c403f306b97def9d8fd422..3e673391453092b1d9cfd1e4daa773c7b60274b8 100644 (file)
@@ -400,6 +400,22 @@ static bool gen8_gtt_test_pse(struct intel_gvt_gtt_entry *e)
        return true;
 }
 
+static bool gen8_gtt_test_ips(struct intel_gvt_gtt_entry *e)
+{
+       if (GEM_WARN_ON(e->type != GTT_TYPE_PPGTT_PDE_ENTRY))
+               return false;
+
+       return !!(e->val64 & GEN8_PDE_IPS_64K);
+}
+
+static void gen8_gtt_clear_ips(struct intel_gvt_gtt_entry *e)
+{
+       if (GEM_WARN_ON(e->type != GTT_TYPE_PPGTT_PDE_ENTRY))
+               return;
+
+       e->val64 &= ~GEN8_PDE_IPS_64K;
+}
+
 static bool gen8_gtt_test_present(struct intel_gvt_gtt_entry *e)
 {
        /*
@@ -456,6 +472,8 @@ static struct intel_gvt_gtt_pte_ops gen8_gtt_pte_ops = {
        .set_present = gtt_entry_set_present,
        .test_present = gen8_gtt_test_present,
        .test_pse = gen8_gtt_test_pse,
+       .clear_ips = gen8_gtt_clear_ips,
+       .test_ips = gen8_gtt_test_ips,
        .get_pfn = gen8_gtt_get_pfn,
        .set_pfn = gen8_gtt_set_pfn,
 };
index 60630816df5c5e90db0871ec8b03a66a2b03a443..9257b7467b14f38c483dbe4a4317c27378c639ec 100644 (file)
@@ -63,6 +63,8 @@ struct intel_gvt_gtt_pte_ops {
        void (*clear_present)(struct intel_gvt_gtt_entry *e);
        void (*set_present)(struct intel_gvt_gtt_entry *e);
        bool (*test_pse)(struct intel_gvt_gtt_entry *e);
+       bool (*test_ips)(struct intel_gvt_gtt_entry *e);
+       void (*clear_ips)(struct intel_gvt_gtt_entry *e);
        void (*set_pfn)(struct intel_gvt_gtt_entry *e, unsigned long pfn);
        unsigned long (*get_pfn)(struct intel_gvt_gtt_entry *e);
 };