aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/gvt/cmd_parser.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2017-02-26 15:34:42 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2017-02-26 15:34:42 -0500
commit8e22e1b3499a446df48c2b26667ca36c55bf864c (patch)
tree5329f98b3eb3c95a9dcbab0fa4f9b6e62f0e788d /drivers/gpu/drm/i915/gvt/cmd_parser.c
parent00d3c14f14d51babd8aeafd5fa734ccf04f5ca3d (diff)
parent64a577196d66b44e37384bc5c4d78c61f59d5b2a (diff)
Merge airlied/drm-next into drm-misc-next
Backmerge the main pull request to sync up with all the newly landed drivers. Otherwise we'll have chaos even before 4.12 started in earnest. Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
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))