diff options
author | Dave Airlie <airlied@redhat.com> | 2018-12-27 23:05:35 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2018-12-27 23:05:46 -0500 |
commit | 4bcd2ffd214c1dad269c8ec40ac935770d208534 (patch) | |
tree | f34de59161f2dc10d3c8ed4233f2f9a9483eaf9a | |
parent | 221b35fedee1b38b9cee99320f0c60263d229e14 (diff) | |
parent | cb6f4c2c3478b2ff68bd5d0b6020394120075e30 (diff) |
Merge tag 'drm-intel-next-fixes-2018-12-27' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
GVT fixes for v4.21-rc1
Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/87imzfwh73.fsf@intel.com
-rw-r--r-- | drivers/gpu/drm/i915/gvt/cmd_parser.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gvt/gvt.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gvt/gvt.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gvt/handlers.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gvt/interrupt.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gvt/scheduler.c | 33 |
6 files changed, 43 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c index 77edbfcb0f75..77ae634eb11c 100644 --- a/drivers/gpu/drm/i915/gvt/cmd_parser.c +++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c | |||
@@ -1900,11 +1900,11 @@ static struct cmd_info cmd_info[] = { | |||
1900 | 1900 | ||
1901 | {"MI_URB_CLEAR", OP_MI_URB_CLEAR, F_LEN_VAR, R_RCS, D_ALL, 0, 8, NULL}, | 1901 | {"MI_URB_CLEAR", OP_MI_URB_CLEAR, F_LEN_VAR, R_RCS, D_ALL, 0, 8, NULL}, |
1902 | 1902 | ||
1903 | {"ME_SEMAPHORE_SIGNAL", OP_MI_SEMAPHORE_SIGNAL, F_LEN_VAR, R_ALL, | 1903 | {"MI_SEMAPHORE_SIGNAL", OP_MI_SEMAPHORE_SIGNAL, F_LEN_VAR, R_ALL, |
1904 | D_BDW_PLUS, 0, 8, NULL}, | 1904 | D_BDW_PLUS, 0, 8, NULL}, |
1905 | 1905 | ||
1906 | {"ME_SEMAPHORE_WAIT", OP_MI_SEMAPHORE_WAIT, F_LEN_VAR, R_ALL, D_BDW_PLUS, | 1906 | {"MI_SEMAPHORE_WAIT", OP_MI_SEMAPHORE_WAIT, F_LEN_VAR, R_ALL, |
1907 | ADDR_FIX_1(2), 8, cmd_handler_mi_semaphore_wait}, | 1907 | D_BDW_PLUS, ADDR_FIX_1(2), 8, cmd_handler_mi_semaphore_wait}, |
1908 | 1908 | ||
1909 | {"MI_STORE_DATA_IMM", OP_MI_STORE_DATA_IMM, F_LEN_VAR, R_ALL, D_BDW_PLUS, | 1909 | {"MI_STORE_DATA_IMM", OP_MI_STORE_DATA_IMM, F_LEN_VAR, R_ALL, D_BDW_PLUS, |
1910 | ADDR_FIX_1(1), 10, cmd_handler_mi_store_data_imm}, | 1910 | ADDR_FIX_1(1), 10, cmd_handler_mi_store_data_imm}, |
diff --git a/drivers/gpu/drm/i915/gvt/gvt.c b/drivers/gpu/drm/i915/gvt/gvt.c index 6ef5a7fc70df..733a2a0d0c30 100644 --- a/drivers/gpu/drm/i915/gvt/gvt.c +++ b/drivers/gpu/drm/i915/gvt/gvt.c | |||
@@ -437,7 +437,7 @@ int intel_gvt_init_device(struct drm_i915_private *dev_priv) | |||
437 | 437 | ||
438 | ret = intel_gvt_debugfs_init(gvt); | 438 | ret = intel_gvt_debugfs_init(gvt); |
439 | if (ret) | 439 | if (ret) |
440 | gvt_err("debugfs registeration failed, go on.\n"); | 440 | gvt_err("debugfs registration failed, go on.\n"); |
441 | 441 | ||
442 | gvt_dbg_core("gvt device initialization is done\n"); | 442 | gvt_dbg_core("gvt device initialization is done\n"); |
443 | dev_priv->gvt = gvt; | 443 | dev_priv->gvt = gvt; |
diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h index 31f6cdbe5c42..b4ab1dad0143 100644 --- a/drivers/gpu/drm/i915/gvt/gvt.h +++ b/drivers/gpu/drm/i915/gvt/gvt.h | |||
@@ -159,6 +159,10 @@ struct intel_vgpu_submission { | |||
159 | struct kmem_cache *workloads; | 159 | struct kmem_cache *workloads; |
160 | atomic_t running_workload_num; | 160 | atomic_t running_workload_num; |
161 | struct i915_gem_context *shadow_ctx; | 161 | struct i915_gem_context *shadow_ctx; |
162 | union { | ||
163 | u64 i915_context_pml4; | ||
164 | u64 i915_context_pdps[GEN8_3LVL_PDPES]; | ||
165 | }; | ||
162 | DECLARE_BITMAP(shadow_ctx_desc_updated, I915_NUM_ENGINES); | 166 | DECLARE_BITMAP(shadow_ctx_desc_updated, I915_NUM_ENGINES); |
163 | DECLARE_BITMAP(tlb_handle_pending, I915_NUM_ENGINES); | 167 | DECLARE_BITMAP(tlb_handle_pending, I915_NUM_ENGINES); |
164 | void *ring_scan_buffer[I915_NUM_ENGINES]; | 168 | void *ring_scan_buffer[I915_NUM_ENGINES]; |
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c index aa280bb07125..b5475c91e2ef 100644 --- a/drivers/gpu/drm/i915/gvt/handlers.c +++ b/drivers/gpu/drm/i915/gvt/handlers.c | |||
@@ -475,6 +475,7 @@ static i915_reg_t force_nonpriv_white_list[] = { | |||
475 | _MMIO(0x7704), | 475 | _MMIO(0x7704), |
476 | _MMIO(0x7708), | 476 | _MMIO(0x7708), |
477 | _MMIO(0x770c), | 477 | _MMIO(0x770c), |
478 | _MMIO(0x83a8), | ||
478 | _MMIO(0xb110), | 479 | _MMIO(0xb110), |
479 | GEN8_L3SQCREG4,//_MMIO(0xb118) | 480 | GEN8_L3SQCREG4,//_MMIO(0xb118) |
480 | _MMIO(0xe100), | 481 | _MMIO(0xe100), |
diff --git a/drivers/gpu/drm/i915/gvt/interrupt.c b/drivers/gpu/drm/i915/gvt/interrupt.c index 5daa23ae566b..6b9d1354ff29 100644 --- a/drivers/gpu/drm/i915/gvt/interrupt.c +++ b/drivers/gpu/drm/i915/gvt/interrupt.c | |||
@@ -126,7 +126,7 @@ static const char * const irq_name[INTEL_GVT_EVENT_MAX] = { | |||
126 | [FDI_RX_INTERRUPTS_TRANSCODER_C] = "FDI RX Interrupts Combined C", | 126 | [FDI_RX_INTERRUPTS_TRANSCODER_C] = "FDI RX Interrupts Combined C", |
127 | [AUDIO_CP_CHANGE_TRANSCODER_C] = "Audio CP Change Transcoder C", | 127 | [AUDIO_CP_CHANGE_TRANSCODER_C] = "Audio CP Change Transcoder C", |
128 | [AUDIO_CP_REQUEST_TRANSCODER_C] = "Audio CP Request Transcoder C", | 128 | [AUDIO_CP_REQUEST_TRANSCODER_C] = "Audio CP Request Transcoder C", |
129 | [ERR_AND_DBG] = "South Error and Debug Interupts Combined", | 129 | [ERR_AND_DBG] = "South Error and Debug Interrupts Combined", |
130 | [GMBUS] = "Gmbus", | 130 | [GMBUS] = "Gmbus", |
131 | [SDVO_B_HOTPLUG] = "SDVO B hotplug", | 131 | [SDVO_B_HOTPLUG] = "SDVO B hotplug", |
132 | [CRT_HOTPLUG] = "CRT Hotplug", | 132 | [CRT_HOTPLUG] = "CRT Hotplug", |
diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c index b8fbe3fabea3..1ad8c5e1455d 100644 --- a/drivers/gpu/drm/i915/gvt/scheduler.c +++ b/drivers/gpu/drm/i915/gvt/scheduler.c | |||
@@ -1079,6 +1079,21 @@ err: | |||
1079 | return ret; | 1079 | return ret; |
1080 | } | 1080 | } |
1081 | 1081 | ||
1082 | static void | ||
1083 | i915_context_ppgtt_root_restore(struct intel_vgpu_submission *s) | ||
1084 | { | ||
1085 | struct i915_hw_ppgtt *i915_ppgtt = s->shadow_ctx->ppgtt; | ||
1086 | int i; | ||
1087 | |||
1088 | if (i915_vm_is_48bit(&i915_ppgtt->vm)) | ||
1089 | px_dma(&i915_ppgtt->pml4) = s->i915_context_pml4; | ||
1090 | else { | ||
1091 | for (i = 0; i < GEN8_3LVL_PDPES; i++) | ||
1092 | px_dma(i915_ppgtt->pdp.page_directory[i]) = | ||
1093 | s->i915_context_pdps[i]; | ||
1094 | } | ||
1095 | } | ||
1096 | |||
1082 | /** | 1097 | /** |
1083 | * intel_vgpu_clean_submission - free submission-related resource for vGPU | 1098 | * intel_vgpu_clean_submission - free submission-related resource for vGPU |
1084 | * @vgpu: a vGPU | 1099 | * @vgpu: a vGPU |
@@ -1091,6 +1106,7 @@ void intel_vgpu_clean_submission(struct intel_vgpu *vgpu) | |||
1091 | struct intel_vgpu_submission *s = &vgpu->submission; | 1106 | struct intel_vgpu_submission *s = &vgpu->submission; |
1092 | 1107 | ||
1093 | intel_vgpu_select_submission_ops(vgpu, ALL_ENGINES, 0); | 1108 | intel_vgpu_select_submission_ops(vgpu, ALL_ENGINES, 0); |
1109 | i915_context_ppgtt_root_restore(s); | ||
1094 | i915_gem_context_put(s->shadow_ctx); | 1110 | i915_gem_context_put(s->shadow_ctx); |
1095 | kmem_cache_destroy(s->workloads); | 1111 | kmem_cache_destroy(s->workloads); |
1096 | } | 1112 | } |
@@ -1116,6 +1132,21 @@ void intel_vgpu_reset_submission(struct intel_vgpu *vgpu, | |||
1116 | s->ops->reset(vgpu, engine_mask); | 1132 | s->ops->reset(vgpu, engine_mask); |
1117 | } | 1133 | } |
1118 | 1134 | ||
1135 | static void | ||
1136 | i915_context_ppgtt_root_save(struct intel_vgpu_submission *s) | ||
1137 | { | ||
1138 | struct i915_hw_ppgtt *i915_ppgtt = s->shadow_ctx->ppgtt; | ||
1139 | int i; | ||
1140 | |||
1141 | if (i915_vm_is_48bit(&i915_ppgtt->vm)) | ||
1142 | s->i915_context_pml4 = px_dma(&i915_ppgtt->pml4); | ||
1143 | else { | ||
1144 | for (i = 0; i < GEN8_3LVL_PDPES; i++) | ||
1145 | s->i915_context_pdps[i] = | ||
1146 | px_dma(i915_ppgtt->pdp.page_directory[i]); | ||
1147 | } | ||
1148 | } | ||
1149 | |||
1119 | /** | 1150 | /** |
1120 | * intel_vgpu_setup_submission - setup submission-related resource for vGPU | 1151 | * intel_vgpu_setup_submission - setup submission-related resource for vGPU |
1121 | * @vgpu: a vGPU | 1152 | * @vgpu: a vGPU |
@@ -1138,6 +1169,8 @@ int intel_vgpu_setup_submission(struct intel_vgpu *vgpu) | |||
1138 | if (IS_ERR(s->shadow_ctx)) | 1169 | if (IS_ERR(s->shadow_ctx)) |
1139 | return PTR_ERR(s->shadow_ctx); | 1170 | return PTR_ERR(s->shadow_ctx); |
1140 | 1171 | ||
1172 | i915_context_ppgtt_root_save(s); | ||
1173 | |||
1141 | bitmap_zero(s->shadow_ctx_desc_updated, I915_NUM_ENGINES); | 1174 | bitmap_zero(s->shadow_ctx_desc_updated, I915_NUM_ENGINES); |
1142 | 1175 | ||
1143 | s->workloads = kmem_cache_create_usercopy("gvt-g_vgpu_workload", | 1176 | s->workloads = kmem_cache_create_usercopy("gvt-g_vgpu_workload", |