Commit 54cff647 authored by Zhi Wang's avatar Zhi Wang Committed by Zhenyu Wang

drm/i915/gvt: Make elsp_dwords in the right order

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: default avatarZhi Wang <zhi.a.wang@intel.com>
parent a58c38aa
...@@ -511,8 +511,8 @@ static int prepare_execlist_workload(struct intel_vgpu_workload *workload) ...@@ -511,8 +511,8 @@ static int prepare_execlist_workload(struct intel_vgpu_workload *workload)
if (!workload->emulate_schedule_in) if (!workload->emulate_schedule_in)
return 0; return 0;
ctx[0] = *get_desc_from_elsp_dwords(&workload->elsp_dwords, 1); ctx[0] = *get_desc_from_elsp_dwords(&workload->elsp_dwords, 0);
ctx[1] = *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); ret = emulate_execlist_schedule_in(&vgpu->execlist[ring_id], ctx);
if (!ret) if (!ret)
...@@ -770,21 +770,21 @@ static int submit_context(struct intel_vgpu *vgpu, int ring_id, ...@@ -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) int intel_vgpu_submit_execlist(struct intel_vgpu *vgpu, int ring_id)
{ {
struct intel_vgpu_execlist *execlist = &vgpu->execlist[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; int i, ret;
desc[0] = *get_desc_from_elsp_dwords(&execlist->elsp_dwords, 1); desc[0] = get_desc_from_elsp_dwords(&execlist->elsp_dwords, 0);
desc[1] = *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"); gvt_vgpu_err("invalid elsp submission, desc0 is invalid\n");
goto inv_desc; goto inv_desc;
} }
for (i = 0; i < ARRAY_SIZE(desc); i++) { for (i = 0; i < ARRAY_SIZE(desc); i++) {
if (!desc[i].valid) if (!desc[i]->valid)
continue; continue;
if (!desc[i].privilege_access) { if (!desc[i]->privilege_access) {
gvt_vgpu_err("unexpected GGTT elsp submission\n"); gvt_vgpu_err("unexpected GGTT elsp submission\n");
goto inv_desc; goto inv_desc;
} }
...@@ -792,9 +792,9 @@ int intel_vgpu_submit_execlist(struct intel_vgpu *vgpu, int ring_id) ...@@ -792,9 +792,9 @@ int intel_vgpu_submit_execlist(struct intel_vgpu *vgpu, int ring_id)
/* submit workload */ /* submit workload */
for (i = 0; i < ARRAY_SIZE(desc); i++) { for (i = 0; i < ARRAY_SIZE(desc); i++) {
if (!desc[i].valid) if (!desc[i]->valid)
continue; continue;
ret = submit_context(vgpu, ring_id, &desc[i], i == 0); ret = submit_context(vgpu, ring_id, desc[i], i == 0);
if (ret) { if (ret) {
gvt_vgpu_err("failed to submit desc %d\n", i); gvt_vgpu_err("failed to submit desc %d\n", i);
return ret; return ret;
...@@ -805,7 +805,7 @@ int intel_vgpu_submit_execlist(struct intel_vgpu *vgpu, int ring_id) ...@@ -805,7 +805,7 @@ int intel_vgpu_submit_execlist(struct intel_vgpu *vgpu, int ring_id)
inv_desc: inv_desc:
gvt_vgpu_err("descriptors content: desc0 %08x %08x desc1 %08x %08x\n", 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; return -EINVAL;
} }
......
...@@ -36,10 +36,6 @@ ...@@ -36,10 +36,6 @@
#define _GVT_EXECLIST_H_ #define _GVT_EXECLIST_H_
struct execlist_ctx_descriptor_format { struct execlist_ctx_descriptor_format {
union {
u32 udw;
u32 context_id;
};
union { union {
u32 ldw; u32 ldw;
struct { struct {
...@@ -54,6 +50,10 @@ struct execlist_ctx_descriptor_format { ...@@ -54,6 +50,10 @@ struct execlist_ctx_descriptor_format {
u32 lrca : 20; u32 lrca : 20;
}; };
}; };
union {
u32 udw;
u32 context_id;
};
}; };
struct execlist_status_format { struct execlist_status_format {
......
...@@ -1453,7 +1453,7 @@ static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset, ...@@ -1453,7 +1453,7 @@ static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
execlist = &vgpu->execlist[ring_id]; 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) { if (execlist->elsp_dwords.index == 3) {
ret = intel_vgpu_submit_execlist(vgpu, ring_id); ret = intel_vgpu_submit_execlist(vgpu, ring_id);
if(ret) if(ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment