drm/i915: Turn vgpu pdps into an array
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 4 Nov 2015 21:20:12 +0000 (23:20 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 18 Nov 2015 12:35:42 +0000 (14:35 +0200)
We'll want to avoid performing arithmetic with register offsets, so
instead calculating the vgpu PDP as pdp0_lo+offset, make the PDPs
into an array. This way we can simply loop through them.

Cc: Eddie Dong <eddie.dong@intel.com>
Cc: Jike Song <jike.song@intel.com>
Cc: Kevin Tian <kevin.tian@intel.com>
Cc: Yu Zhang <yu.c.zhang@linux.intel.com>
Cc: Zhi Wang <zhi.a.wang@intel.com>
Cc: Zhiyuan Lv <zhiyuan.lv@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1446672017-24497-25-git-send-email-ville.syrjala@linux.intel.com
Reviewed-by: Zhiyuan Lv <zhiyuan.lv@intel.com>
drivers/gpu/drm/i915/i915_gem_gtt.c
drivers/gpu/drm/i915/i915_vgpu.h

index 1e3dd1060e51778f28b519a5e87d28916db5b541..96e923648360978afb21a76092f4fb25d05054a5 100644 (file)
@@ -910,14 +910,13 @@ static int gen8_ppgtt_notify_vgt(struct i915_hw_ppgtt *ppgtt, bool create)
        enum vgt_g2v_type msg;
        struct drm_device *dev = ppgtt->base.dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
-       unsigned int offset = vgtif_reg(pdp0_lo);
        int i;
 
        if (USES_FULL_48BIT_PPGTT(dev)) {
                u64 daddr = px_dma(&ppgtt->pml4);
 
-               I915_WRITE(offset, lower_32_bits(daddr));
-               I915_WRITE(offset + 4, upper_32_bits(daddr));
+               I915_WRITE(vgtif_reg(pdp[0].lo), lower_32_bits(daddr));
+               I915_WRITE(vgtif_reg(pdp[0].hi), upper_32_bits(daddr));
 
                msg = (create ? VGT_G2V_PPGTT_L4_PAGE_TABLE_CREATE :
                                VGT_G2V_PPGTT_L4_PAGE_TABLE_DESTROY);
@@ -925,10 +924,8 @@ static int gen8_ppgtt_notify_vgt(struct i915_hw_ppgtt *ppgtt, bool create)
                for (i = 0; i < GEN8_LEGACY_PDPES; i++) {
                        u64 daddr = i915_page_dir_dma_addr(ppgtt, i);
 
-                       I915_WRITE(offset, lower_32_bits(daddr));
-                       I915_WRITE(offset + 4, upper_32_bits(daddr));
-
-                       offset += 8;
+                       I915_WRITE(vgtif_reg(pdp[i].lo), lower_32_bits(daddr));
+                       I915_WRITE(vgtif_reg(pdp[i].hi), upper_32_bits(daddr));
                }
 
                msg = (create ? VGT_G2V_PPGTT_L3_PAGE_TABLE_CREATE :
index 21c97f44d637b24b1d20dc1383a67bd5f65eaf8c..2c97d5a47e6d0c48a724e90b9c7f555cc7ac6964 100644 (file)
@@ -92,14 +92,10 @@ struct vgt_if {
        uint32_t g2v_notify;
        uint32_t rsv6[7];
 
-       uint32_t pdp0_lo;
-       uint32_t pdp0_hi;
-       uint32_t pdp1_lo;
-       uint32_t pdp1_hi;
-       uint32_t pdp2_lo;
-       uint32_t pdp2_hi;
-       uint32_t pdp3_lo;
-       uint32_t pdp3_hi;
+       struct {
+               uint32_t lo;
+               uint32_t hi;
+       } pdp[4];
 
        uint32_t execlist_context_descriptor_lo;
        uint32_t execlist_context_descriptor_hi;