diff options
Diffstat (limited to 'drivers/gpu/drm/i915/gvt/cmd_parser.c')
-rw-r--r-- | drivers/gpu/drm/i915/gvt/cmd_parser.c | 24 |
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 | ||
483 | static unsigned long bypass_scan_mask = 0; | 483 | static unsigned long bypass_scan_mask = 0; |
484 | static bool bypass_batch_buffer_scan = true; | ||
485 | 484 | ||
486 | /* ring ALL, type = 0 */ | 485 | /* ring ALL, type = 0 */ |
487 | static struct sub_op_bits sub_op_mi[] = { | 486 | static 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)) |