aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/gvt/cmd_parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/gvt/cmd_parser.c')
-rw-r--r--drivers/gpu/drm/i915/gvt/cmd_parser.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
index 9a4b23c3ee97..b9c8e2407682 100644
--- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
+++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
@@ -481,7 +481,6 @@ struct parser_exec_state {
481 (s->vgpu->gvt->device_info.gmadr_bytes_in_cmd >> 2) 481 (s->vgpu->gvt->device_info.gmadr_bytes_in_cmd >> 2)
482 482
483static unsigned long bypass_scan_mask = 0; 483static unsigned long bypass_scan_mask = 0;
484static bool bypass_batch_buffer_scan = true;
485 484
486/* ring ALL, type = 0 */ 485/* ring ALL, type = 0 */
487static struct sub_op_bits sub_op_mi[] = { 486static struct sub_op_bits sub_op_mi[] = {
@@ -1135,6 +1134,8 @@ static int skl_decode_mi_display_flip(struct parser_exec_state *s,
1135 u32 dword2 = cmd_val(s, 2); 1134 u32 dword2 = cmd_val(s, 2);
1136 u32 plane = (dword0 & GENMASK(12, 8)) >> 8; 1135 u32 plane = (dword0 & GENMASK(12, 8)) >> 8;
1137 1136
1137 info->plane = PRIMARY_PLANE;
1138
1138 switch (plane) { 1139 switch (plane) {
1139 case MI_DISPLAY_FLIP_SKL_PLANE_1_A: 1140 case MI_DISPLAY_FLIP_SKL_PLANE_1_A:
1140 info->pipe = PIPE_A; 1141 info->pipe = PIPE_A;
@@ -1148,12 +1149,28 @@ static int skl_decode_mi_display_flip(struct parser_exec_state *s,
1148 info->pipe = PIPE_C; 1149 info->pipe = PIPE_C;
1149 info->event = PRIMARY_C_FLIP_DONE; 1150 info->event = PRIMARY_C_FLIP_DONE;
1150 break; 1151 break;
1152
1153 case MI_DISPLAY_FLIP_SKL_PLANE_2_A:
1154 info->pipe = PIPE_A;
1155 info->event = SPRITE_A_FLIP_DONE;
1156 info->plane = SPRITE_PLANE;
1157 break;
1158 case MI_DISPLAY_FLIP_SKL_PLANE_2_B:
1159 info->pipe = PIPE_B;
1160 info->event = SPRITE_B_FLIP_DONE;
1161 info->plane = SPRITE_PLANE;
1162 break;
1163 case MI_DISPLAY_FLIP_SKL_PLANE_2_C:
1164 info->pipe = PIPE_C;
1165 info->event = SPRITE_C_FLIP_DONE;
1166 info->plane = SPRITE_PLANE;
1167 break;
1168
1151 default: 1169 default:
1152 gvt_err("unknown plane code %d\n", plane); 1170 gvt_err("unknown plane code %d\n", plane);
1153 return -EINVAL; 1171 return -EINVAL;
1154 } 1172 }
1155 1173
1156 info->pipe = PRIMARY_PLANE;
1157 info->stride_val = (dword1 & GENMASK(15, 6)) >> 6; 1174 info->stride_val = (dword1 & GENMASK(15, 6)) >> 6;
1158 info->tile_val = (dword1 & GENMASK(2, 0)); 1175 info->tile_val = (dword1 & GENMASK(2, 0));
1159 info->surf_val = (dword2 & GENMASK(31, 12)) >> 12; 1176 info->surf_val = (dword2 & GENMASK(31, 12)) >> 12;
@@ -1525,9 +1542,6 @@ static int batch_buffer_needs_scan(struct parser_exec_state *s)
1525{ 1542{
1526 struct intel_gvt *gvt = s->vgpu->gvt; 1543 struct intel_gvt *gvt = s->vgpu->gvt;
1527 1544
1528 if (bypass_batch_buffer_scan)
1529 return 0;
1530
1531 if (IS_BROADWELL(gvt->dev_priv) || IS_SKYLAKE(gvt->dev_priv)) { 1545 if (IS_BROADWELL(gvt->dev_priv) || IS_SKYLAKE(gvt->dev_priv)) {
1532 /* BDW decides privilege based on address space */ 1546 /* BDW decides privilege based on address space */
1533 if (cmd_val(s, 0) & (1 << 8)) 1547 if (cmd_val(s, 0) & (1 << 8))