drm/i915/gvt: Make elsp_dwords in the right order
authorZhi Wang <zhi.a.wang@intel.com>
Sun, 10 Sep 2017 08:40:04 +0000 (16:40 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Thu, 16 Nov 2017 03:46:07 +0000 (11:46 +0800)
The context descriptors in elsp_dwords are stored in a reversed order and
the definition of context descriptor is also reversed. The revesred stuff
is hard to be used and might cause misunderstanding. Make them in the right
oder for following code re-factoring.

Tested on my SKL NUC.

Signed-off-by: Zhi Wang <zhi.a.wang@intel.com>
drivers/gpu/drm/i915/gvt/execlist.c
drivers/gpu/drm/i915/gvt/execlist.h
drivers/gpu/drm/i915/gvt/handlers.c

index 4427be18e4a93c72eaccae1fc263b044279c5fe8..9f020720511792965dd6f8f51f0565ad8549bff0 100644 (file)
@@ -511,8 +511,8 @@ static int prepare_execlist_workload(struct intel_vgpu_workload *workload)
        if (!workload->emulate_schedule_in)
                return 0;
 
-       ctx[0] = *get_desc_from_elsp_dwords(&workload->elsp_dwords, 1);
-       ctx[1] = *get_desc_from_elsp_dwords(&workload->elsp_dwords, 0);
+       ctx[0] = *get_desc_from_elsp_dwords(&workload->elsp_dwords, 0);
+       ctx[1] = *get_desc_from_elsp_dwords(&workload->elsp_dwords, 1);
 
        ret = emulate_execlist_schedule_in(&vgpu->execlist[ring_id], ctx);
        if (!ret)
@@ -770,21 +770,21 @@ static int submit_context(struct intel_vgpu *vgpu, int ring_id,
 int intel_vgpu_submit_execlist(struct intel_vgpu *vgpu, int ring_id)
 {
        struct intel_vgpu_execlist *execlist = &vgpu->execlist[ring_id];
-       struct execlist_ctx_descriptor_format desc[2];
+       struct execlist_ctx_descriptor_format *desc[2];
        int i, ret;
 
-       desc[0] = *get_desc_from_elsp_dwords(&execlist->elsp_dwords, 1);
-       desc[1] = *get_desc_from_elsp_dwords(&execlist->elsp_dwords, 0);
+       desc[0] = get_desc_from_elsp_dwords(&execlist->elsp_dwords, 0);
+       desc[1] = get_desc_from_elsp_dwords(&execlist->elsp_dwords, 1);
 
-       if (!desc[0].valid) {
+       if (!desc[0]->valid) {
                gvt_vgpu_err("invalid elsp submission, desc0 is invalid\n");
                goto inv_desc;
        }
 
        for (i = 0; i < ARRAY_SIZE(desc); i++) {
-               if (!desc[i].valid)
+               if (!desc[i]->valid)
                        continue;
-               if (!desc[i].privilege_access) {
+               if (!desc[i]->privilege_access) {
                        gvt_vgpu_err("unexpected GGTT elsp submission\n");
                        goto inv_desc;
                }
@@ -792,9 +792,9 @@ int intel_vgpu_submit_execlist(struct intel_vgpu *vgpu, int ring_id)
 
        /* submit workload */
        for (i = 0; i < ARRAY_SIZE(desc); i++) {
-               if (!desc[i].valid)
+               if (!desc[i]->valid)
                        continue;
-               ret = submit_context(vgpu, ring_id, &desc[i], i == 0);
+               ret = submit_context(vgpu, ring_id, desc[i], i == 0);
                if (ret) {
                        gvt_vgpu_err("failed to submit desc %d\n", i);
                        return ret;
@@ -805,7 +805,7 @@ int intel_vgpu_submit_execlist(struct intel_vgpu *vgpu, int ring_id)
 
 inv_desc:
        gvt_vgpu_err("descriptors content: desc0 %08x %08x desc1 %08x %08x\n",
-                    desc[0].udw, desc[0].ldw, desc[1].udw, desc[1].ldw);
+                    desc[0]->udw, desc[0]->ldw, desc[1]->udw, desc[1]->ldw);
        return -EINVAL;
 }
 
index 7eced40a1e309fe02b564e719847b6bbf424acf9..427e40e64d41e882c114fda05478fb6e60bb8379 100644 (file)
 #define _GVT_EXECLIST_H_
 
 struct execlist_ctx_descriptor_format {
-       union {
-               u32 udw;
-               u32 context_id;
-       };
        union {
                u32 ldw;
                struct {
@@ -54,6 +50,10 @@ struct execlist_ctx_descriptor_format {
                        u32 lrca                   : 20;
                };
        };
+       union {
+               u32 udw;
+               u32 context_id;
+       };
 };
 
 struct execlist_status_format {
index a5bed2e71b9260afbe5ee3db7bb6649f29b826a2..820d2667054118e36eb214826f6071625b1d8899 100644 (file)
@@ -1453,7 +1453,7 @@ static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
 
        execlist = &vgpu->execlist[ring_id];
 
-       execlist->elsp_dwords.data[execlist->elsp_dwords.index] = data;
+       execlist->elsp_dwords.data[3 - execlist->elsp_dwords.index] = data;
        if (execlist->elsp_dwords.index == 3) {
                ret = intel_vgpu_submit_execlist(vgpu, ring_id);
                if(ret)