aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2016-11-10 18:25:32 -0500
committerDave Airlie <airlied@redhat.com>2016-11-10 18:25:32 -0500
commitdb8feb6979e91c2e916631a75dbfe9f10f6b05e5 (patch)
treeb4aa5965f207c18d908a794e5f4e647604d77553
parentafdd548f742ca454fc343696de472f3aaa5dc488 (diff)
parent58e197d631d44f9f4817b8198b43132a40de1164 (diff)
Merge tag 'drm-intel-next-2016-11-08' of git://anongit.freedesktop.org/git/drm-intel into drm-next
- gpu idling rework for s/r (Imre) - vlv mappable scanout fix - speed up probing in resume (Lyude) - dp audio workarounds for gen9 (Dhinakaran) - more conversion to using dev_priv internally (Ville) - more gen9+ wm fixes and cleanups (Maarten) - shrinker cleanup&fixes (Chris) - reorg plane init code (Ville) - implement support for multiple timelines (prep work for scheduler) from Chris and all - untangle dev->struct_mutex locking as prep for multiple timelines (Chris) - refactor bxt phy code and collect it all in intel_dpio_phy.c (Ander) - another gvt with bugfixes all over from Zhenyu - piles of lspcon fixes from Imre - 90/270 rotation fixes (Ville) - guc log buffer support (Akash+Sagar) - fbc fixes from Paulo - untangle rpm vs. tiling-fences/mmaps (Chris) - fix atomic commit to wait on the right fences (Daniel Stone) * tag 'drm-intel-next-2016-11-08' of git://anongit.freedesktop.org/git/drm-intel: (181 commits) drm/i915: Update DRIVER_DATE to 20161108 drm/i915: Mark CPU cache as dirty when used for rendering drm/i915: Add assert for no pending GPU requests during suspend/resume in LR mode drm/i915: Make sure engines are idle during GPU idling in LR mode drm/i915: Avoid early GPU idling due to race with new request drm/i915: Avoid early GPU idling due to already pending idle work drm/i915: Limit Valleyview and earlier to only using mappable scanout drm/i915: Round tile chunks up for constructing partial VMAs drm/i915: Remove the vma from the object list upon close drm/i915: Reinit polling before hpd when resuming drm/i915: Remove redundant reprobe in i915_drm_resume drm/i915/dp: Extend BDW DP audio workaround to GEN9 platforms drm/i915/dp: BDW cdclk fix for DP audio drm/i915: Fix pages pin counting around swizzle quirk drm/i915: Fix test on inputs for vma_compare() drm/i915/guc: Cache the client mapping drm/i915: Tidy slab cache allocations drm/i915: Introduce HAS_64BIT_RELOC drm/i915: Show the execlist queue in debugfs/i915_engine_info drm/i915: Unify global_list into global_link ...
-rw-r--r--Documentation/gpu/i915.rst2
-rw-r--r--MAINTAINERS1
-rw-r--r--drivers/gpu/drm/i915/Kconfig13
-rw-r--r--drivers/gpu/drm/i915/Makefile3
-rw-r--r--drivers/gpu/drm/i915/gvt/cmd_parser.c29
-rw-r--r--drivers/gpu/drm/i915/gvt/gtt.c4
-rw-r--r--drivers/gpu/drm/i915/gvt/gvt.c8
-rw-r--r--drivers/gpu/drm/i915/gvt/gvt.h2
-rw-r--r--drivers/gpu/drm/i915/gvt/handlers.c26
-rw-r--r--drivers/gpu/drm/i915/gvt/opregion.c6
-rw-r--r--drivers/gpu/drm/i915/gvt/render.c21
-rw-r--r--drivers/gpu/drm/i915/gvt/scheduler.c28
-rw-r--r--drivers/gpu/drm/i915/gvt/vgpu.c4
-rw-r--r--drivers/gpu/drm/i915/i915_cmd_parser.c2
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c295
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c72
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h466
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c2332
-rw-r--r--drivers/gpu/drm/i915/i915_gem.h2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_batch_pool.c39
-rw-r--r--drivers/gpu/drm/i915/i915_gem_context.c91
-rw-r--r--drivers/gpu/drm/i915/i915_gem_dmabuf.c150
-rw-r--r--drivers/gpu/drm/i915/i915_gem_evict.c18
-rw-r--r--drivers/gpu/drm/i915/i915_gem_execbuffer.c77
-rw-r--r--drivers/gpu/drm/i915/i915_gem_fence.c31
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c323
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.h12
-rw-r--r--drivers/gpu/drm/i915/i915_gem_internal.c170
-rw-r--r--drivers/gpu/drm/i915/i915_gem_render_state.c186
-rw-r--r--drivers/gpu/drm/i915/i915_gem_render_state.h4
-rw-r--r--drivers/gpu/drm/i915/i915_gem_request.c583
-rw-r--r--drivers/gpu/drm/i915/i915_gem_request.h124
-rw-r--r--drivers/gpu/drm/i915/i915_gem_shrinker.c99
-rw-r--r--drivers/gpu/drm/i915/i915_gem_stolen.c51
-rw-r--r--drivers/gpu/drm/i915/i915_gem_tiling.c47
-rw-r--r--drivers/gpu/drm/i915/i915_gem_timeline.c (renamed from drivers/gpu/drm/i915/i915_gem_dmabuf.h)56
-rw-r--r--drivers/gpu/drm/i915/i915_gem_timeline.h72
-rw-r--r--drivers/gpu/drm/i915/i915_gem_userptr.c121
-rw-r--r--drivers/gpu/drm/i915/i915_gpu_error.c101
-rw-r--r--drivers/gpu/drm/i915/i915_guc_submission.c648
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c597
-rw-r--r--drivers/gpu/drm/i915/i915_pci.c5
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h260
-rw-r--r--drivers/gpu/drm/i915/i915_sw_fence.c40
-rw-r--r--drivers/gpu/drm/i915/i915_sw_fence.h8
-rw-r--r--drivers/gpu/drm/i915/i915_trace.h8
-rw-r--r--drivers/gpu/drm/i915/intel_atomic_plane.c2
-rw-r--r--drivers/gpu/drm/i915/intel_audio.c112
-rw-r--r--drivers/gpu/drm/i915/intel_breadcrumbs.c43
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c2
-rw-r--r--drivers/gpu/drm/i915/intel_csr.c11
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c362
-rw-r--r--drivers/gpu/drm/i915/intel_device_info.c5
-rw-r--r--drivers/gpu/drm/i915/intel_display.c678
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c258
-rw-r--r--drivers/gpu/drm/i915/intel_dpio_phy.c559
-rw-r--r--drivers/gpu/drm/i915/intel_dpll_mgr.c84
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h107
-rw-r--r--drivers/gpu/drm/i915/intel_dvo.c6
-rw-r--r--drivers/gpu/drm/i915/intel_engine_cs.c29
-rw-r--r--drivers/gpu/drm/i915/intel_fbc.c2
-rw-r--r--drivers/gpu/drm/i915/intel_fifo_underrun.c23
-rw-r--r--drivers/gpu/drm/i915/intel_guc.h32
-rw-r--r--drivers/gpu/drm/i915/intel_guc_fwif.h82
-rw-r--r--drivers/gpu/drm/i915/intel_guc_loader.c10
-rw-r--r--drivers/gpu/drm/i915/intel_hangcheck.c450
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c2
-rw-r--r--drivers/gpu/drm/i915/intel_lrc.c162
-rw-r--r--drivers/gpu/drm/i915/intel_lrc.h1
-rw-r--r--drivers/gpu/drm/i915/intel_lspcon.c57
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c6
-rw-r--r--drivers/gpu/drm/i915/intel_overlay.c4
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c587
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c273
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.h91
-rw-r--r--drivers/gpu/drm/i915/intel_runtime_pm.c154
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c8
-rw-r--r--drivers/gpu/drm/i915/intel_sprite.c91
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c6
79 files changed, 6752 insertions, 4784 deletions
diff --git a/Documentation/gpu/i915.rst b/Documentation/gpu/i915.rst
index 95ce77ff4342..ba83b7d88f1f 100644
--- a/Documentation/gpu/i915.rst
+++ b/Documentation/gpu/i915.rst
@@ -189,7 +189,7 @@ Display Refresh Rate Switching (DRRS)
189DPIO 189DPIO
190---- 190----
191 191
192.. kernel-doc:: drivers/gpu/drm/i915/i915_reg.h 192.. kernel-doc:: drivers/gpu/drm/i915/intel_dpio_phy.c
193 :doc: DPIO 193 :doc: DPIO
194 194
195CSR firmware support for DMC 195CSR firmware support for DMC
diff --git a/MAINTAINERS b/MAINTAINERS
index e18faacc096c..955134d22cff 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4060,7 +4060,6 @@ INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
4060M: Daniel Vetter <daniel.vetter@intel.com> 4060M: Daniel Vetter <daniel.vetter@intel.com>
4061M: Jani Nikula <jani.nikula@linux.intel.com> 4061M: Jani Nikula <jani.nikula@linux.intel.com>
4062L: intel-gfx@lists.freedesktop.org 4062L: intel-gfx@lists.freedesktop.org
4063L: dri-devel@lists.freedesktop.org
4064W: https://01.org/linuxgraphics/ 4063W: https://01.org/linuxgraphics/
4065Q: http://patchwork.freedesktop.org/project/intel-gfx/ 4064Q: http://patchwork.freedesktop.org/project/intel-gfx/
4066T: git git://anongit.freedesktop.org/drm-intel 4065T: git git://anongit.freedesktop.org/drm-intel
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index 1c1b19ccb92f..df96aed6975a 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -11,6 +11,7 @@ config DRM_I915
11 select DRM_KMS_HELPER 11 select DRM_KMS_HELPER
12 select DRM_PANEL 12 select DRM_PANEL
13 select DRM_MIPI_DSI 13 select DRM_MIPI_DSI
14 select RELAY
14 # i915 depends on ACPI_VIDEO when ACPI is enabled 15 # i915 depends on ACPI_VIDEO when ACPI is enabled
15 # but for select to work, need to select ACPI_VIDEO's dependencies, ick 16 # but for select to work, need to select ACPI_VIDEO's dependencies, ick
16 select BACKLIGHT_LCD_SUPPORT if ACPI 17 select BACKLIGHT_LCD_SUPPORT if ACPI
@@ -24,16 +25,17 @@ config DRM_I915
24 including 830M, 845G, 852GM, 855GM, 865G, 915G, 945G, 965G, 25 including 830M, 845G, 852GM, 855GM, 865G, 915G, 945G, 965G,
25 G35, G41, G43, G45 chipsets and Celeron, Pentium, Core i3, 26 G35, G41, G43, G45 chipsets and Celeron, Pentium, Core i3,
26 Core i5, Core i7 as well as Atom CPUs with integrated graphics. 27 Core i5, Core i7 as well as Atom CPUs with integrated graphics.
27 If M is selected, the module will be called i915. AGP support 28
28 is required for this driver to work. This driver is used by 29 This driver is used by the Intel driver in X.org 6.8 and
29 the Intel driver in X.org 6.8 and XFree86 4.4 and above. It 30 XFree86 4.4 and above. It replaces the older i830 module that
30 replaces the older i830 module that supported a subset of the 31 supported a subset of the hardware in older X.org releases.
31 hardware in older X.org releases.
32 32
33 Note that the older i810/i815 chipsets require the use of the 33 Note that the older i810/i815 chipsets require the use of the
34 i810 driver instead, and the Atom z5xx series has an entirely 34 i810 driver instead, and the Atom z5xx series has an entirely
35 different implementation. 35 different implementation.
36 36
37 If "M" is selected, the module will be called i915.
38
37config DRM_I915_PRELIMINARY_HW_SUPPORT 39config DRM_I915_PRELIMINARY_HW_SUPPORT
38 bool "Enable preliminary support for prerelease Intel hardware by default" 40 bool "Enable preliminary support for prerelease Intel hardware by default"
39 depends on DRM_I915 41 depends on DRM_I915
@@ -85,6 +87,7 @@ config DRM_I915_USERPTR
85config DRM_I915_GVT 87config DRM_I915_GVT
86 bool "Enable Intel GVT-g graphics virtualization host support" 88 bool "Enable Intel GVT-g graphics virtualization host support"
87 depends on DRM_I915 89 depends on DRM_I915
90 depends on 64BIT
88 default n 91 default n
89 help 92 help
90 Choose this option if you want to enable Intel GVT-g graphics 93 Choose this option if you want to enable Intel GVT-g graphics
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 612340097f4b..0857e5035f4d 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -35,16 +35,19 @@ i915-y += i915_cmd_parser.o \
35 i915_gem_execbuffer.o \ 35 i915_gem_execbuffer.o \
36 i915_gem_fence.o \ 36 i915_gem_fence.o \
37 i915_gem_gtt.o \ 37 i915_gem_gtt.o \
38 i915_gem_internal.o \
38 i915_gem.o \ 39 i915_gem.o \
39 i915_gem_render_state.o \ 40 i915_gem_render_state.o \
40 i915_gem_request.o \ 41 i915_gem_request.o \
41 i915_gem_shrinker.o \ 42 i915_gem_shrinker.o \
42 i915_gem_stolen.o \ 43 i915_gem_stolen.o \
43 i915_gem_tiling.o \ 44 i915_gem_tiling.o \
45 i915_gem_timeline.o \
44 i915_gem_userptr.o \ 46 i915_gem_userptr.o \
45 i915_trace_points.o \ 47 i915_trace_points.o \
46 intel_breadcrumbs.o \ 48 intel_breadcrumbs.o \
47 intel_engine_cs.o \ 49 intel_engine_cs.o \
50 intel_hangcheck.o \
48 intel_lrc.o \ 51 intel_lrc.o \
49 intel_mocs.o \ 52 intel_mocs.o \
50 intel_ringbuffer.o \ 53 intel_ringbuffer.o \
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
index aafb57e26288..0084ece8d8ff 100644
--- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
+++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
@@ -1145,7 +1145,7 @@ static int skl_decode_mi_display_flip(struct parser_exec_state *s,
1145 info->event = PRIMARY_B_FLIP_DONE; 1145 info->event = PRIMARY_B_FLIP_DONE;
1146 break; 1146 break;
1147 case MI_DISPLAY_FLIP_SKL_PLANE_1_C: 1147 case MI_DISPLAY_FLIP_SKL_PLANE_1_C:
1148 info->pipe = PIPE_B; 1148 info->pipe = PIPE_C;
1149 info->event = PRIMARY_C_FLIP_DONE; 1149 info->event = PRIMARY_C_FLIP_DONE;
1150 break; 1150 break;
1151 default: 1151 default:
@@ -1201,20 +1201,19 @@ static int gen8_update_plane_mmio_from_mi_display_flip(
1201 struct drm_i915_private *dev_priv = s->vgpu->gvt->dev_priv; 1201 struct drm_i915_private *dev_priv = s->vgpu->gvt->dev_priv;
1202 struct intel_vgpu *vgpu = s->vgpu; 1202 struct intel_vgpu *vgpu = s->vgpu;
1203 1203
1204#define write_bits(reg, e, s, v) do { \ 1204 set_mask_bits(&vgpu_vreg(vgpu, info->surf_reg), GENMASK(31, 12),
1205 vgpu_vreg(vgpu, reg) &= ~GENMASK(e, s); \ 1205 info->surf_val << 12);
1206 vgpu_vreg(vgpu, reg) |= (v << s); \ 1206 if (IS_SKYLAKE(dev_priv)) {
1207} while (0) 1207 set_mask_bits(&vgpu_vreg(vgpu, info->stride_reg), GENMASK(9, 0),
1208 1208 info->stride_val);
1209 write_bits(info->surf_reg, 31, 12, info->surf_val); 1209 set_mask_bits(&vgpu_vreg(vgpu, info->ctrl_reg), GENMASK(12, 10),
1210 if (IS_SKYLAKE(dev_priv)) 1210 info->tile_val << 10);
1211 write_bits(info->stride_reg, 9, 0, info->stride_val); 1211 } else {
1212 else 1212 set_mask_bits(&vgpu_vreg(vgpu, info->stride_reg), GENMASK(15, 6),
1213 write_bits(info->stride_reg, 15, 6, info->stride_val); 1213 info->stride_val << 6);
1214 write_bits(info->ctrl_reg, IS_SKYLAKE(dev_priv) ? 12 : 10, 1214 set_mask_bits(&vgpu_vreg(vgpu, info->ctrl_reg), GENMASK(10, 10),
1215 10, info->tile_val); 1215 info->tile_val << 10);
1216 1216 }
1217#undef write_bits
1218 1217
1219 vgpu_vreg(vgpu, PIPE_FRMCOUNT_G4X(info->pipe))++; 1218 vgpu_vreg(vgpu, PIPE_FRMCOUNT_G4X(info->pipe))++;
1220 intel_vgpu_trigger_virtual_event(vgpu, info->event); 1219 intel_vgpu_trigger_virtual_event(vgpu, info->event);
diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c
index 2cc761328569..6554da9f9f5b 100644
--- a/drivers/gpu/drm/i915/gvt/gtt.c
+++ b/drivers/gpu/drm/i915/gvt/gtt.c
@@ -276,7 +276,7 @@ static u64 read_pte64(struct drm_i915_private *dev_priv, unsigned long index)
276 pte = readq(addr); 276 pte = readq(addr);
277#else 277#else
278 pte = ioread32(addr); 278 pte = ioread32(addr);
279 pte |= ioread32(addr + 4) << 32; 279 pte |= (u64)ioread32(addr + 4) << 32;
280#endif 280#endif
281 return pte; 281 return pte;
282} 282}
@@ -1944,7 +1944,7 @@ static int create_scratch_page(struct intel_vgpu *vgpu)
1944 mfn = intel_gvt_hypervisor_virt_to_mfn(vaddr); 1944 mfn = intel_gvt_hypervisor_virt_to_mfn(vaddr);
1945 1945
1946 if (mfn == INTEL_GVT_INVALID_ADDR) { 1946 if (mfn == INTEL_GVT_INVALID_ADDR) {
1947 gvt_err("fail to translate vaddr:0x%llx\n", (u64)vaddr); 1947 gvt_err("fail to translate vaddr: 0x%p\n", vaddr);
1948 __free_page(gtt->scratch_page); 1948 __free_page(gtt->scratch_page);
1949 gtt->scratch_page = NULL; 1949 gtt->scratch_page = NULL;
1950 return -ENXIO; 1950 return -ENXIO;
diff --git a/drivers/gpu/drm/i915/gvt/gvt.c b/drivers/gpu/drm/i915/gvt/gvt.c
index 31b59d40f3fb..385969a89216 100644
--- a/drivers/gpu/drm/i915/gvt/gvt.c
+++ b/drivers/gpu/drm/i915/gvt/gvt.c
@@ -65,6 +65,8 @@ struct intel_gvt_io_emulation_ops intel_gvt_io_emulation_ops = {
65 */ 65 */
66int intel_gvt_init_host(void) 66int intel_gvt_init_host(void)
67{ 67{
68 int ret;
69
68 if (intel_gvt_host.initialized) 70 if (intel_gvt_host.initialized)
69 return 0; 71 return 0;
70 72
@@ -90,7 +92,8 @@ int intel_gvt_init_host(void)
90 return -EINVAL; 92 return -EINVAL;
91 93
92 /* Try to detect if we're running in host instead of VM. */ 94 /* Try to detect if we're running in host instead of VM. */
93 if (!intel_gvt_hypervisor_detect_host()) 95 ret = intel_gvt_hypervisor_detect_host();
96 if (ret)
94 return -ENODEV; 97 return -ENODEV;
95 98
96 gvt_dbg_core("Running with hypervisor %s in host mode\n", 99 gvt_dbg_core("Running with hypervisor %s in host mode\n",
@@ -103,19 +106,20 @@ int intel_gvt_init_host(void)
103static void init_device_info(struct intel_gvt *gvt) 106static void init_device_info(struct intel_gvt *gvt)
104{ 107{
105 struct intel_gvt_device_info *info = &gvt->device_info; 108 struct intel_gvt_device_info *info = &gvt->device_info;
109 struct pci_dev *pdev = gvt->dev_priv->drm.pdev;
106 110
107 if (IS_BROADWELL(gvt->dev_priv) || IS_SKYLAKE(gvt->dev_priv)) { 111 if (IS_BROADWELL(gvt->dev_priv) || IS_SKYLAKE(gvt->dev_priv)) {
108 info->max_support_vgpus = 8; 112 info->max_support_vgpus = 8;
109 info->cfg_space_size = 256; 113 info->cfg_space_size = 256;
110 info->mmio_size = 2 * 1024 * 1024; 114 info->mmio_size = 2 * 1024 * 1024;
111 info->mmio_bar = 0; 115 info->mmio_bar = 0;
112 info->msi_cap_offset = IS_SKYLAKE(gvt->dev_priv) ? 0xac : 0x90;
113 info->gtt_start_offset = 8 * 1024 * 1024; 116 info->gtt_start_offset = 8 * 1024 * 1024;
114 info->gtt_entry_size = 8; 117 info->gtt_entry_size = 8;
115 info->gtt_entry_size_shift = 3; 118 info->gtt_entry_size_shift = 3;
116 info->gmadr_bytes_in_cmd = 8; 119 info->gmadr_bytes_in_cmd = 8;
117 info->max_surface_size = 36 * 1024 * 1024; 120 info->max_surface_size = 36 * 1024 * 1024;
118 } 121 }
122 info->msi_cap_offset = pdev->msi_cap;
119} 123}
120 124
121static int gvt_service_thread(void *data) 125static int gvt_service_thread(void *data)
diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h
index 11df62b542b1..62fc9e3ac5c6 100644
--- a/drivers/gpu/drm/i915/gvt/gvt.h
+++ b/drivers/gpu/drm/i915/gvt/gvt.h
@@ -382,6 +382,8 @@ void intel_vgpu_clean_opregion(struct intel_vgpu *vgpu);
382int intel_vgpu_init_opregion(struct intel_vgpu *vgpu, u32 gpa); 382int intel_vgpu_init_opregion(struct intel_vgpu *vgpu, u32 gpa);
383 383
384int intel_vgpu_emulate_opregion_request(struct intel_vgpu *vgpu, u32 swsci); 384int intel_vgpu_emulate_opregion_request(struct intel_vgpu *vgpu, u32 swsci);
385int setup_vgpu_mmio(struct intel_vgpu *vgpu);
386void populate_pvinfo_page(struct intel_vgpu *vgpu);
385 387
386#include "mpt.h" 388#include "mpt.h"
387 389
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
index 3e74fb3d4aa9..9ab1f95dddc5 100644
--- a/drivers/gpu/drm/i915/gvt/handlers.c
+++ b/drivers/gpu/drm/i915/gvt/handlers.c
@@ -239,7 +239,11 @@ static int handle_device_reset(struct intel_vgpu *vgpu, unsigned int offset,
239 vgpu->resetting = true; 239 vgpu->resetting = true;
240 240
241 intel_vgpu_stop_schedule(vgpu); 241 intel_vgpu_stop_schedule(vgpu);
242 if (scheduler->current_vgpu == vgpu) { 242 /*
243 * The current_vgpu will set to NULL after stopping the
244 * scheduler when the reset is triggered by current vgpu.
245 */
246 if (scheduler->current_vgpu == NULL) {
243 mutex_unlock(&vgpu->gvt->lock); 247 mutex_unlock(&vgpu->gvt->lock);
244 intel_gvt_wait_vgpu_idle(vgpu); 248 intel_gvt_wait_vgpu_idle(vgpu);
245 mutex_lock(&vgpu->gvt->lock); 249 mutex_lock(&vgpu->gvt->lock);
@@ -247,6 +251,16 @@ static int handle_device_reset(struct intel_vgpu *vgpu, unsigned int offset,
247 251
248 intel_vgpu_reset_execlist(vgpu, bitmap); 252 intel_vgpu_reset_execlist(vgpu, bitmap);
249 253
254 /* full GPU reset */
255 if (bitmap == 0xff) {
256 mutex_unlock(&vgpu->gvt->lock);
257 intel_vgpu_clean_gtt(vgpu);
258 mutex_lock(&vgpu->gvt->lock);
259 setup_vgpu_mmio(vgpu);
260 populate_pvinfo_page(vgpu);
261 intel_vgpu_init_gtt(vgpu);
262 }
263
250 vgpu->resetting = false; 264 vgpu->resetting = false;
251 265
252 return 0; 266 return 0;
@@ -258,6 +272,7 @@ static int gdrst_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
258 u32 data; 272 u32 data;
259 u64 bitmap = 0; 273 u64 bitmap = 0;
260 274
275 write_vreg(vgpu, offset, p_data, bytes);
261 data = vgpu_vreg(vgpu, offset); 276 data = vgpu_vreg(vgpu, offset);
262 277
263 if (data & GEN6_GRDOM_FULL) { 278 if (data & GEN6_GRDOM_FULL) {
@@ -1305,7 +1320,7 @@ static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
1305 int ring_id = render_mmio_to_ring_id(vgpu->gvt, offset); 1320 int ring_id = render_mmio_to_ring_id(vgpu->gvt, offset);
1306 struct intel_vgpu_execlist *execlist; 1321 struct intel_vgpu_execlist *execlist;
1307 u32 data = *(u32 *)p_data; 1322 u32 data = *(u32 *)p_data;
1308 int ret; 1323 int ret = 0;
1309 1324
1310 if (WARN_ON(ring_id < 0 || ring_id > I915_NUM_ENGINES - 1)) 1325 if (WARN_ON(ring_id < 0 || ring_id > I915_NUM_ENGINES - 1))
1311 return -EINVAL; 1326 return -EINVAL;
@@ -1313,12 +1328,15 @@ static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
1313 execlist = &vgpu->execlist[ring_id]; 1328 execlist = &vgpu->execlist[ring_id];
1314 1329
1315 execlist->elsp_dwords.data[execlist->elsp_dwords.index] = data; 1330 execlist->elsp_dwords.data[execlist->elsp_dwords.index] = data;
1316 if (execlist->elsp_dwords.index == 3) 1331 if (execlist->elsp_dwords.index == 3) {
1317 ret = intel_vgpu_submit_execlist(vgpu, ring_id); 1332 ret = intel_vgpu_submit_execlist(vgpu, ring_id);
1333 if(ret)
1334 gvt_err("fail submit workload on ring %d\n", ring_id);
1335 }
1318 1336
1319 ++execlist->elsp_dwords.index; 1337 ++execlist->elsp_dwords.index;
1320 execlist->elsp_dwords.index &= 0x3; 1338 execlist->elsp_dwords.index &= 0x3;
1321 return 0; 1339 return ret;
1322} 1340}
1323 1341
1324static int ring_mode_mmio_write(struct intel_vgpu *vgpu, unsigned int offset, 1342static int ring_mode_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
diff --git a/drivers/gpu/drm/i915/gvt/opregion.c b/drivers/gpu/drm/i915/gvt/opregion.c
index 973c8a9d0b15..95218913b0bc 100644
--- a/drivers/gpu/drm/i915/gvt/opregion.c
+++ b/drivers/gpu/drm/i915/gvt/opregion.c
@@ -163,7 +163,7 @@ int intel_vgpu_init_opregion(struct intel_vgpu *vgpu, u32 gpa)
163 */ 163 */
164void intel_gvt_clean_opregion(struct intel_gvt *gvt) 164void intel_gvt_clean_opregion(struct intel_gvt *gvt)
165{ 165{
166 iounmap(gvt->opregion.opregion_va); 166 memunmap(gvt->opregion.opregion_va);
167 gvt->opregion.opregion_va = NULL; 167 gvt->opregion.opregion_va = NULL;
168} 168}
169 169
@@ -181,8 +181,8 @@ int intel_gvt_init_opregion(struct intel_gvt *gvt)
181 pci_read_config_dword(gvt->dev_priv->drm.pdev, INTEL_GVT_PCI_OPREGION, 181 pci_read_config_dword(gvt->dev_priv->drm.pdev, INTEL_GVT_PCI_OPREGION,
182 &gvt->opregion.opregion_pa); 182 &gvt->opregion.opregion_pa);
183 183
184 gvt->opregion.opregion_va = acpi_os_ioremap(gvt->opregion.opregion_pa, 184 gvt->opregion.opregion_va = memremap(gvt->opregion.opregion_pa,
185 INTEL_GVT_OPREGION_SIZE); 185 INTEL_GVT_OPREGION_SIZE, MEMREMAP_WB);
186 if (!gvt->opregion.opregion_va) { 186 if (!gvt->opregion.opregion_va) {
187 gvt_err("fail to map host opregion\n"); 187 gvt_err("fail to map host opregion\n");
188 return -EFAULT; 188 return -EFAULT;
diff --git a/drivers/gpu/drm/i915/gvt/render.c b/drivers/gpu/drm/i915/gvt/render.c
index feebb65ba641..3af894b3d257 100644
--- a/drivers/gpu/drm/i915/gvt/render.c
+++ b/drivers/gpu/drm/i915/gvt/render.c
@@ -118,6 +118,7 @@ static u32 gen9_render_mocs_L3[32];
118static void handle_tlb_pending_event(struct intel_vgpu *vgpu, int ring_id) 118static void handle_tlb_pending_event(struct intel_vgpu *vgpu, int ring_id)
119{ 119{
120 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv; 120 struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
121 enum forcewake_domains fw;
121 i915_reg_t reg; 122 i915_reg_t reg;
122 u32 regs[] = { 123 u32 regs[] = {
123 [RCS] = 0x4260, 124 [RCS] = 0x4260,
@@ -135,11 +136,25 @@ static void handle_tlb_pending_event(struct intel_vgpu *vgpu, int ring_id)
135 136
136 reg = _MMIO(regs[ring_id]); 137 reg = _MMIO(regs[ring_id]);
137 138
138 I915_WRITE(reg, 0x1); 139 /* WaForceWakeRenderDuringMmioTLBInvalidate:skl
140 * we need to put a forcewake when invalidating RCS TLB caches,
141 * otherwise device can go to RC6 state and interrupt invalidation
142 * process
143 */
144 fw = intel_uncore_forcewake_for_reg(dev_priv, reg,
145 FW_REG_READ | FW_REG_WRITE);
146 if (ring_id == RCS && IS_SKYLAKE(dev_priv))
147 fw |= FORCEWAKE_RENDER;
139 148
140 if (wait_for_atomic((I915_READ(reg) == 0), 50)) 149 intel_uncore_forcewake_get(dev_priv, fw);
150
151 I915_WRITE_FW(reg, 0x1);
152
153 if (wait_for_atomic((I915_READ_FW(reg) == 0), 50))
141 gvt_err("timeout in invalidate ring (%d) tlb\n", ring_id); 154 gvt_err("timeout in invalidate ring (%d) tlb\n", ring_id);
142 155
156 intel_uncore_forcewake_put(dev_priv, fw);
157
143 gvt_dbg_core("invalidate TLB for ring %d\n", ring_id); 158 gvt_dbg_core("invalidate TLB for ring %d\n", ring_id);
144} 159}
145 160
@@ -162,6 +177,7 @@ static void load_mocs(struct intel_vgpu *vgpu, int ring_id)
162 if (!IS_SKYLAKE(dev_priv)) 177 if (!IS_SKYLAKE(dev_priv))
163 return; 178 return;
164 179
180 offset.reg = regs[ring_id];
165 for (i = 0; i < 64; i++) { 181 for (i = 0; i < 64; i++) {
166 gen9_render_mocs[ring_id][i] = I915_READ(offset); 182 gen9_render_mocs[ring_id][i] = I915_READ(offset);
167 I915_WRITE(offset, vgpu_vreg(vgpu, offset)); 183 I915_WRITE(offset, vgpu_vreg(vgpu, offset));
@@ -199,6 +215,7 @@ static void restore_mocs(struct intel_vgpu *vgpu, int ring_id)
199 if (!IS_SKYLAKE(dev_priv)) 215 if (!IS_SKYLAKE(dev_priv))
200 return; 216 return;
201 217
218 offset.reg = regs[ring_id];
202 for (i = 0; i < 64; i++) { 219 for (i = 0; i < 64; i++) {
203 vgpu_vreg(vgpu, offset) = I915_READ(offset); 220 vgpu_vreg(vgpu, offset) = I915_READ(offset);
204 I915_WRITE(offset, gen9_render_mocs[ring_id][i]); 221 I915_WRITE(offset, gen9_render_mocs[ring_id][i]);
diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
index e96eaeebeb0a..18acb45dd14d 100644
--- a/drivers/gpu/drm/i915/gvt/scheduler.c
+++ b/drivers/gpu/drm/i915/gvt/scheduler.c
@@ -400,21 +400,27 @@ static int workload_thread(void *priv)
400 int ring_id = p->ring_id; 400 int ring_id = p->ring_id;
401 struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler; 401 struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
402 struct intel_vgpu_workload *workload = NULL; 402 struct intel_vgpu_workload *workload = NULL;
403 long lret;
403 int ret; 404 int ret;
404 bool need_force_wake = IS_SKYLAKE(gvt->dev_priv); 405 bool need_force_wake = IS_SKYLAKE(gvt->dev_priv);
406 DEFINE_WAIT_FUNC(wait, woken_wake_function);
405 407
406 kfree(p); 408 kfree(p);
407 409
408 gvt_dbg_core("workload thread for ring %d started\n", ring_id); 410 gvt_dbg_core("workload thread for ring %d started\n", ring_id);
409 411
410 while (!kthread_should_stop()) { 412 while (!kthread_should_stop()) {
411 ret = wait_event_interruptible(scheduler->waitq[ring_id], 413 add_wait_queue(&scheduler->waitq[ring_id], &wait);
412 kthread_should_stop() || 414 do {
413 (workload = pick_next_workload(gvt, ring_id))); 415 workload = pick_next_workload(gvt, ring_id);
414 416 if (workload)
415 WARN_ON_ONCE(ret); 417 break;
416 418 wait_woken(&wait, TASK_INTERRUPTIBLE,
417 if (kthread_should_stop()) 419 MAX_SCHEDULE_TIMEOUT);
420 } while (!kthread_should_stop());
421 remove_wait_queue(&scheduler->waitq[ring_id], &wait);
422
423 if (!workload)
418 break; 424 break;
419 425
420 mutex_lock(&scheduler_mutex); 426 mutex_lock(&scheduler_mutex);
@@ -444,10 +450,12 @@ static int workload_thread(void *priv)
444 gvt_dbg_sched("ring id %d wait workload %p\n", 450 gvt_dbg_sched("ring id %d wait workload %p\n",
445 workload->ring_id, workload); 451 workload->ring_id, workload);
446 452
447 workload->status = i915_wait_request(workload->req, 453 lret = i915_wait_request(workload->req,
448 0, NULL, NULL); 454 0, MAX_SCHEDULE_TIMEOUT);
449 if (workload->status != 0) 455 if (lret < 0) {
456 workload->status = lret;
450 gvt_err("fail to wait workload, skip\n"); 457 gvt_err("fail to wait workload, skip\n");
458 }
451 459
452complete: 460complete:
453 gvt_dbg_sched("will complete workload %p\n, status: %d\n", 461 gvt_dbg_sched("will complete workload %p\n, status: %d\n",
diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
index 9401436d721f..4f54005b976d 100644
--- a/drivers/gpu/drm/i915/gvt/vgpu.c
+++ b/drivers/gpu/drm/i915/gvt/vgpu.c
@@ -41,7 +41,7 @@ static void clean_vgpu_mmio(struct intel_vgpu *vgpu)
41 vgpu->mmio.vreg = vgpu->mmio.sreg = NULL; 41 vgpu->mmio.vreg = vgpu->mmio.sreg = NULL;
42} 42}
43 43
44static int setup_vgpu_mmio(struct intel_vgpu *vgpu) 44int setup_vgpu_mmio(struct intel_vgpu *vgpu)
45{ 45{
46 struct intel_gvt *gvt = vgpu->gvt; 46 struct intel_gvt *gvt = vgpu->gvt;
47 const struct intel_gvt_device_info *info = &gvt->device_info; 47 const struct intel_gvt_device_info *info = &gvt->device_info;
@@ -103,7 +103,7 @@ static void setup_vgpu_cfg_space(struct intel_vgpu *vgpu,
103 } 103 }
104} 104}
105 105
106static void populate_pvinfo_page(struct intel_vgpu *vgpu) 106void populate_pvinfo_page(struct intel_vgpu *vgpu)
107{ 107{
108 /* setup the ballooning information */ 108 /* setup the ballooning information */
109 vgpu_vreg64(vgpu, vgtif_reg(magic)) = VGT_MAGIC; 109 vgpu_vreg64(vgpu, vgtif_reg(magic)) = VGT_MAGIC;
diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c
index f191d7b66b1d..f5039f4f988f 100644
--- a/drivers/gpu/drm/i915/i915_cmd_parser.c
+++ b/drivers/gpu/drm/i915/i915_cmd_parser.c
@@ -1290,7 +1290,7 @@ int intel_engine_cmd_parser(struct intel_engine_cs *engine,
1290 } 1290 }
1291 1291
1292 if (ret == 0 && needs_clflush_after) 1292 if (ret == 0 && needs_clflush_after)
1293 drm_clflush_virt_range(shadow_batch_obj->mapping, batch_len); 1293 drm_clflush_virt_range(shadow_batch_obj->mm.mapping, batch_len);
1294 i915_gem_object_unpin_map(shadow_batch_obj); 1294 i915_gem_object_unpin_map(shadow_batch_obj);
1295 1295
1296 return ret; 1296 return ret;
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 20638d22bbad..c9465fbff2df 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -107,12 +107,12 @@ static char get_tiling_flag(struct drm_i915_gem_object *obj)
107 107
108static char get_global_flag(struct drm_i915_gem_object *obj) 108static char get_global_flag(struct drm_i915_gem_object *obj)
109{ 109{
110 return obj->fault_mappable ? 'g' : ' '; 110 return !list_empty(&obj->userfault_link) ? 'g' : ' ';
111} 111}
112 112
113static char get_pin_mapped_flag(struct drm_i915_gem_object *obj) 113static char get_pin_mapped_flag(struct drm_i915_gem_object *obj)
114{ 114{
115 return obj->mapping ? 'M' : ' '; 115 return obj->mm.mapping ? 'M' : ' ';
116} 116}
117 117
118static u64 i915_gem_obj_total_ggtt_size(struct drm_i915_gem_object *obj) 118static u64 i915_gem_obj_total_ggtt_size(struct drm_i915_gem_object *obj)
@@ -136,11 +136,10 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
136 struct i915_vma *vma; 136 struct i915_vma *vma;
137 unsigned int frontbuffer_bits; 137 unsigned int frontbuffer_bits;
138 int pin_count = 0; 138 int pin_count = 0;
139 enum intel_engine_id id;
140 139
141 lockdep_assert_held(&obj->base.dev->struct_mutex); 140 lockdep_assert_held(&obj->base.dev->struct_mutex);
142 141
143 seq_printf(m, "%pK: %c%c%c%c%c %8zdKiB %02x %02x [ ", 142 seq_printf(m, "%pK: %c%c%c%c%c %8zdKiB %02x %02x %s%s%s",
144 &obj->base, 143 &obj->base,
145 get_active_flag(obj), 144 get_active_flag(obj),
146 get_pin_flag(obj), 145 get_pin_flag(obj),
@@ -149,17 +148,10 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
149 get_pin_mapped_flag(obj), 148 get_pin_mapped_flag(obj),
150 obj->base.size / 1024, 149 obj->base.size / 1024,
151 obj->base.read_domains, 150 obj->base.read_domains,
152 obj->base.write_domain); 151 obj->base.write_domain,
153 for_each_engine(engine, dev_priv, id)
154 seq_printf(m, "%x ",
155 i915_gem_active_get_seqno(&obj->last_read[id],
156 &obj->base.dev->struct_mutex));
157 seq_printf(m, "] %x %s%s%s",
158 i915_gem_active_get_seqno(&obj->last_write,
159 &obj->base.dev->struct_mutex),
160 i915_cache_level_str(dev_priv, obj->cache_level), 152 i915_cache_level_str(dev_priv, obj->cache_level),
161 obj->dirty ? " dirty" : "", 153 obj->mm.dirty ? " dirty" : "",
162 obj->madv == I915_MADV_DONTNEED ? " purgeable" : ""); 154 obj->mm.madv == I915_MADV_DONTNEED ? " purgeable" : "");
163 if (obj->base.name) 155 if (obj->base.name)
164 seq_printf(m, " (name: %d)", obj->base.name); 156 seq_printf(m, " (name: %d)", obj->base.name);
165 list_for_each_entry(vma, &obj->vma_list, obj_link) { 157 list_for_each_entry(vma, &obj->vma_list, obj_link) {
@@ -187,8 +179,7 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
187 if (obj->stolen) 179 if (obj->stolen)
188 seq_printf(m, " (stolen: %08llx)", obj->stolen->start); 180 seq_printf(m, " (stolen: %08llx)", obj->stolen->start);
189 181
190 engine = i915_gem_active_get_engine(&obj->last_write, 182 engine = i915_gem_object_last_write_engine(obj);
191 &dev_priv->drm.struct_mutex);
192 if (engine) 183 if (engine)
193 seq_printf(m, " (%s)", engine->name); 184 seq_printf(m, " (%s)", engine->name);
194 185
@@ -226,7 +217,7 @@ static int i915_gem_stolen_list_info(struct seq_file *m, void *data)
226 return ret; 217 return ret;
227 218
228 total_obj_size = total_gtt_size = count = 0; 219 total_obj_size = total_gtt_size = count = 0;
229 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) { 220 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_link) {
230 if (obj->stolen == NULL) 221 if (obj->stolen == NULL)
231 continue; 222 continue;
232 223
@@ -236,7 +227,7 @@ static int i915_gem_stolen_list_info(struct seq_file *m, void *data)
236 total_gtt_size += i915_gem_obj_total_ggtt_size(obj); 227 total_gtt_size += i915_gem_obj_total_ggtt_size(obj);
237 count++; 228 count++;
238 } 229 }
239 list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list) { 230 list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_link) {
240 if (obj->stolen == NULL) 231 if (obj->stolen == NULL)
241 continue; 232 continue;
242 233
@@ -399,16 +390,16 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
399 size = count = 0; 390 size = count = 0;
400 mapped_size = mapped_count = 0; 391 mapped_size = mapped_count = 0;
401 purgeable_size = purgeable_count = 0; 392 purgeable_size = purgeable_count = 0;
402 list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list) { 393 list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_link) {
403 size += obj->base.size; 394 size += obj->base.size;
404 ++count; 395 ++count;
405 396
406 if (obj->madv == I915_MADV_DONTNEED) { 397 if (obj->mm.madv == I915_MADV_DONTNEED) {
407 purgeable_size += obj->base.size; 398 purgeable_size += obj->base.size;
408 ++purgeable_count; 399 ++purgeable_count;
409 } 400 }
410 401
411 if (obj->mapping) { 402 if (obj->mm.mapping) {
412 mapped_count++; 403 mapped_count++;
413 mapped_size += obj->base.size; 404 mapped_size += obj->base.size;
414 } 405 }
@@ -416,7 +407,7 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
416 seq_printf(m, "%u unbound objects, %llu bytes\n", count, size); 407 seq_printf(m, "%u unbound objects, %llu bytes\n", count, size);
417 408
418 size = count = dpy_size = dpy_count = 0; 409 size = count = dpy_size = dpy_count = 0;
419 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) { 410 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_link) {
420 size += obj->base.size; 411 size += obj->base.size;
421 ++count; 412 ++count;
422 413
@@ -425,12 +416,12 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
425 ++dpy_count; 416 ++dpy_count;
426 } 417 }
427 418
428 if (obj->madv == I915_MADV_DONTNEED) { 419 if (obj->mm.madv == I915_MADV_DONTNEED) {
429 purgeable_size += obj->base.size; 420 purgeable_size += obj->base.size;
430 ++purgeable_count; 421 ++purgeable_count;
431 } 422 }
432 423
433 if (obj->mapping) { 424 if (obj->mm.mapping) {
434 mapped_count++; 425 mapped_count++;
435 mapped_size += obj->base.size; 426 mapped_size += obj->base.size;
436 } 427 }
@@ -502,7 +493,7 @@ static int i915_gem_gtt_info(struct seq_file *m, void *data)
502 return ret; 493 return ret;
503 494
504 total_obj_size = total_gtt_size = count = 0; 495 total_obj_size = total_gtt_size = count = 0;
505 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) { 496 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_link) {
506 if (show_pin_display_only && !obj->pin_display) 497 if (show_pin_display_only && !obj->pin_display)
507 continue; 498 continue;
508 499
@@ -561,7 +552,7 @@ static int i915_gem_pageflip_info(struct seq_file *m, void *data)
561 seq_printf(m, "Flip queued on %s at seqno %x, next seqno %x [current breadcrumb %x], completed? %d\n", 552 seq_printf(m, "Flip queued on %s at seqno %x, next seqno %x [current breadcrumb %x], completed? %d\n",
562 engine->name, 553 engine->name,
563 i915_gem_request_get_seqno(work->flip_queued_req), 554 i915_gem_request_get_seqno(work->flip_queued_req),
564 dev_priv->next_seqno, 555 atomic_read(&dev_priv->gt.global_timeline.next_seqno),
565 intel_engine_get_seqno(engine), 556 intel_engine_get_seqno(engine),
566 i915_gem_request_completed(work->flip_queued_req)); 557 i915_gem_request_completed(work->flip_queued_req));
567 } else 558 } else
@@ -640,17 +631,10 @@ static void print_request(struct seq_file *m,
640 struct drm_i915_gem_request *rq, 631 struct drm_i915_gem_request *rq,
641 const char *prefix) 632 const char *prefix)
642{ 633{
643 struct pid *pid = rq->ctx->pid; 634 seq_printf(m, "%s%x [%x:%x] @ %d: %s\n", prefix,
644 struct task_struct *task; 635 rq->global_seqno, rq->ctx->hw_id, rq->fence.seqno,
645
646 rcu_read_lock();
647 task = pid ? pid_task(pid, PIDTYPE_PID) : NULL;
648 seq_printf(m, "%s%x [%x:%x] @ %d: %s [%d]\n", prefix,
649 rq->fence.seqno, rq->ctx->hw_id, rq->fence.seqno,
650 jiffies_to_msecs(jiffies - rq->emitted_jiffies), 636 jiffies_to_msecs(jiffies - rq->emitted_jiffies),
651 task ? task->comm : "<unknown>", 637 rq->timeline->common->name);
652 task ? task->pid : -1);
653 rcu_read_unlock();
654} 638}
655 639
656static int i915_gem_request_info(struct seq_file *m, void *data) 640static int i915_gem_request_info(struct seq_file *m, void *data)
@@ -671,13 +655,13 @@ static int i915_gem_request_info(struct seq_file *m, void *data)
671 int count; 655 int count;
672 656
673 count = 0; 657 count = 0;
674 list_for_each_entry(req, &engine->request_list, link) 658 list_for_each_entry(req, &engine->timeline->requests, link)
675 count++; 659 count++;
676 if (count == 0) 660 if (count == 0)
677 continue; 661 continue;
678 662
679 seq_printf(m, "%s requests: %d\n", engine->name, count); 663 seq_printf(m, "%s requests: %d\n", engine->name, count);
680 list_for_each_entry(req, &engine->request_list, link) 664 list_for_each_entry(req, &engine->timeline->requests, link)
681 print_request(m, req, " "); 665 print_request(m, req, " ");
682 666
683 any++; 667 any++;
@@ -699,14 +683,14 @@ static void i915_ring_seqno_info(struct seq_file *m,
699 seq_printf(m, "Current sequence (%s): %x\n", 683 seq_printf(m, "Current sequence (%s): %x\n",
700 engine->name, intel_engine_get_seqno(engine)); 684 engine->name, intel_engine_get_seqno(engine));
701 685
702 spin_lock(&b->lock); 686 spin_lock_irq(&b->lock);
703 for (rb = rb_first(&b->waiters); rb; rb = rb_next(rb)) { 687 for (rb = rb_first(&b->waiters); rb; rb = rb_next(rb)) {
704 struct intel_wait *w = container_of(rb, typeof(*w), node); 688 struct intel_wait *w = container_of(rb, typeof(*w), node);
705 689
706 seq_printf(m, "Waiting (%s): %s [%d] on %x\n", 690 seq_printf(m, "Waiting (%s): %s [%d] on %x\n",
707 engine->name, w->tsk->comm, w->tsk->pid, w->seqno); 691 engine->name, w->tsk->comm, w->tsk->pid, w->seqno);
708 } 692 }
709 spin_unlock(&b->lock); 693 spin_unlock_irq(&b->lock);
710} 694}
711 695
712static int i915_gem_seqno_info(struct seq_file *m, void *data) 696static int i915_gem_seqno_info(struct seq_file *m, void *data)
@@ -743,17 +727,32 @@ static int i915_interrupt_info(struct seq_file *m, void *data)
743 I915_READ(VLV_IIR_RW)); 727 I915_READ(VLV_IIR_RW));
744 seq_printf(m, "Display IMR:\t%08x\n", 728 seq_printf(m, "Display IMR:\t%08x\n",
745 I915_READ(VLV_IMR)); 729 I915_READ(VLV_IMR));
746 for_each_pipe(dev_priv, pipe) 730 for_each_pipe(dev_priv, pipe) {
731 enum intel_display_power_domain power_domain;
732
733 power_domain = POWER_DOMAIN_PIPE(pipe);
734 if (!intel_display_power_get_if_enabled(dev_priv,
735 power_domain)) {
736 seq_printf(m, "Pipe %c power disabled\n",
737 pipe_name(pipe));
738 continue;
739 }
740
747 seq_printf(m, "Pipe %c stat:\t%08x\n", 741 seq_printf(m, "Pipe %c stat:\t%08x\n",
748 pipe_name(pipe), 742 pipe_name(pipe),
749 I915_READ(PIPESTAT(pipe))); 743 I915_READ(PIPESTAT(pipe)));
750 744
745 intel_display_power_put(dev_priv, power_domain);
746 }
747
748 intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
751 seq_printf(m, "Port hotplug:\t%08x\n", 749 seq_printf(m, "Port hotplug:\t%08x\n",
752 I915_READ(PORT_HOTPLUG_EN)); 750 I915_READ(PORT_HOTPLUG_EN));
753 seq_printf(m, "DPFLIPSTAT:\t%08x\n", 751 seq_printf(m, "DPFLIPSTAT:\t%08x\n",
754 I915_READ(VLV_DPFLIPSTAT)); 752 I915_READ(VLV_DPFLIPSTAT));
755 seq_printf(m, "DPINVGTT:\t%08x\n", 753 seq_printf(m, "DPINVGTT:\t%08x\n",
756 I915_READ(DPINVGTT)); 754 I915_READ(DPINVGTT));
755 intel_display_power_put(dev_priv, POWER_DOMAIN_INIT);
757 756
758 for (i = 0; i < 4; i++) { 757 for (i = 0; i < 4; i++) {
759 seq_printf(m, "GT Interrupt IMR %d:\t%08x\n", 758 seq_printf(m, "GT Interrupt IMR %d:\t%08x\n",
@@ -1046,15 +1045,8 @@ static int
1046i915_next_seqno_get(void *data, u64 *val) 1045i915_next_seqno_get(void *data, u64 *val)
1047{ 1046{
1048 struct drm_i915_private *dev_priv = data; 1047 struct drm_i915_private *dev_priv = data;
1049 int ret;
1050
1051 ret = mutex_lock_interruptible(&dev_priv->drm.struct_mutex);
1052 if (ret)
1053 return ret;
1054
1055 *val = dev_priv->next_seqno;
1056 mutex_unlock(&dev_priv->drm.struct_mutex);
1057 1048
1049 *val = atomic_read(&dev_priv->gt.global_timeline.next_seqno);
1058 return 0; 1050 return 0;
1059} 1051}
1060 1052
@@ -1069,7 +1061,7 @@ i915_next_seqno_set(void *data, u64 val)
1069 if (ret) 1061 if (ret)
1070 return ret; 1062 return ret;
1071 1063
1072 ret = i915_gem_set_seqno(dev, val); 1064 ret = i915_gem_set_global_seqno(dev, val);
1073 mutex_unlock(&dev->struct_mutex); 1065 mutex_unlock(&dev->struct_mutex);
1074 1066
1075 return ret; 1067 return ret;
@@ -1356,21 +1348,20 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
1356 1348
1357 seq_printf(m, "%s:\n", engine->name); 1349 seq_printf(m, "%s:\n", engine->name);
1358 seq_printf(m, "\tseqno = %x [current %x, last %x]\n", 1350 seq_printf(m, "\tseqno = %x [current %x, last %x]\n",
1359 engine->hangcheck.seqno, 1351 engine->hangcheck.seqno, seqno[id],
1360 seqno[id], 1352 intel_engine_last_submit(engine));
1361 engine->last_submitted_seqno);
1362 seq_printf(m, "\twaiters? %s, fake irq active? %s\n", 1353 seq_printf(m, "\twaiters? %s, fake irq active? %s\n",
1363 yesno(intel_engine_has_waiter(engine)), 1354 yesno(intel_engine_has_waiter(engine)),
1364 yesno(test_bit(engine->id, 1355 yesno(test_bit(engine->id,
1365 &dev_priv->gpu_error.missed_irq_rings))); 1356 &dev_priv->gpu_error.missed_irq_rings)));
1366 spin_lock(&b->lock); 1357 spin_lock_irq(&b->lock);
1367 for (rb = rb_first(&b->waiters); rb; rb = rb_next(rb)) { 1358 for (rb = rb_first(&b->waiters); rb; rb = rb_next(rb)) {
1368 struct intel_wait *w = container_of(rb, typeof(*w), node); 1359 struct intel_wait *w = container_of(rb, typeof(*w), node);
1369 1360
1370 seq_printf(m, "\t%s [%d] waiting for %x\n", 1361 seq_printf(m, "\t%s [%d] waiting for %x\n",
1371 w->tsk->comm, w->tsk->pid, w->seqno); 1362 w->tsk->comm, w->tsk->pid, w->seqno);
1372 } 1363 }
1373 spin_unlock(&b->lock); 1364 spin_unlock_irq(&b->lock);
1374 1365
1375 seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n", 1366 seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n",
1376 (long long)engine->hangcheck.acthd, 1367 (long long)engine->hangcheck.acthd,
@@ -1396,14 +1387,9 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
1396static int ironlake_drpc_info(struct seq_file *m) 1387static int ironlake_drpc_info(struct seq_file *m)
1397{ 1388{
1398 struct drm_i915_private *dev_priv = node_to_i915(m->private); 1389 struct drm_i915_private *dev_priv = node_to_i915(m->private);
1399 struct drm_device *dev = &dev_priv->drm;
1400 u32 rgvmodectl, rstdbyctl; 1390 u32 rgvmodectl, rstdbyctl;
1401 u16 crstandvid; 1391 u16 crstandvid;
1402 int ret;
1403 1392
1404 ret = mutex_lock_interruptible(&dev->struct_mutex);
1405 if (ret)
1406 return ret;
1407 intel_runtime_pm_get(dev_priv); 1393 intel_runtime_pm_get(dev_priv);
1408 1394
1409 rgvmodectl = I915_READ(MEMMODECTL); 1395 rgvmodectl = I915_READ(MEMMODECTL);
@@ -1411,7 +1397,6 @@ static int ironlake_drpc_info(struct seq_file *m)
1411 crstandvid = I915_READ16(CRSTANDVID); 1397 crstandvid = I915_READ16(CRSTANDVID);
1412 1398
1413 intel_runtime_pm_put(dev_priv); 1399 intel_runtime_pm_put(dev_priv);
1414 mutex_unlock(&dev->struct_mutex);
1415 1400
1416 seq_printf(m, "HD boost: %s\n", yesno(rgvmodectl & MEMMODE_BOOST_EN)); 1401 seq_printf(m, "HD boost: %s\n", yesno(rgvmodectl & MEMMODE_BOOST_EN));
1417 seq_printf(m, "Boost freq: %d\n", 1402 seq_printf(m, "Boost freq: %d\n",
@@ -1674,11 +1659,13 @@ static int i915_fbc_status(struct seq_file *m, void *unused)
1674 seq_printf(m, "FBC disabled: %s\n", 1659 seq_printf(m, "FBC disabled: %s\n",
1675 dev_priv->fbc.no_fbc_reason); 1660 dev_priv->fbc.no_fbc_reason);
1676 1661
1677 if (intel_fbc_is_active(dev_priv) && 1662 if (intel_fbc_is_active(dev_priv) && INTEL_GEN(dev_priv) >= 7) {
1678 INTEL_GEN(dev_priv) >= 7) 1663 uint32_t mask = INTEL_GEN(dev_priv) >= 8 ?
1664 BDW_FBC_COMPRESSION_MASK :
1665 IVB_FBC_COMPRESSION_MASK;
1679 seq_printf(m, "Compressing: %s\n", 1666 seq_printf(m, "Compressing: %s\n",
1680 yesno(I915_READ(FBC_STATUS2) & 1667 yesno(I915_READ(FBC_STATUS2) & mask));
1681 FBC_COMPRESSION_MASK)); 1668 }
1682 1669
1683 mutex_unlock(&dev_priv->fbc.lock); 1670 mutex_unlock(&dev_priv->fbc.lock);
1684 intel_runtime_pm_put(dev_priv); 1671 intel_runtime_pm_put(dev_priv);
@@ -1757,6 +1744,7 @@ static int i915_sr_status(struct seq_file *m, void *unused)
1757 bool sr_enabled = false; 1744 bool sr_enabled = false;
1758 1745
1759 intel_runtime_pm_get(dev_priv); 1746 intel_runtime_pm_get(dev_priv);
1747 intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
1760 1748
1761 if (HAS_PCH_SPLIT(dev_priv)) 1749 if (HAS_PCH_SPLIT(dev_priv))
1762 sr_enabled = I915_READ(WM1_LP_ILK) & WM1_LP_SR_EN; 1750 sr_enabled = I915_READ(WM1_LP_ILK) & WM1_LP_SR_EN;
@@ -1770,6 +1758,7 @@ static int i915_sr_status(struct seq_file *m, void *unused)
1770 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 1758 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
1771 sr_enabled = I915_READ(FW_BLC_SELF_VLV) & FW_CSPWRDWNEN; 1759 sr_enabled = I915_READ(FW_BLC_SELF_VLV) & FW_CSPWRDWNEN;
1772 1760
1761 intel_display_power_put(dev_priv, POWER_DOMAIN_INIT);
1773 intel_runtime_pm_put(dev_priv); 1762 intel_runtime_pm_put(dev_priv);
1774 1763
1775 seq_printf(m, "self-refresh: %s\n", 1764 seq_printf(m, "self-refresh: %s\n",
@@ -2015,7 +2004,7 @@ static void i915_dump_lrc_obj(struct seq_file *m,
2015 seq_printf(m, "\tBound in GGTT at 0x%08x\n", 2004 seq_printf(m, "\tBound in GGTT at 0x%08x\n",
2016 i915_ggtt_offset(vma)); 2005 i915_ggtt_offset(vma));
2017 2006
2018 if (i915_gem_object_get_pages(vma->obj)) { 2007 if (i915_gem_object_pin_pages(vma->obj)) {
2019 seq_puts(m, "\tFailed to get pages for context object\n\n"); 2008 seq_puts(m, "\tFailed to get pages for context object\n\n");
2020 return; 2009 return;
2021 } 2010 }
@@ -2034,6 +2023,7 @@ static void i915_dump_lrc_obj(struct seq_file *m,
2034 kunmap_atomic(reg_state); 2023 kunmap_atomic(reg_state);
2035 } 2024 }
2036 2025
2026 i915_gem_object_unpin_pages(vma->obj);
2037 seq_putc(m, '\n'); 2027 seq_putc(m, '\n');
2038} 2028}
2039 2029
@@ -2091,12 +2081,7 @@ static const char *swizzle_string(unsigned swizzle)
2091static int i915_swizzle_info(struct seq_file *m, void *data) 2081static int i915_swizzle_info(struct seq_file *m, void *data)
2092{ 2082{
2093 struct drm_i915_private *dev_priv = node_to_i915(m->private); 2083 struct drm_i915_private *dev_priv = node_to_i915(m->private);
2094 struct drm_device *dev = &dev_priv->drm;
2095 int ret;
2096 2084
2097 ret = mutex_lock_interruptible(&dev->struct_mutex);
2098 if (ret)
2099 return ret;
2100 intel_runtime_pm_get(dev_priv); 2085 intel_runtime_pm_get(dev_priv);
2101 2086
2102 seq_printf(m, "bit6 swizzle for X-tiling = %s\n", 2087 seq_printf(m, "bit6 swizzle for X-tiling = %s\n",
@@ -2136,7 +2121,6 @@ static int i915_swizzle_info(struct seq_file *m, void *data)
2136 seq_puts(m, "L-shaped memory detected\n"); 2121 seq_puts(m, "L-shaped memory detected\n");
2137 2122
2138 intel_runtime_pm_put(dev_priv); 2123 intel_runtime_pm_put(dev_priv);
2139 mutex_unlock(&dev->struct_mutex);
2140 2124
2141 return 0; 2125 return 0;
2142} 2126}
@@ -2292,8 +2276,8 @@ static int i915_rps_boost_info(struct seq_file *m, void *data)
2292 struct drm_file *file; 2276 struct drm_file *file;
2293 2277
2294 seq_printf(m, "RPS enabled? %d\n", dev_priv->rps.enabled); 2278 seq_printf(m, "RPS enabled? %d\n", dev_priv->rps.enabled);
2295 seq_printf(m, "GPU busy? %s [%x]\n", 2279 seq_printf(m, "GPU busy? %s [%d requests]\n",
2296 yesno(dev_priv->gt.awake), dev_priv->gt.active_engines); 2280 yesno(dev_priv->gt.awake), dev_priv->gt.active_requests);
2297 seq_printf(m, "CPU waiting? %d\n", count_irq_waiters(dev_priv)); 2281 seq_printf(m, "CPU waiting? %d\n", count_irq_waiters(dev_priv));
2298 seq_printf(m, "Frequency requested %d\n", 2282 seq_printf(m, "Frequency requested %d\n",
2299 intel_gpu_freq(dev_priv, dev_priv->rps.cur_freq)); 2283 intel_gpu_freq(dev_priv, dev_priv->rps.cur_freq));
@@ -2328,7 +2312,7 @@ static int i915_rps_boost_info(struct seq_file *m, void *data)
2328 2312
2329 if (INTEL_GEN(dev_priv) >= 6 && 2313 if (INTEL_GEN(dev_priv) >= 6 &&
2330 dev_priv->rps.enabled && 2314 dev_priv->rps.enabled &&
2331 dev_priv->gt.active_engines) { 2315 dev_priv->gt.active_requests) {
2332 u32 rpup, rpupei; 2316 u32 rpup, rpupei;
2333 u32 rpdown, rpdownei; 2317 u32 rpdown, rpdownei;
2334 2318
@@ -2409,6 +2393,32 @@ static int i915_guc_load_status_info(struct seq_file *m, void *data)
2409 return 0; 2393 return 0;
2410} 2394}
2411 2395
2396static void i915_guc_log_info(struct seq_file *m,
2397 struct drm_i915_private *dev_priv)
2398{
2399 struct intel_guc *guc = &dev_priv->guc;
2400
2401 seq_puts(m, "\nGuC logging stats:\n");
2402
2403 seq_printf(m, "\tISR: flush count %10u, overflow count %10u\n",
2404 guc->log.flush_count[GUC_ISR_LOG_BUFFER],
2405 guc->log.total_overflow_count[GUC_ISR_LOG_BUFFER]);
2406
2407 seq_printf(m, "\tDPC: flush count %10u, overflow count %10u\n",
2408 guc->log.flush_count[GUC_DPC_LOG_BUFFER],
2409 guc->log.total_overflow_count[GUC_DPC_LOG_BUFFER]);
2410
2411 seq_printf(m, "\tCRASH: flush count %10u, overflow count %10u\n",
2412 guc->log.flush_count[GUC_CRASH_DUMP_LOG_BUFFER],
2413 guc->log.total_overflow_count[GUC_CRASH_DUMP_LOG_BUFFER]);
2414
2415 seq_printf(m, "\tTotal flush interrupt count: %u\n",
2416 guc->log.flush_interrupt_count);
2417
2418 seq_printf(m, "\tCapture miss count: %u\n",
2419 guc->log.capture_miss_count);
2420}
2421
2412static void i915_guc_client_info(struct seq_file *m, 2422static void i915_guc_client_info(struct seq_file *m,
2413 struct drm_i915_private *dev_priv, 2423 struct drm_i915_private *dev_priv,
2414 struct i915_guc_client *client) 2424 struct i915_guc_client *client)
@@ -2482,6 +2492,8 @@ static int i915_guc_info(struct seq_file *m, void *data)
2482 seq_printf(m, "\nGuC execbuf client @ %p:\n", guc.execbuf_client); 2492 seq_printf(m, "\nGuC execbuf client @ %p:\n", guc.execbuf_client);
2483 i915_guc_client_info(m, dev_priv, &client); 2493 i915_guc_client_info(m, dev_priv, &client);
2484 2494
2495 i915_guc_log_info(m, dev_priv);
2496
2485 /* Add more as required ... */ 2497 /* Add more as required ... */
2486 2498
2487 return 0; 2499 return 0;
@@ -2493,10 +2505,10 @@ static int i915_guc_log_dump(struct seq_file *m, void *data)
2493 struct drm_i915_gem_object *obj; 2505 struct drm_i915_gem_object *obj;
2494 int i = 0, pg; 2506 int i = 0, pg;
2495 2507
2496 if (!dev_priv->guc.log_vma) 2508 if (!dev_priv->guc.log.vma)
2497 return 0; 2509 return 0;
2498 2510
2499 obj = dev_priv->guc.log_vma->obj; 2511 obj = dev_priv->guc.log.vma->obj;
2500 for (pg = 0; pg < obj->base.size / PAGE_SIZE; pg++) { 2512 for (pg = 0; pg < obj->base.size / PAGE_SIZE; pg++) {
2501 u32 *log = kmap_atomic(i915_gem_object_get_page(obj, pg)); 2513 u32 *log = kmap_atomic(i915_gem_object_get_page(obj, pg));
2502 2514
@@ -2513,6 +2525,44 @@ static int i915_guc_log_dump(struct seq_file *m, void *data)
2513 return 0; 2525 return 0;
2514} 2526}
2515 2527
2528static int i915_guc_log_control_get(void *data, u64 *val)
2529{
2530 struct drm_device *dev = data;
2531 struct drm_i915_private *dev_priv = to_i915(dev);
2532
2533 if (!dev_priv->guc.log.vma)
2534 return -EINVAL;
2535
2536 *val = i915.guc_log_level;
2537
2538 return 0;
2539}
2540
2541static int i915_guc_log_control_set(void *data, u64 val)
2542{
2543 struct drm_device *dev = data;
2544 struct drm_i915_private *dev_priv = to_i915(dev);
2545 int ret;
2546
2547 if (!dev_priv->guc.log.vma)
2548 return -EINVAL;
2549
2550 ret = mutex_lock_interruptible(&dev->struct_mutex);
2551 if (ret)
2552 return ret;
2553
2554 intel_runtime_pm_get(dev_priv);
2555 ret = i915_guc_log_control(dev_priv, val);
2556 intel_runtime_pm_put(dev_priv);
2557
2558 mutex_unlock(&dev->struct_mutex);
2559 return ret;
2560}
2561
2562DEFINE_SIMPLE_ATTRIBUTE(i915_guc_log_control_fops,
2563 i915_guc_log_control_get, i915_guc_log_control_set,
2564 "%lld\n");
2565
2516static int i915_edp_psr_status(struct seq_file *m, void *data) 2566static int i915_edp_psr_status(struct seq_file *m, void *data)
2517{ 2567{
2518 struct drm_i915_private *dev_priv = node_to_i915(m->private); 2568 struct drm_i915_private *dev_priv = node_to_i915(m->private);
@@ -2542,11 +2592,22 @@ static int i915_edp_psr_status(struct seq_file *m, void *data)
2542 enabled = I915_READ(EDP_PSR_CTL) & EDP_PSR_ENABLE; 2592 enabled = I915_READ(EDP_PSR_CTL) & EDP_PSR_ENABLE;
2543 else { 2593 else {
2544 for_each_pipe(dev_priv, pipe) { 2594 for_each_pipe(dev_priv, pipe) {
2595 enum transcoder cpu_transcoder =
2596 intel_pipe_to_cpu_transcoder(dev_priv, pipe);
2597 enum intel_display_power_domain power_domain;
2598
2599 power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
2600 if (!intel_display_power_get_if_enabled(dev_priv,
2601 power_domain))
2602 continue;
2603
2545 stat[pipe] = I915_READ(VLV_PSRSTAT(pipe)) & 2604 stat[pipe] = I915_READ(VLV_PSRSTAT(pipe)) &
2546 VLV_EDP_PSR_CURR_STATE_MASK; 2605 VLV_EDP_PSR_CURR_STATE_MASK;
2547 if ((stat[pipe] == VLV_EDP_PSR_ACTIVE_NORFB_UP) || 2606 if ((stat[pipe] == VLV_EDP_PSR_ACTIVE_NORFB_UP) ||
2548 (stat[pipe] == VLV_EDP_PSR_ACTIVE_SF_UPDATE)) 2607 (stat[pipe] == VLV_EDP_PSR_ACTIVE_SF_UPDATE))
2549 enabled = true; 2608 enabled = true;
2609
2610 intel_display_power_put(dev_priv, power_domain);
2550 } 2611 }
2551 } 2612 }
2552 2613
@@ -3094,6 +3155,8 @@ static int i915_engine_info(struct seq_file *m, void *unused)
3094 struct intel_engine_cs *engine; 3155 struct intel_engine_cs *engine;
3095 enum intel_engine_id id; 3156 enum intel_engine_id id;
3096 3157
3158 intel_runtime_pm_get(dev_priv);
3159
3097 for_each_engine(engine, dev_priv, id) { 3160 for_each_engine(engine, dev_priv, id) {
3098 struct intel_breadcrumbs *b = &engine->breadcrumbs; 3161 struct intel_breadcrumbs *b = &engine->breadcrumbs;
3099 struct drm_i915_gem_request *rq; 3162 struct drm_i915_gem_request *rq;
@@ -3103,7 +3166,7 @@ static int i915_engine_info(struct seq_file *m, void *unused)
3103 seq_printf(m, "%s\n", engine->name); 3166 seq_printf(m, "%s\n", engine->name);
3104 seq_printf(m, "\tcurrent seqno %x, last %x, hangcheck %x [score %d]\n", 3167 seq_printf(m, "\tcurrent seqno %x, last %x, hangcheck %x [score %d]\n",
3105 intel_engine_get_seqno(engine), 3168 intel_engine_get_seqno(engine),
3106 engine->last_submitted_seqno, 3169 intel_engine_last_submit(engine),
3107 engine->hangcheck.seqno, 3170 engine->hangcheck.seqno,
3108 engine->hangcheck.score); 3171 engine->hangcheck.score);
3109 3172
@@ -3111,14 +3174,14 @@ static int i915_engine_info(struct seq_file *m, void *unused)
3111 3174
3112 seq_printf(m, "\tRequests:\n"); 3175 seq_printf(m, "\tRequests:\n");
3113 3176
3114 rq = list_first_entry(&engine->request_list, 3177 rq = list_first_entry(&engine->timeline->requests,
3115 struct drm_i915_gem_request, link); 3178 struct drm_i915_gem_request, link);
3116 if (&rq->link != &engine->request_list) 3179 if (&rq->link != &engine->timeline->requests)
3117 print_request(m, rq, "\t\tfirst "); 3180 print_request(m, rq, "\t\tfirst ");
3118 3181
3119 rq = list_last_entry(&engine->request_list, 3182 rq = list_last_entry(&engine->timeline->requests,
3120 struct drm_i915_gem_request, link); 3183 struct drm_i915_gem_request, link);
3121 if (&rq->link != &engine->request_list) 3184 if (&rq->link != &engine->timeline->requests)
3122 print_request(m, rq, "\t\tlast "); 3185 print_request(m, rq, "\t\tlast ");
3123 3186
3124 rq = i915_gem_find_active_request(engine); 3187 rq = i915_gem_find_active_request(engine);
@@ -3192,6 +3255,12 @@ static int i915_engine_info(struct seq_file *m, void *unused)
3192 else 3255 else
3193 seq_printf(m, "\t\tELSP[1] idle\n"); 3256 seq_printf(m, "\t\tELSP[1] idle\n");
3194 rcu_read_unlock(); 3257 rcu_read_unlock();
3258
3259 spin_lock_irq(&engine->execlist_lock);
3260 list_for_each_entry(rq, &engine->execlist_queue, execlist_link) {
3261 print_request(m, rq, "\t\tQ ");
3262 }
3263 spin_unlock_irq(&engine->execlist_lock);
3195 } else if (INTEL_GEN(dev_priv) > 6) { 3264 } else if (INTEL_GEN(dev_priv) > 6) {
3196 seq_printf(m, "\tPP_DIR_BASE: 0x%08x\n", 3265 seq_printf(m, "\tPP_DIR_BASE: 0x%08x\n",
3197 I915_READ(RING_PP_DIR_BASE(engine))); 3266 I915_READ(RING_PP_DIR_BASE(engine)));
@@ -3201,18 +3270,20 @@ static int i915_engine_info(struct seq_file *m, void *unused)
3201 I915_READ(RING_PP_DIR_DCLV(engine))); 3270 I915_READ(RING_PP_DIR_DCLV(engine)));
3202 } 3271 }
3203 3272
3204 spin_lock(&b->lock); 3273 spin_lock_irq(&b->lock);
3205 for (rb = rb_first(&b->waiters); rb; rb = rb_next(rb)) { 3274 for (rb = rb_first(&b->waiters); rb; rb = rb_next(rb)) {
3206 struct intel_wait *w = container_of(rb, typeof(*w), node); 3275 struct intel_wait *w = container_of(rb, typeof(*w), node);
3207 3276
3208 seq_printf(m, "\t%s [%d] waiting for %x\n", 3277 seq_printf(m, "\t%s [%d] waiting for %x\n",
3209 w->tsk->comm, w->tsk->pid, w->seqno); 3278 w->tsk->comm, w->tsk->pid, w->seqno);
3210 } 3279 }
3211 spin_unlock(&b->lock); 3280 spin_unlock_irq(&b->lock);
3212 3281
3213 seq_puts(m, "\n"); 3282 seq_puts(m, "\n");
3214 } 3283 }
3215 3284
3285 intel_runtime_pm_put(dev_priv);
3286
3216 return 0; 3287 return 0;
3217} 3288}
3218 3289
@@ -3274,15 +3345,6 @@ static int i915_semaphore_status(struct seq_file *m, void *unused)
3274 seq_putc(m, '\n'); 3345 seq_putc(m, '\n');
3275 } 3346 }
3276 3347
3277 seq_puts(m, "\nSync seqno:\n");
3278 for_each_engine(engine, dev_priv, id) {
3279 for (j = 0; j < num_rings; j++)
3280 seq_printf(m, " 0x%08x ",
3281 engine->semaphore.sync_seqno[j]);
3282 seq_putc(m, '\n');
3283 }
3284 seq_putc(m, '\n');
3285
3286 intel_runtime_pm_put(dev_priv); 3348 intel_runtime_pm_put(dev_priv);
3287 mutex_unlock(&dev->struct_mutex); 3349 mutex_unlock(&dev->struct_mutex);
3288 return 0; 3350 return 0;
@@ -3375,7 +3437,7 @@ static int i915_ddb_info(struct seq_file *m, void *unused)
3375 for_each_pipe(dev_priv, pipe) { 3437 for_each_pipe(dev_priv, pipe) {
3376 seq_printf(m, "Pipe %c\n", pipe_name(pipe)); 3438 seq_printf(m, "Pipe %c\n", pipe_name(pipe));
3377 3439
3378 for_each_plane(dev_priv, pipe, plane) { 3440 for_each_universal_plane(dev_priv, pipe, plane) {
3379 entry = &ddb->plane[pipe][plane]; 3441 entry = &ddb->plane[pipe][plane];
3380 seq_printf(m, " Plane%-8d%8u%8u%8u\n", plane + 1, 3442 seq_printf(m, " Plane%-8d%8u%8u%8u\n", plane + 1,
3381 entry->start, entry->end, 3443 entry->start, entry->end,
@@ -4009,8 +4071,7 @@ static void hsw_trans_edp_pipe_A_crc_wa(struct drm_i915_private *dev_priv,
4009 bool enable) 4071 bool enable)
4010{ 4072{
4011 struct drm_device *dev = &dev_priv->drm; 4073 struct drm_device *dev = &dev_priv->drm;
4012 struct intel_crtc *crtc = 4074 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, PIPE_A);
4013 to_intel_crtc(dev_priv->pipe_to_crtc_mapping[PIPE_A]);
4014 struct intel_crtc_state *pipe_config; 4075 struct intel_crtc_state *pipe_config;
4015 struct drm_atomic_state *state; 4076 struct drm_atomic_state *state;
4016 int ret = 0; 4077 int ret = 0;
@@ -4076,10 +4137,8 @@ static int pipe_crc_set_source(struct drm_i915_private *dev_priv,
4076 enum pipe pipe, 4137 enum pipe pipe,
4077 enum intel_pipe_crc_source source) 4138 enum intel_pipe_crc_source source)
4078{ 4139{
4079 struct drm_device *dev = &dev_priv->drm;
4080 struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[pipe]; 4140 struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[pipe];
4081 struct intel_crtc *crtc = 4141 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
4082 to_intel_crtc(intel_get_crtc_for_pipe(dev, pipe));
4083 enum intel_display_power_domain power_domain; 4142 enum intel_display_power_domain power_domain;
4084 u32 val = 0; /* shut up gcc */ 4143 u32 val = 0; /* shut up gcc */
4085 int ret; 4144 int ret;
@@ -4150,15 +4209,15 @@ static int pipe_crc_set_source(struct drm_i915_private *dev_priv,
4150 /* real source -> none transition */ 4209 /* real source -> none transition */
4151 if (source == INTEL_PIPE_CRC_SOURCE_NONE) { 4210 if (source == INTEL_PIPE_CRC_SOURCE_NONE) {
4152 struct intel_pipe_crc_entry *entries; 4211 struct intel_pipe_crc_entry *entries;
4153 struct intel_crtc *crtc = 4212 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv,
4154 to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); 4213 pipe);
4155 4214
4156 DRM_DEBUG_DRIVER("stopping CRCs for pipe %c\n", 4215 DRM_DEBUG_DRIVER("stopping CRCs for pipe %c\n",
4157 pipe_name(pipe)); 4216 pipe_name(pipe));
4158 4217
4159 drm_modeset_lock(&crtc->base.mutex, NULL); 4218 drm_modeset_lock(&crtc->base.mutex, NULL);
4160 if (crtc->base.state->active) 4219 if (crtc->base.state->active)
4161 intel_wait_for_vblank(dev, pipe); 4220 intel_wait_for_vblank(dev_priv, pipe);
4162 drm_modeset_unlock(&crtc->base.mutex); 4221 drm_modeset_unlock(&crtc->base.mutex);
4163 4222
4164 spin_lock_irq(&pipe_crc->lock); 4223 spin_lock_irq(&pipe_crc->lock);
@@ -4798,13 +4857,9 @@ i915_wedged_set(void *data, u64 val)
4798 if (i915_reset_in_progress(&dev_priv->gpu_error)) 4857 if (i915_reset_in_progress(&dev_priv->gpu_error))
4799 return -EAGAIN; 4858 return -EAGAIN;
4800 4859
4801 intel_runtime_pm_get(dev_priv);
4802
4803 i915_handle_error(dev_priv, val, 4860 i915_handle_error(dev_priv, val,
4804 "Manually setting wedged to %llu", val); 4861 "Manually setting wedged to %llu", val);
4805 4862
4806 intel_runtime_pm_put(dev_priv);
4807
4808 return 0; 4863 return 0;
4809} 4864}
4810 4865
@@ -4872,10 +4927,12 @@ DEFINE_SIMPLE_ATTRIBUTE(i915_ring_test_irq_fops,
4872#define DROP_BOUND 0x2 4927#define DROP_BOUND 0x2
4873#define DROP_RETIRE 0x4 4928#define DROP_RETIRE 0x4
4874#define DROP_ACTIVE 0x8 4929#define DROP_ACTIVE 0x8
4875#define DROP_ALL (DROP_UNBOUND | \ 4930#define DROP_FREED 0x10
4876 DROP_BOUND | \ 4931#define DROP_ALL (DROP_UNBOUND | \
4877 DROP_RETIRE | \ 4932 DROP_BOUND | \
4878 DROP_ACTIVE) 4933 DROP_RETIRE | \
4934 DROP_ACTIVE | \
4935 DROP_FREED)
4879static int 4936static int
4880i915_drop_caches_get(void *data, u64 *val) 4937i915_drop_caches_get(void *data, u64 *val)
4881{ 4938{
@@ -4919,6 +4976,11 @@ i915_drop_caches_set(void *data, u64 val)
4919unlock: 4976unlock:
4920 mutex_unlock(&dev->struct_mutex); 4977 mutex_unlock(&dev->struct_mutex);
4921 4978
4979 if (val & DROP_FREED) {
4980 synchronize_rcu();
4981 flush_work(&dev_priv->mm.free_work);
4982 }
4983
4922 return ret; 4984 return ret;
4923} 4985}
4924 4986
@@ -5039,22 +5101,16 @@ static int
5039i915_cache_sharing_get(void *data, u64 *val) 5101i915_cache_sharing_get(void *data, u64 *val)
5040{ 5102{
5041 struct drm_i915_private *dev_priv = data; 5103 struct drm_i915_private *dev_priv = data;
5042 struct drm_device *dev = &dev_priv->drm;
5043 u32 snpcr; 5104 u32 snpcr;
5044 int ret;
5045 5105
5046 if (!(IS_GEN6(dev_priv) || IS_GEN7(dev_priv))) 5106 if (!(IS_GEN6(dev_priv) || IS_GEN7(dev_priv)))
5047 return -ENODEV; 5107 return -ENODEV;
5048 5108
5049 ret = mutex_lock_interruptible(&dev->struct_mutex);
5050 if (ret)
5051 return ret;
5052 intel_runtime_pm_get(dev_priv); 5109 intel_runtime_pm_get(dev_priv);
5053 5110
5054 snpcr = I915_READ(GEN6_MBCUNIT_SNPCR); 5111 snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
5055 5112
5056 intel_runtime_pm_put(dev_priv); 5113 intel_runtime_pm_put(dev_priv);
5057 mutex_unlock(&dev->struct_mutex);
5058 5114
5059 *val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT; 5115 *val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT;
5060 5116
@@ -5414,7 +5470,8 @@ static const struct i915_debugfs_files {
5414 {"i915_fbc_false_color", &i915_fbc_fc_fops}, 5470 {"i915_fbc_false_color", &i915_fbc_fc_fops},
5415 {"i915_dp_test_data", &i915_displayport_test_data_fops}, 5471 {"i915_dp_test_data", &i915_displayport_test_data_fops},
5416 {"i915_dp_test_type", &i915_displayport_test_type_fops}, 5472 {"i915_dp_test_type", &i915_displayport_test_type_fops},
5417 {"i915_dp_test_active", &i915_displayport_test_active_fops} 5473 {"i915_dp_test_active", &i915_displayport_test_active_fops},
5474 {"i915_guc_log_control", &i915_guc_log_control_fops}
5418}; 5475};
5419 5476
5420void intel_display_crc_init(struct drm_i915_private *dev_priv) 5477void intel_display_crc_init(struct drm_i915_private *dev_priv)
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 912d5348e3e7..b72c24ff39c3 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -537,14 +537,17 @@ static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
537 .can_switch = i915_switcheroo_can_switch, 537 .can_switch = i915_switcheroo_can_switch,
538}; 538};
539 539
540static void i915_gem_fini(struct drm_device *dev) 540static void i915_gem_fini(struct drm_i915_private *dev_priv)
541{ 541{
542 mutex_lock(&dev->struct_mutex); 542 mutex_lock(&dev_priv->drm.struct_mutex);
543 i915_gem_cleanup_engines(dev); 543 i915_gem_cleanup_engines(&dev_priv->drm);
544 i915_gem_context_fini(dev); 544 i915_gem_context_fini(&dev_priv->drm);
545 mutex_unlock(&dev->struct_mutex); 545 mutex_unlock(&dev_priv->drm.struct_mutex);
546
547 rcu_barrier();
548 flush_work(&dev_priv->mm.free_work);
546 549
547 WARN_ON(!list_empty(&to_i915(dev)->context_list)); 550 WARN_ON(!list_empty(&dev_priv->context_list));
548} 551}
549 552
550static int i915_load_modeset_init(struct drm_device *dev) 553static int i915_load_modeset_init(struct drm_device *dev)
@@ -592,7 +595,9 @@ static int i915_load_modeset_init(struct drm_device *dev)
592 595
593 /* Important: The output setup functions called by modeset_init need 596 /* Important: The output setup functions called by modeset_init need
594 * working irqs for e.g. gmbus and dp aux transfers. */ 597 * working irqs for e.g. gmbus and dp aux transfers. */
595 intel_modeset_init(dev); 598 ret = intel_modeset_init(dev);
599 if (ret)
600 goto cleanup_irq;
596 601
597 intel_guc_init(dev); 602 intel_guc_init(dev);
598 603
@@ -619,7 +624,7 @@ static int i915_load_modeset_init(struct drm_device *dev)
619cleanup_gem: 624cleanup_gem:
620 if (i915_gem_suspend(dev)) 625 if (i915_gem_suspend(dev))
621 DRM_ERROR("failed to idle hardware; continuing to unload!\n"); 626 DRM_ERROR("failed to idle hardware; continuing to unload!\n");
622 i915_gem_fini(dev); 627 i915_gem_fini(dev_priv);
623cleanup_irq: 628cleanup_irq:
624 intel_guc_fini(dev); 629 intel_guc_fini(dev);
625 drm_irq_uninstall(dev); 630 drm_irq_uninstall(dev);
@@ -825,10 +830,13 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,
825 intel_init_dpio(dev_priv); 830 intel_init_dpio(dev_priv);
826 intel_power_domains_init(dev_priv); 831 intel_power_domains_init(dev_priv);
827 intel_irq_init(dev_priv); 832 intel_irq_init(dev_priv);
833 intel_hangcheck_init(dev_priv);
828 intel_init_display_hooks(dev_priv); 834 intel_init_display_hooks(dev_priv);
829 intel_init_clock_gating_hooks(dev_priv); 835 intel_init_clock_gating_hooks(dev_priv);
830 intel_init_audio_hooks(dev_priv); 836 intel_init_audio_hooks(dev_priv);
831 i915_gem_load_init(&dev_priv->drm); 837 ret = i915_gem_load_init(&dev_priv->drm);
838 if (ret < 0)
839 goto err_gvt;
832 840
833 intel_display_crc_init(dev_priv); 841 intel_display_crc_init(dev_priv);
834 842
@@ -838,6 +846,8 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,
838 846
839 return 0; 847 return 0;
840 848
849err_gvt:
850 intel_gvt_cleanup(dev_priv);
841err_workqueues: 851err_workqueues:
842 i915_workqueues_cleanup(dev_priv); 852 i915_workqueues_cleanup(dev_priv);
843 return ret; 853 return ret;
@@ -972,7 +982,6 @@ static void intel_sanitize_options(struct drm_i915_private *dev_priv)
972static int i915_driver_init_hw(struct drm_i915_private *dev_priv) 982static int i915_driver_init_hw(struct drm_i915_private *dev_priv)
973{ 983{
974 struct pci_dev *pdev = dev_priv->drm.pdev; 984 struct pci_dev *pdev = dev_priv->drm.pdev;
975 struct drm_device *dev = &dev_priv->drm;
976 int ret; 985 int ret;
977 986
978 if (i915_inject_load_failure()) 987 if (i915_inject_load_failure())
@@ -1030,7 +1039,7 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv)
1030 * behaviour if any general state is accessed within a page above 4GB, 1039 * behaviour if any general state is accessed within a page above 4GB,
1031 * which also needs to be handled carefully. 1040 * which also needs to be handled carefully.
1032 */ 1041 */
1033 if (IS_BROADWATER(dev) || IS_CRESTLINE(dev)) { 1042 if (IS_BROADWATER(dev_priv) || IS_CRESTLINE(dev_priv)) {
1034 ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); 1043 ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
1035 1044
1036 if (ret) { 1045 if (ret) {
@@ -1111,6 +1120,7 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
1111 /* Reveal our presence to userspace */ 1120 /* Reveal our presence to userspace */
1112 if (drm_dev_register(dev, 0) == 0) { 1121 if (drm_dev_register(dev, 0) == 0) {
1113 i915_debugfs_register(dev_priv); 1122 i915_debugfs_register(dev_priv);
1123 i915_guc_register(dev_priv);
1114 i915_setup_sysfs(dev_priv); 1124 i915_setup_sysfs(dev_priv);
1115 } else 1125 } else
1116 DRM_ERROR("Failed to register driver for userspace access!\n"); 1126 DRM_ERROR("Failed to register driver for userspace access!\n");
@@ -1149,6 +1159,7 @@ static void i915_driver_unregister(struct drm_i915_private *dev_priv)
1149 intel_opregion_unregister(dev_priv); 1159 intel_opregion_unregister(dev_priv);
1150 1160
1151 i915_teardown_sysfs(dev_priv); 1161 i915_teardown_sysfs(dev_priv);
1162 i915_guc_unregister(dev_priv);
1152 i915_debugfs_unregister(dev_priv); 1163 i915_debugfs_unregister(dev_priv);
1153 drm_dev_unregister(&dev_priv->drm); 1164 drm_dev_unregister(&dev_priv->drm);
1154 1165
@@ -1303,7 +1314,7 @@ void i915_driver_unload(struct drm_device *dev)
1303 drain_workqueue(dev_priv->wq); 1314 drain_workqueue(dev_priv->wq);
1304 1315
1305 intel_guc_fini(dev); 1316 intel_guc_fini(dev);
1306 i915_gem_fini(dev); 1317 i915_gem_fini(dev_priv);
1307 intel_fbc_cleanup_cfb(dev_priv); 1318 intel_fbc_cleanup_cfb(dev_priv);
1308 1319
1309 intel_power_domains_fini(dev_priv); 1320 intel_power_domains_fini(dev_priv);
@@ -1425,7 +1436,7 @@ static int i915_drm_suspend(struct drm_device *dev)
1425 1436
1426 intel_suspend_encoders(dev_priv); 1437 intel_suspend_encoders(dev_priv);
1427 1438
1428 intel_suspend_hw(dev); 1439 intel_suspend_hw(dev_priv);
1429 1440
1430 i915_gem_suspend_gtt_mappings(dev); 1441 i915_gem_suspend_gtt_mappings(dev);
1431 1442
@@ -1589,6 +1600,8 @@ static int i915_drm_resume(struct drm_device *dev)
1589 1600
1590 intel_display_resume(dev); 1601 intel_display_resume(dev);
1591 1602
1603 drm_kms_helper_poll_enable(dev);
1604
1592 /* 1605 /*
1593 * ... but also need to make sure that hotplug processing 1606 * ... but also need to make sure that hotplug processing
1594 * doesn't cause havoc. Like in the driver load code we don't 1607 * doesn't cause havoc. Like in the driver load code we don't
@@ -1596,8 +1609,6 @@ static int i915_drm_resume(struct drm_device *dev)
1596 * notifications. 1609 * notifications.
1597 * */ 1610 * */
1598 intel_hpd_init(dev_priv); 1611 intel_hpd_init(dev_priv);
1599 /* Config may have changed between suspend and resume */
1600 drm_helper_hpd_irq_event(dev);
1601 1612
1602 intel_opregion_register(dev_priv); 1613 intel_opregion_register(dev_priv);
1603 1614
@@ -1610,7 +1621,6 @@ static int i915_drm_resume(struct drm_device *dev)
1610 intel_opregion_notify_adapter(dev_priv, PCI_D0); 1621 intel_opregion_notify_adapter(dev_priv, PCI_D0);
1611 1622
1612 intel_autoenable_gt_powersave(dev_priv); 1623 intel_autoenable_gt_powersave(dev_priv);
1613 drm_kms_helper_poll_enable(dev);
1614 1624
1615 enable_rpm_wakeref_asserts(dev_priv); 1625 enable_rpm_wakeref_asserts(dev_priv);
1616 1626
@@ -2254,7 +2264,6 @@ err1:
2254static int vlv_resume_prepare(struct drm_i915_private *dev_priv, 2264static int vlv_resume_prepare(struct drm_i915_private *dev_priv,
2255 bool rpm_resume) 2265 bool rpm_resume)
2256{ 2266{
2257 struct drm_device *dev = &dev_priv->drm;
2258 int err; 2267 int err;
2259 int ret; 2268 int ret;
2260 2269
@@ -2278,10 +2287,8 @@ static int vlv_resume_prepare(struct drm_i915_private *dev_priv,
2278 2287
2279 vlv_check_no_gt_access(dev_priv); 2288 vlv_check_no_gt_access(dev_priv);
2280 2289
2281 if (rpm_resume) { 2290 if (rpm_resume)
2282 intel_init_clock_gating(dev); 2291 intel_init_clock_gating(dev_priv);
2283 i915_gem_restore_fences(dev);
2284 }
2285 2292
2286 return ret; 2293 return ret;
2287} 2294}
@@ -2301,32 +2308,13 @@ static int intel_runtime_suspend(struct device *kdev)
2301 2308
2302 DRM_DEBUG_KMS("Suspending device\n"); 2309 DRM_DEBUG_KMS("Suspending device\n");
2303 2310
2304 /*
2305 * We could deadlock here in case another thread holding struct_mutex
2306 * calls RPM suspend concurrently, since the RPM suspend will wait
2307 * first for this RPM suspend to finish. In this case the concurrent
2308 * RPM resume will be followed by its RPM suspend counterpart. Still
2309 * for consistency return -EAGAIN, which will reschedule this suspend.
2310 */
2311 if (!mutex_trylock(&dev->struct_mutex)) {
2312 DRM_DEBUG_KMS("device lock contention, deffering suspend\n");
2313 /*
2314 * Bump the expiration timestamp, otherwise the suspend won't
2315 * be rescheduled.
2316 */
2317 pm_runtime_mark_last_busy(kdev);
2318
2319 return -EAGAIN;
2320 }
2321
2322 disable_rpm_wakeref_asserts(dev_priv); 2311 disable_rpm_wakeref_asserts(dev_priv);
2323 2312
2324 /* 2313 /*
2325 * We are safe here against re-faults, since the fault handler takes 2314 * We are safe here against re-faults, since the fault handler takes
2326 * an RPM reference. 2315 * an RPM reference.
2327 */ 2316 */
2328 i915_gem_release_all_mmaps(dev_priv); 2317 i915_gem_runtime_suspend(dev_priv);
2329 mutex_unlock(&dev->struct_mutex);
2330 2318
2331 intel_guc_suspend(dev); 2319 intel_guc_suspend(dev);
2332 2320
@@ -2591,7 +2579,7 @@ static struct drm_driver driver = {
2591 .set_busid = drm_pci_set_busid, 2579 .set_busid = drm_pci_set_busid,
2592 2580
2593 .gem_close_object = i915_gem_close_object, 2581 .gem_close_object = i915_gem_close_object,
2594 .gem_free_object = i915_gem_free_object, 2582 .gem_free_object_unlocked = i915_gem_free_object,
2595 .gem_vm_ops = &i915_gem_vm_ops, 2583 .gem_vm_ops = &i915_gem_vm_ops,
2596 2584
2597 .prime_handle_to_fd = drm_gem_prime_handle_to_fd, 2585 .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index f022f438e5b9..80775b882b4a 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -41,6 +41,7 @@
41#include <linux/intel-iommu.h> 41#include <linux/intel-iommu.h>
42#include <linux/kref.h> 42#include <linux/kref.h>
43#include <linux/pm_qos.h> 43#include <linux/pm_qos.h>
44#include <linux/reservation.h>
44#include <linux/shmem_fs.h> 45#include <linux/shmem_fs.h>
45 46
46#include <drm/drmP.h> 47#include <drm/drmP.h>
@@ -62,6 +63,7 @@
62#include "i915_gem_gtt.h" 63#include "i915_gem_gtt.h"
63#include "i915_gem_render_state.h" 64#include "i915_gem_render_state.h"
64#include "i915_gem_request.h" 65#include "i915_gem_request.h"
66#include "i915_gem_timeline.h"
65 67
66#include "intel_gvt.h" 68#include "intel_gvt.h"
67 69
@@ -70,8 +72,8 @@
70 72
71#define DRIVER_NAME "i915" 73#define DRIVER_NAME "i915"
72#define DRIVER_DESC "Intel Graphics" 74#define DRIVER_DESC "Intel Graphics"
73#define DRIVER_DATE "20161024" 75#define DRIVER_DATE "20161108"
74#define DRIVER_TIMESTAMP 1477290335 76#define DRIVER_TIMESTAMP 1478587895
75 77
76#undef WARN_ON 78#undef WARN_ON
77/* Many gcc seem to no see through this and fall over :( */ 79/* Many gcc seem to no see through this and fall over :( */
@@ -183,7 +185,7 @@ enum plane {
183}; 185};
184#define plane_name(p) ((p) + 'A') 186#define plane_name(p) ((p) + 'A')
185 187
186#define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_sprites[(p)] + (s) + 'A') 188#define sprite_name(p, s) ((p) * INTEL_INFO(dev_priv)->num_sprites[(p)] + (s) + 'A')
187 189
188enum port { 190enum port {
189 PORT_NONE = -1, 191 PORT_NONE = -1,
@@ -312,7 +314,7 @@ struct i915_hotplug {
312#define for_each_pipe_masked(__dev_priv, __p, __mask) \ 314#define for_each_pipe_masked(__dev_priv, __p, __mask) \
313 for ((__p) = 0; (__p) < INTEL_INFO(__dev_priv)->num_pipes; (__p)++) \ 315 for ((__p) = 0; (__p) < INTEL_INFO(__dev_priv)->num_pipes; (__p)++) \
314 for_each_if ((__mask) & (1 << (__p))) 316 for_each_if ((__mask) & (1 << (__p)))
315#define for_each_plane(__dev_priv, __pipe, __p) \ 317#define for_each_universal_plane(__dev_priv, __pipe, __p) \
316 for ((__p) = 0; \ 318 for ((__p) = 0; \
317 (__p) < INTEL_INFO(__dev_priv)->num_sprites[(__pipe)] + 1; \ 319 (__p) < INTEL_INFO(__dev_priv)->num_sprites[(__pipe)] + 1; \
318 (__p)++) 320 (__p)++)
@@ -492,8 +494,8 @@ struct intel_limit;
492struct dpll; 494struct dpll;
493 495
494struct drm_i915_display_funcs { 496struct drm_i915_display_funcs {
495 int (*get_display_clock_speed)(struct drm_device *dev); 497 int (*get_display_clock_speed)(struct drm_i915_private *dev_priv);
496 int (*get_fifo_size)(struct drm_device *dev, int plane); 498 int (*get_fifo_size)(struct drm_i915_private *dev_priv, int plane);
497 int (*compute_pipe_wm)(struct intel_crtc_state *cstate); 499 int (*compute_pipe_wm)(struct intel_crtc_state *cstate);
498 int (*compute_intermediate_wm)(struct drm_device *dev, 500 int (*compute_intermediate_wm)(struct drm_device *dev,
499 struct intel_crtc *intel_crtc, 501 struct intel_crtc *intel_crtc,
@@ -501,7 +503,7 @@ struct drm_i915_display_funcs {
501 void (*initial_watermarks)(struct intel_crtc_state *cstate); 503 void (*initial_watermarks)(struct intel_crtc_state *cstate);
502 void (*optimize_watermarks)(struct intel_crtc_state *cstate); 504 void (*optimize_watermarks)(struct intel_crtc_state *cstate);
503 int (*compute_global_watermarks)(struct drm_atomic_state *state); 505 int (*compute_global_watermarks)(struct drm_atomic_state *state);
504 void (*update_wm)(struct drm_crtc *crtc); 506 void (*update_wm)(struct intel_crtc *crtc);
505 int (*modeset_calc_cdclk)(struct drm_atomic_state *state); 507 int (*modeset_calc_cdclk)(struct drm_atomic_state *state);
506 void (*modeset_commit_cdclk)(struct drm_atomic_state *state); 508 void (*modeset_commit_cdclk)(struct drm_atomic_state *state);
507 /* Returns the active state of the crtc, and if the crtc is active, 509 /* Returns the active state of the crtc, and if the crtc is active,
@@ -523,7 +525,7 @@ struct drm_i915_display_funcs {
523 const struct drm_display_mode *adjusted_mode); 525 const struct drm_display_mode *adjusted_mode);
524 void (*audio_codec_disable)(struct intel_encoder *encoder); 526 void (*audio_codec_disable)(struct intel_encoder *encoder);
525 void (*fdi_link_train)(struct drm_crtc *crtc); 527 void (*fdi_link_train)(struct drm_crtc *crtc);
526 void (*init_clock_gating)(struct drm_device *dev); 528 void (*init_clock_gating)(struct drm_i915_private *dev_priv);
527 int (*queue_flip)(struct drm_device *dev, struct drm_crtc *crtc, 529 int (*queue_flip)(struct drm_device *dev, struct drm_crtc *crtc,
528 struct drm_framebuffer *fb, 530 struct drm_framebuffer *fb,
529 struct drm_i915_gem_object *obj, 531 struct drm_i915_gem_object *obj,
@@ -668,6 +670,7 @@ struct intel_csr {
668 func(is_kabylake); \ 670 func(is_kabylake); \
669 func(is_preliminary); \ 671 func(is_preliminary); \
670 /* Keep has_* in alphabetical order */ \ 672 /* Keep has_* in alphabetical order */ \
673 func(has_64bit_reloc); \
671 func(has_csr); \ 674 func(has_csr); \
672 func(has_ddi); \ 675 func(has_ddi); \
673 func(has_dp_mst); \ 676 func(has_dp_mst); \
@@ -746,6 +749,8 @@ struct intel_display_error_state;
746struct drm_i915_error_state { 749struct drm_i915_error_state {
747 struct kref ref; 750 struct kref ref;
748 struct timeval time; 751 struct timeval time;
752 struct timeval boottime;
753 struct timeval uptime;
749 754
750 struct drm_i915_private *i915; 755 struct drm_i915_private *i915;
751 756
@@ -778,6 +783,7 @@ struct drm_i915_error_state {
778 struct intel_overlay_error_state *overlay; 783 struct intel_overlay_error_state *overlay;
779 struct intel_display_error_state *display; 784 struct intel_display_error_state *display;
780 struct drm_i915_error_object *semaphore; 785 struct drm_i915_error_object *semaphore;
786 struct drm_i915_error_object *guc_log;
781 787
782 struct drm_i915_error_engine { 788 struct drm_i915_error_engine {
783 int engine_id; 789 int engine_id;
@@ -797,7 +803,6 @@ struct drm_i915_error_state {
797 u32 cpu_ring_tail; 803 u32 cpu_ring_tail;
798 804
799 u32 last_seqno; 805 u32 last_seqno;
800 u32 semaphore_seqno[I915_NUM_ENGINES - 1];
801 806
802 /* Register state */ 807 /* Register state */
803 u32 start; 808 u32 start;
@@ -933,6 +938,7 @@ struct i915_gem_context {
933 struct drm_i915_file_private *file_priv; 938 struct drm_i915_file_private *file_priv;
934 struct i915_hw_ppgtt *ppgtt; 939 struct i915_hw_ppgtt *ppgtt;
935 struct pid *pid; 940 struct pid *pid;
941 const char *name;
936 942
937 struct i915_ctx_hang_stats hang_stats; 943 struct i915_ctx_hang_stats hang_stats;
938 944
@@ -1319,6 +1325,12 @@ struct i915_power_well {
1319 /* cached hw enabled state */ 1325 /* cached hw enabled state */
1320 bool hw_enabled; 1326 bool hw_enabled;
1321 unsigned long domains; 1327 unsigned long domains;
1328 /* unique identifier for this power well */
1329 unsigned long id;
1330 /*
1331 * Arbitraty data associated with this power well. Platform and power
1332 * well specific.
1333 */
1322 unsigned long data; 1334 unsigned long data;
1323 const struct i915_power_well_ops *ops; 1335 const struct i915_power_well_ops *ops;
1324}; 1336};
@@ -1356,11 +1368,22 @@ struct i915_gem_mm {
1356 struct list_head bound_list; 1368 struct list_head bound_list;
1357 /** 1369 /**
1358 * List of objects which are not bound to the GTT (thus 1370 * List of objects which are not bound to the GTT (thus
1359 * are idle and not used by the GPU) but still have 1371 * are idle and not used by the GPU). These objects may or may
1360 * (presumably uncached) pages still attached. 1372 * not actually have any pages attached.
1361 */ 1373 */
1362 struct list_head unbound_list; 1374 struct list_head unbound_list;
1363 1375
1376 /** List of all objects in gtt_space, currently mmaped by userspace.
1377 * All objects within this list must also be on bound_list.
1378 */
1379 struct list_head userfault_list;
1380
1381 /**
1382 * List of objects which are pending destruction.
1383 */
1384 struct llist_head free_list;
1385 struct work_struct free_work;
1386
1364 /** Usable portion of the GTT for GEM */ 1387 /** Usable portion of the GTT for GEM */
1365 unsigned long stolen_base; /* limited to low memory (32-bit) */ 1388 unsigned long stolen_base; /* limited to low memory (32-bit) */
1366 1389
@@ -1409,6 +1432,9 @@ struct i915_error_state_file_priv {
1409 struct drm_i915_error_state *error; 1432 struct drm_i915_error_state *error;
1410}; 1433};
1411 1434
1435#define I915_RESET_TIMEOUT (10 * HZ) /* 10s */
1436#define I915_FENCE_TIMEOUT (10 * HZ) /* 10s */
1437
1412struct i915_gpu_error { 1438struct i915_gpu_error {
1413 /* For hangcheck timer */ 1439 /* For hangcheck timer */
1414#define DRM_I915_HANGCHECK_PERIOD 1500 /* in ms */ 1440#define DRM_I915_HANGCHECK_PERIOD 1500 /* in ms */
@@ -1682,7 +1708,6 @@ struct skl_wm_level {
1682 */ 1708 */
1683struct i915_runtime_pm { 1709struct i915_runtime_pm {
1684 atomic_t wakeref_count; 1710 atomic_t wakeref_count;
1685 atomic_t atomic_seq;
1686 bool suspended; 1711 bool suspended;
1687 bool irqs_enabled; 1712 bool irqs_enabled;
1688}; 1713};
@@ -1807,7 +1832,6 @@ struct drm_i915_private {
1807 struct i915_gem_context *kernel_context; 1832 struct i915_gem_context *kernel_context;
1808 struct intel_engine_cs *engine[I915_NUM_ENGINES]; 1833 struct intel_engine_cs *engine[I915_NUM_ENGINES];
1809 struct i915_vma *semaphore; 1834 struct i915_vma *semaphore;
1810 u32 next_seqno;
1811 1835
1812 struct drm_dma_handle *status_page_dmah; 1836 struct drm_dma_handle *status_page_dmah;
1813 struct resource mch_res; 1837 struct resource mch_res;
@@ -1832,8 +1856,10 @@ struct drm_i915_private {
1832 u32 de_irq_mask[I915_MAX_PIPES]; 1856 u32 de_irq_mask[I915_MAX_PIPES];
1833 }; 1857 };
1834 u32 gt_irq_mask; 1858 u32 gt_irq_mask;
1835 u32 pm_irq_mask; 1859 u32 pm_imr;
1860 u32 pm_ier;
1836 u32 pm_rps_events; 1861 u32 pm_rps_events;
1862 u32 pm_guc_events;
1837 u32 pipestat_irq_mask[I915_MAX_PIPES]; 1863 u32 pipestat_irq_mask[I915_MAX_PIPES];
1838 1864
1839 struct i915_hotplug hotplug; 1865 struct i915_hotplug hotplug;
@@ -1910,8 +1936,8 @@ struct drm_i915_private {
1910 1936
1911 /* Kernel Modesetting */ 1937 /* Kernel Modesetting */
1912 1938
1913 struct drm_crtc *plane_to_crtc_mapping[I915_MAX_PIPES]; 1939 struct intel_crtc *plane_to_crtc_mapping[I915_MAX_PIPES];
1914 struct drm_crtc *pipe_to_crtc_mapping[I915_MAX_PIPES]; 1940 struct intel_crtc *pipe_to_crtc_mapping[I915_MAX_PIPES];
1915 wait_queue_head_t pending_flip_queue; 1941 wait_queue_head_t pending_flip_queue;
1916 1942
1917#ifdef CONFIG_DEBUG_FS 1943#ifdef CONFIG_DEBUG_FS
@@ -2065,6 +2091,10 @@ struct drm_i915_private {
2065 void (*resume)(struct drm_i915_private *); 2091 void (*resume)(struct drm_i915_private *);
2066 void (*cleanup_engine)(struct intel_engine_cs *engine); 2092 void (*cleanup_engine)(struct intel_engine_cs *engine);
2067 2093
2094 struct list_head timelines;
2095 struct i915_gem_timeline global_timeline;
2096 u32 active_requests;
2097
2068 /** 2098 /**
2069 * Is the GPU currently considered idle, or busy executing 2099 * Is the GPU currently considered idle, or busy executing
2070 * userspace requests? Whilst idle, we allow runtime power 2100 * userspace requests? Whilst idle, we allow runtime power
@@ -2072,7 +2102,6 @@ struct drm_i915_private {
2072 * In order to reduce the effect on performance, there 2102 * In order to reduce the effect on performance, there
2073 * is a slight delay before we do so. 2103 * is a slight delay before we do so.
2074 */ 2104 */
2075 unsigned int active_engines;
2076 bool awake; 2105 bool awake;
2077 2106
2078 /** 2107 /**
@@ -2092,6 +2121,8 @@ struct drm_i915_private {
2092 * off the idle_work. 2121 * off the idle_work.
2093 */ 2122 */
2094 struct delayed_work idle_work; 2123 struct delayed_work idle_work;
2124
2125 ktime_t last_init_time;
2095 } gt; 2126 } gt;
2096 2127
2097 /* perform PHY state sanity checks? */ 2128 /* perform PHY state sanity checks? */
@@ -2151,6 +2182,7 @@ enum hdmi_force_audio {
2151struct drm_i915_gem_object_ops { 2182struct drm_i915_gem_object_ops {
2152 unsigned int flags; 2183 unsigned int flags;
2153#define I915_GEM_OBJECT_HAS_STRUCT_PAGE 0x1 2184#define I915_GEM_OBJECT_HAS_STRUCT_PAGE 0x1
2185#define I915_GEM_OBJECT_IS_SHRINKABLE 0x2
2154 2186
2155 /* Interface between the GEM object and its backing storage. 2187 /* Interface between the GEM object and its backing storage.
2156 * get_pages() is called once prior to the use of the associated set 2188 * get_pages() is called once prior to the use of the associated set
@@ -2165,8 +2197,8 @@ struct drm_i915_gem_object_ops {
2165 * being released or under memory pressure (where we attempt to 2197 * being released or under memory pressure (where we attempt to
2166 * reap pages for the shrinker). 2198 * reap pages for the shrinker).
2167 */ 2199 */
2168 int (*get_pages)(struct drm_i915_gem_object *); 2200 struct sg_table *(*get_pages)(struct drm_i915_gem_object *);
2169 void (*put_pages)(struct drm_i915_gem_object *); 2201 void (*put_pages)(struct drm_i915_gem_object *, struct sg_table *);
2170 2202
2171 int (*dmabuf_export)(struct drm_i915_gem_object *); 2203 int (*dmabuf_export)(struct drm_i915_gem_object *);
2172 void (*release)(struct drm_i915_gem_object *); 2204 void (*release)(struct drm_i915_gem_object *);
@@ -2200,10 +2232,20 @@ struct drm_i915_gem_object {
2200 2232
2201 /** List of VMAs backed by this object */ 2233 /** List of VMAs backed by this object */
2202 struct list_head vma_list; 2234 struct list_head vma_list;
2235 struct rb_root vma_tree;
2203 2236
2204 /** Stolen memory for this object, instead of being backed by shmem. */ 2237 /** Stolen memory for this object, instead of being backed by shmem. */
2205 struct drm_mm_node *stolen; 2238 struct drm_mm_node *stolen;
2206 struct list_head global_list; 2239 struct list_head global_link;
2240 union {
2241 struct rcu_head rcu;
2242 struct llist_node freed;
2243 };
2244
2245 /**
2246 * Whether the object is currently in the GGTT mmap.
2247 */
2248 struct list_head userfault_link;
2207 2249
2208 /** Used in execbuf to temporarily hold a ref */ 2250 /** Used in execbuf to temporarily hold a ref */
2209 struct list_head obj_exec_link; 2251 struct list_head obj_exec_link;
@@ -2211,33 +2253,12 @@ struct drm_i915_gem_object {
2211 struct list_head batch_pool_link; 2253 struct list_head batch_pool_link;
2212 2254
2213 unsigned long flags; 2255 unsigned long flags;
2214 /**
2215 * This is set if the object is on the active lists (has pending
2216 * rendering and so a non-zero seqno), and is not set if it i s on
2217 * inactive (ready to be unbound) list.
2218 */
2219#define I915_BO_ACTIVE_SHIFT 0
2220#define I915_BO_ACTIVE_MASK ((1 << I915_NUM_ENGINES) - 1)
2221#define __I915_BO_ACTIVE(bo) \
2222 ((READ_ONCE((bo)->flags) >> I915_BO_ACTIVE_SHIFT) & I915_BO_ACTIVE_MASK)
2223 2256
2224 /** 2257 /**
2225 * This is set if the object has been written to since last bound 2258 * Have we taken a reference for the object for incomplete GPU
2226 * to the GTT 2259 * activity?
2227 */ 2260 */
2228 unsigned int dirty:1; 2261#define I915_BO_ACTIVE_REF 0
2229
2230 /**
2231 * Advice: are the backing pages purgeable?
2232 */
2233 unsigned int madv:2;
2234
2235 /**
2236 * Whether the current gtt mapping needs to be mappable (and isn't just
2237 * mappable by accident). Track pin and fault separate for a more
2238 * accurate mappable working set.
2239 */
2240 unsigned int fault_mappable:1;
2241 2262
2242 /* 2263 /*
2243 * Is the object to be mapped as read-only to the GPU 2264 * Is the object to be mapped as read-only to the GPU
@@ -2258,15 +2279,41 @@ struct drm_i915_gem_object {
2258 2279
2259 /** Count of VMA actually bound by this object */ 2280 /** Count of VMA actually bound by this object */
2260 unsigned int bind_count; 2281 unsigned int bind_count;
2282 unsigned int active_count;
2261 unsigned int pin_display; 2283 unsigned int pin_display;
2262 2284
2263 struct sg_table *pages; 2285 struct {
2264 int pages_pin_count; 2286 struct mutex lock; /* protects the pages and their use */
2265 struct get_page { 2287 atomic_t pages_pin_count;
2266 struct scatterlist *sg; 2288
2267 int last; 2289 struct sg_table *pages;
2268 } get_page; 2290 void *mapping;
2269 void *mapping; 2291
2292 struct i915_gem_object_page_iter {
2293 struct scatterlist *sg_pos;
2294 unsigned int sg_idx; /* in pages, but 32bit eek! */
2295
2296 struct radix_tree_root radix;
2297 struct mutex lock; /* protects this cache */
2298 } get_page;
2299
2300 /**
2301 * Advice: are the backing pages purgeable?
2302 */
2303 unsigned int madv:2;
2304
2305 /**
2306 * This is set if the object has been written to since the
2307 * pages were last acquired.
2308 */
2309 bool dirty:1;
2310
2311 /**
2312 * This is set if the object has been pinned due to unknown
2313 * swizzling.
2314 */
2315 bool quirked:1;
2316 } mm;
2270 2317
2271 /** Breadcrumb of last rendering to the buffer. 2318 /** Breadcrumb of last rendering to the buffer.
2272 * There can only be one writer, but we allow for multiple readers. 2319 * There can only be one writer, but we allow for multiple readers.
@@ -2278,8 +2325,7 @@ struct drm_i915_gem_object {
2278 * read request. This allows for the CPU to read from an active 2325 * read request. This allows for the CPU to read from an active
2279 * buffer by only waiting for the write to complete. 2326 * buffer by only waiting for the write to complete.
2280 */ 2327 */
2281 struct i915_gem_active last_read[I915_NUM_ENGINES]; 2328 struct reservation_object *resv;
2282 struct i915_gem_active last_write;
2283 2329
2284 /** References from framebuffers, locks out tiling changes. */ 2330 /** References from framebuffers, locks out tiling changes. */
2285 unsigned long framebuffer_references; 2331 unsigned long framebuffer_references;
@@ -2290,8 +2336,6 @@ struct drm_i915_gem_object {
2290 struct i915_gem_userptr { 2336 struct i915_gem_userptr {
2291 uintptr_t ptr; 2337 uintptr_t ptr;
2292 unsigned read_only :1; 2338 unsigned read_only :1;
2293 unsigned workers :4;
2294#define I915_GEM_USERPTR_MAX_WORKERS 15
2295 2339
2296 struct i915_mm_struct *mm; 2340 struct i915_mm_struct *mm;
2297 struct i915_mmu_object *mmu_object; 2341 struct i915_mmu_object *mmu_object;
@@ -2300,6 +2344,8 @@ struct drm_i915_gem_object {
2300 2344
2301 /** for phys allocated objects */ 2345 /** for phys allocated objects */
2302 struct drm_dma_handle *phys_handle; 2346 struct drm_dma_handle *phys_handle;
2347
2348 struct reservation_object __builtin_resv;
2303}; 2349};
2304 2350
2305static inline struct drm_i915_gem_object * 2351static inline struct drm_i915_gem_object *
@@ -2311,10 +2357,38 @@ to_intel_bo(struct drm_gem_object *gem)
2311 return container_of(gem, struct drm_i915_gem_object, base); 2357 return container_of(gem, struct drm_i915_gem_object, base);
2312} 2358}
2313 2359
2360/**
2361 * i915_gem_object_lookup_rcu - look up a temporary GEM object from its handle
2362 * @filp: DRM file private date
2363 * @handle: userspace handle
2364 *
2365 * Returns:
2366 *
2367 * A pointer to the object named by the handle if such exists on @filp, NULL
2368 * otherwise. This object is only valid whilst under the RCU read lock, and
2369 * note carefully the object may be in the process of being destroyed.
2370 */
2371static inline struct drm_i915_gem_object *
2372i915_gem_object_lookup_rcu(struct drm_file *file, u32 handle)
2373{
2374#ifdef CONFIG_LOCKDEP
2375 WARN_ON(debug_locks && !lock_is_held(&rcu_lock_map));
2376#endif
2377 return idr_find(&file->object_idr, handle);
2378}
2379
2314static inline struct drm_i915_gem_object * 2380static inline struct drm_i915_gem_object *
2315i915_gem_object_lookup(struct drm_file *file, u32 handle) 2381i915_gem_object_lookup(struct drm_file *file, u32 handle)
2316{ 2382{
2317 return to_intel_bo(drm_gem_object_lookup(file, handle)); 2383 struct drm_i915_gem_object *obj;
2384
2385 rcu_read_lock();
2386 obj = i915_gem_object_lookup_rcu(file, handle);
2387 if (obj && !kref_get_unless_zero(&obj->base.refcount))
2388 obj = NULL;
2389 rcu_read_unlock();
2390
2391 return obj;
2318} 2392}
2319 2393
2320__deprecated 2394__deprecated
@@ -2336,59 +2410,61 @@ __attribute__((nonnull))
2336static inline void 2410static inline void
2337i915_gem_object_put(struct drm_i915_gem_object *obj) 2411i915_gem_object_put(struct drm_i915_gem_object *obj)
2338{ 2412{
2339 drm_gem_object_unreference(&obj->base); 2413 __drm_gem_object_unreference(&obj->base);
2340} 2414}
2341 2415
2342__deprecated 2416__deprecated
2343extern void drm_gem_object_unreference(struct drm_gem_object *); 2417extern void drm_gem_object_unreference(struct drm_gem_object *);
2344 2418
2345__attribute__((nonnull))
2346static inline void
2347i915_gem_object_put_unlocked(struct drm_i915_gem_object *obj)
2348{
2349 drm_gem_object_unreference_unlocked(&obj->base);
2350}
2351
2352__deprecated 2419__deprecated
2353extern void drm_gem_object_unreference_unlocked(struct drm_gem_object *); 2420extern void drm_gem_object_unreference_unlocked(struct drm_gem_object *);
2354 2421
2355static inline bool 2422static inline bool
2423i915_gem_object_is_dead(const struct drm_i915_gem_object *obj)
2424{
2425 return atomic_read(&obj->base.refcount.refcount) == 0;
2426}
2427
2428static inline bool
2356i915_gem_object_has_struct_page(const struct drm_i915_gem_object *obj) 2429i915_gem_object_has_struct_page(const struct drm_i915_gem_object *obj)
2357{ 2430{
2358 return obj->ops->flags & I915_GEM_OBJECT_HAS_STRUCT_PAGE; 2431 return obj->ops->flags & I915_GEM_OBJECT_HAS_STRUCT_PAGE;
2359} 2432}
2360 2433
2361static inline unsigned long 2434static inline bool
2362i915_gem_object_get_active(const struct drm_i915_gem_object *obj) 2435i915_gem_object_is_shrinkable(const struct drm_i915_gem_object *obj)
2363{ 2436{
2364 return (obj->flags >> I915_BO_ACTIVE_SHIFT) & I915_BO_ACTIVE_MASK; 2437 return obj->ops->flags & I915_GEM_OBJECT_IS_SHRINKABLE;
2365} 2438}
2366 2439
2367static inline bool 2440static inline bool
2368i915_gem_object_is_active(const struct drm_i915_gem_object *obj) 2441i915_gem_object_is_active(const struct drm_i915_gem_object *obj)
2369{ 2442{
2370 return i915_gem_object_get_active(obj); 2443 return obj->active_count;
2371} 2444}
2372 2445
2373static inline void 2446static inline bool
2374i915_gem_object_set_active(struct drm_i915_gem_object *obj, int engine) 2447i915_gem_object_has_active_reference(const struct drm_i915_gem_object *obj)
2375{ 2448{
2376 obj->flags |= BIT(engine + I915_BO_ACTIVE_SHIFT); 2449 return test_bit(I915_BO_ACTIVE_REF, &obj->flags);
2377} 2450}
2378 2451
2379static inline void 2452static inline void
2380i915_gem_object_clear_active(struct drm_i915_gem_object *obj, int engine) 2453i915_gem_object_set_active_reference(struct drm_i915_gem_object *obj)
2381{ 2454{
2382 obj->flags &= ~BIT(engine + I915_BO_ACTIVE_SHIFT); 2455 lockdep_assert_held(&obj->base.dev->struct_mutex);
2456 __set_bit(I915_BO_ACTIVE_REF, &obj->flags);
2383} 2457}
2384 2458
2385static inline bool 2459static inline void
2386i915_gem_object_has_active_engine(const struct drm_i915_gem_object *obj, 2460i915_gem_object_clear_active_reference(struct drm_i915_gem_object *obj)
2387 int engine)
2388{ 2461{
2389 return obj->flags & BIT(engine + I915_BO_ACTIVE_SHIFT); 2462 lockdep_assert_held(&obj->base.dev->struct_mutex);
2463 __clear_bit(I915_BO_ACTIVE_REF, &obj->flags);
2390} 2464}
2391 2465
2466void __i915_gem_object_release_unless_active(struct drm_i915_gem_object *obj);
2467
2392static inline unsigned int 2468static inline unsigned int
2393i915_gem_object_get_tiling(struct drm_i915_gem_object *obj) 2469i915_gem_object_get_tiling(struct drm_i915_gem_object *obj)
2394{ 2470{
@@ -2407,6 +2483,23 @@ i915_gem_object_get_stride(struct drm_i915_gem_object *obj)
2407 return obj->tiling_and_stride & STRIDE_MASK; 2483 return obj->tiling_and_stride & STRIDE_MASK;
2408} 2484}
2409 2485
2486static inline struct intel_engine_cs *
2487i915_gem_object_last_write_engine(struct drm_i915_gem_object *obj)
2488{
2489 struct intel_engine_cs *engine = NULL;
2490 struct dma_fence *fence;
2491
2492 rcu_read_lock();
2493 fence = reservation_object_get_excl_rcu(obj->resv);
2494 rcu_read_unlock();
2495
2496 if (fence && dma_fence_is_i915(fence) && !dma_fence_is_signaled(fence))
2497 engine = to_request(fence)->engine;
2498 dma_fence_put(fence);
2499
2500 return engine;
2501}
2502
2410static inline struct i915_vma *i915_vma_get(struct i915_vma *vma) 2503static inline struct i915_vma *i915_vma_get(struct i915_vma *vma)
2411{ 2504{
2412 i915_gem_object_get(vma->obj); 2505 i915_gem_object_get(vma->obj);
@@ -2415,7 +2508,6 @@ static inline struct i915_vma *i915_vma_get(struct i915_vma *vma)
2415 2508
2416static inline void i915_vma_put(struct i915_vma *vma) 2509static inline void i915_vma_put(struct i915_vma *vma)
2417{ 2510{
2418 lockdep_assert_held(&vma->vm->dev->struct_mutex);
2419 i915_gem_object_put(vma->obj); 2511 i915_gem_object_put(vma->obj);
2420} 2512}
2421 2513
@@ -2445,6 +2537,14 @@ static __always_inline struct sgt_iter {
2445 return s; 2537 return s;
2446} 2538}
2447 2539
2540static inline struct scatterlist *____sg_next(struct scatterlist *sg)
2541{
2542 ++sg;
2543 if (unlikely(sg_is_chain(sg)))
2544 sg = sg_chain_ptr(sg);
2545 return sg;
2546}
2547
2448/** 2548/**
2449 * __sg_next - return the next scatterlist entry in a list 2549 * __sg_next - return the next scatterlist entry in a list
2450 * @sg: The current sg entry 2550 * @sg: The current sg entry
@@ -2459,9 +2559,7 @@ static inline struct scatterlist *__sg_next(struct scatterlist *sg)
2459#ifdef CONFIG_DEBUG_SG 2559#ifdef CONFIG_DEBUG_SG
2460 BUG_ON(sg->sg_magic != SG_MAGIC); 2560 BUG_ON(sg->sg_magic != SG_MAGIC);
2461#endif 2561#endif
2462 return sg_is_last(sg) ? NULL : 2562 return sg_is_last(sg) ? NULL : ____sg_next(sg);
2463 likely(!sg_is_chain(++sg)) ? sg :
2464 sg_chain_ptr(sg);
2465} 2563}
2466 2564
2467/** 2565/**
@@ -2633,20 +2731,20 @@ struct drm_i915_cmd_table {
2633 2731
2634#define IS_I830(dev_priv) (INTEL_DEVID(dev_priv) == 0x3577) 2732#define IS_I830(dev_priv) (INTEL_DEVID(dev_priv) == 0x3577)
2635#define IS_845G(dev_priv) (INTEL_DEVID(dev_priv) == 0x2562) 2733#define IS_845G(dev_priv) (INTEL_DEVID(dev_priv) == 0x2562)
2636#define IS_I85X(dev) (INTEL_INFO(dev)->is_i85x) 2734#define IS_I85X(dev_priv) ((dev_priv)->info.is_i85x)
2637#define IS_I865G(dev_priv) (INTEL_DEVID(dev_priv) == 0x2572) 2735#define IS_I865G(dev_priv) (INTEL_DEVID(dev_priv) == 0x2572)
2638#define IS_I915G(dev) (INTEL_INFO(dev)->is_i915g) 2736#define IS_I915G(dev_priv) ((dev_priv)->info.is_i915g)
2639#define IS_I915GM(dev_priv) (INTEL_DEVID(dev_priv) == 0x2592) 2737#define IS_I915GM(dev_priv) (INTEL_DEVID(dev_priv) == 0x2592)
2640#define IS_I945G(dev_priv) (INTEL_DEVID(dev_priv) == 0x2772) 2738#define IS_I945G(dev_priv) (INTEL_DEVID(dev_priv) == 0x2772)
2641#define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm) 2739#define IS_I945GM(dev_priv) ((dev_priv)->info.is_i945gm)
2642#define IS_BROADWATER(dev) (INTEL_INFO(dev)->is_broadwater) 2740#define IS_BROADWATER(dev_priv) ((dev_priv)->info.is_broadwater)
2643#define IS_CRESTLINE(dev) (INTEL_INFO(dev)->is_crestline) 2741#define IS_CRESTLINE(dev_priv) ((dev_priv)->info.is_crestline)
2644#define IS_GM45(dev_priv) (INTEL_DEVID(dev_priv) == 0x2A42) 2742#define IS_GM45(dev_priv) (INTEL_DEVID(dev_priv) == 0x2A42)
2645#define IS_G4X(dev_priv) ((dev_priv)->info.is_g4x) 2743#define IS_G4X(dev_priv) ((dev_priv)->info.is_g4x)
2646#define IS_PINEVIEW_G(dev_priv) (INTEL_DEVID(dev_priv) == 0xa001) 2744#define IS_PINEVIEW_G(dev_priv) (INTEL_DEVID(dev_priv) == 0xa001)
2647#define IS_PINEVIEW_M(dev_priv) (INTEL_DEVID(dev_priv) == 0xa011) 2745#define IS_PINEVIEW_M(dev_priv) (INTEL_DEVID(dev_priv) == 0xa011)
2648#define IS_PINEVIEW(dev) (INTEL_INFO(dev)->is_pineview) 2746#define IS_PINEVIEW(dev_priv) ((dev_priv)->info.is_pineview)
2649#define IS_G33(dev) (INTEL_INFO(dev)->is_g33) 2747#define IS_G33(dev_priv) ((dev_priv)->info.is_g33)
2650#define IS_IRONLAKE_M(dev_priv) (INTEL_DEVID(dev_priv) == 0x0046) 2748#define IS_IRONLAKE_M(dev_priv) (INTEL_DEVID(dev_priv) == 0x0046)
2651#define IS_IVYBRIDGE(dev_priv) ((dev_priv)->info.is_ivybridge) 2749#define IS_IVYBRIDGE(dev_priv) ((dev_priv)->info.is_ivybridge)
2652#define IS_IVB_GT1(dev_priv) (INTEL_DEVID(dev_priv) == 0x0156 || \ 2750#define IS_IVB_GT1(dev_priv) (INTEL_DEVID(dev_priv) == 0x0156 || \
@@ -2659,7 +2757,7 @@ struct drm_i915_cmd_table {
2659#define IS_SKYLAKE(dev_priv) ((dev_priv)->info.is_skylake) 2757#define IS_SKYLAKE(dev_priv) ((dev_priv)->info.is_skylake)
2660#define IS_BROXTON(dev_priv) ((dev_priv)->info.is_broxton) 2758#define IS_BROXTON(dev_priv) ((dev_priv)->info.is_broxton)
2661#define IS_KABYLAKE(dev_priv) ((dev_priv)->info.is_kabylake) 2759#define IS_KABYLAKE(dev_priv) ((dev_priv)->info.is_kabylake)
2662#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile) 2760#define IS_MOBILE(dev_priv) ((dev_priv)->info.is_mobile)
2663#define IS_HSW_EARLY_SDV(dev_priv) (IS_HASWELL(dev_priv) && \ 2761#define IS_HSW_EARLY_SDV(dev_priv) (IS_HASWELL(dev_priv) && \
2664 (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00) 2762 (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)
2665#define IS_BDW_ULT(dev_priv) (IS_BROADWELL(dev_priv) && \ 2763#define IS_BDW_ULT(dev_priv) (IS_BROADWELL(dev_priv) && \
@@ -2803,7 +2901,7 @@ struct drm_i915_cmd_table {
2803#define SUPPORTS_TV(dev) (INTEL_INFO(dev)->supports_tv) 2901#define SUPPORTS_TV(dev) (INTEL_INFO(dev)->supports_tv)
2804#define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug) 2902#define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug)
2805 2903
2806#define HAS_FW_BLC(dev) (INTEL_INFO(dev)->gen > 2) 2904#define HAS_FW_BLC(dev_priv) (INTEL_GEN(dev_priv) > 2)
2807#define HAS_PIPE_CXSR(dev) (INTEL_INFO(dev)->has_pipe_cxsr) 2905#define HAS_PIPE_CXSR(dev) (INTEL_INFO(dev)->has_pipe_cxsr)
2808#define HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc) 2906#define HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc)
2809 2907
@@ -2820,6 +2918,8 @@ struct drm_i915_cmd_table {
2820#define HAS_CSR(dev) (INTEL_INFO(dev)->has_csr) 2918#define HAS_CSR(dev) (INTEL_INFO(dev)->has_csr)
2821 2919
2822#define HAS_RUNTIME_PM(dev_priv) ((dev_priv)->info.has_runtime_pm) 2920#define HAS_RUNTIME_PM(dev_priv) ((dev_priv)->info.has_runtime_pm)
2921#define HAS_64BIT_RELOC(dev_priv) ((dev_priv)->info.has_64bit_reloc)
2922
2823/* 2923/*
2824 * For now, anything with a GuC requires uCode loading, and then supports 2924 * For now, anything with a GuC requires uCode loading, and then supports
2825 * command submission once loaded. But these are logically independent 2925 * command submission once loaded. But these are logically independent
@@ -2912,6 +3012,7 @@ extern bool intel_has_gpu_reset(struct drm_i915_private *dev_priv);
2912extern void i915_reset(struct drm_i915_private *dev_priv); 3012extern void i915_reset(struct drm_i915_private *dev_priv);
2913extern int intel_guc_reset(struct drm_i915_private *dev_priv); 3013extern int intel_guc_reset(struct drm_i915_private *dev_priv);
2914extern void intel_engine_init_hangcheck(struct intel_engine_cs *engine); 3014extern void intel_engine_init_hangcheck(struct intel_engine_cs *engine);
3015extern void intel_hangcheck_init(struct drm_i915_private *dev_priv);
2915extern unsigned long i915_chipset_val(struct drm_i915_private *dev_priv); 3016extern unsigned long i915_chipset_val(struct drm_i915_private *dev_priv);
2916extern unsigned long i915_mch_val(struct drm_i915_private *dev_priv); 3017extern unsigned long i915_mch_val(struct drm_i915_private *dev_priv);
2917extern unsigned long i915_gfx_val(struct drm_i915_private *dev_priv); 3018extern unsigned long i915_gfx_val(struct drm_i915_private *dev_priv);
@@ -3095,7 +3196,7 @@ int i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
3095 struct drm_file *file_priv); 3196 struct drm_file *file_priv);
3096int i915_gem_wait_ioctl(struct drm_device *dev, void *data, 3197int i915_gem_wait_ioctl(struct drm_device *dev, void *data,
3097 struct drm_file *file_priv); 3198 struct drm_file *file_priv);
3098void i915_gem_load_init(struct drm_device *dev); 3199int i915_gem_load_init(struct drm_device *dev);
3099void i915_gem_load_cleanup(struct drm_device *dev); 3200void i915_gem_load_cleanup(struct drm_device *dev);
3100void i915_gem_load_init_fences(struct drm_i915_private *dev_priv); 3201void i915_gem_load_init_fences(struct drm_i915_private *dev_priv);
3101int i915_gem_freeze(struct drm_i915_private *dev_priv); 3202int i915_gem_freeze(struct drm_i915_private *dev_priv);
@@ -3127,70 +3228,85 @@ void i915_vma_close(struct i915_vma *vma);
3127void i915_vma_destroy(struct i915_vma *vma); 3228void i915_vma_destroy(struct i915_vma *vma);
3128 3229
3129int i915_gem_object_unbind(struct drm_i915_gem_object *obj); 3230int i915_gem_object_unbind(struct drm_i915_gem_object *obj);
3130int i915_gem_object_put_pages(struct drm_i915_gem_object *obj);
3131void i915_gem_release_all_mmaps(struct drm_i915_private *dev_priv);
3132void i915_gem_release_mmap(struct drm_i915_gem_object *obj); 3231void i915_gem_release_mmap(struct drm_i915_gem_object *obj);
3133 3232
3134int __must_check i915_gem_object_get_pages(struct drm_i915_gem_object *obj); 3233void i915_gem_runtime_suspend(struct drm_i915_private *dev_priv);
3135 3234
3136static inline int __sg_page_count(struct scatterlist *sg) 3235static inline int __sg_page_count(const struct scatterlist *sg)
3137{ 3236{
3138 return sg->length >> PAGE_SHIFT; 3237 return sg->length >> PAGE_SHIFT;
3139} 3238}
3140 3239
3240struct scatterlist *
3241i915_gem_object_get_sg(struct drm_i915_gem_object *obj,
3242 unsigned int n, unsigned int *offset);
3243
3244struct page *
3245i915_gem_object_get_page(struct drm_i915_gem_object *obj,
3246 unsigned int n);
3247
3141struct page * 3248struct page *
3142i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj, int n); 3249i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj,
3250 unsigned int n);
3143 3251
3144static inline dma_addr_t 3252dma_addr_t
3145i915_gem_object_get_dma_address(struct drm_i915_gem_object *obj, int n) 3253i915_gem_object_get_dma_address(struct drm_i915_gem_object *obj,
3254 unsigned long n);
3255
3256void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj,
3257 struct sg_table *pages);
3258int __i915_gem_object_get_pages(struct drm_i915_gem_object *obj);
3259
3260static inline int __must_check
3261i915_gem_object_pin_pages(struct drm_i915_gem_object *obj)
3146{ 3262{
3147 if (n < obj->get_page.last) { 3263 might_lock(&obj->mm.lock);
3148 obj->get_page.sg = obj->pages->sgl;
3149 obj->get_page.last = 0;
3150 }
3151 3264
3152 while (obj->get_page.last + __sg_page_count(obj->get_page.sg) <= n) { 3265 if (atomic_inc_not_zero(&obj->mm.pages_pin_count))
3153 obj->get_page.last += __sg_page_count(obj->get_page.sg++); 3266 return 0;
3154 if (unlikely(sg_is_chain(obj->get_page.sg)))
3155 obj->get_page.sg = sg_chain_ptr(obj->get_page.sg);
3156 }
3157 3267
3158 return sg_dma_address(obj->get_page.sg) + ((n - obj->get_page.last) << PAGE_SHIFT); 3268 return __i915_gem_object_get_pages(obj);
3159} 3269}
3160 3270
3161static inline struct page * 3271static inline void
3162i915_gem_object_get_page(struct drm_i915_gem_object *obj, int n) 3272__i915_gem_object_pin_pages(struct drm_i915_gem_object *obj)
3163{ 3273{
3164 if (WARN_ON(n >= obj->base.size >> PAGE_SHIFT)) 3274 GEM_BUG_ON(!obj->mm.pages);
3165 return NULL;
3166
3167 if (n < obj->get_page.last) {
3168 obj->get_page.sg = obj->pages->sgl;
3169 obj->get_page.last = 0;
3170 }
3171 3275
3172 while (obj->get_page.last + __sg_page_count(obj->get_page.sg) <= n) { 3276 atomic_inc(&obj->mm.pages_pin_count);
3173 obj->get_page.last += __sg_page_count(obj->get_page.sg++); 3277}
3174 if (unlikely(sg_is_chain(obj->get_page.sg)))
3175 obj->get_page.sg = sg_chain_ptr(obj->get_page.sg);
3176 }
3177 3278
3178 return nth_page(sg_page(obj->get_page.sg), n - obj->get_page.last); 3279static inline bool
3280i915_gem_object_has_pinned_pages(struct drm_i915_gem_object *obj)
3281{
3282 return atomic_read(&obj->mm.pages_pin_count);
3179} 3283}
3180 3284
3181static inline void i915_gem_object_pin_pages(struct drm_i915_gem_object *obj) 3285static inline void
3286__i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj)
3182{ 3287{
3183 GEM_BUG_ON(obj->pages == NULL); 3288 GEM_BUG_ON(!i915_gem_object_has_pinned_pages(obj));
3184 obj->pages_pin_count++; 3289 GEM_BUG_ON(!obj->mm.pages);
3290
3291 atomic_dec(&obj->mm.pages_pin_count);
3292 GEM_BUG_ON(atomic_read(&obj->mm.pages_pin_count) < obj->bind_count);
3185} 3293}
3186 3294
3187static inline void i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj) 3295static inline void
3296i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj)
3188{ 3297{
3189 GEM_BUG_ON(obj->pages_pin_count == 0); 3298 __i915_gem_object_unpin_pages(obj);
3190 obj->pages_pin_count--;
3191 GEM_BUG_ON(obj->pages_pin_count < obj->bind_count);
3192} 3299}
3193 3300
3301enum i915_mm_subclass { /* lockdep subclass for obj->mm.lock */
3302 I915_MM_NORMAL = 0,
3303 I915_MM_SHRINKER
3304};
3305
3306void __i915_gem_object_put_pages(struct drm_i915_gem_object *obj,
3307 enum i915_mm_subclass subclass);
3308void __i915_gem_object_invalidate(struct drm_i915_gem_object *obj);
3309
3194enum i915_map_type { 3310enum i915_map_type {
3195 I915_MAP_WB = 0, 3311 I915_MAP_WB = 0,
3196 I915_MAP_WC, 3312 I915_MAP_WC,
@@ -3206,8 +3322,8 @@ enum i915_map_type {
3206 * the kernel address space. Based on the @type of mapping, the PTE will be 3322 * the kernel address space. Based on the @type of mapping, the PTE will be
3207 * set to either WriteBack or WriteCombine (via pgprot_t). 3323 * set to either WriteBack or WriteCombine (via pgprot_t).
3208 * 3324 *
3209 * The caller must hold the struct_mutex, and is responsible for calling 3325 * The caller is responsible for calling i915_gem_object_unpin_map() when the
3210 * i915_gem_object_unpin_map() when the mapping is no longer required. 3326 * mapping is no longer required.
3211 * 3327 *
3212 * Returns the pointer through which to access the mapped object, or an 3328 * Returns the pointer through which to access the mapped object, or an
3213 * ERR_PTR() on error. 3329 * ERR_PTR() on error.
@@ -3223,12 +3339,9 @@ void *__must_check i915_gem_object_pin_map(struct drm_i915_gem_object *obj,
3223 * with your access, call i915_gem_object_unpin_map() to release the pin 3339 * with your access, call i915_gem_object_unpin_map() to release the pin
3224 * upon the mapping. Once the pin count reaches zero, that mapping may be 3340 * upon the mapping. Once the pin count reaches zero, that mapping may be
3225 * removed. 3341 * removed.
3226 *
3227 * The caller must hold the struct_mutex.
3228 */ 3342 */
3229static inline void i915_gem_object_unpin_map(struct drm_i915_gem_object *obj) 3343static inline void i915_gem_object_unpin_map(struct drm_i915_gem_object *obj)
3230{ 3344{
3231 lockdep_assert_held(&obj->base.dev->struct_mutex);
3232 i915_gem_object_unpin_pages(obj); 3345 i915_gem_object_unpin_pages(obj);
3233} 3346}
3234 3347
@@ -3261,7 +3374,7 @@ void i915_gem_track_fb(struct drm_i915_gem_object *old,
3261 struct drm_i915_gem_object *new, 3374 struct drm_i915_gem_object *new,
3262 unsigned frontbuffer_bits); 3375 unsigned frontbuffer_bits);
3263 3376
3264int __must_check i915_gem_set_seqno(struct drm_device *dev, u32 seqno); 3377int __must_check i915_gem_set_global_seqno(struct drm_device *dev, u32 seqno);
3265 3378
3266struct drm_i915_gem_request * 3379struct drm_i915_gem_request *
3267i915_gem_find_active_request(struct intel_engine_cs *engine); 3380i915_gem_find_active_request(struct intel_engine_cs *engine);
@@ -3300,9 +3413,10 @@ int __must_check i915_gem_wait_for_idle(struct drm_i915_private *dev_priv,
3300int __must_check i915_gem_suspend(struct drm_device *dev); 3413int __must_check i915_gem_suspend(struct drm_device *dev);
3301void i915_gem_resume(struct drm_device *dev); 3414void i915_gem_resume(struct drm_device *dev);
3302int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf); 3415int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
3303int __must_check 3416int i915_gem_object_wait(struct drm_i915_gem_object *obj,
3304i915_gem_object_wait_rendering(struct drm_i915_gem_object *obj, 3417 unsigned int flags,
3305 bool readonly); 3418 long timeout,
3419 struct intel_rps_client *rps);
3306int __must_check 3420int __must_check
3307i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, 3421i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj,
3308 bool write); 3422 bool write);
@@ -3384,6 +3498,7 @@ int __must_check i915_vma_put_fence(struct i915_vma *vma);
3384static inline bool 3498static inline bool
3385i915_vma_pin_fence(struct i915_vma *vma) 3499i915_vma_pin_fence(struct i915_vma *vma)
3386{ 3500{
3501 lockdep_assert_held(&vma->vm->dev->struct_mutex);
3387 if (vma->fence) { 3502 if (vma->fence) {
3388 vma->fence->pin_count++; 3503 vma->fence->pin_count++;
3389 return true; 3504 return true;
@@ -3402,6 +3517,7 @@ i915_vma_pin_fence(struct i915_vma *vma)
3402static inline void 3517static inline void
3403i915_vma_unpin_fence(struct i915_vma *vma) 3518i915_vma_unpin_fence(struct i915_vma *vma)
3404{ 3519{
3520 lockdep_assert_held(&vma->vm->dev->struct_mutex);
3405 if (vma->fence) { 3521 if (vma->fence) {
3406 GEM_BUG_ON(vma->fence->pin_count <= 0); 3522 GEM_BUG_ON(vma->fence->pin_count <= 0);
3407 vma->fence->pin_count--; 3523 vma->fence->pin_count--;
@@ -3411,8 +3527,10 @@ i915_vma_unpin_fence(struct i915_vma *vma)
3411void i915_gem_restore_fences(struct drm_device *dev); 3527void i915_gem_restore_fences(struct drm_device *dev);
3412 3528
3413void i915_gem_detect_bit_6_swizzle(struct drm_device *dev); 3529void i915_gem_detect_bit_6_swizzle(struct drm_device *dev);
3414void i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj); 3530void i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj,
3415void i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj); 3531 struct sg_table *pages);
3532void i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj,
3533 struct sg_table *pages);
3416 3534
3417/* i915_gem_context.c */ 3535/* i915_gem_context.c */
3418int __must_check i915_gem_context_init(struct drm_device *dev); 3536int __must_check i915_gem_context_init(struct drm_device *dev);
@@ -3422,6 +3540,9 @@ int i915_gem_context_open(struct drm_device *dev, struct drm_file *file);
3422void i915_gem_context_close(struct drm_device *dev, struct drm_file *file); 3540void i915_gem_context_close(struct drm_device *dev, struct drm_file *file);
3423int i915_switch_context(struct drm_i915_gem_request *req); 3541int i915_switch_context(struct drm_i915_gem_request *req);
3424int i915_gem_switch_to_kernel_context(struct drm_i915_private *dev_priv); 3542int i915_gem_switch_to_kernel_context(struct drm_i915_private *dev_priv);
3543struct i915_vma *
3544i915_gem_context_pin_legacy(struct i915_gem_context *ctx,
3545 unsigned int flags);
3425void i915_gem_context_free(struct kref *ctx_ref); 3546void i915_gem_context_free(struct kref *ctx_ref);
3426struct drm_i915_gem_object * 3547struct drm_i915_gem_object *
3427i915_gem_alloc_context_obj(struct drm_device *dev, size_t size); 3548i915_gem_alloc_context_obj(struct drm_device *dev, size_t size);
@@ -3455,6 +3576,16 @@ static inline void i915_gem_context_put(struct i915_gem_context *ctx)
3455 kref_put(&ctx->ref, i915_gem_context_free); 3576 kref_put(&ctx->ref, i915_gem_context_free);
3456} 3577}
3457 3578
3579static inline struct intel_timeline *
3580i915_gem_context_lookup_timeline(struct i915_gem_context *ctx,
3581 struct intel_engine_cs *engine)
3582{
3583 struct i915_address_space *vm;
3584
3585 vm = ctx->ppgtt ? &ctx->ppgtt->base : &ctx->i915->ggtt.base;
3586 return &vm->timeline.engine[engine->id];
3587}
3588
3458static inline bool i915_gem_context_is_default(const struct i915_gem_context *c) 3589static inline bool i915_gem_context_is_default(const struct i915_gem_context *c)
3459{ 3590{
3460 return c->user_handle == DEFAULT_CONTEXT_HANDLE; 3591 return c->user_handle == DEFAULT_CONTEXT_HANDLE;
@@ -3508,6 +3639,11 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
3508 u32 gtt_offset, 3639 u32 gtt_offset,
3509 u32 size); 3640 u32 size);
3510 3641
3642/* i915_gem_internal.c */
3643struct drm_i915_gem_object *
3644i915_gem_object_create_internal(struct drm_i915_private *dev_priv,
3645 unsigned int size);
3646
3511/* i915_gem_shrinker.c */ 3647/* i915_gem_shrinker.c */
3512unsigned long i915_gem_shrink(struct drm_i915_private *dev_priv, 3648unsigned long i915_gem_shrink(struct drm_i915_private *dev_priv,
3513 unsigned long target, 3649 unsigned long target,
@@ -3690,7 +3826,7 @@ void intel_device_info_dump(struct drm_i915_private *dev_priv);
3690 3826
3691/* modesetting */ 3827/* modesetting */
3692extern void intel_modeset_init_hw(struct drm_device *dev); 3828extern void intel_modeset_init_hw(struct drm_device *dev);
3693extern void intel_modeset_init(struct drm_device *dev); 3829extern int intel_modeset_init(struct drm_device *dev);
3694extern void intel_modeset_gem_init(struct drm_device *dev); 3830extern void intel_modeset_gem_init(struct drm_device *dev);
3695extern void intel_modeset_cleanup(struct drm_device *dev); 3831extern void intel_modeset_cleanup(struct drm_device *dev);
3696extern int intel_connector_register(struct drm_connector *); 3832extern int intel_connector_register(struct drm_connector *);
@@ -3745,6 +3881,23 @@ u32 vlv_flisdsi_read(struct drm_i915_private *dev_priv, u32 reg);
3745void vlv_flisdsi_write(struct drm_i915_private *dev_priv, u32 reg, u32 val); 3881void vlv_flisdsi_write(struct drm_i915_private *dev_priv, u32 reg, u32 val);
3746 3882
3747/* intel_dpio_phy.c */ 3883/* intel_dpio_phy.c */
3884void bxt_port_to_phy_channel(enum port port,
3885 enum dpio_phy *phy, enum dpio_channel *ch);
3886void bxt_ddi_phy_set_signal_level(struct drm_i915_private *dev_priv,
3887 enum port port, u32 margin, u32 scale,
3888 u32 enable, u32 deemphasis);
3889void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy);
3890void bxt_ddi_phy_uninit(struct drm_i915_private *dev_priv, enum dpio_phy phy);
3891bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
3892 enum dpio_phy phy);
3893bool bxt_ddi_phy_verify_state(struct drm_i915_private *dev_priv,
3894 enum dpio_phy phy);
3895uint8_t bxt_ddi_phy_calc_lane_lat_optim_mask(struct intel_encoder *encoder,
3896 uint8_t lane_count);
3897void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
3898 uint8_t lane_lat_optim_mask);
3899uint8_t bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder);
3900
3748void chv_set_phy_signal_level(struct intel_encoder *encoder, 3901void chv_set_phy_signal_level(struct intel_encoder *encoder,
3749 u32 deemph_reg_value, u32 margin_reg_value, 3902 u32 deemph_reg_value, u32 margin_reg_value,
3750 bool uniq_trans_scale); 3903 bool uniq_trans_scale);
@@ -3834,11 +3987,30 @@ __raw_write(64, q)
3834#undef __raw_write 3987#undef __raw_write
3835 3988
3836/* These are untraced mmio-accessors that are only valid to be used inside 3989/* These are untraced mmio-accessors that are only valid to be used inside
3837 * critical sections inside IRQ handlers where forcewake is explicitly 3990 * critical sections, such as inside IRQ handlers, where forcewake is explicitly
3838 * controlled. 3991 * controlled.
3992 *
3839 * Think twice, and think again, before using these. 3993 * Think twice, and think again, before using these.
3840 * Note: Should only be used between intel_uncore_forcewake_irqlock() and 3994 *
3841 * intel_uncore_forcewake_irqunlock(). 3995 * As an example, these accessors can possibly be used between:
3996 *
3997 * spin_lock_irq(&dev_priv->uncore.lock);
3998 * intel_uncore_forcewake_get__locked();
3999 *
4000 * and
4001 *
4002 * intel_uncore_forcewake_put__locked();
4003 * spin_unlock_irq(&dev_priv->uncore.lock);
4004 *
4005 *
4006 * Note: some registers may not need forcewake held, so
4007 * intel_uncore_forcewake_{get,put} can be omitted, see
4008 * intel_uncore_forcewake_for_reg().
4009 *
4010 * Certain architectures will die if the same cacheline is concurrently accessed
4011 * by different clients (e.g. on Ivybridge). Access to registers should
4012 * therefore generally be serialised, by either the dev_priv->uncore.lock or
4013 * a more localised lock guarding all access to that bank of registers.
3842 */ 4014 */
3843#define I915_READ_FW(reg__) __raw_i915_read32(dev_priv, (reg__)) 4015#define I915_READ_FW(reg__) __raw_i915_read32(dev_priv, (reg__))
3844#define I915_WRITE_FW(reg__, val__) __raw_i915_write32(dev_priv, (reg__), (val__)) 4016#define I915_WRITE_FW(reg__, val__) __raw_i915_write32(dev_priv, (reg__), (val__))
@@ -3915,7 +4087,7 @@ __i915_request_irq_complete(struct drm_i915_gem_request *req)
3915 /* Before we do the heavier coherent read of the seqno, 4087 /* Before we do the heavier coherent read of the seqno,
3916 * check the value (hopefully) in the CPU cacheline. 4088 * check the value (hopefully) in the CPU cacheline.
3917 */ 4089 */
3918 if (i915_gem_request_completed(req)) 4090 if (__i915_gem_request_completed(req))
3919 return true; 4091 return true;
3920 4092
3921 /* Ensure our read of the seqno is coherent so that we 4093 /* Ensure our read of the seqno is coherent so that we
@@ -3966,7 +4138,7 @@ __i915_request_irq_complete(struct drm_i915_gem_request *req)
3966 wake_up_process(tsk); 4138 wake_up_process(tsk);
3967 rcu_read_unlock(); 4139 rcu_read_unlock();
3968 4140
3969 if (i915_gem_request_completed(req)) 4141 if (__i915_gem_request_completed(req))
3970 return true; 4142 return true;
3971 } 4143 }
3972 4144
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index bf5e9064e02d..41e697e5dbcd 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -29,7 +29,6 @@
29#include <drm/drm_vma_manager.h> 29#include <drm/drm_vma_manager.h>
30#include <drm/i915_drm.h> 30#include <drm/i915_drm.h>
31#include "i915_drv.h" 31#include "i915_drv.h"
32#include "i915_gem_dmabuf.h"
33#include "i915_vgpu.h" 32#include "i915_vgpu.h"
34#include "i915_trace.h" 33#include "i915_trace.h"
35#include "intel_drv.h" 34#include "intel_drv.h"
@@ -42,6 +41,7 @@
42#include <linux/pci.h> 41#include <linux/pci.h>
43#include <linux/dma-buf.h> 42#include <linux/dma-buf.h>
44 43
44static void i915_gem_flush_free_objects(struct drm_i915_private *i915);
45static void i915_gem_object_flush_gtt_write_domain(struct drm_i915_gem_object *obj); 45static void i915_gem_object_flush_gtt_write_domain(struct drm_i915_gem_object *obj);
46static void i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj); 46static void i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj);
47 47
@@ -63,13 +63,13 @@ static bool cpu_write_needs_clflush(struct drm_i915_gem_object *obj)
63} 63}
64 64
65static int 65static int
66insert_mappable_node(struct drm_i915_private *i915, 66insert_mappable_node(struct i915_ggtt *ggtt,
67 struct drm_mm_node *node, u32 size) 67 struct drm_mm_node *node, u32 size)
68{ 68{
69 memset(node, 0, sizeof(*node)); 69 memset(node, 0, sizeof(*node));
70 return drm_mm_insert_node_in_range_generic(&i915->ggtt.base.mm, node, 70 return drm_mm_insert_node_in_range_generic(&ggtt->base.mm, node,
71 size, 0, 0, 0, 71 size, 0, -1,
72 i915->ggtt.mappable_end, 72 0, ggtt->mappable_end,
73 DRM_MM_SEARCH_DEFAULT, 73 DRM_MM_SEARCH_DEFAULT,
74 DRM_MM_CREATE_DEFAULT); 74 DRM_MM_CREATE_DEFAULT);
75} 75}
@@ -104,6 +104,8 @@ i915_gem_wait_for_error(struct i915_gpu_error *error)
104{ 104{
105 int ret; 105 int ret;
106 106
107 might_sleep();
108
107 if (!i915_reset_in_progress(error)) 109 if (!i915_reset_in_progress(error))
108 return 0; 110 return 0;
109 111
@@ -114,7 +116,7 @@ i915_gem_wait_for_error(struct i915_gpu_error *error)
114 */ 116 */
115 ret = wait_event_interruptible_timeout(error->reset_queue, 117 ret = wait_event_interruptible_timeout(error->reset_queue,
116 !i915_reset_in_progress(error), 118 !i915_reset_in_progress(error),
117 10*HZ); 119 I915_RESET_TIMEOUT);
118 if (ret == 0) { 120 if (ret == 0) {
119 DRM_ERROR("Timed out waiting for the gpu reset to complete\n"); 121 DRM_ERROR("Timed out waiting for the gpu reset to complete\n");
120 return -EIO; 122 return -EIO;
@@ -167,7 +169,7 @@ i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
167 return 0; 169 return 0;
168} 170}
169 171
170static int 172static struct sg_table *
171i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj) 173i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
172{ 174{
173 struct address_space *mapping = obj->base.filp->f_mapping; 175 struct address_space *mapping = obj->base.filp->f_mapping;
@@ -177,7 +179,7 @@ i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
177 int i; 179 int i;
178 180
179 if (WARN_ON(i915_gem_object_needs_bit17_swizzle(obj))) 181 if (WARN_ON(i915_gem_object_needs_bit17_swizzle(obj)))
180 return -EINVAL; 182 return ERR_PTR(-EINVAL);
181 183
182 for (i = 0; i < obj->base.size / PAGE_SIZE; i++) { 184 for (i = 0; i < obj->base.size / PAGE_SIZE; i++) {
183 struct page *page; 185 struct page *page;
@@ -185,7 +187,7 @@ i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
185 187
186 page = shmem_read_mapping_page(mapping, i); 188 page = shmem_read_mapping_page(mapping, i);
187 if (IS_ERR(page)) 189 if (IS_ERR(page))
188 return PTR_ERR(page); 190 return ERR_CAST(page);
189 191
190 src = kmap_atomic(page); 192 src = kmap_atomic(page);
191 memcpy(vaddr, src, PAGE_SIZE); 193 memcpy(vaddr, src, PAGE_SIZE);
@@ -200,11 +202,11 @@ i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
200 202
201 st = kmalloc(sizeof(*st), GFP_KERNEL); 203 st = kmalloc(sizeof(*st), GFP_KERNEL);
202 if (st == NULL) 204 if (st == NULL)
203 return -ENOMEM; 205 return ERR_PTR(-ENOMEM);
204 206
205 if (sg_alloc_table(st, 1, GFP_KERNEL)) { 207 if (sg_alloc_table(st, 1, GFP_KERNEL)) {
206 kfree(st); 208 kfree(st);
207 return -ENOMEM; 209 return ERR_PTR(-ENOMEM);
208 } 210 }
209 211
210 sg = st->sgl; 212 sg = st->sgl;
@@ -214,29 +216,31 @@ i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
214 sg_dma_address(sg) = obj->phys_handle->busaddr; 216 sg_dma_address(sg) = obj->phys_handle->busaddr;
215 sg_dma_len(sg) = obj->base.size; 217 sg_dma_len(sg) = obj->base.size;
216 218
217 obj->pages = st; 219 return st;
218 return 0;
219} 220}
220 221
221static void 222static void
222i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj) 223__i915_gem_object_release_shmem(struct drm_i915_gem_object *obj)
223{ 224{
224 int ret; 225 GEM_BUG_ON(obj->mm.madv == __I915_MADV_PURGED);
225 226
226 BUG_ON(obj->madv == __I915_MADV_PURGED); 227 if (obj->mm.madv == I915_MADV_DONTNEED)
228 obj->mm.dirty = false;
227 229
228 ret = i915_gem_object_set_to_cpu_domain(obj, true); 230 if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0)
229 if (WARN_ON(ret)) { 231 i915_gem_clflush_object(obj, false);
230 /* In the event of a disaster, abandon all caches and
231 * hope for the best.
232 */
233 obj->base.read_domains = obj->base.write_domain = I915_GEM_DOMAIN_CPU;
234 }
235 232
236 if (obj->madv == I915_MADV_DONTNEED) 233 obj->base.read_domains = I915_GEM_DOMAIN_CPU;
237 obj->dirty = 0; 234 obj->base.write_domain = I915_GEM_DOMAIN_CPU;
235}
238 236
239 if (obj->dirty) { 237static void
238i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj,
239 struct sg_table *pages)
240{
241 __i915_gem_object_release_shmem(obj);
242
243 if (obj->mm.dirty) {
240 struct address_space *mapping = obj->base.filp->f_mapping; 244 struct address_space *mapping = obj->base.filp->f_mapping;
241 char *vaddr = obj->phys_handle->vaddr; 245 char *vaddr = obj->phys_handle->vaddr;
242 int i; 246 int i;
@@ -255,22 +259,23 @@ i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj)
255 kunmap_atomic(dst); 259 kunmap_atomic(dst);
256 260
257 set_page_dirty(page); 261 set_page_dirty(page);
258 if (obj->madv == I915_MADV_WILLNEED) 262 if (obj->mm.madv == I915_MADV_WILLNEED)
259 mark_page_accessed(page); 263 mark_page_accessed(page);
260 put_page(page); 264 put_page(page);
261 vaddr += PAGE_SIZE; 265 vaddr += PAGE_SIZE;
262 } 266 }
263 obj->dirty = 0; 267 obj->mm.dirty = false;
264 } 268 }
265 269
266 sg_free_table(obj->pages); 270 sg_free_table(pages);
267 kfree(obj->pages); 271 kfree(pages);
268} 272}
269 273
270static void 274static void
271i915_gem_object_release_phys(struct drm_i915_gem_object *obj) 275i915_gem_object_release_phys(struct drm_i915_gem_object *obj)
272{ 276{
273 drm_pci_free(obj->base.dev, obj->phys_handle); 277 drm_pci_free(obj->base.dev, obj->phys_handle);
278 i915_gem_object_unpin_pages(obj);
274} 279}
275 280
276static const struct drm_i915_gem_object_ops i915_gem_phys_ops = { 281static const struct drm_i915_gem_object_ops i915_gem_phys_ops = {
@@ -292,7 +297,12 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj)
292 * must wait for all rendering to complete to the object (as unbinding 297 * must wait for all rendering to complete to the object (as unbinding
293 * must anyway), and retire the requests. 298 * must anyway), and retire the requests.
294 */ 299 */
295 ret = i915_gem_object_wait_rendering(obj, false); 300 ret = i915_gem_object_wait(obj,
301 I915_WAIT_INTERRUPTIBLE |
302 I915_WAIT_LOCKED |
303 I915_WAIT_ALL,
304 MAX_SCHEDULE_TIMEOUT,
305 NULL);
296 if (ret) 306 if (ret)
297 return ret; 307 return ret;
298 308
@@ -311,88 +321,143 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj)
311 return ret; 321 return ret;
312} 322}
313 323
314/** 324static long
315 * Ensures that all rendering to the object has completed and the object is 325i915_gem_object_wait_fence(struct dma_fence *fence,
316 * safe to unbind from the GTT or access from the CPU. 326 unsigned int flags,
317 * @obj: i915 gem object 327 long timeout,
318 * @readonly: waiting for just read access or read-write access 328 struct intel_rps_client *rps)
319 */
320int
321i915_gem_object_wait_rendering(struct drm_i915_gem_object *obj,
322 bool readonly)
323{ 329{
324 struct reservation_object *resv; 330 struct drm_i915_gem_request *rq;
325 struct i915_gem_active *active;
326 unsigned long active_mask;
327 int idx;
328 331
329 lockdep_assert_held(&obj->base.dev->struct_mutex); 332 BUILD_BUG_ON(I915_WAIT_INTERRUPTIBLE != 0x1);
330 333
331 if (!readonly) { 334 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
332 active = obj->last_read; 335 return timeout;
333 active_mask = i915_gem_object_get_active(obj);
334 } else {
335 active_mask = 1;
336 active = &obj->last_write;
337 }
338 336
339 for_each_active(active_mask, idx) { 337 if (!dma_fence_is_i915(fence))
340 int ret; 338 return dma_fence_wait_timeout(fence,
339 flags & I915_WAIT_INTERRUPTIBLE,
340 timeout);
341 341
342 ret = i915_gem_active_wait(&active[idx], 342 rq = to_request(fence);
343 &obj->base.dev->struct_mutex); 343 if (i915_gem_request_completed(rq))
344 if (ret) 344 goto out;
345 return ret; 345
346 /* This client is about to stall waiting for the GPU. In many cases
347 * this is undesirable and limits the throughput of the system, as
348 * many clients cannot continue processing user input/output whilst
349 * blocked. RPS autotuning may take tens of milliseconds to respond
350 * to the GPU load and thus incurs additional latency for the client.
351 * We can circumvent that by promoting the GPU frequency to maximum
352 * before we wait. This makes the GPU throttle up much more quickly
353 * (good for benchmarks and user experience, e.g. window animations),
354 * but at a cost of spending more power processing the workload
355 * (bad for battery). Not all clients even want their results
356 * immediately and for them we should just let the GPU select its own
357 * frequency to maximise efficiency. To prevent a single client from
358 * forcing the clocks too high for the whole system, we only allow
359 * each client to waitboost once in a busy period.
360 */
361 if (rps) {
362 if (INTEL_GEN(rq->i915) >= 6)
363 gen6_rps_boost(rq->i915, rps, rq->emitted_jiffies);
364 else
365 rps = NULL;
346 } 366 }
347 367
348 resv = i915_gem_object_get_dmabuf_resv(obj); 368 timeout = i915_wait_request(rq, flags, timeout);
349 if (resv) {
350 long err;
351 369
352 err = reservation_object_wait_timeout_rcu(resv, !readonly, true, 370out:
353 MAX_SCHEDULE_TIMEOUT); 371 if (flags & I915_WAIT_LOCKED && i915_gem_request_completed(rq))
354 if (err < 0) 372 i915_gem_request_retire_upto(rq);
355 return err; 373
374 if (rps && rq->global_seqno == intel_engine_last_submit(rq->engine)) {
375 /* The GPU is now idle and this client has stalled.
376 * Since no other client has submitted a request in the
377 * meantime, assume that this client is the only one
378 * supplying work to the GPU but is unable to keep that
379 * work supplied because it is waiting. Since the GPU is
380 * then never kept fully busy, RPS autoclocking will
381 * keep the clocks relatively low, causing further delays.
382 * Compensate by giving the synchronous client credit for
383 * a waitboost next time.
384 */
385 spin_lock(&rq->i915->rps.client_lock);
386 list_del_init(&rps->link);
387 spin_unlock(&rq->i915->rps.client_lock);
356 } 388 }
357 389
358 return 0; 390 return timeout;
359} 391}
360 392
361/* A nonblocking variant of the above wait. Must be called prior to 393static long
362 * acquiring the mutex for the object, as the object state may change 394i915_gem_object_wait_reservation(struct reservation_object *resv,
363 * during this call. A reference must be held by the caller for the object. 395 unsigned int flags,
364 */ 396 long timeout,
365static __must_check int 397 struct intel_rps_client *rps)
366__unsafe_wait_rendering(struct drm_i915_gem_object *obj,
367 struct intel_rps_client *rps,
368 bool readonly)
369{ 398{
370 struct i915_gem_active *active; 399 struct dma_fence *excl;
371 unsigned long active_mask;
372 int idx;
373 400
374 active_mask = __I915_BO_ACTIVE(obj); 401 if (flags & I915_WAIT_ALL) {
375 if (!active_mask) 402 struct dma_fence **shared;
376 return 0; 403 unsigned int count, i;
377
378 if (!readonly) {
379 active = obj->last_read;
380 } else {
381 active_mask = 1;
382 active = &obj->last_write;
383 }
384
385 for_each_active(active_mask, idx) {
386 int ret; 404 int ret;
387 405
388 ret = i915_gem_active_wait_unlocked(&active[idx], 406 ret = reservation_object_get_fences_rcu(resv,
389 I915_WAIT_INTERRUPTIBLE, 407 &excl, &count, &shared);
390 NULL, rps);
391 if (ret) 408 if (ret)
392 return ret; 409 return ret;
410
411 for (i = 0; i < count; i++) {
412 timeout = i915_gem_object_wait_fence(shared[i],
413 flags, timeout,
414 rps);
415 if (timeout <= 0)
416 break;
417
418 dma_fence_put(shared[i]);
419 }
420
421 for (; i < count; i++)
422 dma_fence_put(shared[i]);
423 kfree(shared);
424 } else {
425 excl = reservation_object_get_excl_rcu(resv);
393 } 426 }
394 427
395 return 0; 428 if (excl && timeout > 0)
429 timeout = i915_gem_object_wait_fence(excl, flags, timeout, rps);
430
431 dma_fence_put(excl);
432
433 return timeout;
434}
435
436/**
437 * Waits for rendering to the object to be completed
438 * @obj: i915 gem object
439 * @flags: how to wait (under a lock, for all rendering or just for writes etc)
440 * @timeout: how long to wait
441 * @rps: client (user process) to charge for any waitboosting
442 */
443int
444i915_gem_object_wait(struct drm_i915_gem_object *obj,
445 unsigned int flags,
446 long timeout,
447 struct intel_rps_client *rps)
448{
449 might_sleep();
450#if IS_ENABLED(CONFIG_LOCKDEP)
451 GEM_BUG_ON(debug_locks &&
452 !!lockdep_is_held(&obj->base.dev->struct_mutex) !=
453 !!(flags & I915_WAIT_LOCKED));
454#endif
455 GEM_BUG_ON(timeout < 0);
456
457 timeout = i915_gem_object_wait_reservation(obj->resv,
458 flags, timeout,
459 rps);
460 return timeout < 0 ? timeout : 0;
396} 461}
397 462
398static struct intel_rps_client *to_rps_client(struct drm_file *file) 463static struct intel_rps_client *to_rps_client(struct drm_file *file)
@@ -416,7 +481,7 @@ i915_gem_object_attach_phys(struct drm_i915_gem_object *obj,
416 return 0; 481 return 0;
417 } 482 }
418 483
419 if (obj->madv != I915_MADV_WILLNEED) 484 if (obj->mm.madv != I915_MADV_WILLNEED)
420 return -EFAULT; 485 return -EFAULT;
421 486
422 if (obj->base.filp == NULL) 487 if (obj->base.filp == NULL)
@@ -426,9 +491,9 @@ i915_gem_object_attach_phys(struct drm_i915_gem_object *obj,
426 if (ret) 491 if (ret)
427 return ret; 492 return ret;
428 493
429 ret = i915_gem_object_put_pages(obj); 494 __i915_gem_object_put_pages(obj, I915_MM_NORMAL);
430 if (ret) 495 if (obj->mm.pages)
431 return ret; 496 return -EBUSY;
432 497
433 /* create a new object */ 498 /* create a new object */
434 phys = drm_pci_alloc(obj->base.dev, obj->base.size, align); 499 phys = drm_pci_alloc(obj->base.dev, obj->base.size, align);
@@ -438,23 +503,29 @@ i915_gem_object_attach_phys(struct drm_i915_gem_object *obj,
438 obj->phys_handle = phys; 503 obj->phys_handle = phys;
439 obj->ops = &i915_gem_phys_ops; 504 obj->ops = &i915_gem_phys_ops;
440 505
441 return i915_gem_object_get_pages(obj); 506 return i915_gem_object_pin_pages(obj);
442} 507}
443 508
444static int 509static int
445i915_gem_phys_pwrite(struct drm_i915_gem_object *obj, 510i915_gem_phys_pwrite(struct drm_i915_gem_object *obj,
446 struct drm_i915_gem_pwrite *args, 511 struct drm_i915_gem_pwrite *args,
447 struct drm_file *file_priv) 512 struct drm_file *file)
448{ 513{
449 struct drm_device *dev = obj->base.dev; 514 struct drm_device *dev = obj->base.dev;
450 void *vaddr = obj->phys_handle->vaddr + args->offset; 515 void *vaddr = obj->phys_handle->vaddr + args->offset;
451 char __user *user_data = u64_to_user_ptr(args->data_ptr); 516 char __user *user_data = u64_to_user_ptr(args->data_ptr);
452 int ret = 0; 517 int ret;
453 518
454 /* We manually control the domain here and pretend that it 519 /* We manually control the domain here and pretend that it
455 * remains coherent i.e. in the GTT domain, like shmem_pwrite. 520 * remains coherent i.e. in the GTT domain, like shmem_pwrite.
456 */ 521 */
457 ret = i915_gem_object_wait_rendering(obj, false); 522 lockdep_assert_held(&obj->base.dev->struct_mutex);
523 ret = i915_gem_object_wait(obj,
524 I915_WAIT_INTERRUPTIBLE |
525 I915_WAIT_LOCKED |
526 I915_WAIT_ALL,
527 MAX_SCHEDULE_TIMEOUT,
528 to_rps_client(file));
458 if (ret) 529 if (ret)
459 return ret; 530 return ret;
460 531
@@ -516,7 +587,7 @@ i915_gem_create(struct drm_file *file,
516 587
517 ret = drm_gem_handle_create(file, &obj->base, &handle); 588 ret = drm_gem_handle_create(file, &obj->base, &handle);
518 /* drop reference from allocate - handle holds it now */ 589 /* drop reference from allocate - handle holds it now */
519 i915_gem_object_put_unlocked(obj); 590 i915_gem_object_put(obj);
520 if (ret) 591 if (ret)
521 return ret; 592 return ret;
522 593
@@ -548,6 +619,8 @@ i915_gem_create_ioctl(struct drm_device *dev, void *data,
548{ 619{
549 struct drm_i915_gem_create *args = data; 620 struct drm_i915_gem_create *args = data;
550 621
622 i915_gem_flush_free_objects(to_i915(dev));
623
551 return i915_gem_create(file, dev, 624 return i915_gem_create(file, dev,
552 args->size, &args->handle); 625 args->size, &args->handle);
553} 626}
@@ -614,21 +687,24 @@ int i915_gem_obj_prepare_shmem_read(struct drm_i915_gem_object *obj,
614{ 687{
615 int ret; 688 int ret;
616 689
617 *needs_clflush = 0; 690 lockdep_assert_held(&obj->base.dev->struct_mutex);
618 691
692 *needs_clflush = 0;
619 if (!i915_gem_object_has_struct_page(obj)) 693 if (!i915_gem_object_has_struct_page(obj))
620 return -ENODEV; 694 return -ENODEV;
621 695
622 ret = i915_gem_object_wait_rendering(obj, true); 696 ret = i915_gem_object_wait(obj,
697 I915_WAIT_INTERRUPTIBLE |
698 I915_WAIT_LOCKED,
699 MAX_SCHEDULE_TIMEOUT,
700 NULL);
623 if (ret) 701 if (ret)
624 return ret; 702 return ret;
625 703
626 ret = i915_gem_object_get_pages(obj); 704 ret = i915_gem_object_pin_pages(obj);
627 if (ret) 705 if (ret)
628 return ret; 706 return ret;
629 707
630 i915_gem_object_pin_pages(obj);
631
632 i915_gem_object_flush_gtt_write_domain(obj); 708 i915_gem_object_flush_gtt_write_domain(obj);
633 709
634 /* If we're not in the cpu read domain, set ourself into the gtt 710 /* If we're not in the cpu read domain, set ourself into the gtt
@@ -661,20 +737,25 @@ int i915_gem_obj_prepare_shmem_write(struct drm_i915_gem_object *obj,
661{ 737{
662 int ret; 738 int ret;
663 739
740 lockdep_assert_held(&obj->base.dev->struct_mutex);
741
664 *needs_clflush = 0; 742 *needs_clflush = 0;
665 if (!i915_gem_object_has_struct_page(obj)) 743 if (!i915_gem_object_has_struct_page(obj))
666 return -ENODEV; 744 return -ENODEV;
667 745
668 ret = i915_gem_object_wait_rendering(obj, false); 746 ret = i915_gem_object_wait(obj,
747 I915_WAIT_INTERRUPTIBLE |
748 I915_WAIT_LOCKED |
749 I915_WAIT_ALL,
750 MAX_SCHEDULE_TIMEOUT,
751 NULL);
669 if (ret) 752 if (ret)
670 return ret; 753 return ret;
671 754
672 ret = i915_gem_object_get_pages(obj); 755 ret = i915_gem_object_pin_pages(obj);
673 if (ret) 756 if (ret)
674 return ret; 757 return ret;
675 758
676 i915_gem_object_pin_pages(obj);
677
678 i915_gem_object_flush_gtt_write_domain(obj); 759 i915_gem_object_flush_gtt_write_domain(obj);
679 760
680 /* If we're not in the cpu write domain, set ourself into the 761 /* If we're not in the cpu write domain, set ourself into the
@@ -704,7 +785,7 @@ int i915_gem_obj_prepare_shmem_write(struct drm_i915_gem_object *obj,
704 obj->cache_dirty = true; 785 obj->cache_dirty = true;
705 786
706 intel_fb_obj_invalidate(obj, ORIGIN_CPU); 787 intel_fb_obj_invalidate(obj, ORIGIN_CPU);
707 obj->dirty = 1; 788 obj->mm.dirty = true;
708 /* return with the pages pinned */ 789 /* return with the pages pinned */
709 return 0; 790 return 0;
710 791
@@ -713,32 +794,6 @@ err_unpin:
713 return ret; 794 return ret;
714} 795}
715 796
716/* Per-page copy function for the shmem pread fastpath.
717 * Flushes invalid cachelines before reading the target if
718 * needs_clflush is set. */
719static int
720shmem_pread_fast(struct page *page, int shmem_page_offset, int page_length,
721 char __user *user_data,
722 bool page_do_bit17_swizzling, bool needs_clflush)
723{
724 char *vaddr;
725 int ret;
726
727 if (unlikely(page_do_bit17_swizzling))
728 return -EINVAL;
729
730 vaddr = kmap_atomic(page);
731 if (needs_clflush)
732 drm_clflush_virt_range(vaddr + shmem_page_offset,
733 page_length);
734 ret = __copy_to_user_inatomic(user_data,
735 vaddr + shmem_page_offset,
736 page_length);
737 kunmap_atomic(vaddr);
738
739 return ret ? -EFAULT : 0;
740}
741
742static void 797static void
743shmem_clflush_swizzled_range(char *addr, unsigned long length, 798shmem_clflush_swizzled_range(char *addr, unsigned long length,
744 bool swizzled) 799 bool swizzled)
@@ -764,7 +819,7 @@ shmem_clflush_swizzled_range(char *addr, unsigned long length,
764/* Only difference to the fast-path function is that this can handle bit17 819/* Only difference to the fast-path function is that this can handle bit17
765 * and uses non-atomic copy and kmap functions. */ 820 * and uses non-atomic copy and kmap functions. */
766static int 821static int
767shmem_pread_slow(struct page *page, int shmem_page_offset, int page_length, 822shmem_pread_slow(struct page *page, int offset, int length,
768 char __user *user_data, 823 char __user *user_data,
769 bool page_do_bit17_swizzling, bool needs_clflush) 824 bool page_do_bit17_swizzling, bool needs_clflush)
770{ 825{
@@ -773,60 +828,130 @@ shmem_pread_slow(struct page *page, int shmem_page_offset, int page_length,
773 828
774 vaddr = kmap(page); 829 vaddr = kmap(page);
775 if (needs_clflush) 830 if (needs_clflush)
776 shmem_clflush_swizzled_range(vaddr + shmem_page_offset, 831 shmem_clflush_swizzled_range(vaddr + offset, length,
777 page_length,
778 page_do_bit17_swizzling); 832 page_do_bit17_swizzling);
779 833
780 if (page_do_bit17_swizzling) 834 if (page_do_bit17_swizzling)
781 ret = __copy_to_user_swizzled(user_data, 835 ret = __copy_to_user_swizzled(user_data, vaddr, offset, length);
782 vaddr, shmem_page_offset,
783 page_length);
784 else 836 else
785 ret = __copy_to_user(user_data, 837 ret = __copy_to_user(user_data, vaddr + offset, length);
786 vaddr + shmem_page_offset,
787 page_length);
788 kunmap(page); 838 kunmap(page);
789 839
790 return ret ? - EFAULT : 0; 840 return ret ? - EFAULT : 0;
791} 841}
792 842
793static inline unsigned long 843static int
794slow_user_access(struct io_mapping *mapping, 844shmem_pread(struct page *page, int offset, int length, char __user *user_data,
795 uint64_t page_base, int page_offset, 845 bool page_do_bit17_swizzling, bool needs_clflush)
796 char __user *user_data, 846{
797 unsigned long length, bool pwrite) 847 int ret;
848
849 ret = -ENODEV;
850 if (!page_do_bit17_swizzling) {
851 char *vaddr = kmap_atomic(page);
852
853 if (needs_clflush)
854 drm_clflush_virt_range(vaddr + offset, length);
855 ret = __copy_to_user_inatomic(user_data, vaddr + offset, length);
856 kunmap_atomic(vaddr);
857 }
858 if (ret == 0)
859 return 0;
860
861 return shmem_pread_slow(page, offset, length, user_data,
862 page_do_bit17_swizzling, needs_clflush);
863}
864
865static int
866i915_gem_shmem_pread(struct drm_i915_gem_object *obj,
867 struct drm_i915_gem_pread *args)
868{
869 char __user *user_data;
870 u64 remain;
871 unsigned int obj_do_bit17_swizzling;
872 unsigned int needs_clflush;
873 unsigned int idx, offset;
874 int ret;
875
876 obj_do_bit17_swizzling = 0;
877 if (i915_gem_object_needs_bit17_swizzle(obj))
878 obj_do_bit17_swizzling = BIT(17);
879
880 ret = mutex_lock_interruptible(&obj->base.dev->struct_mutex);
881 if (ret)
882 return ret;
883
884 ret = i915_gem_obj_prepare_shmem_read(obj, &needs_clflush);
885 mutex_unlock(&obj->base.dev->struct_mutex);
886 if (ret)
887 return ret;
888
889 remain = args->size;
890 user_data = u64_to_user_ptr(args->data_ptr);
891 offset = offset_in_page(args->offset);
892 for (idx = args->offset >> PAGE_SHIFT; remain; idx++) {
893 struct page *page = i915_gem_object_get_page(obj, idx);
894 int length;
895
896 length = remain;
897 if (offset + length > PAGE_SIZE)
898 length = PAGE_SIZE - offset;
899
900 ret = shmem_pread(page, offset, length, user_data,
901 page_to_phys(page) & obj_do_bit17_swizzling,
902 needs_clflush);
903 if (ret)
904 break;
905
906 remain -= length;
907 user_data += length;
908 offset = 0;
909 }
910
911 i915_gem_obj_finish_shmem_access(obj);
912 return ret;
913}
914
915static inline bool
916gtt_user_read(struct io_mapping *mapping,
917 loff_t base, int offset,
918 char __user *user_data, int length)
798{ 919{
799 void __iomem *ioaddr;
800 void *vaddr; 920 void *vaddr;
801 uint64_t unwritten; 921 unsigned long unwritten;
802 922
803 ioaddr = io_mapping_map_wc(mapping, page_base, PAGE_SIZE);
804 /* We can use the cpu mem copy function because this is X86. */ 923 /* We can use the cpu mem copy function because this is X86. */
805 vaddr = (void __force *)ioaddr + page_offset; 924 vaddr = (void __force *)io_mapping_map_atomic_wc(mapping, base);
806 if (pwrite) 925 unwritten = __copy_to_user_inatomic(user_data, vaddr + offset, length);
807 unwritten = __copy_from_user(vaddr, user_data, length); 926 io_mapping_unmap_atomic(vaddr);
808 else 927 if (unwritten) {
809 unwritten = __copy_to_user(user_data, vaddr, length); 928 vaddr = (void __force *)
810 929 io_mapping_map_wc(mapping, base, PAGE_SIZE);
811 io_mapping_unmap(ioaddr); 930 unwritten = copy_to_user(user_data, vaddr + offset, length);
931 io_mapping_unmap(vaddr);
932 }
812 return unwritten; 933 return unwritten;
813} 934}
814 935
815static int 936static int
816i915_gem_gtt_pread(struct drm_device *dev, 937i915_gem_gtt_pread(struct drm_i915_gem_object *obj,
817 struct drm_i915_gem_object *obj, uint64_t size, 938 const struct drm_i915_gem_pread *args)
818 uint64_t data_offset, uint64_t data_ptr)
819{ 939{
820 struct drm_i915_private *dev_priv = to_i915(dev); 940 struct drm_i915_private *i915 = to_i915(obj->base.dev);
821 struct i915_ggtt *ggtt = &dev_priv->ggtt; 941 struct i915_ggtt *ggtt = &i915->ggtt;
822 struct i915_vma *vma;
823 struct drm_mm_node node; 942 struct drm_mm_node node;
824 char __user *user_data; 943 struct i915_vma *vma;
825 uint64_t remain; 944 void __user *user_data;
826 uint64_t offset; 945 u64 remain, offset;
827 int ret; 946 int ret;
828 947
829 vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0, PIN_MAPPABLE); 948 ret = mutex_lock_interruptible(&i915->drm.struct_mutex);
949 if (ret)
950 return ret;
951
952 intel_runtime_pm_get(i915);
953 vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0,
954 PIN_MAPPABLE | PIN_NONBLOCK);
830 if (!IS_ERR(vma)) { 955 if (!IS_ERR(vma)) {
831 node.start = i915_ggtt_offset(vma); 956 node.start = i915_ggtt_offset(vma);
832 node.allocated = false; 957 node.allocated = false;
@@ -837,35 +962,21 @@ i915_gem_gtt_pread(struct drm_device *dev,
837 } 962 }
838 } 963 }
839 if (IS_ERR(vma)) { 964 if (IS_ERR(vma)) {
840 ret = insert_mappable_node(dev_priv, &node, PAGE_SIZE); 965 ret = insert_mappable_node(ggtt, &node, PAGE_SIZE);
841 if (ret) 966 if (ret)
842 goto out; 967 goto out_unlock;
843 968 GEM_BUG_ON(!node.allocated);
844 ret = i915_gem_object_get_pages(obj);
845 if (ret) {
846 remove_mappable_node(&node);
847 goto out;
848 }
849
850 i915_gem_object_pin_pages(obj);
851 } 969 }
852 970
853 ret = i915_gem_object_set_to_gtt_domain(obj, false); 971 ret = i915_gem_object_set_to_gtt_domain(obj, false);
854 if (ret) 972 if (ret)
855 goto out_unpin; 973 goto out_unpin;
856 974
857 user_data = u64_to_user_ptr(data_ptr); 975 mutex_unlock(&i915->drm.struct_mutex);
858 remain = size;
859 offset = data_offset;
860 976
861 mutex_unlock(&dev->struct_mutex); 977 user_data = u64_to_user_ptr(args->data_ptr);
862 if (likely(!i915.prefault_disable)) { 978 remain = args->size;
863 ret = fault_in_pages_writeable(user_data, remain); 979 offset = args->offset;
864 if (ret) {
865 mutex_lock(&dev->struct_mutex);
866 goto out_unpin;
867 }
868 }
869 980
870 while (remain > 0) { 981 while (remain > 0) {
871 /* Operation in this page 982 /* Operation in this page
@@ -882,19 +993,14 @@ i915_gem_gtt_pread(struct drm_device *dev,
882 wmb(); 993 wmb();
883 ggtt->base.insert_page(&ggtt->base, 994 ggtt->base.insert_page(&ggtt->base,
884 i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT), 995 i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT),
885 node.start, 996 node.start, I915_CACHE_NONE, 0);
886 I915_CACHE_NONE, 0);
887 wmb(); 997 wmb();
888 } else { 998 } else {
889 page_base += offset & PAGE_MASK; 999 page_base += offset & PAGE_MASK;
890 } 1000 }
891 /* This is a slow read/write as it tries to read from 1001
892 * and write to user memory which may result into page 1002 if (gtt_user_read(&ggtt->mappable, page_base, page_offset,
893 * faults, and so we cannot perform this under struct_mutex. 1003 user_data, page_length)) {
894 */
895 if (slow_user_access(&ggtt->mappable, page_base,
896 page_offset, user_data,
897 page_length, false)) {
898 ret = -EFAULT; 1004 ret = -EFAULT;
899 break; 1005 break;
900 } 1006 }
@@ -904,110 +1010,19 @@ i915_gem_gtt_pread(struct drm_device *dev,
904 offset += page_length; 1010 offset += page_length;
905 } 1011 }
906 1012
907 mutex_lock(&dev->struct_mutex); 1013 mutex_lock(&i915->drm.struct_mutex);
908 if (ret == 0 && (obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0) {
909 /* The user has modified the object whilst we tried
910 * reading from it, and we now have no idea what domain
911 * the pages should be in. As we have just been touching
912 * them directly, flush everything back to the GTT
913 * domain.
914 */
915 ret = i915_gem_object_set_to_gtt_domain(obj, false);
916 }
917
918out_unpin: 1014out_unpin:
919 if (node.allocated) { 1015 if (node.allocated) {
920 wmb(); 1016 wmb();
921 ggtt->base.clear_range(&ggtt->base, 1017 ggtt->base.clear_range(&ggtt->base,
922 node.start, node.size); 1018 node.start, node.size);
923 i915_gem_object_unpin_pages(obj);
924 remove_mappable_node(&node); 1019 remove_mappable_node(&node);
925 } else { 1020 } else {
926 i915_vma_unpin(vma); 1021 i915_vma_unpin(vma);
927 } 1022 }
928out: 1023out_unlock:
929 return ret; 1024 intel_runtime_pm_put(i915);
930} 1025 mutex_unlock(&i915->drm.struct_mutex);
931
932static int
933i915_gem_shmem_pread(struct drm_device *dev,
934 struct drm_i915_gem_object *obj,
935 struct drm_i915_gem_pread *args,
936 struct drm_file *file)
937{
938 char __user *user_data;
939 ssize_t remain;
940 loff_t offset;
941 int shmem_page_offset, page_length, ret = 0;
942 int obj_do_bit17_swizzling, page_do_bit17_swizzling;
943 int prefaulted = 0;
944 int needs_clflush = 0;
945 struct sg_page_iter sg_iter;
946
947 ret = i915_gem_obj_prepare_shmem_read(obj, &needs_clflush);
948 if (ret)
949 return ret;
950
951 obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
952 user_data = u64_to_user_ptr(args->data_ptr);
953 offset = args->offset;
954 remain = args->size;
955
956 for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents,
957 offset >> PAGE_SHIFT) {
958 struct page *page = sg_page_iter_page(&sg_iter);
959
960 if (remain <= 0)
961 break;
962
963 /* Operation in this page
964 *
965 * shmem_page_offset = offset within page in shmem file
966 * page_length = bytes to copy for this page
967 */
968 shmem_page_offset = offset_in_page(offset);
969 page_length = remain;
970 if ((shmem_page_offset + page_length) > PAGE_SIZE)
971 page_length = PAGE_SIZE - shmem_page_offset;
972
973 page_do_bit17_swizzling = obj_do_bit17_swizzling &&
974 (page_to_phys(page) & (1 << 17)) != 0;
975
976 ret = shmem_pread_fast(page, shmem_page_offset, page_length,
977 user_data, page_do_bit17_swizzling,
978 needs_clflush);
979 if (ret == 0)
980 goto next_page;
981
982 mutex_unlock(&dev->struct_mutex);
983
984 if (likely(!i915.prefault_disable) && !prefaulted) {
985 ret = fault_in_pages_writeable(user_data, remain);
986 /* Userspace is tricking us, but we've already clobbered
987 * its pages with the prefault and promised to write the
988 * data up to the first fault. Hence ignore any errors
989 * and just continue. */
990 (void)ret;
991 prefaulted = 1;
992 }
993
994 ret = shmem_pread_slow(page, shmem_page_offset, page_length,
995 user_data, page_do_bit17_swizzling,
996 needs_clflush);
997
998 mutex_lock(&dev->struct_mutex);
999
1000 if (ret)
1001 goto out;
1002
1003next_page:
1004 remain -= page_length;
1005 user_data += page_length;
1006 offset += page_length;
1007 }
1008
1009out:
1010 i915_gem_obj_finish_shmem_access(obj);
1011 1026
1012 return ret; 1027 return ret;
1013} 1028}
@@ -1026,7 +1041,7 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
1026{ 1041{
1027 struct drm_i915_gem_pread *args = data; 1042 struct drm_i915_gem_pread *args = data;
1028 struct drm_i915_gem_object *obj; 1043 struct drm_i915_gem_object *obj;
1029 int ret = 0; 1044 int ret;
1030 1045
1031 if (args->size == 0) 1046 if (args->size == 0)
1032 return 0; 1047 return 0;
@@ -1044,36 +1059,29 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
1044 if (args->offset > obj->base.size || 1059 if (args->offset > obj->base.size ||
1045 args->size > obj->base.size - args->offset) { 1060 args->size > obj->base.size - args->offset) {
1046 ret = -EINVAL; 1061 ret = -EINVAL;
1047 goto err; 1062 goto out;
1048 } 1063 }
1049 1064
1050 trace_i915_gem_object_pread(obj, args->offset, args->size); 1065 trace_i915_gem_object_pread(obj, args->offset, args->size);
1051 1066
1052 ret = __unsafe_wait_rendering(obj, to_rps_client(file), true); 1067 ret = i915_gem_object_wait(obj,
1068 I915_WAIT_INTERRUPTIBLE,
1069 MAX_SCHEDULE_TIMEOUT,
1070 to_rps_client(file));
1053 if (ret) 1071 if (ret)
1054 goto err; 1072 goto out;
1055 1073
1056 ret = i915_mutex_lock_interruptible(dev); 1074 ret = i915_gem_object_pin_pages(obj);
1057 if (ret) 1075 if (ret)
1058 goto err; 1076 goto out;
1059 1077
1060 ret = i915_gem_shmem_pread(dev, obj, args, file); 1078 ret = i915_gem_shmem_pread(obj, args);
1061 1079 if (ret == -EFAULT || ret == -ENODEV)
1062 /* pread for non shmem backed objects */ 1080 ret = i915_gem_gtt_pread(obj, args);
1063 if (ret == -EFAULT || ret == -ENODEV) {
1064 intel_runtime_pm_get(to_i915(dev));
1065 ret = i915_gem_gtt_pread(dev, obj, args->size,
1066 args->offset, args->data_ptr);
1067 intel_runtime_pm_put(to_i915(dev));
1068 }
1069 1081
1082 i915_gem_object_unpin_pages(obj);
1083out:
1070 i915_gem_object_put(obj); 1084 i915_gem_object_put(obj);
1071 mutex_unlock(&dev->struct_mutex);
1072
1073 return ret;
1074
1075err:
1076 i915_gem_object_put_unlocked(obj);
1077 return ret; 1085 return ret;
1078} 1086}
1079 1087
@@ -1081,51 +1089,52 @@ err:
1081 * page faults in the source data 1089 * page faults in the source data
1082 */ 1090 */
1083 1091
1084static inline int 1092static inline bool
1085fast_user_write(struct io_mapping *mapping, 1093ggtt_write(struct io_mapping *mapping,
1086 loff_t page_base, int page_offset, 1094 loff_t base, int offset,
1087 char __user *user_data, 1095 char __user *user_data, int length)
1088 int length)
1089{ 1096{
1090 void __iomem *vaddr_atomic;
1091 void *vaddr; 1097 void *vaddr;
1092 unsigned long unwritten; 1098 unsigned long unwritten;
1093 1099
1094 vaddr_atomic = io_mapping_map_atomic_wc(mapping, page_base);
1095 /* We can use the cpu mem copy function because this is X86. */ 1100 /* We can use the cpu mem copy function because this is X86. */
1096 vaddr = (void __force*)vaddr_atomic + page_offset; 1101 vaddr = (void __force *)io_mapping_map_atomic_wc(mapping, base);
1097 unwritten = __copy_from_user_inatomic_nocache(vaddr, 1102 unwritten = __copy_from_user_inatomic_nocache(vaddr + offset,
1098 user_data, length); 1103 user_data, length);
1099 io_mapping_unmap_atomic(vaddr_atomic); 1104 io_mapping_unmap_atomic(vaddr);
1105 if (unwritten) {
1106 vaddr = (void __force *)
1107 io_mapping_map_wc(mapping, base, PAGE_SIZE);
1108 unwritten = copy_from_user(vaddr + offset, user_data, length);
1109 io_mapping_unmap(vaddr);
1110 }
1111
1100 return unwritten; 1112 return unwritten;
1101} 1113}
1102 1114
1103/** 1115/**
1104 * This is the fast pwrite path, where we copy the data directly from the 1116 * This is the fast pwrite path, where we copy the data directly from the
1105 * user into the GTT, uncached. 1117 * user into the GTT, uncached.
1106 * @i915: i915 device private data 1118 * @obj: i915 GEM object
1107 * @obj: i915 gem object
1108 * @args: pwrite arguments structure 1119 * @args: pwrite arguments structure
1109 * @file: drm file pointer
1110 */ 1120 */
1111static int 1121static int
1112i915_gem_gtt_pwrite_fast(struct drm_i915_private *i915, 1122i915_gem_gtt_pwrite_fast(struct drm_i915_gem_object *obj,
1113 struct drm_i915_gem_object *obj, 1123 const struct drm_i915_gem_pwrite *args)
1114 struct drm_i915_gem_pwrite *args,
1115 struct drm_file *file)
1116{ 1124{
1125 struct drm_i915_private *i915 = to_i915(obj->base.dev);
1117 struct i915_ggtt *ggtt = &i915->ggtt; 1126 struct i915_ggtt *ggtt = &i915->ggtt;
1118 struct drm_device *dev = obj->base.dev;
1119 struct i915_vma *vma;
1120 struct drm_mm_node node; 1127 struct drm_mm_node node;
1121 uint64_t remain, offset; 1128 struct i915_vma *vma;
1122 char __user *user_data; 1129 u64 remain, offset;
1130 void __user *user_data;
1123 int ret; 1131 int ret;
1124 bool hit_slow_path = false;
1125 1132
1126 if (i915_gem_object_is_tiled(obj)) 1133 ret = mutex_lock_interruptible(&i915->drm.struct_mutex);
1127 return -EFAULT; 1134 if (ret)
1135 return ret;
1128 1136
1137 intel_runtime_pm_get(i915);
1129 vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0, 1138 vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0,
1130 PIN_MAPPABLE | PIN_NONBLOCK); 1139 PIN_MAPPABLE | PIN_NONBLOCK);
1131 if (!IS_ERR(vma)) { 1140 if (!IS_ERR(vma)) {
@@ -1138,25 +1147,19 @@ i915_gem_gtt_pwrite_fast(struct drm_i915_private *i915,
1138 } 1147 }
1139 } 1148 }
1140 if (IS_ERR(vma)) { 1149 if (IS_ERR(vma)) {
1141 ret = insert_mappable_node(i915, &node, PAGE_SIZE); 1150 ret = insert_mappable_node(ggtt, &node, PAGE_SIZE);
1142 if (ret) 1151 if (ret)
1143 goto out; 1152 goto out_unlock;
1144 1153 GEM_BUG_ON(!node.allocated);
1145 ret = i915_gem_object_get_pages(obj);
1146 if (ret) {
1147 remove_mappable_node(&node);
1148 goto out;
1149 }
1150
1151 i915_gem_object_pin_pages(obj);
1152 } 1154 }
1153 1155
1154 ret = i915_gem_object_set_to_gtt_domain(obj, true); 1156 ret = i915_gem_object_set_to_gtt_domain(obj, true);
1155 if (ret) 1157 if (ret)
1156 goto out_unpin; 1158 goto out_unpin;
1157 1159
1160 mutex_unlock(&i915->drm.struct_mutex);
1161
1158 intel_fb_obj_invalidate(obj, ORIGIN_CPU); 1162 intel_fb_obj_invalidate(obj, ORIGIN_CPU);
1159 obj->dirty = true;
1160 1163
1161 user_data = u64_to_user_ptr(args->data_ptr); 1164 user_data = u64_to_user_ptr(args->data_ptr);
1162 offset = args->offset; 1165 offset = args->offset;
@@ -1169,8 +1172,8 @@ i915_gem_gtt_pwrite_fast(struct drm_i915_private *i915,
1169 * page_length = bytes to copy for this page 1172 * page_length = bytes to copy for this page
1170 */ 1173 */
1171 u32 page_base = node.start; 1174 u32 page_base = node.start;
1172 unsigned page_offset = offset_in_page(offset); 1175 unsigned int page_offset = offset_in_page(offset);
1173 unsigned page_length = PAGE_SIZE - page_offset; 1176 unsigned int page_length = PAGE_SIZE - page_offset;
1174 page_length = remain < page_length ? remain : page_length; 1177 page_length = remain < page_length ? remain : page_length;
1175 if (node.allocated) { 1178 if (node.allocated) {
1176 wmb(); /* flush the write before we modify the GGTT */ 1179 wmb(); /* flush the write before we modify the GGTT */
@@ -1187,91 +1190,36 @@ i915_gem_gtt_pwrite_fast(struct drm_i915_private *i915,
1187 * If the object is non-shmem backed, we retry again with the 1190 * If the object is non-shmem backed, we retry again with the
1188 * path that handles page fault. 1191 * path that handles page fault.
1189 */ 1192 */
1190 if (fast_user_write(&ggtt->mappable, page_base, 1193 if (ggtt_write(&ggtt->mappable, page_base, page_offset,
1191 page_offset, user_data, page_length)) { 1194 user_data, page_length)) {
1192 hit_slow_path = true; 1195 ret = -EFAULT;
1193 mutex_unlock(&dev->struct_mutex); 1196 break;
1194 if (slow_user_access(&ggtt->mappable,
1195 page_base,
1196 page_offset, user_data,
1197 page_length, true)) {
1198 ret = -EFAULT;
1199 mutex_lock(&dev->struct_mutex);
1200 goto out_flush;
1201 }
1202
1203 mutex_lock(&dev->struct_mutex);
1204 } 1197 }
1205 1198
1206 remain -= page_length; 1199 remain -= page_length;
1207 user_data += page_length; 1200 user_data += page_length;
1208 offset += page_length; 1201 offset += page_length;
1209 } 1202 }
1210
1211out_flush:
1212 if (hit_slow_path) {
1213 if (ret == 0 &&
1214 (obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0) {
1215 /* The user has modified the object whilst we tried
1216 * reading from it, and we now have no idea what domain
1217 * the pages should be in. As we have just been touching
1218 * them directly, flush everything back to the GTT
1219 * domain.
1220 */
1221 ret = i915_gem_object_set_to_gtt_domain(obj, false);
1222 }
1223 }
1224
1225 intel_fb_obj_flush(obj, false, ORIGIN_CPU); 1203 intel_fb_obj_flush(obj, false, ORIGIN_CPU);
1204
1205 mutex_lock(&i915->drm.struct_mutex);
1226out_unpin: 1206out_unpin:
1227 if (node.allocated) { 1207 if (node.allocated) {
1228 wmb(); 1208 wmb();
1229 ggtt->base.clear_range(&ggtt->base, 1209 ggtt->base.clear_range(&ggtt->base,
1230 node.start, node.size); 1210 node.start, node.size);
1231 i915_gem_object_unpin_pages(obj);
1232 remove_mappable_node(&node); 1211 remove_mappable_node(&node);
1233 } else { 1212 } else {
1234 i915_vma_unpin(vma); 1213 i915_vma_unpin(vma);
1235 } 1214 }
1236out: 1215out_unlock:
1216 intel_runtime_pm_put(i915);
1217 mutex_unlock(&i915->drm.struct_mutex);
1237 return ret; 1218 return ret;
1238} 1219}
1239 1220
1240/* Per-page copy function for the shmem pwrite fastpath.
1241 * Flushes invalid cachelines before writing to the target if
1242 * needs_clflush_before is set and flushes out any written cachelines after
1243 * writing if needs_clflush is set. */
1244static int 1221static int
1245shmem_pwrite_fast(struct page *page, int shmem_page_offset, int page_length, 1222shmem_pwrite_slow(struct page *page, int offset, int length,
1246 char __user *user_data,
1247 bool page_do_bit17_swizzling,
1248 bool needs_clflush_before,
1249 bool needs_clflush_after)
1250{
1251 char *vaddr;
1252 int ret;
1253
1254 if (unlikely(page_do_bit17_swizzling))
1255 return -EINVAL;
1256
1257 vaddr = kmap_atomic(page);
1258 if (needs_clflush_before)
1259 drm_clflush_virt_range(vaddr + shmem_page_offset,
1260 page_length);
1261 ret = __copy_from_user_inatomic(vaddr + shmem_page_offset,
1262 user_data, page_length);
1263 if (needs_clflush_after)
1264 drm_clflush_virt_range(vaddr + shmem_page_offset,
1265 page_length);
1266 kunmap_atomic(vaddr);
1267
1268 return ret ? -EFAULT : 0;
1269}
1270
1271/* Only difference to the fast-path function is that this can handle bit17
1272 * and uses non-atomic copy and kmap functions. */
1273static int
1274shmem_pwrite_slow(struct page *page, int shmem_page_offset, int page_length,
1275 char __user *user_data, 1223 char __user *user_data,
1276 bool page_do_bit17_swizzling, 1224 bool page_do_bit17_swizzling,
1277 bool needs_clflush_before, 1225 bool needs_clflush_before,
@@ -1282,124 +1230,114 @@ shmem_pwrite_slow(struct page *page, int shmem_page_offset, int page_length,
1282 1230
1283 vaddr = kmap(page); 1231 vaddr = kmap(page);
1284 if (unlikely(needs_clflush_before || page_do_bit17_swizzling)) 1232 if (unlikely(needs_clflush_before || page_do_bit17_swizzling))
1285 shmem_clflush_swizzled_range(vaddr + shmem_page_offset, 1233 shmem_clflush_swizzled_range(vaddr + offset, length,
1286 page_length,
1287 page_do_bit17_swizzling); 1234 page_do_bit17_swizzling);
1288 if (page_do_bit17_swizzling) 1235 if (page_do_bit17_swizzling)
1289 ret = __copy_from_user_swizzled(vaddr, shmem_page_offset, 1236 ret = __copy_from_user_swizzled(vaddr, offset, user_data,
1290 user_data, 1237 length);
1291 page_length);
1292 else 1238 else
1293 ret = __copy_from_user(vaddr + shmem_page_offset, 1239 ret = __copy_from_user(vaddr + offset, user_data, length);
1294 user_data,
1295 page_length);
1296 if (needs_clflush_after) 1240 if (needs_clflush_after)
1297 shmem_clflush_swizzled_range(vaddr + shmem_page_offset, 1241 shmem_clflush_swizzled_range(vaddr + offset, length,
1298 page_length,
1299 page_do_bit17_swizzling); 1242 page_do_bit17_swizzling);
1300 kunmap(page); 1243 kunmap(page);
1301 1244
1302 return ret ? -EFAULT : 0; 1245 return ret ? -EFAULT : 0;
1303} 1246}
1304 1247
1248/* Per-page copy function for the shmem pwrite fastpath.
1249 * Flushes invalid cachelines before writing to the target if
1250 * needs_clflush_before is set and flushes out any written cachelines after
1251 * writing if needs_clflush is set.
1252 */
1305static int 1253static int
1306i915_gem_shmem_pwrite(struct drm_device *dev, 1254shmem_pwrite(struct page *page, int offset, int len, char __user *user_data,
1307 struct drm_i915_gem_object *obj, 1255 bool page_do_bit17_swizzling,
1308 struct drm_i915_gem_pwrite *args, 1256 bool needs_clflush_before,
1309 struct drm_file *file) 1257 bool needs_clflush_after)
1310{ 1258{
1311 ssize_t remain; 1259 int ret;
1312 loff_t offset;
1313 char __user *user_data;
1314 int shmem_page_offset, page_length, ret = 0;
1315 int obj_do_bit17_swizzling, page_do_bit17_swizzling;
1316 int hit_slowpath = 0;
1317 unsigned int needs_clflush;
1318 struct sg_page_iter sg_iter;
1319 1260
1320 ret = i915_gem_obj_prepare_shmem_write(obj, &needs_clflush); 1261 ret = -ENODEV;
1321 if (ret) 1262 if (!page_do_bit17_swizzling) {
1322 return ret; 1263 char *vaddr = kmap_atomic(page);
1323 1264
1324 obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj); 1265 if (needs_clflush_before)
1325 user_data = u64_to_user_ptr(args->data_ptr); 1266 drm_clflush_virt_range(vaddr + offset, len);
1326 offset = args->offset; 1267 ret = __copy_from_user_inatomic(vaddr + offset, user_data, len);
1327 remain = args->size; 1268 if (needs_clflush_after)
1269 drm_clflush_virt_range(vaddr + offset, len);
1328 1270
1329 for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 1271 kunmap_atomic(vaddr);
1330 offset >> PAGE_SHIFT) { 1272 }
1331 struct page *page = sg_page_iter_page(&sg_iter); 1273 if (ret == 0)
1332 int partial_cacheline_write; 1274 return ret;
1333 1275
1334 if (remain <= 0) 1276 return shmem_pwrite_slow(page, offset, len, user_data,
1335 break; 1277 page_do_bit17_swizzling,
1278 needs_clflush_before,
1279 needs_clflush_after);
1280}
1336 1281
1337 /* Operation in this page 1282static int
1338 * 1283i915_gem_shmem_pwrite(struct drm_i915_gem_object *obj,
1339 * shmem_page_offset = offset within page in shmem file 1284 const struct drm_i915_gem_pwrite *args)
1340 * page_length = bytes to copy for this page 1285{
1341 */ 1286 struct drm_i915_private *i915 = to_i915(obj->base.dev);
1342 shmem_page_offset = offset_in_page(offset); 1287 void __user *user_data;
1343 1288 u64 remain;
1344 page_length = remain; 1289 unsigned int obj_do_bit17_swizzling;
1345 if ((shmem_page_offset + page_length) > PAGE_SIZE) 1290 unsigned int partial_cacheline_write;
1346 page_length = PAGE_SIZE - shmem_page_offset; 1291 unsigned int needs_clflush;
1347 1292 unsigned int offset, idx;
1348 /* If we don't overwrite a cacheline completely we need to be 1293 int ret;
1349 * careful to have up-to-date data by first clflushing. Don't
1350 * overcomplicate things and flush the entire patch. */
1351 partial_cacheline_write = needs_clflush & CLFLUSH_BEFORE &&
1352 ((shmem_page_offset | page_length)
1353 & (boot_cpu_data.x86_clflush_size - 1));
1354
1355 page_do_bit17_swizzling = obj_do_bit17_swizzling &&
1356 (page_to_phys(page) & (1 << 17)) != 0;
1357
1358 ret = shmem_pwrite_fast(page, shmem_page_offset, page_length,
1359 user_data, page_do_bit17_swizzling,
1360 partial_cacheline_write,
1361 needs_clflush & CLFLUSH_AFTER);
1362 if (ret == 0)
1363 goto next_page;
1364
1365 hit_slowpath = 1;
1366 mutex_unlock(&dev->struct_mutex);
1367 ret = shmem_pwrite_slow(page, shmem_page_offset, page_length,
1368 user_data, page_do_bit17_swizzling,
1369 partial_cacheline_write,
1370 needs_clflush & CLFLUSH_AFTER);
1371 1294
1372 mutex_lock(&dev->struct_mutex); 1295 ret = mutex_lock_interruptible(&i915->drm.struct_mutex);
1296 if (ret)
1297 return ret;
1373 1298
1374 if (ret) 1299 ret = i915_gem_obj_prepare_shmem_write(obj, &needs_clflush);
1375 goto out; 1300 mutex_unlock(&i915->drm.struct_mutex);
1301 if (ret)
1302 return ret;
1376 1303
1377next_page: 1304 obj_do_bit17_swizzling = 0;
1378 remain -= page_length; 1305 if (i915_gem_object_needs_bit17_swizzle(obj))
1379 user_data += page_length; 1306 obj_do_bit17_swizzling = BIT(17);
1380 offset += page_length;
1381 }
1382 1307
1383out: 1308 /* If we don't overwrite a cacheline completely we need to be
1384 i915_gem_obj_finish_shmem_access(obj); 1309 * careful to have up-to-date data by first clflushing. Don't
1310 * overcomplicate things and flush the entire patch.
1311 */
1312 partial_cacheline_write = 0;
1313 if (needs_clflush & CLFLUSH_BEFORE)
1314 partial_cacheline_write = boot_cpu_data.x86_clflush_size - 1;
1385 1315
1386 if (hit_slowpath) { 1316 user_data = u64_to_user_ptr(args->data_ptr);
1387 /* 1317 remain = args->size;
1388 * Fixup: Flush cpu caches in case we didn't flush the dirty 1318 offset = offset_in_page(args->offset);
1389 * cachelines in-line while writing and the object moved 1319 for (idx = args->offset >> PAGE_SHIFT; remain; idx++) {
1390 * out of the cpu write domain while we've dropped the lock. 1320 struct page *page = i915_gem_object_get_page(obj, idx);
1391 */ 1321 int length;
1392 if (!(needs_clflush & CLFLUSH_AFTER) && 1322
1393 obj->base.write_domain != I915_GEM_DOMAIN_CPU) { 1323 length = remain;
1394 if (i915_gem_clflush_object(obj, obj->pin_display)) 1324 if (offset + length > PAGE_SIZE)
1395 needs_clflush |= CLFLUSH_AFTER; 1325 length = PAGE_SIZE - offset;
1396 } 1326
1397 } 1327 ret = shmem_pwrite(page, offset, length, user_data,
1328 page_to_phys(page) & obj_do_bit17_swizzling,
1329 (offset | length) & partial_cacheline_write,
1330 needs_clflush & CLFLUSH_AFTER);
1331 if (ret)
1332 break;
1398 1333
1399 if (needs_clflush & CLFLUSH_AFTER) 1334 remain -= length;
1400 i915_gem_chipset_flush(to_i915(dev)); 1335 user_data += length;
1336 offset = 0;
1337 }
1401 1338
1402 intel_fb_obj_flush(obj, false, ORIGIN_CPU); 1339 intel_fb_obj_flush(obj, false, ORIGIN_CPU);
1340 i915_gem_obj_finish_shmem_access(obj);
1403 return ret; 1341 return ret;
1404} 1342}
1405 1343
@@ -1415,7 +1353,6 @@ int
1415i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, 1353i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
1416 struct drm_file *file) 1354 struct drm_file *file)
1417{ 1355{
1418 struct drm_i915_private *dev_priv = to_i915(dev);
1419 struct drm_i915_gem_pwrite *args = data; 1356 struct drm_i915_gem_pwrite *args = data;
1420 struct drm_i915_gem_object *obj; 1357 struct drm_i915_gem_object *obj;
1421 int ret; 1358 int ret;
@@ -1428,13 +1365,6 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
1428 args->size)) 1365 args->size))
1429 return -EFAULT; 1366 return -EFAULT;
1430 1367
1431 if (likely(!i915.prefault_disable)) {
1432 ret = fault_in_pages_readable(u64_to_user_ptr(args->data_ptr),
1433 args->size);
1434 if (ret)
1435 return -EFAULT;
1436 }
1437
1438 obj = i915_gem_object_lookup(file, args->handle); 1368 obj = i915_gem_object_lookup(file, args->handle);
1439 if (!obj) 1369 if (!obj)
1440 return -ENOENT; 1370 return -ENOENT;
@@ -1448,15 +1378,17 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
1448 1378
1449 trace_i915_gem_object_pwrite(obj, args->offset, args->size); 1379 trace_i915_gem_object_pwrite(obj, args->offset, args->size);
1450 1380
1451 ret = __unsafe_wait_rendering(obj, to_rps_client(file), false); 1381 ret = i915_gem_object_wait(obj,
1382 I915_WAIT_INTERRUPTIBLE |
1383 I915_WAIT_ALL,
1384 MAX_SCHEDULE_TIMEOUT,
1385 to_rps_client(file));
1452 if (ret) 1386 if (ret)
1453 goto err; 1387 goto err;
1454 1388
1455 intel_runtime_pm_get(dev_priv); 1389 ret = i915_gem_object_pin_pages(obj);
1456
1457 ret = i915_mutex_lock_interruptible(dev);
1458 if (ret) 1390 if (ret)
1459 goto err_rpm; 1391 goto err;
1460 1392
1461 ret = -EFAULT; 1393 ret = -EFAULT;
1462 /* We can only do the GTT pwrite on untiled buffers, as otherwise 1394 /* We can only do the GTT pwrite on untiled buffers, as otherwise
@@ -1466,30 +1398,23 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
1466 * perspective, requiring manual detiling by the client. 1398 * perspective, requiring manual detiling by the client.
1467 */ 1399 */
1468 if (!i915_gem_object_has_struct_page(obj) || 1400 if (!i915_gem_object_has_struct_page(obj) ||
1469 cpu_write_needs_clflush(obj)) { 1401 cpu_write_needs_clflush(obj))
1470 ret = i915_gem_gtt_pwrite_fast(dev_priv, obj, args, file);
1471 /* Note that the gtt paths might fail with non-page-backed user 1402 /* Note that the gtt paths might fail with non-page-backed user
1472 * pointers (e.g. gtt mappings when moving data between 1403 * pointers (e.g. gtt mappings when moving data between
1473 * textures). Fallback to the shmem path in that case. */ 1404 * textures). Fallback to the shmem path in that case.
1474 } 1405 */
1406 ret = i915_gem_gtt_pwrite_fast(obj, args);
1475 1407
1476 if (ret == -EFAULT || ret == -ENOSPC) { 1408 if (ret == -EFAULT || ret == -ENOSPC) {
1477 if (obj->phys_handle) 1409 if (obj->phys_handle)
1478 ret = i915_gem_phys_pwrite(obj, args, file); 1410 ret = i915_gem_phys_pwrite(obj, args, file);
1479 else 1411 else
1480 ret = i915_gem_shmem_pwrite(dev, obj, args, file); 1412 ret = i915_gem_shmem_pwrite(obj, args);
1481 } 1413 }
1482 1414
1483 i915_gem_object_put(obj); 1415 i915_gem_object_unpin_pages(obj);
1484 mutex_unlock(&dev->struct_mutex);
1485 intel_runtime_pm_put(dev_priv);
1486
1487 return ret;
1488
1489err_rpm:
1490 intel_runtime_pm_put(dev_priv);
1491err: 1416err:
1492 i915_gem_object_put_unlocked(obj); 1417 i915_gem_object_put(obj);
1493 return ret; 1418 return ret;
1494} 1419}
1495 1420
@@ -1500,6 +1425,30 @@ write_origin(struct drm_i915_gem_object *obj, unsigned domain)
1500 obj->frontbuffer_ggtt_origin : ORIGIN_CPU); 1425 obj->frontbuffer_ggtt_origin : ORIGIN_CPU);
1501} 1426}
1502 1427
1428static void i915_gem_object_bump_inactive_ggtt(struct drm_i915_gem_object *obj)
1429{
1430 struct drm_i915_private *i915;
1431 struct list_head *list;
1432 struct i915_vma *vma;
1433
1434 list_for_each_entry(vma, &obj->vma_list, obj_link) {
1435 if (!i915_vma_is_ggtt(vma))
1436 continue;
1437
1438 if (i915_vma_is_active(vma))
1439 continue;
1440
1441 if (!drm_mm_node_allocated(&vma->node))
1442 continue;
1443
1444 list_move_tail(&vma->vm_link, &vma->vm->inactive_list);
1445 }
1446
1447 i915 = to_i915(obj->base.dev);
1448 list = obj->bind_count ? &i915->mm.bound_list : &i915->mm.unbound_list;
1449 list_move_tail(&obj->global_link, list);
1450}
1451
1503/** 1452/**
1504 * Called when user space prepares to use an object with the CPU, either 1453 * Called when user space prepares to use an object with the CPU, either
1505 * through the mmap ioctl's mapping or a GTT mapping. 1454 * through the mmap ioctl's mapping or a GTT mapping.
@@ -1515,7 +1464,7 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
1515 struct drm_i915_gem_object *obj; 1464 struct drm_i915_gem_object *obj;
1516 uint32_t read_domains = args->read_domains; 1465 uint32_t read_domains = args->read_domains;
1517 uint32_t write_domain = args->write_domain; 1466 uint32_t write_domain = args->write_domain;
1518 int ret; 1467 int err;
1519 1468
1520 /* Only handle setting domains to types used by the CPU. */ 1469 /* Only handle setting domains to types used by the CPU. */
1521 if ((write_domain | read_domains) & I915_GEM_GPU_DOMAINS) 1470 if ((write_domain | read_domains) & I915_GEM_GPU_DOMAINS)
@@ -1535,29 +1484,48 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
1535 * We will repeat the flush holding the lock in the normal manner 1484 * We will repeat the flush holding the lock in the normal manner
1536 * to catch cases where we are gazumped. 1485 * to catch cases where we are gazumped.
1537 */ 1486 */
1538 ret = __unsafe_wait_rendering(obj, to_rps_client(file), !write_domain); 1487 err = i915_gem_object_wait(obj,
1539 if (ret) 1488 I915_WAIT_INTERRUPTIBLE |
1540 goto err; 1489 (write_domain ? I915_WAIT_ALL : 0),
1490 MAX_SCHEDULE_TIMEOUT,
1491 to_rps_client(file));
1492 if (err)
1493 goto out;
1541 1494
1542 ret = i915_mutex_lock_interruptible(dev); 1495 /* Flush and acquire obj->pages so that we are coherent through
1543 if (ret) 1496 * direct access in memory with previous cached writes through
1544 goto err; 1497 * shmemfs and that our cache domain tracking remains valid.
1498 * For example, if the obj->filp was moved to swap without us
1499 * being notified and releasing the pages, we would mistakenly
1500 * continue to assume that the obj remained out of the CPU cached
1501 * domain.
1502 */
1503 err = i915_gem_object_pin_pages(obj);
1504 if (err)
1505 goto out;
1506
1507 err = i915_mutex_lock_interruptible(dev);
1508 if (err)
1509 goto out_unpin;
1545 1510
1546 if (read_domains & I915_GEM_DOMAIN_GTT) 1511 if (read_domains & I915_GEM_DOMAIN_GTT)
1547 ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0); 1512 err = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0);
1548 else 1513 else
1549 ret = i915_gem_object_set_to_cpu_domain(obj, write_domain != 0); 1514 err = i915_gem_object_set_to_cpu_domain(obj, write_domain != 0);
1515
1516 /* And bump the LRU for this access */
1517 i915_gem_object_bump_inactive_ggtt(obj);
1518
1519 mutex_unlock(&dev->struct_mutex);
1550 1520
1551 if (write_domain != 0) 1521 if (write_domain != 0)
1552 intel_fb_obj_invalidate(obj, write_origin(obj, write_domain)); 1522 intel_fb_obj_invalidate(obj, write_origin(obj, write_domain));
1553 1523
1524out_unpin:
1525 i915_gem_object_unpin_pages(obj);
1526out:
1554 i915_gem_object_put(obj); 1527 i915_gem_object_put(obj);
1555 mutex_unlock(&dev->struct_mutex); 1528 return err;
1556 return ret;
1557
1558err:
1559 i915_gem_object_put_unlocked(obj);
1560 return ret;
1561} 1529}
1562 1530
1563/** 1531/**
@@ -1587,7 +1555,7 @@ i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
1587 } 1555 }
1588 } 1556 }
1589 1557
1590 i915_gem_object_put_unlocked(obj); 1558 i915_gem_object_put(obj);
1591 return err; 1559 return err;
1592} 1560}
1593 1561
@@ -1633,7 +1601,7 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
1633 * pages from. 1601 * pages from.
1634 */ 1602 */
1635 if (!obj->base.filp) { 1603 if (!obj->base.filp) {
1636 i915_gem_object_put_unlocked(obj); 1604 i915_gem_object_put(obj);
1637 return -EINVAL; 1605 return -EINVAL;
1638 } 1606 }
1639 1607
@@ -1645,7 +1613,7 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
1645 struct vm_area_struct *vma; 1613 struct vm_area_struct *vma;
1646 1614
1647 if (down_write_killable(&mm->mmap_sem)) { 1615 if (down_write_killable(&mm->mmap_sem)) {
1648 i915_gem_object_put_unlocked(obj); 1616 i915_gem_object_put(obj);
1649 return -EINTR; 1617 return -EINTR;
1650 } 1618 }
1651 vma = find_vma(mm, addr); 1619 vma = find_vma(mm, addr);
@@ -1659,7 +1627,7 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
1659 /* This may race, but that's ok, it only gets set */ 1627 /* This may race, but that's ok, it only gets set */
1660 WRITE_ONCE(obj->frontbuffer_ggtt_origin, ORIGIN_CPU); 1628 WRITE_ONCE(obj->frontbuffer_ggtt_origin, ORIGIN_CPU);
1661 } 1629 }
1662 i915_gem_object_put_unlocked(obj); 1630 i915_gem_object_put(obj);
1663 if (IS_ERR((void *)addr)) 1631 if (IS_ERR((void *)addr))
1664 return addr; 1632 return addr;
1665 1633
@@ -1771,7 +1739,14 @@ int i915_gem_fault(struct vm_area_struct *area, struct vm_fault *vmf)
1771 * repeat the flush holding the lock in the normal manner to catch cases 1739 * repeat the flush holding the lock in the normal manner to catch cases
1772 * where we are gazumped. 1740 * where we are gazumped.
1773 */ 1741 */
1774 ret = __unsafe_wait_rendering(obj, NULL, !write); 1742 ret = i915_gem_object_wait(obj,
1743 I915_WAIT_INTERRUPTIBLE,
1744 MAX_SCHEDULE_TIMEOUT,
1745 NULL);
1746 if (ret)
1747 goto err;
1748
1749 ret = i915_gem_object_pin_pages(obj);
1775 if (ret) 1750 if (ret)
1776 goto err; 1751 goto err;
1777 1752
@@ -1804,7 +1779,7 @@ int i915_gem_fault(struct vm_area_struct *area, struct vm_fault *vmf)
1804 /* Use a partial view if it is bigger than available space */ 1779 /* Use a partial view if it is bigger than available space */
1805 chunk_size = MIN_CHUNK_PAGES; 1780 chunk_size = MIN_CHUNK_PAGES;
1806 if (i915_gem_object_is_tiled(obj)) 1781 if (i915_gem_object_is_tiled(obj))
1807 chunk_size = max(chunk_size, tile_row_pages(obj)); 1782 chunk_size = roundup(chunk_size, tile_row_pages(obj));
1808 1783
1809 memset(&view, 0, sizeof(view)); 1784 memset(&view, 0, sizeof(view));
1810 view.type = I915_GGTT_VIEW_PARTIAL; 1785 view.type = I915_GGTT_VIEW_PARTIAL;
@@ -1839,22 +1814,25 @@ int i915_gem_fault(struct vm_area_struct *area, struct vm_fault *vmf)
1839 if (ret) 1814 if (ret)
1840 goto err_unpin; 1815 goto err_unpin;
1841 1816
1817 /* Mark as being mmapped into userspace for later revocation */
1818 assert_rpm_wakelock_held(dev_priv);
1819 if (list_empty(&obj->userfault_link))
1820 list_add(&obj->userfault_link, &dev_priv->mm.userfault_list);
1821
1842 /* Finally, remap it using the new GTT offset */ 1822 /* Finally, remap it using the new GTT offset */
1843 ret = remap_io_mapping(area, 1823 ret = remap_io_mapping(area,
1844 area->vm_start + (vma->ggtt_view.params.partial.offset << PAGE_SHIFT), 1824 area->vm_start + (vma->ggtt_view.params.partial.offset << PAGE_SHIFT),
1845 (ggtt->mappable_base + vma->node.start) >> PAGE_SHIFT, 1825 (ggtt->mappable_base + vma->node.start) >> PAGE_SHIFT,
1846 min_t(u64, vma->size, area->vm_end - area->vm_start), 1826 min_t(u64, vma->size, area->vm_end - area->vm_start),
1847 &ggtt->mappable); 1827 &ggtt->mappable);
1848 if (ret)
1849 goto err_unpin;
1850 1828
1851 obj->fault_mappable = true;
1852err_unpin: 1829err_unpin:
1853 __i915_vma_unpin(vma); 1830 __i915_vma_unpin(vma);
1854err_unlock: 1831err_unlock:
1855 mutex_unlock(&dev->struct_mutex); 1832 mutex_unlock(&dev->struct_mutex);
1856err_rpm: 1833err_rpm:
1857 intel_runtime_pm_put(dev_priv); 1834 intel_runtime_pm_put(dev_priv);
1835 i915_gem_object_unpin_pages(obj);
1858err: 1836err:
1859 switch (ret) { 1837 switch (ret) {
1860 case -EIO: 1838 case -EIO:
@@ -1916,15 +1894,23 @@ err:
1916void 1894void
1917i915_gem_release_mmap(struct drm_i915_gem_object *obj) 1895i915_gem_release_mmap(struct drm_i915_gem_object *obj)
1918{ 1896{
1897 struct drm_i915_private *i915 = to_i915(obj->base.dev);
1898
1919 /* Serialisation between user GTT access and our code depends upon 1899 /* Serialisation between user GTT access and our code depends upon
1920 * revoking the CPU's PTE whilst the mutex is held. The next user 1900 * revoking the CPU's PTE whilst the mutex is held. The next user
1921 * pagefault then has to wait until we release the mutex. 1901 * pagefault then has to wait until we release the mutex.
1902 *
1903 * Note that RPM complicates somewhat by adding an additional
1904 * requirement that operations to the GGTT be made holding the RPM
1905 * wakeref.
1922 */ 1906 */
1923 lockdep_assert_held(&obj->base.dev->struct_mutex); 1907 lockdep_assert_held(&i915->drm.struct_mutex);
1908 intel_runtime_pm_get(i915);
1924 1909
1925 if (!obj->fault_mappable) 1910 if (list_empty(&obj->userfault_link))
1926 return; 1911 goto out;
1927 1912
1913 list_del_init(&obj->userfault_link);
1928 drm_vma_node_unmap(&obj->base.vma_node, 1914 drm_vma_node_unmap(&obj->base.vma_node,
1929 obj->base.dev->anon_inode->i_mapping); 1915 obj->base.dev->anon_inode->i_mapping);
1930 1916
@@ -1937,16 +1923,45 @@ i915_gem_release_mmap(struct drm_i915_gem_object *obj)
1937 */ 1923 */
1938 wmb(); 1924 wmb();
1939 1925
1940 obj->fault_mappable = false; 1926out:
1927 intel_runtime_pm_put(i915);
1941} 1928}
1942 1929
1943void 1930void i915_gem_runtime_suspend(struct drm_i915_private *dev_priv)
1944i915_gem_release_all_mmaps(struct drm_i915_private *dev_priv)
1945{ 1931{
1946 struct drm_i915_gem_object *obj; 1932 struct drm_i915_gem_object *obj, *on;
1933 int i;
1947 1934
1948 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) 1935 /*
1949 i915_gem_release_mmap(obj); 1936 * Only called during RPM suspend. All users of the userfault_list
1937 * must be holding an RPM wakeref to ensure that this can not
1938 * run concurrently with themselves (and use the struct_mutex for
1939 * protection between themselves).
1940 */
1941
1942 list_for_each_entry_safe(obj, on,
1943 &dev_priv->mm.userfault_list, userfault_link) {
1944 list_del_init(&obj->userfault_link);
1945 drm_vma_node_unmap(&obj->base.vma_node,
1946 obj->base.dev->anon_inode->i_mapping);
1947 }
1948
1949 /* The fence will be lost when the device powers down. If any were
1950 * in use by hardware (i.e. they are pinned), we should not be powering
1951 * down! All other fences will be reacquired by the user upon waking.
1952 */
1953 for (i = 0; i < dev_priv->num_fence_regs; i++) {
1954 struct drm_i915_fence_reg *reg = &dev_priv->fence_regs[i];
1955
1956 if (WARN_ON(reg->pin_count))
1957 continue;
1958
1959 if (!reg->vma)
1960 continue;
1961
1962 GEM_BUG_ON(!list_empty(&reg->vma->obj->userfault_link));
1963 reg->dirty = true;
1964 }
1950} 1965}
1951 1966
1952/** 1967/**
@@ -2060,7 +2075,7 @@ i915_gem_mmap_gtt(struct drm_file *file,
2060 if (ret == 0) 2075 if (ret == 0)
2061 *offset = drm_vma_node_offset_addr(&obj->base.vma_node); 2076 *offset = drm_vma_node_offset_addr(&obj->base.vma_node);
2062 2077
2063 i915_gem_object_put_unlocked(obj); 2078 i915_gem_object_put(obj);
2064 return ret; 2079 return ret;
2065} 2080}
2066 2081
@@ -2103,16 +2118,18 @@ i915_gem_object_truncate(struct drm_i915_gem_object *obj)
2103 * backing pages, *now*. 2118 * backing pages, *now*.
2104 */ 2119 */
2105 shmem_truncate_range(file_inode(obj->base.filp), 0, (loff_t)-1); 2120 shmem_truncate_range(file_inode(obj->base.filp), 0, (loff_t)-1);
2106 obj->madv = __I915_MADV_PURGED; 2121 obj->mm.madv = __I915_MADV_PURGED;
2107} 2122}
2108 2123
2109/* Try to discard unwanted pages */ 2124/* Try to discard unwanted pages */
2110static void 2125void __i915_gem_object_invalidate(struct drm_i915_gem_object *obj)
2111i915_gem_object_invalidate(struct drm_i915_gem_object *obj)
2112{ 2126{
2113 struct address_space *mapping; 2127 struct address_space *mapping;
2114 2128
2115 switch (obj->madv) { 2129 lockdep_assert_held(&obj->mm.lock);
2130 GEM_BUG_ON(obj->mm.pages);
2131
2132 switch (obj->mm.madv) {
2116 case I915_MADV_DONTNEED: 2133 case I915_MADV_DONTNEED:
2117 i915_gem_object_truncate(obj); 2134 i915_gem_object_truncate(obj);
2118 case __I915_MADV_PURGED: 2135 case __I915_MADV_PURGED:
@@ -2127,82 +2144,83 @@ i915_gem_object_invalidate(struct drm_i915_gem_object *obj)
2127} 2144}
2128 2145
2129static void 2146static void
2130i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj) 2147i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj,
2148 struct sg_table *pages)
2131{ 2149{
2132 struct sgt_iter sgt_iter; 2150 struct sgt_iter sgt_iter;
2133 struct page *page; 2151 struct page *page;
2134 int ret;
2135 2152
2136 BUG_ON(obj->madv == __I915_MADV_PURGED); 2153 __i915_gem_object_release_shmem(obj);
2137 2154
2138 ret = i915_gem_object_set_to_cpu_domain(obj, true); 2155 i915_gem_gtt_finish_pages(obj, pages);
2139 if (WARN_ON(ret)) {
2140 /* In the event of a disaster, abandon all caches and
2141 * hope for the best.
2142 */
2143 i915_gem_clflush_object(obj, true);
2144 obj->base.read_domains = obj->base.write_domain = I915_GEM_DOMAIN_CPU;
2145 }
2146
2147 i915_gem_gtt_finish_object(obj);
2148 2156
2149 if (i915_gem_object_needs_bit17_swizzle(obj)) 2157 if (i915_gem_object_needs_bit17_swizzle(obj))
2150 i915_gem_object_save_bit_17_swizzle(obj); 2158 i915_gem_object_save_bit_17_swizzle(obj, pages);
2151
2152 if (obj->madv == I915_MADV_DONTNEED)
2153 obj->dirty = 0;
2154 2159
2155 for_each_sgt_page(page, sgt_iter, obj->pages) { 2160 for_each_sgt_page(page, sgt_iter, pages) {
2156 if (obj->dirty) 2161 if (obj->mm.dirty)
2157 set_page_dirty(page); 2162 set_page_dirty(page);
2158 2163
2159 if (obj->madv == I915_MADV_WILLNEED) 2164 if (obj->mm.madv == I915_MADV_WILLNEED)
2160 mark_page_accessed(page); 2165 mark_page_accessed(page);
2161 2166
2162 put_page(page); 2167 put_page(page);
2163 } 2168 }
2164 obj->dirty = 0; 2169 obj->mm.dirty = false;
2165 2170
2166 sg_free_table(obj->pages); 2171 sg_free_table(pages);
2167 kfree(obj->pages); 2172 kfree(pages);
2168} 2173}
2169 2174
2170int 2175static void __i915_gem_object_reset_page_iter(struct drm_i915_gem_object *obj)
2171i915_gem_object_put_pages(struct drm_i915_gem_object *obj)
2172{ 2176{
2173 const struct drm_i915_gem_object_ops *ops = obj->ops; 2177 struct radix_tree_iter iter;
2178 void **slot;
2174 2179
2175 if (obj->pages == NULL) 2180 radix_tree_for_each_slot(slot, &obj->mm.get_page.radix, &iter, 0)
2176 return 0; 2181 radix_tree_delete(&obj->mm.get_page.radix, iter.index);
2182}
2177 2183
2178 if (obj->pages_pin_count) 2184void __i915_gem_object_put_pages(struct drm_i915_gem_object *obj,
2179 return -EBUSY; 2185 enum i915_mm_subclass subclass)
2186{
2187 struct sg_table *pages;
2188
2189 if (i915_gem_object_has_pinned_pages(obj))
2190 return;
2180 2191
2181 GEM_BUG_ON(obj->bind_count); 2192 GEM_BUG_ON(obj->bind_count);
2193 if (!READ_ONCE(obj->mm.pages))
2194 return;
2195
2196 /* May be called by shrinker from within get_pages() (on another bo) */
2197 mutex_lock_nested(&obj->mm.lock, subclass);
2198 if (unlikely(atomic_read(&obj->mm.pages_pin_count)))
2199 goto unlock;
2182 2200
2183 /* ->put_pages might need to allocate memory for the bit17 swizzle 2201 /* ->put_pages might need to allocate memory for the bit17 swizzle
2184 * array, hence protect them from being reaped by removing them from gtt 2202 * array, hence protect them from being reaped by removing them from gtt
2185 * lists early. */ 2203 * lists early. */
2186 list_del(&obj->global_list); 2204 pages = fetch_and_zero(&obj->mm.pages);
2205 GEM_BUG_ON(!pages);
2187 2206
2188 if (obj->mapping) { 2207 if (obj->mm.mapping) {
2189 void *ptr; 2208 void *ptr;
2190 2209
2191 ptr = ptr_mask_bits(obj->mapping); 2210 ptr = ptr_mask_bits(obj->mm.mapping);
2192 if (is_vmalloc_addr(ptr)) 2211 if (is_vmalloc_addr(ptr))
2193 vunmap(ptr); 2212 vunmap(ptr);
2194 else 2213 else
2195 kunmap(kmap_to_page(ptr)); 2214 kunmap(kmap_to_page(ptr));
2196 2215
2197 obj->mapping = NULL; 2216 obj->mm.mapping = NULL;
2198 } 2217 }
2199 2218
2200 ops->put_pages(obj); 2219 __i915_gem_object_reset_page_iter(obj);
2201 obj->pages = NULL;
2202 2220
2203 i915_gem_object_invalidate(obj); 2221 obj->ops->put_pages(obj, pages);
2204 2222unlock:
2205 return 0; 2223 mutex_unlock(&obj->mm.lock);
2206} 2224}
2207 2225
2208static unsigned int swiotlb_max_size(void) 2226static unsigned int swiotlb_max_size(void)
@@ -2214,7 +2232,7 @@ static unsigned int swiotlb_max_size(void)
2214#endif 2232#endif
2215} 2233}
2216 2234
2217static int 2235static struct sg_table *
2218i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj) 2236i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
2219{ 2237{
2220 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 2238 struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
@@ -2233,8 +2251,8 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
2233 * wasn't in the GTT, there shouldn't be any way it could have been in 2251 * wasn't in the GTT, there shouldn't be any way it could have been in
2234 * a GPU cache 2252 * a GPU cache
2235 */ 2253 */
2236 BUG_ON(obj->base.read_domains & I915_GEM_GPU_DOMAINS); 2254 GEM_BUG_ON(obj->base.read_domains & I915_GEM_GPU_DOMAINS);
2237 BUG_ON(obj->base.write_domain & I915_GEM_GPU_DOMAINS); 2255 GEM_BUG_ON(obj->base.write_domain & I915_GEM_GPU_DOMAINS);
2238 2256
2239 max_segment = swiotlb_max_size(); 2257 max_segment = swiotlb_max_size();
2240 if (!max_segment) 2258 if (!max_segment)
@@ -2242,12 +2260,12 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
2242 2260
2243 st = kmalloc(sizeof(*st), GFP_KERNEL); 2261 st = kmalloc(sizeof(*st), GFP_KERNEL);
2244 if (st == NULL) 2262 if (st == NULL)
2245 return -ENOMEM; 2263 return ERR_PTR(-ENOMEM);
2246 2264
2247 page_count = obj->base.size / PAGE_SIZE; 2265 page_count = obj->base.size / PAGE_SIZE;
2248 if (sg_alloc_table(st, page_count, GFP_KERNEL)) { 2266 if (sg_alloc_table(st, page_count, GFP_KERNEL)) {
2249 kfree(st); 2267 kfree(st);
2250 return -ENOMEM; 2268 return ERR_PTR(-ENOMEM);
2251 } 2269 }
2252 2270
2253 /* Get the list of pages out of our struct file. They'll be pinned 2271 /* Get the list of pages out of our struct file. They'll be pinned
@@ -2298,20 +2316,15 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
2298 } 2316 }
2299 if (sg) /* loop terminated early; short sg table */ 2317 if (sg) /* loop terminated early; short sg table */
2300 sg_mark_end(sg); 2318 sg_mark_end(sg);
2301 obj->pages = st;
2302 2319
2303 ret = i915_gem_gtt_prepare_object(obj); 2320 ret = i915_gem_gtt_prepare_pages(obj, st);
2304 if (ret) 2321 if (ret)
2305 goto err_pages; 2322 goto err_pages;
2306 2323
2307 if (i915_gem_object_needs_bit17_swizzle(obj)) 2324 if (i915_gem_object_needs_bit17_swizzle(obj))
2308 i915_gem_object_do_bit_17_swizzle(obj); 2325 i915_gem_object_do_bit_17_swizzle(obj, st);
2309
2310 if (i915_gem_object_is_tiled(obj) &&
2311 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES)
2312 i915_gem_object_pin_pages(obj);
2313 2326
2314 return 0; 2327 return st;
2315 2328
2316err_pages: 2329err_pages:
2317 sg_mark_end(sg); 2330 sg_mark_end(sg);
@@ -2331,43 +2344,73 @@ err_pages:
2331 if (ret == -ENOSPC) 2344 if (ret == -ENOSPC)
2332 ret = -ENOMEM; 2345 ret = -ENOMEM;
2333 2346
2334 return ret; 2347 return ERR_PTR(ret);
2335} 2348}
2336 2349
2337/* Ensure that the associated pages are gathered from the backing storage 2350void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj,
2338 * and pinned into our object. i915_gem_object_get_pages() may be called 2351 struct sg_table *pages)
2339 * multiple times before they are released by a single call to
2340 * i915_gem_object_put_pages() - once the pages are no longer referenced
2341 * either as a result of memory pressure (reaping pages under the shrinker)
2342 * or as the object is itself released.
2343 */
2344int
2345i915_gem_object_get_pages(struct drm_i915_gem_object *obj)
2346{ 2352{
2347 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 2353 lockdep_assert_held(&obj->mm.lock);
2348 const struct drm_i915_gem_object_ops *ops = obj->ops;
2349 int ret;
2350 2354
2351 if (obj->pages) 2355 obj->mm.get_page.sg_pos = pages->sgl;
2352 return 0; 2356 obj->mm.get_page.sg_idx = 0;
2357
2358 obj->mm.pages = pages;
2359
2360 if (i915_gem_object_is_tiled(obj) &&
2361 to_i915(obj->base.dev)->quirks & QUIRK_PIN_SWIZZLED_PAGES) {
2362 GEM_BUG_ON(obj->mm.quirked);
2363 __i915_gem_object_pin_pages(obj);
2364 obj->mm.quirked = true;
2365 }
2366}
2353 2367
2354 if (obj->madv != I915_MADV_WILLNEED) { 2368static int ____i915_gem_object_get_pages(struct drm_i915_gem_object *obj)
2369{
2370 struct sg_table *pages;
2371
2372 GEM_BUG_ON(i915_gem_object_has_pinned_pages(obj));
2373
2374 if (unlikely(obj->mm.madv != I915_MADV_WILLNEED)) {
2355 DRM_DEBUG("Attempting to obtain a purgeable object\n"); 2375 DRM_DEBUG("Attempting to obtain a purgeable object\n");
2356 return -EFAULT; 2376 return -EFAULT;
2357 } 2377 }
2358 2378
2359 BUG_ON(obj->pages_pin_count); 2379 pages = obj->ops->get_pages(obj);
2380 if (unlikely(IS_ERR(pages)))
2381 return PTR_ERR(pages);
2360 2382
2361 ret = ops->get_pages(obj); 2383 __i915_gem_object_set_pages(obj, pages);
2362 if (ret) 2384 return 0;
2363 return ret; 2385}
2364 2386
2365 list_add_tail(&obj->global_list, &dev_priv->mm.unbound_list); 2387/* Ensure that the associated pages are gathered from the backing storage
2388 * and pinned into our object. i915_gem_object_pin_pages() may be called
2389 * multiple times before they are released by a single call to
2390 * i915_gem_object_unpin_pages() - once the pages are no longer referenced
2391 * either as a result of memory pressure (reaping pages under the shrinker)
2392 * or as the object is itself released.
2393 */
2394int __i915_gem_object_get_pages(struct drm_i915_gem_object *obj)
2395{
2396 int err;
2366 2397
2367 obj->get_page.sg = obj->pages->sgl; 2398 err = mutex_lock_interruptible(&obj->mm.lock);
2368 obj->get_page.last = 0; 2399 if (err)
2400 return err;
2369 2401
2370 return 0; 2402 if (unlikely(!obj->mm.pages)) {
2403 err = ____i915_gem_object_get_pages(obj);
2404 if (err)
2405 goto unlock;
2406
2407 smp_mb__before_atomic();
2408 }
2409 atomic_inc(&obj->mm.pages_pin_count);
2410
2411unlock:
2412 mutex_unlock(&obj->mm.lock);
2413 return err;
2371} 2414}
2372 2415
2373/* The 'mapping' part of i915_gem_object_pin_map() below */ 2416/* The 'mapping' part of i915_gem_object_pin_map() below */
@@ -2375,7 +2418,7 @@ static void *i915_gem_object_map(const struct drm_i915_gem_object *obj,
2375 enum i915_map_type type) 2418 enum i915_map_type type)
2376{ 2419{
2377 unsigned long n_pages = obj->base.size >> PAGE_SHIFT; 2420 unsigned long n_pages = obj->base.size >> PAGE_SHIFT;
2378 struct sg_table *sgt = obj->pages; 2421 struct sg_table *sgt = obj->mm.pages;
2379 struct sgt_iter sgt_iter; 2422 struct sgt_iter sgt_iter;
2380 struct page *page; 2423 struct page *page;
2381 struct page *stack_pages[32]; 2424 struct page *stack_pages[32];
@@ -2426,21 +2469,31 @@ void *i915_gem_object_pin_map(struct drm_i915_gem_object *obj,
2426 void *ptr; 2469 void *ptr;
2427 int ret; 2470 int ret;
2428 2471
2429 lockdep_assert_held(&obj->base.dev->struct_mutex);
2430 GEM_BUG_ON(!i915_gem_object_has_struct_page(obj)); 2472 GEM_BUG_ON(!i915_gem_object_has_struct_page(obj));
2431 2473
2432 ret = i915_gem_object_get_pages(obj); 2474 ret = mutex_lock_interruptible(&obj->mm.lock);
2433 if (ret) 2475 if (ret)
2434 return ERR_PTR(ret); 2476 return ERR_PTR(ret);
2435 2477
2436 i915_gem_object_pin_pages(obj); 2478 pinned = true;
2437 pinned = obj->pages_pin_count > 1; 2479 if (!atomic_inc_not_zero(&obj->mm.pages_pin_count)) {
2480 if (unlikely(!obj->mm.pages)) {
2481 ret = ____i915_gem_object_get_pages(obj);
2482 if (ret)
2483 goto err_unlock;
2484
2485 smp_mb__before_atomic();
2486 }
2487 atomic_inc(&obj->mm.pages_pin_count);
2488 pinned = false;
2489 }
2490 GEM_BUG_ON(!obj->mm.pages);
2438 2491
2439 ptr = ptr_unpack_bits(obj->mapping, has_type); 2492 ptr = ptr_unpack_bits(obj->mm.mapping, has_type);
2440 if (ptr && has_type != type) { 2493 if (ptr && has_type != type) {
2441 if (pinned) { 2494 if (pinned) {
2442 ret = -EBUSY; 2495 ret = -EBUSY;
2443 goto err; 2496 goto err_unpin;
2444 } 2497 }
2445 2498
2446 if (is_vmalloc_addr(ptr)) 2499 if (is_vmalloc_addr(ptr))
@@ -2448,59 +2501,28 @@ void *i915_gem_object_pin_map(struct drm_i915_gem_object *obj,
2448 else 2501 else
2449 kunmap(kmap_to_page(ptr)); 2502 kunmap(kmap_to_page(ptr));
2450 2503
2451 ptr = obj->mapping = NULL; 2504 ptr = obj->mm.mapping = NULL;
2452 } 2505 }
2453 2506
2454 if (!ptr) { 2507 if (!ptr) {
2455 ptr = i915_gem_object_map(obj, type); 2508 ptr = i915_gem_object_map(obj, type);
2456 if (!ptr) { 2509 if (!ptr) {
2457 ret = -ENOMEM; 2510 ret = -ENOMEM;
2458 goto err; 2511 goto err_unpin;
2459 } 2512 }
2460 2513
2461 obj->mapping = ptr_pack_bits(ptr, type); 2514 obj->mm.mapping = ptr_pack_bits(ptr, type);
2462 } 2515 }
2463 2516
2517out_unlock:
2518 mutex_unlock(&obj->mm.lock);
2464 return ptr; 2519 return ptr;
2465 2520
2466err: 2521err_unpin:
2467 i915_gem_object_unpin_pages(obj); 2522 atomic_dec(&obj->mm.pages_pin_count);
2468 return ERR_PTR(ret); 2523err_unlock:
2469} 2524 ptr = ERR_PTR(ret);
2470 2525 goto out_unlock;
2471static void
2472i915_gem_object_retire__write(struct i915_gem_active *active,
2473 struct drm_i915_gem_request *request)
2474{
2475 struct drm_i915_gem_object *obj =
2476 container_of(active, struct drm_i915_gem_object, last_write);
2477
2478 intel_fb_obj_flush(obj, true, ORIGIN_CS);
2479}
2480
2481static void
2482i915_gem_object_retire__read(struct i915_gem_active *active,
2483 struct drm_i915_gem_request *request)
2484{
2485 int idx = request->engine->id;
2486 struct drm_i915_gem_object *obj =
2487 container_of(active, struct drm_i915_gem_object, last_read[idx]);
2488
2489 GEM_BUG_ON(!i915_gem_object_has_active_engine(obj, idx));
2490
2491 i915_gem_object_clear_active(obj, idx);
2492 if (i915_gem_object_is_active(obj))
2493 return;
2494
2495 /* Bump our place on the bound list to keep it roughly in LRU order
2496 * so that we don't steal from recently used but inactive objects
2497 * (unless we are forced to ofc!)
2498 */
2499 if (obj->bind_count)
2500 list_move_tail(&obj->global_list,
2501 &request->i915->mm.bound_list);
2502
2503 i915_gem_object_put(obj);
2504} 2526}
2505 2527
2506static bool i915_context_is_banned(const struct i915_gem_context *ctx) 2528static bool i915_context_is_banned(const struct i915_gem_context *ctx)
@@ -2547,13 +2569,10 @@ i915_gem_find_active_request(struct intel_engine_cs *engine)
2547 * extra delay for a recent interrupt is pointless. Hence, we do 2569 * extra delay for a recent interrupt is pointless. Hence, we do
2548 * not need an engine->irq_seqno_barrier() before the seqno reads. 2570 * not need an engine->irq_seqno_barrier() before the seqno reads.
2549 */ 2571 */
2550 list_for_each_entry(request, &engine->request_list, link) { 2572 list_for_each_entry(request, &engine->timeline->requests, link) {
2551 if (i915_gem_request_completed(request)) 2573 if (__i915_gem_request_completed(request))
2552 continue; 2574 continue;
2553 2575
2554 if (!i915_sw_fence_done(&request->submit))
2555 break;
2556
2557 return request; 2576 return request;
2558 } 2577 }
2559 2578
@@ -2581,6 +2600,7 @@ static void i915_gem_reset_engine(struct intel_engine_cs *engine)
2581{ 2600{
2582 struct drm_i915_gem_request *request; 2601 struct drm_i915_gem_request *request;
2583 struct i915_gem_context *incomplete_ctx; 2602 struct i915_gem_context *incomplete_ctx;
2603 struct intel_timeline *timeline;
2584 bool ring_hung; 2604 bool ring_hung;
2585 2605
2586 if (engine->irq_seqno_barrier) 2606 if (engine->irq_seqno_barrier)
@@ -2599,7 +2619,7 @@ static void i915_gem_reset_engine(struct intel_engine_cs *engine)
2599 return; 2619 return;
2600 2620
2601 DRM_DEBUG_DRIVER("resetting %s to restart from tail of request 0x%x\n", 2621 DRM_DEBUG_DRIVER("resetting %s to restart from tail of request 0x%x\n",
2602 engine->name, request->fence.seqno); 2622 engine->name, request->global_seqno);
2603 2623
2604 /* Setup the CS to resume from the breadcrumb of the hung request */ 2624 /* Setup the CS to resume from the breadcrumb of the hung request */
2605 engine->reset_hw(engine, request); 2625 engine->reset_hw(engine, request);
@@ -2616,9 +2636,13 @@ static void i915_gem_reset_engine(struct intel_engine_cs *engine)
2616 if (i915_gem_context_is_default(incomplete_ctx)) 2636 if (i915_gem_context_is_default(incomplete_ctx))
2617 return; 2637 return;
2618 2638
2619 list_for_each_entry_continue(request, &engine->request_list, link) 2639 list_for_each_entry_continue(request, &engine->timeline->requests, link)
2620 if (request->ctx == incomplete_ctx) 2640 if (request->ctx == incomplete_ctx)
2621 reset_request(request); 2641 reset_request(request);
2642
2643 timeline = i915_gem_context_lookup_timeline(incomplete_ctx, engine);
2644 list_for_each_entry(request, &timeline->requests, link)
2645 reset_request(request);
2622} 2646}
2623 2647
2624void i915_gem_reset(struct drm_i915_private *dev_priv) 2648void i915_gem_reset(struct drm_i915_private *dev_priv)
@@ -2626,6 +2650,8 @@ void i915_gem_reset(struct drm_i915_private *dev_priv)
2626 struct intel_engine_cs *engine; 2650 struct intel_engine_cs *engine;
2627 enum intel_engine_id id; 2651 enum intel_engine_id id;
2628 2652
2653 lockdep_assert_held(&dev_priv->drm.struct_mutex);
2654
2629 i915_gem_retire_requests(dev_priv); 2655 i915_gem_retire_requests(dev_priv);
2630 2656
2631 for_each_engine(engine, dev_priv, id) 2657 for_each_engine(engine, dev_priv, id)
@@ -2653,7 +2679,8 @@ static void i915_gem_cleanup_engine(struct intel_engine_cs *engine)
2653 * (lockless) lookup doesn't try and wait upon the request as we 2679 * (lockless) lookup doesn't try and wait upon the request as we
2654 * reset it. 2680 * reset it.
2655 */ 2681 */
2656 intel_engine_init_seqno(engine, engine->last_submitted_seqno); 2682 intel_engine_init_global_seqno(engine,
2683 intel_engine_last_submit(engine));
2657 2684
2658 /* 2685 /*
2659 * Clear the execlists queue up before freeing the requests, as those 2686 * Clear the execlists queue up before freeing the requests, as those
@@ -2669,8 +2696,6 @@ static void i915_gem_cleanup_engine(struct intel_engine_cs *engine)
2669 memset(engine->execlist_port, 0, sizeof(engine->execlist_port)); 2696 memset(engine->execlist_port, 0, sizeof(engine->execlist_port));
2670 spin_unlock(&engine->execlist_lock); 2697 spin_unlock(&engine->execlist_lock);
2671 } 2698 }
2672
2673 engine->i915->gt.active_engines &= ~intel_engine_flag(engine);
2674} 2699}
2675 2700
2676void i915_gem_set_wedged(struct drm_i915_private *dev_priv) 2701void i915_gem_set_wedged(struct drm_i915_private *dev_priv)
@@ -2727,7 +2752,14 @@ i915_gem_idle_work_handler(struct work_struct *work)
2727 if (!READ_ONCE(dev_priv->gt.awake)) 2752 if (!READ_ONCE(dev_priv->gt.awake))
2728 return; 2753 return;
2729 2754
2730 if (READ_ONCE(dev_priv->gt.active_engines)) 2755 /*
2756 * Wait for last execlists context complete, but bail out in case a
2757 * new request is submitted.
2758 */
2759 wait_for(READ_ONCE(dev_priv->gt.active_requests) ||
2760 intel_execlists_idle(dev_priv), 10);
2761
2762 if (READ_ONCE(dev_priv->gt.active_requests))
2731 return; 2763 return;
2732 2764
2733 rearm_hangcheck = 2765 rearm_hangcheck =
@@ -2741,9 +2773,19 @@ i915_gem_idle_work_handler(struct work_struct *work)
2741 goto out_rearm; 2773 goto out_rearm;
2742 } 2774 }
2743 2775
2744 if (dev_priv->gt.active_engines) 2776 /*
2777 * New request retired after this work handler started, extend active
2778 * period until next instance of the work.
2779 */
2780 if (work_pending(work))
2745 goto out_unlock; 2781 goto out_unlock;
2746 2782
2783 if (dev_priv->gt.active_requests)
2784 goto out_unlock;
2785
2786 if (wait_for(intel_execlists_idle(dev_priv), 10))
2787 DRM_ERROR("Timeout waiting for engines to idle\n");
2788
2747 for_each_engine(engine, dev_priv, id) 2789 for_each_engine(engine, dev_priv, id)
2748 i915_gem_batch_pool_fini(&engine->batch_pool); 2790 i915_gem_batch_pool_fini(&engine->batch_pool);
2749 2791
@@ -2774,9 +2816,26 @@ void i915_gem_close_object(struct drm_gem_object *gem, struct drm_file *file)
2774 list_for_each_entry_safe(vma, vn, &obj->vma_list, obj_link) 2816 list_for_each_entry_safe(vma, vn, &obj->vma_list, obj_link)
2775 if (vma->vm->file == fpriv) 2817 if (vma->vm->file == fpriv)
2776 i915_vma_close(vma); 2818 i915_vma_close(vma);
2819
2820 if (i915_gem_object_is_active(obj) &&
2821 !i915_gem_object_has_active_reference(obj)) {
2822 i915_gem_object_set_active_reference(obj);
2823 i915_gem_object_get(obj);
2824 }
2777 mutex_unlock(&obj->base.dev->struct_mutex); 2825 mutex_unlock(&obj->base.dev->struct_mutex);
2778} 2826}
2779 2827
2828static unsigned long to_wait_timeout(s64 timeout_ns)
2829{
2830 if (timeout_ns < 0)
2831 return MAX_SCHEDULE_TIMEOUT;
2832
2833 if (timeout_ns == 0)
2834 return 0;
2835
2836 return nsecs_to_jiffies_timeout(timeout_ns);
2837}
2838
2780/** 2839/**
2781 * i915_gem_wait_ioctl - implements DRM_IOCTL_I915_GEM_WAIT 2840 * i915_gem_wait_ioctl - implements DRM_IOCTL_I915_GEM_WAIT
2782 * @dev: drm device pointer 2841 * @dev: drm device pointer
@@ -2805,10 +2864,9 @@ int
2805i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file) 2864i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
2806{ 2865{
2807 struct drm_i915_gem_wait *args = data; 2866 struct drm_i915_gem_wait *args = data;
2808 struct intel_rps_client *rps = to_rps_client(file);
2809 struct drm_i915_gem_object *obj; 2867 struct drm_i915_gem_object *obj;
2810 unsigned long active; 2868 ktime_t start;
2811 int idx, ret = 0; 2869 long ret;
2812 2870
2813 if (args->flags != 0) 2871 if (args->flags != 0)
2814 return -EINVAL; 2872 return -EINVAL;
@@ -2817,17 +2875,20 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
2817 if (!obj) 2875 if (!obj)
2818 return -ENOENT; 2876 return -ENOENT;
2819 2877
2820 active = __I915_BO_ACTIVE(obj); 2878 start = ktime_get();
2821 for_each_active(active, idx) { 2879
2822 s64 *timeout = args->timeout_ns >= 0 ? &args->timeout_ns : NULL; 2880 ret = i915_gem_object_wait(obj,
2823 ret = i915_gem_active_wait_unlocked(&obj->last_read[idx], 2881 I915_WAIT_INTERRUPTIBLE | I915_WAIT_ALL,
2824 I915_WAIT_INTERRUPTIBLE, 2882 to_wait_timeout(args->timeout_ns),
2825 timeout, rps); 2883 to_rps_client(file));
2826 if (ret) 2884
2827 break; 2885 if (args->timeout_ns > 0) {
2886 args->timeout_ns -= ktime_to_ns(ktime_sub(ktime_get(), start));
2887 if (args->timeout_ns < 0)
2888 args->timeout_ns = 0;
2828 } 2889 }
2829 2890
2830 i915_gem_object_put_unlocked(obj); 2891 i915_gem_object_put(obj);
2831 return ret; 2892 return ret;
2832} 2893}
2833 2894
@@ -2848,6 +2909,8 @@ int i915_vma_unbind(struct i915_vma *vma)
2848 unsigned long active; 2909 unsigned long active;
2849 int ret; 2910 int ret;
2850 2911
2912 lockdep_assert_held(&obj->base.dev->struct_mutex);
2913
2851 /* First wait upon any activity as retiring the request may 2914 /* First wait upon any activity as retiring the request may
2852 * have side-effects such as unpinning or even unbinding this vma. 2915 * have side-effects such as unpinning or even unbinding this vma.
2853 */ 2916 */
@@ -2859,6 +2922,13 @@ int i915_vma_unbind(struct i915_vma *vma)
2859 * In order to prevent it from being recursively closed, 2922 * In order to prevent it from being recursively closed,
2860 * take a pin on the vma so that the second unbind is 2923 * take a pin on the vma so that the second unbind is
2861 * aborted. 2924 * aborted.
2925 *
2926 * Even more scary is that the retire callback may free
2927 * the object (last active vma). To prevent the explosion
2928 * we defer the actual object free to a worker that can
2929 * only proceed once it acquires the struct_mutex (which
2930 * we currently hold, therefore it cannot free this object
2931 * before we are finished).
2862 */ 2932 */
2863 __i915_vma_pin(vma); 2933 __i915_vma_pin(vma);
2864 2934
@@ -2883,7 +2953,7 @@ int i915_vma_unbind(struct i915_vma *vma)
2883 goto destroy; 2953 goto destroy;
2884 2954
2885 GEM_BUG_ON(obj->bind_count == 0); 2955 GEM_BUG_ON(obj->bind_count == 0);
2886 GEM_BUG_ON(!obj->pages); 2956 GEM_BUG_ON(!i915_gem_object_has_pinned_pages(obj));
2887 2957
2888 if (i915_vma_is_map_and_fenceable(vma)) { 2958 if (i915_vma_is_map_and_fenceable(vma)) {
2889 /* release the fence reg _after_ flushing */ 2959 /* release the fence reg _after_ flushing */
@@ -2907,7 +2977,7 @@ int i915_vma_unbind(struct i915_vma *vma)
2907 drm_mm_remove_node(&vma->node); 2977 drm_mm_remove_node(&vma->node);
2908 list_move_tail(&vma->vm_link, &vma->vm->unbound_list); 2978 list_move_tail(&vma->vm_link, &vma->vm->unbound_list);
2909 2979
2910 if (vma->pages != obj->pages) { 2980 if (vma->pages != obj->mm.pages) {
2911 GEM_BUG_ON(!vma->pages); 2981 GEM_BUG_ON(!vma->pages);
2912 sg_free_table(vma->pages); 2982 sg_free_table(vma->pages);
2913 kfree(vma->pages); 2983 kfree(vma->pages);
@@ -2917,7 +2987,7 @@ int i915_vma_unbind(struct i915_vma *vma)
2917 /* Since the unbound list is global, only move to that list if 2987 /* Since the unbound list is global, only move to that list if
2918 * no more VMAs exist. */ 2988 * no more VMAs exist. */
2919 if (--obj->bind_count == 0) 2989 if (--obj->bind_count == 0)
2920 list_move_tail(&obj->global_list, 2990 list_move_tail(&obj->global_link,
2921 &to_i915(obj->base.dev)->mm.unbound_list); 2991 &to_i915(obj->base.dev)->mm.unbound_list);
2922 2992
2923 /* And finally now the object is completely decoupled from this vma, 2993 /* And finally now the object is completely decoupled from this vma,
@@ -2933,18 +3003,26 @@ destroy:
2933 return 0; 3003 return 0;
2934} 3004}
2935 3005
2936int i915_gem_wait_for_idle(struct drm_i915_private *dev_priv, 3006static int wait_for_timeline(struct i915_gem_timeline *tl, unsigned int flags)
2937 unsigned int flags)
2938{ 3007{
2939 struct intel_engine_cs *engine; 3008 int ret, i;
2940 enum intel_engine_id id;
2941 int ret;
2942 3009
2943 for_each_engine(engine, dev_priv, id) { 3010 for (i = 0; i < ARRAY_SIZE(tl->engine); i++) {
2944 if (engine->last_context == NULL) 3011 ret = i915_gem_active_wait(&tl->engine[i].last_request, flags);
2945 continue; 3012 if (ret)
3013 return ret;
3014 }
3015
3016 return 0;
3017}
2946 3018
2947 ret = intel_engine_idle(engine, flags); 3019int i915_gem_wait_for_idle(struct drm_i915_private *i915, unsigned int flags)
3020{
3021 struct i915_gem_timeline *tl;
3022 int ret;
3023
3024 list_for_each_entry(tl, &i915->gt.timelines, link) {
3025 ret = wait_for_timeline(tl, flags);
2948 if (ret) 3026 if (ret)
2949 return ret; 3027 return ret;
2950 } 3028 }
@@ -3040,12 +3118,10 @@ i915_vma_insert(struct i915_vma *vma, u64 size, u64 alignment, u64 flags)
3040 return -E2BIG; 3118 return -E2BIG;
3041 } 3119 }
3042 3120
3043 ret = i915_gem_object_get_pages(obj); 3121 ret = i915_gem_object_pin_pages(obj);
3044 if (ret) 3122 if (ret)
3045 return ret; 3123 return ret;
3046 3124
3047 i915_gem_object_pin_pages(obj);
3048
3049 if (flags & PIN_OFFSET_FIXED) { 3125 if (flags & PIN_OFFSET_FIXED) {
3050 u64 offset = flags & PIN_OFFSET_MASK; 3126 u64 offset = flags & PIN_OFFSET_MASK;
3051 if (offset & (alignment - 1) || offset > end - size) { 3127 if (offset & (alignment - 1) || offset > end - size) {
@@ -3108,9 +3184,10 @@ search_free:
3108 } 3184 }
3109 GEM_BUG_ON(!i915_gem_valid_gtt_space(vma, obj->cache_level)); 3185 GEM_BUG_ON(!i915_gem_valid_gtt_space(vma, obj->cache_level));
3110 3186
3111 list_move_tail(&obj->global_list, &dev_priv->mm.bound_list); 3187 list_move_tail(&obj->global_link, &dev_priv->mm.bound_list);
3112 list_move_tail(&vma->vm_link, &vma->vm->inactive_list); 3188 list_move_tail(&vma->vm_link, &vma->vm->inactive_list);
3113 obj->bind_count++; 3189 obj->bind_count++;
3190 GEM_BUG_ON(atomic_read(&obj->mm.pages_pin_count) < obj->bind_count);
3114 3191
3115 return 0; 3192 return 0;
3116 3193
@@ -3127,7 +3204,7 @@ i915_gem_clflush_object(struct drm_i915_gem_object *obj,
3127 * to GPU, and we can ignore the cache flush because it'll happen 3204 * to GPU, and we can ignore the cache flush because it'll happen
3128 * again at bind time. 3205 * again at bind time.
3129 */ 3206 */
3130 if (obj->pages == NULL) 3207 if (!obj->mm.pages)
3131 return false; 3208 return false;
3132 3209
3133 /* 3210 /*
@@ -3151,7 +3228,7 @@ i915_gem_clflush_object(struct drm_i915_gem_object *obj,
3151 } 3228 }
3152 3229
3153 trace_i915_gem_object_clflush(obj); 3230 trace_i915_gem_object_clflush(obj);
3154 drm_clflush_sg(obj->pages); 3231 drm_clflush_sg(obj->mm.pages);
3155 obj->cache_dirty = false; 3232 obj->cache_dirty = false;
3156 3233
3157 return true; 3234 return true;
@@ -3211,24 +3288,6 @@ i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj)
3211 I915_GEM_DOMAIN_CPU); 3288 I915_GEM_DOMAIN_CPU);
3212} 3289}
3213 3290
3214static void i915_gem_object_bump_inactive_ggtt(struct drm_i915_gem_object *obj)
3215{
3216 struct i915_vma *vma;
3217
3218 list_for_each_entry(vma, &obj->vma_list, obj_link) {
3219 if (!i915_vma_is_ggtt(vma))
3220 continue;
3221
3222 if (i915_vma_is_active(vma))
3223 continue;
3224
3225 if (!drm_mm_node_allocated(&vma->node))
3226 continue;
3227
3228 list_move_tail(&vma->vm_link, &vma->vm->inactive_list);
3229 }
3230}
3231
3232/** 3291/**
3233 * Moves a single object to the GTT read, and possibly write domain. 3292 * Moves a single object to the GTT read, and possibly write domain.
3234 * @obj: object to act on 3293 * @obj: object to act on
@@ -3243,7 +3302,14 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
3243 uint32_t old_write_domain, old_read_domains; 3302 uint32_t old_write_domain, old_read_domains;
3244 int ret; 3303 int ret;
3245 3304
3246 ret = i915_gem_object_wait_rendering(obj, !write); 3305 lockdep_assert_held(&obj->base.dev->struct_mutex);
3306
3307 ret = i915_gem_object_wait(obj,
3308 I915_WAIT_INTERRUPTIBLE |
3309 I915_WAIT_LOCKED |
3310 (write ? I915_WAIT_ALL : 0),
3311 MAX_SCHEDULE_TIMEOUT,
3312 NULL);
3247 if (ret) 3313 if (ret)
3248 return ret; 3314 return ret;
3249 3315
@@ -3258,7 +3324,7 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
3258 * continue to assume that the obj remained out of the CPU cached 3324 * continue to assume that the obj remained out of the CPU cached
3259 * domain. 3325 * domain.
3260 */ 3326 */
3261 ret = i915_gem_object_get_pages(obj); 3327 ret = i915_gem_object_pin_pages(obj);
3262 if (ret) 3328 if (ret)
3263 return ret; 3329 return ret;
3264 3330
@@ -3277,21 +3343,19 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
3277 /* It should now be out of any other write domains, and we can update 3343 /* It should now be out of any other write domains, and we can update
3278 * the domain values for our changes. 3344 * the domain values for our changes.
3279 */ 3345 */
3280 BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) != 0); 3346 GEM_BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) != 0);
3281 obj->base.read_domains |= I915_GEM_DOMAIN_GTT; 3347 obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
3282 if (write) { 3348 if (write) {
3283 obj->base.read_domains = I915_GEM_DOMAIN_GTT; 3349 obj->base.read_domains = I915_GEM_DOMAIN_GTT;
3284 obj->base.write_domain = I915_GEM_DOMAIN_GTT; 3350 obj->base.write_domain = I915_GEM_DOMAIN_GTT;
3285 obj->dirty = 1; 3351 obj->mm.dirty = true;
3286 } 3352 }
3287 3353
3288 trace_i915_gem_object_change_domain(obj, 3354 trace_i915_gem_object_change_domain(obj,
3289 old_read_domains, 3355 old_read_domains,
3290 old_write_domain); 3356 old_write_domain);
3291 3357
3292 /* And bump the LRU for this access */ 3358 i915_gem_object_unpin_pages(obj);
3293 i915_gem_object_bump_inactive_ggtt(obj);
3294
3295 return 0; 3359 return 0;
3296} 3360}
3297 3361
@@ -3316,6 +3380,8 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
3316 struct i915_vma *vma; 3380 struct i915_vma *vma;
3317 int ret = 0; 3381 int ret = 0;
3318 3382
3383 lockdep_assert_held(&obj->base.dev->struct_mutex);
3384
3319 if (obj->cache_level == cache_level) 3385 if (obj->cache_level == cache_level)
3320 goto out; 3386 goto out;
3321 3387
@@ -3360,7 +3426,12 @@ restart:
3360 * If we wait upon the object, we know that all the bound 3426 * If we wait upon the object, we know that all the bound
3361 * VMA are no longer active. 3427 * VMA are no longer active.
3362 */ 3428 */
3363 ret = i915_gem_object_wait_rendering(obj, false); 3429 ret = i915_gem_object_wait(obj,
3430 I915_WAIT_INTERRUPTIBLE |
3431 I915_WAIT_LOCKED |
3432 I915_WAIT_ALL,
3433 MAX_SCHEDULE_TIMEOUT,
3434 NULL);
3364 if (ret) 3435 if (ret)
3365 return ret; 3436 return ret;
3366 3437
@@ -3428,10 +3499,14 @@ int i915_gem_get_caching_ioctl(struct drm_device *dev, void *data,
3428{ 3499{
3429 struct drm_i915_gem_caching *args = data; 3500 struct drm_i915_gem_caching *args = data;
3430 struct drm_i915_gem_object *obj; 3501 struct drm_i915_gem_object *obj;
3502 int err = 0;
3431 3503
3432 obj = i915_gem_object_lookup(file, args->handle); 3504 rcu_read_lock();
3433 if (!obj) 3505 obj = i915_gem_object_lookup_rcu(file, args->handle);
3434 return -ENOENT; 3506 if (!obj) {
3507 err = -ENOENT;
3508 goto out;
3509 }
3435 3510
3436 switch (obj->cache_level) { 3511 switch (obj->cache_level) {
3437 case I915_CACHE_LLC: 3512 case I915_CACHE_LLC:
@@ -3447,15 +3522,15 @@ int i915_gem_get_caching_ioctl(struct drm_device *dev, void *data,
3447 args->caching = I915_CACHING_NONE; 3522 args->caching = I915_CACHING_NONE;
3448 break; 3523 break;
3449 } 3524 }
3450 3525out:
3451 i915_gem_object_put_unlocked(obj); 3526 rcu_read_unlock();
3452 return 0; 3527 return err;
3453} 3528}
3454 3529
3455int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data, 3530int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
3456 struct drm_file *file) 3531 struct drm_file *file)
3457{ 3532{
3458 struct drm_i915_private *dev_priv = to_i915(dev); 3533 struct drm_i915_private *i915 = to_i915(dev);
3459 struct drm_i915_gem_caching *args = data; 3534 struct drm_i915_gem_caching *args = data;
3460 struct drm_i915_gem_object *obj; 3535 struct drm_i915_gem_object *obj;
3461 enum i915_cache_level level; 3536 enum i915_cache_level level;
@@ -3472,23 +3547,21 @@ int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
3472 * cacheline, whereas normally such cachelines would get 3547 * cacheline, whereas normally such cachelines would get
3473 * invalidated. 3548 * invalidated.
3474 */ 3549 */
3475 if (!HAS_LLC(dev) && !HAS_SNOOP(dev)) 3550 if (!HAS_LLC(i915) && !HAS_SNOOP(i915))
3476 return -ENODEV; 3551 return -ENODEV;
3477 3552
3478 level = I915_CACHE_LLC; 3553 level = I915_CACHE_LLC;
3479 break; 3554 break;
3480 case I915_CACHING_DISPLAY: 3555 case I915_CACHING_DISPLAY:
3481 level = HAS_WT(dev_priv) ? I915_CACHE_WT : I915_CACHE_NONE; 3556 level = HAS_WT(i915) ? I915_CACHE_WT : I915_CACHE_NONE;
3482 break; 3557 break;
3483 default: 3558 default:
3484 return -EINVAL; 3559 return -EINVAL;
3485 } 3560 }
3486 3561
3487 intel_runtime_pm_get(dev_priv);
3488
3489 ret = i915_mutex_lock_interruptible(dev); 3562 ret = i915_mutex_lock_interruptible(dev);
3490 if (ret) 3563 if (ret)
3491 goto rpm_put; 3564 return ret;
3492 3565
3493 obj = i915_gem_object_lookup(file, args->handle); 3566 obj = i915_gem_object_lookup(file, args->handle);
3494 if (!obj) { 3567 if (!obj) {
@@ -3497,13 +3570,9 @@ int i915_gem_set_caching_ioctl(struct drm_device *dev, void *data,
3497 } 3570 }
3498 3571
3499 ret = i915_gem_object_set_cache_level(obj, level); 3572 ret = i915_gem_object_set_cache_level(obj, level);
3500
3501 i915_gem_object_put(obj); 3573 i915_gem_object_put(obj);
3502unlock: 3574unlock:
3503 mutex_unlock(&dev->struct_mutex); 3575 mutex_unlock(&dev->struct_mutex);
3504rpm_put:
3505 intel_runtime_pm_put(dev_priv);
3506
3507 return ret; 3576 return ret;
3508} 3577}
3509 3578
@@ -3521,6 +3590,8 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
3521 u32 old_read_domains, old_write_domain; 3590 u32 old_read_domains, old_write_domain;
3522 int ret; 3591 int ret;
3523 3592
3593 lockdep_assert_held(&obj->base.dev->struct_mutex);
3594
3524 /* Mark the pin_display early so that we account for the 3595 /* Mark the pin_display early so that we account for the
3525 * display coherency whilst setting up the cache domains. 3596 * display coherency whilst setting up the cache domains.
3526 */ 3597 */
@@ -3554,8 +3625,22 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
3554 if (view->type == I915_GGTT_VIEW_NORMAL) 3625 if (view->type == I915_GGTT_VIEW_NORMAL)
3555 vma = i915_gem_object_ggtt_pin(obj, view, 0, alignment, 3626 vma = i915_gem_object_ggtt_pin(obj, view, 0, alignment,
3556 PIN_MAPPABLE | PIN_NONBLOCK); 3627 PIN_MAPPABLE | PIN_NONBLOCK);
3557 if (IS_ERR(vma)) 3628 if (IS_ERR(vma)) {
3558 vma = i915_gem_object_ggtt_pin(obj, view, 0, alignment, 0); 3629 struct drm_i915_private *i915 = to_i915(obj->base.dev);
3630 unsigned int flags;
3631
3632 /* Valleyview is definitely limited to scanning out the first
3633 * 512MiB. Lets presume this behaviour was inherited from the
3634 * g4x display engine and that all earlier gen are similarly
3635 * limited. Testing suggests that it is a little more
3636 * complicated than this. For example, Cherryview appears quite
3637 * happy to scanout from anywhere within its global aperture.
3638 */
3639 flags = 0;
3640 if (HAS_GMCH_DISPLAY(i915))
3641 flags = PIN_MAPPABLE;
3642 vma = i915_gem_object_ggtt_pin(obj, view, 0, alignment, flags);
3643 }
3559 if (IS_ERR(vma)) 3644 if (IS_ERR(vma))
3560 goto err_unpin_display; 3645 goto err_unpin_display;
3561 3646
@@ -3586,6 +3671,8 @@ err_unpin_display:
3586void 3671void
3587i915_gem_object_unpin_from_display_plane(struct i915_vma *vma) 3672i915_gem_object_unpin_from_display_plane(struct i915_vma *vma)
3588{ 3673{
3674 lockdep_assert_held(&vma->vm->dev->struct_mutex);
3675
3589 if (WARN_ON(vma->obj->pin_display == 0)) 3676 if (WARN_ON(vma->obj->pin_display == 0))
3590 return; 3677 return;
3591 3678
@@ -3613,7 +3700,14 @@ i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write)
3613 uint32_t old_write_domain, old_read_domains; 3700 uint32_t old_write_domain, old_read_domains;
3614 int ret; 3701 int ret;
3615 3702
3616 ret = i915_gem_object_wait_rendering(obj, !write); 3703 lockdep_assert_held(&obj->base.dev->struct_mutex);
3704
3705 ret = i915_gem_object_wait(obj,
3706 I915_WAIT_INTERRUPTIBLE |
3707 I915_WAIT_LOCKED |
3708 (write ? I915_WAIT_ALL : 0),
3709 MAX_SCHEDULE_TIMEOUT,
3710 NULL);
3617 if (ret) 3711 if (ret)
3618 return ret; 3712 return ret;
3619 3713
@@ -3635,7 +3729,7 @@ i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write)
3635 /* It should now be out of any other write domains, and we can update 3729 /* It should now be out of any other write domains, and we can update
3636 * the domain values for our changes. 3730 * the domain values for our changes.
3637 */ 3731 */
3638 BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) != 0); 3732 GEM_BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) != 0);
3639 3733
3640 /* If we're writing through the CPU, then the GPU read domains will 3734 /* If we're writing through the CPU, then the GPU read domains will
3641 * need to be invalidated at next use. 3735 * need to be invalidated at next use.
@@ -3669,11 +3763,7 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
3669 struct drm_i915_file_private *file_priv = file->driver_priv; 3763 struct drm_i915_file_private *file_priv = file->driver_priv;
3670 unsigned long recent_enough = jiffies - DRM_I915_THROTTLE_JIFFIES; 3764 unsigned long recent_enough = jiffies - DRM_I915_THROTTLE_JIFFIES;
3671 struct drm_i915_gem_request *request, *target = NULL; 3765 struct drm_i915_gem_request *request, *target = NULL;
3672 int ret; 3766 long ret;
3673
3674 ret = i915_gem_wait_for_error(&dev_priv->gpu_error);
3675 if (ret)
3676 return ret;
3677 3767
3678 /* ABI: return -EIO if already wedged */ 3768 /* ABI: return -EIO if already wedged */
3679 if (i915_terminally_wedged(&dev_priv->gpu_error)) 3769 if (i915_terminally_wedged(&dev_priv->gpu_error))
@@ -3700,10 +3790,12 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
3700 if (target == NULL) 3790 if (target == NULL)
3701 return 0; 3791 return 0;
3702 3792
3703 ret = i915_wait_request(target, I915_WAIT_INTERRUPTIBLE, NULL, NULL); 3793 ret = i915_wait_request(target,
3794 I915_WAIT_INTERRUPTIBLE,
3795 MAX_SCHEDULE_TIMEOUT);
3704 i915_gem_request_put(target); 3796 i915_gem_request_put(target);
3705 3797
3706 return ret; 3798 return ret < 0 ? ret : 0;
3707} 3799}
3708 3800
3709static bool 3801static bool
@@ -3770,6 +3862,7 @@ int __i915_vma_do_pin(struct i915_vma *vma,
3770 unsigned int bound = vma->flags; 3862 unsigned int bound = vma->flags;
3771 int ret; 3863 int ret;
3772 3864
3865 lockdep_assert_held(&vma->vm->dev->struct_mutex);
3773 GEM_BUG_ON((flags & (PIN_GLOBAL | PIN_USER)) == 0); 3866 GEM_BUG_ON((flags & (PIN_GLOBAL | PIN_USER)) == 0);
3774 GEM_BUG_ON((flags & PIN_GLOBAL) && !i915_vma_is_ggtt(vma)); 3867 GEM_BUG_ON((flags & PIN_GLOBAL) && !i915_vma_is_ggtt(vma));
3775 3868
@@ -3811,6 +3904,8 @@ i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
3811 struct i915_vma *vma; 3904 struct i915_vma *vma;
3812 int ret; 3905 int ret;
3813 3906
3907 lockdep_assert_held(&obj->base.dev->struct_mutex);
3908
3814 vma = i915_gem_obj_lookup_or_create_vma(obj, vm, view); 3909 vma = i915_gem_obj_lookup_or_create_vma(obj, vm, view);
3815 if (IS_ERR(vma)) 3910 if (IS_ERR(vma))
3816 return vma; 3911 return vma;
@@ -3901,83 +3996,42 @@ static __always_inline unsigned int __busy_write_id(unsigned int id)
3901} 3996}
3902 3997
3903static __always_inline unsigned int 3998static __always_inline unsigned int
3904__busy_set_if_active(const struct i915_gem_active *active, 3999__busy_set_if_active(const struct dma_fence *fence,
3905 unsigned int (*flag)(unsigned int id)) 4000 unsigned int (*flag)(unsigned int id))
3906{ 4001{
3907 struct drm_i915_gem_request *request; 4002 struct drm_i915_gem_request *rq;
3908 4003
3909 request = rcu_dereference(active->request); 4004 /* We have to check the current hw status of the fence as the uABI
3910 if (!request || i915_gem_request_completed(request)) 4005 * guarantees forward progress. We could rely on the idle worker
3911 return 0; 4006 * to eventually flush us, but to minimise latency just ask the
3912 4007 * hardware.
3913 /* This is racy. See __i915_gem_active_get_rcu() for an in detail
3914 * discussion of how to handle the race correctly, but for reporting
3915 * the busy state we err on the side of potentially reporting the
3916 * wrong engine as being busy (but we guarantee that the result
3917 * is at least self-consistent).
3918 *
3919 * As we use SLAB_DESTROY_BY_RCU, the request may be reallocated
3920 * whilst we are inspecting it, even under the RCU read lock as we are.
3921 * This means that there is a small window for the engine and/or the
3922 * seqno to have been overwritten. The seqno will always be in the
3923 * future compared to the intended, and so we know that if that
3924 * seqno is idle (on whatever engine) our request is idle and the
3925 * return 0 above is correct.
3926 * 4008 *
3927 * The issue is that if the engine is switched, it is just as likely 4009 * Note we only report on the status of native fences.
3928 * to report that it is busy (but since the switch happened, we know
3929 * the request should be idle). So there is a small chance that a busy
3930 * result is actually the wrong engine.
3931 *
3932 * So why don't we care?
3933 *
3934 * For starters, the busy ioctl is a heuristic that is by definition
3935 * racy. Even with perfect serialisation in the driver, the hardware
3936 * state is constantly advancing - the state we report to the user
3937 * is stale.
3938 *
3939 * The critical information for the busy-ioctl is whether the object
3940 * is idle as userspace relies on that to detect whether its next
3941 * access will stall, or if it has missed submitting commands to
3942 * the hardware allowing the GPU to stall. We never generate a
3943 * false-positive for idleness, thus busy-ioctl is reliable at the
3944 * most fundamental level, and we maintain the guarantee that a
3945 * busy object left to itself will eventually become idle (and stay
3946 * idle!).
3947 *
3948 * We allow ourselves the leeway of potentially misreporting the busy
3949 * state because that is an optimisation heuristic that is constantly
3950 * in flux. Being quickly able to detect the busy/idle state is much
3951 * more important than accurate logging of exactly which engines were
3952 * busy.
3953 *
3954 * For accuracy in reporting the engine, we could use
3955 *
3956 * result = 0;
3957 * request = __i915_gem_active_get_rcu(active);
3958 * if (request) {
3959 * if (!i915_gem_request_completed(request))
3960 * result = flag(request->engine->exec_id);
3961 * i915_gem_request_put(request);
3962 * }
3963 *
3964 * but that still remains susceptible to both hardware and userspace
3965 * races. So we accept making the result of that race slightly worse,
3966 * given the rarity of the race and its low impact on the result.
3967 */ 4010 */
3968 return flag(READ_ONCE(request->engine->exec_id)); 4011 if (!dma_fence_is_i915(fence))
4012 return 0;
4013
4014 /* opencode to_request() in order to avoid const warnings */
4015 rq = container_of(fence, struct drm_i915_gem_request, fence);
4016 if (i915_gem_request_completed(rq))
4017 return 0;
4018
4019 return flag(rq->engine->exec_id);
3969} 4020}
3970 4021
3971static __always_inline unsigned int 4022static __always_inline unsigned int
3972busy_check_reader(const struct i915_gem_active *active) 4023busy_check_reader(const struct dma_fence *fence)
3973{ 4024{
3974 return __busy_set_if_active(active, __busy_read_flag); 4025 return __busy_set_if_active(fence, __busy_read_flag);
3975} 4026}
3976 4027
3977static __always_inline unsigned int 4028static __always_inline unsigned int
3978busy_check_writer(const struct i915_gem_active *active) 4029busy_check_writer(const struct dma_fence *fence)
3979{ 4030{
3980 return __busy_set_if_active(active, __busy_write_id); 4031 if (!fence)
4032 return 0;
4033
4034 return __busy_set_if_active(fence, __busy_write_id);
3981} 4035}
3982 4036
3983int 4037int
@@ -3986,64 +4040,58 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
3986{ 4040{
3987 struct drm_i915_gem_busy *args = data; 4041 struct drm_i915_gem_busy *args = data;
3988 struct drm_i915_gem_object *obj; 4042 struct drm_i915_gem_object *obj;
3989 unsigned long active; 4043 struct reservation_object_list *list;
4044 unsigned int seq;
4045 int err;
3990 4046
3991 obj = i915_gem_object_lookup(file, args->handle); 4047 err = -ENOENT;
4048 rcu_read_lock();
4049 obj = i915_gem_object_lookup_rcu(file, args->handle);
3992 if (!obj) 4050 if (!obj)
3993 return -ENOENT; 4051 goto out;
3994 4052
3995 args->busy = 0; 4053 /* A discrepancy here is that we do not report the status of
3996 active = __I915_BO_ACTIVE(obj); 4054 * non-i915 fences, i.e. even though we may report the object as idle,
3997 if (active) { 4055 * a call to set-domain may still stall waiting for foreign rendering.
3998 int idx; 4056 * This also means that wait-ioctl may report an object as busy,
4057 * where busy-ioctl considers it idle.
4058 *
4059 * We trade the ability to warn of foreign fences to report on which
4060 * i915 engines are active for the object.
4061 *
4062 * Alternatively, we can trade that extra information on read/write
4063 * activity with
4064 * args->busy =
4065 * !reservation_object_test_signaled_rcu(obj->resv, true);
4066 * to report the overall busyness. This is what the wait-ioctl does.
4067 *
4068 */
4069retry:
4070 seq = raw_read_seqcount(&obj->resv->seq);
3999 4071
4000 /* Yes, the lookups are intentionally racy. 4072 /* Translate the exclusive fence to the READ *and* WRITE engine */
4001 * 4073 args->busy = busy_check_writer(rcu_dereference(obj->resv->fence_excl));
4002 * First, we cannot simply rely on __I915_BO_ACTIVE. We have
4003 * to regard the value as stale and as our ABI guarantees
4004 * forward progress, we confirm the status of each active
4005 * request with the hardware.
4006 *
4007 * Even though we guard the pointer lookup by RCU, that only
4008 * guarantees that the pointer and its contents remain
4009 * dereferencable and does *not* mean that the request we
4010 * have is the same as the one being tracked by the object.
4011 *
4012 * Consider that we lookup the request just as it is being
4013 * retired and freed. We take a local copy of the pointer,
4014 * but before we add its engine into the busy set, the other
4015 * thread reallocates it and assigns it to a task on another
4016 * engine with a fresh and incomplete seqno. Guarding against
4017 * that requires careful serialisation and reference counting,
4018 * i.e. using __i915_gem_active_get_request_rcu(). We don't,
4019 * instead we expect that if the result is busy, which engines
4020 * are busy is not completely reliable - we only guarantee
4021 * that the object was busy.
4022 */
4023 rcu_read_lock();
4024 4074
4025 for_each_active(active, idx) 4075 /* Translate shared fences to READ set of engines */
4026 args->busy |= busy_check_reader(&obj->last_read[idx]); 4076 list = rcu_dereference(obj->resv->fence);
4077 if (list) {
4078 unsigned int shared_count = list->shared_count, i;
4027 4079
4028 /* For ABI sanity, we only care that the write engine is in 4080 for (i = 0; i < shared_count; ++i) {
4029 * the set of read engines. This should be ensured by the 4081 struct dma_fence *fence =
4030 * ordering of setting last_read/last_write in 4082 rcu_dereference(list->shared[i]);
4031 * i915_vma_move_to_active(), and then in reverse in retire.
4032 * However, for good measure, we always report the last_write
4033 * request as a busy read as well as being a busy write.
4034 *
4035 * We don't care that the set of active read/write engines
4036 * may change during construction of the result, as it is
4037 * equally liable to change before userspace can inspect
4038 * the result.
4039 */
4040 args->busy |= busy_check_writer(&obj->last_write);
4041 4083
4042 rcu_read_unlock(); 4084 args->busy |= busy_check_reader(fence);
4085 }
4043 } 4086 }
4044 4087
4045 i915_gem_object_put_unlocked(obj); 4088 if (args->busy && read_seqcount_retry(&obj->resv->seq, seq))
4046 return 0; 4089 goto retry;
4090
4091 err = 0;
4092out:
4093 rcu_read_unlock();
4094 return err;
4047} 4095}
4048 4096
4049int 4097int
@@ -4060,7 +4108,7 @@ i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
4060 struct drm_i915_private *dev_priv = to_i915(dev); 4108 struct drm_i915_private *dev_priv = to_i915(dev);
4061 struct drm_i915_gem_madvise *args = data; 4109 struct drm_i915_gem_madvise *args = data;
4062 struct drm_i915_gem_object *obj; 4110 struct drm_i915_gem_object *obj;
4063 int ret; 4111 int err;
4064 4112
4065 switch (args->madv) { 4113 switch (args->madv) {
4066 case I915_MADV_DONTNEED: 4114 case I915_MADV_DONTNEED:
@@ -4070,65 +4118,72 @@ i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
4070 return -EINVAL; 4118 return -EINVAL;
4071 } 4119 }
4072 4120
4073 ret = i915_mutex_lock_interruptible(dev);
4074 if (ret)
4075 return ret;
4076
4077 obj = i915_gem_object_lookup(file_priv, args->handle); 4121 obj = i915_gem_object_lookup(file_priv, args->handle);
4078 if (!obj) { 4122 if (!obj)
4079 ret = -ENOENT; 4123 return -ENOENT;
4080 goto unlock;
4081 }
4082 4124
4083 if (obj->pages && 4125 err = mutex_lock_interruptible(&obj->mm.lock);
4126 if (err)
4127 goto out;
4128
4129 if (obj->mm.pages &&
4084 i915_gem_object_is_tiled(obj) && 4130 i915_gem_object_is_tiled(obj) &&
4085 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) { 4131 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) {
4086 if (obj->madv == I915_MADV_WILLNEED) 4132 if (obj->mm.madv == I915_MADV_WILLNEED) {
4087 i915_gem_object_unpin_pages(obj); 4133 GEM_BUG_ON(!obj->mm.quirked);
4088 if (args->madv == I915_MADV_WILLNEED) 4134 __i915_gem_object_unpin_pages(obj);
4089 i915_gem_object_pin_pages(obj); 4135 obj->mm.quirked = false;
4136 }
4137 if (args->madv == I915_MADV_WILLNEED) {
4138 GEM_BUG_ON(obj->mm.quirked);
4139 __i915_gem_object_pin_pages(obj);
4140 obj->mm.quirked = true;
4141 }
4090 } 4142 }
4091 4143
4092 if (obj->madv != __I915_MADV_PURGED) 4144 if (obj->mm.madv != __I915_MADV_PURGED)
4093 obj->madv = args->madv; 4145 obj->mm.madv = args->madv;
4094 4146
4095 /* if the object is no longer attached, discard its backing storage */ 4147 /* if the object is no longer attached, discard its backing storage */
4096 if (obj->madv == I915_MADV_DONTNEED && obj->pages == NULL) 4148 if (obj->mm.madv == I915_MADV_DONTNEED && !obj->mm.pages)
4097 i915_gem_object_truncate(obj); 4149 i915_gem_object_truncate(obj);
4098 4150
4099 args->retained = obj->madv != __I915_MADV_PURGED; 4151 args->retained = obj->mm.madv != __I915_MADV_PURGED;
4152 mutex_unlock(&obj->mm.lock);
4100 4153
4154out:
4101 i915_gem_object_put(obj); 4155 i915_gem_object_put(obj);
4102unlock: 4156 return err;
4103 mutex_unlock(&dev->struct_mutex);
4104 return ret;
4105} 4157}
4106 4158
4107void i915_gem_object_init(struct drm_i915_gem_object *obj, 4159void i915_gem_object_init(struct drm_i915_gem_object *obj,
4108 const struct drm_i915_gem_object_ops *ops) 4160 const struct drm_i915_gem_object_ops *ops)
4109{ 4161{
4110 int i; 4162 mutex_init(&obj->mm.lock);
4111 4163
4112 INIT_LIST_HEAD(&obj->global_list); 4164 INIT_LIST_HEAD(&obj->global_link);
4113 for (i = 0; i < I915_NUM_ENGINES; i++) 4165 INIT_LIST_HEAD(&obj->userfault_link);
4114 init_request_active(&obj->last_read[i],
4115 i915_gem_object_retire__read);
4116 init_request_active(&obj->last_write,
4117 i915_gem_object_retire__write);
4118 INIT_LIST_HEAD(&obj->obj_exec_link); 4166 INIT_LIST_HEAD(&obj->obj_exec_link);
4119 INIT_LIST_HEAD(&obj->vma_list); 4167 INIT_LIST_HEAD(&obj->vma_list);
4120 INIT_LIST_HEAD(&obj->batch_pool_link); 4168 INIT_LIST_HEAD(&obj->batch_pool_link);
4121 4169
4122 obj->ops = ops; 4170 obj->ops = ops;
4123 4171
4172 reservation_object_init(&obj->__builtin_resv);
4173 obj->resv = &obj->__builtin_resv;
4174
4124 obj->frontbuffer_ggtt_origin = ORIGIN_GTT; 4175 obj->frontbuffer_ggtt_origin = ORIGIN_GTT;
4125 obj->madv = I915_MADV_WILLNEED; 4176
4177 obj->mm.madv = I915_MADV_WILLNEED;
4178 INIT_RADIX_TREE(&obj->mm.get_page.radix, GFP_KERNEL | __GFP_NOWARN);
4179 mutex_init(&obj->mm.get_page.lock);
4126 4180
4127 i915_gem_info_add_obj(to_i915(obj->base.dev), obj->base.size); 4181 i915_gem_info_add_obj(to_i915(obj->base.dev), obj->base.size);
4128} 4182}
4129 4183
4130static const struct drm_i915_gem_object_ops i915_gem_object_ops = { 4184static const struct drm_i915_gem_object_ops i915_gem_object_ops = {
4131 .flags = I915_GEM_OBJECT_HAS_STRUCT_PAGE, 4185 .flags = I915_GEM_OBJECT_HAS_STRUCT_PAGE |
4186 I915_GEM_OBJECT_IS_SHRINKABLE,
4132 .get_pages = i915_gem_object_get_pages_gtt, 4187 .get_pages = i915_gem_object_get_pages_gtt,
4133 .put_pages = i915_gem_object_put_pages_gtt, 4188 .put_pages = i915_gem_object_put_pages_gtt,
4134}; 4189};
@@ -4140,6 +4195,7 @@ static const struct drm_i915_gem_object_ops i915_gem_object_ops = {
4140struct drm_i915_gem_object * 4195struct drm_i915_gem_object *
4141i915_gem_object_create(struct drm_device *dev, u64 size) 4196i915_gem_object_create(struct drm_device *dev, u64 size)
4142{ 4197{
4198 struct drm_i915_private *dev_priv = to_i915(dev);
4143 struct drm_i915_gem_object *obj; 4199 struct drm_i915_gem_object *obj;
4144 struct address_space *mapping; 4200 struct address_space *mapping;
4145 gfp_t mask; 4201 gfp_t mask;
@@ -4165,7 +4221,7 @@ i915_gem_object_create(struct drm_device *dev, u64 size)
4165 goto fail; 4221 goto fail;
4166 4222
4167 mask = GFP_HIGHUSER | __GFP_RECLAIMABLE; 4223 mask = GFP_HIGHUSER | __GFP_RECLAIMABLE;
4168 if (IS_CRESTLINE(dev) || IS_BROADWATER(dev)) { 4224 if (IS_CRESTLINE(dev_priv) || IS_BROADWATER(dev_priv)) {
4169 /* 965gm cannot relocate objects above 4GiB. */ 4225 /* 965gm cannot relocate objects above 4GiB. */
4170 mask &= ~__GFP_HIGHMEM; 4226 mask &= ~__GFP_HIGHMEM;
4171 mask |= __GFP_DMA32; 4227 mask |= __GFP_DMA32;
@@ -4202,7 +4258,6 @@ i915_gem_object_create(struct drm_device *dev, u64 size)
4202 4258
4203fail: 4259fail:
4204 i915_gem_object_free(obj); 4260 i915_gem_object_free(obj);
4205
4206 return ERR_PTR(ret); 4261 return ERR_PTR(ret);
4207} 4262}
4208 4263
@@ -4214,7 +4269,7 @@ static bool discard_backing_storage(struct drm_i915_gem_object *obj)
4214 * back the contents from the GPU. 4269 * back the contents from the GPU.
4215 */ 4270 */
4216 4271
4217 if (obj->madv != I915_MADV_WILLNEED) 4272 if (obj->mm.madv != I915_MADV_WILLNEED)
4218 return false; 4273 return false;
4219 4274
4220 if (obj->base.filp == NULL) 4275 if (obj->base.filp == NULL)
@@ -4230,16 +4285,72 @@ static bool discard_backing_storage(struct drm_i915_gem_object *obj)
4230 return atomic_long_read(&obj->base.filp->f_count) == 1; 4285 return atomic_long_read(&obj->base.filp->f_count) == 1;
4231} 4286}
4232 4287
4233void i915_gem_free_object(struct drm_gem_object *gem_obj) 4288static void __i915_gem_free_objects(struct drm_i915_private *i915,
4289 struct llist_node *freed)
4234{ 4290{
4235 struct drm_i915_gem_object *obj = to_intel_bo(gem_obj); 4291 struct drm_i915_gem_object *obj, *on;
4236 struct drm_device *dev = obj->base.dev;
4237 struct drm_i915_private *dev_priv = to_i915(dev);
4238 struct i915_vma *vma, *next;
4239 4292
4240 intel_runtime_pm_get(dev_priv); 4293 mutex_lock(&i915->drm.struct_mutex);
4294 intel_runtime_pm_get(i915);
4295 llist_for_each_entry(obj, freed, freed) {
4296 struct i915_vma *vma, *vn;
4241 4297
4242 trace_i915_gem_object_destroy(obj); 4298 trace_i915_gem_object_destroy(obj);
4299
4300 GEM_BUG_ON(i915_gem_object_is_active(obj));
4301 list_for_each_entry_safe(vma, vn,
4302 &obj->vma_list, obj_link) {
4303 GEM_BUG_ON(!i915_vma_is_ggtt(vma));
4304 GEM_BUG_ON(i915_vma_is_active(vma));
4305 vma->flags &= ~I915_VMA_PIN_MASK;
4306 i915_vma_close(vma);
4307 }
4308 GEM_BUG_ON(!list_empty(&obj->vma_list));
4309 GEM_BUG_ON(!RB_EMPTY_ROOT(&obj->vma_tree));
4310
4311 list_del(&obj->global_link);
4312 }
4313 intel_runtime_pm_put(i915);
4314 mutex_unlock(&i915->drm.struct_mutex);
4315
4316 llist_for_each_entry_safe(obj, on, freed, freed) {
4317 GEM_BUG_ON(obj->bind_count);
4318 GEM_BUG_ON(atomic_read(&obj->frontbuffer_bits));
4319
4320 if (obj->ops->release)
4321 obj->ops->release(obj);
4322
4323 if (WARN_ON(i915_gem_object_has_pinned_pages(obj)))
4324 atomic_set(&obj->mm.pages_pin_count, 0);
4325 __i915_gem_object_put_pages(obj, I915_MM_NORMAL);
4326 GEM_BUG_ON(obj->mm.pages);
4327
4328 if (obj->base.import_attach)
4329 drm_prime_gem_destroy(&obj->base, NULL);
4330
4331 reservation_object_fini(&obj->__builtin_resv);
4332 drm_gem_object_release(&obj->base);
4333 i915_gem_info_remove_obj(i915, obj->base.size);
4334
4335 kfree(obj->bit_17);
4336 i915_gem_object_free(obj);
4337 }
4338}
4339
4340static void i915_gem_flush_free_objects(struct drm_i915_private *i915)
4341{
4342 struct llist_node *freed;
4343
4344 freed = llist_del_all(&i915->mm.free_list);
4345 if (unlikely(freed))
4346 __i915_gem_free_objects(i915, freed);
4347}
4348
4349static void __i915_gem_free_work(struct work_struct *work)
4350{
4351 struct drm_i915_private *i915 =
4352 container_of(work, struct drm_i915_private, mm.free_work);
4353 struct llist_node *freed;
4243 4354
4244 /* All file-owned VMA should have been released by this point through 4355 /* All file-owned VMA should have been released by this point through
4245 * i915_gem_close_object(), or earlier by i915_gem_context_close(). 4356 * i915_gem_close_object(), or earlier by i915_gem_context_close().
@@ -4248,47 +4359,62 @@ void i915_gem_free_object(struct drm_gem_object *gem_obj)
4248 * the GTT either for the user or for scanout). Those VMA still need to 4359 * the GTT either for the user or for scanout). Those VMA still need to
4249 * unbound now. 4360 * unbound now.
4250 */ 4361 */
4251 list_for_each_entry_safe(vma, next, &obj->vma_list, obj_link) {
4252 GEM_BUG_ON(!i915_vma_is_ggtt(vma));
4253 GEM_BUG_ON(i915_vma_is_active(vma));
4254 vma->flags &= ~I915_VMA_PIN_MASK;
4255 i915_vma_close(vma);
4256 }
4257 GEM_BUG_ON(obj->bind_count);
4258 4362
4259 /* Stolen objects don't hold a ref, but do hold pin count. Fix that up 4363 while ((freed = llist_del_all(&i915->mm.free_list)))
4260 * before progressing. */ 4364 __i915_gem_free_objects(i915, freed);
4261 if (obj->stolen) 4365}
4262 i915_gem_object_unpin_pages(obj); 4366
4367static void __i915_gem_free_object_rcu(struct rcu_head *head)
4368{
4369 struct drm_i915_gem_object *obj =
4370 container_of(head, typeof(*obj), rcu);
4371 struct drm_i915_private *i915 = to_i915(obj->base.dev);
4372
4373 /* We can't simply use call_rcu() from i915_gem_free_object()
4374 * as we need to block whilst unbinding, and the call_rcu
4375 * task may be called from softirq context. So we take a
4376 * detour through a worker.
4377 */
4378 if (llist_add(&obj->freed, &i915->mm.free_list))
4379 schedule_work(&i915->mm.free_work);
4380}
4263 4381
4264 WARN_ON(atomic_read(&obj->frontbuffer_bits)); 4382void i915_gem_free_object(struct drm_gem_object *gem_obj)
4383{
4384 struct drm_i915_gem_object *obj = to_intel_bo(gem_obj);
4265 4385
4266 if (obj->pages && obj->madv == I915_MADV_WILLNEED && 4386 if (obj->mm.quirked)
4267 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES && 4387 __i915_gem_object_unpin_pages(obj);
4268 i915_gem_object_is_tiled(obj))
4269 i915_gem_object_unpin_pages(obj);
4270 4388
4271 if (WARN_ON(obj->pages_pin_count))
4272 obj->pages_pin_count = 0;
4273 if (discard_backing_storage(obj)) 4389 if (discard_backing_storage(obj))
4274 obj->madv = I915_MADV_DONTNEED; 4390 obj->mm.madv = I915_MADV_DONTNEED;
4275 i915_gem_object_put_pages(obj);
4276
4277 BUG_ON(obj->pages);
4278 4391
4279 if (obj->base.import_attach) 4392 /* Before we free the object, make sure any pure RCU-only
4280 drm_prime_gem_destroy(&obj->base, NULL); 4393 * read-side critical sections are complete, e.g.
4394 * i915_gem_busy_ioctl(). For the corresponding synchronized
4395 * lookup see i915_gem_object_lookup_rcu().
4396 */
4397 call_rcu(&obj->rcu, __i915_gem_free_object_rcu);
4398}
4281 4399
4282 if (obj->ops->release) 4400void __i915_gem_object_release_unless_active(struct drm_i915_gem_object *obj)
4283 obj->ops->release(obj); 4401{
4402 lockdep_assert_held(&obj->base.dev->struct_mutex);
4284 4403
4285 drm_gem_object_release(&obj->base); 4404 GEM_BUG_ON(i915_gem_object_has_active_reference(obj));
4286 i915_gem_info_remove_obj(dev_priv, obj->base.size); 4405 if (i915_gem_object_is_active(obj))
4406 i915_gem_object_set_active_reference(obj);
4407 else
4408 i915_gem_object_put(obj);
4409}
4287 4410
4288 kfree(obj->bit_17); 4411static void assert_kernel_context_is_current(struct drm_i915_private *dev_priv)
4289 i915_gem_object_free(obj); 4412{
4413 struct intel_engine_cs *engine;
4414 enum intel_engine_id id;
4290 4415
4291 intel_runtime_pm_put(dev_priv); 4416 for_each_engine(engine, dev_priv, id)
4417 GEM_BUG_ON(engine->last_context != dev_priv->kernel_context);
4292} 4418}
4293 4419
4294int i915_gem_suspend(struct drm_device *dev) 4420int i915_gem_suspend(struct drm_device *dev)
@@ -4319,18 +4445,22 @@ int i915_gem_suspend(struct drm_device *dev)
4319 goto err; 4445 goto err;
4320 4446
4321 i915_gem_retire_requests(dev_priv); 4447 i915_gem_retire_requests(dev_priv);
4448 GEM_BUG_ON(dev_priv->gt.active_requests);
4322 4449
4450 assert_kernel_context_is_current(dev_priv);
4323 i915_gem_context_lost(dev_priv); 4451 i915_gem_context_lost(dev_priv);
4324 mutex_unlock(&dev->struct_mutex); 4452 mutex_unlock(&dev->struct_mutex);
4325 4453
4326 cancel_delayed_work_sync(&dev_priv->gpu_error.hangcheck_work); 4454 cancel_delayed_work_sync(&dev_priv->gpu_error.hangcheck_work);
4327 cancel_delayed_work_sync(&dev_priv->gt.retire_work); 4455 cancel_delayed_work_sync(&dev_priv->gt.retire_work);
4328 flush_delayed_work(&dev_priv->gt.idle_work); 4456 flush_delayed_work(&dev_priv->gt.idle_work);
4457 flush_work(&dev_priv->mm.free_work);
4329 4458
4330 /* Assert that we sucessfully flushed all the work and 4459 /* Assert that we sucessfully flushed all the work and
4331 * reset the GPU back to its idle, low power state. 4460 * reset the GPU back to its idle, low power state.
4332 */ 4461 */
4333 WARN_ON(dev_priv->gt.awake); 4462 WARN_ON(dev_priv->gt.awake);
4463 WARN_ON(!intel_execlists_idle(dev_priv));
4334 4464
4335 /* 4465 /*
4336 * Neither the BIOS, ourselves or any other kernel 4466 * Neither the BIOS, ourselves or any other kernel
@@ -4367,6 +4497,8 @@ void i915_gem_resume(struct drm_device *dev)
4367{ 4497{
4368 struct drm_i915_private *dev_priv = to_i915(dev); 4498 struct drm_i915_private *dev_priv = to_i915(dev);
4369 4499
4500 WARN_ON(dev_priv->gt.awake);
4501
4370 mutex_lock(&dev->struct_mutex); 4502 mutex_lock(&dev->struct_mutex);
4371 i915_gem_restore_gtt_mappings(dev); 4503 i915_gem_restore_gtt_mappings(dev);
4372 4504
@@ -4437,6 +4569,8 @@ i915_gem_init_hw(struct drm_device *dev)
4437 enum intel_engine_id id; 4569 enum intel_engine_id id;
4438 int ret; 4570 int ret;
4439 4571
4572 dev_priv->gt.last_init_time = ktime_get();
4573
4440 /* Double layer security blanket, see i915_gem_init() */ 4574 /* Double layer security blanket, see i915_gem_init() */
4441 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); 4575 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
4442 4576
@@ -4615,33 +4749,43 @@ i915_gem_load_init_fences(struct drm_i915_private *dev_priv)
4615 i915_gem_detect_bit_6_swizzle(dev); 4749 i915_gem_detect_bit_6_swizzle(dev);
4616} 4750}
4617 4751
4618void 4752int
4619i915_gem_load_init(struct drm_device *dev) 4753i915_gem_load_init(struct drm_device *dev)
4620{ 4754{
4621 struct drm_i915_private *dev_priv = to_i915(dev); 4755 struct drm_i915_private *dev_priv = to_i915(dev);
4756 int err = -ENOMEM;
4757
4758 dev_priv->objects = KMEM_CACHE(drm_i915_gem_object, SLAB_HWCACHE_ALIGN);
4759 if (!dev_priv->objects)
4760 goto err_out;
4761
4762 dev_priv->vmas = KMEM_CACHE(i915_vma, SLAB_HWCACHE_ALIGN);
4763 if (!dev_priv->vmas)
4764 goto err_objects;
4622 4765
4623 dev_priv->objects = 4766 dev_priv->requests = KMEM_CACHE(drm_i915_gem_request,
4624 kmem_cache_create("i915_gem_object", 4767 SLAB_HWCACHE_ALIGN |
4625 sizeof(struct drm_i915_gem_object), 0, 4768 SLAB_RECLAIM_ACCOUNT |
4626 SLAB_HWCACHE_ALIGN, 4769 SLAB_DESTROY_BY_RCU);
4627 NULL); 4770 if (!dev_priv->requests)
4628 dev_priv->vmas = 4771 goto err_vmas;
4629 kmem_cache_create("i915_gem_vma", 4772
4630 sizeof(struct i915_vma), 0, 4773 mutex_lock(&dev_priv->drm.struct_mutex);
4631 SLAB_HWCACHE_ALIGN, 4774 INIT_LIST_HEAD(&dev_priv->gt.timelines);
4632 NULL); 4775 err = i915_gem_timeline_init(dev_priv,
4633 dev_priv->requests = 4776 &dev_priv->gt.global_timeline,
4634 kmem_cache_create("i915_gem_request", 4777 "[execution]");
4635 sizeof(struct drm_i915_gem_request), 0, 4778 mutex_unlock(&dev_priv->drm.struct_mutex);
4636 SLAB_HWCACHE_ALIGN | 4779 if (err)
4637 SLAB_RECLAIM_ACCOUNT | 4780 goto err_requests;
4638 SLAB_DESTROY_BY_RCU,
4639 NULL);
4640 4781
4641 INIT_LIST_HEAD(&dev_priv->context_list); 4782 INIT_LIST_HEAD(&dev_priv->context_list);
4783 INIT_WORK(&dev_priv->mm.free_work, __i915_gem_free_work);
4784 init_llist_head(&dev_priv->mm.free_list);
4642 INIT_LIST_HEAD(&dev_priv->mm.unbound_list); 4785 INIT_LIST_HEAD(&dev_priv->mm.unbound_list);
4643 INIT_LIST_HEAD(&dev_priv->mm.bound_list); 4786 INIT_LIST_HEAD(&dev_priv->mm.bound_list);
4644 INIT_LIST_HEAD(&dev_priv->mm.fence_list); 4787 INIT_LIST_HEAD(&dev_priv->mm.fence_list);
4788 INIT_LIST_HEAD(&dev_priv->mm.userfault_list);
4645 INIT_DELAYED_WORK(&dev_priv->gt.retire_work, 4789 INIT_DELAYED_WORK(&dev_priv->gt.retire_work,
4646 i915_gem_retire_work_handler); 4790 i915_gem_retire_work_handler);
4647 INIT_DELAYED_WORK(&dev_priv->gt.idle_work, 4791 INIT_DELAYED_WORK(&dev_priv->gt.idle_work,
@@ -4658,12 +4802,25 @@ i915_gem_load_init(struct drm_device *dev)
4658 atomic_set(&dev_priv->mm.bsd_engine_dispatch_index, 0); 4802 atomic_set(&dev_priv->mm.bsd_engine_dispatch_index, 0);
4659 4803
4660 spin_lock_init(&dev_priv->fb_tracking.lock); 4804 spin_lock_init(&dev_priv->fb_tracking.lock);
4805
4806 return 0;
4807
4808err_requests:
4809 kmem_cache_destroy(dev_priv->requests);
4810err_vmas:
4811 kmem_cache_destroy(dev_priv->vmas);
4812err_objects:
4813 kmem_cache_destroy(dev_priv->objects);
4814err_out:
4815 return err;
4661} 4816}
4662 4817
4663void i915_gem_load_cleanup(struct drm_device *dev) 4818void i915_gem_load_cleanup(struct drm_device *dev)
4664{ 4819{
4665 struct drm_i915_private *dev_priv = to_i915(dev); 4820 struct drm_i915_private *dev_priv = to_i915(dev);
4666 4821
4822 WARN_ON(!llist_empty(&dev_priv->mm.free_list));
4823
4667 kmem_cache_destroy(dev_priv->requests); 4824 kmem_cache_destroy(dev_priv->requests);
4668 kmem_cache_destroy(dev_priv->vmas); 4825 kmem_cache_destroy(dev_priv->vmas);
4669 kmem_cache_destroy(dev_priv->objects); 4826 kmem_cache_destroy(dev_priv->objects);
@@ -4712,7 +4869,7 @@ int i915_gem_freeze_late(struct drm_i915_private *dev_priv)
4712 i915_gem_shrink(dev_priv, -1UL, I915_SHRINK_UNBOUND); 4869 i915_gem_shrink(dev_priv, -1UL, I915_SHRINK_UNBOUND);
4713 4870
4714 for (p = phases; *p; p++) { 4871 for (p = phases; *p; p++) {
4715 list_for_each_entry(obj, *p, global_list) { 4872 list_for_each_entry(obj, *p, global_link) {
4716 obj->base.read_domains = I915_GEM_DOMAIN_CPU; 4873 obj->base.read_domains = I915_GEM_DOMAIN_CPU;
4717 obj->base.write_domain = I915_GEM_DOMAIN_CPU; 4874 obj->base.write_domain = I915_GEM_DOMAIN_CPU;
4718 } 4875 }
@@ -4804,21 +4961,6 @@ void i915_gem_track_fb(struct drm_i915_gem_object *old,
4804 } 4961 }
4805} 4962}
4806 4963
4807/* Like i915_gem_object_get_page(), but mark the returned page dirty */
4808struct page *
4809i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj, int n)
4810{
4811 struct page *page;
4812
4813 /* Only default objects have per-page dirty tracking */
4814 if (WARN_ON(!i915_gem_object_has_struct_page(obj)))
4815 return NULL;
4816
4817 page = i915_gem_object_get_page(obj, n);
4818 set_page_dirty(page);
4819 return page;
4820}
4821
4822/* Allocate a new GEM object and fill it with the supplied data */ 4964/* Allocate a new GEM object and fill it with the supplied data */
4823struct drm_i915_gem_object * 4965struct drm_i915_gem_object *
4824i915_gem_object_create_from_data(struct drm_device *dev, 4966i915_gem_object_create_from_data(struct drm_device *dev,
@@ -4837,14 +4979,13 @@ i915_gem_object_create_from_data(struct drm_device *dev,
4837 if (ret) 4979 if (ret)
4838 goto fail; 4980 goto fail;
4839 4981
4840 ret = i915_gem_object_get_pages(obj); 4982 ret = i915_gem_object_pin_pages(obj);
4841 if (ret) 4983 if (ret)
4842 goto fail; 4984 goto fail;
4843 4985
4844 i915_gem_object_pin_pages(obj); 4986 sg = obj->mm.pages;
4845 sg = obj->pages;
4846 bytes = sg_copy_from_buffer(sg->sgl, sg->nents, (void *)data, size); 4987 bytes = sg_copy_from_buffer(sg->sgl, sg->nents, (void *)data, size);
4847 obj->dirty = 1; /* Backing store is now out of date */ 4988 obj->mm.dirty = true; /* Backing store is now out of date */
4848 i915_gem_object_unpin_pages(obj); 4989 i915_gem_object_unpin_pages(obj);
4849 4990
4850 if (WARN_ON(bytes != size)) { 4991 if (WARN_ON(bytes != size)) {
@@ -4859,3 +5000,156 @@ fail:
4859 i915_gem_object_put(obj); 5000 i915_gem_object_put(obj);
4860 return ERR_PTR(ret); 5001 return ERR_PTR(ret);
4861} 5002}
5003
5004struct scatterlist *
5005i915_gem_object_get_sg(struct drm_i915_gem_object *obj,
5006 unsigned int n,
5007 unsigned int *offset)
5008{
5009 struct i915_gem_object_page_iter *iter = &obj->mm.get_page;
5010 struct scatterlist *sg;
5011 unsigned int idx, count;
5012
5013 might_sleep();
5014 GEM_BUG_ON(n >= obj->base.size >> PAGE_SHIFT);
5015 GEM_BUG_ON(!i915_gem_object_has_pinned_pages(obj));
5016
5017 /* As we iterate forward through the sg, we record each entry in a
5018 * radixtree for quick repeated (backwards) lookups. If we have seen
5019 * this index previously, we will have an entry for it.
5020 *
5021 * Initial lookup is O(N), but this is amortized to O(1) for
5022 * sequential page access (where each new request is consecutive
5023 * to the previous one). Repeated lookups are O(lg(obj->base.size)),
5024 * i.e. O(1) with a large constant!
5025 */
5026 if (n < READ_ONCE(iter->sg_idx))
5027 goto lookup;
5028
5029 mutex_lock(&iter->lock);
5030
5031 /* We prefer to reuse the last sg so that repeated lookup of this
5032 * (or the subsequent) sg are fast - comparing against the last
5033 * sg is faster than going through the radixtree.
5034 */
5035
5036 sg = iter->sg_pos;
5037 idx = iter->sg_idx;
5038 count = __sg_page_count(sg);
5039
5040 while (idx + count <= n) {
5041 unsigned long exception, i;
5042 int ret;
5043
5044 /* If we cannot allocate and insert this entry, or the
5045 * individual pages from this range, cancel updating the
5046 * sg_idx so that on this lookup we are forced to linearly
5047 * scan onwards, but on future lookups we will try the
5048 * insertion again (in which case we need to be careful of
5049 * the error return reporting that we have already inserted
5050 * this index).
5051 */
5052 ret = radix_tree_insert(&iter->radix, idx, sg);
5053 if (ret && ret != -EEXIST)
5054 goto scan;
5055
5056 exception =
5057 RADIX_TREE_EXCEPTIONAL_ENTRY |
5058 idx << RADIX_TREE_EXCEPTIONAL_SHIFT;
5059 for (i = 1; i < count; i++) {
5060 ret = radix_tree_insert(&iter->radix, idx + i,
5061 (void *)exception);
5062 if (ret && ret != -EEXIST)
5063 goto scan;
5064 }
5065
5066 idx += count;
5067 sg = ____sg_next(sg);
5068 count = __sg_page_count(sg);
5069 }
5070
5071scan:
5072 iter->sg_pos = sg;
5073 iter->sg_idx = idx;
5074
5075 mutex_unlock(&iter->lock);
5076
5077 if (unlikely(n < idx)) /* insertion completed by another thread */
5078 goto lookup;
5079
5080 /* In case we failed to insert the entry into the radixtree, we need
5081 * to look beyond the current sg.
5082 */
5083 while (idx + count <= n) {
5084 idx += count;
5085 sg = ____sg_next(sg);
5086 count = __sg_page_count(sg);
5087 }
5088
5089 *offset = n - idx;
5090 return sg;
5091
5092lookup:
5093 rcu_read_lock();
5094
5095 sg = radix_tree_lookup(&iter->radix, n);
5096 GEM_BUG_ON(!sg);
5097
5098 /* If this index is in the middle of multi-page sg entry,
5099 * the radixtree will contain an exceptional entry that points
5100 * to the start of that range. We will return the pointer to
5101 * the base page and the offset of this page within the
5102 * sg entry's range.
5103 */
5104 *offset = 0;
5105 if (unlikely(radix_tree_exception(sg))) {
5106 unsigned long base =
5107 (unsigned long)sg >> RADIX_TREE_EXCEPTIONAL_SHIFT;
5108
5109 sg = radix_tree_lookup(&iter->radix, base);
5110 GEM_BUG_ON(!sg);
5111
5112 *offset = n - base;
5113 }
5114
5115 rcu_read_unlock();
5116
5117 return sg;
5118}
5119
5120struct page *
5121i915_gem_object_get_page(struct drm_i915_gem_object *obj, unsigned int n)
5122{
5123 struct scatterlist *sg;
5124 unsigned int offset;
5125
5126 GEM_BUG_ON(!i915_gem_object_has_struct_page(obj));
5127
5128 sg = i915_gem_object_get_sg(obj, n, &offset);
5129 return nth_page(sg_page(sg), offset);
5130}
5131
5132/* Like i915_gem_object_get_page(), but mark the returned page dirty */
5133struct page *
5134i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj,
5135 unsigned int n)
5136{
5137 struct page *page;
5138
5139 page = i915_gem_object_get_page(obj, n);
5140 if (!obj->mm.dirty)
5141 set_page_dirty(page);
5142
5143 return page;
5144}
5145
5146dma_addr_t
5147i915_gem_object_get_dma_address(struct drm_i915_gem_object *obj,
5148 unsigned long n)
5149{
5150 struct scatterlist *sg;
5151 unsigned int offset;
5152
5153 sg = i915_gem_object_get_sg(obj, n, &offset);
5154 return sg_dma_address(sg) + (offset << PAGE_SHIFT);
5155}
diff --git a/drivers/gpu/drm/i915/i915_gem.h b/drivers/gpu/drm/i915/i915_gem.h
index 8292e797d9b5..735580d72eb1 100644
--- a/drivers/gpu/drm/i915/i915_gem.h
+++ b/drivers/gpu/drm/i915/i915_gem.h
@@ -31,4 +31,6 @@
31#define GEM_BUG_ON(expr) 31#define GEM_BUG_ON(expr)
32#endif 32#endif
33 33
34#define I915_NUM_ENGINES 5
35
34#endif /* __I915_GEM_H__ */ 36#endif /* __I915_GEM_H__ */
diff --git a/drivers/gpu/drm/i915/i915_gem_batch_pool.c b/drivers/gpu/drm/i915/i915_gem_batch_pool.c
index ed989596d9a3..b3bc119ec1bb 100644
--- a/drivers/gpu/drm/i915/i915_gem_batch_pool.c
+++ b/drivers/gpu/drm/i915/i915_gem_batch_pool.c
@@ -73,7 +73,7 @@ void i915_gem_batch_pool_fini(struct i915_gem_batch_pool *pool)
73 list_for_each_entry_safe(obj, next, 73 list_for_each_entry_safe(obj, next,
74 &pool->cache_list[n], 74 &pool->cache_list[n],
75 batch_pool_link) 75 batch_pool_link)
76 i915_gem_object_put(obj); 76 __i915_gem_object_release_unless_active(obj);
77 77
78 INIT_LIST_HEAD(&pool->cache_list[n]); 78 INIT_LIST_HEAD(&pool->cache_list[n]);
79 } 79 }
@@ -97,9 +97,9 @@ i915_gem_batch_pool_get(struct i915_gem_batch_pool *pool,
97 size_t size) 97 size_t size)
98{ 98{
99 struct drm_i915_gem_object *obj = NULL; 99 struct drm_i915_gem_object *obj = NULL;
100 struct drm_i915_gem_object *tmp, *next; 100 struct drm_i915_gem_object *tmp;
101 struct list_head *list; 101 struct list_head *list;
102 int n; 102 int n, ret;
103 103
104 lockdep_assert_held(&pool->engine->i915->drm.struct_mutex); 104 lockdep_assert_held(&pool->engine->i915->drm.struct_mutex);
105 105
@@ -112,40 +112,35 @@ i915_gem_batch_pool_get(struct i915_gem_batch_pool *pool,
112 n = ARRAY_SIZE(pool->cache_list) - 1; 112 n = ARRAY_SIZE(pool->cache_list) - 1;
113 list = &pool->cache_list[n]; 113 list = &pool->cache_list[n];
114 114
115 list_for_each_entry_safe(tmp, next, list, batch_pool_link) { 115 list_for_each_entry(tmp, list, batch_pool_link) {
116 /* The batches are strictly LRU ordered */ 116 /* The batches are strictly LRU ordered */
117 if (!i915_gem_active_is_idle(&tmp->last_read[pool->engine->id], 117 if (i915_gem_object_is_active(tmp))
118 &tmp->base.dev->struct_mutex))
119 break; 118 break;
120 119
121 /* While we're looping, do some clean up */ 120 GEM_BUG_ON(!reservation_object_test_signaled_rcu(tmp->resv,
122 if (tmp->madv == __I915_MADV_PURGED) { 121 true));
123 list_del(&tmp->batch_pool_link);
124 i915_gem_object_put(tmp);
125 continue;
126 }
127 122
128 if (tmp->base.size >= size) { 123 if (tmp->base.size >= size) {
124 /* Clear the set of shared fences early */
125 ww_mutex_lock(&tmp->resv->lock, NULL);
126 reservation_object_add_excl_fence(tmp->resv, NULL);
127 ww_mutex_unlock(&tmp->resv->lock);
128
129 obj = tmp; 129 obj = tmp;
130 break; 130 break;
131 } 131 }
132 } 132 }
133 133
134 if (obj == NULL) { 134 if (obj == NULL) {
135 int ret; 135 obj = i915_gem_object_create_internal(pool->engine->i915, size);
136
137 obj = i915_gem_object_create(&pool->engine->i915->drm, size);
138 if (IS_ERR(obj)) 136 if (IS_ERR(obj))
139 return obj; 137 return obj;
140
141 ret = i915_gem_object_get_pages(obj);
142 if (ret)
143 return ERR_PTR(ret);
144
145 obj->madv = I915_MADV_DONTNEED;
146 } 138 }
147 139
140 ret = i915_gem_object_pin_pages(obj);
141 if (ret)
142 return ERR_PTR(ret);
143
148 list_move_tail(&obj->batch_pool_link, list); 144 list_move_tail(&obj->batch_pool_link, list);
149 i915_gem_object_pin_pages(obj);
150 return obj; 145 return obj;
151} 146}
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index 5dca32ac1c67..6dd475735f0a 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -155,9 +155,10 @@ void i915_gem_context_free(struct kref *ctx_ref)
155 if (ce->ring) 155 if (ce->ring)
156 intel_ring_free(ce->ring); 156 intel_ring_free(ce->ring);
157 157
158 i915_vma_put(ce->state); 158 __i915_gem_object_release_unless_active(ce->state->obj);
159 } 159 }
160 160
161 kfree(ctx->name);
161 put_pid(ctx->pid); 162 put_pid(ctx->pid);
162 list_del(&ctx->link); 163 list_del(&ctx->link);
163 164
@@ -303,19 +304,28 @@ __create_hw_context(struct drm_device *dev,
303 } 304 }
304 305
305 /* Default context will never have a file_priv */ 306 /* Default context will never have a file_priv */
306 if (file_priv != NULL) { 307 ret = DEFAULT_CONTEXT_HANDLE;
308 if (file_priv) {
307 ret = idr_alloc(&file_priv->context_idr, ctx, 309 ret = idr_alloc(&file_priv->context_idr, ctx,
308 DEFAULT_CONTEXT_HANDLE, 0, GFP_KERNEL); 310 DEFAULT_CONTEXT_HANDLE, 0, GFP_KERNEL);
309 if (ret < 0) 311 if (ret < 0)
310 goto err_out; 312 goto err_out;
311 } else 313 }
312 ret = DEFAULT_CONTEXT_HANDLE; 314 ctx->user_handle = ret;
313 315
314 ctx->file_priv = file_priv; 316 ctx->file_priv = file_priv;
315 if (file_priv) 317 if (file_priv) {
316 ctx->pid = get_task_pid(current, PIDTYPE_PID); 318 ctx->pid = get_task_pid(current, PIDTYPE_PID);
319 ctx->name = kasprintf(GFP_KERNEL, "%s[%d]/%x",
320 current->comm,
321 pid_nr(ctx->pid),
322 ctx->user_handle);
323 if (!ctx->name) {
324 ret = -ENOMEM;
325 goto err_pid;
326 }
327 }
317 328
318 ctx->user_handle = ret;
319 /* NB: Mark all slices as needing a remap so that when the context first 329 /* NB: Mark all slices as needing a remap so that when the context first
320 * loads it will restore whatever remap state already exists. If there 330 * loads it will restore whatever remap state already exists. If there
321 * is no remap info, it will be a NOP. */ 331 * is no remap info, it will be a NOP. */
@@ -329,6 +339,9 @@ __create_hw_context(struct drm_device *dev,
329 339
330 return ctx; 340 return ctx;
331 341
342err_pid:
343 put_pid(ctx->pid);
344 idr_remove(&file_priv->context_idr, ctx->user_handle);
332err_out: 345err_out:
333 context_close(ctx); 346 context_close(ctx);
334 return ERR_PTR(ret); 347 return ERR_PTR(ret);
@@ -352,9 +365,9 @@ i915_gem_create_context(struct drm_device *dev,
352 return ctx; 365 return ctx;
353 366
354 if (USES_FULL_PPGTT(dev)) { 367 if (USES_FULL_PPGTT(dev)) {
355 struct i915_hw_ppgtt *ppgtt = 368 struct i915_hw_ppgtt *ppgtt;
356 i915_ppgtt_create(to_i915(dev), file_priv);
357 369
370 ppgtt = i915_ppgtt_create(to_i915(dev), file_priv, ctx->name);
358 if (IS_ERR(ppgtt)) { 371 if (IS_ERR(ppgtt)) {
359 DRM_DEBUG_DRIVER("PPGTT setup failed (%ld)\n", 372 DRM_DEBUG_DRIVER("PPGTT setup failed (%ld)\n",
360 PTR_ERR(ppgtt)); 373 PTR_ERR(ppgtt));
@@ -751,12 +764,36 @@ needs_pd_load_post(struct i915_hw_ppgtt *ppgtt,
751 return false; 764 return false;
752} 765}
753 766
767struct i915_vma *
768i915_gem_context_pin_legacy(struct i915_gem_context *ctx,
769 unsigned int flags)
770{
771 struct i915_vma *vma = ctx->engine[RCS].state;
772 int ret;
773
774 /* Clear this page out of any CPU caches for coherent swap-in/out.
775 * We only want to do this on the first bind so that we do not stall
776 * on an active context (which by nature is already on the GPU).
777 */
778 if (!(vma->flags & I915_VMA_GLOBAL_BIND)) {
779 ret = i915_gem_object_set_to_gtt_domain(vma->obj, false);
780 if (ret)
781 return ERR_PTR(ret);
782 }
783
784 ret = i915_vma_pin(vma, 0, ctx->ggtt_alignment, PIN_GLOBAL | flags);
785 if (ret)
786 return ERR_PTR(ret);
787
788 return vma;
789}
790
754static int do_rcs_switch(struct drm_i915_gem_request *req) 791static int do_rcs_switch(struct drm_i915_gem_request *req)
755{ 792{
756 struct i915_gem_context *to = req->ctx; 793 struct i915_gem_context *to = req->ctx;
757 struct intel_engine_cs *engine = req->engine; 794 struct intel_engine_cs *engine = req->engine;
758 struct i915_hw_ppgtt *ppgtt = to->ppgtt ?: req->i915->mm.aliasing_ppgtt; 795 struct i915_hw_ppgtt *ppgtt = to->ppgtt ?: req->i915->mm.aliasing_ppgtt;
759 struct i915_vma *vma = to->engine[RCS].state; 796 struct i915_vma *vma;
760 struct i915_gem_context *from; 797 struct i915_gem_context *from;
761 u32 hw_flags; 798 u32 hw_flags;
762 int ret, i; 799 int ret, i;
@@ -764,17 +801,10 @@ static int do_rcs_switch(struct drm_i915_gem_request *req)
764 if (skip_rcs_switch(ppgtt, engine, to)) 801 if (skip_rcs_switch(ppgtt, engine, to))
765 return 0; 802 return 0;
766 803
767 /* Clear this page out of any CPU caches for coherent swap-in/out. */
768 if (!(vma->flags & I915_VMA_GLOBAL_BIND)) {
769 ret = i915_gem_object_set_to_gtt_domain(vma->obj, false);
770 if (ret)
771 return ret;
772 }
773
774 /* Trying to pin first makes error handling easier. */ 804 /* Trying to pin first makes error handling easier. */
775 ret = i915_vma_pin(vma, 0, to->ggtt_alignment, PIN_GLOBAL); 805 vma = i915_gem_context_pin_legacy(to, 0);
776 if (ret) 806 if (IS_ERR(vma))
777 return ret; 807 return PTR_ERR(vma);
778 808
779 /* 809 /*
780 * Pin can switch back to the default context if we end up calling into 810 * Pin can switch back to the default context if we end up calling into
@@ -931,22 +961,33 @@ int i915_switch_context(struct drm_i915_gem_request *req)
931int i915_gem_switch_to_kernel_context(struct drm_i915_private *dev_priv) 961int i915_gem_switch_to_kernel_context(struct drm_i915_private *dev_priv)
932{ 962{
933 struct intel_engine_cs *engine; 963 struct intel_engine_cs *engine;
964 struct i915_gem_timeline *timeline;
934 enum intel_engine_id id; 965 enum intel_engine_id id;
935 966
967 lockdep_assert_held(&dev_priv->drm.struct_mutex);
968
936 for_each_engine(engine, dev_priv, id) { 969 for_each_engine(engine, dev_priv, id) {
937 struct drm_i915_gem_request *req; 970 struct drm_i915_gem_request *req;
938 int ret; 971 int ret;
939 972
940 if (engine->last_context == NULL)
941 continue;
942
943 if (engine->last_context == dev_priv->kernel_context)
944 continue;
945
946 req = i915_gem_request_alloc(engine, dev_priv->kernel_context); 973 req = i915_gem_request_alloc(engine, dev_priv->kernel_context);
947 if (IS_ERR(req)) 974 if (IS_ERR(req))
948 return PTR_ERR(req); 975 return PTR_ERR(req);
949 976
977 /* Queue this switch after all other activity */
978 list_for_each_entry(timeline, &dev_priv->gt.timelines, link) {
979 struct drm_i915_gem_request *prev;
980 struct intel_timeline *tl;
981
982 tl = &timeline->engine[engine->id];
983 prev = i915_gem_active_raw(&tl->last_request,
984 &dev_priv->drm.struct_mutex);
985 if (prev)
986 i915_sw_fence_await_sw_fence_gfp(&req->submit,
987 &prev->submit,
988 GFP_KERNEL);
989 }
990
950 ret = i915_switch_context(req); 991 ret = i915_switch_context(req);
951 i915_add_request_no_flush(req); 992 i915_add_request_no_flush(req);
952 if (ret) 993 if (ret)
diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
index 97c9d68b45df..5e38299b5df6 100644
--- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
+++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
@@ -44,51 +44,42 @@ static struct sg_table *i915_gem_map_dma_buf(struct dma_buf_attachment *attachme
44 struct scatterlist *src, *dst; 44 struct scatterlist *src, *dst;
45 int ret, i; 45 int ret, i;
46 46
47 ret = i915_mutex_lock_interruptible(obj->base.dev); 47 ret = i915_gem_object_pin_pages(obj);
48 if (ret) 48 if (ret)
49 goto err; 49 goto err;
50 50
51 ret = i915_gem_object_get_pages(obj);
52 if (ret)
53 goto err_unlock;
54
55 i915_gem_object_pin_pages(obj);
56
57 /* Copy sg so that we make an independent mapping */ 51 /* Copy sg so that we make an independent mapping */
58 st = kmalloc(sizeof(struct sg_table), GFP_KERNEL); 52 st = kmalloc(sizeof(struct sg_table), GFP_KERNEL);
59 if (st == NULL) { 53 if (st == NULL) {
60 ret = -ENOMEM; 54 ret = -ENOMEM;
61 goto err_unpin; 55 goto err_unpin_pages;
62 } 56 }
63 57
64 ret = sg_alloc_table(st, obj->pages->nents, GFP_KERNEL); 58 ret = sg_alloc_table(st, obj->mm.pages->nents, GFP_KERNEL);
65 if (ret) 59 if (ret)
66 goto err_free; 60 goto err_free;
67 61
68 src = obj->pages->sgl; 62 src = obj->mm.pages->sgl;
69 dst = st->sgl; 63 dst = st->sgl;
70 for (i = 0; i < obj->pages->nents; i++) { 64 for (i = 0; i < obj->mm.pages->nents; i++) {
71 sg_set_page(dst, sg_page(src), src->length, 0); 65 sg_set_page(dst, sg_page(src), src->length, 0);
72 dst = sg_next(dst); 66 dst = sg_next(dst);
73 src = sg_next(src); 67 src = sg_next(src);
74 } 68 }
75 69
76 if (!dma_map_sg(attachment->dev, st->sgl, st->nents, dir)) { 70 if (!dma_map_sg(attachment->dev, st->sgl, st->nents, dir)) {
77 ret =-ENOMEM; 71 ret = -ENOMEM;
78 goto err_free_sg; 72 goto err_free_sg;
79 } 73 }
80 74
81 mutex_unlock(&obj->base.dev->struct_mutex);
82 return st; 75 return st;
83 76
84err_free_sg: 77err_free_sg:
85 sg_free_table(st); 78 sg_free_table(st);
86err_free: 79err_free:
87 kfree(st); 80 kfree(st);
88err_unpin: 81err_unpin_pages:
89 i915_gem_object_unpin_pages(obj); 82 i915_gem_object_unpin_pages(obj);
90err_unlock:
91 mutex_unlock(&obj->base.dev->struct_mutex);
92err: 83err:
93 return ERR_PTR(ret); 84 return ERR_PTR(ret);
94} 85}
@@ -103,36 +94,21 @@ static void i915_gem_unmap_dma_buf(struct dma_buf_attachment *attachment,
103 sg_free_table(sg); 94 sg_free_table(sg);
104 kfree(sg); 95 kfree(sg);
105 96
106 mutex_lock(&obj->base.dev->struct_mutex);
107 i915_gem_object_unpin_pages(obj); 97 i915_gem_object_unpin_pages(obj);
108 mutex_unlock(&obj->base.dev->struct_mutex);
109} 98}
110 99
111static void *i915_gem_dmabuf_vmap(struct dma_buf *dma_buf) 100static void *i915_gem_dmabuf_vmap(struct dma_buf *dma_buf)
112{ 101{
113 struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf); 102 struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
114 struct drm_device *dev = obj->base.dev;
115 void *addr;
116 int ret;
117 103
118 ret = i915_mutex_lock_interruptible(dev); 104 return i915_gem_object_pin_map(obj, I915_MAP_WB);
119 if (ret)
120 return ERR_PTR(ret);
121
122 addr = i915_gem_object_pin_map(obj, I915_MAP_WB);
123 mutex_unlock(&dev->struct_mutex);
124
125 return addr;
126} 105}
127 106
128static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr) 107static void i915_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr)
129{ 108{
130 struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf); 109 struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
131 struct drm_device *dev = obj->base.dev;
132 110
133 mutex_lock(&dev->struct_mutex);
134 i915_gem_object_unpin_map(obj); 111 i915_gem_object_unpin_map(obj);
135 mutex_unlock(&dev->struct_mutex);
136} 112}
137 113
138static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num) 114static void *i915_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num)
@@ -179,32 +155,45 @@ static int i915_gem_begin_cpu_access(struct dma_buf *dma_buf, enum dma_data_dire
179{ 155{
180 struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf); 156 struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
181 struct drm_device *dev = obj->base.dev; 157 struct drm_device *dev = obj->base.dev;
182 int ret;
183 bool write = (direction == DMA_BIDIRECTIONAL || direction == DMA_TO_DEVICE); 158 bool write = (direction == DMA_BIDIRECTIONAL || direction == DMA_TO_DEVICE);
159 int err;
184 160
185 ret = i915_mutex_lock_interruptible(dev); 161 err = i915_gem_object_pin_pages(obj);
186 if (ret) 162 if (err)
187 return ret; 163 return err;
164
165 err = i915_mutex_lock_interruptible(dev);
166 if (err)
167 goto out;
188 168
189 ret = i915_gem_object_set_to_cpu_domain(obj, write); 169 err = i915_gem_object_set_to_cpu_domain(obj, write);
190 mutex_unlock(&dev->struct_mutex); 170 mutex_unlock(&dev->struct_mutex);
191 return ret; 171
172out:
173 i915_gem_object_unpin_pages(obj);
174 return err;
192} 175}
193 176
194static int i915_gem_end_cpu_access(struct dma_buf *dma_buf, enum dma_data_direction direction) 177static int i915_gem_end_cpu_access(struct dma_buf *dma_buf, enum dma_data_direction direction)
195{ 178{
196 struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf); 179 struct drm_i915_gem_object *obj = dma_buf_to_obj(dma_buf);
197 struct drm_device *dev = obj->base.dev; 180 struct drm_device *dev = obj->base.dev;
198 int ret; 181 int err;
199 182
200 ret = i915_mutex_lock_interruptible(dev); 183 err = i915_gem_object_pin_pages(obj);
201 if (ret) 184 if (err)
202 return ret; 185 return err;
203 186
204 ret = i915_gem_object_set_to_gtt_domain(obj, false); 187 err = i915_mutex_lock_interruptible(dev);
188 if (err)
189 goto out;
190
191 err = i915_gem_object_set_to_gtt_domain(obj, false);
205 mutex_unlock(&dev->struct_mutex); 192 mutex_unlock(&dev->struct_mutex);
206 193
207 return ret; 194out:
195 i915_gem_object_unpin_pages(obj);
196 return err;
208} 197}
209 198
210static const struct dma_buf_ops i915_dmabuf_ops = { 199static const struct dma_buf_ops i915_dmabuf_ops = {
@@ -222,60 +211,17 @@ static const struct dma_buf_ops i915_dmabuf_ops = {
222 .end_cpu_access = i915_gem_end_cpu_access, 211 .end_cpu_access = i915_gem_end_cpu_access,
223}; 212};
224 213
225static void export_fences(struct drm_i915_gem_object *obj,
226 struct dma_buf *dma_buf)
227{
228 struct reservation_object *resv = dma_buf->resv;
229 struct drm_i915_gem_request *req;
230 unsigned long active;
231 int idx;
232
233 active = __I915_BO_ACTIVE(obj);
234 if (!active)
235 return;
236
237 /* Serialise with execbuf to prevent concurrent fence-loops */
238 mutex_lock(&obj->base.dev->struct_mutex);
239
240 /* Mark the object for future fences before racily adding old fences */
241 obj->base.dma_buf = dma_buf;
242
243 ww_mutex_lock(&resv->lock, NULL);
244
245 for_each_active(active, idx) {
246 req = i915_gem_active_get(&obj->last_read[idx],
247 &obj->base.dev->struct_mutex);
248 if (!req)
249 continue;
250
251 if (reservation_object_reserve_shared(resv) == 0)
252 reservation_object_add_shared_fence(resv, &req->fence);
253
254 i915_gem_request_put(req);
255 }
256
257 req = i915_gem_active_get(&obj->last_write,
258 &obj->base.dev->struct_mutex);
259 if (req) {
260 reservation_object_add_excl_fence(resv, &req->fence);
261 i915_gem_request_put(req);
262 }
263
264 ww_mutex_unlock(&resv->lock);
265 mutex_unlock(&obj->base.dev->struct_mutex);
266}
267
268struct dma_buf *i915_gem_prime_export(struct drm_device *dev, 214struct dma_buf *i915_gem_prime_export(struct drm_device *dev,
269 struct drm_gem_object *gem_obj, int flags) 215 struct drm_gem_object *gem_obj, int flags)
270{ 216{
271 struct drm_i915_gem_object *obj = to_intel_bo(gem_obj); 217 struct drm_i915_gem_object *obj = to_intel_bo(gem_obj);
272 DEFINE_DMA_BUF_EXPORT_INFO(exp_info); 218 DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
273 struct dma_buf *dma_buf;
274 219
275 exp_info.ops = &i915_dmabuf_ops; 220 exp_info.ops = &i915_dmabuf_ops;
276 exp_info.size = gem_obj->size; 221 exp_info.size = gem_obj->size;
277 exp_info.flags = flags; 222 exp_info.flags = flags;
278 exp_info.priv = gem_obj; 223 exp_info.priv = gem_obj;
224 exp_info.resv = obj->resv;
279 225
280 if (obj->ops->dmabuf_export) { 226 if (obj->ops->dmabuf_export) {
281 int ret = obj->ops->dmabuf_export(obj); 227 int ret = obj->ops->dmabuf_export(obj);
@@ -283,30 +229,21 @@ struct dma_buf *i915_gem_prime_export(struct drm_device *dev,
283 return ERR_PTR(ret); 229 return ERR_PTR(ret);
284 } 230 }
285 231
286 dma_buf = drm_gem_dmabuf_export(dev, &exp_info); 232 return drm_gem_dmabuf_export(dev, &exp_info);
287 if (IS_ERR(dma_buf))
288 return dma_buf;
289
290 export_fences(obj, dma_buf);
291 return dma_buf;
292} 233}
293 234
294static int i915_gem_object_get_pages_dmabuf(struct drm_i915_gem_object *obj) 235static struct sg_table *
236i915_gem_object_get_pages_dmabuf(struct drm_i915_gem_object *obj)
295{ 237{
296 struct sg_table *sg; 238 return dma_buf_map_attachment(obj->base.import_attach,
297 239 DMA_BIDIRECTIONAL);
298 sg = dma_buf_map_attachment(obj->base.import_attach, DMA_BIDIRECTIONAL);
299 if (IS_ERR(sg))
300 return PTR_ERR(sg);
301
302 obj->pages = sg;
303 return 0;
304} 240}
305 241
306static void i915_gem_object_put_pages_dmabuf(struct drm_i915_gem_object *obj) 242static void i915_gem_object_put_pages_dmabuf(struct drm_i915_gem_object *obj,
243 struct sg_table *pages)
307{ 244{
308 dma_buf_unmap_attachment(obj->base.import_attach, 245 dma_buf_unmap_attachment(obj->base.import_attach, pages,
309 obj->pages, DMA_BIDIRECTIONAL); 246 DMA_BIDIRECTIONAL);
310} 247}
311 248
312static const struct drm_i915_gem_object_ops i915_gem_object_dmabuf_ops = { 249static const struct drm_i915_gem_object_ops i915_gem_object_dmabuf_ops = {
@@ -350,6 +287,7 @@ struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev,
350 drm_gem_private_object_init(dev, &obj->base, dma_buf->size); 287 drm_gem_private_object_init(dev, &obj->base, dma_buf->size);
351 i915_gem_object_init(obj, &i915_gem_object_dmabuf_ops); 288 i915_gem_object_init(obj, &i915_gem_object_dmabuf_ops);
352 obj->base.import_attach = attach; 289 obj->base.import_attach = attach;
290 obj->resv = dma_buf->resv;
353 291
354 /* We use GTT as shorthand for a coherent domain, one that is 292 /* We use GTT as shorthand for a coherent domain, one that is
355 * neither in the GPU cache nor in the CPU cache, where all 293 * neither in the GPU cache nor in the CPU cache, where all
diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c
index b5e9e669f50f..bd08814b015c 100644
--- a/drivers/gpu/drm/i915/i915_gem_evict.c
+++ b/drivers/gpu/drm/i915/i915_gem_evict.c
@@ -33,14 +33,17 @@
33#include "intel_drv.h" 33#include "intel_drv.h"
34#include "i915_trace.h" 34#include "i915_trace.h"
35 35
36static bool 36static bool ggtt_is_idle(struct drm_i915_private *dev_priv)
37gpu_is_idle(struct drm_i915_private *dev_priv)
38{ 37{
38 struct i915_ggtt *ggtt = &dev_priv->ggtt;
39 struct intel_engine_cs *engine; 39 struct intel_engine_cs *engine;
40 enum intel_engine_id id; 40 enum intel_engine_id id;
41 41
42 for_each_engine(engine, dev_priv, id) { 42 for_each_engine(engine, dev_priv, id) {
43 if (intel_engine_is_active(engine)) 43 struct intel_timeline *tl;
44
45 tl = &ggtt->base.timeline.engine[engine->id];
46 if (i915_gem_active_isset(&tl->last_request))
44 return false; 47 return false;
45 } 48 }
46 49
@@ -56,7 +59,7 @@ mark_free(struct i915_vma *vma, unsigned int flags, struct list_head *unwind)
56 if (WARN_ON(!list_empty(&vma->exec_list))) 59 if (WARN_ON(!list_empty(&vma->exec_list)))
57 return false; 60 return false;
58 61
59 if (flags & PIN_NONFAULT && vma->obj->fault_mappable) 62 if (flags & PIN_NONFAULT && !list_empty(&vma->obj->userfault_link))
60 return false; 63 return false;
61 64
62 list_add(&vma->exec_list, unwind); 65 list_add(&vma->exec_list, unwind);
@@ -103,6 +106,7 @@ i915_gem_evict_something(struct i915_address_space *vm,
103 struct i915_vma *vma, *next; 106 struct i915_vma *vma, *next;
104 int ret; 107 int ret;
105 108
109 lockdep_assert_held(&vm->dev->struct_mutex);
106 trace_i915_gem_evict(vm, min_size, alignment, flags); 110 trace_i915_gem_evict(vm, min_size, alignment, flags);
107 111
108 /* 112 /*
@@ -153,7 +157,7 @@ search_again:
153 if (!i915_is_ggtt(vm) || flags & PIN_NONBLOCK) 157 if (!i915_is_ggtt(vm) || flags & PIN_NONBLOCK)
154 return -ENOSPC; 158 return -ENOSPC;
155 159
156 if (gpu_is_idle(dev_priv)) { 160 if (ggtt_is_idle(dev_priv)) {
157 /* If we still have pending pageflip completions, drop 161 /* If we still have pending pageflip completions, drop
158 * back to userspace to give our workqueues time to 162 * back to userspace to give our workqueues time to
159 * acquire our locks and unpin the old scanouts. 163 * acquire our locks and unpin the old scanouts.
@@ -213,6 +217,8 @@ i915_gem_evict_for_vma(struct i915_vma *target)
213{ 217{
214 struct drm_mm_node *node, *next; 218 struct drm_mm_node *node, *next;
215 219
220 lockdep_assert_held(&target->vm->dev->struct_mutex);
221
216 list_for_each_entry_safe(node, next, 222 list_for_each_entry_safe(node, next,
217 &target->vm->mm.head_node.node_list, 223 &target->vm->mm.head_node.node_list,
218 node_list) { 224 node_list) {
@@ -266,7 +272,7 @@ int i915_gem_evict_vm(struct i915_address_space *vm, bool do_idle)
266 struct i915_vma *vma, *next; 272 struct i915_vma *vma, *next;
267 int ret; 273 int ret;
268 274
269 WARN_ON(!mutex_is_locked(&vm->dev->struct_mutex)); 275 lockdep_assert_held(&vm->dev->struct_mutex);
270 trace_i915_gem_evict_vm(vm); 276 trace_i915_gem_evict_vm(vm);
271 277
272 if (do_idle) { 278 if (do_idle) {
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index e52affdcc125..fb5b44339f71 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -34,7 +34,6 @@
34#include <drm/i915_drm.h> 34#include <drm/i915_drm.h>
35 35
36#include "i915_drv.h" 36#include "i915_drv.h"
37#include "i915_gem_dmabuf.h"
38#include "i915_trace.h" 37#include "i915_trace.h"
39#include "intel_drv.h" 38#include "intel_drv.h"
40#include "intel_frontbuffer.h" 39#include "intel_frontbuffer.h"
@@ -332,7 +331,8 @@ static void reloc_cache_init(struct reloc_cache *cache,
332 cache->page = -1; 331 cache->page = -1;
333 cache->vaddr = 0; 332 cache->vaddr = 0;
334 cache->i915 = i915; 333 cache->i915 = i915;
335 cache->use_64bit_reloc = INTEL_GEN(cache->i915) >= 8; 334 /* Must be a variable in the struct to allow GCC to unroll. */
335 cache->use_64bit_reloc = HAS_64BIT_RELOC(i915);
336 cache->node.allocated = false; 336 cache->node.allocated = false;
337} 337}
338 338
@@ -418,15 +418,6 @@ static void *reloc_iomap(struct drm_i915_gem_object *obj,
418 unsigned long offset; 418 unsigned long offset;
419 void *vaddr; 419 void *vaddr;
420 420
421 if (cache->node.allocated) {
422 wmb();
423 ggtt->base.insert_page(&ggtt->base,
424 i915_gem_object_get_dma_address(obj, page),
425 cache->node.start, I915_CACHE_NONE, 0);
426 cache->page = page;
427 return unmask_page(cache->vaddr);
428 }
429
430 if (cache->vaddr) { 421 if (cache->vaddr) {
431 io_mapping_unmap_atomic((void __force __iomem *) unmask_page(cache->vaddr)); 422 io_mapping_unmap_atomic((void __force __iomem *) unmask_page(cache->vaddr));
432 } else { 423 } else {
@@ -466,6 +457,7 @@ static void *reloc_iomap(struct drm_i915_gem_object *obj,
466 457
467 offset = cache->node.start; 458 offset = cache->node.start;
468 if (cache->node.allocated) { 459 if (cache->node.allocated) {
460 wmb();
469 ggtt->base.insert_page(&ggtt->base, 461 ggtt->base.insert_page(&ggtt->base,
470 i915_gem_object_get_dma_address(obj, page), 462 i915_gem_object_get_dma_address(obj, page),
471 offset, I915_CACHE_NONE, 0); 463 offset, I915_CACHE_NONE, 0);
@@ -1109,44 +1101,20 @@ err:
1109 return ret; 1101 return ret;
1110} 1102}
1111 1103
1112static unsigned int eb_other_engines(struct drm_i915_gem_request *req)
1113{
1114 unsigned int mask;
1115
1116 mask = ~intel_engine_flag(req->engine) & I915_BO_ACTIVE_MASK;
1117 mask <<= I915_BO_ACTIVE_SHIFT;
1118
1119 return mask;
1120}
1121
1122static int 1104static int
1123i915_gem_execbuffer_move_to_gpu(struct drm_i915_gem_request *req, 1105i915_gem_execbuffer_move_to_gpu(struct drm_i915_gem_request *req,
1124 struct list_head *vmas) 1106 struct list_head *vmas)
1125{ 1107{
1126 const unsigned int other_rings = eb_other_engines(req);
1127 struct i915_vma *vma; 1108 struct i915_vma *vma;
1128 int ret; 1109 int ret;
1129 1110
1130 list_for_each_entry(vma, vmas, exec_list) { 1111 list_for_each_entry(vma, vmas, exec_list) {
1131 struct drm_i915_gem_object *obj = vma->obj; 1112 struct drm_i915_gem_object *obj = vma->obj;
1132 struct reservation_object *resv;
1133 1113
1134 if (obj->flags & other_rings) { 1114 ret = i915_gem_request_await_object
1135 ret = i915_gem_request_await_object 1115 (req, obj, obj->base.pending_write_domain);
1136 (req, obj, obj->base.pending_write_domain); 1116 if (ret)
1137 if (ret) 1117 return ret;
1138 return ret;
1139 }
1140
1141 resv = i915_gem_object_get_dmabuf_resv(obj);
1142 if (resv) {
1143 ret = i915_sw_fence_await_reservation
1144 (&req->submit, resv, &i915_fence_ops,
1145 obj->base.pending_write_domain, 10*HZ,
1146 GFP_KERNEL | __GFP_NOWARN);
1147 if (ret < 0)
1148 return ret;
1149 }
1150 1118
1151 if (obj->base.write_domain & I915_GEM_DOMAIN_CPU) 1119 if (obj->base.write_domain & I915_GEM_DOMAIN_CPU)
1152 i915_gem_clflush_object(obj, false); 1120 i915_gem_clflush_object(obj, false);
@@ -1279,6 +1247,12 @@ i915_gem_validate_context(struct drm_device *dev, struct drm_file *file,
1279 return ctx; 1247 return ctx;
1280} 1248}
1281 1249
1250static bool gpu_write_needs_clflush(struct drm_i915_gem_object *obj)
1251{
1252 return !(obj->cache_level == I915_CACHE_NONE ||
1253 obj->cache_level == I915_CACHE_WT);
1254}
1255
1282void i915_vma_move_to_active(struct i915_vma *vma, 1256void i915_vma_move_to_active(struct i915_vma *vma,
1283 struct drm_i915_gem_request *req, 1257 struct drm_i915_gem_request *req,
1284 unsigned int flags) 1258 unsigned int flags)
@@ -1288,8 +1262,6 @@ void i915_vma_move_to_active(struct i915_vma *vma,
1288 1262
1289 GEM_BUG_ON(!drm_mm_node_allocated(&vma->node)); 1263 GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
1290 1264
1291 obj->dirty = 1; /* be paranoid */
1292
1293 /* Add a reference if we're newly entering the active list. 1265 /* Add a reference if we're newly entering the active list.
1294 * The order in which we add operations to the retirement queue is 1266 * The order in which we add operations to the retirement queue is
1295 * vital here: mark_active adds to the start of the callback list, 1267 * vital here: mark_active adds to the start of the callback list,
@@ -1297,37 +1269,32 @@ void i915_vma_move_to_active(struct i915_vma *vma,
1297 * add the active reference first and queue for it to be dropped 1269 * add the active reference first and queue for it to be dropped
1298 * *last*. 1270 * *last*.
1299 */ 1271 */
1300 if (!i915_gem_object_is_active(obj)) 1272 if (!i915_vma_is_active(vma))
1301 i915_gem_object_get(obj); 1273 obj->active_count++;
1302 i915_gem_object_set_active(obj, idx); 1274 i915_vma_set_active(vma, idx);
1303 i915_gem_active_set(&obj->last_read[idx], req); 1275 i915_gem_active_set(&vma->last_read[idx], req);
1276 list_move_tail(&vma->vm_link, &vma->vm->active_list);
1304 1277
1305 if (flags & EXEC_OBJECT_WRITE) { 1278 if (flags & EXEC_OBJECT_WRITE) {
1306 i915_gem_active_set(&obj->last_write, req); 1279 i915_gem_active_set(&vma->last_write, req);
1307 1280
1308 intel_fb_obj_invalidate(obj, ORIGIN_CS); 1281 intel_fb_obj_invalidate(obj, ORIGIN_CS);
1309 1282
1310 /* update for the implicit flush after a batch */ 1283 /* update for the implicit flush after a batch */
1311 obj->base.write_domain &= ~I915_GEM_GPU_DOMAINS; 1284 obj->base.write_domain &= ~I915_GEM_GPU_DOMAINS;
1285 if (!obj->cache_dirty && gpu_write_needs_clflush(obj))
1286 obj->cache_dirty = true;
1312 } 1287 }
1313 1288
1314 if (flags & EXEC_OBJECT_NEEDS_FENCE) 1289 if (flags & EXEC_OBJECT_NEEDS_FENCE)
1315 i915_gem_active_set(&vma->last_fence, req); 1290 i915_gem_active_set(&vma->last_fence, req);
1316
1317 i915_vma_set_active(vma, idx);
1318 i915_gem_active_set(&vma->last_read[idx], req);
1319 list_move_tail(&vma->vm_link, &vma->vm->active_list);
1320} 1291}
1321 1292
1322static void eb_export_fence(struct drm_i915_gem_object *obj, 1293static void eb_export_fence(struct drm_i915_gem_object *obj,
1323 struct drm_i915_gem_request *req, 1294 struct drm_i915_gem_request *req,
1324 unsigned int flags) 1295 unsigned int flags)
1325{ 1296{
1326 struct reservation_object *resv; 1297 struct reservation_object *resv = obj->resv;
1327
1328 resv = i915_gem_object_get_dmabuf_resv(obj);
1329 if (!resv)
1330 return;
1331 1298
1332 /* Ignore errors from failing to allocate the new fence, we can't 1299 /* Ignore errors from failing to allocate the new fence, we can't
1333 * handle an error right now. Worst case should be missed 1300 * handle an error right now. Worst case should be missed
diff --git a/drivers/gpu/drm/i915/i915_gem_fence.c b/drivers/gpu/drm/i915/i915_gem_fence.c
index a6daf2deab74..cd59dbc6588c 100644
--- a/drivers/gpu/drm/i915/i915_gem_fence.c
+++ b/drivers/gpu/drm/i915/i915_gem_fence.c
@@ -343,6 +343,9 @@ i915_vma_get_fence(struct i915_vma *vma)
343 struct drm_i915_fence_reg *fence; 343 struct drm_i915_fence_reg *fence;
344 struct i915_vma *set = i915_gem_object_is_tiled(vma->obj) ? vma : NULL; 344 struct i915_vma *set = i915_gem_object_is_tiled(vma->obj) ? vma : NULL;
345 345
346 /* Note that we revoke fences on runtime suspend. Therefore the user
347 * must keep the device awake whilst using the fence.
348 */
346 assert_rpm_wakelock_held(to_i915(vma->vm->dev)); 349 assert_rpm_wakelock_held(to_i915(vma->vm->dev));
347 350
348 /* Just update our place in the LRU if our fence is getting reused. */ 351 /* Just update our place in the LRU if our fence is getting reused. */
@@ -368,19 +371,14 @@ i915_vma_get_fence(struct i915_vma *vma)
368 * @dev: DRM device 371 * @dev: DRM device
369 * 372 *
370 * Restore the hw fence state to match the software tracking again, to be called 373 * Restore the hw fence state to match the software tracking again, to be called
371 * after a gpu reset and on resume. 374 * after a gpu reset and on resume. Note that on runtime suspend we only cancel
375 * the fences, to be reacquired by the user later.
372 */ 376 */
373void i915_gem_restore_fences(struct drm_device *dev) 377void i915_gem_restore_fences(struct drm_device *dev)
374{ 378{
375 struct drm_i915_private *dev_priv = to_i915(dev); 379 struct drm_i915_private *dev_priv = to_i915(dev);
376 int i; 380 int i;
377 381
378 /* Note that this may be called outside of struct_mutex, by
379 * runtime suspend/resume. The barrier we require is enforced by
380 * rpm itself - all access to fences/GTT are only within an rpm
381 * wakeref, and to acquire that wakeref you must pass through here.
382 */
383
384 for (i = 0; i < dev_priv->num_fence_regs; i++) { 382 for (i = 0; i < dev_priv->num_fence_regs; i++) {
385 struct drm_i915_fence_reg *reg = &dev_priv->fence_regs[i]; 383 struct drm_i915_fence_reg *reg = &dev_priv->fence_regs[i];
386 struct i915_vma *vma = reg->vma; 384 struct i915_vma *vma = reg->vma;
@@ -391,7 +389,7 @@ void i915_gem_restore_fences(struct drm_device *dev)
391 */ 389 */
392 if (vma && !i915_gem_object_is_tiled(vma->obj)) { 390 if (vma && !i915_gem_object_is_tiled(vma->obj)) {
393 GEM_BUG_ON(!reg->dirty); 391 GEM_BUG_ON(!reg->dirty);
394 GEM_BUG_ON(vma->obj->fault_mappable); 392 GEM_BUG_ON(!list_empty(&vma->obj->userfault_link));
395 393
396 list_move(&reg->link, &dev_priv->mm.fence_list); 394 list_move(&reg->link, &dev_priv->mm.fence_list);
397 vma->fence = NULL; 395 vma->fence = NULL;
@@ -646,6 +644,7 @@ i915_gem_swizzle_page(struct page *page)
646/** 644/**
647 * i915_gem_object_do_bit_17_swizzle - fixup bit 17 swizzling 645 * i915_gem_object_do_bit_17_swizzle - fixup bit 17 swizzling
648 * @obj: i915 GEM buffer object 646 * @obj: i915 GEM buffer object
647 * @pages: the scattergather list of physical pages
649 * 648 *
650 * This function fixes up the swizzling in case any page frame number for this 649 * This function fixes up the swizzling in case any page frame number for this
651 * object has changed in bit 17 since that state has been saved with 650 * object has changed in bit 17 since that state has been saved with
@@ -656,7 +655,8 @@ i915_gem_swizzle_page(struct page *page)
656 * by swapping them out and back in again). 655 * by swapping them out and back in again).
657 */ 656 */
658void 657void
659i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj) 658i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj,
659 struct sg_table *pages)
660{ 660{
661 struct sgt_iter sgt_iter; 661 struct sgt_iter sgt_iter;
662 struct page *page; 662 struct page *page;
@@ -666,10 +666,9 @@ i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj)
666 return; 666 return;
667 667
668 i = 0; 668 i = 0;
669 for_each_sgt_page(page, sgt_iter, obj->pages) { 669 for_each_sgt_page(page, sgt_iter, pages) {
670 char new_bit_17 = page_to_phys(page) >> 17; 670 char new_bit_17 = page_to_phys(page) >> 17;
671 if ((new_bit_17 & 0x1) != 671 if ((new_bit_17 & 0x1) != (test_bit(i, obj->bit_17) != 0)) {
672 (test_bit(i, obj->bit_17) != 0)) {
673 i915_gem_swizzle_page(page); 672 i915_gem_swizzle_page(page);
674 set_page_dirty(page); 673 set_page_dirty(page);
675 } 674 }
@@ -680,17 +679,19 @@ i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj)
680/** 679/**
681 * i915_gem_object_save_bit_17_swizzle - save bit 17 swizzling 680 * i915_gem_object_save_bit_17_swizzle - save bit 17 swizzling
682 * @obj: i915 GEM buffer object 681 * @obj: i915 GEM buffer object
682 * @pages: the scattergather list of physical pages
683 * 683 *
684 * This function saves the bit 17 of each page frame number so that swizzling 684 * This function saves the bit 17 of each page frame number so that swizzling
685 * can be fixed up later on with i915_gem_object_do_bit_17_swizzle(). This must 685 * can be fixed up later on with i915_gem_object_do_bit_17_swizzle(). This must
686 * be called before the backing storage can be unpinned. 686 * be called before the backing storage can be unpinned.
687 */ 687 */
688void 688void
689i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj) 689i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj,
690 struct sg_table *pages)
690{ 691{
692 const unsigned int page_count = obj->base.size >> PAGE_SHIFT;
691 struct sgt_iter sgt_iter; 693 struct sgt_iter sgt_iter;
692 struct page *page; 694 struct page *page;
693 int page_count = obj->base.size >> PAGE_SHIFT;
694 int i; 695 int i;
695 696
696 if (obj->bit_17 == NULL) { 697 if (obj->bit_17 == NULL) {
@@ -705,7 +706,7 @@ i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj)
705 706
706 i = 0; 707 i = 0;
707 708
708 for_each_sgt_page(page, sgt_iter, obj->pages) { 709 for_each_sgt_page(page, sgt_iter, pages) {
709 if (page_to_phys(page) & (1 << 17)) 710 if (page_to_phys(page) & (1 << 17))
710 __set_bit(i, obj->bit_17); 711 __set_bit(i, obj->bit_17);
711 else 712 else
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 062fb0ad75da..a5fafa3d4fc8 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -31,6 +31,7 @@
31#include "i915_vgpu.h" 31#include "i915_vgpu.h"
32#include "i915_trace.h" 32#include "i915_trace.h"
33#include "intel_drv.h" 33#include "intel_drv.h"
34#include "intel_frontbuffer.h"
34 35
35#define I915_GFP_DMA (GFP_KERNEL | __GFP_HIGHMEM) 36#define I915_GFP_DMA (GFP_KERNEL | __GFP_HIGHMEM)
36 37
@@ -175,7 +176,7 @@ static int ppgtt_bind_vma(struct i915_vma *vma,
175{ 176{
176 u32 pte_flags = 0; 177 u32 pte_flags = 0;
177 178
178 vma->pages = vma->obj->pages; 179 vma->pages = vma->obj->mm.pages;
179 180
180 /* Currently applicable only to VLV */ 181 /* Currently applicable only to VLV */
181 if (vma->obj->gt_ro) 182 if (vma->obj->gt_ro)
@@ -706,6 +707,16 @@ static int gen8_48b_mm_switch(struct i915_hw_ppgtt *ppgtt,
706 return gen8_write_pdp(req, 0, px_dma(&ppgtt->pml4)); 707 return gen8_write_pdp(req, 0, px_dma(&ppgtt->pml4));
707} 708}
708 709
710/* PDE TLBs are a pain to invalidate on GEN8+. When we modify
711 * the page table structures, we mark them dirty so that
712 * context switching/execlist queuing code takes extra steps
713 * to ensure that tlbs are flushed.
714 */
715static void mark_tlbs_dirty(struct i915_hw_ppgtt *ppgtt)
716{
717 ppgtt->pd_dirty_rings = INTEL_INFO(ppgtt->base.dev)->ring_mask;
718}
719
709/* Removes entries from a single page table, releasing it if it's empty. 720/* Removes entries from a single page table, releasing it if it's empty.
710 * Caller can use the return value to update higher-level entries. 721 * Caller can use the return value to update higher-level entries.
711 */ 722 */
@@ -715,9 +726,9 @@ static bool gen8_ppgtt_clear_pt(struct i915_address_space *vm,
715 uint64_t length) 726 uint64_t length)
716{ 727{
717 struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm); 728 struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
718 unsigned int pte_start = gen8_pte_index(start);
719 unsigned int num_entries = gen8_pte_count(start, length); 729 unsigned int num_entries = gen8_pte_count(start, length);
720 uint64_t pte; 730 unsigned int pte = gen8_pte_index(start);
731 unsigned int pte_end = pte + num_entries;
721 gen8_pte_t *pt_vaddr; 732 gen8_pte_t *pt_vaddr;
722 gen8_pte_t scratch_pte = gen8_pte_encode(vm->scratch_page.daddr, 733 gen8_pte_t scratch_pte = gen8_pte_encode(vm->scratch_page.daddr,
723 I915_CACHE_LLC); 734 I915_CACHE_LLC);
@@ -725,7 +736,9 @@ static bool gen8_ppgtt_clear_pt(struct i915_address_space *vm,
725 if (WARN_ON(!px_page(pt))) 736 if (WARN_ON(!px_page(pt)))
726 return false; 737 return false;
727 738
728 bitmap_clear(pt->used_ptes, pte_start, num_entries); 739 GEM_BUG_ON(pte_end > GEN8_PTES);
740
741 bitmap_clear(pt->used_ptes, pte, num_entries);
729 742
730 if (bitmap_empty(pt->used_ptes, GEN8_PTES)) { 743 if (bitmap_empty(pt->used_ptes, GEN8_PTES)) {
731 free_pt(vm->dev, pt); 744 free_pt(vm->dev, pt);
@@ -734,8 +747,8 @@ static bool gen8_ppgtt_clear_pt(struct i915_address_space *vm,
734 747
735 pt_vaddr = kmap_px(pt); 748 pt_vaddr = kmap_px(pt);
736 749
737 for (pte = pte_start; pte < num_entries; pte++) 750 while (pte < pte_end)
738 pt_vaddr[pte] = scratch_pte; 751 pt_vaddr[pte++] = scratch_pte;
739 752
740 kunmap_px(ppgtt, pt_vaddr); 753 kunmap_px(ppgtt, pt_vaddr);
741 754
@@ -806,6 +819,8 @@ static bool gen8_ppgtt_clear_pdp(struct i915_address_space *vm,
806 } 819 }
807 } 820 }
808 821
822 mark_tlbs_dirty(ppgtt);
823
809 if (USES_FULL_48BIT_PPGTT(vm->dev) && 824 if (USES_FULL_48BIT_PPGTT(vm->dev) &&
810 bitmap_empty(pdp->used_pdpes, I915_PDPES_PER_PDP(vm->dev))) { 825 bitmap_empty(pdp->used_pdpes, I915_PDPES_PER_PDP(vm->dev))) {
811 free_pdp(vm->dev, pdp); 826 free_pdp(vm->dev, pdp);
@@ -1280,16 +1295,6 @@ err_out:
1280 return -ENOMEM; 1295 return -ENOMEM;
1281} 1296}
1282 1297
1283/* PDE TLBs are a pain to invalidate on GEN8+. When we modify
1284 * the page table structures, we mark them dirty so that
1285 * context switching/execlist queuing code takes extra steps
1286 * to ensure that tlbs are flushed.
1287 */
1288static void mark_tlbs_dirty(struct i915_hw_ppgtt *ppgtt)
1289{
1290 ppgtt->pd_dirty_rings = INTEL_INFO(ppgtt->base.dev)->ring_mask;
1291}
1292
1293static int gen8_alloc_va_range_3lvl(struct i915_address_space *vm, 1298static int gen8_alloc_va_range_3lvl(struct i915_address_space *vm,
1294 struct i915_page_directory_pointer *pdp, 1299 struct i915_page_directory_pointer *pdp,
1295 uint64_t start, 1300 uint64_t start,
@@ -2184,8 +2189,10 @@ static int __hw_ppgtt_init(struct i915_hw_ppgtt *ppgtt,
2184} 2189}
2185 2190
2186static void i915_address_space_init(struct i915_address_space *vm, 2191static void i915_address_space_init(struct i915_address_space *vm,
2187 struct drm_i915_private *dev_priv) 2192 struct drm_i915_private *dev_priv,
2193 const char *name)
2188{ 2194{
2195 i915_gem_timeline_init(dev_priv, &vm->timeline, name);
2189 drm_mm_init(&vm->mm, vm->start, vm->total); 2196 drm_mm_init(&vm->mm, vm->start, vm->total);
2190 INIT_LIST_HEAD(&vm->active_list); 2197 INIT_LIST_HEAD(&vm->active_list);
2191 INIT_LIST_HEAD(&vm->inactive_list); 2198 INIT_LIST_HEAD(&vm->inactive_list);
@@ -2214,14 +2221,15 @@ static void gtt_write_workarounds(struct drm_device *dev)
2214 2221
2215static int i915_ppgtt_init(struct i915_hw_ppgtt *ppgtt, 2222static int i915_ppgtt_init(struct i915_hw_ppgtt *ppgtt,
2216 struct drm_i915_private *dev_priv, 2223 struct drm_i915_private *dev_priv,
2217 struct drm_i915_file_private *file_priv) 2224 struct drm_i915_file_private *file_priv,
2225 const char *name)
2218{ 2226{
2219 int ret; 2227 int ret;
2220 2228
2221 ret = __hw_ppgtt_init(ppgtt, dev_priv); 2229 ret = __hw_ppgtt_init(ppgtt, dev_priv);
2222 if (ret == 0) { 2230 if (ret == 0) {
2223 kref_init(&ppgtt->ref); 2231 kref_init(&ppgtt->ref);
2224 i915_address_space_init(&ppgtt->base, dev_priv); 2232 i915_address_space_init(&ppgtt->base, dev_priv, name);
2225 ppgtt->base.file = file_priv; 2233 ppgtt->base.file = file_priv;
2226 } 2234 }
2227 2235
@@ -2257,7 +2265,8 @@ int i915_ppgtt_init_hw(struct drm_device *dev)
2257 2265
2258struct i915_hw_ppgtt * 2266struct i915_hw_ppgtt *
2259i915_ppgtt_create(struct drm_i915_private *dev_priv, 2267i915_ppgtt_create(struct drm_i915_private *dev_priv,
2260 struct drm_i915_file_private *fpriv) 2268 struct drm_i915_file_private *fpriv,
2269 const char *name)
2261{ 2270{
2262 struct i915_hw_ppgtt *ppgtt; 2271 struct i915_hw_ppgtt *ppgtt;
2263 int ret; 2272 int ret;
@@ -2266,7 +2275,7 @@ i915_ppgtt_create(struct drm_i915_private *dev_priv,
2266 if (!ppgtt) 2275 if (!ppgtt)
2267 return ERR_PTR(-ENOMEM); 2276 return ERR_PTR(-ENOMEM);
2268 2277
2269 ret = i915_ppgtt_init(ppgtt, dev_priv, fpriv); 2278 ret = i915_ppgtt_init(ppgtt, dev_priv, fpriv, name);
2270 if (ret) { 2279 if (ret) {
2271 kfree(ppgtt); 2280 kfree(ppgtt);
2272 return ERR_PTR(ret); 2281 return ERR_PTR(ret);
@@ -2289,6 +2298,7 @@ void i915_ppgtt_release(struct kref *kref)
2289 WARN_ON(!list_empty(&ppgtt->base.inactive_list)); 2298 WARN_ON(!list_empty(&ppgtt->base.inactive_list));
2290 WARN_ON(!list_empty(&ppgtt->base.unbound_list)); 2299 WARN_ON(!list_empty(&ppgtt->base.unbound_list));
2291 2300
2301 i915_gem_timeline_fini(&ppgtt->base.timeline);
2292 list_del(&ppgtt->base.global_link); 2302 list_del(&ppgtt->base.global_link);
2293 drm_mm_takedown(&ppgtt->base.mm); 2303 drm_mm_takedown(&ppgtt->base.mm);
2294 2304
@@ -2370,14 +2380,15 @@ void i915_gem_suspend_gtt_mappings(struct drm_device *dev)
2370 i915_ggtt_flush(dev_priv); 2380 i915_ggtt_flush(dev_priv);
2371} 2381}
2372 2382
2373int i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj) 2383int i915_gem_gtt_prepare_pages(struct drm_i915_gem_object *obj,
2384 struct sg_table *pages)
2374{ 2385{
2375 if (!dma_map_sg(&obj->base.dev->pdev->dev, 2386 if (dma_map_sg(&obj->base.dev->pdev->dev,
2376 obj->pages->sgl, obj->pages->nents, 2387 pages->sgl, pages->nents,
2377 PCI_DMA_BIDIRECTIONAL)) 2388 PCI_DMA_BIDIRECTIONAL))
2378 return -ENOSPC; 2389 return 0;
2379 2390
2380 return 0; 2391 return -ENOSPC;
2381} 2392}
2382 2393
2383static void gen8_set_pte(void __iomem *addr, gen8_pte_t pte) 2394static void gen8_set_pte(void __iomem *addr, gen8_pte_t pte)
@@ -2395,16 +2406,11 @@ static void gen8_ggtt_insert_page(struct i915_address_space *vm,
2395 gen8_pte_t __iomem *pte = 2406 gen8_pte_t __iomem *pte =
2396 (gen8_pte_t __iomem *)dev_priv->ggtt.gsm + 2407 (gen8_pte_t __iomem *)dev_priv->ggtt.gsm +
2397 (offset >> PAGE_SHIFT); 2408 (offset >> PAGE_SHIFT);
2398 int rpm_atomic_seq;
2399
2400 rpm_atomic_seq = assert_rpm_atomic_begin(dev_priv);
2401 2409
2402 gen8_set_pte(pte, gen8_pte_encode(addr, level)); 2410 gen8_set_pte(pte, gen8_pte_encode(addr, level));
2403 2411
2404 I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN); 2412 I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
2405 POSTING_READ(GFX_FLSH_CNTL_GEN6); 2413 POSTING_READ(GFX_FLSH_CNTL_GEN6);
2406
2407 assert_rpm_atomic_end(dev_priv, rpm_atomic_seq);
2408} 2414}
2409 2415
2410static void gen8_ggtt_insert_entries(struct i915_address_space *vm, 2416static void gen8_ggtt_insert_entries(struct i915_address_space *vm,
@@ -2418,11 +2424,8 @@ static void gen8_ggtt_insert_entries(struct i915_address_space *vm,
2418 gen8_pte_t __iomem *gtt_entries; 2424 gen8_pte_t __iomem *gtt_entries;
2419 gen8_pte_t gtt_entry; 2425 gen8_pte_t gtt_entry;
2420 dma_addr_t addr; 2426 dma_addr_t addr;
2421 int rpm_atomic_seq;
2422 int i = 0; 2427 int i = 0;
2423 2428
2424 rpm_atomic_seq = assert_rpm_atomic_begin(dev_priv);
2425
2426 gtt_entries = (gen8_pte_t __iomem *)ggtt->gsm + (start >> PAGE_SHIFT); 2429 gtt_entries = (gen8_pte_t __iomem *)ggtt->gsm + (start >> PAGE_SHIFT);
2427 2430
2428 for_each_sgt_dma(addr, sgt_iter, st) { 2431 for_each_sgt_dma(addr, sgt_iter, st) {
@@ -2446,8 +2449,6 @@ static void gen8_ggtt_insert_entries(struct i915_address_space *vm,
2446 */ 2449 */
2447 I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN); 2450 I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
2448 POSTING_READ(GFX_FLSH_CNTL_GEN6); 2451 POSTING_READ(GFX_FLSH_CNTL_GEN6);
2449
2450 assert_rpm_atomic_end(dev_priv, rpm_atomic_seq);
2451} 2452}
2452 2453
2453struct insert_entries { 2454struct insert_entries {
@@ -2486,16 +2487,11 @@ static void gen6_ggtt_insert_page(struct i915_address_space *vm,
2486 gen6_pte_t __iomem *pte = 2487 gen6_pte_t __iomem *pte =
2487 (gen6_pte_t __iomem *)dev_priv->ggtt.gsm + 2488 (gen6_pte_t __iomem *)dev_priv->ggtt.gsm +
2488 (offset >> PAGE_SHIFT); 2489 (offset >> PAGE_SHIFT);
2489 int rpm_atomic_seq;
2490
2491 rpm_atomic_seq = assert_rpm_atomic_begin(dev_priv);
2492 2490
2493 iowrite32(vm->pte_encode(addr, level, flags), pte); 2491 iowrite32(vm->pte_encode(addr, level, flags), pte);
2494 2492
2495 I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN); 2493 I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
2496 POSTING_READ(GFX_FLSH_CNTL_GEN6); 2494 POSTING_READ(GFX_FLSH_CNTL_GEN6);
2497
2498 assert_rpm_atomic_end(dev_priv, rpm_atomic_seq);
2499} 2495}
2500 2496
2501/* 2497/*
@@ -2515,11 +2511,8 @@ static void gen6_ggtt_insert_entries(struct i915_address_space *vm,
2515 gen6_pte_t __iomem *gtt_entries; 2511 gen6_pte_t __iomem *gtt_entries;
2516 gen6_pte_t gtt_entry; 2512 gen6_pte_t gtt_entry;
2517 dma_addr_t addr; 2513 dma_addr_t addr;
2518 int rpm_atomic_seq;
2519 int i = 0; 2514 int i = 0;
2520 2515
2521 rpm_atomic_seq = assert_rpm_atomic_begin(dev_priv);
2522
2523 gtt_entries = (gen6_pte_t __iomem *)ggtt->gsm + (start >> PAGE_SHIFT); 2516 gtt_entries = (gen6_pte_t __iomem *)ggtt->gsm + (start >> PAGE_SHIFT);
2524 2517
2525 for_each_sgt_dma(addr, sgt_iter, st) { 2518 for_each_sgt_dma(addr, sgt_iter, st) {
@@ -2542,8 +2535,6 @@ static void gen6_ggtt_insert_entries(struct i915_address_space *vm,
2542 */ 2535 */
2543 I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN); 2536 I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
2544 POSTING_READ(GFX_FLSH_CNTL_GEN6); 2537 POSTING_READ(GFX_FLSH_CNTL_GEN6);
2545
2546 assert_rpm_atomic_end(dev_priv, rpm_atomic_seq);
2547} 2538}
2548 2539
2549static void nop_clear_range(struct i915_address_space *vm, 2540static void nop_clear_range(struct i915_address_space *vm,
@@ -2554,7 +2545,6 @@ static void nop_clear_range(struct i915_address_space *vm,
2554static void gen8_ggtt_clear_range(struct i915_address_space *vm, 2545static void gen8_ggtt_clear_range(struct i915_address_space *vm,
2555 uint64_t start, uint64_t length) 2546 uint64_t start, uint64_t length)
2556{ 2547{
2557 struct drm_i915_private *dev_priv = to_i915(vm->dev);
2558 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 2548 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm);
2559 unsigned first_entry = start >> PAGE_SHIFT; 2549 unsigned first_entry = start >> PAGE_SHIFT;
2560 unsigned num_entries = length >> PAGE_SHIFT; 2550 unsigned num_entries = length >> PAGE_SHIFT;
@@ -2562,9 +2552,6 @@ static void gen8_ggtt_clear_range(struct i915_address_space *vm,
2562 (gen8_pte_t __iomem *)ggtt->gsm + first_entry; 2552 (gen8_pte_t __iomem *)ggtt->gsm + first_entry;
2563 const int max_entries = ggtt_total_entries(ggtt) - first_entry; 2553 const int max_entries = ggtt_total_entries(ggtt) - first_entry;
2564 int i; 2554 int i;
2565 int rpm_atomic_seq;
2566
2567 rpm_atomic_seq = assert_rpm_atomic_begin(dev_priv);
2568 2555
2569 if (WARN(num_entries > max_entries, 2556 if (WARN(num_entries > max_entries,
2570 "First entry = %d; Num entries = %d (max=%d)\n", 2557 "First entry = %d; Num entries = %d (max=%d)\n",
@@ -2576,15 +2563,12 @@ static void gen8_ggtt_clear_range(struct i915_address_space *vm,
2576 for (i = 0; i < num_entries; i++) 2563 for (i = 0; i < num_entries; i++)
2577 gen8_set_pte(&gtt_base[i], scratch_pte); 2564 gen8_set_pte(&gtt_base[i], scratch_pte);
2578 readl(gtt_base); 2565 readl(gtt_base);
2579
2580 assert_rpm_atomic_end(dev_priv, rpm_atomic_seq);
2581} 2566}
2582 2567
2583static void gen6_ggtt_clear_range(struct i915_address_space *vm, 2568static void gen6_ggtt_clear_range(struct i915_address_space *vm,
2584 uint64_t start, 2569 uint64_t start,
2585 uint64_t length) 2570 uint64_t length)
2586{ 2571{
2587 struct drm_i915_private *dev_priv = to_i915(vm->dev);
2588 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 2572 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm);
2589 unsigned first_entry = start >> PAGE_SHIFT; 2573 unsigned first_entry = start >> PAGE_SHIFT;
2590 unsigned num_entries = length >> PAGE_SHIFT; 2574 unsigned num_entries = length >> PAGE_SHIFT;
@@ -2592,9 +2576,6 @@ static void gen6_ggtt_clear_range(struct i915_address_space *vm,
2592 (gen6_pte_t __iomem *)ggtt->gsm + first_entry; 2576 (gen6_pte_t __iomem *)ggtt->gsm + first_entry;
2593 const int max_entries = ggtt_total_entries(ggtt) - first_entry; 2577 const int max_entries = ggtt_total_entries(ggtt) - first_entry;
2594 int i; 2578 int i;
2595 int rpm_atomic_seq;
2596
2597 rpm_atomic_seq = assert_rpm_atomic_begin(dev_priv);
2598 2579
2599 if (WARN(num_entries > max_entries, 2580 if (WARN(num_entries > max_entries,
2600 "First entry = %d; Num entries = %d (max=%d)\n", 2581 "First entry = %d; Num entries = %d (max=%d)\n",
@@ -2607,8 +2588,6 @@ static void gen6_ggtt_clear_range(struct i915_address_space *vm,
2607 for (i = 0; i < num_entries; i++) 2588 for (i = 0; i < num_entries; i++)
2608 iowrite32(scratch_pte, &gtt_base[i]); 2589 iowrite32(scratch_pte, &gtt_base[i]);
2609 readl(gtt_base); 2590 readl(gtt_base);
2610
2611 assert_rpm_atomic_end(dev_priv, rpm_atomic_seq);
2612} 2591}
2613 2592
2614static void i915_ggtt_insert_page(struct i915_address_space *vm, 2593static void i915_ggtt_insert_page(struct i915_address_space *vm,
@@ -2617,16 +2596,10 @@ static void i915_ggtt_insert_page(struct i915_address_space *vm,
2617 enum i915_cache_level cache_level, 2596 enum i915_cache_level cache_level,
2618 u32 unused) 2597 u32 unused)
2619{ 2598{
2620 struct drm_i915_private *dev_priv = to_i915(vm->dev);
2621 unsigned int flags = (cache_level == I915_CACHE_NONE) ? 2599 unsigned int flags = (cache_level == I915_CACHE_NONE) ?
2622 AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY; 2600 AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY;
2623 int rpm_atomic_seq;
2624
2625 rpm_atomic_seq = assert_rpm_atomic_begin(dev_priv);
2626 2601
2627 intel_gtt_insert_page(addr, offset >> PAGE_SHIFT, flags); 2602 intel_gtt_insert_page(addr, offset >> PAGE_SHIFT, flags);
2628
2629 assert_rpm_atomic_end(dev_priv, rpm_atomic_seq);
2630} 2603}
2631 2604
2632static void i915_ggtt_insert_entries(struct i915_address_space *vm, 2605static void i915_ggtt_insert_entries(struct i915_address_space *vm,
@@ -2634,39 +2607,25 @@ static void i915_ggtt_insert_entries(struct i915_address_space *vm,
2634 uint64_t start, 2607 uint64_t start,
2635 enum i915_cache_level cache_level, u32 unused) 2608 enum i915_cache_level cache_level, u32 unused)
2636{ 2609{
2637 struct drm_i915_private *dev_priv = to_i915(vm->dev);
2638 unsigned int flags = (cache_level == I915_CACHE_NONE) ? 2610 unsigned int flags = (cache_level == I915_CACHE_NONE) ?
2639 AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY; 2611 AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY;
2640 int rpm_atomic_seq;
2641
2642 rpm_atomic_seq = assert_rpm_atomic_begin(dev_priv);
2643 2612
2644 intel_gtt_insert_sg_entries(pages, start >> PAGE_SHIFT, flags); 2613 intel_gtt_insert_sg_entries(pages, start >> PAGE_SHIFT, flags);
2645 2614
2646 assert_rpm_atomic_end(dev_priv, rpm_atomic_seq);
2647
2648} 2615}
2649 2616
2650static void i915_ggtt_clear_range(struct i915_address_space *vm, 2617static void i915_ggtt_clear_range(struct i915_address_space *vm,
2651 uint64_t start, 2618 uint64_t start,
2652 uint64_t length) 2619 uint64_t length)
2653{ 2620{
2654 struct drm_i915_private *dev_priv = to_i915(vm->dev); 2621 intel_gtt_clear_range(start >> PAGE_SHIFT, length >> PAGE_SHIFT);
2655 unsigned first_entry = start >> PAGE_SHIFT;
2656 unsigned num_entries = length >> PAGE_SHIFT;
2657 int rpm_atomic_seq;
2658
2659 rpm_atomic_seq = assert_rpm_atomic_begin(dev_priv);
2660
2661 intel_gtt_clear_range(first_entry, num_entries);
2662
2663 assert_rpm_atomic_end(dev_priv, rpm_atomic_seq);
2664} 2622}
2665 2623
2666static int ggtt_bind_vma(struct i915_vma *vma, 2624static int ggtt_bind_vma(struct i915_vma *vma,
2667 enum i915_cache_level cache_level, 2625 enum i915_cache_level cache_level,
2668 u32 flags) 2626 u32 flags)
2669{ 2627{
2628 struct drm_i915_private *i915 = to_i915(vma->vm->dev);
2670 struct drm_i915_gem_object *obj = vma->obj; 2629 struct drm_i915_gem_object *obj = vma->obj;
2671 u32 pte_flags = 0; 2630 u32 pte_flags = 0;
2672 int ret; 2631 int ret;
@@ -2679,8 +2638,10 @@ static int ggtt_bind_vma(struct i915_vma *vma,
2679 if (obj->gt_ro) 2638 if (obj->gt_ro)
2680 pte_flags |= PTE_READ_ONLY; 2639 pte_flags |= PTE_READ_ONLY;
2681 2640
2641 intel_runtime_pm_get(i915);
2682 vma->vm->insert_entries(vma->vm, vma->pages, vma->node.start, 2642 vma->vm->insert_entries(vma->vm, vma->pages, vma->node.start,
2683 cache_level, pte_flags); 2643 cache_level, pte_flags);
2644 intel_runtime_pm_put(i915);
2684 2645
2685 /* 2646 /*
2686 * Without aliasing PPGTT there's no difference between 2647 * Without aliasing PPGTT there's no difference between
@@ -2696,6 +2657,7 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma,
2696 enum i915_cache_level cache_level, 2657 enum i915_cache_level cache_level,
2697 u32 flags) 2658 u32 flags)
2698{ 2659{
2660 struct drm_i915_private *i915 = to_i915(vma->vm->dev);
2699 u32 pte_flags; 2661 u32 pte_flags;
2700 int ret; 2662 int ret;
2701 2663
@@ -2710,14 +2672,15 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma,
2710 2672
2711 2673
2712 if (flags & I915_VMA_GLOBAL_BIND) { 2674 if (flags & I915_VMA_GLOBAL_BIND) {
2675 intel_runtime_pm_get(i915);
2713 vma->vm->insert_entries(vma->vm, 2676 vma->vm->insert_entries(vma->vm,
2714 vma->pages, vma->node.start, 2677 vma->pages, vma->node.start,
2715 cache_level, pte_flags); 2678 cache_level, pte_flags);
2679 intel_runtime_pm_put(i915);
2716 } 2680 }
2717 2681
2718 if (flags & I915_VMA_LOCAL_BIND) { 2682 if (flags & I915_VMA_LOCAL_BIND) {
2719 struct i915_hw_ppgtt *appgtt = 2683 struct i915_hw_ppgtt *appgtt = i915->mm.aliasing_ppgtt;
2720 to_i915(vma->vm->dev)->mm.aliasing_ppgtt;
2721 appgtt->base.insert_entries(&appgtt->base, 2684 appgtt->base.insert_entries(&appgtt->base,
2722 vma->pages, vma->node.start, 2685 vma->pages, vma->node.start,
2723 cache_level, pte_flags); 2686 cache_level, pte_flags);
@@ -2728,19 +2691,24 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma,
2728 2691
2729static void ggtt_unbind_vma(struct i915_vma *vma) 2692static void ggtt_unbind_vma(struct i915_vma *vma)
2730{ 2693{
2731 struct i915_hw_ppgtt *appgtt = to_i915(vma->vm->dev)->mm.aliasing_ppgtt; 2694 struct drm_i915_private *i915 = to_i915(vma->vm->dev);
2695 struct i915_hw_ppgtt *appgtt = i915->mm.aliasing_ppgtt;
2732 const u64 size = min(vma->size, vma->node.size); 2696 const u64 size = min(vma->size, vma->node.size);
2733 2697
2734 if (vma->flags & I915_VMA_GLOBAL_BIND) 2698 if (vma->flags & I915_VMA_GLOBAL_BIND) {
2699 intel_runtime_pm_get(i915);
2735 vma->vm->clear_range(vma->vm, 2700 vma->vm->clear_range(vma->vm,
2736 vma->node.start, size); 2701 vma->node.start, size);
2702 intel_runtime_pm_put(i915);
2703 }
2737 2704
2738 if (vma->flags & I915_VMA_LOCAL_BIND && appgtt) 2705 if (vma->flags & I915_VMA_LOCAL_BIND && appgtt)
2739 appgtt->base.clear_range(&appgtt->base, 2706 appgtt->base.clear_range(&appgtt->base,
2740 vma->node.start, size); 2707 vma->node.start, size);
2741} 2708}
2742 2709
2743void i915_gem_gtt_finish_object(struct drm_i915_gem_object *obj) 2710void i915_gem_gtt_finish_pages(struct drm_i915_gem_object *obj,
2711 struct sg_table *pages)
2744{ 2712{
2745 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 2713 struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
2746 struct device *kdev = &dev_priv->drm.pdev->dev; 2714 struct device *kdev = &dev_priv->drm.pdev->dev;
@@ -2754,8 +2722,7 @@ void i915_gem_gtt_finish_object(struct drm_i915_gem_object *obj)
2754 } 2722 }
2755 } 2723 }
2756 2724
2757 dma_unmap_sg(kdev, obj->pages->sgl, obj->pages->nents, 2725 dma_unmap_sg(kdev, pages->sgl, pages->nents, PCI_DMA_BIDIRECTIONAL);
2758 PCI_DMA_BIDIRECTIONAL);
2759} 2726}
2760 2727
2761static void i915_gtt_color_adjust(struct drm_mm_node *node, 2728static void i915_gtt_color_adjust(struct drm_mm_node *node,
@@ -3274,11 +3241,13 @@ int i915_ggtt_init_hw(struct drm_i915_private *dev_priv)
3274 /* Subtract the guard page before address space initialization to 3241 /* Subtract the guard page before address space initialization to
3275 * shrink the range used by drm_mm. 3242 * shrink the range used by drm_mm.
3276 */ 3243 */
3244 mutex_lock(&dev_priv->drm.struct_mutex);
3277 ggtt->base.total -= PAGE_SIZE; 3245 ggtt->base.total -= PAGE_SIZE;
3278 i915_address_space_init(&ggtt->base, dev_priv); 3246 i915_address_space_init(&ggtt->base, dev_priv, "[global]");
3279 ggtt->base.total += PAGE_SIZE; 3247 ggtt->base.total += PAGE_SIZE;
3280 if (!HAS_LLC(dev_priv)) 3248 if (!HAS_LLC(dev_priv))
3281 ggtt->base.mm.color_adjust = i915_gtt_color_adjust; 3249 ggtt->base.mm.color_adjust = i915_gtt_color_adjust;
3250 mutex_unlock(&dev_priv->drm.struct_mutex);
3282 3251
3283 if (!io_mapping_init_wc(&dev_priv->ggtt.mappable, 3252 if (!io_mapping_init_wc(&dev_priv->ggtt.mappable,
3284 dev_priv->ggtt.mappable_base, 3253 dev_priv->ggtt.mappable_base,
@@ -3327,7 +3296,7 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev)
3327 3296
3328 /* clflush objects bound into the GGTT and rebind them. */ 3297 /* clflush objects bound into the GGTT and rebind them. */
3329 list_for_each_entry_safe(obj, on, 3298 list_for_each_entry_safe(obj, on,
3330 &dev_priv->mm.bound_list, global_list) { 3299 &dev_priv->mm.bound_list, global_link) {
3331 bool ggtt_bound = false; 3300 bool ggtt_bound = false;
3332 struct i915_vma *vma; 3301 struct i915_vma *vma;
3333 3302
@@ -3386,6 +3355,7 @@ i915_vma_retire(struct i915_gem_active *active,
3386 const unsigned int idx = rq->engine->id; 3355 const unsigned int idx = rq->engine->id;
3387 struct i915_vma *vma = 3356 struct i915_vma *vma =
3388 container_of(active, struct i915_vma, last_read[idx]); 3357 container_of(active, struct i915_vma, last_read[idx]);
3358 struct drm_i915_gem_object *obj = vma->obj;
3389 3359
3390 GEM_BUG_ON(!i915_vma_has_active_engine(vma, idx)); 3360 GEM_BUG_ON(!i915_vma_has_active_engine(vma, idx));
3391 3361
@@ -3396,6 +3366,34 @@ i915_vma_retire(struct i915_gem_active *active,
3396 list_move_tail(&vma->vm_link, &vma->vm->inactive_list); 3366 list_move_tail(&vma->vm_link, &vma->vm->inactive_list);
3397 if (unlikely(i915_vma_is_closed(vma) && !i915_vma_is_pinned(vma))) 3367 if (unlikely(i915_vma_is_closed(vma) && !i915_vma_is_pinned(vma)))
3398 WARN_ON(i915_vma_unbind(vma)); 3368 WARN_ON(i915_vma_unbind(vma));
3369
3370 GEM_BUG_ON(!i915_gem_object_is_active(obj));
3371 if (--obj->active_count)
3372 return;
3373
3374 /* Bump our place on the bound list to keep it roughly in LRU order
3375 * so that we don't steal from recently used but inactive objects
3376 * (unless we are forced to ofc!)
3377 */
3378 if (obj->bind_count)
3379 list_move_tail(&obj->global_link, &rq->i915->mm.bound_list);
3380
3381 obj->mm.dirty = true; /* be paranoid */
3382
3383 if (i915_gem_object_has_active_reference(obj)) {
3384 i915_gem_object_clear_active_reference(obj);
3385 i915_gem_object_put(obj);
3386 }
3387}
3388
3389static void
3390i915_ggtt_retire__write(struct i915_gem_active *active,
3391 struct drm_i915_gem_request *request)
3392{
3393 struct i915_vma *vma =
3394 container_of(active, struct i915_vma, last_write);
3395
3396 intel_fb_obj_flush(vma->obj, true, ORIGIN_CS);
3399} 3397}
3400 3398
3401void i915_vma_destroy(struct i915_vma *vma) 3399void i915_vma_destroy(struct i915_vma *vma)
@@ -3417,17 +3415,40 @@ void i915_vma_close(struct i915_vma *vma)
3417 GEM_BUG_ON(i915_vma_is_closed(vma)); 3415 GEM_BUG_ON(i915_vma_is_closed(vma));
3418 vma->flags |= I915_VMA_CLOSED; 3416 vma->flags |= I915_VMA_CLOSED;
3419 3417
3420 list_del_init(&vma->obj_link); 3418 list_del(&vma->obj_link);
3419 rb_erase(&vma->obj_node, &vma->obj->vma_tree);
3420
3421 if (!i915_vma_is_active(vma) && !i915_vma_is_pinned(vma)) 3421 if (!i915_vma_is_active(vma) && !i915_vma_is_pinned(vma))
3422 WARN_ON(i915_vma_unbind(vma)); 3422 WARN_ON(i915_vma_unbind(vma));
3423} 3423}
3424 3424
3425static inline long vma_compare(struct i915_vma *vma,
3426 struct i915_address_space *vm,
3427 const struct i915_ggtt_view *view)
3428{
3429 GEM_BUG_ON(view && !i915_is_ggtt(vm));
3430
3431 if (vma->vm != vm)
3432 return vma->vm - vm;
3433
3434 if (!view)
3435 return vma->ggtt_view.type;
3436
3437 if (vma->ggtt_view.type != view->type)
3438 return vma->ggtt_view.type - view->type;
3439
3440 return memcmp(&vma->ggtt_view.params,
3441 &view->params,
3442 sizeof(view->params));
3443}
3444
3425static struct i915_vma * 3445static struct i915_vma *
3426__i915_vma_create(struct drm_i915_gem_object *obj, 3446__i915_vma_create(struct drm_i915_gem_object *obj,
3427 struct i915_address_space *vm, 3447 struct i915_address_space *vm,
3428 const struct i915_ggtt_view *view) 3448 const struct i915_ggtt_view *view)
3429{ 3449{
3430 struct i915_vma *vma; 3450 struct i915_vma *vma;
3451 struct rb_node *rb, **p;
3431 int i; 3452 int i;
3432 3453
3433 GEM_BUG_ON(vm->closed); 3454 GEM_BUG_ON(vm->closed);
@@ -3439,6 +3460,8 @@ __i915_vma_create(struct drm_i915_gem_object *obj,
3439 INIT_LIST_HEAD(&vma->exec_list); 3460 INIT_LIST_HEAD(&vma->exec_list);
3440 for (i = 0; i < ARRAY_SIZE(vma->last_read); i++) 3461 for (i = 0; i < ARRAY_SIZE(vma->last_read); i++)
3441 init_request_active(&vma->last_read[i], i915_vma_retire); 3462 init_request_active(&vma->last_read[i], i915_vma_retire);
3463 init_request_active(&vma->last_write,
3464 i915_is_ggtt(vm) ? i915_ggtt_retire__write : NULL);
3442 init_request_active(&vma->last_fence, NULL); 3465 init_request_active(&vma->last_fence, NULL);
3443 list_add(&vma->vm_link, &vm->unbound_list); 3466 list_add(&vma->vm_link, &vm->unbound_list);
3444 vma->vm = vm; 3467 vma->vm = vm;
@@ -3459,33 +3482,28 @@ __i915_vma_create(struct drm_i915_gem_object *obj,
3459 3482
3460 if (i915_is_ggtt(vm)) { 3483 if (i915_is_ggtt(vm)) {
3461 vma->flags |= I915_VMA_GGTT; 3484 vma->flags |= I915_VMA_GGTT;
3485 list_add(&vma->obj_link, &obj->vma_list);
3462 } else { 3486 } else {
3463 i915_ppgtt_get(i915_vm_to_ppgtt(vm)); 3487 i915_ppgtt_get(i915_vm_to_ppgtt(vm));
3488 list_add_tail(&vma->obj_link, &obj->vma_list);
3464 } 3489 }
3465 3490
3466 list_add_tail(&vma->obj_link, &obj->vma_list); 3491 rb = NULL;
3467 return vma; 3492 p = &obj->vma_tree.rb_node;
3468} 3493 while (*p) {
3469 3494 struct i915_vma *pos;
3470static inline bool vma_matches(struct i915_vma *vma,
3471 struct i915_address_space *vm,
3472 const struct i915_ggtt_view *view)
3473{
3474 if (vma->vm != vm)
3475 return false;
3476 3495
3477 if (!i915_vma_is_ggtt(vma)) 3496 rb = *p;
3478 return true; 3497 pos = rb_entry(rb, struct i915_vma, obj_node);
3479 3498 if (vma_compare(pos, vm, view) < 0)
3480 if (!view) 3499 p = &rb->rb_right;
3481 return vma->ggtt_view.type == 0; 3500 else
3482 3501 p = &rb->rb_left;
3483 if (vma->ggtt_view.type != view->type) 3502 }
3484 return false; 3503 rb_link_node(&vma->obj_node, rb, p);
3504 rb_insert_color(&vma->obj_node, &obj->vma_tree);
3485 3505
3486 return memcmp(&vma->ggtt_view.params, 3506 return vma;
3487 &view->params,
3488 sizeof(view->params)) == 0;
3489} 3507}
3490 3508
3491struct i915_vma * 3509struct i915_vma *
@@ -3493,6 +3511,7 @@ i915_vma_create(struct drm_i915_gem_object *obj,
3493 struct i915_address_space *vm, 3511 struct i915_address_space *vm,
3494 const struct i915_ggtt_view *view) 3512 const struct i915_ggtt_view *view)
3495{ 3513{
3514 lockdep_assert_held(&obj->base.dev->struct_mutex);
3496 GEM_BUG_ON(view && !i915_is_ggtt(vm)); 3515 GEM_BUG_ON(view && !i915_is_ggtt(vm));
3497 GEM_BUG_ON(i915_gem_obj_to_vma(obj, vm, view)); 3516 GEM_BUG_ON(i915_gem_obj_to_vma(obj, vm, view));
3498 3517
@@ -3504,12 +3523,23 @@ i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
3504 struct i915_address_space *vm, 3523 struct i915_address_space *vm,
3505 const struct i915_ggtt_view *view) 3524 const struct i915_ggtt_view *view)
3506{ 3525{
3507 struct i915_vma *vma; 3526 struct rb_node *rb;
3527
3528 rb = obj->vma_tree.rb_node;
3529 while (rb) {
3530 struct i915_vma *vma = rb_entry(rb, struct i915_vma, obj_node);
3531 long cmp;
3508 3532
3509 list_for_each_entry_reverse(vma, &obj->vma_list, obj_link) 3533 cmp = vma_compare(vma, vm, view);
3510 if (vma_matches(vma, vm, view)) 3534 if (cmp == 0)
3511 return vma; 3535 return vma;
3512 3536
3537 if (cmp < 0)
3538 rb = rb->rb_right;
3539 else
3540 rb = rb->rb_left;
3541 }
3542
3513 return NULL; 3543 return NULL;
3514} 3544}
3515 3545
@@ -3520,11 +3550,14 @@ i915_gem_obj_lookup_or_create_vma(struct drm_i915_gem_object *obj,
3520{ 3550{
3521 struct i915_vma *vma; 3551 struct i915_vma *vma;
3522 3552
3553 lockdep_assert_held(&obj->base.dev->struct_mutex);
3523 GEM_BUG_ON(view && !i915_is_ggtt(vm)); 3554 GEM_BUG_ON(view && !i915_is_ggtt(vm));
3524 3555
3525 vma = i915_gem_obj_to_vma(obj, vm, view); 3556 vma = i915_gem_obj_to_vma(obj, vm, view);
3526 if (!vma) 3557 if (!vma) {
3527 vma = __i915_vma_create(obj, vm, view); 3558 vma = __i915_vma_create(obj, vm, view);
3559 GEM_BUG_ON(vma != i915_gem_obj_to_vma(obj, vm, view));
3560 }
3528 3561
3529 GEM_BUG_ON(i915_vma_is_closed(vma)); 3562 GEM_BUG_ON(i915_vma_is_closed(vma));
3530 return vma; 3563 return vma;
@@ -3590,7 +3623,7 @@ intel_rotate_fb_obj_pages(const struct intel_rotation_info *rot_info,
3590 3623
3591 /* Populate source page list from the object. */ 3624 /* Populate source page list from the object. */
3592 i = 0; 3625 i = 0;
3593 for_each_sgt_dma(dma_addr, sgt_iter, obj->pages) 3626 for_each_sgt_dma(dma_addr, sgt_iter, obj->mm.pages)
3594 page_addr_list[i++] = dma_addr; 3627 page_addr_list[i++] = dma_addr;
3595 3628
3596 GEM_BUG_ON(i != n_pages); 3629 GEM_BUG_ON(i != n_pages);
@@ -3626,35 +3659,47 @@ intel_partial_pages(const struct i915_ggtt_view *view,
3626 struct drm_i915_gem_object *obj) 3659 struct drm_i915_gem_object *obj)
3627{ 3660{
3628 struct sg_table *st; 3661 struct sg_table *st;
3629 struct scatterlist *sg; 3662 struct scatterlist *sg, *iter;
3630 struct sg_page_iter obj_sg_iter; 3663 unsigned int count = view->params.partial.size;
3664 unsigned int offset;
3631 int ret = -ENOMEM; 3665 int ret = -ENOMEM;
3632 3666
3633 st = kmalloc(sizeof(*st), GFP_KERNEL); 3667 st = kmalloc(sizeof(*st), GFP_KERNEL);
3634 if (!st) 3668 if (!st)
3635 goto err_st_alloc; 3669 goto err_st_alloc;
3636 3670
3637 ret = sg_alloc_table(st, view->params.partial.size, GFP_KERNEL); 3671 ret = sg_alloc_table(st, count, GFP_KERNEL);
3638 if (ret) 3672 if (ret)
3639 goto err_sg_alloc; 3673 goto err_sg_alloc;
3640 3674
3675 iter = i915_gem_object_get_sg(obj,
3676 view->params.partial.offset,
3677 &offset);
3678 GEM_BUG_ON(!iter);
3679
3641 sg = st->sgl; 3680 sg = st->sgl;
3642 st->nents = 0; 3681 st->nents = 0;
3643 for_each_sg_page(obj->pages->sgl, &obj_sg_iter, obj->pages->nents, 3682 do {
3644 view->params.partial.offset) 3683 unsigned int len;
3645 {
3646 if (st->nents >= view->params.partial.size)
3647 break;
3648 3684
3649 sg_set_page(sg, NULL, PAGE_SIZE, 0); 3685 len = min(iter->length - (offset << PAGE_SHIFT),
3650 sg_dma_address(sg) = sg_page_iter_dma_address(&obj_sg_iter); 3686 count << PAGE_SHIFT);
3651 sg_dma_len(sg) = PAGE_SIZE; 3687 sg_set_page(sg, NULL, len, 0);
3688 sg_dma_address(sg) =
3689 sg_dma_address(iter) + (offset << PAGE_SHIFT);
3690 sg_dma_len(sg) = len;
3652 3691
3653 sg = sg_next(sg);
3654 st->nents++; 3692 st->nents++;
3655 } 3693 count -= len >> PAGE_SHIFT;
3694 if (count == 0) {
3695 sg_mark_end(sg);
3696 return st;
3697 }
3656 3698
3657 return st; 3699 sg = __sg_next(sg);
3700 iter = __sg_next(iter);
3701 offset = 0;
3702 } while (1);
3658 3703
3659err_sg_alloc: 3704err_sg_alloc:
3660 kfree(st); 3705 kfree(st);
@@ -3667,11 +3712,18 @@ i915_get_ggtt_vma_pages(struct i915_vma *vma)
3667{ 3712{
3668 int ret = 0; 3713 int ret = 0;
3669 3714
3715 /* The vma->pages are only valid within the lifespan of the borrowed
3716 * obj->mm.pages. When the obj->mm.pages sg_table is regenerated, so
3717 * must be the vma->pages. A simple rule is that vma->pages must only
3718 * be accessed when the obj->mm.pages are pinned.
3719 */
3720 GEM_BUG_ON(!i915_gem_object_has_pinned_pages(vma->obj));
3721
3670 if (vma->pages) 3722 if (vma->pages)
3671 return 0; 3723 return 0;
3672 3724
3673 if (vma->ggtt_view.type == I915_GGTT_VIEW_NORMAL) 3725 if (vma->ggtt_view.type == I915_GGTT_VIEW_NORMAL)
3674 vma->pages = vma->obj->pages; 3726 vma->pages = vma->obj->mm.pages;
3675 else if (vma->ggtt_view.type == I915_GGTT_VIEW_ROTATED) 3727 else if (vma->ggtt_view.type == I915_GGTT_VIEW_ROTATED)
3676 vma->pages = 3728 vma->pages =
3677 intel_rotate_fb_obj_pages(&vma->ggtt_view.params.rotated, vma->obj); 3729 intel_rotate_fb_obj_pages(&vma->ggtt_view.params.rotated, vma->obj);
@@ -3778,11 +3830,16 @@ void __iomem *i915_vma_pin_iomap(struct i915_vma *vma)
3778void i915_vma_unpin_and_release(struct i915_vma **p_vma) 3830void i915_vma_unpin_and_release(struct i915_vma **p_vma)
3779{ 3831{
3780 struct i915_vma *vma; 3832 struct i915_vma *vma;
3833 struct drm_i915_gem_object *obj;
3781 3834
3782 vma = fetch_and_zero(p_vma); 3835 vma = fetch_and_zero(p_vma);
3783 if (!vma) 3836 if (!vma)
3784 return; 3837 return;
3785 3838
3839 obj = vma->obj;
3840
3786 i915_vma_unpin(vma); 3841 i915_vma_unpin(vma);
3787 i915_vma_put(vma); 3842 i915_vma_close(vma);
3843
3844 __i915_gem_object_release_unless_active(obj);
3788} 3845}
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index c241d8143255..c23ef9db1f53 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -211,6 +211,7 @@ struct i915_vma {
211 211
212 unsigned int active; 212 unsigned int active;
213 struct i915_gem_active last_read[I915_NUM_ENGINES]; 213 struct i915_gem_active last_read[I915_NUM_ENGINES];
214 struct i915_gem_active last_write;
214 struct i915_gem_active last_fence; 215 struct i915_gem_active last_fence;
215 216
216 /** 217 /**
@@ -226,6 +227,7 @@ struct i915_vma {
226 struct list_head vm_link; 227 struct list_head vm_link;
227 228
228 struct list_head obj_link; /* Link in the object's VMA list */ 229 struct list_head obj_link; /* Link in the object's VMA list */
230 struct rb_node obj_node;
229 231
230 /** This vma's place in the batchbuffer or on the eviction list */ 232 /** This vma's place in the batchbuffer or on the eviction list */
231 struct list_head exec_list; 233 struct list_head exec_list;
@@ -341,6 +343,7 @@ struct i915_pml4 {
341 343
342struct i915_address_space { 344struct i915_address_space {
343 struct drm_mm mm; 345 struct drm_mm mm;
346 struct i915_gem_timeline timeline;
344 struct drm_device *dev; 347 struct drm_device *dev;
345 /* Every address space belongs to a struct file - except for the global 348 /* Every address space belongs to a struct file - except for the global
346 * GTT that is owned by the driver (and so @file is set to NULL). In 349 * GTT that is owned by the driver (and so @file is set to NULL). In
@@ -612,7 +615,8 @@ void i915_ggtt_cleanup_hw(struct drm_i915_private *dev_priv);
612int i915_ppgtt_init_hw(struct drm_device *dev); 615int i915_ppgtt_init_hw(struct drm_device *dev);
613void i915_ppgtt_release(struct kref *kref); 616void i915_ppgtt_release(struct kref *kref);
614struct i915_hw_ppgtt *i915_ppgtt_create(struct drm_i915_private *dev_priv, 617struct i915_hw_ppgtt *i915_ppgtt_create(struct drm_i915_private *dev_priv,
615 struct drm_i915_file_private *fpriv); 618 struct drm_i915_file_private *fpriv,
619 const char *name);
616static inline void i915_ppgtt_get(struct i915_hw_ppgtt *ppgtt) 620static inline void i915_ppgtt_get(struct i915_hw_ppgtt *ppgtt)
617{ 621{
618 if (ppgtt) 622 if (ppgtt)
@@ -628,8 +632,10 @@ void i915_check_and_clear_faults(struct drm_i915_private *dev_priv);
628void i915_gem_suspend_gtt_mappings(struct drm_device *dev); 632void i915_gem_suspend_gtt_mappings(struct drm_device *dev);
629void i915_gem_restore_gtt_mappings(struct drm_device *dev); 633void i915_gem_restore_gtt_mappings(struct drm_device *dev);
630 634
631int __must_check i915_gem_gtt_prepare_object(struct drm_i915_gem_object *obj); 635int __must_check i915_gem_gtt_prepare_pages(struct drm_i915_gem_object *obj,
632void i915_gem_gtt_finish_object(struct drm_i915_gem_object *obj); 636 struct sg_table *pages);
637void i915_gem_gtt_finish_pages(struct drm_i915_gem_object *obj,
638 struct sg_table *pages);
633 639
634/* Flags used by pin/bind&friends. */ 640/* Flags used by pin/bind&friends. */
635#define PIN_NONBLOCK BIT(0) 641#define PIN_NONBLOCK BIT(0)
diff --git a/drivers/gpu/drm/i915/i915_gem_internal.c b/drivers/gpu/drm/i915/i915_gem_internal.c
new file mode 100644
index 000000000000..4b3ff3e5b911
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_gem_internal.c
@@ -0,0 +1,170 @@
1/*
2 * Copyright © 2014-2016 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 *
23 */
24
25#include <drm/drmP.h>
26#include <drm/i915_drm.h>
27#include "i915_drv.h"
28
29#define QUIET (__GFP_NORETRY | __GFP_NOWARN)
30
31/* convert swiotlb segment size into sensible units (pages)! */
32#define IO_TLB_SEGPAGES (IO_TLB_SEGSIZE << IO_TLB_SHIFT >> PAGE_SHIFT)
33
34static void internal_free_pages(struct sg_table *st)
35{
36 struct scatterlist *sg;
37
38 for (sg = st->sgl; sg; sg = __sg_next(sg))
39 __free_pages(sg_page(sg), get_order(sg->length));
40
41 sg_free_table(st);
42 kfree(st);
43}
44
45static struct sg_table *
46i915_gem_object_get_pages_internal(struct drm_i915_gem_object *obj)
47{
48 struct drm_i915_private *i915 = to_i915(obj->base.dev);
49 unsigned int npages = obj->base.size / PAGE_SIZE;
50 struct sg_table *st;
51 struct scatterlist *sg;
52 int max_order;
53 gfp_t gfp;
54
55 st = kmalloc(sizeof(*st), GFP_KERNEL);
56 if (!st)
57 return ERR_PTR(-ENOMEM);
58
59 if (sg_alloc_table(st, npages, GFP_KERNEL)) {
60 kfree(st);
61 return ERR_PTR(-ENOMEM);
62 }
63
64 sg = st->sgl;
65 st->nents = 0;
66
67 max_order = MAX_ORDER;
68#ifdef CONFIG_SWIOTLB
69 if (swiotlb_nr_tbl()) /* minimum max swiotlb size is IO_TLB_SEGSIZE */
70 max_order = min(max_order, ilog2(IO_TLB_SEGPAGES));
71#endif
72
73 gfp = GFP_KERNEL | __GFP_HIGHMEM | __GFP_RECLAIMABLE;
74 if (IS_CRESTLINE(i915) || IS_BROADWATER(i915)) {
75 /* 965gm cannot relocate objects above 4GiB. */
76 gfp &= ~__GFP_HIGHMEM;
77 gfp |= __GFP_DMA32;
78 }
79
80 do {
81 int order = min(fls(npages) - 1, max_order);
82 struct page *page;
83
84 do {
85 page = alloc_pages(gfp | (order ? QUIET : 0), order);
86 if (page)
87 break;
88 if (!order--)
89 goto err;
90
91 /* Limit subsequent allocations as well */
92 max_order = order;
93 } while (1);
94
95 sg_set_page(sg, page, PAGE_SIZE << order, 0);
96 st->nents++;
97
98 npages -= 1 << order;
99 if (!npages) {
100 sg_mark_end(sg);
101 break;
102 }
103
104 sg = __sg_next(sg);
105 } while (1);
106
107 if (i915_gem_gtt_prepare_pages(obj, st))
108 goto err;
109
110 /* Mark the pages as dontneed whilst they are still pinned. As soon
111 * as they are unpinned they are allowed to be reaped by the shrinker,
112 * and the caller is expected to repopulate - the contents of this
113 * object are only valid whilst active and pinned.
114 */
115 obj->mm.madv = I915_MADV_DONTNEED;
116 return st;
117
118err:
119 sg_mark_end(sg);
120 internal_free_pages(st);
121 return ERR_PTR(-ENOMEM);
122}
123
124static void i915_gem_object_put_pages_internal(struct drm_i915_gem_object *obj,
125 struct sg_table *pages)
126{
127 i915_gem_gtt_finish_pages(obj, pages);
128 internal_free_pages(pages);
129
130 obj->mm.dirty = false;
131 obj->mm.madv = I915_MADV_WILLNEED;
132}
133
134static const struct drm_i915_gem_object_ops i915_gem_object_internal_ops = {
135 .flags = I915_GEM_OBJECT_HAS_STRUCT_PAGE |
136 I915_GEM_OBJECT_IS_SHRINKABLE,
137 .get_pages = i915_gem_object_get_pages_internal,
138 .put_pages = i915_gem_object_put_pages_internal,
139};
140
141/**
142 * Creates a new object that wraps some internal memory for private use.
143 * This object is not backed by swappable storage, and as such its contents
144 * are volatile and only valid whilst pinned. If the object is reaped by the
145 * shrinker, its pages and data will be discarded. Equally, it is not a full
146 * GEM object and so not valid for access from userspace. This makes it useful
147 * for hardware interfaces like ringbuffers (which are pinned from the time
148 * the request is written to the time the hardware stops accessing it), but
149 * not for contexts (which need to be preserved when not active for later
150 * reuse). Note that it is not cleared upon allocation.
151 */
152struct drm_i915_gem_object *
153i915_gem_object_create_internal(struct drm_i915_private *i915,
154 unsigned int size)
155{
156 struct drm_i915_gem_object *obj;
157
158 obj = i915_gem_object_alloc(&i915->drm);
159 if (!obj)
160 return ERR_PTR(-ENOMEM);
161
162 drm_gem_private_object_init(&i915->drm, &obj->base, size);
163 i915_gem_object_init(obj, &i915_gem_object_internal_ops);
164
165 obj->base.write_domain = I915_GEM_DOMAIN_CPU;
166 obj->base.read_domains = I915_GEM_DOMAIN_CPU;
167 obj->cache_level = HAS_LLC(i915) ? I915_CACHE_LLC : I915_CACHE_NONE;
168
169 return obj;
170}
diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.c b/drivers/gpu/drm/i915/i915_gem_render_state.c
index a98c0f42badd..5af19b0bf713 100644
--- a/drivers/gpu/drm/i915/i915_gem_render_state.c
+++ b/drivers/gpu/drm/i915/i915_gem_render_state.c
@@ -28,17 +28,19 @@
28#include "i915_drv.h" 28#include "i915_drv.h"
29#include "intel_renderstate.h" 29#include "intel_renderstate.h"
30 30
31struct render_state { 31struct intel_render_state {
32 const struct intel_renderstate_rodata *rodata; 32 const struct intel_renderstate_rodata *rodata;
33 struct i915_vma *vma; 33 struct i915_vma *vma;
34 u32 aux_batch_size; 34 u32 batch_offset;
35 u32 aux_batch_offset; 35 u32 batch_size;
36 u32 aux_offset;
37 u32 aux_size;
36}; 38};
37 39
38static const struct intel_renderstate_rodata * 40static const struct intel_renderstate_rodata *
39render_state_get_rodata(const struct drm_i915_gem_request *req) 41render_state_get_rodata(const struct intel_engine_cs *engine)
40{ 42{
41 switch (INTEL_GEN(req->i915)) { 43 switch (INTEL_GEN(engine->i915)) {
42 case 6: 44 case 6:
43 return &gen6_null_state; 45 return &gen6_null_state;
44 case 7: 46 case 7:
@@ -63,29 +65,26 @@ render_state_get_rodata(const struct drm_i915_gem_request *req)
63 */ 65 */
64#define OUT_BATCH(batch, i, val) \ 66#define OUT_BATCH(batch, i, val) \
65 do { \ 67 do { \
66 if (WARN_ON((i) >= PAGE_SIZE / sizeof(u32))) { \ 68 if ((i) >= PAGE_SIZE / sizeof(u32)) \
67 ret = -ENOSPC; \ 69 goto err; \
68 goto err_out; \
69 } \
70 (batch)[(i)++] = (val); \ 70 (batch)[(i)++] = (val); \
71 } while(0) 71 } while(0)
72 72
73static int render_state_setup(struct render_state *so) 73static int render_state_setup(struct intel_render_state *so,
74 struct drm_i915_private *i915)
74{ 75{
75 struct drm_i915_private *dev_priv = to_i915(so->vma->vm->dev);
76 const struct intel_renderstate_rodata *rodata = so->rodata; 76 const struct intel_renderstate_rodata *rodata = so->rodata;
77 const bool has_64bit_reloc = INTEL_GEN(dev_priv) >= 8; 77 struct drm_i915_gem_object *obj = so->vma->obj;
78 unsigned int i = 0, reloc_index = 0; 78 unsigned int i = 0, reloc_index = 0;
79 struct page *page; 79 unsigned int needs_clflush;
80 u32 *d; 80 u32 *d;
81 int ret; 81 int ret;
82 82
83 ret = i915_gem_object_set_to_cpu_domain(so->vma->obj, true); 83 ret = i915_gem_obj_prepare_shmem_write(obj, &needs_clflush);
84 if (ret) 84 if (ret)
85 return ret; 85 return ret;
86 86
87 page = i915_gem_object_get_dirty_page(so->vma->obj, 0); 87 d = kmap_atomic(i915_gem_object_get_dirty_page(obj, 0));
88 d = kmap(page);
89 88
90 while (i < rodata->batch_items) { 89 while (i < rodata->batch_items) {
91 u32 s = rodata->batch[i]; 90 u32 s = rodata->batch[i];
@@ -93,12 +92,10 @@ static int render_state_setup(struct render_state *so)
93 if (i * 4 == rodata->reloc[reloc_index]) { 92 if (i * 4 == rodata->reloc[reloc_index]) {
94 u64 r = s + so->vma->node.start; 93 u64 r = s + so->vma->node.start;
95 s = lower_32_bits(r); 94 s = lower_32_bits(r);
96 if (has_64bit_reloc) { 95 if (HAS_64BIT_RELOC(i915)) {
97 if (i + 1 >= rodata->batch_items || 96 if (i + 1 >= rodata->batch_items ||
98 rodata->batch[i + 1] != 0) { 97 rodata->batch[i + 1] != 0)
99 ret = -EINVAL; 98 goto err;
100 goto err_out;
101 }
102 99
103 d[i++] = s; 100 d[i++] = s;
104 s = upper_32_bits(r); 101 s = upper_32_bits(r);
@@ -110,12 +107,20 @@ static int render_state_setup(struct render_state *so)
110 d[i++] = s; 107 d[i++] = s;
111 } 108 }
112 109
110 if (rodata->reloc[reloc_index] != -1) {
111 DRM_ERROR("only %d relocs resolved\n", reloc_index);
112 goto err;
113 }
114
115 so->batch_offset = so->vma->node.start;
116 so->batch_size = rodata->batch_items * sizeof(u32);
117
113 while (i % CACHELINE_DWORDS) 118 while (i % CACHELINE_DWORDS)
114 OUT_BATCH(d, i, MI_NOOP); 119 OUT_BATCH(d, i, MI_NOOP);
115 120
116 so->aux_batch_offset = i * sizeof(u32); 121 so->aux_offset = i * sizeof(u32);
117 122
118 if (HAS_POOLED_EU(dev_priv)) { 123 if (HAS_POOLED_EU(i915)) {
119 /* 124 /*
120 * We always program 3x6 pool config but depending upon which 125 * We always program 3x6 pool config but depending upon which
121 * subslice is disabled HW drops down to appropriate config 126 * subslice is disabled HW drops down to appropriate config
@@ -143,88 +148,133 @@ static int render_state_setup(struct render_state *so)
143 } 148 }
144 149
145 OUT_BATCH(d, i, MI_BATCH_BUFFER_END); 150 OUT_BATCH(d, i, MI_BATCH_BUFFER_END);
146 so->aux_batch_size = (i * sizeof(u32)) - so->aux_batch_offset; 151 so->aux_size = i * sizeof(u32) - so->aux_offset;
147 152 so->aux_offset += so->batch_offset;
148 /* 153 /*
149 * Since we are sending length, we need to strictly conform to 154 * Since we are sending length, we need to strictly conform to
150 * all requirements. For Gen2 this must be a multiple of 8. 155 * all requirements. For Gen2 this must be a multiple of 8.
151 */ 156 */
152 so->aux_batch_size = ALIGN(so->aux_batch_size, 8); 157 so->aux_size = ALIGN(so->aux_size, 8);
153
154 kunmap(page);
155
156 ret = i915_gem_object_set_to_gtt_domain(so->vma->obj, false);
157 if (ret)
158 return ret;
159
160 if (rodata->reloc[reloc_index] != -1) {
161 DRM_ERROR("only %d relocs resolved\n", reloc_index);
162 return -EINVAL;
163 }
164 158
165 return 0; 159 if (needs_clflush)
160 drm_clflush_virt_range(d, i * sizeof(u32));
161 kunmap_atomic(d);
166 162
167err_out: 163 ret = i915_gem_object_set_to_gtt_domain(obj, false);
168 kunmap(page); 164out:
165 i915_gem_obj_finish_shmem_access(obj);
169 return ret; 166 return ret;
167
168err:
169 kunmap_atomic(d);
170 ret = -EINVAL;
171 goto out;
170} 172}
171 173
172#undef OUT_BATCH 174#undef OUT_BATCH
173 175
174int i915_gem_render_state_init(struct drm_i915_gem_request *req) 176int i915_gem_render_state_init(struct intel_engine_cs *engine)
175{ 177{
176 struct render_state so; 178 struct intel_render_state *so;
179 const struct intel_renderstate_rodata *rodata;
177 struct drm_i915_gem_object *obj; 180 struct drm_i915_gem_object *obj;
178 int ret; 181 int ret;
179 182
180 if (WARN_ON(req->engine->id != RCS)) 183 if (engine->id != RCS)
181 return -ENOENT; 184 return 0;
182 185
183 so.rodata = render_state_get_rodata(req); 186 rodata = render_state_get_rodata(engine);
184 if (!so.rodata) 187 if (!rodata)
185 return 0; 188 return 0;
186 189
187 if (so.rodata->batch_items * 4 > 4096) 190 if (rodata->batch_items * 4 > 4096)
188 return -EINVAL; 191 return -EINVAL;
189 192
190 obj = i915_gem_object_create(&req->i915->drm, 4096); 193 so = kmalloc(sizeof(*so), GFP_KERNEL);
191 if (IS_ERR(obj)) 194 if (!so)
192 return PTR_ERR(obj); 195 return -ENOMEM;
193 196
194 so.vma = i915_vma_create(obj, &req->i915->ggtt.base, NULL); 197 obj = i915_gem_object_create_internal(engine->i915, 4096);
195 if (IS_ERR(so.vma)) { 198 if (IS_ERR(obj)) {
196 ret = PTR_ERR(so.vma); 199 ret = PTR_ERR(obj);
197 goto err_obj; 200 goto err_free;
198 } 201 }
199 202
200 ret = i915_vma_pin(so.vma, 0, 0, PIN_GLOBAL); 203 so->vma = i915_vma_create(obj, &engine->i915->ggtt.base, NULL);
201 if (ret) 204 if (IS_ERR(so->vma)) {
205 ret = PTR_ERR(so->vma);
202 goto err_obj; 206 goto err_obj;
207 }
208
209 so->rodata = rodata;
210 engine->render_state = so;
211 return 0;
212
213err_obj:
214 i915_gem_object_put(obj);
215err_free:
216 kfree(so);
217 return ret;
218}
219
220int i915_gem_render_state_emit(struct drm_i915_gem_request *req)
221{
222 struct intel_render_state *so;
223 int ret;
224
225 lockdep_assert_held(&req->i915->drm.struct_mutex);
203 226
204 ret = render_state_setup(&so); 227 so = req->engine->render_state;
228 if (!so)
229 return 0;
230
231 /* Recreate the page after shrinking */
232 if (!so->vma->obj->mm.pages)
233 so->batch_offset = -1;
234
235 ret = i915_vma_pin(so->vma, 0, 0, PIN_GLOBAL | PIN_HIGH);
205 if (ret) 236 if (ret)
206 goto err_unpin; 237 return ret;
238
239 if (so->vma->node.start != so->batch_offset) {
240 ret = render_state_setup(so, req->i915);
241 if (ret)
242 goto err_unpin;
243 }
207 244
208 ret = req->engine->emit_bb_start(req, so.vma->node.start, 245 ret = req->engine->emit_bb_start(req,
209 so.rodata->batch_items * 4, 246 so->batch_offset, so->batch_size,
210 I915_DISPATCH_SECURE); 247 I915_DISPATCH_SECURE);
211 if (ret) 248 if (ret)
212 goto err_unpin; 249 goto err_unpin;
213 250
214 if (so.aux_batch_size > 8) { 251 if (so->aux_size > 8) {
215 ret = req->engine->emit_bb_start(req, 252 ret = req->engine->emit_bb_start(req,
216 (so.vma->node.start + 253 so->aux_offset, so->aux_size,
217 so.aux_batch_offset),
218 so.aux_batch_size,
219 I915_DISPATCH_SECURE); 254 I915_DISPATCH_SECURE);
220 if (ret) 255 if (ret)
221 goto err_unpin; 256 goto err_unpin;
222 } 257 }
223 258
224 i915_vma_move_to_active(so.vma, req, 0); 259 i915_vma_move_to_active(so->vma, req, 0);
225err_unpin: 260err_unpin:
226 i915_vma_unpin(so.vma); 261 i915_vma_unpin(so->vma);
227err_obj:
228 i915_gem_object_put(obj);
229 return ret; 262 return ret;
230} 263}
264
265void i915_gem_render_state_fini(struct intel_engine_cs *engine)
266{
267 struct intel_render_state *so;
268 struct drm_i915_gem_object *obj;
269
270 so = fetch_and_zero(&engine->render_state);
271 if (!so)
272 return;
273
274 obj = so->vma->obj;
275
276 i915_vma_close(so->vma);
277 __i915_gem_object_release_unless_active(obj);
278
279 kfree(so);
280}
diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.h b/drivers/gpu/drm/i915/i915_gem_render_state.h
index 18cce3f06e9c..87481845799d 100644
--- a/drivers/gpu/drm/i915/i915_gem_render_state.h
+++ b/drivers/gpu/drm/i915/i915_gem_render_state.h
@@ -26,6 +26,8 @@
26 26
27struct drm_i915_gem_request; 27struct drm_i915_gem_request;
28 28
29int i915_gem_render_state_init(struct drm_i915_gem_request *req); 29int i915_gem_render_state_init(struct intel_engine_cs *engine);
30int i915_gem_render_state_emit(struct drm_i915_gem_request *req);
31void i915_gem_render_state_fini(struct intel_engine_cs *engine);
30 32
31#endif /* _I915_GEM_RENDER_STATE_H_ */ 33#endif /* _I915_GEM_RENDER_STATE_H_ */
diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
index f9af2a00625e..0b3b051a5683 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.c
+++ b/drivers/gpu/drm/i915/i915_gem_request.c
@@ -23,6 +23,7 @@
23 */ 23 */
24 24
25#include <linux/prefetch.h> 25#include <linux/prefetch.h>
26#include <linux/dma-fence-array.h>
26 27
27#include "i915_drv.h" 28#include "i915_drv.h"
28 29
@@ -33,13 +34,7 @@ static const char *i915_fence_get_driver_name(struct dma_fence *fence)
33 34
34static const char *i915_fence_get_timeline_name(struct dma_fence *fence) 35static const char *i915_fence_get_timeline_name(struct dma_fence *fence)
35{ 36{
36 /* Timelines are bound by eviction to a VM. However, since 37 return to_request(fence)->timeline->common->name;
37 * we only have a global seqno at the moment, we only have
38 * a single timeline. Note that each timeline will have
39 * multiple execution contexts (fence contexts) as we allow
40 * engines within a single timeline to execute in parallel.
41 */
42 return "global";
43} 38}
44 39
45static bool i915_fence_signaled(struct dma_fence *fence) 40static bool i915_fence_signaled(struct dma_fence *fence)
@@ -58,43 +53,9 @@ static bool i915_fence_enable_signaling(struct dma_fence *fence)
58 53
59static signed long i915_fence_wait(struct dma_fence *fence, 54static signed long i915_fence_wait(struct dma_fence *fence,
60 bool interruptible, 55 bool interruptible,
61 signed long timeout_jiffies) 56 signed long timeout)
62{ 57{
63 s64 timeout_ns, *timeout; 58 return i915_wait_request(to_request(fence), interruptible, timeout);
64 int ret;
65
66 if (timeout_jiffies != MAX_SCHEDULE_TIMEOUT) {
67 timeout_ns = jiffies_to_nsecs(timeout_jiffies);
68 timeout = &timeout_ns;
69 } else {
70 timeout = NULL;
71 }
72
73 ret = i915_wait_request(to_request(fence),
74 interruptible, timeout,
75 NO_WAITBOOST);
76 if (ret == -ETIME)
77 return 0;
78
79 if (ret < 0)
80 return ret;
81
82 if (timeout_jiffies != MAX_SCHEDULE_TIMEOUT)
83 timeout_jiffies = nsecs_to_jiffies(timeout_ns);
84
85 return timeout_jiffies;
86}
87
88static void i915_fence_value_str(struct dma_fence *fence, char *str, int size)
89{
90 snprintf(str, size, "%u", fence->seqno);
91}
92
93static void i915_fence_timeline_value_str(struct dma_fence *fence, char *str,
94 int size)
95{
96 snprintf(str, size, "%u",
97 intel_engine_get_seqno(to_request(fence)->engine));
98} 59}
99 60
100static void i915_fence_release(struct dma_fence *fence) 61static void i915_fence_release(struct dma_fence *fence)
@@ -111,8 +72,6 @@ const struct dma_fence_ops i915_fence_ops = {
111 .signaled = i915_fence_signaled, 72 .signaled = i915_fence_signaled,
112 .wait = i915_fence_wait, 73 .wait = i915_fence_wait,
113 .release = i915_fence_release, 74 .release = i915_fence_release,
114 .fence_value_str = i915_fence_value_str,
115 .timeline_value_str = i915_fence_timeline_value_str,
116}; 75};
117 76
118int i915_gem_request_add_to_client(struct drm_i915_gem_request *req, 77int i915_gem_request_add_to_client(struct drm_i915_gem_request *req,
@@ -164,8 +123,14 @@ static void i915_gem_request_retire(struct drm_i915_gem_request *request)
164{ 123{
165 struct i915_gem_active *active, *next; 124 struct i915_gem_active *active, *next;
166 125
126 lockdep_assert_held(&request->i915->drm.struct_mutex);
127 GEM_BUG_ON(!i915_gem_request_completed(request));
128
167 trace_i915_gem_request_retire(request); 129 trace_i915_gem_request_retire(request);
168 list_del(&request->link); 130
131 spin_lock_irq(&request->engine->timeline->lock);
132 list_del_init(&request->link);
133 spin_unlock_irq(&request->engine->timeline->lock);
169 134
170 /* We know the GPU must have read the request to have 135 /* We know the GPU must have read the request to have
171 * sent us the seqno + interrupt, so use the position 136 * sent us the seqno + interrupt, so use the position
@@ -177,6 +142,7 @@ static void i915_gem_request_retire(struct drm_i915_gem_request *request)
177 */ 142 */
178 list_del(&request->ring_link); 143 list_del(&request->ring_link);
179 request->ring->last_retired_head = request->postfix; 144 request->ring->last_retired_head = request->postfix;
145 request->i915->gt.active_requests--;
180 146
181 /* Walk through the active list, calling retire on each. This allows 147 /* Walk through the active list, calling retire on each. This allows
182 * objects to track their GPU activity and mark themselves as idle 148 * objects to track their GPU activity and mark themselves as idle
@@ -214,6 +180,8 @@ static void i915_gem_request_retire(struct drm_i915_gem_request *request)
214 } 180 }
215 181
216 i915_gem_context_put(request->ctx); 182 i915_gem_context_put(request->ctx);
183
184 dma_fence_signal(&request->fence);
217 i915_gem_request_put(request); 185 i915_gem_request_put(request);
218} 186}
219 187
@@ -223,10 +191,11 @@ void i915_gem_request_retire_upto(struct drm_i915_gem_request *req)
223 struct drm_i915_gem_request *tmp; 191 struct drm_i915_gem_request *tmp;
224 192
225 lockdep_assert_held(&req->i915->drm.struct_mutex); 193 lockdep_assert_held(&req->i915->drm.struct_mutex);
226 GEM_BUG_ON(list_empty(&req->link)); 194 if (list_empty(&req->link))
195 return;
227 196
228 do { 197 do {
229 tmp = list_first_entry(&engine->request_list, 198 tmp = list_first_entry(&engine->timeline->requests,
230 typeof(*tmp), link); 199 typeof(*tmp), link);
231 200
232 i915_gem_request_retire(tmp); 201 i915_gem_request_retire(tmp);
@@ -253,40 +222,51 @@ static int i915_gem_check_wedge(struct drm_i915_private *dev_priv)
253 return 0; 222 return 0;
254} 223}
255 224
256static int i915_gem_init_seqno(struct drm_i915_private *dev_priv, u32 seqno) 225static int i915_gem_init_global_seqno(struct drm_i915_private *i915, u32 seqno)
257{ 226{
227 struct i915_gem_timeline *timeline = &i915->gt.global_timeline;
258 struct intel_engine_cs *engine; 228 struct intel_engine_cs *engine;
259 enum intel_engine_id id; 229 enum intel_engine_id id;
260 int ret; 230 int ret;
261 231
262 /* Carefully retire all requests without writing to the rings */ 232 /* Carefully retire all requests without writing to the rings */
263 for_each_engine(engine, dev_priv, id) { 233 ret = i915_gem_wait_for_idle(i915,
264 ret = intel_engine_idle(engine, 234 I915_WAIT_INTERRUPTIBLE |
265 I915_WAIT_INTERRUPTIBLE | 235 I915_WAIT_LOCKED);
266 I915_WAIT_LOCKED); 236 if (ret)
267 if (ret) 237 return ret;
268 return ret; 238
269 } 239 i915_gem_retire_requests(i915);
270 i915_gem_retire_requests(dev_priv); 240 GEM_BUG_ON(i915->gt.active_requests > 1);
271 241
272 /* If the seqno wraps around, we need to clear the breadcrumb rbtree */ 242 /* If the seqno wraps around, we need to clear the breadcrumb rbtree */
273 if (!i915_seqno_passed(seqno, dev_priv->next_seqno)) { 243 if (!i915_seqno_passed(seqno, atomic_read(&timeline->next_seqno))) {
274 while (intel_kick_waiters(dev_priv) || 244 while (intel_kick_waiters(i915) || intel_kick_signalers(i915))
275 intel_kick_signalers(dev_priv))
276 yield(); 245 yield();
246 yield();
277 } 247 }
248 atomic_set(&timeline->next_seqno, seqno);
278 249
279 /* Finally reset hw state */ 250 /* Finally reset hw state */
280 for_each_engine(engine, dev_priv, id) 251 for_each_engine(engine, i915, id)
281 intel_engine_init_seqno(engine, seqno); 252 intel_engine_init_global_seqno(engine, seqno);
253
254 list_for_each_entry(timeline, &i915->gt.timelines, link) {
255 for_each_engine(engine, i915, id) {
256 struct intel_timeline *tl = &timeline->engine[id];
257
258 memset(tl->sync_seqno, 0, sizeof(tl->sync_seqno));
259 }
260 }
282 261
283 return 0; 262 return 0;
284} 263}
285 264
286int i915_gem_set_seqno(struct drm_device *dev, u32 seqno) 265int i915_gem_set_global_seqno(struct drm_device *dev, u32 seqno)
287{ 266{
288 struct drm_i915_private *dev_priv = to_i915(dev); 267 struct drm_i915_private *dev_priv = to_i915(dev);
289 int ret; 268
269 lockdep_assert_held(&dev_priv->drm.struct_mutex);
290 270
291 if (seqno == 0) 271 if (seqno == 0)
292 return -EINVAL; 272 return -EINVAL;
@@ -294,48 +274,84 @@ int i915_gem_set_seqno(struct drm_device *dev, u32 seqno)
294 /* HWS page needs to be set less than what we 274 /* HWS page needs to be set less than what we
295 * will inject to ring 275 * will inject to ring
296 */ 276 */
297 ret = i915_gem_init_seqno(dev_priv, seqno - 1); 277 return i915_gem_init_global_seqno(dev_priv, seqno - 1);
298 if (ret)
299 return ret;
300
301 dev_priv->next_seqno = seqno;
302 return 0;
303} 278}
304 279
305static int i915_gem_get_seqno(struct drm_i915_private *dev_priv, u32 *seqno) 280static int reserve_global_seqno(struct drm_i915_private *i915)
306{ 281{
307 /* reserve 0 for non-seqno */ 282 u32 active_requests = ++i915->gt.active_requests;
308 if (unlikely(dev_priv->next_seqno == 0)) { 283 u32 next_seqno = atomic_read(&i915->gt.global_timeline.next_seqno);
309 int ret; 284 int ret;
310 285
311 ret = i915_gem_init_seqno(dev_priv, 0); 286 /* Reservation is fine until we need to wrap around */
312 if (ret) 287 if (likely(next_seqno + active_requests > next_seqno))
313 return ret; 288 return 0;
314 289
315 dev_priv->next_seqno = 1; 290 ret = i915_gem_init_global_seqno(i915, 0);
291 if (ret) {
292 i915->gt.active_requests--;
293 return ret;
316 } 294 }
317 295
318 *seqno = dev_priv->next_seqno++;
319 return 0; 296 return 0;
320} 297}
321 298
299static u32 __timeline_get_seqno(struct i915_gem_timeline *tl)
300{
301 /* next_seqno only incremented under a mutex */
302 return ++tl->next_seqno.counter;
303}
304
305static u32 timeline_get_seqno(struct i915_gem_timeline *tl)
306{
307 return atomic_inc_return(&tl->next_seqno);
308}
309
322static int __i915_sw_fence_call 310static int __i915_sw_fence_call
323submit_notify(struct i915_sw_fence *fence, enum i915_sw_fence_notify state) 311submit_notify(struct i915_sw_fence *fence, enum i915_sw_fence_notify state)
324{ 312{
325 struct drm_i915_gem_request *request = 313 struct drm_i915_gem_request *request =
326 container_of(fence, typeof(*request), submit); 314 container_of(fence, typeof(*request), submit);
315 struct intel_engine_cs *engine = request->engine;
316 struct intel_timeline *timeline;
317 unsigned long flags;
318 u32 seqno;
319
320 if (state != FENCE_COMPLETE)
321 return NOTIFY_DONE;
322
323 /* Transfer from per-context onto the global per-engine timeline */
324 timeline = engine->timeline;
325 GEM_BUG_ON(timeline == request->timeline);
327 326
328 /* Will be called from irq-context when using foreign DMA fences */ 327 /* Will be called from irq-context when using foreign DMA fences */
328 spin_lock_irqsave(&timeline->lock, flags);
329 329
330 switch (state) { 330 seqno = timeline_get_seqno(timeline->common);
331 case FENCE_COMPLETE: 331 GEM_BUG_ON(!seqno);
332 request->engine->last_submitted_seqno = request->fence.seqno; 332 GEM_BUG_ON(i915_seqno_passed(intel_engine_get_seqno(engine), seqno));
333 request->engine->submit_request(request);
334 break;
335 333
336 case FENCE_FREE: 334 GEM_BUG_ON(i915_seqno_passed(timeline->last_submitted_seqno, seqno));
337 break; 335 request->previous_seqno = timeline->last_submitted_seqno;
338 } 336 timeline->last_submitted_seqno = seqno;
337
338 /* We may be recursing from the signal callback of another i915 fence */
339 spin_lock_nested(&request->lock, SINGLE_DEPTH_NESTING);
340 request->global_seqno = seqno;
341 if (test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &request->fence.flags))
342 intel_engine_enable_signaling(request);
343 spin_unlock(&request->lock);
344
345 GEM_BUG_ON(!request->global_seqno);
346 engine->emit_breadcrumb(request,
347 request->ring->vaddr + request->postfix);
348 engine->submit_request(request);
349
350 spin_lock_nested(&request->timeline->lock, SINGLE_DEPTH_NESTING);
351 list_move_tail(&request->link, &timeline->requests);
352 spin_unlock(&request->timeline->lock);
353
354 spin_unlock_irqrestore(&timeline->lock, flags);
339 355
340 return NOTIFY_DONE; 356 return NOTIFY_DONE;
341} 357}
@@ -358,9 +374,10 @@ i915_gem_request_alloc(struct intel_engine_cs *engine,
358{ 374{
359 struct drm_i915_private *dev_priv = engine->i915; 375 struct drm_i915_private *dev_priv = engine->i915;
360 struct drm_i915_gem_request *req; 376 struct drm_i915_gem_request *req;
361 u32 seqno;
362 int ret; 377 int ret;
363 378
379 lockdep_assert_held(&dev_priv->drm.struct_mutex);
380
364 /* ABI: Before userspace accesses the GPU (e.g. execbuffer), report 381 /* ABI: Before userspace accesses the GPU (e.g. execbuffer), report
365 * EIO if the GPU is already wedged, or EAGAIN to drop the struct_mutex 382 * EIO if the GPU is already wedged, or EAGAIN to drop the struct_mutex
366 * and restart. 383 * and restart.
@@ -369,10 +386,14 @@ i915_gem_request_alloc(struct intel_engine_cs *engine,
369 if (ret) 386 if (ret)
370 return ERR_PTR(ret); 387 return ERR_PTR(ret);
371 388
389 ret = reserve_global_seqno(dev_priv);
390 if (ret)
391 return ERR_PTR(ret);
392
372 /* Move the oldest request to the slab-cache (if not in use!) */ 393 /* Move the oldest request to the slab-cache (if not in use!) */
373 req = list_first_entry_or_null(&engine->request_list, 394 req = list_first_entry_or_null(&engine->timeline->requests,
374 typeof(*req), link); 395 typeof(*req), link);
375 if (req && i915_gem_request_completed(req)) 396 if (req && __i915_gem_request_completed(req))
376 i915_gem_request_retire(req); 397 i915_gem_request_retire(req);
377 398
378 /* Beware: Dragons be flying overhead. 399 /* Beware: Dragons be flying overhead.
@@ -383,7 +404,7 @@ i915_gem_request_alloc(struct intel_engine_cs *engine,
383 * of being read by __i915_gem_active_get_rcu(). As such, 404 * of being read by __i915_gem_active_get_rcu(). As such,
384 * we have to be very careful when overwriting the contents. During 405 * we have to be very careful when overwriting the contents. During
385 * the RCU lookup, we change chase the request->engine pointer, 406 * the RCU lookup, we change chase the request->engine pointer,
386 * read the request->fence.seqno and increment the reference count. 407 * read the request->global_seqno and increment the reference count.
387 * 408 *
388 * The reference count is incremented atomically. If it is zero, 409 * The reference count is incremented atomically. If it is zero,
389 * the lookup knows the request is unallocated and complete. Otherwise, 410 * the lookup knows the request is unallocated and complete. Otherwise,
@@ -404,19 +425,20 @@ i915_gem_request_alloc(struct intel_engine_cs *engine,
404 * Do not use kmem_cache_zalloc() here! 425 * Do not use kmem_cache_zalloc() here!
405 */ 426 */
406 req = kmem_cache_alloc(dev_priv->requests, GFP_KERNEL); 427 req = kmem_cache_alloc(dev_priv->requests, GFP_KERNEL);
407 if (!req) 428 if (!req) {
408 return ERR_PTR(-ENOMEM); 429 ret = -ENOMEM;
430 goto err_unreserve;
431 }
409 432
410 ret = i915_gem_get_seqno(dev_priv, &seqno); 433 req->timeline = i915_gem_context_lookup_timeline(ctx, engine);
411 if (ret) 434 GEM_BUG_ON(req->timeline == engine->timeline);
412 goto err;
413 435
414 spin_lock_init(&req->lock); 436 spin_lock_init(&req->lock);
415 dma_fence_init(&req->fence, 437 dma_fence_init(&req->fence,
416 &i915_fence_ops, 438 &i915_fence_ops,
417 &req->lock, 439 &req->lock,
418 engine->fence_context, 440 req->timeline->fence_context,
419 seqno); 441 __timeline_get_seqno(req->timeline->common));
420 442
421 i915_sw_fence_init(&req->submit, submit_notify); 443 i915_sw_fence_init(&req->submit, submit_notify);
422 444
@@ -426,6 +448,7 @@ i915_gem_request_alloc(struct intel_engine_cs *engine,
426 req->ctx = i915_gem_context_get(ctx); 448 req->ctx = i915_gem_context_get(ctx);
427 449
428 /* No zalloc, must clear what we need by hand */ 450 /* No zalloc, must clear what we need by hand */
451 req->global_seqno = 0;
429 req->previous_context = NULL; 452 req->previous_context = NULL;
430 req->file_priv = NULL; 453 req->file_priv = NULL;
431 req->batch = NULL; 454 req->batch = NULL;
@@ -438,6 +461,7 @@ i915_gem_request_alloc(struct intel_engine_cs *engine,
438 * away, e.g. because a GPU scheduler has deferred it. 461 * away, e.g. because a GPU scheduler has deferred it.
439 */ 462 */
440 req->reserved_space = MIN_SPACE_FOR_ADD_REQUEST; 463 req->reserved_space = MIN_SPACE_FOR_ADD_REQUEST;
464 GEM_BUG_ON(req->reserved_space < engine->emit_breadcrumb_sz);
441 465
442 if (i915.enable_execlists) 466 if (i915.enable_execlists)
443 ret = intel_logical_ring_alloc_request_extras(req); 467 ret = intel_logical_ring_alloc_request_extras(req);
@@ -457,8 +481,9 @@ i915_gem_request_alloc(struct intel_engine_cs *engine,
457 481
458err_ctx: 482err_ctx:
459 i915_gem_context_put(ctx); 483 i915_gem_context_put(ctx);
460err:
461 kmem_cache_free(dev_priv->requests, req); 484 kmem_cache_free(dev_priv->requests, req);
485err_unreserve:
486 dev_priv->gt.active_requests--;
462 return ERR_PTR(ret); 487 return ERR_PTR(ret);
463} 488}
464 489
@@ -466,15 +491,28 @@ static int
466i915_gem_request_await_request(struct drm_i915_gem_request *to, 491i915_gem_request_await_request(struct drm_i915_gem_request *to,
467 struct drm_i915_gem_request *from) 492 struct drm_i915_gem_request *from)
468{ 493{
469 int idx, ret; 494 int ret;
470 495
471 GEM_BUG_ON(to == from); 496 GEM_BUG_ON(to == from);
472 497
473 if (to->engine == from->engine) 498 if (to->timeline == from->timeline)
474 return 0; 499 return 0;
475 500
476 idx = intel_engine_sync_index(from->engine, to->engine); 501 if (to->engine == from->engine) {
477 if (from->fence.seqno <= from->engine->semaphore.sync_seqno[idx]) 502 ret = i915_sw_fence_await_sw_fence_gfp(&to->submit,
503 &from->submit,
504 GFP_KERNEL);
505 return ret < 0 ? ret : 0;
506 }
507
508 if (!from->global_seqno) {
509 ret = i915_sw_fence_await_dma_fence(&to->submit,
510 &from->fence, 0,
511 GFP_KERNEL);
512 return ret < 0 ? ret : 0;
513 }
514
515 if (from->global_seqno <= to->timeline->sync_seqno[from->engine->id])
478 return 0; 516 return 0;
479 517
480 trace_i915_gem_ring_sync_to(to, from); 518 trace_i915_gem_ring_sync_to(to, from);
@@ -492,7 +530,54 @@ i915_gem_request_await_request(struct drm_i915_gem_request *to,
492 return ret; 530 return ret;
493 } 531 }
494 532
495 from->engine->semaphore.sync_seqno[idx] = from->fence.seqno; 533 to->timeline->sync_seqno[from->engine->id] = from->global_seqno;
534 return 0;
535}
536
537int
538i915_gem_request_await_dma_fence(struct drm_i915_gem_request *req,
539 struct dma_fence *fence)
540{
541 struct dma_fence_array *array;
542 int ret;
543 int i;
544
545 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
546 return 0;
547
548 if (dma_fence_is_i915(fence))
549 return i915_gem_request_await_request(req, to_request(fence));
550
551 if (!dma_fence_is_array(fence)) {
552 ret = i915_sw_fence_await_dma_fence(&req->submit,
553 fence, I915_FENCE_TIMEOUT,
554 GFP_KERNEL);
555 return ret < 0 ? ret : 0;
556 }
557
558 /* Note that if the fence-array was created in signal-on-any mode,
559 * we should *not* decompose it into its individual fences. However,
560 * we don't currently store which mode the fence-array is operating
561 * in. Fortunately, the only user of signal-on-any is private to
562 * amdgpu and we should not see any incoming fence-array from
563 * sync-file being in signal-on-any mode.
564 */
565
566 array = to_dma_fence_array(fence);
567 for (i = 0; i < array->num_fences; i++) {
568 struct dma_fence *child = array->fences[i];
569
570 if (dma_fence_is_i915(child))
571 ret = i915_gem_request_await_request(req,
572 to_request(child));
573 else
574 ret = i915_sw_fence_await_dma_fence(&req->submit,
575 child, I915_FENCE_TIMEOUT,
576 GFP_KERNEL);
577 if (ret < 0)
578 return ret;
579 }
580
496 return 0; 581 return 0;
497} 582}
498 583
@@ -521,40 +606,47 @@ i915_gem_request_await_object(struct drm_i915_gem_request *to,
521 struct drm_i915_gem_object *obj, 606 struct drm_i915_gem_object *obj,
522 bool write) 607 bool write)
523{ 608{
524 struct i915_gem_active *active; 609 struct dma_fence *excl;
525 unsigned long active_mask; 610 int ret = 0;
526 int idx;
527 611
528 if (write) { 612 if (write) {
529 active_mask = i915_gem_object_get_active(obj); 613 struct dma_fence **shared;
530 active = obj->last_read; 614 unsigned int count, i;
615
616 ret = reservation_object_get_fences_rcu(obj->resv,
617 &excl, &count, &shared);
618 if (ret)
619 return ret;
620
621 for (i = 0; i < count; i++) {
622 ret = i915_gem_request_await_dma_fence(to, shared[i]);
623 if (ret)
624 break;
625
626 dma_fence_put(shared[i]);
627 }
628
629 for (; i < count; i++)
630 dma_fence_put(shared[i]);
631 kfree(shared);
531 } else { 632 } else {
532 active_mask = 1; 633 excl = reservation_object_get_excl_rcu(obj->resv);
533 active = &obj->last_write;
534 } 634 }
535 635
536 for_each_active(active_mask, idx) { 636 if (excl) {
537 struct drm_i915_gem_request *request; 637 if (ret == 0)
538 int ret; 638 ret = i915_gem_request_await_dma_fence(to, excl);
539
540 request = i915_gem_active_peek(&active[idx],
541 &obj->base.dev->struct_mutex);
542 if (!request)
543 continue;
544 639
545 ret = i915_gem_request_await_request(to, request); 640 dma_fence_put(excl);
546 if (ret)
547 return ret;
548 } 641 }
549 642
550 return 0; 643 return ret;
551} 644}
552 645
553static void i915_gem_mark_busy(const struct intel_engine_cs *engine) 646static void i915_gem_mark_busy(const struct intel_engine_cs *engine)
554{ 647{
555 struct drm_i915_private *dev_priv = engine->i915; 648 struct drm_i915_private *dev_priv = engine->i915;
556 649
557 dev_priv->gt.active_engines |= intel_engine_flag(engine);
558 if (dev_priv->gt.awake) 650 if (dev_priv->gt.awake)
559 return; 651 return;
560 652
@@ -580,11 +672,11 @@ void __i915_add_request(struct drm_i915_gem_request *request, bool flush_caches)
580{ 672{
581 struct intel_engine_cs *engine = request->engine; 673 struct intel_engine_cs *engine = request->engine;
582 struct intel_ring *ring = request->ring; 674 struct intel_ring *ring = request->ring;
675 struct intel_timeline *timeline = request->timeline;
583 struct drm_i915_gem_request *prev; 676 struct drm_i915_gem_request *prev;
584 u32 request_start; 677 int err;
585 u32 reserved_tail;
586 int ret;
587 678
679 lockdep_assert_held(&request->i915->drm.struct_mutex);
588 trace_i915_gem_request_add(request); 680 trace_i915_gem_request_add(request);
589 681
590 /* 682 /*
@@ -592,8 +684,6 @@ void __i915_add_request(struct drm_i915_gem_request *request, bool flush_caches)
592 * should already have been reserved in the ring buffer. Let the ring 684 * should already have been reserved in the ring buffer. Let the ring
593 * know that it is time to use that space up. 685 * know that it is time to use that space up.
594 */ 686 */
595 request_start = ring->tail;
596 reserved_tail = request->reserved_space;
597 request->reserved_space = 0; 687 request->reserved_space = 0;
598 688
599 /* 689 /*
@@ -604,10 +694,10 @@ void __i915_add_request(struct drm_i915_gem_request *request, bool flush_caches)
604 * what. 694 * what.
605 */ 695 */
606 if (flush_caches) { 696 if (flush_caches) {
607 ret = engine->emit_flush(request, EMIT_FLUSH); 697 err = engine->emit_flush(request, EMIT_FLUSH);
608 698
609 /* Not allowed to fail! */ 699 /* Not allowed to fail! */
610 WARN(ret, "engine->emit_flush() failed: %d!\n", ret); 700 WARN(err, "engine->emit_flush() failed: %d!\n", err);
611 } 701 }
612 702
613 /* Record the position of the start of the breadcrumb so that 703 /* Record the position of the start of the breadcrumb so that
@@ -615,20 +705,10 @@ void __i915_add_request(struct drm_i915_gem_request *request, bool flush_caches)
615 * GPU processing the request, we never over-estimate the 705 * GPU processing the request, we never over-estimate the
616 * position of the ring's HEAD. 706 * position of the ring's HEAD.
617 */ 707 */
708 err = intel_ring_begin(request, engine->emit_breadcrumb_sz);
709 GEM_BUG_ON(err);
618 request->postfix = ring->tail; 710 request->postfix = ring->tail;
619 711 ring->tail += engine->emit_breadcrumb_sz * sizeof(u32);
620 /* Not allowed to fail! */
621 ret = engine->emit_request(request);
622 WARN(ret, "(%s)->emit_request failed: %d!\n", engine->name, ret);
623
624 /* Sanity check that the reserved size was large enough. */
625 ret = ring->tail - request_start;
626 if (ret < 0)
627 ret += ring->size;
628 WARN_ONCE(ret > reserved_tail,
629 "Not enough space reserved (%d bytes) "
630 "for adding the request (%d bytes)\n",
631 reserved_tail, ret);
632 712
633 /* Seal the request and mark it as pending execution. Note that 713 /* Seal the request and mark it as pending execution. Note that
634 * we may inspect this state, without holding any locks, during 714 * we may inspect this state, without holding any locks, during
@@ -636,18 +716,24 @@ void __i915_add_request(struct drm_i915_gem_request *request, bool flush_caches)
636 * see a more recent value in the hws than we are tracking. 716 * see a more recent value in the hws than we are tracking.
637 */ 717 */
638 718
639 prev = i915_gem_active_raw(&engine->last_request, 719 prev = i915_gem_active_raw(&timeline->last_request,
640 &request->i915->drm.struct_mutex); 720 &request->i915->drm.struct_mutex);
641 if (prev) 721 if (prev)
642 i915_sw_fence_await_sw_fence(&request->submit, &prev->submit, 722 i915_sw_fence_await_sw_fence(&request->submit, &prev->submit,
643 &request->submitq); 723 &request->submitq);
644 724
645 request->emitted_jiffies = jiffies; 725 spin_lock_irq(&timeline->lock);
646 request->previous_seqno = engine->last_pending_seqno; 726 list_add_tail(&request->link, &timeline->requests);
647 engine->last_pending_seqno = request->fence.seqno; 727 spin_unlock_irq(&timeline->lock);
648 i915_gem_active_set(&engine->last_request, request); 728
649 list_add_tail(&request->link, &engine->request_list); 729 GEM_BUG_ON(i915_seqno_passed(timeline->last_submitted_seqno,
730 request->fence.seqno));
731
732 timeline->last_submitted_seqno = request->fence.seqno;
733 i915_gem_active_set(&timeline->last_request, request);
734
650 list_add_tail(&request->ring_link, &ring->request_list); 735 list_add_tail(&request->ring_link, &ring->request_list);
736 request->emitted_jiffies = jiffies;
651 737
652 i915_gem_mark_busy(engine); 738 i915_gem_mark_busy(engine);
653 739
@@ -715,7 +801,7 @@ bool __i915_spin_request(const struct drm_i915_gem_request *req,
715 801
716 timeout_us += local_clock_us(&cpu); 802 timeout_us += local_clock_us(&cpu);
717 do { 803 do {
718 if (i915_gem_request_completed(req)) 804 if (__i915_gem_request_completed(req))
719 return true; 805 return true;
720 806
721 if (signal_pending_state(state, current)) 807 if (signal_pending_state(state, current))
@@ -730,76 +816,101 @@ bool __i915_spin_request(const struct drm_i915_gem_request *req,
730 return false; 816 return false;
731} 817}
732 818
819static long
820__i915_request_wait_for_submit(struct drm_i915_gem_request *request,
821 unsigned int flags,
822 long timeout)
823{
824 const int state = flags & I915_WAIT_INTERRUPTIBLE ?
825 TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE;
826 wait_queue_head_t *q = &request->i915->gpu_error.wait_queue;
827 DEFINE_WAIT(reset);
828 DEFINE_WAIT(wait);
829
830 if (flags & I915_WAIT_LOCKED)
831 add_wait_queue(q, &reset);
832
833 do {
834 prepare_to_wait(&request->submit.wait, &wait, state);
835
836 if (i915_sw_fence_done(&request->submit))
837 break;
838
839 if (flags & I915_WAIT_LOCKED &&
840 i915_reset_in_progress(&request->i915->gpu_error)) {
841 __set_current_state(TASK_RUNNING);
842 i915_reset(request->i915);
843 reset_wait_queue(q, &reset);
844 continue;
845 }
846
847 if (signal_pending_state(state, current)) {
848 timeout = -ERESTARTSYS;
849 break;
850 }
851
852 timeout = io_schedule_timeout(timeout);
853 } while (timeout);
854 finish_wait(&request->submit.wait, &wait);
855
856 if (flags & I915_WAIT_LOCKED)
857 remove_wait_queue(q, &reset);
858
859 return timeout;
860}
861
733/** 862/**
734 * i915_wait_request - wait until execution of request has finished 863 * i915_wait_request - wait until execution of request has finished
735 * @req: duh! 864 * @req: the request to wait upon
736 * @flags: how to wait 865 * @flags: how to wait
737 * @timeout: in - how long to wait (NULL forever); out - how much time remaining 866 * @timeout: how long to wait in jiffies
738 * @rps: client to charge for RPS boosting 867 *
868 * i915_wait_request() waits for the request to be completed, for a
869 * maximum of @timeout jiffies (with MAX_SCHEDULE_TIMEOUT implying an
870 * unbounded wait).
739 * 871 *
740 * Note: It is of utmost importance that the passed in seqno and reset_counter 872 * If the caller holds the struct_mutex, the caller must pass I915_WAIT_LOCKED
741 * values have been read by the caller in an smp safe manner. Where read-side 873 * in via the flags, and vice versa if the struct_mutex is not held, the caller
742 * locks are involved, it is sufficient to read the reset_counter before 874 * must not specify that the wait is locked.
743 * unlocking the lock that protects the seqno. For lockless tricks, the
744 * reset_counter _must_ be read before, and an appropriate smp_rmb must be
745 * inserted.
746 * 875 *
747 * Returns 0 if the request was found within the alloted time. Else returns the 876 * Returns the remaining time (in jiffies) if the request completed, which may
748 * errno with remaining time filled in timeout argument. 877 * be zero or -ETIME if the request is unfinished after the timeout expires.
878 * May return -EINTR is called with I915_WAIT_INTERRUPTIBLE and a signal is
879 * pending before the request completes.
749 */ 880 */
750int i915_wait_request(struct drm_i915_gem_request *req, 881long i915_wait_request(struct drm_i915_gem_request *req,
751 unsigned int flags, 882 unsigned int flags,
752 s64 *timeout, 883 long timeout)
753 struct intel_rps_client *rps)
754{ 884{
755 const int state = flags & I915_WAIT_INTERRUPTIBLE ? 885 const int state = flags & I915_WAIT_INTERRUPTIBLE ?
756 TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE; 886 TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE;
757 DEFINE_WAIT(reset); 887 DEFINE_WAIT(reset);
758 struct intel_wait wait; 888 struct intel_wait wait;
759 unsigned long timeout_remain;
760 int ret = 0;
761 889
762 might_sleep(); 890 might_sleep();
763#if IS_ENABLED(CONFIG_LOCKDEP) 891#if IS_ENABLED(CONFIG_LOCKDEP)
764 GEM_BUG_ON(!!lockdep_is_held(&req->i915->drm.struct_mutex) != 892 GEM_BUG_ON(debug_locks &&
893 !!lockdep_is_held(&req->i915->drm.struct_mutex) !=
765 !!(flags & I915_WAIT_LOCKED)); 894 !!(flags & I915_WAIT_LOCKED));
766#endif 895#endif
896 GEM_BUG_ON(timeout < 0);
767 897
768 if (i915_gem_request_completed(req)) 898 if (i915_gem_request_completed(req))
769 return 0; 899 return timeout;
770 900
771 timeout_remain = MAX_SCHEDULE_TIMEOUT; 901 if (!timeout)
772 if (timeout) { 902 return -ETIME;
773 if (WARN_ON(*timeout < 0))
774 return -EINVAL;
775
776 if (*timeout == 0)
777 return -ETIME;
778
779 /* Record current time in case interrupted, or wedged */
780 timeout_remain = nsecs_to_jiffies_timeout(*timeout);
781 *timeout += ktime_get_raw_ns();
782 }
783 903
784 trace_i915_gem_request_wait_begin(req); 904 trace_i915_gem_request_wait_begin(req);
785 905
786 /* This client is about to stall waiting for the GPU. In many cases 906 if (!i915_sw_fence_done(&req->submit)) {
787 * this is undesirable and limits the throughput of the system, as 907 timeout = __i915_request_wait_for_submit(req, flags, timeout);
788 * many clients cannot continue processing user input/output whilst 908 if (timeout < 0)
789 * blocked. RPS autotuning may take tens of milliseconds to respond 909 goto complete;
790 * to the GPU load and thus incurs additional latency for the client. 910
791 * We can circumvent that by promoting the GPU frequency to maximum 911 GEM_BUG_ON(!i915_sw_fence_done(&req->submit));
792 * before we wait. This makes the GPU throttle up much more quickly 912 }
793 * (good for benchmarks and user experience, e.g. window animations), 913 GEM_BUG_ON(!req->global_seqno);
794 * but at a cost of spending more power processing the workload
795 * (bad for battery). Not all clients even want their results
796 * immediately and for them we should just let the GPU select its own
797 * frequency to maximise efficiency. To prevent a single client from
798 * forcing the clocks too high for the whole system, we only allow
799 * each client to waitboost once in a busy period.
800 */
801 if (IS_RPS_CLIENT(rps) && INTEL_GEN(req->i915) >= 6)
802 gen6_rps_boost(req->i915, rps, req->emitted_jiffies);
803 914
804 /* Optimistic short spin before touching IRQs */ 915 /* Optimistic short spin before touching IRQs */
805 if (i915_spin_request(req, state, 5)) 916 if (i915_spin_request(req, state, 5))
@@ -809,7 +920,7 @@ int i915_wait_request(struct drm_i915_gem_request *req,
809 if (flags & I915_WAIT_LOCKED) 920 if (flags & I915_WAIT_LOCKED)
810 add_wait_queue(&req->i915->gpu_error.wait_queue, &reset); 921 add_wait_queue(&req->i915->gpu_error.wait_queue, &reset);
811 922
812 intel_wait_init(&wait, req->fence.seqno); 923 intel_wait_init(&wait, req->global_seqno);
813 if (intel_engine_add_wait(req->engine, &wait)) 924 if (intel_engine_add_wait(req->engine, &wait))
814 /* In order to check that we haven't missed the interrupt 925 /* In order to check that we haven't missed the interrupt
815 * as we enabled it, we need to kick ourselves to do a 926 * as we enabled it, we need to kick ourselves to do a
@@ -819,16 +930,17 @@ int i915_wait_request(struct drm_i915_gem_request *req,
819 930
820 for (;;) { 931 for (;;) {
821 if (signal_pending_state(state, current)) { 932 if (signal_pending_state(state, current)) {
822 ret = -ERESTARTSYS; 933 timeout = -ERESTARTSYS;
823 break; 934 break;
824 } 935 }
825 936
826 timeout_remain = io_schedule_timeout(timeout_remain); 937 if (!timeout) {
827 if (timeout_remain == 0) { 938 timeout = -ETIME;
828 ret = -ETIME;
829 break; 939 break;
830 } 940 }
831 941
942 timeout = io_schedule_timeout(timeout);
943
832 if (intel_wait_complete(&wait)) 944 if (intel_wait_complete(&wait))
833 break; 945 break;
834 946
@@ -875,74 +987,39 @@ wakeup:
875complete: 987complete:
876 trace_i915_gem_request_wait_end(req); 988 trace_i915_gem_request_wait_end(req);
877 989
878 if (timeout) { 990 return timeout;
879 *timeout -= ktime_get_raw_ns();
880 if (*timeout < 0)
881 *timeout = 0;
882
883 /*
884 * Apparently ktime isn't accurate enough and occasionally has a
885 * bit of mismatch in the jiffies<->nsecs<->ktime loop. So patch
886 * things up to make the test happy. We allow up to 1 jiffy.
887 *
888 * This is a regrssion from the timespec->ktime conversion.
889 */
890 if (ret == -ETIME && *timeout < jiffies_to_usecs(1)*1000)
891 *timeout = 0;
892 }
893
894 if (IS_RPS_USER(rps) &&
895 req->fence.seqno == req->engine->last_submitted_seqno) {
896 /* The GPU is now idle and this client has stalled.
897 * Since no other client has submitted a request in the
898 * meantime, assume that this client is the only one
899 * supplying work to the GPU but is unable to keep that
900 * work supplied because it is waiting. Since the GPU is
901 * then never kept fully busy, RPS autoclocking will
902 * keep the clocks relatively low, causing further delays.
903 * Compensate by giving the synchronous client credit for
904 * a waitboost next time.
905 */
906 spin_lock(&req->i915->rps.client_lock);
907 list_del_init(&rps->link);
908 spin_unlock(&req->i915->rps.client_lock);
909 }
910
911 return ret;
912} 991}
913 992
914static bool engine_retire_requests(struct intel_engine_cs *engine) 993static void engine_retire_requests(struct intel_engine_cs *engine)
915{ 994{
916 struct drm_i915_gem_request *request, *next; 995 struct drm_i915_gem_request *request, *next;
917 996
918 list_for_each_entry_safe(request, next, &engine->request_list, link) { 997 list_for_each_entry_safe(request, next,
919 if (!i915_gem_request_completed(request)) 998 &engine->timeline->requests, link) {
920 return false; 999 if (!__i915_gem_request_completed(request))
1000 return;
921 1001
922 i915_gem_request_retire(request); 1002 i915_gem_request_retire(request);
923 } 1003 }
924
925 return true;
926} 1004}
927 1005
928void i915_gem_retire_requests(struct drm_i915_private *dev_priv) 1006void i915_gem_retire_requests(struct drm_i915_private *dev_priv)
929{ 1007{
930 struct intel_engine_cs *engine; 1008 struct intel_engine_cs *engine;
931 unsigned int tmp; 1009 enum intel_engine_id id;
932 1010
933 lockdep_assert_held(&dev_priv->drm.struct_mutex); 1011 lockdep_assert_held(&dev_priv->drm.struct_mutex);
934 1012
935 if (dev_priv->gt.active_engines == 0) 1013 if (!dev_priv->gt.active_requests)
936 return; 1014 return;
937 1015
938 GEM_BUG_ON(!dev_priv->gt.awake); 1016 GEM_BUG_ON(!dev_priv->gt.awake);
939 1017
940 for_each_engine_masked(engine, dev_priv, dev_priv->gt.active_engines, tmp) 1018 for_each_engine(engine, dev_priv, id)
941 if (engine_retire_requests(engine)) 1019 engine_retire_requests(engine);
942 dev_priv->gt.active_engines &= ~intel_engine_flag(engine);
943 1020
944 if (dev_priv->gt.active_engines == 0) 1021 if (!dev_priv->gt.active_requests)
945 queue_delayed_work(dev_priv->wq, 1022 mod_delayed_work(dev_priv->wq,
946 &dev_priv->gt.idle_work, 1023 &dev_priv->gt.idle_work,
947 msecs_to_jiffies(100)); 1024 msecs_to_jiffies(100));
948} 1025}
diff --git a/drivers/gpu/drm/i915/i915_gem_request.h b/drivers/gpu/drm/i915/i915_gem_request.h
index bceeaa3a5193..75f8360b3421 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.h
+++ b/drivers/gpu/drm/i915/i915_gem_request.h
@@ -81,11 +81,14 @@ struct drm_i915_gem_request {
81 struct i915_gem_context *ctx; 81 struct i915_gem_context *ctx;
82 struct intel_engine_cs *engine; 82 struct intel_engine_cs *engine;
83 struct intel_ring *ring; 83 struct intel_ring *ring;
84 struct intel_timeline *timeline;
84 struct intel_signal_node signaling; 85 struct intel_signal_node signaling;
85 86
86 struct i915_sw_fence submit; 87 struct i915_sw_fence submit;
87 wait_queue_t submitq; 88 wait_queue_t submitq;
88 89
90 u32 global_seqno;
91
89 /** GEM sequence number associated with the previous request, 92 /** GEM sequence number associated with the previous request,
90 * when the HWS breadcrumb is equal to this the GPU is processing 93 * when the HWS breadcrumb is equal to this the GPU is processing
91 * this request. 94 * this request.
@@ -147,7 +150,7 @@ struct drm_i915_gem_request {
147 150
148extern const struct dma_fence_ops i915_fence_ops; 151extern const struct dma_fence_ops i915_fence_ops;
149 152
150static inline bool fence_is_i915(struct dma_fence *fence) 153static inline bool dma_fence_is_i915(const struct dma_fence *fence)
151{ 154{
152 return fence->ops == &i915_fence_ops; 155 return fence->ops == &i915_fence_ops;
153} 156}
@@ -162,7 +165,7 @@ void i915_gem_request_retire_upto(struct drm_i915_gem_request *req);
162static inline u32 165static inline u32
163i915_gem_request_get_seqno(struct drm_i915_gem_request *req) 166i915_gem_request_get_seqno(struct drm_i915_gem_request *req)
164{ 167{
165 return req ? req->fence.seqno : 0; 168 return req ? req->global_seqno : 0;
166} 169}
167 170
168static inline struct intel_engine_cs * 171static inline struct intel_engine_cs *
@@ -176,7 +179,7 @@ to_request(struct dma_fence *fence)
176{ 179{
177 /* We assume that NULL fence/request are interoperable */ 180 /* We assume that NULL fence/request are interoperable */
178 BUILD_BUG_ON(offsetof(struct drm_i915_gem_request, fence) != 0); 181 BUILD_BUG_ON(offsetof(struct drm_i915_gem_request, fence) != 0);
179 GEM_BUG_ON(fence && !fence_is_i915(fence)); 182 GEM_BUG_ON(fence && !dma_fence_is_i915(fence));
180 return container_of(fence, struct drm_i915_gem_request, fence); 183 return container_of(fence, struct drm_i915_gem_request, fence);
181} 184}
182 185
@@ -214,6 +217,8 @@ int
214i915_gem_request_await_object(struct drm_i915_gem_request *to, 217i915_gem_request_await_object(struct drm_i915_gem_request *to,
215 struct drm_i915_gem_object *obj, 218 struct drm_i915_gem_object *obj,
216 bool write); 219 bool write);
220int i915_gem_request_await_dma_fence(struct drm_i915_gem_request *req,
221 struct dma_fence *fence);
217 222
218void __i915_add_request(struct drm_i915_gem_request *req, bool flush_caches); 223void __i915_add_request(struct drm_i915_gem_request *req, bool flush_caches);
219#define i915_add_request(req) \ 224#define i915_add_request(req) \
@@ -226,13 +231,13 @@ struct intel_rps_client;
226#define IS_RPS_CLIENT(p) (!IS_ERR(p)) 231#define IS_RPS_CLIENT(p) (!IS_ERR(p))
227#define IS_RPS_USER(p) (!IS_ERR_OR_NULL(p)) 232#define IS_RPS_USER(p) (!IS_ERR_OR_NULL(p))
228 233
229int i915_wait_request(struct drm_i915_gem_request *req, 234long i915_wait_request(struct drm_i915_gem_request *req,
230 unsigned int flags, 235 unsigned int flags,
231 s64 *timeout, 236 long timeout)
232 struct intel_rps_client *rps)
233 __attribute__((nonnull(1))); 237 __attribute__((nonnull(1)));
234#define I915_WAIT_INTERRUPTIBLE BIT(0) 238#define I915_WAIT_INTERRUPTIBLE BIT(0)
235#define I915_WAIT_LOCKED BIT(1) /* struct_mutex held, handle GPU reset */ 239#define I915_WAIT_LOCKED BIT(1) /* struct_mutex held, handle GPU reset */
240#define I915_WAIT_ALL BIT(2) /* used by i915_gem_object_wait() */
236 241
237static inline u32 intel_engine_get_seqno(struct intel_engine_cs *engine); 242static inline u32 intel_engine_get_seqno(struct intel_engine_cs *engine);
238 243
@@ -245,17 +250,37 @@ static inline bool i915_seqno_passed(u32 seq1, u32 seq2)
245} 250}
246 251
247static inline bool 252static inline bool
248i915_gem_request_started(const struct drm_i915_gem_request *req) 253__i915_gem_request_started(const struct drm_i915_gem_request *req)
249{ 254{
255 GEM_BUG_ON(!req->global_seqno);
250 return i915_seqno_passed(intel_engine_get_seqno(req->engine), 256 return i915_seqno_passed(intel_engine_get_seqno(req->engine),
251 req->previous_seqno); 257 req->previous_seqno);
252} 258}
253 259
254static inline bool 260static inline bool
255i915_gem_request_completed(const struct drm_i915_gem_request *req) 261i915_gem_request_started(const struct drm_i915_gem_request *req)
262{
263 if (!req->global_seqno)
264 return false;
265
266 return __i915_gem_request_started(req);
267}
268
269static inline bool
270__i915_gem_request_completed(const struct drm_i915_gem_request *req)
256{ 271{
272 GEM_BUG_ON(!req->global_seqno);
257 return i915_seqno_passed(intel_engine_get_seqno(req->engine), 273 return i915_seqno_passed(intel_engine_get_seqno(req->engine),
258 req->fence.seqno); 274 req->global_seqno);
275}
276
277static inline bool
278i915_gem_request_completed(const struct drm_i915_gem_request *req)
279{
280 if (!req->global_seqno)
281 return false;
282
283 return __i915_gem_request_completed(req);
259} 284}
260 285
261bool __i915_spin_request(const struct drm_i915_gem_request *request, 286bool __i915_spin_request(const struct drm_i915_gem_request *request,
@@ -263,7 +288,7 @@ bool __i915_spin_request(const struct drm_i915_gem_request *request,
263static inline bool i915_spin_request(const struct drm_i915_gem_request *request, 288static inline bool i915_spin_request(const struct drm_i915_gem_request *request,
264 int state, unsigned long timeout_us) 289 int state, unsigned long timeout_us)
265{ 290{
266 return (i915_gem_request_started(request) && 291 return (__i915_gem_request_started(request) &&
267 __i915_spin_request(request, state, timeout_us)); 292 __i915_spin_request(request, state, timeout_us));
268} 293}
269 294
@@ -552,53 +577,13 @@ i915_gem_active_isset(const struct i915_gem_active *active)
552} 577}
553 578
554/** 579/**
555 * i915_gem_active_is_idle - report whether the active tracker is idle
556 * @active - the active tracker
557 *
558 * i915_gem_active_is_idle() returns true if the active tracker is currently
559 * unassigned or if the request is complete (but not yet retired). Requires
560 * the caller to hold struct_mutex (but that can be relaxed if desired).
561 */
562static inline bool
563i915_gem_active_is_idle(const struct i915_gem_active *active,
564 struct mutex *mutex)
565{
566 return !i915_gem_active_peek(active, mutex);
567}
568
569/**
570 * i915_gem_active_wait - waits until the request is completed 580 * i915_gem_active_wait - waits until the request is completed
571 * @active - the active request on which to wait 581 * @active - the active request on which to wait
572 *
573 * i915_gem_active_wait() waits until the request is completed before
574 * returning. Note that it does not guarantee that the request is
575 * retired first, see i915_gem_active_retire().
576 *
577 * i915_gem_active_wait() returns immediately if the active
578 * request is already complete.
579 */
580static inline int __must_check
581i915_gem_active_wait(const struct i915_gem_active *active, struct mutex *mutex)
582{
583 struct drm_i915_gem_request *request;
584
585 request = i915_gem_active_peek(active, mutex);
586 if (!request)
587 return 0;
588
589 return i915_wait_request(request,
590 I915_WAIT_INTERRUPTIBLE | I915_WAIT_LOCKED,
591 NULL, NULL);
592}
593
594/**
595 * i915_gem_active_wait_unlocked - waits until the request is completed
596 * @active - the active request on which to wait
597 * @flags - how to wait 582 * @flags - how to wait
598 * @timeout - how long to wait at most 583 * @timeout - how long to wait at most
599 * @rps - userspace client to charge for a waitboost 584 * @rps - userspace client to charge for a waitboost
600 * 585 *
601 * i915_gem_active_wait_unlocked() waits until the request is completed before 586 * i915_gem_active_wait() waits until the request is completed before
602 * returning, without requiring any locks to be held. Note that it does not 587 * returning, without requiring any locks to be held. Note that it does not
603 * retire any requests before returning. 588 * retire any requests before returning.
604 * 589 *
@@ -614,21 +599,18 @@ i915_gem_active_wait(const struct i915_gem_active *active, struct mutex *mutex)
614 * Returns 0 if successful, or a negative error code. 599 * Returns 0 if successful, or a negative error code.
615 */ 600 */
616static inline int 601static inline int
617i915_gem_active_wait_unlocked(const struct i915_gem_active *active, 602i915_gem_active_wait(const struct i915_gem_active *active, unsigned int flags)
618 unsigned int flags,
619 s64 *timeout,
620 struct intel_rps_client *rps)
621{ 603{
622 struct drm_i915_gem_request *request; 604 struct drm_i915_gem_request *request;
623 int ret = 0; 605 long ret = 0;
624 606
625 request = i915_gem_active_get_unlocked(active); 607 request = i915_gem_active_get_unlocked(active);
626 if (request) { 608 if (request) {
627 ret = i915_wait_request(request, flags, timeout, rps); 609 ret = i915_wait_request(request, flags, MAX_SCHEDULE_TIMEOUT);
628 i915_gem_request_put(request); 610 i915_gem_request_put(request);
629 } 611 }
630 612
631 return ret; 613 return ret < 0 ? ret : 0;
632} 614}
633 615
634/** 616/**
@@ -645,7 +627,7 @@ i915_gem_active_retire(struct i915_gem_active *active,
645 struct mutex *mutex) 627 struct mutex *mutex)
646{ 628{
647 struct drm_i915_gem_request *request; 629 struct drm_i915_gem_request *request;
648 int ret; 630 long ret;
649 631
650 request = i915_gem_active_raw(active, mutex); 632 request = i915_gem_active_raw(active, mutex);
651 if (!request) 633 if (!request)
@@ -653,8 +635,8 @@ i915_gem_active_retire(struct i915_gem_active *active,
653 635
654 ret = i915_wait_request(request, 636 ret = i915_wait_request(request,
655 I915_WAIT_INTERRUPTIBLE | I915_WAIT_LOCKED, 637 I915_WAIT_INTERRUPTIBLE | I915_WAIT_LOCKED,
656 NULL, NULL); 638 MAX_SCHEDULE_TIMEOUT);
657 if (ret) 639 if (ret < 0)
658 return ret; 640 return ret;
659 641
660 list_del_init(&active->link); 642 list_del_init(&active->link);
@@ -665,24 +647,6 @@ i915_gem_active_retire(struct i915_gem_active *active,
665 return 0; 647 return 0;
666} 648}
667 649
668/* Convenience functions for peeking at state inside active's request whilst
669 * guarded by the struct_mutex.
670 */
671
672static inline uint32_t
673i915_gem_active_get_seqno(const struct i915_gem_active *active,
674 struct mutex *mutex)
675{
676 return i915_gem_request_get_seqno(i915_gem_active_peek(active, mutex));
677}
678
679static inline struct intel_engine_cs *
680i915_gem_active_get_engine(const struct i915_gem_active *active,
681 struct mutex *mutex)
682{
683 return i915_gem_request_get_engine(i915_gem_active_peek(active, mutex));
684}
685
686#define for_each_active(mask, idx) \ 650#define for_each_active(mask, idx) \
687 for (; mask ? idx = ffs(mask) - 1, 1 : 0; mask &= ~BIT(idx)) 651 for (; mask ? idx = ffs(mask) - 1, 1 : 0; mask &= ~BIT(idx))
688 652
diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c b/drivers/gpu/drm/i915/i915_gem_shrinker.c
index de25b6e0a101..a6fc1bdc48af 100644
--- a/drivers/gpu/drm/i915/i915_gem_shrinker.c
+++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c
@@ -48,6 +48,20 @@ static bool mutex_is_locked_by(struct mutex *mutex, struct task_struct *task)
48#endif 48#endif
49} 49}
50 50
51static bool i915_gem_shrinker_lock(struct drm_device *dev, bool *unlock)
52{
53 if (!mutex_trylock(&dev->struct_mutex)) {
54 if (!mutex_is_locked_by(&dev->struct_mutex, current))
55 return false;
56
57 *unlock = false;
58 } else {
59 *unlock = true;
60 }
61
62 return true;
63}
64
51static bool any_vma_pinned(struct drm_i915_gem_object *obj) 65static bool any_vma_pinned(struct drm_i915_gem_object *obj)
52{ 66{
53 struct i915_vma *vma; 67 struct i915_vma *vma;
@@ -66,8 +80,11 @@ static bool swap_available(void)
66 80
67static bool can_release_pages(struct drm_i915_gem_object *obj) 81static bool can_release_pages(struct drm_i915_gem_object *obj)
68{ 82{
69 /* Only shmemfs objects are backed by swap */ 83 if (!obj->mm.pages)
70 if (!obj->base.filp) 84 return false;
85
86 /* Consider only shrinkable ojects. */
87 if (!i915_gem_object_is_shrinkable(obj))
71 return false; 88 return false;
72 89
73 /* Only report true if by unbinding the object and putting its pages 90 /* Only report true if by unbinding the object and putting its pages
@@ -78,7 +95,7 @@ static bool can_release_pages(struct drm_i915_gem_object *obj)
78 * to the GPU, simply unbinding from the GPU is not going to succeed 95 * to the GPU, simply unbinding from the GPU is not going to succeed
79 * in releasing our pin count on the pages themselves. 96 * in releasing our pin count on the pages themselves.
80 */ 97 */
81 if (obj->pages_pin_count > obj->bind_count) 98 if (atomic_read(&obj->mm.pages_pin_count) > obj->bind_count)
82 return false; 99 return false;
83 100
84 if (any_vma_pinned(obj)) 101 if (any_vma_pinned(obj))
@@ -88,7 +105,14 @@ static bool can_release_pages(struct drm_i915_gem_object *obj)
88 * discard the contents (because the user has marked them as being 105 * discard the contents (because the user has marked them as being
89 * purgeable) or if we can move their contents out to swap. 106 * purgeable) or if we can move their contents out to swap.
90 */ 107 */
91 return swap_available() || obj->madv == I915_MADV_DONTNEED; 108 return swap_available() || obj->mm.madv == I915_MADV_DONTNEED;
109}
110
111static bool unsafe_drop_pages(struct drm_i915_gem_object *obj)
112{
113 if (i915_gem_object_unbind(obj) == 0)
114 __i915_gem_object_put_pages(obj, I915_MM_SHRINKER);
115 return !READ_ONCE(obj->mm.pages);
92} 116}
93 117
94/** 118/**
@@ -128,6 +152,10 @@ i915_gem_shrink(struct drm_i915_private *dev_priv,
128 { NULL, 0 }, 152 { NULL, 0 },
129 }, *phase; 153 }, *phase;
130 unsigned long count = 0; 154 unsigned long count = 0;
155 bool unlock;
156
157 if (!i915_gem_shrinker_lock(&dev_priv->drm, &unlock))
158 return 0;
131 159
132 trace_i915_gem_shrink(dev_priv, target, flags); 160 trace_i915_gem_shrink(dev_priv, target, flags);
133 i915_gem_retire_requests(dev_priv); 161 i915_gem_retire_requests(dev_priv);
@@ -171,15 +199,19 @@ i915_gem_shrink(struct drm_i915_private *dev_priv,
171 while (count < target && 199 while (count < target &&
172 (obj = list_first_entry_or_null(phase->list, 200 (obj = list_first_entry_or_null(phase->list,
173 typeof(*obj), 201 typeof(*obj),
174 global_list))) { 202 global_link))) {
175 list_move_tail(&obj->global_list, &still_in_list); 203 list_move_tail(&obj->global_link, &still_in_list);
204 if (!obj->mm.pages) {
205 list_del_init(&obj->global_link);
206 continue;
207 }
176 208
177 if (flags & I915_SHRINK_PURGEABLE && 209 if (flags & I915_SHRINK_PURGEABLE &&
178 obj->madv != I915_MADV_DONTNEED) 210 obj->mm.madv != I915_MADV_DONTNEED)
179 continue; 211 continue;
180 212
181 if (flags & I915_SHRINK_VMAPS && 213 if (flags & I915_SHRINK_VMAPS &&
182 !is_vmalloc_addr(obj->mapping)) 214 !is_vmalloc_addr(obj->mm.mapping))
183 continue; 215 continue;
184 216
185 if (!(flags & I915_SHRINK_ACTIVE) && 217 if (!(flags & I915_SHRINK_ACTIVE) &&
@@ -190,22 +222,28 @@ i915_gem_shrink(struct drm_i915_private *dev_priv,
190 if (!can_release_pages(obj)) 222 if (!can_release_pages(obj))
191 continue; 223 continue;
192 224
193 i915_gem_object_get(obj); 225 if (unsafe_drop_pages(obj)) {
194 226 /* May arrive from get_pages on another bo */
195 /* For the unbound phase, this should be a no-op! */ 227 mutex_lock_nested(&obj->mm.lock,
196 i915_gem_object_unbind(obj); 228 I915_MM_SHRINKER);
197 if (i915_gem_object_put_pages(obj) == 0) 229 if (!obj->mm.pages) {
198 count += obj->base.size >> PAGE_SHIFT; 230 __i915_gem_object_invalidate(obj);
199 231 list_del_init(&obj->global_link);
200 i915_gem_object_put(obj); 232 count += obj->base.size >> PAGE_SHIFT;
233 }
234 mutex_unlock(&obj->mm.lock);
235 }
201 } 236 }
202 list_splice(&still_in_list, phase->list); 237 list_splice_tail(&still_in_list, phase->list);
203 } 238 }
204 239
205 if (flags & I915_SHRINK_BOUND) 240 if (flags & I915_SHRINK_BOUND)
206 intel_runtime_pm_put(dev_priv); 241 intel_runtime_pm_put(dev_priv);
207 242
208 i915_gem_retire_requests(dev_priv); 243 i915_gem_retire_requests(dev_priv);
244 if (unlock)
245 mutex_unlock(&dev_priv->drm.struct_mutex);
246
209 /* expedite the RCU grace period to free some request slabs */ 247 /* expedite the RCU grace period to free some request slabs */
210 synchronize_rcu_expedited(); 248 synchronize_rcu_expedited();
211 249
@@ -239,19 +277,6 @@ unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv)
239 return freed; 277 return freed;
240} 278}
241 279
242static bool i915_gem_shrinker_lock(struct drm_device *dev, bool *unlock)
243{
244 if (!mutex_trylock(&dev->struct_mutex)) {
245 if (!mutex_is_locked_by(&dev->struct_mutex, current))
246 return false;
247
248 *unlock = false;
249 } else
250 *unlock = true;
251
252 return true;
253}
254
255static unsigned long 280static unsigned long
256i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) 281i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
257{ 282{
@@ -268,11 +293,11 @@ i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
268 i915_gem_retire_requests(dev_priv); 293 i915_gem_retire_requests(dev_priv);
269 294
270 count = 0; 295 count = 0;
271 list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list) 296 list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_link)
272 if (can_release_pages(obj)) 297 if (can_release_pages(obj))
273 count += obj->base.size >> PAGE_SHIFT; 298 count += obj->base.size >> PAGE_SHIFT;
274 299
275 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) { 300 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_link) {
276 if (!i915_gem_object_is_active(obj) && can_release_pages(obj)) 301 if (!i915_gem_object_is_active(obj) && can_release_pages(obj))
277 count += obj->base.size >> PAGE_SHIFT; 302 count += obj->base.size >> PAGE_SHIFT;
278 } 303 }
@@ -373,13 +398,19 @@ i915_gem_shrinker_oom(struct notifier_block *nb, unsigned long event, void *ptr)
373 * being pointed to by hardware. 398 * being pointed to by hardware.
374 */ 399 */
375 unbound = bound = unevictable = 0; 400 unbound = bound = unevictable = 0;
376 list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list) { 401 list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_link) {
402 if (!obj->mm.pages)
403 continue;
404
377 if (!can_release_pages(obj)) 405 if (!can_release_pages(obj))
378 unevictable += obj->base.size >> PAGE_SHIFT; 406 unevictable += obj->base.size >> PAGE_SHIFT;
379 else 407 else
380 unbound += obj->base.size >> PAGE_SHIFT; 408 unbound += obj->base.size >> PAGE_SHIFT;
381 } 409 }
382 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) { 410 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_link) {
411 if (!obj->mm.pages)
412 continue;
413
383 if (!can_release_pages(obj)) 414 if (!can_release_pages(obj))
384 unevictable += obj->base.size >> PAGE_SHIFT; 415 unevictable += obj->base.size >> PAGE_SHIFT;
385 else 416 else
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
index f4f6d3a48b05..b1d367dba347 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -109,7 +109,7 @@ static unsigned long i915_stolen_to_physical(struct drm_device *dev)
109 * 109 *
110 */ 110 */
111 base = 0; 111 base = 0;
112 if (INTEL_INFO(dev)->gen >= 3) { 112 if (INTEL_GEN(dev_priv) >= 3) {
113 u32 bsm; 113 u32 bsm;
114 114
115 pci_read_config_dword(pdev, INTEL_BSM, &bsm); 115 pci_read_config_dword(pdev, INTEL_BSM, &bsm);
@@ -138,7 +138,7 @@ static unsigned long i915_stolen_to_physical(struct drm_device *dev)
138 I865_TOUD, &toud); 138 I865_TOUD, &toud);
139 139
140 base = (toud << 16) + tseg_size; 140 base = (toud << 16) + tseg_size;
141 } else if (IS_I85X(dev)) { 141 } else if (IS_I85X(dev_priv)) {
142 u32 tseg_size = 0; 142 u32 tseg_size = 0;
143 u32 tom; 143 u32 tom;
144 u8 tmp; 144 u8 tmp;
@@ -546,25 +546,29 @@ i915_pages_create_for_stolen(struct drm_device *dev,
546 return st; 546 return st;
547} 547}
548 548
549static int i915_gem_object_get_pages_stolen(struct drm_i915_gem_object *obj) 549static struct sg_table *
550i915_gem_object_get_pages_stolen(struct drm_i915_gem_object *obj)
550{ 551{
551 BUG(); 552 return i915_pages_create_for_stolen(obj->base.dev,
552 return -EINVAL; 553 obj->stolen->start,
554 obj->stolen->size);
553} 555}
554 556
555static void i915_gem_object_put_pages_stolen(struct drm_i915_gem_object *obj) 557static void i915_gem_object_put_pages_stolen(struct drm_i915_gem_object *obj,
558 struct sg_table *pages)
556{ 559{
557 /* Should only be called during free */ 560 /* Should only be called during free */
558 sg_free_table(obj->pages); 561 sg_free_table(pages);
559 kfree(obj->pages); 562 kfree(pages);
560} 563}
561 564
562
563static void 565static void
564i915_gem_object_release_stolen(struct drm_i915_gem_object *obj) 566i915_gem_object_release_stolen(struct drm_i915_gem_object *obj)
565{ 567{
566 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 568 struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
567 569
570 __i915_gem_object_unpin_pages(obj);
571
568 if (obj->stolen) { 572 if (obj->stolen) {
569 i915_gem_stolen_remove_node(dev_priv, obj->stolen); 573 i915_gem_stolen_remove_node(dev_priv, obj->stolen);
570 kfree(obj->stolen); 574 kfree(obj->stolen);
@@ -590,20 +594,13 @@ _i915_gem_object_create_stolen(struct drm_device *dev,
590 drm_gem_private_object_init(dev, &obj->base, stolen->size); 594 drm_gem_private_object_init(dev, &obj->base, stolen->size);
591 i915_gem_object_init(obj, &i915_gem_object_stolen_ops); 595 i915_gem_object_init(obj, &i915_gem_object_stolen_ops);
592 596
593 obj->pages = i915_pages_create_for_stolen(dev,
594 stolen->start, stolen->size);
595 if (obj->pages == NULL)
596 goto cleanup;
597
598 obj->get_page.sg = obj->pages->sgl;
599 obj->get_page.last = 0;
600
601 i915_gem_object_pin_pages(obj);
602 obj->stolen = stolen; 597 obj->stolen = stolen;
603
604 obj->base.read_domains = I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT; 598 obj->base.read_domains = I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT;
605 obj->cache_level = HAS_LLC(dev) ? I915_CACHE_LLC : I915_CACHE_NONE; 599 obj->cache_level = HAS_LLC(dev) ? I915_CACHE_LLC : I915_CACHE_NONE;
606 600
601 if (i915_gem_object_pin_pages(obj))
602 goto cleanup;
603
607 return obj; 604 return obj;
608 605
609cleanup: 606cleanup:
@@ -698,10 +695,14 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
698 if (gtt_offset == I915_GTT_OFFSET_NONE) 695 if (gtt_offset == I915_GTT_OFFSET_NONE)
699 return obj; 696 return obj;
700 697
698 ret = i915_gem_object_pin_pages(obj);
699 if (ret)
700 goto err;
701
701 vma = i915_gem_obj_lookup_or_create_vma(obj, &ggtt->base, NULL); 702 vma = i915_gem_obj_lookup_or_create_vma(obj, &ggtt->base, NULL);
702 if (IS_ERR(vma)) { 703 if (IS_ERR(vma)) {
703 ret = PTR_ERR(vma); 704 ret = PTR_ERR(vma);
704 goto err; 705 goto err_pages;
705 } 706 }
706 707
707 /* To simplify the initialisation sequence between KMS and GTT, 708 /* To simplify the initialisation sequence between KMS and GTT,
@@ -715,20 +716,20 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
715 ret = drm_mm_reserve_node(&ggtt->base.mm, &vma->node); 716 ret = drm_mm_reserve_node(&ggtt->base.mm, &vma->node);
716 if (ret) { 717 if (ret) {
717 DRM_DEBUG_KMS("failed to allocate stolen GTT space\n"); 718 DRM_DEBUG_KMS("failed to allocate stolen GTT space\n");
718 goto err; 719 goto err_pages;
719 } 720 }
720 721
721 vma->pages = obj->pages; 722 vma->pages = obj->mm.pages;
722 vma->flags |= I915_VMA_GLOBAL_BIND; 723 vma->flags |= I915_VMA_GLOBAL_BIND;
723 __i915_vma_set_map_and_fenceable(vma); 724 __i915_vma_set_map_and_fenceable(vma);
724 list_move_tail(&vma->vm_link, &ggtt->base.inactive_list); 725 list_move_tail(&vma->vm_link, &ggtt->base.inactive_list);
726 list_move_tail(&obj->global_link, &dev_priv->mm.bound_list);
725 obj->bind_count++; 727 obj->bind_count++;
726 728
727 list_add_tail(&obj->global_list, &dev_priv->mm.bound_list);
728 i915_gem_object_pin_pages(obj);
729
730 return obj; 729 return obj;
731 730
731err_pages:
732 i915_gem_object_unpin_pages(obj);
732err: 733err:
733 i915_gem_object_put(obj); 734 i915_gem_object_put(obj);
734 return NULL; 735 return NULL;
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
index c21bc0068d20..251d51b01174 100644
--- a/drivers/gpu/drm/i915/i915_gem_tiling.c
+++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
@@ -201,12 +201,10 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
201 201
202 if (!i915_tiling_ok(dev, 202 if (!i915_tiling_ok(dev,
203 args->stride, obj->base.size, args->tiling_mode)) { 203 args->stride, obj->base.size, args->tiling_mode)) {
204 i915_gem_object_put_unlocked(obj); 204 i915_gem_object_put(obj);
205 return -EINVAL; 205 return -EINVAL;
206 } 206 }
207 207
208 intel_runtime_pm_get(dev_priv);
209
210 mutex_lock(&dev->struct_mutex); 208 mutex_lock(&dev->struct_mutex);
211 if (obj->pin_display || obj->framebuffer_references) { 209 if (obj->pin_display || obj->framebuffer_references) {
212 err = -EBUSY; 210 err = -EBUSY;
@@ -261,14 +259,22 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
261 if (!err) { 259 if (!err) {
262 struct i915_vma *vma; 260 struct i915_vma *vma;
263 261
264 if (obj->pages && 262 mutex_lock(&obj->mm.lock);
265 obj->madv == I915_MADV_WILLNEED && 263 if (obj->mm.pages &&
264 obj->mm.madv == I915_MADV_WILLNEED &&
266 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) { 265 dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) {
267 if (args->tiling_mode == I915_TILING_NONE) 266 if (args->tiling_mode == I915_TILING_NONE) {
268 i915_gem_object_unpin_pages(obj); 267 GEM_BUG_ON(!obj->mm.quirked);
269 if (!i915_gem_object_is_tiled(obj)) 268 __i915_gem_object_unpin_pages(obj);
270 i915_gem_object_pin_pages(obj); 269 obj->mm.quirked = false;
270 }
271 if (!i915_gem_object_is_tiled(obj)) {
272 GEM_BUG_ON(!obj->mm.quirked);
273 __i915_gem_object_pin_pages(obj);
274 obj->mm.quirked = true;
275 }
271 } 276 }
277 mutex_unlock(&obj->mm.lock);
272 278
273 list_for_each_entry(vma, &obj->vma_list, obj_link) { 279 list_for_each_entry(vma, &obj->vma_list, obj_link) {
274 if (!vma->fence) 280 if (!vma->fence)
@@ -302,8 +308,6 @@ err:
302 i915_gem_object_put(obj); 308 i915_gem_object_put(obj);
303 mutex_unlock(&dev->struct_mutex); 309 mutex_unlock(&dev->struct_mutex);
304 310
305 intel_runtime_pm_put(dev_priv);
306
307 return err; 311 return err;
308} 312}
309 313
@@ -327,12 +331,19 @@ i915_gem_get_tiling(struct drm_device *dev, void *data,
327 struct drm_i915_gem_get_tiling *args = data; 331 struct drm_i915_gem_get_tiling *args = data;
328 struct drm_i915_private *dev_priv = to_i915(dev); 332 struct drm_i915_private *dev_priv = to_i915(dev);
329 struct drm_i915_gem_object *obj; 333 struct drm_i915_gem_object *obj;
334 int err = -ENOENT;
335
336 rcu_read_lock();
337 obj = i915_gem_object_lookup_rcu(file, args->handle);
338 if (obj) {
339 args->tiling_mode =
340 READ_ONCE(obj->tiling_and_stride) & TILING_MASK;
341 err = 0;
342 }
343 rcu_read_unlock();
344 if (unlikely(err))
345 return err;
330 346
331 obj = i915_gem_object_lookup(file, args->handle);
332 if (!obj)
333 return -ENOENT;
334
335 args->tiling_mode = READ_ONCE(obj->tiling_and_stride) & TILING_MASK;
336 switch (args->tiling_mode) { 347 switch (args->tiling_mode) {
337 case I915_TILING_X: 348 case I915_TILING_X:
338 args->swizzle_mode = dev_priv->mm.bit_6_swizzle_x; 349 args->swizzle_mode = dev_priv->mm.bit_6_swizzle_x;
@@ -340,11 +351,10 @@ i915_gem_get_tiling(struct drm_device *dev, void *data,
340 case I915_TILING_Y: 351 case I915_TILING_Y:
341 args->swizzle_mode = dev_priv->mm.bit_6_swizzle_y; 352 args->swizzle_mode = dev_priv->mm.bit_6_swizzle_y;
342 break; 353 break;
354 default:
343 case I915_TILING_NONE: 355 case I915_TILING_NONE:
344 args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE; 356 args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE;
345 break; 357 break;
346 default:
347 DRM_ERROR("unknown tiling mode\n");
348 } 358 }
349 359
350 /* Hide bit 17 from the user -- see comment in i915_gem_set_tiling */ 360 /* Hide bit 17 from the user -- see comment in i915_gem_set_tiling */
@@ -357,6 +367,5 @@ i915_gem_get_tiling(struct drm_device *dev, void *data,
357 if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_10_17) 367 if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_10_17)
358 args->swizzle_mode = I915_BIT_6_SWIZZLE_9_10; 368 args->swizzle_mode = I915_BIT_6_SWIZZLE_9_10;
359 369
360 i915_gem_object_put_unlocked(obj);
361 return 0; 370 return 0;
362} 371}
diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.h b/drivers/gpu/drm/i915/i915_gem_timeline.c
index 91315557e421..fc8f13a79f8f 100644
--- a/drivers/gpu/drm/i915/i915_gem_dmabuf.h
+++ b/drivers/gpu/drm/i915/i915_gem_timeline.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright 2016 Intel Corporation 2 * Copyright © 2016 Intel Corporation
3 * 3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a 4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"), 5 * copy of this software and associated documentation files (the "Software"),
@@ -17,29 +17,49 @@
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * DEALINGS IN THE SOFTWARE. 21 * IN THE SOFTWARE.
22 * 22 *
23 */ 23 */
24 24
25#ifndef _I915_GEM_DMABUF_H_ 25#include "i915_drv.h"
26#define _I915_GEM_DMABUF_H_
27 26
28#include <linux/dma-buf.h> 27int i915_gem_timeline_init(struct drm_i915_private *i915,
29 28 struct i915_gem_timeline *timeline,
30static inline struct reservation_object * 29 const char *name)
31i915_gem_object_get_dmabuf_resv(struct drm_i915_gem_object *obj)
32{ 30{
33 struct dma_buf *dma_buf; 31 unsigned int i;
32 u64 fences;
33
34 lockdep_assert_held(&i915->drm.struct_mutex);
35
36 timeline->i915 = i915;
37 timeline->name = kstrdup(name ?: "[kernel]", GFP_KERNEL);
38 if (!timeline->name)
39 return -ENOMEM;
40
41 list_add(&timeline->link, &i915->gt.timelines);
42
43 /* Called during early_init before we know how many engines there are */
44 fences = dma_fence_context_alloc(ARRAY_SIZE(timeline->engine));
45 for (i = 0; i < ARRAY_SIZE(timeline->engine); i++) {
46 struct intel_timeline *tl = &timeline->engine[i];
34 47
35 if (obj->base.dma_buf) 48 tl->fence_context = fences++;
36 dma_buf = obj->base.dma_buf; 49 tl->common = timeline;
37 else if (obj->base.import_attach)
38 dma_buf = obj->base.import_attach->dmabuf;
39 else
40 return NULL;
41 50
42 return dma_buf->resv; 51 spin_lock_init(&tl->lock);
52 init_request_active(&tl->last_request, NULL);
53 INIT_LIST_HEAD(&tl->requests);
54 }
55
56 return 0;
43} 57}
44 58
45#endif 59void i915_gem_timeline_fini(struct i915_gem_timeline *tl)
60{
61 lockdep_assert_held(&tl->i915->drm.struct_mutex);
62
63 list_del(&tl->link);
64 kfree(tl->name);
65}
diff --git a/drivers/gpu/drm/i915/i915_gem_timeline.h b/drivers/gpu/drm/i915/i915_gem_timeline.h
new file mode 100644
index 000000000000..f2bf7b1d49a1
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_gem_timeline.h
@@ -0,0 +1,72 @@
1/*
2 * Copyright © 2016 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 *
23 */
24
25#ifndef I915_GEM_TIMELINE_H
26#define I915_GEM_TIMELINE_H
27
28#include <linux/list.h>
29
30#include "i915_gem_request.h"
31
32struct i915_gem_timeline;
33
34struct intel_timeline {
35 u64 fence_context;
36 u32 last_submitted_seqno;
37
38 spinlock_t lock;
39
40 /**
41 * List of breadcrumbs associated with GPU requests currently
42 * outstanding.
43 */
44 struct list_head requests;
45
46 /* Contains an RCU guarded pointer to the last request. No reference is
47 * held to the request, users must carefully acquire a reference to
48 * the request using i915_gem_active_get_request_rcu(), or hold the
49 * struct_mutex.
50 */
51 struct i915_gem_active last_request;
52 u32 sync_seqno[I915_NUM_ENGINES];
53
54 struct i915_gem_timeline *common;
55};
56
57struct i915_gem_timeline {
58 struct list_head link;
59 atomic_t next_seqno;
60
61 struct drm_i915_private *i915;
62 const char *name;
63
64 struct intel_timeline engine[I915_NUM_ENGINES];
65};
66
67int i915_gem_timeline_init(struct drm_i915_private *i915,
68 struct i915_gem_timeline *tl,
69 const char *name);
70void i915_gem_timeline_fini(struct i915_gem_timeline *tl);
71
72#endif
diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c
index c6f780f5abc9..64261639f547 100644
--- a/drivers/gpu/drm/i915/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
@@ -61,33 +61,26 @@ struct i915_mmu_object {
61 bool attached; 61 bool attached;
62}; 62};
63 63
64static void wait_rendering(struct drm_i915_gem_object *obj)
65{
66 unsigned long active = __I915_BO_ACTIVE(obj);
67 int idx;
68
69 for_each_active(active, idx)
70 i915_gem_active_wait_unlocked(&obj->last_read[idx],
71 0, NULL, NULL);
72}
73
74static void cancel_userptr(struct work_struct *work) 64static void cancel_userptr(struct work_struct *work)
75{ 65{
76 struct i915_mmu_object *mo = container_of(work, typeof(*mo), work); 66 struct i915_mmu_object *mo = container_of(work, typeof(*mo), work);
77 struct drm_i915_gem_object *obj = mo->obj; 67 struct drm_i915_gem_object *obj = mo->obj;
78 struct drm_device *dev = obj->base.dev; 68 struct drm_device *dev = obj->base.dev;
79 69
80 wait_rendering(obj); 70 i915_gem_object_wait(obj, I915_WAIT_ALL, MAX_SCHEDULE_TIMEOUT, NULL);
81 71
82 mutex_lock(&dev->struct_mutex); 72 mutex_lock(&dev->struct_mutex);
83 /* Cancel any active worker and force us to re-evaluate gup */ 73 /* Cancel any active worker and force us to re-evaluate gup */
84 obj->userptr.work = NULL; 74 obj->userptr.work = NULL;
85 75
86 if (obj->pages != NULL) { 76 /* We are inside a kthread context and can't be interrupted */
87 /* We are inside a kthread context and can't be interrupted */ 77 if (i915_gem_object_unbind(obj) == 0)
88 WARN_ON(i915_gem_object_unbind(obj)); 78 __i915_gem_object_put_pages(obj, I915_MM_NORMAL);
89 WARN_ON(i915_gem_object_put_pages(obj)); 79 WARN_ONCE(obj->mm.pages,
90 } 80 "Failed to release pages: bind_count=%d, pages_pin_count=%d, pin_display=%d\n",
81 obj->bind_count,
82 atomic_read(&obj->mm.pages_pin_count),
83 obj->pin_display);
91 84
92 i915_gem_object_put(obj); 85 i915_gem_object_put(obj);
93 mutex_unlock(&dev->struct_mutex); 86 mutex_unlock(&dev->struct_mutex);
@@ -436,24 +429,25 @@ err:
436 return ret; 429 return ret;
437} 430}
438 431
439static int 432static struct sg_table *
440__i915_gem_userptr_set_pages(struct drm_i915_gem_object *obj, 433__i915_gem_userptr_set_pages(struct drm_i915_gem_object *obj,
441 struct page **pvec, int num_pages) 434 struct page **pvec, int num_pages)
442{ 435{
436 struct sg_table *pages;
443 int ret; 437 int ret;
444 438
445 ret = st_set_pages(&obj->pages, pvec, num_pages); 439 ret = st_set_pages(&pages, pvec, num_pages);
446 if (ret) 440 if (ret)
447 return ret; 441 return ERR_PTR(ret);
448 442
449 ret = i915_gem_gtt_prepare_object(obj); 443 ret = i915_gem_gtt_prepare_pages(obj, pages);
450 if (ret) { 444 if (ret) {
451 sg_free_table(obj->pages); 445 sg_free_table(pages);
452 kfree(obj->pages); 446 kfree(pages);
453 obj->pages = NULL; 447 return ERR_PTR(ret);
454 } 448 }
455 449
456 return ret; 450 return pages;
457} 451}
458 452
459static int 453static int
@@ -497,7 +491,6 @@ __i915_gem_userptr_get_pages_worker(struct work_struct *_work)
497{ 491{
498 struct get_pages_work *work = container_of(_work, typeof(*work), work); 492 struct get_pages_work *work = container_of(_work, typeof(*work), work);
499 struct drm_i915_gem_object *obj = work->obj; 493 struct drm_i915_gem_object *obj = work->obj;
500 struct drm_device *dev = obj->base.dev;
501 const int npages = obj->base.size >> PAGE_SHIFT; 494 const int npages = obj->base.size >> PAGE_SHIFT;
502 struct page **pvec; 495 struct page **pvec;
503 int pinned, ret; 496 int pinned, ret;
@@ -533,33 +526,32 @@ __i915_gem_userptr_get_pages_worker(struct work_struct *_work)
533 } 526 }
534 } 527 }
535 528
536 mutex_lock(&dev->struct_mutex); 529 mutex_lock(&obj->mm.lock);
537 if (obj->userptr.work == &work->work) { 530 if (obj->userptr.work == &work->work) {
531 struct sg_table *pages = ERR_PTR(ret);
532
538 if (pinned == npages) { 533 if (pinned == npages) {
539 ret = __i915_gem_userptr_set_pages(obj, pvec, npages); 534 pages = __i915_gem_userptr_set_pages(obj, pvec, npages);
540 if (ret == 0) { 535 if (!IS_ERR(pages)) {
541 list_add_tail(&obj->global_list, 536 __i915_gem_object_set_pages(obj, pages);
542 &to_i915(dev)->mm.unbound_list);
543 obj->get_page.sg = obj->pages->sgl;
544 obj->get_page.last = 0;
545 pinned = 0; 537 pinned = 0;
538 pages = NULL;
546 } 539 }
547 } 540 }
548 obj->userptr.work = ERR_PTR(ret);
549 }
550 541
551 obj->userptr.workers--; 542 obj->userptr.work = ERR_CAST(pages);
552 i915_gem_object_put(obj); 543 }
553 mutex_unlock(&dev->struct_mutex); 544 mutex_unlock(&obj->mm.lock);
554 545
555 release_pages(pvec, pinned, 0); 546 release_pages(pvec, pinned, 0);
556 drm_free_large(pvec); 547 drm_free_large(pvec);
557 548
549 i915_gem_object_put(obj);
558 put_task_struct(work->task); 550 put_task_struct(work->task);
559 kfree(work); 551 kfree(work);
560} 552}
561 553
562static int 554static struct sg_table *
563__i915_gem_userptr_get_pages_schedule(struct drm_i915_gem_object *obj, 555__i915_gem_userptr_get_pages_schedule(struct drm_i915_gem_object *obj,
564 bool *active) 556 bool *active)
565{ 557{
@@ -584,15 +576,11 @@ __i915_gem_userptr_get_pages_schedule(struct drm_i915_gem_object *obj,
584 * that error back to this function through 576 * that error back to this function through
585 * obj->userptr.work = ERR_PTR. 577 * obj->userptr.work = ERR_PTR.
586 */ 578 */
587 if (obj->userptr.workers >= I915_GEM_USERPTR_MAX_WORKERS)
588 return -EAGAIN;
589
590 work = kmalloc(sizeof(*work), GFP_KERNEL); 579 work = kmalloc(sizeof(*work), GFP_KERNEL);
591 if (work == NULL) 580 if (work == NULL)
592 return -ENOMEM; 581 return ERR_PTR(-ENOMEM);
593 582
594 obj->userptr.work = &work->work; 583 obj->userptr.work = &work->work;
595 obj->userptr.workers++;
596 584
597 work->obj = i915_gem_object_get(obj); 585 work->obj = i915_gem_object_get(obj);
598 586
@@ -603,14 +591,15 @@ __i915_gem_userptr_get_pages_schedule(struct drm_i915_gem_object *obj,
603 schedule_work(&work->work); 591 schedule_work(&work->work);
604 592
605 *active = true; 593 *active = true;
606 return -EAGAIN; 594 return ERR_PTR(-EAGAIN);
607} 595}
608 596
609static int 597static struct sg_table *
610i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj) 598i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
611{ 599{
612 const int num_pages = obj->base.size >> PAGE_SHIFT; 600 const int num_pages = obj->base.size >> PAGE_SHIFT;
613 struct page **pvec; 601 struct page **pvec;
602 struct sg_table *pages;
614 int pinned, ret; 603 int pinned, ret;
615 bool active; 604 bool active;
616 605
@@ -634,15 +623,15 @@ i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
634 if (obj->userptr.work) { 623 if (obj->userptr.work) {
635 /* active flag should still be held for the pending work */ 624 /* active flag should still be held for the pending work */
636 if (IS_ERR(obj->userptr.work)) 625 if (IS_ERR(obj->userptr.work))
637 return PTR_ERR(obj->userptr.work); 626 return ERR_CAST(obj->userptr.work);
638 else 627 else
639 return -EAGAIN; 628 return ERR_PTR(-EAGAIN);
640 } 629 }
641 630
642 /* Let the mmu-notifier know that we have begun and need cancellation */ 631 /* Let the mmu-notifier know that we have begun and need cancellation */
643 ret = __i915_gem_userptr_set_active(obj, true); 632 ret = __i915_gem_userptr_set_active(obj, true);
644 if (ret) 633 if (ret)
645 return ret; 634 return ERR_PTR(ret);
646 635
647 pvec = NULL; 636 pvec = NULL;
648 pinned = 0; 637 pinned = 0;
@@ -651,7 +640,7 @@ i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
651 GFP_TEMPORARY); 640 GFP_TEMPORARY);
652 if (pvec == NULL) { 641 if (pvec == NULL) {
653 __i915_gem_userptr_set_active(obj, false); 642 __i915_gem_userptr_set_active(obj, false);
654 return -ENOMEM; 643 return ERR_PTR(-ENOMEM);
655 } 644 }
656 645
657 pinned = __get_user_pages_fast(obj->userptr.ptr, num_pages, 646 pinned = __get_user_pages_fast(obj->userptr.ptr, num_pages,
@@ -660,21 +649,22 @@ i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
660 649
661 active = false; 650 active = false;
662 if (pinned < 0) 651 if (pinned < 0)
663 ret = pinned, pinned = 0; 652 pages = ERR_PTR(pinned), pinned = 0;
664 else if (pinned < num_pages) 653 else if (pinned < num_pages)
665 ret = __i915_gem_userptr_get_pages_schedule(obj, &active); 654 pages = __i915_gem_userptr_get_pages_schedule(obj, &active);
666 else 655 else
667 ret = __i915_gem_userptr_set_pages(obj, pvec, num_pages); 656 pages = __i915_gem_userptr_set_pages(obj, pvec, num_pages);
668 if (ret) { 657 if (IS_ERR(pages)) {
669 __i915_gem_userptr_set_active(obj, active); 658 __i915_gem_userptr_set_active(obj, active);
670 release_pages(pvec, pinned, 0); 659 release_pages(pvec, pinned, 0);
671 } 660 }
672 drm_free_large(pvec); 661 drm_free_large(pvec);
673 return ret; 662 return pages;
674} 663}
675 664
676static void 665static void
677i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj) 666i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj,
667 struct sg_table *pages)
678{ 668{
679 struct sgt_iter sgt_iter; 669 struct sgt_iter sgt_iter;
680 struct page *page; 670 struct page *page;
@@ -682,22 +672,22 @@ i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj)
682 BUG_ON(obj->userptr.work != NULL); 672 BUG_ON(obj->userptr.work != NULL);
683 __i915_gem_userptr_set_active(obj, false); 673 __i915_gem_userptr_set_active(obj, false);
684 674
685 if (obj->madv != I915_MADV_WILLNEED) 675 if (obj->mm.madv != I915_MADV_WILLNEED)
686 obj->dirty = 0; 676 obj->mm.dirty = false;
687 677
688 i915_gem_gtt_finish_object(obj); 678 i915_gem_gtt_finish_pages(obj, pages);
689 679
690 for_each_sgt_page(page, sgt_iter, obj->pages) { 680 for_each_sgt_page(page, sgt_iter, pages) {
691 if (obj->dirty) 681 if (obj->mm.dirty)
692 set_page_dirty(page); 682 set_page_dirty(page);
693 683
694 mark_page_accessed(page); 684 mark_page_accessed(page);
695 put_page(page); 685 put_page(page);
696 } 686 }
697 obj->dirty = 0; 687 obj->mm.dirty = false;
698 688
699 sg_free_table(obj->pages); 689 sg_free_table(pages);
700 kfree(obj->pages); 690 kfree(pages);
701} 691}
702 692
703static void 693static void
@@ -717,7 +707,8 @@ i915_gem_userptr_dmabuf_export(struct drm_i915_gem_object *obj)
717} 707}
718 708
719static const struct drm_i915_gem_object_ops i915_gem_userptr_ops = { 709static const struct drm_i915_gem_object_ops i915_gem_userptr_ops = {
720 .flags = I915_GEM_OBJECT_HAS_STRUCT_PAGE, 710 .flags = I915_GEM_OBJECT_HAS_STRUCT_PAGE |
711 I915_GEM_OBJECT_IS_SHRINKABLE,
721 .get_pages = i915_gem_userptr_get_pages, 712 .get_pages = i915_gem_userptr_get_pages,
722 .put_pages = i915_gem_userptr_put_pages, 713 .put_pages = i915_gem_userptr_put_pages,
723 .dmabuf_export = i915_gem_userptr_dmabuf_export, 714 .dmabuf_export = i915_gem_userptr_dmabuf_export,
@@ -816,7 +807,7 @@ i915_gem_userptr_ioctl(struct drm_device *dev, void *data, struct drm_file *file
816 ret = drm_gem_handle_create(file, &obj->base, &handle); 807 ret = drm_gem_handle_create(file, &obj->base, &handle);
817 808
818 /* drop reference from allocate - handle holds it now */ 809 /* drop reference from allocate - handle holds it now */
819 i915_gem_object_put_unlocked(obj); 810 i915_gem_object_put(obj);
820 if (ret) 811 if (ret)
821 return ret; 812 return ret;
822 813
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index 242b9a927899..204093f3eaa5 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -415,17 +415,13 @@ static void error_print_engine(struct drm_i915_error_state_buf *m,
415 if (INTEL_GEN(m->i915) >= 6) { 415 if (INTEL_GEN(m->i915) >= 6) {
416 err_printf(m, " RC PSMI: 0x%08x\n", ee->rc_psmi); 416 err_printf(m, " RC PSMI: 0x%08x\n", ee->rc_psmi);
417 err_printf(m, " FAULT_REG: 0x%08x\n", ee->fault_reg); 417 err_printf(m, " FAULT_REG: 0x%08x\n", ee->fault_reg);
418 err_printf(m, " SYNC_0: 0x%08x [last synced 0x%08x]\n", 418 err_printf(m, " SYNC_0: 0x%08x\n",
419 ee->semaphore_mboxes[0], 419 ee->semaphore_mboxes[0]);
420 ee->semaphore_seqno[0]); 420 err_printf(m, " SYNC_1: 0x%08x\n",
421 err_printf(m, " SYNC_1: 0x%08x [last synced 0x%08x]\n", 421 ee->semaphore_mboxes[1]);
422 ee->semaphore_mboxes[1], 422 if (HAS_VEBOX(m->i915))
423 ee->semaphore_seqno[1]); 423 err_printf(m, " SYNC_2: 0x%08x\n",
424 if (HAS_VEBOX(m->i915)) { 424 ee->semaphore_mboxes[2]);
425 err_printf(m, " SYNC_2: 0x%08x [last synced 0x%08x]\n",
426 ee->semaphore_mboxes[2],
427 ee->semaphore_seqno[2]);
428 }
429 } 425 }
430 if (USES_PPGTT(m->i915)) { 426 if (USES_PPGTT(m->i915)) {
431 err_printf(m, " GFX_MODE: 0x%08x\n", ee->vm_info.gfx_mode); 427 err_printf(m, " GFX_MODE: 0x%08x\n", ee->vm_info.gfx_mode);
@@ -546,9 +542,13 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
546 } 542 }
547 543
548 err_printf(m, "%s\n", error->error_msg); 544 err_printf(m, "%s\n", error->error_msg);
549 err_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec,
550 error->time.tv_usec);
551 err_printf(m, "Kernel: " UTS_RELEASE "\n"); 545 err_printf(m, "Kernel: " UTS_RELEASE "\n");
546 err_printf(m, "Time: %ld s %ld us\n",
547 error->time.tv_sec, error->time.tv_usec);
548 err_printf(m, "Boottime: %ld s %ld us\n",
549 error->boottime.tv_sec, error->boottime.tv_usec);
550 err_printf(m, "Uptime: %ld s %ld us\n",
551 error->uptime.tv_sec, error->uptime.tv_usec);
552 err_print_capabilities(m, &error->device_info); 552 err_print_capabilities(m, &error->device_info);
553 max_hangcheck_score = 0; 553 max_hangcheck_score = 0;
554 for (i = 0; i < ARRAY_SIZE(error->engine); i++) { 554 for (i = 0; i < ARRAY_SIZE(error->engine); i++) {
@@ -702,6 +702,8 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
702 702
703 print_error_obj(m, NULL, "Semaphores", error->semaphore); 703 print_error_obj(m, NULL, "Semaphores", error->semaphore);
704 704
705 print_error_obj(m, NULL, "GuC log buffer", error->guc_log);
706
705 if (error->overlay) 707 if (error->overlay)
706 intel_overlay_print_error_state(m, error->overlay); 708 intel_overlay_print_error_state(m, error->overlay);
707 709
@@ -782,6 +784,7 @@ static void i915_error_state_free(struct kref *error_ref)
782 } 784 }
783 785
784 i915_error_object_free(error->semaphore); 786 i915_error_object_free(error->semaphore);
787 i915_error_object_free(error->guc_log);
785 788
786 for (i = 0; i < ARRAY_SIZE(error->active_bo); i++) 789 for (i = 0; i < ARRAY_SIZE(error->active_bo); i++)
787 kfree(error->active_bo[i]); 790 kfree(error->active_bo[i]);
@@ -880,17 +883,17 @@ static void capture_bo(struct drm_i915_error_buffer *err,
880 err->name = obj->base.name; 883 err->name = obj->base.name;
881 884
882 for (i = 0; i < I915_NUM_ENGINES; i++) 885 for (i = 0; i < I915_NUM_ENGINES; i++)
883 err->rseqno[i] = __active_get_seqno(&obj->last_read[i]); 886 err->rseqno[i] = __active_get_seqno(&vma->last_read[i]);
884 err->wseqno = __active_get_seqno(&obj->last_write); 887 err->wseqno = __active_get_seqno(&vma->last_write);
885 err->engine = __active_get_engine_id(&obj->last_write); 888 err->engine = __active_get_engine_id(&vma->last_write);
886 889
887 err->gtt_offset = vma->node.start; 890 err->gtt_offset = vma->node.start;
888 err->read_domains = obj->base.read_domains; 891 err->read_domains = obj->base.read_domains;
889 err->write_domain = obj->base.write_domain; 892 err->write_domain = obj->base.write_domain;
890 err->fence_reg = vma->fence ? vma->fence->id : -1; 893 err->fence_reg = vma->fence ? vma->fence->id : -1;
891 err->tiling = i915_gem_object_get_tiling(obj); 894 err->tiling = i915_gem_object_get_tiling(obj);
892 err->dirty = obj->dirty; 895 err->dirty = obj->mm.dirty;
893 err->purgeable = obj->madv != I915_MADV_WILLNEED; 896 err->purgeable = obj->mm.madv != I915_MADV_WILLNEED;
894 err->userptr = obj->userptr.mm != NULL; 897 err->userptr = obj->userptr.mm != NULL;
895 err->cache_level = obj->cache_level; 898 err->cache_level = obj->cache_level;
896} 899}
@@ -965,6 +968,26 @@ static void i915_gem_record_fences(struct drm_i915_private *dev_priv,
965 } 968 }
966} 969}
967 970
971static inline u32
972gen8_engine_sync_index(struct intel_engine_cs *engine,
973 struct intel_engine_cs *other)
974{
975 int idx;
976
977 /*
978 * rcs -> 0 = vcs, 1 = bcs, 2 = vecs, 3 = vcs2;
979 * vcs -> 0 = bcs, 1 = vecs, 2 = vcs2, 3 = rcs;
980 * bcs -> 0 = vecs, 1 = vcs2. 2 = rcs, 3 = vcs;
981 * vecs -> 0 = vcs2, 1 = rcs, 2 = vcs, 3 = bcs;
982 * vcs2 -> 0 = rcs, 1 = vcs, 2 = bcs, 3 = vecs;
983 */
984
985 idx = (other - engine) - 1;
986 if (idx < 0)
987 idx += I915_NUM_ENGINES;
988
989 return idx;
990}
968 991
969static void gen8_record_semaphore_state(struct drm_i915_error_state *error, 992static void gen8_record_semaphore_state(struct drm_i915_error_state *error,
970 struct intel_engine_cs *engine, 993 struct intel_engine_cs *engine,
@@ -988,10 +1011,9 @@ static void gen8_record_semaphore_state(struct drm_i915_error_state *error,
988 signal_offset = 1011 signal_offset =
989 (GEN8_SIGNAL_OFFSET(engine, id) & (PAGE_SIZE - 1)) / 4; 1012 (GEN8_SIGNAL_OFFSET(engine, id) & (PAGE_SIZE - 1)) / 4;
990 tmp = error->semaphore->pages[0]; 1013 tmp = error->semaphore->pages[0];
991 idx = intel_engine_sync_index(engine, to); 1014 idx = gen8_engine_sync_index(engine, to);
992 1015
993 ee->semaphore_mboxes[idx] = tmp[signal_offset]; 1016 ee->semaphore_mboxes[idx] = tmp[signal_offset];
994 ee->semaphore_seqno[idx] = engine->semaphore.sync_seqno[idx];
995 } 1017 }
996} 1018}
997 1019
@@ -1002,14 +1024,9 @@ static void gen6_record_semaphore_state(struct intel_engine_cs *engine,
1002 1024
1003 ee->semaphore_mboxes[0] = I915_READ(RING_SYNC_0(engine->mmio_base)); 1025 ee->semaphore_mboxes[0] = I915_READ(RING_SYNC_0(engine->mmio_base));
1004 ee->semaphore_mboxes[1] = I915_READ(RING_SYNC_1(engine->mmio_base)); 1026 ee->semaphore_mboxes[1] = I915_READ(RING_SYNC_1(engine->mmio_base));
1005 ee->semaphore_seqno[0] = engine->semaphore.sync_seqno[0]; 1027 if (HAS_VEBOX(dev_priv))
1006 ee->semaphore_seqno[1] = engine->semaphore.sync_seqno[1];
1007
1008 if (HAS_VEBOX(dev_priv)) {
1009 ee->semaphore_mboxes[2] = 1028 ee->semaphore_mboxes[2] =
1010 I915_READ(RING_SYNC_2(engine->mmio_base)); 1029 I915_READ(RING_SYNC_2(engine->mmio_base));
1011 ee->semaphore_seqno[2] = engine->semaphore.sync_seqno[2];
1012 }
1013} 1030}
1014 1031
1015static void error_record_engine_waiters(struct intel_engine_cs *engine, 1032static void error_record_engine_waiters(struct intel_engine_cs *engine,
@@ -1026,7 +1043,7 @@ static void error_record_engine_waiters(struct intel_engine_cs *engine,
1026 if (RB_EMPTY_ROOT(&b->waiters)) 1043 if (RB_EMPTY_ROOT(&b->waiters))
1027 return; 1044 return;
1028 1045
1029 if (!spin_trylock(&b->lock)) { 1046 if (!spin_trylock_irq(&b->lock)) {
1030 ee->waiters = ERR_PTR(-EDEADLK); 1047 ee->waiters = ERR_PTR(-EDEADLK);
1031 return; 1048 return;
1032 } 1049 }
@@ -1034,7 +1051,7 @@ static void error_record_engine_waiters(struct intel_engine_cs *engine,
1034 count = 0; 1051 count = 0;
1035 for (rb = rb_first(&b->waiters); rb != NULL; rb = rb_next(rb)) 1052 for (rb = rb_first(&b->waiters); rb != NULL; rb = rb_next(rb))
1036 count++; 1053 count++;
1037 spin_unlock(&b->lock); 1054 spin_unlock_irq(&b->lock);
1038 1055
1039 waiter = NULL; 1056 waiter = NULL;
1040 if (count) 1057 if (count)
@@ -1044,7 +1061,7 @@ static void error_record_engine_waiters(struct intel_engine_cs *engine,
1044 if (!waiter) 1061 if (!waiter)
1045 return; 1062 return;
1046 1063
1047 if (!spin_trylock(&b->lock)) { 1064 if (!spin_trylock_irq(&b->lock)) {
1048 kfree(waiter); 1065 kfree(waiter);
1049 ee->waiters = ERR_PTR(-EDEADLK); 1066 ee->waiters = ERR_PTR(-EDEADLK);
1050 return; 1067 return;
@@ -1062,7 +1079,7 @@ static void error_record_engine_waiters(struct intel_engine_cs *engine,
1062 if (++ee->num_waiters == count) 1079 if (++ee->num_waiters == count)
1063 break; 1080 break;
1064 } 1081 }
1065 spin_unlock(&b->lock); 1082 spin_unlock_irq(&b->lock);
1066} 1083}
1067 1084
1068static void error_record_engine_registers(struct drm_i915_error_state *error, 1085static void error_record_engine_registers(struct drm_i915_error_state *error,
@@ -1103,7 +1120,7 @@ static void error_record_engine_registers(struct drm_i915_error_state *error,
1103 ee->instpm = I915_READ(RING_INSTPM(engine->mmio_base)); 1120 ee->instpm = I915_READ(RING_INSTPM(engine->mmio_base));
1104 ee->acthd = intel_engine_get_active_head(engine); 1121 ee->acthd = intel_engine_get_active_head(engine);
1105 ee->seqno = intel_engine_get_seqno(engine); 1122 ee->seqno = intel_engine_get_seqno(engine);
1106 ee->last_seqno = engine->last_submitted_seqno; 1123 ee->last_seqno = intel_engine_last_submit(engine);
1107 ee->start = I915_READ_START(engine); 1124 ee->start = I915_READ_START(engine);
1108 ee->head = I915_READ_HEAD(engine); 1125 ee->head = I915_READ_HEAD(engine);
1109 ee->tail = I915_READ_TAIL(engine); 1126 ee->tail = I915_READ_TAIL(engine);
@@ -1169,7 +1186,7 @@ static void record_request(struct drm_i915_gem_request *request,
1169 struct drm_i915_error_request *erq) 1186 struct drm_i915_error_request *erq)
1170{ 1187{
1171 erq->context = request->ctx->hw_id; 1188 erq->context = request->ctx->hw_id;
1172 erq->seqno = request->fence.seqno; 1189 erq->seqno = request->global_seqno;
1173 erq->jiffies = request->emitted_jiffies; 1190 erq->jiffies = request->emitted_jiffies;
1174 erq->head = request->head; 1191 erq->head = request->head;
1175 erq->tail = request->tail; 1192 erq->tail = request->tail;
@@ -1188,7 +1205,7 @@ static void engine_record_requests(struct intel_engine_cs *engine,
1188 1205
1189 count = 0; 1206 count = 0;
1190 request = first; 1207 request = first;
1191 list_for_each_entry_from(request, &engine->request_list, link) 1208 list_for_each_entry_from(request, &engine->timeline->requests, link)
1192 count++; 1209 count++;
1193 if (!count) 1210 if (!count)
1194 return; 1211 return;
@@ -1201,7 +1218,7 @@ static void engine_record_requests(struct intel_engine_cs *engine,
1201 1218
1202 count = 0; 1219 count = 0;
1203 request = first; 1220 request = first;
1204 list_for_each_entry_from(request, &engine->request_list, link) { 1221 list_for_each_entry_from(request, &engine->timeline->requests, link) {
1205 if (count >= ee->num_requests) { 1222 if (count >= ee->num_requests) {
1206 /* 1223 /*
1207 * If the ring request list was changed in 1224 * If the ring request list was changed in
@@ -1408,6 +1425,17 @@ static void i915_capture_pinned_buffers(struct drm_i915_private *dev_priv,
1408 error->pinned_bo = bo; 1425 error->pinned_bo = bo;
1409} 1426}
1410 1427
1428static void i915_gem_capture_guc_log_buffer(struct drm_i915_private *dev_priv,
1429 struct drm_i915_error_state *error)
1430{
1431 /* Capturing log buf contents won't be useful if logging was disabled */
1432 if (!dev_priv->guc.log.vma || (i915.guc_log_level < 0))
1433 return;
1434
1435 error->guc_log = i915_error_object_create(dev_priv,
1436 dev_priv->guc.log.vma);
1437}
1438
1411/* Capture all registers which don't fit into another category. */ 1439/* Capture all registers which don't fit into another category. */
1412static void i915_capture_reg_state(struct drm_i915_private *dev_priv, 1440static void i915_capture_reg_state(struct drm_i915_private *dev_priv,
1413 struct drm_i915_error_state *error) 1441 struct drm_i915_error_state *error)
@@ -1532,8 +1560,13 @@ static int capture(void *data)
1532 i915_gem_record_rings(error->i915, error); 1560 i915_gem_record_rings(error->i915, error);
1533 i915_capture_active_buffers(error->i915, error); 1561 i915_capture_active_buffers(error->i915, error);
1534 i915_capture_pinned_buffers(error->i915, error); 1562 i915_capture_pinned_buffers(error->i915, error);
1563 i915_gem_capture_guc_log_buffer(error->i915, error);
1535 1564
1536 do_gettimeofday(&error->time); 1565 do_gettimeofday(&error->time);
1566 error->boottime = ktime_to_timeval(ktime_get_boottime());
1567 error->uptime =
1568 ktime_to_timeval(ktime_sub(ktime_get(),
1569 error->i915->gt.last_init_time));
1537 1570
1538 error->overlay = intel_overlay_capture_error_state(error->i915); 1571 error->overlay = intel_overlay_capture_error_state(error->i915);
1539 error->display = intel_display_capture_error_state(error->i915); 1572 error->display = intel_display_capture_error_state(error->i915);
diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c
index a1f76c8f8cde..666dab7a675a 100644
--- a/drivers/gpu/drm/i915/i915_guc_submission.c
+++ b/drivers/gpu/drm/i915/i915_guc_submission.c
@@ -23,6 +23,8 @@
23 */ 23 */
24#include <linux/firmware.h> 24#include <linux/firmware.h>
25#include <linux/circ_buf.h> 25#include <linux/circ_buf.h>
26#include <linux/debugfs.h>
27#include <linux/relay.h>
26#include "i915_drv.h" 28#include "i915_drv.h"
27#include "intel_guc.h" 29#include "intel_guc.h"
28 30
@@ -85,6 +87,7 @@ static int host2guc_action(struct intel_guc *guc, u32 *data, u32 len)
85 if (WARN_ON(len < 1 || len > 15)) 87 if (WARN_ON(len < 1 || len > 15))
86 return -EINVAL; 88 return -EINVAL;
87 89
90 mutex_lock(&guc->action_lock);
88 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); 91 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
89 92
90 dev_priv->guc.action_count += 1; 93 dev_priv->guc.action_count += 1;
@@ -123,6 +126,7 @@ static int host2guc_action(struct intel_guc *guc, u32 *data, u32 len)
123 dev_priv->guc.action_status = status; 126 dev_priv->guc.action_status = status;
124 127
125 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); 128 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
129 mutex_unlock(&guc->action_lock);
126 130
127 return ret; 131 return ret;
128} 132}
@@ -170,6 +174,35 @@ static int host2guc_sample_forcewake(struct intel_guc *guc,
170 return host2guc_action(guc, data, ARRAY_SIZE(data)); 174 return host2guc_action(guc, data, ARRAY_SIZE(data));
171} 175}
172 176
177static int host2guc_logbuffer_flush_complete(struct intel_guc *guc)
178{
179 u32 data[1];
180
181 data[0] = HOST2GUC_ACTION_LOG_BUFFER_FILE_FLUSH_COMPLETE;
182
183 return host2guc_action(guc, data, 1);
184}
185
186static int host2guc_force_logbuffer_flush(struct intel_guc *guc)
187{
188 u32 data[2];
189
190 data[0] = HOST2GUC_ACTION_FORCE_LOG_BUFFER_FLUSH;
191 data[1] = 0;
192
193 return host2guc_action(guc, data, 2);
194}
195
196static int host2guc_logging_control(struct intel_guc *guc, u32 control_val)
197{
198 u32 data[2];
199
200 data[0] = HOST2GUC_ACTION_UK_LOG_ENABLE_LOGGING;
201 data[1] = control_val;
202
203 return host2guc_action(guc, data, 2);
204}
205
173/* 206/*
174 * Initialise, update, or clear doorbell data shared with the GuC 207 * Initialise, update, or clear doorbell data shared with the GuC
175 * 208 *
@@ -187,7 +220,7 @@ static int guc_update_doorbell_id(struct intel_guc *guc,
187 struct guc_context_desc desc; 220 struct guc_context_desc desc;
188 size_t len; 221 size_t len;
189 222
190 doorbell = client->client_base + client->doorbell_offset; 223 doorbell = client->vaddr + client->doorbell_offset;
191 224
192 if (client->doorbell_id != GUC_INVALID_DOORBELL_ID && 225 if (client->doorbell_id != GUC_INVALID_DOORBELL_ID &&
193 test_bit(client->doorbell_id, doorbell_bitmap)) { 226 test_bit(client->doorbell_id, doorbell_bitmap)) {
@@ -293,7 +326,7 @@ static void guc_proc_desc_init(struct intel_guc *guc,
293{ 326{
294 struct guc_process_desc *desc; 327 struct guc_process_desc *desc;
295 328
296 desc = client->client_base + client->proc_desc_offset; 329 desc = client->vaddr + client->proc_desc_offset;
297 330
298 memset(desc, 0, sizeof(*desc)); 331 memset(desc, 0, sizeof(*desc));
299 332
@@ -380,8 +413,8 @@ static void guc_ctx_desc_init(struct intel_guc *guc,
380 gfx_addr = i915_ggtt_offset(client->vma); 413 gfx_addr = i915_ggtt_offset(client->vma);
381 desc.db_trigger_phy = sg_dma_address(client->vma->pages->sgl) + 414 desc.db_trigger_phy = sg_dma_address(client->vma->pages->sgl) +
382 client->doorbell_offset; 415 client->doorbell_offset;
383 desc.db_trigger_cpu = (uintptr_t)client->client_base + 416 desc.db_trigger_cpu =
384 client->doorbell_offset; 417 (uintptr_t)client->vaddr + client->doorbell_offset;
385 desc.db_trigger_uk = gfx_addr + client->doorbell_offset; 418 desc.db_trigger_uk = gfx_addr + client->doorbell_offset;
386 desc.process_desc = gfx_addr + client->proc_desc_offset; 419 desc.process_desc = gfx_addr + client->proc_desc_offset;
387 desc.wq_addr = gfx_addr + client->wq_offset; 420 desc.wq_addr = gfx_addr + client->wq_offset;
@@ -432,7 +465,7 @@ int i915_guc_wq_reserve(struct drm_i915_gem_request *request)
432{ 465{
433 const size_t wqi_size = sizeof(struct guc_wq_item); 466 const size_t wqi_size = sizeof(struct guc_wq_item);
434 struct i915_guc_client *gc = request->i915->guc.execbuf_client; 467 struct i915_guc_client *gc = request->i915->guc.execbuf_client;
435 struct guc_process_desc *desc = gc->client_base + gc->proc_desc_offset; 468 struct guc_process_desc *desc = gc->vaddr + gc->proc_desc_offset;
436 u32 freespace; 469 u32 freespace;
437 int ret; 470 int ret;
438 471
@@ -473,10 +506,9 @@ static void guc_wq_item_append(struct i915_guc_client *gc,
473 struct intel_engine_cs *engine = rq->engine; 506 struct intel_engine_cs *engine = rq->engine;
474 struct guc_process_desc *desc; 507 struct guc_process_desc *desc;
475 struct guc_wq_item *wqi; 508 struct guc_wq_item *wqi;
476 void *base; 509 u32 freespace, tail, wq_off;
477 u32 freespace, tail, wq_off, wq_page;
478 510
479 desc = gc->client_base + gc->proc_desc_offset; 511 desc = gc->vaddr + gc->proc_desc_offset;
480 512
481 /* Free space is guaranteed, see i915_guc_wq_reserve() above */ 513 /* Free space is guaranteed, see i915_guc_wq_reserve() above */
482 freespace = CIRC_SPACE(gc->wq_tail, desc->head, gc->wq_size); 514 freespace = CIRC_SPACE(gc->wq_tail, desc->head, gc->wq_size);
@@ -506,10 +538,7 @@ static void guc_wq_item_append(struct i915_guc_client *gc,
506 gc->wq_rsvd -= wqi_size; 538 gc->wq_rsvd -= wqi_size;
507 539
508 /* WQ starts from the page after doorbell / process_desc */ 540 /* WQ starts from the page after doorbell / process_desc */
509 wq_page = (wq_off + GUC_DB_SIZE) >> PAGE_SHIFT; 541 wqi = gc->vaddr + wq_off + GUC_DB_SIZE;
510 wq_off &= PAGE_SIZE - 1;
511 base = kmap_atomic(i915_gem_object_get_page(gc->vma->obj, wq_page));
512 wqi = (struct guc_wq_item *)((char *)base + wq_off);
513 542
514 /* Now fill in the 4-word work queue item */ 543 /* Now fill in the 4-word work queue item */
515 wqi->header = WQ_TYPE_INORDER | 544 wqi->header = WQ_TYPE_INORDER |
@@ -521,9 +550,7 @@ static void guc_wq_item_append(struct i915_guc_client *gc,
521 wqi->context_desc = (u32)intel_lr_context_descriptor(rq->ctx, engine); 550 wqi->context_desc = (u32)intel_lr_context_descriptor(rq->ctx, engine);
522 551
523 wqi->ring_tail = tail << WQ_RING_TAIL_SHIFT; 552 wqi->ring_tail = tail << WQ_RING_TAIL_SHIFT;
524 wqi->fence_id = rq->fence.seqno; 553 wqi->fence_id = rq->global_seqno;
525
526 kunmap_atomic(base);
527} 554}
528 555
529static int guc_ring_doorbell(struct i915_guc_client *gc) 556static int guc_ring_doorbell(struct i915_guc_client *gc)
@@ -533,7 +560,7 @@ static int guc_ring_doorbell(struct i915_guc_client *gc)
533 union guc_doorbell_qw *db; 560 union guc_doorbell_qw *db;
534 int attempt = 2, ret = -EAGAIN; 561 int attempt = 2, ret = -EAGAIN;
535 562
536 desc = gc->client_base + gc->proc_desc_offset; 563 desc = gc->vaddr + gc->proc_desc_offset;
537 564
538 /* Update the tail so it is visible to GuC */ 565 /* Update the tail so it is visible to GuC */
539 desc->tail = gc->wq_tail; 566 desc->tail = gc->wq_tail;
@@ -549,7 +576,7 @@ static int guc_ring_doorbell(struct i915_guc_client *gc)
549 db_exc.cookie = 1; 576 db_exc.cookie = 1;
550 577
551 /* pointer of current doorbell cacheline */ 578 /* pointer of current doorbell cacheline */
552 db = gc->client_base + gc->doorbell_offset; 579 db = gc->vaddr + gc->doorbell_offset;
553 580
554 while (attempt--) { 581 while (attempt--) {
555 /* lets ring the doorbell */ 582 /* lets ring the doorbell */
@@ -601,6 +628,7 @@ static int guc_ring_doorbell(struct i915_guc_client *gc)
601 */ 628 */
602static void i915_guc_submit(struct drm_i915_gem_request *rq) 629static void i915_guc_submit(struct drm_i915_gem_request *rq)
603{ 630{
631 struct drm_i915_private *dev_priv = rq->i915;
604 unsigned int engine_id = rq->engine->id; 632 unsigned int engine_id = rq->engine->id;
605 struct intel_guc *guc = &rq->i915->guc; 633 struct intel_guc *guc = &rq->i915->guc;
606 struct i915_guc_client *client = guc->execbuf_client; 634 struct i915_guc_client *client = guc->execbuf_client;
@@ -608,6 +636,11 @@ static void i915_guc_submit(struct drm_i915_gem_request *rq)
608 636
609 spin_lock(&client->wq_lock); 637 spin_lock(&client->wq_lock);
610 guc_wq_item_append(client, rq); 638 guc_wq_item_append(client, rq);
639
640 /* WA to flush out the pending GMADR writes to ring buffer. */
641 if (i915_vma_is_map_and_fenceable(rq->ring->vma))
642 POSTING_READ_FW(GUC_STATUS);
643
611 b_ret = guc_ring_doorbell(client); 644 b_ret = guc_ring_doorbell(client);
612 645
613 client->submissions[engine_id] += 1; 646 client->submissions[engine_id] += 1;
@@ -616,7 +649,7 @@ static void i915_guc_submit(struct drm_i915_gem_request *rq)
616 client->b_fail += 1; 649 client->b_fail += 1;
617 650
618 guc->submissions[engine_id] += 1; 651 guc->submissions[engine_id] += 1;
619 guc->last_seqno[engine_id] = rq->fence.seqno; 652 guc->last_seqno[engine_id] = rq->global_seqno;
620 spin_unlock(&client->wq_lock); 653 spin_unlock(&client->wq_lock);
621} 654}
622 655
@@ -685,14 +718,14 @@ guc_client_free(struct drm_i915_private *dev_priv,
685 * Be sure to drop any locks 718 * Be sure to drop any locks
686 */ 719 */
687 720
688 if (client->client_base) { 721 if (client->vaddr) {
689 /* 722 /*
690 * If we got as far as setting up a doorbell, make sure we 723 * If we got as far as setting up a doorbell, make sure we
691 * shut it down before unmapping & deallocating the memory. 724 * shut it down before unmapping & deallocating the memory.
692 */ 725 */
693 guc_disable_doorbell(guc, client); 726 guc_disable_doorbell(guc, client);
694 727
695 kunmap(kmap_to_page(client->client_base)); 728 i915_gem_object_unpin_map(client->vma->obj);
696 } 729 }
697 730
698 i915_vma_unpin_and_release(&client->vma); 731 i915_vma_unpin_and_release(&client->vma);
@@ -781,6 +814,7 @@ guc_client_alloc(struct drm_i915_private *dev_priv,
781 struct i915_guc_client *client; 814 struct i915_guc_client *client;
782 struct intel_guc *guc = &dev_priv->guc; 815 struct intel_guc *guc = &dev_priv->guc;
783 struct i915_vma *vma; 816 struct i915_vma *vma;
817 void *vaddr;
784 uint16_t db_id; 818 uint16_t db_id;
785 819
786 client = kzalloc(sizeof(*client), GFP_KERNEL); 820 client = kzalloc(sizeof(*client), GFP_KERNEL);
@@ -807,7 +841,12 @@ guc_client_alloc(struct drm_i915_private *dev_priv,
807 841
808 /* We'll keep just the first (doorbell/proc) page permanently kmap'd. */ 842 /* We'll keep just the first (doorbell/proc) page permanently kmap'd. */
809 client->vma = vma; 843 client->vma = vma;
810 client->client_base = kmap(i915_vma_first_page(vma)); 844
845 vaddr = i915_gem_object_pin_map(vma->obj, I915_MAP_WB);
846 if (IS_ERR(vaddr))
847 goto err;
848
849 client->vaddr = vaddr;
811 850
812 spin_lock_init(&client->wq_lock); 851 spin_lock_init(&client->wq_lock);
813 client->wq_offset = GUC_DB_SIZE; 852 client->wq_offset = GUC_DB_SIZE;
@@ -847,15 +886,411 @@ err:
847 return NULL; 886 return NULL;
848} 887}
849 888
889/*
890 * Sub buffer switch callback. Called whenever relay has to switch to a new
891 * sub buffer, relay stays on the same sub buffer if 0 is returned.
892 */
893static int subbuf_start_callback(struct rchan_buf *buf,
894 void *subbuf,
895 void *prev_subbuf,
896 size_t prev_padding)
897{
898 /* Use no-overwrite mode by default, where relay will stop accepting
899 * new data if there are no empty sub buffers left.
900 * There is no strict synchronization enforced by relay between Consumer
901 * and Producer. In overwrite mode, there is a possibility of getting
902 * inconsistent/garbled data, the producer could be writing on to the
903 * same sub buffer from which Consumer is reading. This can't be avoided
904 * unless Consumer is fast enough and can always run in tandem with
905 * Producer.
906 */
907 if (relay_buf_full(buf))
908 return 0;
909
910 return 1;
911}
912
913/*
914 * file_create() callback. Creates relay file in debugfs.
915 */
916static struct dentry *create_buf_file_callback(const char *filename,
917 struct dentry *parent,
918 umode_t mode,
919 struct rchan_buf *buf,
920 int *is_global)
921{
922 struct dentry *buf_file;
923
924 /* This to enable the use of a single buffer for the relay channel and
925 * correspondingly have a single file exposed to User, through which
926 * it can collect the logs in order without any post-processing.
927 * Need to set 'is_global' even if parent is NULL for early logging.
928 */
929 *is_global = 1;
930
931 if (!parent)
932 return NULL;
933
934 /* Not using the channel filename passed as an argument, since for each
935 * channel relay appends the corresponding CPU number to the filename
936 * passed in relay_open(). This should be fine as relay just needs a
937 * dentry of the file associated with the channel buffer and that file's
938 * name need not be same as the filename passed as an argument.
939 */
940 buf_file = debugfs_create_file("guc_log", mode,
941 parent, buf, &relay_file_operations);
942 return buf_file;
943}
944
945/*
946 * file_remove() default callback. Removes relay file in debugfs.
947 */
948static int remove_buf_file_callback(struct dentry *dentry)
949{
950 debugfs_remove(dentry);
951 return 0;
952}
953
954/* relay channel callbacks */
955static struct rchan_callbacks relay_callbacks = {
956 .subbuf_start = subbuf_start_callback,
957 .create_buf_file = create_buf_file_callback,
958 .remove_buf_file = remove_buf_file_callback,
959};
960
961static void guc_log_remove_relay_file(struct intel_guc *guc)
962{
963 relay_close(guc->log.relay_chan);
964}
965
966static int guc_log_create_relay_channel(struct intel_guc *guc)
967{
968 struct drm_i915_private *dev_priv = guc_to_i915(guc);
969 struct rchan *guc_log_relay_chan;
970 size_t n_subbufs, subbuf_size;
971
972 /* Keep the size of sub buffers same as shared log buffer */
973 subbuf_size = guc->log.vma->obj->base.size;
974
975 /* Store up to 8 snapshots, which is large enough to buffer sufficient
976 * boot time logs and provides enough leeway to User, in terms of
977 * latency, for consuming the logs from relay. Also doesn't take
978 * up too much memory.
979 */
980 n_subbufs = 8;
981
982 guc_log_relay_chan = relay_open(NULL, NULL, subbuf_size,
983 n_subbufs, &relay_callbacks, dev_priv);
984 if (!guc_log_relay_chan) {
985 DRM_ERROR("Couldn't create relay chan for GuC logging\n");
986 return -ENOMEM;
987 }
988
989 GEM_BUG_ON(guc_log_relay_chan->subbuf_size < subbuf_size);
990 guc->log.relay_chan = guc_log_relay_chan;
991 return 0;
992}
993
994static int guc_log_create_relay_file(struct intel_guc *guc)
995{
996 struct drm_i915_private *dev_priv = guc_to_i915(guc);
997 struct dentry *log_dir;
998 int ret;
999
1000 /* For now create the log file in /sys/kernel/debug/dri/0 dir */
1001 log_dir = dev_priv->drm.primary->debugfs_root;
1002
1003 /* If /sys/kernel/debug/dri/0 location do not exist, then debugfs is
1004 * not mounted and so can't create the relay file.
1005 * The relay API seems to fit well with debugfs only, for availing relay
1006 * there are 3 requirements which can be met for debugfs file only in a
1007 * straightforward/clean manner :-
1008 * i) Need the associated dentry pointer of the file, while opening the
1009 * relay channel.
1010 * ii) Should be able to use 'relay_file_operations' fops for the file.
1011 * iii) Set the 'i_private' field of file's inode to the pointer of
1012 * relay channel buffer.
1013 */
1014 if (!log_dir) {
1015 DRM_ERROR("Debugfs dir not available yet for GuC log file\n");
1016 return -ENODEV;
1017 }
1018
1019 ret = relay_late_setup_files(guc->log.relay_chan, "guc_log", log_dir);
1020 if (ret) {
1021 DRM_ERROR("Couldn't associate relay chan with file %d\n", ret);
1022 return ret;
1023 }
1024
1025 return 0;
1026}
1027
1028static void guc_move_to_next_buf(struct intel_guc *guc)
1029{
1030 /* Make sure the updates made in the sub buffer are visible when
1031 * Consumer sees the following update to offset inside the sub buffer.
1032 */
1033 smp_wmb();
1034
1035 /* All data has been written, so now move the offset of sub buffer. */
1036 relay_reserve(guc->log.relay_chan, guc->log.vma->obj->base.size);
1037
1038 /* Switch to the next sub buffer */
1039 relay_flush(guc->log.relay_chan);
1040}
1041
1042static void *guc_get_write_buffer(struct intel_guc *guc)
1043{
1044 if (!guc->log.relay_chan)
1045 return NULL;
1046
1047 /* Just get the base address of a new sub buffer and copy data into it
1048 * ourselves. NULL will be returned in no-overwrite mode, if all sub
1049 * buffers are full. Could have used the relay_write() to indirectly
1050 * copy the data, but that would have been bit convoluted, as we need to
1051 * write to only certain locations inside a sub buffer which cannot be
1052 * done without using relay_reserve() along with relay_write(). So its
1053 * better to use relay_reserve() alone.
1054 */
1055 return relay_reserve(guc->log.relay_chan, 0);
1056}
1057
1058static bool
1059guc_check_log_buf_overflow(struct intel_guc *guc,
1060 enum guc_log_buffer_type type, unsigned int full_cnt)
1061{
1062 unsigned int prev_full_cnt = guc->log.prev_overflow_count[type];
1063 bool overflow = false;
1064
1065 if (full_cnt != prev_full_cnt) {
1066 overflow = true;
1067
1068 guc->log.prev_overflow_count[type] = full_cnt;
1069 guc->log.total_overflow_count[type] += full_cnt - prev_full_cnt;
1070
1071 if (full_cnt < prev_full_cnt) {
1072 /* buffer_full_cnt is a 4 bit counter */
1073 guc->log.total_overflow_count[type] += 16;
1074 }
1075 DRM_ERROR_RATELIMITED("GuC log buffer overflow\n");
1076 }
1077
1078 return overflow;
1079}
1080
1081static unsigned int guc_get_log_buffer_size(enum guc_log_buffer_type type)
1082{
1083 switch (type) {
1084 case GUC_ISR_LOG_BUFFER:
1085 return (GUC_LOG_ISR_PAGES + 1) * PAGE_SIZE;
1086 case GUC_DPC_LOG_BUFFER:
1087 return (GUC_LOG_DPC_PAGES + 1) * PAGE_SIZE;
1088 case GUC_CRASH_DUMP_LOG_BUFFER:
1089 return (GUC_LOG_CRASH_PAGES + 1) * PAGE_SIZE;
1090 default:
1091 MISSING_CASE(type);
1092 }
1093
1094 return 0;
1095}
1096
1097static void guc_read_update_log_buffer(struct intel_guc *guc)
1098{
1099 unsigned int buffer_size, read_offset, write_offset, bytes_to_copy, full_cnt;
1100 struct guc_log_buffer_state *log_buf_state, *log_buf_snapshot_state;
1101 struct guc_log_buffer_state log_buf_state_local;
1102 enum guc_log_buffer_type type;
1103 void *src_data, *dst_data;
1104 bool new_overflow;
1105
1106 if (WARN_ON(!guc->log.buf_addr))
1107 return;
1108
1109 /* Get the pointer to shared GuC log buffer */
1110 log_buf_state = src_data = guc->log.buf_addr;
1111
1112 /* Get the pointer to local buffer to store the logs */
1113 log_buf_snapshot_state = dst_data = guc_get_write_buffer(guc);
1114
1115 /* Actual logs are present from the 2nd page */
1116 src_data += PAGE_SIZE;
1117 dst_data += PAGE_SIZE;
1118
1119 for (type = GUC_ISR_LOG_BUFFER; type < GUC_MAX_LOG_BUFFER; type++) {
1120 /* Make a copy of the state structure, inside GuC log buffer
1121 * (which is uncached mapped), on the stack to avoid reading
1122 * from it multiple times.
1123 */
1124 memcpy(&log_buf_state_local, log_buf_state,
1125 sizeof(struct guc_log_buffer_state));
1126 buffer_size = guc_get_log_buffer_size(type);
1127 read_offset = log_buf_state_local.read_ptr;
1128 write_offset = log_buf_state_local.sampled_write_ptr;
1129 full_cnt = log_buf_state_local.buffer_full_cnt;
1130
1131 /* Bookkeeping stuff */
1132 guc->log.flush_count[type] += log_buf_state_local.flush_to_file;
1133 new_overflow = guc_check_log_buf_overflow(guc, type, full_cnt);
1134
1135 /* Update the state of shared log buffer */
1136 log_buf_state->read_ptr = write_offset;
1137 log_buf_state->flush_to_file = 0;
1138 log_buf_state++;
1139
1140 if (unlikely(!log_buf_snapshot_state))
1141 continue;
1142
1143 /* First copy the state structure in snapshot buffer */
1144 memcpy(log_buf_snapshot_state, &log_buf_state_local,
1145 sizeof(struct guc_log_buffer_state));
1146
1147 /* The write pointer could have been updated by GuC firmware,
1148 * after sending the flush interrupt to Host, for consistency
1149 * set write pointer value to same value of sampled_write_ptr
1150 * in the snapshot buffer.
1151 */
1152 log_buf_snapshot_state->write_ptr = write_offset;
1153 log_buf_snapshot_state++;
1154
1155 /* Now copy the actual logs. */
1156 if (unlikely(new_overflow)) {
1157 /* copy the whole buffer in case of overflow */
1158 read_offset = 0;
1159 write_offset = buffer_size;
1160 } else if (unlikely((read_offset > buffer_size) ||
1161 (write_offset > buffer_size))) {
1162 DRM_ERROR("invalid log buffer state\n");
1163 /* copy whole buffer as offsets are unreliable */
1164 read_offset = 0;
1165 write_offset = buffer_size;
1166 }
1167
1168 /* Just copy the newly written data */
1169 if (read_offset > write_offset) {
1170 i915_memcpy_from_wc(dst_data, src_data, write_offset);
1171 bytes_to_copy = buffer_size - read_offset;
1172 } else {
1173 bytes_to_copy = write_offset - read_offset;
1174 }
1175 i915_memcpy_from_wc(dst_data + read_offset,
1176 src_data + read_offset, bytes_to_copy);
1177
1178 src_data += buffer_size;
1179 dst_data += buffer_size;
1180 }
1181
1182 if (log_buf_snapshot_state)
1183 guc_move_to_next_buf(guc);
1184 else {
1185 /* Used rate limited to avoid deluge of messages, logs might be
1186 * getting consumed by User at a slow rate.
1187 */
1188 DRM_ERROR_RATELIMITED("no sub-buffer to capture logs\n");
1189 guc->log.capture_miss_count++;
1190 }
1191}
1192
1193static void guc_capture_logs_work(struct work_struct *work)
1194{
1195 struct drm_i915_private *dev_priv =
1196 container_of(work, struct drm_i915_private, guc.log.flush_work);
1197
1198 i915_guc_capture_logs(dev_priv);
1199}
1200
1201static void guc_log_cleanup(struct intel_guc *guc)
1202{
1203 struct drm_i915_private *dev_priv = guc_to_i915(guc);
1204
1205 lockdep_assert_held(&dev_priv->drm.struct_mutex);
1206
1207 /* First disable the flush interrupt */
1208 gen9_disable_guc_interrupts(dev_priv);
1209
1210 if (guc->log.flush_wq)
1211 destroy_workqueue(guc->log.flush_wq);
1212
1213 guc->log.flush_wq = NULL;
1214
1215 if (guc->log.relay_chan)
1216 guc_log_remove_relay_file(guc);
1217
1218 guc->log.relay_chan = NULL;
1219
1220 if (guc->log.buf_addr)
1221 i915_gem_object_unpin_map(guc->log.vma->obj);
1222
1223 guc->log.buf_addr = NULL;
1224}
1225
1226static int guc_log_create_extras(struct intel_guc *guc)
1227{
1228 struct drm_i915_private *dev_priv = guc_to_i915(guc);
1229 void *vaddr;
1230 int ret;
1231
1232 lockdep_assert_held(&dev_priv->drm.struct_mutex);
1233
1234 /* Nothing to do */
1235 if (i915.guc_log_level < 0)
1236 return 0;
1237
1238 if (!guc->log.buf_addr) {
1239 /* Create a WC (Uncached for read) vmalloc mapping of log
1240 * buffer pages, so that we can directly get the data
1241 * (up-to-date) from memory.
1242 */
1243 vaddr = i915_gem_object_pin_map(guc->log.vma->obj, I915_MAP_WC);
1244 if (IS_ERR(vaddr)) {
1245 ret = PTR_ERR(vaddr);
1246 DRM_ERROR("Couldn't map log buffer pages %d\n", ret);
1247 return ret;
1248 }
1249
1250 guc->log.buf_addr = vaddr;
1251 }
1252
1253 if (!guc->log.relay_chan) {
1254 /* Create a relay channel, so that we have buffers for storing
1255 * the GuC firmware logs, the channel will be linked with a file
1256 * later on when debugfs is registered.
1257 */
1258 ret = guc_log_create_relay_channel(guc);
1259 if (ret)
1260 return ret;
1261 }
1262
1263 if (!guc->log.flush_wq) {
1264 INIT_WORK(&guc->log.flush_work, guc_capture_logs_work);
1265
1266 /*
1267 * GuC log buffer flush work item has to do register access to
1268 * send the ack to GuC and this work item, if not synced before
1269 * suspend, can potentially get executed after the GFX device is
1270 * suspended.
1271 * By marking the WQ as freezable, we don't have to bother about
1272 * flushing of this work item from the suspend hooks, the pending
1273 * work item if any will be either executed before the suspend
1274 * or scheduled later on resume. This way the handling of work
1275 * item can be kept same between system suspend & rpm suspend.
1276 */
1277 guc->log.flush_wq = alloc_ordered_workqueue("i915-guc_log",
1278 WQ_HIGHPRI | WQ_FREEZABLE);
1279 if (guc->log.flush_wq == NULL) {
1280 DRM_ERROR("Couldn't allocate the wq for GuC logging\n");
1281 return -ENOMEM;
1282 }
1283 }
1284
1285 return 0;
1286}
1287
850static void guc_log_create(struct intel_guc *guc) 1288static void guc_log_create(struct intel_guc *guc)
851{ 1289{
852 struct i915_vma *vma; 1290 struct i915_vma *vma;
853 unsigned long offset; 1291 unsigned long offset;
854 uint32_t size, flags; 1292 uint32_t size, flags;
855 1293
856 if (i915.guc_log_level < GUC_LOG_VERBOSITY_MIN)
857 return;
858
859 if (i915.guc_log_level > GUC_LOG_VERBOSITY_MAX) 1294 if (i915.guc_log_level > GUC_LOG_VERBOSITY_MAX)
860 i915.guc_log_level = GUC_LOG_VERBOSITY_MAX; 1295 i915.guc_log_level = GUC_LOG_VERBOSITY_MAX;
861 1296
@@ -865,8 +1300,18 @@ static void guc_log_create(struct intel_guc *guc)
865 GUC_LOG_ISR_PAGES + 1 + 1300 GUC_LOG_ISR_PAGES + 1 +
866 GUC_LOG_CRASH_PAGES + 1) << PAGE_SHIFT; 1301 GUC_LOG_CRASH_PAGES + 1) << PAGE_SHIFT;
867 1302
868 vma = guc->log_vma; 1303 vma = guc->log.vma;
869 if (!vma) { 1304 if (!vma) {
1305 /* We require SSE 4.1 for fast reads from the GuC log buffer and
1306 * it should be present on the chipsets supporting GuC based
1307 * submisssions.
1308 */
1309 if (WARN_ON(!i915_memcpy_from_wc(NULL, NULL, 0))) {
1310 /* logging will not be enabled */
1311 i915.guc_log_level = -1;
1312 return;
1313 }
1314
870 vma = guc_allocate_vma(guc, size); 1315 vma = guc_allocate_vma(guc, size);
871 if (IS_ERR(vma)) { 1316 if (IS_ERR(vma)) {
872 /* logging will be off */ 1317 /* logging will be off */
@@ -874,7 +1319,14 @@ static void guc_log_create(struct intel_guc *guc)
874 return; 1319 return;
875 } 1320 }
876 1321
877 guc->log_vma = vma; 1322 guc->log.vma = vma;
1323
1324 if (guc_log_create_extras(guc)) {
1325 guc_log_cleanup(guc);
1326 i915_vma_unpin_and_release(&guc->log.vma);
1327 i915.guc_log_level = -1;
1328 return;
1329 }
878 } 1330 }
879 1331
880 /* each allocated unit is a page */ 1332 /* each allocated unit is a page */
@@ -884,7 +1336,37 @@ static void guc_log_create(struct intel_guc *guc)
884 (GUC_LOG_CRASH_PAGES << GUC_LOG_CRASH_SHIFT); 1336 (GUC_LOG_CRASH_PAGES << GUC_LOG_CRASH_SHIFT);
885 1337
886 offset = i915_ggtt_offset(vma) >> PAGE_SHIFT; /* in pages */ 1338 offset = i915_ggtt_offset(vma) >> PAGE_SHIFT; /* in pages */
887 guc->log_flags = (offset << GUC_LOG_BUF_ADDR_SHIFT) | flags; 1339 guc->log.flags = (offset << GUC_LOG_BUF_ADDR_SHIFT) | flags;
1340}
1341
1342static int guc_log_late_setup(struct intel_guc *guc)
1343{
1344 struct drm_i915_private *dev_priv = guc_to_i915(guc);
1345 int ret;
1346
1347 lockdep_assert_held(&dev_priv->drm.struct_mutex);
1348
1349 if (i915.guc_log_level < 0)
1350 return -EINVAL;
1351
1352 /* If log_level was set as -1 at boot time, then setup needed to
1353 * handle log buffer flush interrupts would not have been done yet,
1354 * so do that now.
1355 */
1356 ret = guc_log_create_extras(guc);
1357 if (ret)
1358 goto err;
1359
1360 ret = guc_log_create_relay_file(guc);
1361 if (ret)
1362 goto err;
1363
1364 return 0;
1365err:
1366 guc_log_cleanup(guc);
1367 /* logging will remain off */
1368 i915.guc_log_level = -1;
1369 return ret;
888} 1370}
889 1371
890static void guc_policies_init(struct guc_policies *policies) 1372static void guc_policies_init(struct guc_policies *policies)
@@ -1006,6 +1488,7 @@ int i915_guc_submission_init(struct drm_i915_private *dev_priv)
1006 1488
1007 guc->ctx_pool_vma = vma; 1489 guc->ctx_pool_vma = vma;
1008 ida_init(&guc->ctx_ids); 1490 ida_init(&guc->ctx_ids);
1491 mutex_init(&guc->action_lock);
1009 guc_log_create(guc); 1492 guc_log_create(guc);
1010 guc_addon_create(guc); 1493 guc_addon_create(guc);
1011 1494
@@ -1039,7 +1522,8 @@ int i915_guc_submission_enable(struct drm_i915_private *dev_priv)
1039 engine->submit_request = i915_guc_submit; 1522 engine->submit_request = i915_guc_submit;
1040 1523
1041 /* Replay the current set of previously submitted requests */ 1524 /* Replay the current set of previously submitted requests */
1042 list_for_each_entry(request, &engine->request_list, link) { 1525 list_for_each_entry(request,
1526 &engine->timeline->requests, link) {
1043 client->wq_rsvd += sizeof(struct guc_wq_item); 1527 client->wq_rsvd += sizeof(struct guc_wq_item);
1044 if (i915_sw_fence_done(&request->submit)) 1528 if (i915_sw_fence_done(&request->submit))
1045 i915_guc_submit(request); 1529 i915_guc_submit(request);
@@ -1068,7 +1552,7 @@ void i915_guc_submission_fini(struct drm_i915_private *dev_priv)
1068 struct intel_guc *guc = &dev_priv->guc; 1552 struct intel_guc *guc = &dev_priv->guc;
1069 1553
1070 i915_vma_unpin_and_release(&guc->ads_vma); 1554 i915_vma_unpin_and_release(&guc->ads_vma);
1071 i915_vma_unpin_and_release(&guc->log_vma); 1555 i915_vma_unpin_and_release(&guc->log.vma);
1072 1556
1073 if (guc->ctx_pool_vma) 1557 if (guc->ctx_pool_vma)
1074 ida_destroy(&guc->ctx_ids); 1558 ida_destroy(&guc->ctx_ids);
@@ -1089,6 +1573,8 @@ int intel_guc_suspend(struct drm_device *dev)
1089 if (guc->guc_fw.guc_fw_load_status != GUC_FIRMWARE_SUCCESS) 1573 if (guc->guc_fw.guc_fw_load_status != GUC_FIRMWARE_SUCCESS)
1090 return 0; 1574 return 0;
1091 1575
1576 gen9_disable_guc_interrupts(dev_priv);
1577
1092 ctx = dev_priv->kernel_context; 1578 ctx = dev_priv->kernel_context;
1093 1579
1094 data[0] = HOST2GUC_ACTION_ENTER_S_STATE; 1580 data[0] = HOST2GUC_ACTION_ENTER_S_STATE;
@@ -1115,6 +1601,9 @@ int intel_guc_resume(struct drm_device *dev)
1115 if (guc->guc_fw.guc_fw_load_status != GUC_FIRMWARE_SUCCESS) 1601 if (guc->guc_fw.guc_fw_load_status != GUC_FIRMWARE_SUCCESS)
1116 return 0; 1602 return 0;
1117 1603
1604 if (i915.guc_log_level >= 0)
1605 gen9_enable_guc_interrupts(dev_priv);
1606
1118 ctx = dev_priv->kernel_context; 1607 ctx = dev_priv->kernel_context;
1119 1608
1120 data[0] = HOST2GUC_ACTION_EXIT_S_STATE; 1609 data[0] = HOST2GUC_ACTION_EXIT_S_STATE;
@@ -1124,3 +1613,104 @@ int intel_guc_resume(struct drm_device *dev)
1124 1613
1125 return host2guc_action(guc, data, ARRAY_SIZE(data)); 1614 return host2guc_action(guc, data, ARRAY_SIZE(data));
1126} 1615}
1616
1617void i915_guc_capture_logs(struct drm_i915_private *dev_priv)
1618{
1619 guc_read_update_log_buffer(&dev_priv->guc);
1620
1621 /* Generally device is expected to be active only at this
1622 * time, so get/put should be really quick.
1623 */
1624 intel_runtime_pm_get(dev_priv);
1625 host2guc_logbuffer_flush_complete(&dev_priv->guc);
1626 intel_runtime_pm_put(dev_priv);
1627}
1628
1629void i915_guc_flush_logs(struct drm_i915_private *dev_priv)
1630{
1631 if (!i915.enable_guc_submission || (i915.guc_log_level < 0))
1632 return;
1633
1634 /* First disable the interrupts, will be renabled afterwards */
1635 gen9_disable_guc_interrupts(dev_priv);
1636
1637 /* Before initiating the forceful flush, wait for any pending/ongoing
1638 * flush to complete otherwise forceful flush may not actually happen.
1639 */
1640 flush_work(&dev_priv->guc.log.flush_work);
1641
1642 /* Ask GuC to update the log buffer state */
1643 host2guc_force_logbuffer_flush(&dev_priv->guc);
1644
1645 /* GuC would have updated log buffer by now, so capture it */
1646 i915_guc_capture_logs(dev_priv);
1647}
1648
1649void i915_guc_unregister(struct drm_i915_private *dev_priv)
1650{
1651 if (!i915.enable_guc_submission)
1652 return;
1653
1654 mutex_lock(&dev_priv->drm.struct_mutex);
1655 guc_log_cleanup(&dev_priv->guc);
1656 mutex_unlock(&dev_priv->drm.struct_mutex);
1657}
1658
1659void i915_guc_register(struct drm_i915_private *dev_priv)
1660{
1661 if (!i915.enable_guc_submission)
1662 return;
1663
1664 mutex_lock(&dev_priv->drm.struct_mutex);
1665 guc_log_late_setup(&dev_priv->guc);
1666 mutex_unlock(&dev_priv->drm.struct_mutex);
1667}
1668
1669int i915_guc_log_control(struct drm_i915_private *dev_priv, u64 control_val)
1670{
1671 union guc_log_control log_param;
1672 int ret;
1673
1674 log_param.value = control_val;
1675
1676 if (log_param.verbosity < GUC_LOG_VERBOSITY_MIN ||
1677 log_param.verbosity > GUC_LOG_VERBOSITY_MAX)
1678 return -EINVAL;
1679
1680 /* This combination doesn't make sense & won't have any effect */
1681 if (!log_param.logging_enabled && (i915.guc_log_level < 0))
1682 return 0;
1683
1684 ret = host2guc_logging_control(&dev_priv->guc, log_param.value);
1685 if (ret < 0) {
1686 DRM_DEBUG_DRIVER("host2guc action failed %d\n", ret);
1687 return ret;
1688 }
1689
1690 i915.guc_log_level = log_param.verbosity;
1691
1692 /* If log_level was set as -1 at boot time, then the relay channel file
1693 * wouldn't have been created by now and interrupts also would not have
1694 * been enabled.
1695 */
1696 if (!dev_priv->guc.log.relay_chan) {
1697 ret = guc_log_late_setup(&dev_priv->guc);
1698 if (!ret)
1699 gen9_enable_guc_interrupts(dev_priv);
1700 } else if (!log_param.logging_enabled) {
1701 /* Once logging is disabled, GuC won't generate logs & send an
1702 * interrupt. But there could be some data in the log buffer
1703 * which is yet to be captured. So request GuC to update the log
1704 * buffer state and then collect the left over logs.
1705 */
1706 i915_guc_flush_logs(dev_priv);
1707
1708 /* As logging is disabled, update log level to reflect that */
1709 i915.guc_log_level = -1;
1710 } else {
1711 /* In case interrupts were disabled, enable them now */
1712 gen9_enable_guc_interrupts(dev_priv);
1713 }
1714
1715 return ret;
1716}
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 23315e5461bf..6d7505b5c5e7 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -170,6 +170,7 @@ static void gen5_assert_iir_is_zero(struct drm_i915_private *dev_priv,
170} while (0) 170} while (0)
171 171
172static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir); 172static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir);
173static void gen9_guc_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir);
173 174
174/* For display hotplug interrupt */ 175/* For display hotplug interrupt */
175static inline void 176static inline void
@@ -303,18 +304,18 @@ static void snb_update_pm_irq(struct drm_i915_private *dev_priv,
303 304
304 assert_spin_locked(&dev_priv->irq_lock); 305 assert_spin_locked(&dev_priv->irq_lock);
305 306
306 new_val = dev_priv->pm_irq_mask; 307 new_val = dev_priv->pm_imr;
307 new_val &= ~interrupt_mask; 308 new_val &= ~interrupt_mask;
308 new_val |= (~enabled_irq_mask & interrupt_mask); 309 new_val |= (~enabled_irq_mask & interrupt_mask);
309 310
310 if (new_val != dev_priv->pm_irq_mask) { 311 if (new_val != dev_priv->pm_imr) {
311 dev_priv->pm_irq_mask = new_val; 312 dev_priv->pm_imr = new_val;
312 I915_WRITE(gen6_pm_imr(dev_priv), dev_priv->pm_irq_mask); 313 I915_WRITE(gen6_pm_imr(dev_priv), dev_priv->pm_imr);
313 POSTING_READ(gen6_pm_imr(dev_priv)); 314 POSTING_READ(gen6_pm_imr(dev_priv));
314 } 315 }
315} 316}
316 317
317void gen6_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask) 318void gen6_unmask_pm_irq(struct drm_i915_private *dev_priv, u32 mask)
318{ 319{
319 if (WARN_ON(!intel_irqs_enabled(dev_priv))) 320 if (WARN_ON(!intel_irqs_enabled(dev_priv)))
320 return; 321 return;
@@ -322,28 +323,54 @@ void gen6_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask)
322 snb_update_pm_irq(dev_priv, mask, mask); 323 snb_update_pm_irq(dev_priv, mask, mask);
323} 324}
324 325
325static void __gen6_disable_pm_irq(struct drm_i915_private *dev_priv, 326static void __gen6_mask_pm_irq(struct drm_i915_private *dev_priv, u32 mask)
326 uint32_t mask)
327{ 327{
328 snb_update_pm_irq(dev_priv, mask, 0); 328 snb_update_pm_irq(dev_priv, mask, 0);
329} 329}
330 330
331void gen6_disable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask) 331void gen6_mask_pm_irq(struct drm_i915_private *dev_priv, u32 mask)
332{ 332{
333 if (WARN_ON(!intel_irqs_enabled(dev_priv))) 333 if (WARN_ON(!intel_irqs_enabled(dev_priv)))
334 return; 334 return;
335 335
336 __gen6_disable_pm_irq(dev_priv, mask); 336 __gen6_mask_pm_irq(dev_priv, mask);
337} 337}
338 338
339void gen6_reset_rps_interrupts(struct drm_i915_private *dev_priv) 339void gen6_reset_pm_iir(struct drm_i915_private *dev_priv, u32 reset_mask)
340{ 340{
341 i915_reg_t reg = gen6_pm_iir(dev_priv); 341 i915_reg_t reg = gen6_pm_iir(dev_priv);
342 342
343 spin_lock_irq(&dev_priv->irq_lock); 343 assert_spin_locked(&dev_priv->irq_lock);
344 I915_WRITE(reg, dev_priv->pm_rps_events); 344
345 I915_WRITE(reg, dev_priv->pm_rps_events); 345 I915_WRITE(reg, reset_mask);
346 I915_WRITE(reg, reset_mask);
346 POSTING_READ(reg); 347 POSTING_READ(reg);
348}
349
350void gen6_enable_pm_irq(struct drm_i915_private *dev_priv, u32 enable_mask)
351{
352 assert_spin_locked(&dev_priv->irq_lock);
353
354 dev_priv->pm_ier |= enable_mask;
355 I915_WRITE(gen6_pm_ier(dev_priv), dev_priv->pm_ier);
356 gen6_unmask_pm_irq(dev_priv, enable_mask);
357 /* unmask_pm_irq provides an implicit barrier (POSTING_READ) */
358}
359
360void gen6_disable_pm_irq(struct drm_i915_private *dev_priv, u32 disable_mask)
361{
362 assert_spin_locked(&dev_priv->irq_lock);
363
364 dev_priv->pm_ier &= ~disable_mask;
365 __gen6_mask_pm_irq(dev_priv, disable_mask);
366 I915_WRITE(gen6_pm_ier(dev_priv), dev_priv->pm_ier);
367 /* though a barrier is missing here, but don't really need a one */
368}
369
370void gen6_reset_rps_interrupts(struct drm_i915_private *dev_priv)
371{
372 spin_lock_irq(&dev_priv->irq_lock);
373 gen6_reset_pm_iir(dev_priv, dev_priv->pm_rps_events);
347 dev_priv->rps.pm_iir = 0; 374 dev_priv->rps.pm_iir = 0;
348 spin_unlock_irq(&dev_priv->irq_lock); 375 spin_unlock_irq(&dev_priv->irq_lock);
349} 376}
@@ -357,8 +384,6 @@ void gen6_enable_rps_interrupts(struct drm_i915_private *dev_priv)
357 WARN_ON_ONCE(dev_priv->rps.pm_iir); 384 WARN_ON_ONCE(dev_priv->rps.pm_iir);
358 WARN_ON_ONCE(I915_READ(gen6_pm_iir(dev_priv)) & dev_priv->pm_rps_events); 385 WARN_ON_ONCE(I915_READ(gen6_pm_iir(dev_priv)) & dev_priv->pm_rps_events);
359 dev_priv->rps.interrupts_enabled = true; 386 dev_priv->rps.interrupts_enabled = true;
360 I915_WRITE(gen6_pm_ier(dev_priv), I915_READ(gen6_pm_ier(dev_priv)) |
361 dev_priv->pm_rps_events);
362 gen6_enable_pm_irq(dev_priv, dev_priv->pm_rps_events); 387 gen6_enable_pm_irq(dev_priv, dev_priv->pm_rps_events);
363 388
364 spin_unlock_irq(&dev_priv->irq_lock); 389 spin_unlock_irq(&dev_priv->irq_lock);
@@ -379,9 +404,7 @@ void gen6_disable_rps_interrupts(struct drm_i915_private *dev_priv)
379 404
380 I915_WRITE(GEN6_PMINTRMSK, gen6_sanitize_rps_pm_mask(dev_priv, ~0u)); 405 I915_WRITE(GEN6_PMINTRMSK, gen6_sanitize_rps_pm_mask(dev_priv, ~0u));
381 406
382 __gen6_disable_pm_irq(dev_priv, dev_priv->pm_rps_events); 407 gen6_disable_pm_irq(dev_priv, dev_priv->pm_rps_events);
383 I915_WRITE(gen6_pm_ier(dev_priv), I915_READ(gen6_pm_ier(dev_priv)) &
384 ~dev_priv->pm_rps_events);
385 408
386 spin_unlock_irq(&dev_priv->irq_lock); 409 spin_unlock_irq(&dev_priv->irq_lock);
387 synchronize_irq(dev_priv->drm.irq); 410 synchronize_irq(dev_priv->drm.irq);
@@ -395,6 +418,38 @@ void gen6_disable_rps_interrupts(struct drm_i915_private *dev_priv)
395 gen6_reset_rps_interrupts(dev_priv); 418 gen6_reset_rps_interrupts(dev_priv);
396} 419}
397 420
421void gen9_reset_guc_interrupts(struct drm_i915_private *dev_priv)
422{
423 spin_lock_irq(&dev_priv->irq_lock);
424 gen6_reset_pm_iir(dev_priv, dev_priv->pm_guc_events);
425 spin_unlock_irq(&dev_priv->irq_lock);
426}
427
428void gen9_enable_guc_interrupts(struct drm_i915_private *dev_priv)
429{
430 spin_lock_irq(&dev_priv->irq_lock);
431 if (!dev_priv->guc.interrupts_enabled) {
432 WARN_ON_ONCE(I915_READ(gen6_pm_iir(dev_priv)) &
433 dev_priv->pm_guc_events);
434 dev_priv->guc.interrupts_enabled = true;
435 gen6_enable_pm_irq(dev_priv, dev_priv->pm_guc_events);
436 }
437 spin_unlock_irq(&dev_priv->irq_lock);
438}
439
440void gen9_disable_guc_interrupts(struct drm_i915_private *dev_priv)
441{
442 spin_lock_irq(&dev_priv->irq_lock);
443 dev_priv->guc.interrupts_enabled = false;
444
445 gen6_disable_pm_irq(dev_priv, dev_priv->pm_guc_events);
446
447 spin_unlock_irq(&dev_priv->irq_lock);
448 synchronize_irq(dev_priv->drm.irq);
449
450 gen9_reset_guc_interrupts(dev_priv);
451}
452
398/** 453/**
399 * bdw_update_port_irq - update DE port interrupt 454 * bdw_update_port_irq - update DE port interrupt
400 * @dev_priv: driver private 455 * @dev_priv: driver private
@@ -670,8 +725,8 @@ static u32 i915_get_vblank_counter(struct drm_device *dev, unsigned int pipe)
670 struct drm_i915_private *dev_priv = to_i915(dev); 725 struct drm_i915_private *dev_priv = to_i915(dev);
671 i915_reg_t high_frame, low_frame; 726 i915_reg_t high_frame, low_frame;
672 u32 high1, high2, low, pixel, vbl_start, hsync_start, htotal; 727 u32 high1, high2, low, pixel, vbl_start, hsync_start, htotal;
673 struct intel_crtc *intel_crtc = 728 struct intel_crtc *intel_crtc = intel_get_crtc_for_pipe(dev_priv,
674 to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); 729 pipe);
675 const struct drm_display_mode *mode = &intel_crtc->base.hwmode; 730 const struct drm_display_mode *mode = &intel_crtc->base.hwmode;
676 731
677 htotal = mode->crtc_htotal; 732 htotal = mode->crtc_htotal;
@@ -776,8 +831,8 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe,
776 const struct drm_display_mode *mode) 831 const struct drm_display_mode *mode)
777{ 832{
778 struct drm_i915_private *dev_priv = to_i915(dev); 833 struct drm_i915_private *dev_priv = to_i915(dev);
779 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; 834 struct intel_crtc *intel_crtc = intel_get_crtc_for_pipe(dev_priv,
780 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 835 pipe);
781 int position; 836 int position;
782 int vbl_start, vbl_end, hsync_start, htotal, vtotal; 837 int vbl_start, vbl_end, hsync_start, htotal, vtotal;
783 bool in_vbl = true; 838 bool in_vbl = true;
@@ -912,21 +967,22 @@ static int i915_get_vblank_timestamp(struct drm_device *dev, unsigned int pipe,
912 struct timeval *vblank_time, 967 struct timeval *vblank_time,
913 unsigned flags) 968 unsigned flags)
914{ 969{
915 struct drm_crtc *crtc; 970 struct drm_i915_private *dev_priv = to_i915(dev);
971 struct intel_crtc *crtc;
916 972
917 if (pipe >= INTEL_INFO(dev)->num_pipes) { 973 if (pipe >= INTEL_INFO(dev_priv)->num_pipes) {
918 DRM_ERROR("Invalid crtc %u\n", pipe); 974 DRM_ERROR("Invalid crtc %u\n", pipe);
919 return -EINVAL; 975 return -EINVAL;
920 } 976 }
921 977
922 /* Get drm_crtc to timestamp: */ 978 /* Get drm_crtc to timestamp: */
923 crtc = intel_get_crtc_for_pipe(dev, pipe); 979 crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
924 if (crtc == NULL) { 980 if (crtc == NULL) {
925 DRM_ERROR("Invalid crtc %u\n", pipe); 981 DRM_ERROR("Invalid crtc %u\n", pipe);
926 return -EINVAL; 982 return -EINVAL;
927 } 983 }
928 984
929 if (!crtc->hwmode.crtc_clock) { 985 if (!crtc->base.hwmode.crtc_clock) {
930 DRM_DEBUG_KMS("crtc %u is disabled\n", pipe); 986 DRM_DEBUG_KMS("crtc %u is disabled\n", pipe);
931 return -EBUSY; 987 return -EBUSY;
932 } 988 }
@@ -934,7 +990,7 @@ static int i915_get_vblank_timestamp(struct drm_device *dev, unsigned int pipe,
934 /* Helper routine in DRM core does all the work: */ 990 /* Helper routine in DRM core does all the work: */
935 return drm_calc_vbltimestamp_from_scanoutpos(dev, pipe, max_error, 991 return drm_calc_vbltimestamp_from_scanoutpos(dev, pipe, max_error,
936 vblank_time, flags, 992 vblank_time, flags,
937 &crtc->hwmode); 993 &crtc->base.hwmode);
938} 994}
939 995
940static void ironlake_rps_change_irq_handler(struct drm_i915_private *dev_priv) 996static void ironlake_rps_change_irq_handler(struct drm_i915_private *dev_priv)
@@ -1085,7 +1141,7 @@ static void gen6_pm_rps_work(struct work_struct *work)
1085 pm_iir = dev_priv->rps.pm_iir; 1141 pm_iir = dev_priv->rps.pm_iir;
1086 dev_priv->rps.pm_iir = 0; 1142 dev_priv->rps.pm_iir = 0;
1087 /* Make sure not to corrupt PMIMR state used by ringbuffer on GEN6 */ 1143 /* Make sure not to corrupt PMIMR state used by ringbuffer on GEN6 */
1088 gen6_enable_pm_irq(dev_priv, dev_priv->pm_rps_events); 1144 gen6_unmask_pm_irq(dev_priv, dev_priv->pm_rps_events);
1089 client_boost = dev_priv->rps.client_boost; 1145 client_boost = dev_priv->rps.client_boost;
1090 dev_priv->rps.client_boost = false; 1146 dev_priv->rps.client_boost = false;
1091 spin_unlock_irq(&dev_priv->irq_lock); 1147 spin_unlock_irq(&dev_priv->irq_lock);
@@ -1324,11 +1380,13 @@ static irqreturn_t gen8_gt_irq_ack(struct drm_i915_private *dev_priv,
1324 DRM_ERROR("The master control interrupt lied (GT3)!\n"); 1380 DRM_ERROR("The master control interrupt lied (GT3)!\n");
1325 } 1381 }
1326 1382
1327 if (master_ctl & GEN8_GT_PM_IRQ) { 1383 if (master_ctl & (GEN8_GT_PM_IRQ | GEN8_GT_GUC_IRQ)) {
1328 gt_iir[2] = I915_READ_FW(GEN8_GT_IIR(2)); 1384 gt_iir[2] = I915_READ_FW(GEN8_GT_IIR(2));
1329 if (gt_iir[2] & dev_priv->pm_rps_events) { 1385 if (gt_iir[2] & (dev_priv->pm_rps_events |
1386 dev_priv->pm_guc_events)) {
1330 I915_WRITE_FW(GEN8_GT_IIR(2), 1387 I915_WRITE_FW(GEN8_GT_IIR(2),
1331 gt_iir[2] & dev_priv->pm_rps_events); 1388 gt_iir[2] & (dev_priv->pm_rps_events |
1389 dev_priv->pm_guc_events));
1332 ret = IRQ_HANDLED; 1390 ret = IRQ_HANDLED;
1333 } else 1391 } else
1334 DRM_ERROR("The master control interrupt lied (PM)!\n"); 1392 DRM_ERROR("The master control interrupt lied (PM)!\n");
@@ -1360,6 +1418,9 @@ static void gen8_gt_irq_handler(struct drm_i915_private *dev_priv,
1360 1418
1361 if (gt_iir[2] & dev_priv->pm_rps_events) 1419 if (gt_iir[2] & dev_priv->pm_rps_events)
1362 gen6_rps_irq_handler(dev_priv, gt_iir[2]); 1420 gen6_rps_irq_handler(dev_priv, gt_iir[2]);
1421
1422 if (gt_iir[2] & dev_priv->pm_guc_events)
1423 gen9_guc_irq_handler(dev_priv, gt_iir[2]);
1363} 1424}
1364 1425
1365static bool bxt_port_hotplug_long_detect(enum port port, u32 val) 1426static bool bxt_port_hotplug_long_detect(enum port port, u32 val)
@@ -1586,7 +1647,7 @@ static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir)
1586{ 1647{
1587 if (pm_iir & dev_priv->pm_rps_events) { 1648 if (pm_iir & dev_priv->pm_rps_events) {
1588 spin_lock(&dev_priv->irq_lock); 1649 spin_lock(&dev_priv->irq_lock);
1589 gen6_disable_pm_irq(dev_priv, pm_iir & dev_priv->pm_rps_events); 1650 gen6_mask_pm_irq(dev_priv, pm_iir & dev_priv->pm_rps_events);
1590 if (dev_priv->rps.interrupts_enabled) { 1651 if (dev_priv->rps.interrupts_enabled) {
1591 dev_priv->rps.pm_iir |= pm_iir & dev_priv->pm_rps_events; 1652 dev_priv->rps.pm_iir |= pm_iir & dev_priv->pm_rps_events;
1592 schedule_work(&dev_priv->rps.work); 1653 schedule_work(&dev_priv->rps.work);
@@ -1606,6 +1667,41 @@ static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir)
1606 } 1667 }
1607} 1668}
1608 1669
1670static void gen9_guc_irq_handler(struct drm_i915_private *dev_priv, u32 gt_iir)
1671{
1672 if (gt_iir & GEN9_GUC_TO_HOST_INT_EVENT) {
1673 /* Sample the log buffer flush related bits & clear them out now
1674 * itself from the message identity register to minimize the
1675 * probability of losing a flush interrupt, when there are back
1676 * to back flush interrupts.
1677 * There can be a new flush interrupt, for different log buffer
1678 * type (like for ISR), whilst Host is handling one (for DPC).
1679 * Since same bit is used in message register for ISR & DPC, it
1680 * could happen that GuC sets the bit for 2nd interrupt but Host
1681 * clears out the bit on handling the 1st interrupt.
1682 */
1683 u32 msg, flush;
1684
1685 msg = I915_READ(SOFT_SCRATCH(15));
1686 flush = msg & (GUC2HOST_MSG_CRASH_DUMP_POSTED |
1687 GUC2HOST_MSG_FLUSH_LOG_BUFFER);
1688 if (flush) {
1689 /* Clear the message bits that are handled */
1690 I915_WRITE(SOFT_SCRATCH(15), msg & ~flush);
1691
1692 /* Handle flush interrupt in bottom half */
1693 queue_work(dev_priv->guc.log.flush_wq,
1694 &dev_priv->guc.log.flush_work);
1695
1696 dev_priv->guc.log.flush_interrupt_count++;
1697 } else {
1698 /* Not clearing of unhandled event bits won't result in
1699 * re-triggering of the interrupt.
1700 */
1701 }
1702 }
1703}
1704
1609static bool intel_pipe_handle_vblank(struct drm_i915_private *dev_priv, 1705static bool intel_pipe_handle_vblank(struct drm_i915_private *dev_priv,
1610 enum pipe pipe) 1706 enum pipe pipe)
1611{ 1707{
@@ -2408,7 +2504,7 @@ gen8_de_irq_handler(struct drm_i915_private *dev_priv, u32 master_ctl)
2408 fault_errors &= GEN8_DE_PIPE_IRQ_FAULT_ERRORS; 2504 fault_errors &= GEN8_DE_PIPE_IRQ_FAULT_ERRORS;
2409 2505
2410 if (fault_errors) 2506 if (fault_errors)
2411 DRM_ERROR("Fault errors on pipe %c\n: 0x%08x", 2507 DRM_ERROR("Fault errors on pipe %c: 0x%08x\n",
2412 pipe_name(pipe), 2508 pipe_name(pipe),
2413 fault_errors); 2509 fault_errors);
2414 } 2510 }
@@ -2752,420 +2848,6 @@ static void gen8_disable_vblank(struct drm_device *dev, unsigned int pipe)
2752 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags); 2848 spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
2753} 2849}
2754 2850
2755static bool
2756ipehr_is_semaphore_wait(struct intel_engine_cs *engine, u32 ipehr)
2757{
2758 if (INTEL_GEN(engine->i915) >= 8) {
2759 return (ipehr >> 23) == 0x1c;
2760 } else {
2761 ipehr &= ~MI_SEMAPHORE_SYNC_MASK;
2762 return ipehr == (MI_SEMAPHORE_MBOX | MI_SEMAPHORE_COMPARE |
2763 MI_SEMAPHORE_REGISTER);
2764 }
2765}
2766
2767static struct intel_engine_cs *
2768semaphore_wait_to_signaller_ring(struct intel_engine_cs *engine, u32 ipehr,
2769 u64 offset)
2770{
2771 struct drm_i915_private *dev_priv = engine->i915;
2772 struct intel_engine_cs *signaller;
2773 enum intel_engine_id id;
2774
2775 if (INTEL_GEN(dev_priv) >= 8) {
2776 for_each_engine(signaller, dev_priv, id) {
2777 if (engine == signaller)
2778 continue;
2779
2780 if (offset == signaller->semaphore.signal_ggtt[engine->hw_id])
2781 return signaller;
2782 }
2783 } else {
2784 u32 sync_bits = ipehr & MI_SEMAPHORE_SYNC_MASK;
2785
2786 for_each_engine(signaller, dev_priv, id) {
2787 if(engine == signaller)
2788 continue;
2789
2790 if (sync_bits == signaller->semaphore.mbox.wait[engine->hw_id])
2791 return signaller;
2792 }
2793 }
2794
2795 DRM_DEBUG_DRIVER("No signaller ring found for %s, ipehr 0x%08x, offset 0x%016llx\n",
2796 engine->name, ipehr, offset);
2797
2798 return ERR_PTR(-ENODEV);
2799}
2800
2801static struct intel_engine_cs *
2802semaphore_waits_for(struct intel_engine_cs *engine, u32 *seqno)
2803{
2804 struct drm_i915_private *dev_priv = engine->i915;
2805 void __iomem *vaddr;
2806 u32 cmd, ipehr, head;
2807 u64 offset = 0;
2808 int i, backwards;
2809
2810 /*
2811 * This function does not support execlist mode - any attempt to
2812 * proceed further into this function will result in a kernel panic
2813 * when dereferencing ring->buffer, which is not set up in execlist
2814 * mode.
2815 *
2816 * The correct way of doing it would be to derive the currently
2817 * executing ring buffer from the current context, which is derived
2818 * from the currently running request. Unfortunately, to get the
2819 * current request we would have to grab the struct_mutex before doing
2820 * anything else, which would be ill-advised since some other thread
2821 * might have grabbed it already and managed to hang itself, causing
2822 * the hang checker to deadlock.
2823 *
2824 * Therefore, this function does not support execlist mode in its
2825 * current form. Just return NULL and move on.
2826 */
2827 if (engine->buffer == NULL)
2828 return NULL;
2829
2830 ipehr = I915_READ(RING_IPEHR(engine->mmio_base));
2831 if (!ipehr_is_semaphore_wait(engine, ipehr))
2832 return NULL;
2833
2834 /*
2835 * HEAD is likely pointing to the dword after the actual command,
2836 * so scan backwards until we find the MBOX. But limit it to just 3
2837 * or 4 dwords depending on the semaphore wait command size.
2838 * Note that we don't care about ACTHD here since that might
2839 * point at at batch, and semaphores are always emitted into the
2840 * ringbuffer itself.
2841 */
2842 head = I915_READ_HEAD(engine) & HEAD_ADDR;
2843 backwards = (INTEL_GEN(dev_priv) >= 8) ? 5 : 4;
2844 vaddr = (void __iomem *)engine->buffer->vaddr;
2845
2846 for (i = backwards; i; --i) {
2847 /*
2848 * Be paranoid and presume the hw has gone off into the wild -
2849 * our ring is smaller than what the hardware (and hence
2850 * HEAD_ADDR) allows. Also handles wrap-around.
2851 */
2852 head &= engine->buffer->size - 1;
2853
2854 /* This here seems to blow up */
2855 cmd = ioread32(vaddr + head);
2856 if (cmd == ipehr)
2857 break;
2858
2859 head -= 4;
2860 }
2861
2862 if (!i)
2863 return NULL;
2864
2865 *seqno = ioread32(vaddr + head + 4) + 1;
2866 if (INTEL_GEN(dev_priv) >= 8) {
2867 offset = ioread32(vaddr + head + 12);
2868 offset <<= 32;
2869 offset |= ioread32(vaddr + head + 8);
2870 }
2871 return semaphore_wait_to_signaller_ring(engine, ipehr, offset);
2872}
2873
2874static int semaphore_passed(struct intel_engine_cs *engine)
2875{
2876 struct drm_i915_private *dev_priv = engine->i915;
2877 struct intel_engine_cs *signaller;
2878 u32 seqno;
2879
2880 engine->hangcheck.deadlock++;
2881
2882 signaller = semaphore_waits_for(engine, &seqno);
2883 if (signaller == NULL)
2884 return -1;
2885
2886 if (IS_ERR(signaller))
2887 return 0;
2888
2889 /* Prevent pathological recursion due to driver bugs */
2890 if (signaller->hangcheck.deadlock >= I915_NUM_ENGINES)
2891 return -1;
2892
2893 if (i915_seqno_passed(intel_engine_get_seqno(signaller), seqno))
2894 return 1;
2895
2896 /* cursory check for an unkickable deadlock */
2897 if (I915_READ_CTL(signaller) & RING_WAIT_SEMAPHORE &&
2898 semaphore_passed(signaller) < 0)
2899 return -1;
2900
2901 return 0;
2902}
2903
2904static void semaphore_clear_deadlocks(struct drm_i915_private *dev_priv)
2905{
2906 struct intel_engine_cs *engine;
2907 enum intel_engine_id id;
2908
2909 for_each_engine(engine, dev_priv, id)
2910 engine->hangcheck.deadlock = 0;
2911}
2912
2913static bool instdone_unchanged(u32 current_instdone, u32 *old_instdone)
2914{
2915 u32 tmp = current_instdone | *old_instdone;
2916 bool unchanged;
2917
2918 unchanged = tmp == *old_instdone;
2919 *old_instdone |= tmp;
2920
2921 return unchanged;
2922}
2923
2924static bool subunits_stuck(struct intel_engine_cs *engine)
2925{
2926 struct drm_i915_private *dev_priv = engine->i915;
2927 struct intel_instdone instdone;
2928 struct intel_instdone *accu_instdone = &engine->hangcheck.instdone;
2929 bool stuck;
2930 int slice;
2931 int subslice;
2932
2933 if (engine->id != RCS)
2934 return true;
2935
2936 intel_engine_get_instdone(engine, &instdone);
2937
2938 /* There might be unstable subunit states even when
2939 * actual head is not moving. Filter out the unstable ones by
2940 * accumulating the undone -> done transitions and only
2941 * consider those as progress.
2942 */
2943 stuck = instdone_unchanged(instdone.instdone,
2944 &accu_instdone->instdone);
2945 stuck &= instdone_unchanged(instdone.slice_common,
2946 &accu_instdone->slice_common);
2947
2948 for_each_instdone_slice_subslice(dev_priv, slice, subslice) {
2949 stuck &= instdone_unchanged(instdone.sampler[slice][subslice],
2950 &accu_instdone->sampler[slice][subslice]);
2951 stuck &= instdone_unchanged(instdone.row[slice][subslice],
2952 &accu_instdone->row[slice][subslice]);
2953 }
2954
2955 return stuck;
2956}
2957
2958static enum intel_engine_hangcheck_action
2959head_stuck(struct intel_engine_cs *engine, u64 acthd)
2960{
2961 if (acthd != engine->hangcheck.acthd) {
2962
2963 /* Clear subunit states on head movement */
2964 memset(&engine->hangcheck.instdone, 0,
2965 sizeof(engine->hangcheck.instdone));
2966
2967 return HANGCHECK_ACTIVE;
2968 }
2969
2970 if (!subunits_stuck(engine))
2971 return HANGCHECK_ACTIVE;
2972
2973 return HANGCHECK_HUNG;
2974}
2975
2976static enum intel_engine_hangcheck_action
2977engine_stuck(struct intel_engine_cs *engine, u64 acthd)
2978{
2979 struct drm_i915_private *dev_priv = engine->i915;
2980 enum intel_engine_hangcheck_action ha;
2981 u32 tmp;
2982
2983 ha = head_stuck(engine, acthd);
2984 if (ha != HANGCHECK_HUNG)
2985 return ha;
2986
2987 if (IS_GEN2(dev_priv))
2988 return HANGCHECK_HUNG;
2989
2990 /* Is the chip hanging on a WAIT_FOR_EVENT?
2991 * If so we can simply poke the RB_WAIT bit
2992 * and break the hang. This should work on
2993 * all but the second generation chipsets.
2994 */
2995 tmp = I915_READ_CTL(engine);
2996 if (tmp & RING_WAIT) {
2997 i915_handle_error(dev_priv, 0,
2998 "Kicking stuck wait on %s",
2999 engine->name);
3000 I915_WRITE_CTL(engine, tmp);
3001 return HANGCHECK_KICK;
3002 }
3003
3004 if (INTEL_GEN(dev_priv) >= 6 && tmp & RING_WAIT_SEMAPHORE) {
3005 switch (semaphore_passed(engine)) {
3006 default:
3007 return HANGCHECK_HUNG;
3008 case 1:
3009 i915_handle_error(dev_priv, 0,
3010 "Kicking stuck semaphore on %s",
3011 engine->name);
3012 I915_WRITE_CTL(engine, tmp);
3013 return HANGCHECK_KICK;
3014 case 0:
3015 return HANGCHECK_WAIT;
3016 }
3017 }
3018
3019 return HANGCHECK_HUNG;
3020}
3021
3022/*
3023 * This is called when the chip hasn't reported back with completed
3024 * batchbuffers in a long time. We keep track per ring seqno progress and
3025 * if there are no progress, hangcheck score for that ring is increased.
3026 * Further, acthd is inspected to see if the ring is stuck. On stuck case
3027 * we kick the ring. If we see no progress on three subsequent calls
3028 * we assume chip is wedged and try to fix it by resetting the chip.
3029 */
3030static void i915_hangcheck_elapsed(struct work_struct *work)
3031{
3032 struct drm_i915_private *dev_priv =
3033 container_of(work, typeof(*dev_priv),
3034 gpu_error.hangcheck_work.work);
3035 struct intel_engine_cs *engine;
3036 enum intel_engine_id id;
3037 unsigned int hung = 0, stuck = 0;
3038 int busy_count = 0;
3039#define BUSY 1
3040#define KICK 5
3041#define HUNG 20
3042#define ACTIVE_DECAY 15
3043
3044 if (!i915.enable_hangcheck)
3045 return;
3046
3047 if (!READ_ONCE(dev_priv->gt.awake))
3048 return;
3049
3050 /* As enabling the GPU requires fairly extensive mmio access,
3051 * periodically arm the mmio checker to see if we are triggering
3052 * any invalid access.
3053 */
3054 intel_uncore_arm_unclaimed_mmio_detection(dev_priv);
3055
3056 for_each_engine(engine, dev_priv, id) {
3057 bool busy = intel_engine_has_waiter(engine);
3058 u64 acthd;
3059 u32 seqno;
3060 u32 submit;
3061
3062 semaphore_clear_deadlocks(dev_priv);
3063
3064 /* We don't strictly need an irq-barrier here, as we are not
3065 * serving an interrupt request, be paranoid in case the
3066 * barrier has side-effects (such as preventing a broken
3067 * cacheline snoop) and so be sure that we can see the seqno
3068 * advance. If the seqno should stick, due to a stale
3069 * cacheline, we would erroneously declare the GPU hung.
3070 */
3071 if (engine->irq_seqno_barrier)
3072 engine->irq_seqno_barrier(engine);
3073
3074 acthd = intel_engine_get_active_head(engine);
3075 seqno = intel_engine_get_seqno(engine);
3076 submit = READ_ONCE(engine->last_submitted_seqno);
3077
3078 if (engine->hangcheck.seqno == seqno) {
3079 if (i915_seqno_passed(seqno, submit)) {
3080 engine->hangcheck.action = HANGCHECK_IDLE;
3081 } else {
3082 /* We always increment the hangcheck score
3083 * if the engine is busy and still processing
3084 * the same request, so that no single request
3085 * can run indefinitely (such as a chain of
3086 * batches). The only time we do not increment
3087 * the hangcheck score on this ring, if this
3088 * engine is in a legitimate wait for another
3089 * engine. In that case the waiting engine is a
3090 * victim and we want to be sure we catch the
3091 * right culprit. Then every time we do kick
3092 * the ring, add a small increment to the
3093 * score so that we can catch a batch that is
3094 * being repeatedly kicked and so responsible
3095 * for stalling the machine.
3096 */
3097 engine->hangcheck.action =
3098 engine_stuck(engine, acthd);
3099
3100 switch (engine->hangcheck.action) {
3101 case HANGCHECK_IDLE:
3102 case HANGCHECK_WAIT:
3103 break;
3104 case HANGCHECK_ACTIVE:
3105 engine->hangcheck.score += BUSY;
3106 break;
3107 case HANGCHECK_KICK:
3108 engine->hangcheck.score += KICK;
3109 break;
3110 case HANGCHECK_HUNG:
3111 engine->hangcheck.score += HUNG;
3112 break;
3113 }
3114 }
3115
3116 if (engine->hangcheck.score >= HANGCHECK_SCORE_RING_HUNG) {
3117 hung |= intel_engine_flag(engine);
3118 if (engine->hangcheck.action != HANGCHECK_HUNG)
3119 stuck |= intel_engine_flag(engine);
3120 }
3121 } else {
3122 engine->hangcheck.action = HANGCHECK_ACTIVE;
3123
3124 /* Gradually reduce the count so that we catch DoS
3125 * attempts across multiple batches.
3126 */
3127 if (engine->hangcheck.score > 0)
3128 engine->hangcheck.score -= ACTIVE_DECAY;
3129 if (engine->hangcheck.score < 0)
3130 engine->hangcheck.score = 0;
3131
3132 /* Clear head and subunit states on seqno movement */
3133 acthd = 0;
3134
3135 memset(&engine->hangcheck.instdone, 0,
3136 sizeof(engine->hangcheck.instdone));
3137 }
3138
3139 engine->hangcheck.seqno = seqno;
3140 engine->hangcheck.acthd = acthd;
3141 busy_count += busy;
3142 }
3143
3144 if (hung) {
3145 char msg[80];
3146 unsigned int tmp;
3147 int len;
3148
3149 /* If some rings hung but others were still busy, only
3150 * blame the hanging rings in the synopsis.
3151 */
3152 if (stuck != hung)
3153 hung &= ~stuck;
3154 len = scnprintf(msg, sizeof(msg),
3155 "%s on ", stuck == hung ? "No progress" : "Hang");
3156 for_each_engine_masked(engine, dev_priv, hung, tmp)
3157 len += scnprintf(msg + len, sizeof(msg) - len,
3158 "%s, ", engine->name);
3159 msg[len-2] = '\0';
3160
3161 return i915_handle_error(dev_priv, hung, msg);
3162 }
3163
3164 /* Reset timer in case GPU hangs without another request being added */
3165 if (busy_count)
3166 i915_queue_hangcheck(dev_priv);
3167}
3168
3169static void ibx_irq_reset(struct drm_device *dev) 2851static void ibx_irq_reset(struct drm_device *dev)
3170{ 2852{
3171 struct drm_i915_private *dev_priv = to_i915(dev); 2853 struct drm_i915_private *dev_priv = to_i915(dev);
@@ -3545,11 +3227,13 @@ static void gen5_gt_irq_postinstall(struct drm_device *dev)
3545 * RPS interrupts will get enabled/disabled on demand when RPS 3227 * RPS interrupts will get enabled/disabled on demand when RPS
3546 * itself is enabled/disabled. 3228 * itself is enabled/disabled.
3547 */ 3229 */
3548 if (HAS_VEBOX(dev)) 3230 if (HAS_VEBOX(dev_priv)) {
3549 pm_irqs |= PM_VEBOX_USER_INTERRUPT; 3231 pm_irqs |= PM_VEBOX_USER_INTERRUPT;
3232 dev_priv->pm_ier |= PM_VEBOX_USER_INTERRUPT;
3233 }
3550 3234
3551 dev_priv->pm_irq_mask = 0xffffffff; 3235 dev_priv->pm_imr = 0xffffffff;
3552 GEN5_IRQ_INIT(GEN6_PM, dev_priv->pm_irq_mask, pm_irqs); 3236 GEN5_IRQ_INIT(GEN6_PM, dev_priv->pm_imr, pm_irqs);
3553 } 3237 }
3554} 3238}
3555 3239
@@ -3669,14 +3353,15 @@ static void gen8_gt_irq_postinstall(struct drm_i915_private *dev_priv)
3669 if (HAS_L3_DPF(dev_priv)) 3353 if (HAS_L3_DPF(dev_priv))
3670 gt_interrupts[0] |= GT_RENDER_L3_PARITY_ERROR_INTERRUPT; 3354 gt_interrupts[0] |= GT_RENDER_L3_PARITY_ERROR_INTERRUPT;
3671 3355
3672 dev_priv->pm_irq_mask = 0xffffffff; 3356 dev_priv->pm_ier = 0x0;
3357 dev_priv->pm_imr = ~dev_priv->pm_ier;
3673 GEN8_IRQ_INIT_NDX(GT, 0, ~gt_interrupts[0], gt_interrupts[0]); 3358 GEN8_IRQ_INIT_NDX(GT, 0, ~gt_interrupts[0], gt_interrupts[0]);
3674 GEN8_IRQ_INIT_NDX(GT, 1, ~gt_interrupts[1], gt_interrupts[1]); 3359 GEN8_IRQ_INIT_NDX(GT, 1, ~gt_interrupts[1], gt_interrupts[1]);
3675 /* 3360 /*
3676 * RPS interrupts will get enabled/disabled on demand when RPS itself 3361 * RPS interrupts will get enabled/disabled on demand when RPS itself
3677 * is enabled/disabled. 3362 * is enabled/disabled. Same wil be the case for GuC interrupts.
3678 */ 3363 */
3679 GEN8_IRQ_INIT_NDX(GT, 2, dev_priv->pm_irq_mask, 0); 3364 GEN8_IRQ_INIT_NDX(GT, 2, dev_priv->pm_imr, dev_priv->pm_ier);
3680 GEN8_IRQ_INIT_NDX(GT, 3, ~gt_interrupts[3], gt_interrupts[3]); 3365 GEN8_IRQ_INIT_NDX(GT, 3, ~gt_interrupts[3], gt_interrupts[3]);
3681} 3366}
3682 3367
@@ -4460,6 +4145,9 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
4460 INIT_WORK(&dev_priv->rps.work, gen6_pm_rps_work); 4145 INIT_WORK(&dev_priv->rps.work, gen6_pm_rps_work);
4461 INIT_WORK(&dev_priv->l3_parity.error_work, ivybridge_parity_work); 4146 INIT_WORK(&dev_priv->l3_parity.error_work, ivybridge_parity_work);
4462 4147
4148 if (HAS_GUC_SCHED(dev))
4149 dev_priv->pm_guc_events = GEN9_GUC_TO_HOST_INT_EVENT;
4150
4463 /* Let's track the enabled rps events */ 4151 /* Let's track the enabled rps events */
4464 if (IS_VALLEYVIEW(dev_priv)) 4152 if (IS_VALLEYVIEW(dev_priv))
4465 /* WaGsvRC0ResidencyMethod:vlv */ 4153 /* WaGsvRC0ResidencyMethod:vlv */
@@ -4481,9 +4169,6 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
4481 if (INTEL_INFO(dev_priv)->gen >= 8) 4169 if (INTEL_INFO(dev_priv)->gen >= 8)
4482 dev_priv->rps.pm_intr_keep |= GEN8_PMINTR_REDIRECT_TO_GUC; 4170 dev_priv->rps.pm_intr_keep |= GEN8_PMINTR_REDIRECT_TO_GUC;
4483 4171
4484 INIT_DELAYED_WORK(&dev_priv->gpu_error.hangcheck_work,
4485 i915_hangcheck_elapsed);
4486
4487 if (IS_GEN2(dev_priv)) { 4172 if (IS_GEN2(dev_priv)) {
4488 /* Gen2 doesn't have a hardware frame counter */ 4173 /* Gen2 doesn't have a hardware frame counter */
4489 dev->max_vblank_count = 0; 4174 dev->max_vblank_count = 0;
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 31e6edd08dd0..2a419500b81a 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -288,7 +288,8 @@ static const struct intel_device_info intel_haswell_info = {
288#define BDW_FEATURES \ 288#define BDW_FEATURES \
289 HSW_FEATURES, \ 289 HSW_FEATURES, \
290 BDW_COLORS, \ 290 BDW_COLORS, \
291 .has_logical_ring_contexts = 1 291 .has_logical_ring_contexts = 1, \
292 .has_64bit_reloc = 1
292 293
293static const struct intel_device_info intel_broadwell_info = { 294static const struct intel_device_info intel_broadwell_info = {
294 BDW_FEATURES, 295 BDW_FEATURES,
@@ -308,6 +309,7 @@ static const struct intel_device_info intel_cherryview_info = {
308 .has_hotplug = 1, 309 .has_hotplug = 1,
309 .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, 310 .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
310 .is_cherryview = 1, 311 .is_cherryview = 1,
312 .has_64bit_reloc = 1,
311 .has_psr = 1, 313 .has_psr = 1,
312 .has_runtime_pm = 1, 314 .has_runtime_pm = 1,
313 .has_resource_streamer = 1, 315 .has_resource_streamer = 1,
@@ -347,6 +349,7 @@ static const struct intel_device_info intel_broxton_info = {
347 .has_hotplug = 1, 349 .has_hotplug = 1,
348 .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, 350 .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
349 .num_pipes = 3, 351 .num_pipes = 3,
352 .has_64bit_reloc = 1,
350 .has_ddi = 1, 353 .has_ddi = 1,
351 .has_fpga_dbg = 1, 354 .has_fpga_dbg = 1,
352 .has_fbc = 1, 355 .has_fbc = 1,
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 00efaa13974d..3361d7ffc63e 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -830,96 +830,7 @@ enum skl_disp_power_wells {
830#define CCK_FREQUENCY_STATUS_SHIFT 8 830#define CCK_FREQUENCY_STATUS_SHIFT 8
831#define CCK_FREQUENCY_VALUES (0x1f << 0) 831#define CCK_FREQUENCY_VALUES (0x1f << 0)
832 832
833/** 833/* DPIO registers */
834 * DOC: DPIO
835 *
836 * VLV, CHV and BXT have slightly peculiar display PHYs for driving DP/HDMI
837 * ports. DPIO is the name given to such a display PHY. These PHYs
838 * don't follow the standard programming model using direct MMIO
839 * registers, and instead their registers must be accessed trough IOSF
840 * sideband. VLV has one such PHY for driving ports B and C, and CHV
841 * adds another PHY for driving port D. Each PHY responds to specific
842 * IOSF-SB port.
843 *
844 * Each display PHY is made up of one or two channels. Each channel
845 * houses a common lane part which contains the PLL and other common
846 * logic. CH0 common lane also contains the IOSF-SB logic for the
847 * Common Register Interface (CRI) ie. the DPIO registers. CRI clock
848 * must be running when any DPIO registers are accessed.
849 *
850 * In addition to having their own registers, the PHYs are also
851 * controlled through some dedicated signals from the display
852 * controller. These include PLL reference clock enable, PLL enable,
853 * and CRI clock selection, for example.
854 *
855 * Eeach channel also has two splines (also called data lanes), and
856 * each spline is made up of one Physical Access Coding Sub-Layer
857 * (PCS) block and two TX lanes. So each channel has two PCS blocks
858 * and four TX lanes. The TX lanes are used as DP lanes or TMDS
859 * data/clock pairs depending on the output type.
860 *
861 * Additionally the PHY also contains an AUX lane with AUX blocks
862 * for each channel. This is used for DP AUX communication, but
863 * this fact isn't really relevant for the driver since AUX is
864 * controlled from the display controller side. No DPIO registers
865 * need to be accessed during AUX communication,
866 *
867 * Generally on VLV/CHV the common lane corresponds to the pipe and
868 * the spline (PCS/TX) corresponds to the port.
869 *
870 * For dual channel PHY (VLV/CHV):
871 *
872 * pipe A == CMN/PLL/REF CH0
873 *
874 * pipe B == CMN/PLL/REF CH1
875 *
876 * port B == PCS/TX CH0
877 *
878 * port C == PCS/TX CH1
879 *
880 * This is especially important when we cross the streams
881 * ie. drive port B with pipe B, or port C with pipe A.
882 *
883 * For single channel PHY (CHV):
884 *
885 * pipe C == CMN/PLL/REF CH0
886 *
887 * port D == PCS/TX CH0
888 *
889 * On BXT the entire PHY channel corresponds to the port. That means
890 * the PLL is also now associated with the port rather than the pipe,
891 * and so the clock needs to be routed to the appropriate transcoder.
892 * Port A PLL is directly connected to transcoder EDP and port B/C
893 * PLLs can be routed to any transcoder A/B/C.
894 *
895 * Note: DDI0 is digital port B, DD1 is digital port C, and DDI2 is
896 * digital port D (CHV) or port A (BXT). ::
897 *
898 *
899 * Dual channel PHY (VLV/CHV/BXT)
900 * ---------------------------------
901 * | CH0 | CH1 |
902 * | CMN/PLL/REF | CMN/PLL/REF |
903 * |---------------|---------------| Display PHY
904 * | PCS01 | PCS23 | PCS01 | PCS23 |
905 * |-------|-------|-------|-------|
906 * |TX0|TX1|TX2|TX3|TX0|TX1|TX2|TX3|
907 * ---------------------------------
908 * | DDI0 | DDI1 | DP/HDMI ports
909 * ---------------------------------
910 *
911 * Single channel PHY (CHV/BXT)
912 * -----------------
913 * | CH0 |
914 * | CMN/PLL/REF |
915 * |---------------| Display PHY
916 * | PCS01 | PCS23 |
917 * |-------|-------|
918 * |TX0|TX1|TX2|TX3|
919 * -----------------
920 * | DDI2 | DP/HDMI port
921 * -----------------
922 */
923#define DPIO_DEVFN 0 834#define DPIO_DEVFN 0
924 835
925#define DPIO_CTL _MMIO(VLV_DISPLAY_BASE + 0x2110) 836#define DPIO_CTL _MMIO(VLV_DISPLAY_BASE + 0x2110)
@@ -1275,7 +1186,19 @@ enum skl_disp_power_wells {
1275#define DPIO_UPAR_SHIFT 30 1186#define DPIO_UPAR_SHIFT 30
1276 1187
1277/* BXT PHY registers */ 1188/* BXT PHY registers */
1278#define _BXT_PHY(phy, a, b) _MMIO_PIPE((phy), (a), (b)) 1189#define _BXT_PHY0_BASE 0x6C000
1190#define _BXT_PHY1_BASE 0x162000
1191#define BXT_PHY_BASE(phy) _PIPE((phy), _BXT_PHY0_BASE, \
1192 _BXT_PHY1_BASE)
1193
1194#define _BXT_PHY(phy, reg) \
1195 _MMIO(BXT_PHY_BASE(phy) - _BXT_PHY0_BASE + (reg))
1196
1197#define _BXT_PHY_CH(phy, ch, reg_ch0, reg_ch1) \
1198 (BXT_PHY_BASE(phy) + _PIPE((ch), (reg_ch0) - _BXT_PHY0_BASE, \
1199 (reg_ch1) - _BXT_PHY0_BASE))
1200#define _MMIO_BXT_PHY_CH(phy, ch, reg_ch0, reg_ch1) \
1201 _MMIO(_BXT_PHY_CH(phy, ch, reg_ch0, reg_ch1))
1279 1202
1280#define BXT_P_CR_GT_DISP_PWRON _MMIO(0x138090) 1203#define BXT_P_CR_GT_DISP_PWRON _MMIO(0x138090)
1281#define GT_DISPLAY_POWER_ON(phy) (1 << (phy)) 1204#define GT_DISPLAY_POWER_ON(phy) (1 << (phy))
@@ -1292,8 +1215,8 @@ enum skl_disp_power_wells {
1292#define _PHY_CTL_FAMILY_EDP 0x64C80 1215#define _PHY_CTL_FAMILY_EDP 0x64C80
1293#define _PHY_CTL_FAMILY_DDI 0x64C90 1216#define _PHY_CTL_FAMILY_DDI 0x64C90
1294#define COMMON_RESET_DIS (1 << 31) 1217#define COMMON_RESET_DIS (1 << 31)
1295#define BXT_PHY_CTL_FAMILY(phy) _BXT_PHY((phy), _PHY_CTL_FAMILY_DDI, \ 1218#define BXT_PHY_CTL_FAMILY(phy) _MMIO_PIPE((phy), _PHY_CTL_FAMILY_DDI, \
1296 _PHY_CTL_FAMILY_EDP) 1219 _PHY_CTL_FAMILY_EDP)
1297 1220
1298/* BXT PHY PLL registers */ 1221/* BXT PHY PLL registers */
1299#define _PORT_PLL_A 0x46074 1222#define _PORT_PLL_A 0x46074
@@ -1313,18 +1236,18 @@ enum skl_disp_power_wells {
1313#define PORT_PLL_P2_SHIFT 8 1236#define PORT_PLL_P2_SHIFT 8
1314#define PORT_PLL_P2_MASK (0x1f << PORT_PLL_P2_SHIFT) 1237#define PORT_PLL_P2_MASK (0x1f << PORT_PLL_P2_SHIFT)
1315#define PORT_PLL_P2(x) ((x) << PORT_PLL_P2_SHIFT) 1238#define PORT_PLL_P2(x) ((x) << PORT_PLL_P2_SHIFT)
1316#define BXT_PORT_PLL_EBB_0(port) _MMIO_PORT3(port, _PORT_PLL_EBB_0_A, \ 1239#define BXT_PORT_PLL_EBB_0(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1317 _PORT_PLL_EBB_0_B, \ 1240 _PORT_PLL_EBB_0_B, \
1318 _PORT_PLL_EBB_0_C) 1241 _PORT_PLL_EBB_0_C)
1319 1242
1320#define _PORT_PLL_EBB_4_A 0x162038 1243#define _PORT_PLL_EBB_4_A 0x162038
1321#define _PORT_PLL_EBB_4_B 0x6C038 1244#define _PORT_PLL_EBB_4_B 0x6C038
1322#define _PORT_PLL_EBB_4_C 0x6C344 1245#define _PORT_PLL_EBB_4_C 0x6C344
1323#define PORT_PLL_10BIT_CLK_ENABLE (1 << 13) 1246#define PORT_PLL_10BIT_CLK_ENABLE (1 << 13)
1324#define PORT_PLL_RECALIBRATE (1 << 14) 1247#define PORT_PLL_RECALIBRATE (1 << 14)
1325#define BXT_PORT_PLL_EBB_4(port) _MMIO_PORT3(port, _PORT_PLL_EBB_4_A, \ 1248#define BXT_PORT_PLL_EBB_4(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1326 _PORT_PLL_EBB_4_B, \ 1249 _PORT_PLL_EBB_4_B, \
1327 _PORT_PLL_EBB_4_C) 1250 _PORT_PLL_EBB_4_C)
1328 1251
1329#define _PORT_PLL_0_A 0x162100 1252#define _PORT_PLL_0_A 0x162100
1330#define _PORT_PLL_0_B 0x6C100 1253#define _PORT_PLL_0_B 0x6C100
@@ -1355,57 +1278,56 @@ enum skl_disp_power_wells {
1355#define PORT_PLL_DCO_AMP_DEFAULT 15 1278#define PORT_PLL_DCO_AMP_DEFAULT 15
1356#define PORT_PLL_DCO_AMP_MASK 0x3c00 1279#define PORT_PLL_DCO_AMP_MASK 0x3c00
1357#define PORT_PLL_DCO_AMP(x) ((x)<<10) 1280#define PORT_PLL_DCO_AMP(x) ((x)<<10)
1358#define _PORT_PLL_BASE(port) _PORT3(port, _PORT_PLL_0_A, \ 1281#define _PORT_PLL_BASE(phy, ch) _BXT_PHY_CH(phy, ch, \
1359 _PORT_PLL_0_B, \ 1282 _PORT_PLL_0_B, \
1360 _PORT_PLL_0_C) 1283 _PORT_PLL_0_C)
1361#define BXT_PORT_PLL(port, idx) _MMIO(_PORT_PLL_BASE(port) + (idx) * 4) 1284#define BXT_PORT_PLL(phy, ch, idx) _MMIO(_PORT_PLL_BASE(phy, ch) + \
1285 (idx) * 4)
1362 1286
1363/* BXT PHY common lane registers */ 1287/* BXT PHY common lane registers */
1364#define _PORT_CL1CM_DW0_A 0x162000 1288#define _PORT_CL1CM_DW0_A 0x162000
1365#define _PORT_CL1CM_DW0_BC 0x6C000 1289#define _PORT_CL1CM_DW0_BC 0x6C000
1366#define PHY_POWER_GOOD (1 << 16) 1290#define PHY_POWER_GOOD (1 << 16)
1367#define PHY_RESERVED (1 << 7) 1291#define PHY_RESERVED (1 << 7)
1368#define BXT_PORT_CL1CM_DW0(phy) _BXT_PHY((phy), _PORT_CL1CM_DW0_BC, \ 1292#define BXT_PORT_CL1CM_DW0(phy) _BXT_PHY((phy), _PORT_CL1CM_DW0_BC)
1369 _PORT_CL1CM_DW0_A)
1370 1293
1371#define _PORT_CL1CM_DW9_A 0x162024 1294#define _PORT_CL1CM_DW9_A 0x162024
1372#define _PORT_CL1CM_DW9_BC 0x6C024 1295#define _PORT_CL1CM_DW9_BC 0x6C024
1373#define IREF0RC_OFFSET_SHIFT 8 1296#define IREF0RC_OFFSET_SHIFT 8
1374#define IREF0RC_OFFSET_MASK (0xFF << IREF0RC_OFFSET_SHIFT) 1297#define IREF0RC_OFFSET_MASK (0xFF << IREF0RC_OFFSET_SHIFT)
1375#define BXT_PORT_CL1CM_DW9(phy) _BXT_PHY((phy), _PORT_CL1CM_DW9_BC, \ 1298#define BXT_PORT_CL1CM_DW9(phy) _BXT_PHY((phy), _PORT_CL1CM_DW9_BC)
1376 _PORT_CL1CM_DW9_A)
1377 1299
1378#define _PORT_CL1CM_DW10_A 0x162028 1300#define _PORT_CL1CM_DW10_A 0x162028
1379#define _PORT_CL1CM_DW10_BC 0x6C028 1301#define _PORT_CL1CM_DW10_BC 0x6C028
1380#define IREF1RC_OFFSET_SHIFT 8 1302#define IREF1RC_OFFSET_SHIFT 8
1381#define IREF1RC_OFFSET_MASK (0xFF << IREF1RC_OFFSET_SHIFT) 1303#define IREF1RC_OFFSET_MASK (0xFF << IREF1RC_OFFSET_SHIFT)
1382#define BXT_PORT_CL1CM_DW10(phy) _BXT_PHY((phy), _PORT_CL1CM_DW10_BC, \ 1304#define BXT_PORT_CL1CM_DW10(phy) _BXT_PHY((phy), _PORT_CL1CM_DW10_BC)
1383 _PORT_CL1CM_DW10_A)
1384 1305
1385#define _PORT_CL1CM_DW28_A 0x162070 1306#define _PORT_CL1CM_DW28_A 0x162070
1386#define _PORT_CL1CM_DW28_BC 0x6C070 1307#define _PORT_CL1CM_DW28_BC 0x6C070
1387#define OCL1_POWER_DOWN_EN (1 << 23) 1308#define OCL1_POWER_DOWN_EN (1 << 23)
1388#define DW28_OLDO_DYN_PWR_DOWN_EN (1 << 22) 1309#define DW28_OLDO_DYN_PWR_DOWN_EN (1 << 22)
1389#define SUS_CLK_CONFIG 0x3 1310#define SUS_CLK_CONFIG 0x3
1390#define BXT_PORT_CL1CM_DW28(phy) _BXT_PHY((phy), _PORT_CL1CM_DW28_BC, \ 1311#define BXT_PORT_CL1CM_DW28(phy) _BXT_PHY((phy), _PORT_CL1CM_DW28_BC)
1391 _PORT_CL1CM_DW28_A)
1392 1312
1393#define _PORT_CL1CM_DW30_A 0x162078 1313#define _PORT_CL1CM_DW30_A 0x162078
1394#define _PORT_CL1CM_DW30_BC 0x6C078 1314#define _PORT_CL1CM_DW30_BC 0x6C078
1395#define OCL2_LDOFUSE_PWR_DIS (1 << 6) 1315#define OCL2_LDOFUSE_PWR_DIS (1 << 6)
1396#define BXT_PORT_CL1CM_DW30(phy) _BXT_PHY((phy), _PORT_CL1CM_DW30_BC, \ 1316#define BXT_PORT_CL1CM_DW30(phy) _BXT_PHY((phy), _PORT_CL1CM_DW30_BC)
1397 _PORT_CL1CM_DW30_A)
1398 1317
1399/* Defined for PHY0 only */ 1318/* The spec defines this only for BXT PHY0, but lets assume that this
1400#define BXT_PORT_CL2CM_DW6_BC _MMIO(0x6C358) 1319 * would exist for PHY1 too if it had a second channel.
1320 */
1321#define _PORT_CL2CM_DW6_A 0x162358
1322#define _PORT_CL2CM_DW6_BC 0x6C358
1323#define BXT_PORT_CL2CM_DW6(phy) _BXT_PHY((phy), _PORT_CL2CM_DW6_BC)
1401#define DW6_OLDO_DYN_PWR_DOWN_EN (1 << 28) 1324#define DW6_OLDO_DYN_PWR_DOWN_EN (1 << 28)
1402 1325
1403/* BXT PHY Ref registers */ 1326/* BXT PHY Ref registers */
1404#define _PORT_REF_DW3_A 0x16218C 1327#define _PORT_REF_DW3_A 0x16218C
1405#define _PORT_REF_DW3_BC 0x6C18C 1328#define _PORT_REF_DW3_BC 0x6C18C
1406#define GRC_DONE (1 << 22) 1329#define GRC_DONE (1 << 22)
1407#define BXT_PORT_REF_DW3(phy) _BXT_PHY((phy), _PORT_REF_DW3_BC, \ 1330#define BXT_PORT_REF_DW3(phy) _BXT_PHY((phy), _PORT_REF_DW3_BC)
1408 _PORT_REF_DW3_A)
1409 1331
1410#define _PORT_REF_DW6_A 0x162198 1332#define _PORT_REF_DW6_A 0x162198
1411#define _PORT_REF_DW6_BC 0x6C198 1333#define _PORT_REF_DW6_BC 0x6C198
@@ -1416,15 +1338,13 @@ enum skl_disp_power_wells {
1416#define GRC_CODE_SLOW_SHIFT 8 1338#define GRC_CODE_SLOW_SHIFT 8
1417#define GRC_CODE_SLOW_MASK (0xFF << GRC_CODE_SLOW_SHIFT) 1339#define GRC_CODE_SLOW_MASK (0xFF << GRC_CODE_SLOW_SHIFT)
1418#define GRC_CODE_NOM_MASK 0xFF 1340#define GRC_CODE_NOM_MASK 0xFF
1419#define BXT_PORT_REF_DW6(phy) _BXT_PHY((phy), _PORT_REF_DW6_BC, \ 1341#define BXT_PORT_REF_DW6(phy) _BXT_PHY((phy), _PORT_REF_DW6_BC)
1420 _PORT_REF_DW6_A)
1421 1342
1422#define _PORT_REF_DW8_A 0x1621A0 1343#define _PORT_REF_DW8_A 0x1621A0
1423#define _PORT_REF_DW8_BC 0x6C1A0 1344#define _PORT_REF_DW8_BC 0x6C1A0
1424#define GRC_DIS (1 << 15) 1345#define GRC_DIS (1 << 15)
1425#define GRC_RDY_OVRD (1 << 1) 1346#define GRC_RDY_OVRD (1 << 1)
1426#define BXT_PORT_REF_DW8(phy) _BXT_PHY((phy), _PORT_REF_DW8_BC, \ 1347#define BXT_PORT_REF_DW8(phy) _BXT_PHY((phy), _PORT_REF_DW8_BC)
1427 _PORT_REF_DW8_A)
1428 1348
1429/* BXT PHY PCS registers */ 1349/* BXT PHY PCS registers */
1430#define _PORT_PCS_DW10_LN01_A 0x162428 1350#define _PORT_PCS_DW10_LN01_A 0x162428
@@ -1433,12 +1353,13 @@ enum skl_disp_power_wells {
1433#define _PORT_PCS_DW10_GRP_A 0x162C28 1353#define _PORT_PCS_DW10_GRP_A 0x162C28
1434#define _PORT_PCS_DW10_GRP_B 0x6CC28 1354#define _PORT_PCS_DW10_GRP_B 0x6CC28
1435#define _PORT_PCS_DW10_GRP_C 0x6CE28 1355#define _PORT_PCS_DW10_GRP_C 0x6CE28
1436#define BXT_PORT_PCS_DW10_LN01(port) _MMIO_PORT3(port, _PORT_PCS_DW10_LN01_A, \ 1356#define BXT_PORT_PCS_DW10_LN01(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1437 _PORT_PCS_DW10_LN01_B, \ 1357 _PORT_PCS_DW10_LN01_B, \
1438 _PORT_PCS_DW10_LN01_C) 1358 _PORT_PCS_DW10_LN01_C)
1439#define BXT_PORT_PCS_DW10_GRP(port) _MMIO_PORT3(port, _PORT_PCS_DW10_GRP_A, \ 1359#define BXT_PORT_PCS_DW10_GRP(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1440 _PORT_PCS_DW10_GRP_B, \ 1360 _PORT_PCS_DW10_GRP_B, \
1441 _PORT_PCS_DW10_GRP_C) 1361 _PORT_PCS_DW10_GRP_C)
1362
1442#define TX2_SWING_CALC_INIT (1 << 31) 1363#define TX2_SWING_CALC_INIT (1 << 31)
1443#define TX1_SWING_CALC_INIT (1 << 30) 1364#define TX1_SWING_CALC_INIT (1 << 30)
1444 1365
@@ -1453,15 +1374,15 @@ enum skl_disp_power_wells {
1453#define _PORT_PCS_DW12_GRP_C 0x6CE30 1374#define _PORT_PCS_DW12_GRP_C 0x6CE30
1454#define LANESTAGGER_STRAP_OVRD (1 << 6) 1375#define LANESTAGGER_STRAP_OVRD (1 << 6)
1455#define LANE_STAGGER_MASK 0x1F 1376#define LANE_STAGGER_MASK 0x1F
1456#define BXT_PORT_PCS_DW12_LN01(port) _MMIO_PORT3(port, _PORT_PCS_DW12_LN01_A, \ 1377#define BXT_PORT_PCS_DW12_LN01(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1457 _PORT_PCS_DW12_LN01_B, \ 1378 _PORT_PCS_DW12_LN01_B, \
1458 _PORT_PCS_DW12_LN01_C) 1379 _PORT_PCS_DW12_LN01_C)
1459#define BXT_PORT_PCS_DW12_LN23(port) _MMIO_PORT3(port, _PORT_PCS_DW12_LN23_A, \ 1380#define BXT_PORT_PCS_DW12_LN23(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1460 _PORT_PCS_DW12_LN23_B, \ 1381 _PORT_PCS_DW12_LN23_B, \
1461 _PORT_PCS_DW12_LN23_C) 1382 _PORT_PCS_DW12_LN23_C)
1462#define BXT_PORT_PCS_DW12_GRP(port) _MMIO_PORT3(port, _PORT_PCS_DW12_GRP_A, \ 1383#define BXT_PORT_PCS_DW12_GRP(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1463 _PORT_PCS_DW12_GRP_B, \ 1384 _PORT_PCS_DW12_GRP_B, \
1464 _PORT_PCS_DW12_GRP_C) 1385 _PORT_PCS_DW12_GRP_C)
1465 1386
1466/* BXT PHY TX registers */ 1387/* BXT PHY TX registers */
1467#define _BXT_LANE_OFFSET(lane) (((lane) >> 1) * 0x200 + \ 1388#define _BXT_LANE_OFFSET(lane) (((lane) >> 1) * 0x200 + \
@@ -1473,12 +1394,12 @@ enum skl_disp_power_wells {
1473#define _PORT_TX_DW2_GRP_A 0x162D08 1394#define _PORT_TX_DW2_GRP_A 0x162D08
1474#define _PORT_TX_DW2_GRP_B 0x6CD08 1395#define _PORT_TX_DW2_GRP_B 0x6CD08
1475#define _PORT_TX_DW2_GRP_C 0x6CF08 1396#define _PORT_TX_DW2_GRP_C 0x6CF08
1476#define BXT_PORT_TX_DW2_GRP(port) _MMIO_PORT3(port, _PORT_TX_DW2_GRP_A, \ 1397#define BXT_PORT_TX_DW2_LN0(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1477 _PORT_TX_DW2_GRP_B, \ 1398 _PORT_TX_DW2_LN0_B, \
1478 _PORT_TX_DW2_GRP_C) 1399 _PORT_TX_DW2_LN0_C)
1479#define BXT_PORT_TX_DW2_LN0(port) _MMIO_PORT3(port, _PORT_TX_DW2_LN0_A, \ 1400#define BXT_PORT_TX_DW2_GRP(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1480 _PORT_TX_DW2_LN0_B, \ 1401 _PORT_TX_DW2_GRP_B, \
1481 _PORT_TX_DW2_LN0_C) 1402 _PORT_TX_DW2_GRP_C)
1482#define MARGIN_000_SHIFT 16 1403#define MARGIN_000_SHIFT 16
1483#define MARGIN_000 (0xFF << MARGIN_000_SHIFT) 1404#define MARGIN_000 (0xFF << MARGIN_000_SHIFT)
1484#define UNIQ_TRANS_SCALE_SHIFT 8 1405#define UNIQ_TRANS_SCALE_SHIFT 8
@@ -1490,12 +1411,12 @@ enum skl_disp_power_wells {
1490#define _PORT_TX_DW3_GRP_A 0x162D0C 1411#define _PORT_TX_DW3_GRP_A 0x162D0C
1491#define _PORT_TX_DW3_GRP_B 0x6CD0C 1412#define _PORT_TX_DW3_GRP_B 0x6CD0C
1492#define _PORT_TX_DW3_GRP_C 0x6CF0C 1413#define _PORT_TX_DW3_GRP_C 0x6CF0C
1493#define BXT_PORT_TX_DW3_GRP(port) _MMIO_PORT3(port, _PORT_TX_DW3_GRP_A, \ 1414#define BXT_PORT_TX_DW3_LN0(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1494 _PORT_TX_DW3_GRP_B, \ 1415 _PORT_TX_DW3_LN0_B, \
1495 _PORT_TX_DW3_GRP_C) 1416 _PORT_TX_DW3_LN0_C)
1496#define BXT_PORT_TX_DW3_LN0(port) _MMIO_PORT3(port, _PORT_TX_DW3_LN0_A, \ 1417#define BXT_PORT_TX_DW3_GRP(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1497 _PORT_TX_DW3_LN0_B, \ 1418 _PORT_TX_DW3_GRP_B, \
1498 _PORT_TX_DW3_LN0_C) 1419 _PORT_TX_DW3_GRP_C)
1499#define SCALE_DCOMP_METHOD (1 << 26) 1420#define SCALE_DCOMP_METHOD (1 << 26)
1500#define UNIQUE_TRANGE_EN_METHOD (1 << 27) 1421#define UNIQUE_TRANGE_EN_METHOD (1 << 27)
1501 1422
@@ -1505,12 +1426,12 @@ enum skl_disp_power_wells {
1505#define _PORT_TX_DW4_GRP_A 0x162D10 1426#define _PORT_TX_DW4_GRP_A 0x162D10
1506#define _PORT_TX_DW4_GRP_B 0x6CD10 1427#define _PORT_TX_DW4_GRP_B 0x6CD10
1507#define _PORT_TX_DW4_GRP_C 0x6CF10 1428#define _PORT_TX_DW4_GRP_C 0x6CF10
1508#define BXT_PORT_TX_DW4_LN0(port) _MMIO_PORT3(port, _PORT_TX_DW4_LN0_A, \ 1429#define BXT_PORT_TX_DW4_LN0(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1509 _PORT_TX_DW4_LN0_B, \ 1430 _PORT_TX_DW4_LN0_B, \
1510 _PORT_TX_DW4_LN0_C) 1431 _PORT_TX_DW4_LN0_C)
1511#define BXT_PORT_TX_DW4_GRP(port) _MMIO_PORT3(port, _PORT_TX_DW4_GRP_A, \ 1432#define BXT_PORT_TX_DW4_GRP(phy, ch) _MMIO_BXT_PHY_CH(phy, ch, \
1512 _PORT_TX_DW4_GRP_B, \ 1433 _PORT_TX_DW4_GRP_B, \
1513 _PORT_TX_DW4_GRP_C) 1434 _PORT_TX_DW4_GRP_C)
1514#define DEEMPH_SHIFT 24 1435#define DEEMPH_SHIFT 24
1515#define DE_EMPHASIS (0xFF << DEEMPH_SHIFT) 1436#define DE_EMPHASIS (0xFF << DEEMPH_SHIFT)
1516 1437
@@ -1519,10 +1440,10 @@ enum skl_disp_power_wells {
1519#define _PORT_TX_DW14_LN0_C 0x6C938 1440#define _PORT_TX_DW14_LN0_C 0x6C938
1520#define LATENCY_OPTIM_SHIFT 30 1441#define LATENCY_OPTIM_SHIFT 30
1521#define LATENCY_OPTIM (1 << LATENCY_OPTIM_SHIFT) 1442#define LATENCY_OPTIM (1 << LATENCY_OPTIM_SHIFT)
1522#define BXT_PORT_TX_DW14_LN(port, lane) _MMIO(_PORT3((port), _PORT_TX_DW14_LN0_A, \ 1443#define BXT_PORT_TX_DW14_LN(phy, ch, lane) \
1523 _PORT_TX_DW14_LN0_B, \ 1444 _MMIO(_BXT_PHY_CH(phy, ch, _PORT_TX_DW14_LN0_B, \
1524 _PORT_TX_DW14_LN0_C) + \ 1445 _PORT_TX_DW14_LN0_C) + \
1525 _BXT_LANE_OFFSET(lane)) 1446 _BXT_LANE_OFFSET(lane))
1526 1447
1527/* UAIMI scratch pad register 1 */ 1448/* UAIMI scratch pad register 1 */
1528#define UAIMI_SPR1 _MMIO(0x4F074) 1449#define UAIMI_SPR1 _MMIO(0x4F074)
@@ -2188,8 +2109,9 @@ enum skl_disp_power_wells {
2188#define FBC_FENCE_OFF _MMIO(0x3218) /* BSpec typo has 321Bh */ 2109#define FBC_FENCE_OFF _MMIO(0x3218) /* BSpec typo has 321Bh */
2189#define FBC_TAG(i) _MMIO(0x3300 + (i) * 4) 2110#define FBC_TAG(i) _MMIO(0x3300 + (i) * 4)
2190 2111
2191#define FBC_STATUS2 _MMIO(0x43214) 2112#define FBC_STATUS2 _MMIO(0x43214)
2192#define FBC_COMPRESSION_MASK 0x7ff 2113#define IVB_FBC_COMPRESSION_MASK 0x7ff
2114#define BDW_FBC_COMPRESSION_MASK 0xfff
2193 2115
2194#define FBC_LL_SIZE (1536) 2116#define FBC_LL_SIZE (1536)
2195 2117
@@ -6015,6 +5937,7 @@ enum {
6015#define GEN8_DE_PIPE_A_IRQ (1<<16) 5937#define GEN8_DE_PIPE_A_IRQ (1<<16)
6016#define GEN8_DE_PIPE_IRQ(pipe) (1<<(16+(pipe))) 5938#define GEN8_DE_PIPE_IRQ(pipe) (1<<(16+(pipe)))
6017#define GEN8_GT_VECS_IRQ (1<<6) 5939#define GEN8_GT_VECS_IRQ (1<<6)
5940#define GEN8_GT_GUC_IRQ (1<<5)
6018#define GEN8_GT_PM_IRQ (1<<4) 5941#define GEN8_GT_PM_IRQ (1<<4)
6019#define GEN8_GT_VCS2_IRQ (1<<3) 5942#define GEN8_GT_VCS2_IRQ (1<<3)
6020#define GEN8_GT_VCS1_IRQ (1<<2) 5943#define GEN8_GT_VCS1_IRQ (1<<2)
@@ -6026,6 +5949,16 @@ enum {
6026#define GEN8_GT_IIR(which) _MMIO(0x44308 + (0x10 * (which))) 5949#define GEN8_GT_IIR(which) _MMIO(0x44308 + (0x10 * (which)))
6027#define GEN8_GT_IER(which) _MMIO(0x4430c + (0x10 * (which))) 5950#define GEN8_GT_IER(which) _MMIO(0x4430c + (0x10 * (which)))
6028 5951
5952#define GEN9_GUC_TO_HOST_INT_EVENT (1<<31)
5953#define GEN9_GUC_EXEC_ERROR_EVENT (1<<30)
5954#define GEN9_GUC_DISPLAY_EVENT (1<<29)
5955#define GEN9_GUC_SEMA_SIGNAL_EVENT (1<<28)
5956#define GEN9_GUC_IOMMU_MSG_EVENT (1<<27)
5957#define GEN9_GUC_DB_RING_EVENT (1<<26)
5958#define GEN9_GUC_DMA_DONE_EVENT (1<<25)
5959#define GEN9_GUC_FATAL_ERROR_EVENT (1<<24)
5960#define GEN9_GUC_NOTIFICATION_EVENT (1<<23)
5961
6029#define GEN8_RCS_IRQ_SHIFT 0 5962#define GEN8_RCS_IRQ_SHIFT 0
6030#define GEN8_BCS_IRQ_SHIFT 16 5963#define GEN8_BCS_IRQ_SHIFT 16
6031#define GEN8_VCS1_IRQ_SHIFT 0 5964#define GEN8_VCS1_IRQ_SHIFT 0
@@ -7358,6 +7291,13 @@ enum {
7358#define _HSW_AUD_MISC_CTRL_B 0x65110 7291#define _HSW_AUD_MISC_CTRL_B 0x65110
7359#define HSW_AUD_MISC_CTRL(pipe) _MMIO_PIPE(pipe, _HSW_AUD_MISC_CTRL_A, _HSW_AUD_MISC_CTRL_B) 7292#define HSW_AUD_MISC_CTRL(pipe) _MMIO_PIPE(pipe, _HSW_AUD_MISC_CTRL_A, _HSW_AUD_MISC_CTRL_B)
7360 7293
7294#define _HSW_AUD_M_CTS_ENABLE_A 0x65028
7295#define _HSW_AUD_M_CTS_ENABLE_B 0x65128
7296#define HSW_AUD_M_CTS_ENABLE(pipe) _MMIO_PIPE(pipe, _HSW_AUD_M_CTS_ENABLE_A, _HSW_AUD_M_CTS_ENABLE_B)
7297#define AUD_M_CTS_M_VALUE_INDEX (1 << 21)
7298#define AUD_M_CTS_M_PROG_ENABLE (1 << 20)
7299#define AUD_CONFIG_M_MASK 0xfffff
7300
7361#define _HSW_AUD_DIP_ELD_CTRL_ST_A 0x650b4 7301#define _HSW_AUD_DIP_ELD_CTRL_ST_A 0x650b4
7362#define _HSW_AUD_DIP_ELD_CTRL_ST_B 0x651b4 7302#define _HSW_AUD_DIP_ELD_CTRL_ST_B 0x651b4
7363#define HSW_AUD_DIP_ELD_CTRL(pipe) _MMIO_PIPE(pipe, _HSW_AUD_DIP_ELD_CTRL_ST_A, _HSW_AUD_DIP_ELD_CTRL_ST_B) 7303#define HSW_AUD_DIP_ELD_CTRL(pipe) _MMIO_PIPE(pipe, _HSW_AUD_DIP_ELD_CTRL_ST_A, _HSW_AUD_DIP_ELD_CTRL_ST_B)
diff --git a/drivers/gpu/drm/i915/i915_sw_fence.c b/drivers/gpu/drm/i915/i915_sw_fence.c
index 8185002d7ec8..95f2f12e0917 100644
--- a/drivers/gpu/drm/i915/i915_sw_fence.c
+++ b/drivers/gpu/drm/i915/i915_sw_fence.c
@@ -13,6 +13,8 @@
13 13
14#include "i915_sw_fence.h" 14#include "i915_sw_fence.h"
15 15
16#define I915_SW_FENCE_FLAG_ALLOC BIT(3) /* after WQ_FLAG_* for safety */
17
16static DEFINE_SPINLOCK(i915_sw_fence_lock); 18static DEFINE_SPINLOCK(i915_sw_fence_lock);
17 19
18static int __i915_sw_fence_notify(struct i915_sw_fence *fence, 20static int __i915_sw_fence_notify(struct i915_sw_fence *fence,
@@ -135,6 +137,8 @@ static int i915_sw_fence_wake(wait_queue_t *wq, unsigned mode, int flags, void *
135 list_del(&wq->task_list); 137 list_del(&wq->task_list);
136 __i915_sw_fence_complete(wq->private, key); 138 __i915_sw_fence_complete(wq->private, key);
137 i915_sw_fence_put(wq->private); 139 i915_sw_fence_put(wq->private);
140 if (wq->flags & I915_SW_FENCE_FLAG_ALLOC)
141 kfree(wq);
138 return 0; 142 return 0;
139} 143}
140 144
@@ -192,9 +196,9 @@ static bool i915_sw_fence_check_if_after(struct i915_sw_fence *fence,
192 return err; 196 return err;
193} 197}
194 198
195int i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence, 199static int __i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence,
196 struct i915_sw_fence *signaler, 200 struct i915_sw_fence *signaler,
197 wait_queue_t *wq) 201 wait_queue_t *wq, gfp_t gfp)
198{ 202{
199 unsigned long flags; 203 unsigned long flags;
200 int pending; 204 int pending;
@@ -206,8 +210,22 @@ int i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence,
206 if (unlikely(i915_sw_fence_check_if_after(fence, signaler))) 210 if (unlikely(i915_sw_fence_check_if_after(fence, signaler)))
207 return -EINVAL; 211 return -EINVAL;
208 212
213 pending = 0;
214 if (!wq) {
215 wq = kmalloc(sizeof(*wq), gfp);
216 if (!wq) {
217 if (!gfpflags_allow_blocking(gfp))
218 return -ENOMEM;
219
220 i915_sw_fence_wait(signaler);
221 return 0;
222 }
223
224 pending |= I915_SW_FENCE_FLAG_ALLOC;
225 }
226
209 INIT_LIST_HEAD(&wq->task_list); 227 INIT_LIST_HEAD(&wq->task_list);
210 wq->flags = 0; 228 wq->flags = pending;
211 wq->func = i915_sw_fence_wake; 229 wq->func = i915_sw_fence_wake;
212 wq->private = i915_sw_fence_get(fence); 230 wq->private = i915_sw_fence_get(fence);
213 231
@@ -226,6 +244,20 @@ int i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence,
226 return pending; 244 return pending;
227} 245}
228 246
247int i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence,
248 struct i915_sw_fence *signaler,
249 wait_queue_t *wq)
250{
251 return __i915_sw_fence_await_sw_fence(fence, signaler, wq, 0);
252}
253
254int i915_sw_fence_await_sw_fence_gfp(struct i915_sw_fence *fence,
255 struct i915_sw_fence *signaler,
256 gfp_t gfp)
257{
258 return __i915_sw_fence_await_sw_fence(fence, signaler, NULL, gfp);
259}
260
229struct i915_sw_dma_fence_cb { 261struct i915_sw_dma_fence_cb {
230 struct dma_fence_cb base; 262 struct dma_fence_cb base;
231 struct i915_sw_fence *fence; 263 struct i915_sw_fence *fence;
diff --git a/drivers/gpu/drm/i915/i915_sw_fence.h b/drivers/gpu/drm/i915/i915_sw_fence.h
index cd239e92f67f..707dfc4f0da5 100644
--- a/drivers/gpu/drm/i915/i915_sw_fence.h
+++ b/drivers/gpu/drm/i915/i915_sw_fence.h
@@ -46,6 +46,9 @@ void i915_sw_fence_commit(struct i915_sw_fence *fence);
46int i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence, 46int i915_sw_fence_await_sw_fence(struct i915_sw_fence *fence,
47 struct i915_sw_fence *after, 47 struct i915_sw_fence *after,
48 wait_queue_t *wq); 48 wait_queue_t *wq);
49int i915_sw_fence_await_sw_fence_gfp(struct i915_sw_fence *fence,
50 struct i915_sw_fence *after,
51 gfp_t gfp);
49int i915_sw_fence_await_dma_fence(struct i915_sw_fence *fence, 52int i915_sw_fence_await_dma_fence(struct i915_sw_fence *fence,
50 struct dma_fence *dma, 53 struct dma_fence *dma,
51 unsigned long timeout, 54 unsigned long timeout,
@@ -62,4 +65,9 @@ static inline bool i915_sw_fence_done(const struct i915_sw_fence *fence)
62 return atomic_read(&fence->pending) < 0; 65 return atomic_read(&fence->pending) < 0;
63} 66}
64 67
68static inline void i915_sw_fence_wait(struct i915_sw_fence *fence)
69{
70 wait_event(fence->wait, i915_sw_fence_done(fence));
71}
72
65#endif /* _I915_SW_FENCE_H_ */ 73#endif /* _I915_SW_FENCE_H_ */
diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
index 5c912c25f7d3..c5d210ebaa9a 100644
--- a/drivers/gpu/drm/i915/i915_trace.h
+++ b/drivers/gpu/drm/i915/i915_trace.h
@@ -466,7 +466,7 @@ TRACE_EVENT(i915_gem_ring_sync_to,
466 __entry->dev = from->i915->drm.primary->index; 466 __entry->dev = from->i915->drm.primary->index;
467 __entry->sync_from = from->engine->id; 467 __entry->sync_from = from->engine->id;
468 __entry->sync_to = to->engine->id; 468 __entry->sync_to = to->engine->id;
469 __entry->seqno = from->fence.seqno; 469 __entry->seqno = from->global_seqno;
470 ), 470 ),
471 471
472 TP_printk("dev=%u, sync-from=%u, sync-to=%u, seqno=%u", 472 TP_printk("dev=%u, sync-from=%u, sync-to=%u, seqno=%u",
@@ -489,7 +489,7 @@ TRACE_EVENT(i915_gem_ring_dispatch,
489 TP_fast_assign( 489 TP_fast_assign(
490 __entry->dev = req->i915->drm.primary->index; 490 __entry->dev = req->i915->drm.primary->index;
491 __entry->ring = req->engine->id; 491 __entry->ring = req->engine->id;
492 __entry->seqno = req->fence.seqno; 492 __entry->seqno = req->global_seqno;
493 __entry->flags = flags; 493 __entry->flags = flags;
494 dma_fence_enable_sw_signaling(&req->fence); 494 dma_fence_enable_sw_signaling(&req->fence);
495 ), 495 ),
@@ -534,7 +534,7 @@ DECLARE_EVENT_CLASS(i915_gem_request,
534 TP_fast_assign( 534 TP_fast_assign(
535 __entry->dev = req->i915->drm.primary->index; 535 __entry->dev = req->i915->drm.primary->index;
536 __entry->ring = req->engine->id; 536 __entry->ring = req->engine->id;
537 __entry->seqno = req->fence.seqno; 537 __entry->seqno = req->global_seqno;
538 ), 538 ),
539 539
540 TP_printk("dev=%u, ring=%u, seqno=%u", 540 TP_printk("dev=%u, ring=%u, seqno=%u",
@@ -596,7 +596,7 @@ TRACE_EVENT(i915_gem_request_wait_begin,
596 TP_fast_assign( 596 TP_fast_assign(
597 __entry->dev = req->i915->drm.primary->index; 597 __entry->dev = req->i915->drm.primary->index;
598 __entry->ring = req->engine->id; 598 __entry->ring = req->engine->id;
599 __entry->seqno = req->fence.seqno; 599 __entry->seqno = req->global_seqno;
600 __entry->blocking = 600 __entry->blocking =
601 mutex_is_locked(&req->i915->drm.struct_mutex); 601 mutex_is_locked(&req->i915->drm.struct_mutex);
602 ), 602 ),
diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
index c762ae549a1c..cb5594411bb6 100644
--- a/drivers/gpu/drm/i915/intel_atomic_plane.c
+++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
@@ -84,7 +84,6 @@ intel_plane_duplicate_state(struct drm_plane *plane)
84 state = &intel_state->base; 84 state = &intel_state->base;
85 85
86 __drm_atomic_helper_plane_duplicate_state(plane, state); 86 __drm_atomic_helper_plane_duplicate_state(plane, state);
87 intel_state->wait_req = NULL;
88 87
89 return state; 88 return state;
90} 89}
@@ -101,7 +100,6 @@ void
101intel_plane_destroy_state(struct drm_plane *plane, 100intel_plane_destroy_state(struct drm_plane *plane,
102 struct drm_plane_state *state) 101 struct drm_plane_state *state)
103{ 102{
104 WARN_ON(state && to_intel_plane_state(state)->wait_req);
105 drm_atomic_helper_plane_destroy_state(plane, state); 103 drm_atomic_helper_plane_destroy_state(plane, state);
106} 104}
107 105
diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 7093cfbb62b1..813fd74d9c8d 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -57,6 +57,63 @@
57 * struct &i915_audio_component_audio_ops @audio_ops is called from i915 driver. 57 * struct &i915_audio_component_audio_ops @audio_ops is called from i915 driver.
58 */ 58 */
59 59
60/* DP N/M table */
61#define LC_540M 540000
62#define LC_270M 270000
63#define LC_162M 162000
64
65struct dp_aud_n_m {
66 int sample_rate;
67 int clock;
68 u16 m;
69 u16 n;
70};
71
72/* Values according to DP 1.4 Table 2-104 */
73static const struct dp_aud_n_m dp_aud_n_m[] = {
74 { 32000, LC_162M, 1024, 10125 },
75 { 44100, LC_162M, 784, 5625 },
76 { 48000, LC_162M, 512, 3375 },
77 { 64000, LC_162M, 2048, 10125 },
78 { 88200, LC_162M, 1568, 5625 },
79 { 96000, LC_162M, 1024, 3375 },
80 { 128000, LC_162M, 4096, 10125 },
81 { 176400, LC_162M, 3136, 5625 },
82 { 192000, LC_162M, 2048, 3375 },
83 { 32000, LC_270M, 1024, 16875 },
84 { 44100, LC_270M, 784, 9375 },
85 { 48000, LC_270M, 512, 5625 },
86 { 64000, LC_270M, 2048, 16875 },
87 { 88200, LC_270M, 1568, 9375 },
88 { 96000, LC_270M, 1024, 5625 },
89 { 128000, LC_270M, 4096, 16875 },
90 { 176400, LC_270M, 3136, 9375 },
91 { 192000, LC_270M, 2048, 5625 },
92 { 32000, LC_540M, 1024, 33750 },
93 { 44100, LC_540M, 784, 18750 },
94 { 48000, LC_540M, 512, 11250 },
95 { 64000, LC_540M, 2048, 33750 },
96 { 88200, LC_540M, 1568, 18750 },
97 { 96000, LC_540M, 1024, 11250 },
98 { 128000, LC_540M, 4096, 33750 },
99 { 176400, LC_540M, 3136, 18750 },
100 { 192000, LC_540M, 2048, 11250 },
101};
102
103static const struct dp_aud_n_m *
104audio_config_dp_get_n_m(struct intel_crtc *intel_crtc, int rate)
105{
106 int i;
107
108 for (i = 0; i < ARRAY_SIZE(dp_aud_n_m); i++) {
109 if (rate == dp_aud_n_m[i].sample_rate &&
110 intel_crtc->config->port_clock == dp_aud_n_m[i].clock)
111 return &dp_aud_n_m[i];
112 }
113
114 return NULL;
115}
116
60static const struct { 117static const struct {
61 int clock; 118 int clock;
62 u32 config; 119 u32 config;
@@ -225,16 +282,43 @@ hsw_dp_audio_config_update(struct intel_crtc *intel_crtc, enum port port,
225 const struct drm_display_mode *adjusted_mode) 282 const struct drm_display_mode *adjusted_mode)
226{ 283{
227 struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev); 284 struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev);
285 struct i915_audio_component *acomp = dev_priv->audio_component;
286 int rate = acomp ? acomp->aud_sample_rate[port] : 0;
287 const struct dp_aud_n_m *nm = audio_config_dp_get_n_m(intel_crtc, rate);
228 enum pipe pipe = intel_crtc->pipe; 288 enum pipe pipe = intel_crtc->pipe;
229 u32 tmp; 289 u32 tmp;
230 290
291 if (nm)
292 DRM_DEBUG_KMS("using Maud %u, Naud %u\n", nm->m, nm->n);
293 else
294 DRM_DEBUG_KMS("using automatic Maud, Naud\n");
295
231 tmp = I915_READ(HSW_AUD_CFG(pipe)); 296 tmp = I915_READ(HSW_AUD_CFG(pipe));
232 tmp &= ~AUD_CONFIG_N_VALUE_INDEX; 297 tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
233 tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK; 298 tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
234 tmp &= ~AUD_CONFIG_N_PROG_ENABLE; 299 tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
235 tmp |= AUD_CONFIG_N_VALUE_INDEX; 300 tmp |= AUD_CONFIG_N_VALUE_INDEX;
236 301
302 if (nm) {
303 tmp &= ~AUD_CONFIG_N_MASK;
304 tmp |= AUD_CONFIG_N(nm->n);
305 tmp |= AUD_CONFIG_N_PROG_ENABLE;
306 }
307
237 I915_WRITE(HSW_AUD_CFG(pipe), tmp); 308 I915_WRITE(HSW_AUD_CFG(pipe), tmp);
309
310 tmp = I915_READ(HSW_AUD_M_CTS_ENABLE(pipe));
311 tmp &= ~AUD_CONFIG_M_MASK;
312 tmp &= ~AUD_M_CTS_M_VALUE_INDEX;
313 tmp &= ~AUD_M_CTS_M_PROG_ENABLE;
314
315 if (nm) {
316 tmp |= nm->m;
317 tmp |= AUD_M_CTS_M_VALUE_INDEX;
318 tmp |= AUD_M_CTS_M_PROG_ENABLE;
319 }
320
321 I915_WRITE(HSW_AUD_M_CTS_ENABLE(pipe), tmp);
238} 322}
239 323
240static void 324static void
@@ -254,19 +338,24 @@ hsw_hdmi_audio_config_update(struct intel_crtc *intel_crtc, enum port port,
254 tmp &= ~AUD_CONFIG_N_PROG_ENABLE; 338 tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
255 tmp |= audio_config_hdmi_pixel_clock(adjusted_mode); 339 tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
256 340
257 if (adjusted_mode->crtc_clock == TMDS_296M || 341 n = audio_config_hdmi_get_n(adjusted_mode, rate);
258 adjusted_mode->crtc_clock == TMDS_297M) { 342 if (n != 0) {
259 n = audio_config_hdmi_get_n(adjusted_mode, rate); 343 DRM_DEBUG_KMS("using N %d\n", n);
260 if (n != 0) { 344
261 tmp &= ~AUD_CONFIG_N_MASK; 345 tmp &= ~AUD_CONFIG_N_MASK;
262 tmp |= AUD_CONFIG_N(n); 346 tmp |= AUD_CONFIG_N(n);
263 tmp |= AUD_CONFIG_N_PROG_ENABLE; 347 tmp |= AUD_CONFIG_N_PROG_ENABLE;
264 } else { 348 } else {
265 DRM_DEBUG_KMS("no suitable N value is found\n"); 349 DRM_DEBUG_KMS("using automatic N\n");
266 }
267 } 350 }
268 351
269 I915_WRITE(HSW_AUD_CFG(pipe), tmp); 352 I915_WRITE(HSW_AUD_CFG(pipe), tmp);
353
354 tmp = I915_READ(HSW_AUD_M_CTS_ENABLE(pipe));
355 tmp &= ~AUD_CONFIG_M_MASK;
356 tmp &= ~AUD_M_CTS_M_VALUE_INDEX;
357 tmp |= AUD_M_CTS_M_PROG_ENABLE;
358 I915_WRITE(HSW_AUD_M_CTS_ENABLE(pipe), tmp);
270} 359}
271 360
272static void 361static void
@@ -687,7 +776,8 @@ static int i915_audio_component_sync_audio_rate(struct device *kdev, int port,
687 /* 1. get the pipe */ 776 /* 1. get the pipe */
688 intel_encoder = get_saved_enc(dev_priv, port, pipe); 777 intel_encoder = get_saved_enc(dev_priv, port, pipe);
689 if (!intel_encoder || !intel_encoder->base.crtc || 778 if (!intel_encoder || !intel_encoder->base.crtc ||
690 intel_encoder->type != INTEL_OUTPUT_HDMI) { 779 (intel_encoder->type != INTEL_OUTPUT_HDMI &&
780 intel_encoder->type != INTEL_OUTPUT_DP)) {
691 DRM_DEBUG_KMS("Not valid for port %c\n", port_name(port)); 781 DRM_DEBUG_KMS("Not valid for port %c\n", port_name(port));
692 err = -ENODEV; 782 err = -ENODEV;
693 goto unlock; 783 goto unlock;
diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c
index 56efcc507ea2..c410d3d6465f 100644
--- a/drivers/gpu/drm/i915/intel_breadcrumbs.c
+++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c
@@ -83,16 +83,18 @@ static void irq_enable(struct intel_engine_cs *engine)
83 */ 83 */
84 engine->breadcrumbs.irq_posted = true; 84 engine->breadcrumbs.irq_posted = true;
85 85
86 spin_lock_irq(&engine->i915->irq_lock); 86 /* Caller disables interrupts */
87 spin_lock(&engine->i915->irq_lock);
87 engine->irq_enable(engine); 88 engine->irq_enable(engine);
88 spin_unlock_irq(&engine->i915->irq_lock); 89 spin_unlock(&engine->i915->irq_lock);
89} 90}
90 91
91static void irq_disable(struct intel_engine_cs *engine) 92static void irq_disable(struct intel_engine_cs *engine)
92{ 93{
93 spin_lock_irq(&engine->i915->irq_lock); 94 /* Caller disables interrupts */
95 spin_lock(&engine->i915->irq_lock);
94 engine->irq_disable(engine); 96 engine->irq_disable(engine);
95 spin_unlock_irq(&engine->i915->irq_lock); 97 spin_unlock(&engine->i915->irq_lock);
96 98
97 engine->breadcrumbs.irq_posted = false; 99 engine->breadcrumbs.irq_posted = false;
98} 100}
@@ -293,9 +295,9 @@ bool intel_engine_add_wait(struct intel_engine_cs *engine,
293 struct intel_breadcrumbs *b = &engine->breadcrumbs; 295 struct intel_breadcrumbs *b = &engine->breadcrumbs;
294 bool first; 296 bool first;
295 297
296 spin_lock(&b->lock); 298 spin_lock_irq(&b->lock);
297 first = __intel_engine_add_wait(engine, wait); 299 first = __intel_engine_add_wait(engine, wait);
298 spin_unlock(&b->lock); 300 spin_unlock_irq(&b->lock);
299 301
300 return first; 302 return first;
301} 303}
@@ -326,7 +328,7 @@ void intel_engine_remove_wait(struct intel_engine_cs *engine,
326 if (RB_EMPTY_NODE(&wait->node)) 328 if (RB_EMPTY_NODE(&wait->node))
327 return; 329 return;
328 330
329 spin_lock(&b->lock); 331 spin_lock_irq(&b->lock);
330 332
331 if (RB_EMPTY_NODE(&wait->node)) 333 if (RB_EMPTY_NODE(&wait->node))
332 goto out_unlock; 334 goto out_unlock;
@@ -400,7 +402,7 @@ out_unlock:
400 GEM_BUG_ON(rb_first(&b->waiters) != 402 GEM_BUG_ON(rb_first(&b->waiters) !=
401 (b->first_wait ? &b->first_wait->node : NULL)); 403 (b->first_wait ? &b->first_wait->node : NULL));
402 GEM_BUG_ON(!rcu_access_pointer(b->irq_seqno_bh) ^ RB_EMPTY_ROOT(&b->waiters)); 404 GEM_BUG_ON(!rcu_access_pointer(b->irq_seqno_bh) ^ RB_EMPTY_ROOT(&b->waiters));
403 spin_unlock(&b->lock); 405 spin_unlock_irq(&b->lock);
404} 406}
405 407
406static bool signal_complete(struct drm_i915_gem_request *request) 408static bool signal_complete(struct drm_i915_gem_request *request)
@@ -473,14 +475,14 @@ static int intel_breadcrumbs_signaler(void *arg)
473 * we just completed - so double check we are still 475 * we just completed - so double check we are still
474 * the oldest before picking the next one. 476 * the oldest before picking the next one.
475 */ 477 */
476 spin_lock(&b->lock); 478 spin_lock_irq(&b->lock);
477 if (request == b->first_signal) { 479 if (request == b->first_signal) {
478 struct rb_node *rb = 480 struct rb_node *rb =
479 rb_next(&request->signaling.node); 481 rb_next(&request->signaling.node);
480 b->first_signal = rb ? to_signaler(rb) : NULL; 482 b->first_signal = rb ? to_signaler(rb) : NULL;
481 } 483 }
482 rb_erase(&request->signaling.node, &b->signals); 484 rb_erase(&request->signaling.node, &b->signals);
483 spin_unlock(&b->lock); 485 spin_unlock_irq(&b->lock);
484 486
485 i915_gem_request_put(request); 487 i915_gem_request_put(request);
486 } else { 488 } else {
@@ -502,11 +504,20 @@ void intel_engine_enable_signaling(struct drm_i915_gem_request *request)
502 struct rb_node *parent, **p; 504 struct rb_node *parent, **p;
503 bool first, wakeup; 505 bool first, wakeup;
504 506
505 /* locked by dma_fence_enable_sw_signaling() */ 507 /* Note that we may be called from an interrupt handler on another
508 * device (e.g. nouveau signaling a fence completion causing us
509 * to submit a request, and so enable signaling). As such,
510 * we need to make sure that all other users of b->lock protect
511 * against interrupts, i.e. use spin_lock_irqsave.
512 */
513
514 /* locked by dma_fence_enable_sw_signaling() (irqsafe fence->lock) */
506 assert_spin_locked(&request->lock); 515 assert_spin_locked(&request->lock);
516 if (!request->global_seqno)
517 return;
507 518
508 request->signaling.wait.tsk = b->signaler; 519 request->signaling.wait.tsk = b->signaler;
509 request->signaling.wait.seqno = request->fence.seqno; 520 request->signaling.wait.seqno = request->global_seqno;
510 i915_gem_request_get(request); 521 i915_gem_request_get(request);
511 522
512 spin_lock(&b->lock); 523 spin_lock(&b->lock);
@@ -530,8 +541,8 @@ void intel_engine_enable_signaling(struct drm_i915_gem_request *request)
530 p = &b->signals.rb_node; 541 p = &b->signals.rb_node;
531 while (*p) { 542 while (*p) {
532 parent = *p; 543 parent = *p;
533 if (i915_seqno_passed(request->fence.seqno, 544 if (i915_seqno_passed(request->global_seqno,
534 to_signaler(parent)->fence.seqno)) { 545 to_signaler(parent)->global_seqno)) {
535 p = &parent->rb_right; 546 p = &parent->rb_right;
536 first = false; 547 first = false;
537 } else { 548 } else {
@@ -592,7 +603,7 @@ void intel_engine_reset_breadcrumbs(struct intel_engine_cs *engine)
592 struct intel_breadcrumbs *b = &engine->breadcrumbs; 603 struct intel_breadcrumbs *b = &engine->breadcrumbs;
593 604
594 cancel_fake_irq(engine); 605 cancel_fake_irq(engine);
595 spin_lock(&b->lock); 606 spin_lock_irq(&b->lock);
596 607
597 __intel_breadcrumbs_disable_irq(b); 608 __intel_breadcrumbs_disable_irq(b);
598 if (intel_engine_has_waiter(engine)) { 609 if (intel_engine_has_waiter(engine)) {
@@ -605,7 +616,7 @@ void intel_engine_reset_breadcrumbs(struct intel_engine_cs *engine)
605 irq_disable(engine); 616 irq_disable(engine);
606 } 617 }
607 618
608 spin_unlock(&b->lock); 619 spin_unlock_irq(&b->lock);
609} 620}
610 621
611void intel_engine_fini_breadcrumbs(struct intel_engine_cs *engine) 622void intel_engine_fini_breadcrumbs(struct intel_engine_cs *engine)
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index a97151fcb9f4..30eb95b54dcf 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -573,7 +573,7 @@ intel_crt_load_detect(struct intel_crt *crt, uint32_t pipe)
573 POSTING_READ(pipeconf_reg); 573 POSTING_READ(pipeconf_reg);
574 /* Wait for next Vblank to substitue 574 /* Wait for next Vblank to substitue
575 * border color for Color info */ 575 * border color for Color info */
576 intel_wait_for_vblank(dev, pipe); 576 intel_wait_for_vblank(dev_priv, pipe);
577 st00 = I915_READ8(_VGA_MSR_WRITE); 577 st00 = I915_READ8(_VGA_MSR_WRITE);
578 status = ((st00 & (1 << 4)) != 0) ? 578 status = ((st00 & (1 << 4)) != 0) ?
579 connector_status_connected : 579 connector_status_connected :
diff --git a/drivers/gpu/drm/i915/intel_csr.c b/drivers/gpu/drm/i915/intel_csr.c
index 1ea0e1f43397..d7a04bca8c28 100644
--- a/drivers/gpu/drm/i915/intel_csr.c
+++ b/drivers/gpu/drm/i915/intel_csr.c
@@ -168,12 +168,6 @@ struct stepping_info {
168 char substepping; 168 char substepping;
169}; 169};
170 170
171static const struct stepping_info kbl_stepping_info[] = {
172 {'A', '0'}, {'B', '0'}, {'C', '0'},
173 {'D', '0'}, {'E', '0'}, {'F', '0'},
174 {'G', '0'}, {'H', '0'}, {'I', '0'},
175};
176
177static const struct stepping_info skl_stepping_info[] = { 171static const struct stepping_info skl_stepping_info[] = {
178 {'A', '0'}, {'B', '0'}, {'C', '0'}, 172 {'A', '0'}, {'B', '0'}, {'C', '0'},
179 {'D', '0'}, {'E', '0'}, {'F', '0'}, 173 {'D', '0'}, {'E', '0'}, {'F', '0'},
@@ -194,10 +188,7 @@ intel_get_stepping_info(struct drm_i915_private *dev_priv)
194 const struct stepping_info *si; 188 const struct stepping_info *si;
195 unsigned int size; 189 unsigned int size;
196 190
197 if (IS_KABYLAKE(dev_priv)) { 191 if (IS_SKYLAKE(dev_priv)) {
198 size = ARRAY_SIZE(kbl_stepping_info);
199 si = kbl_stepping_info;
200 } else if (IS_SKYLAKE(dev_priv)) {
201 size = ARRAY_SIZE(skl_stepping_info); 192 size = ARRAY_SIZE(skl_stepping_info);
202 si = skl_stepping_info; 193 si = skl_stepping_info;
203 } else if (IS_BROXTON(dev_priv)) { 194 } else if (IS_BROXTON(dev_priv)) {
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index fb18d699ce10..938ac4dbcb45 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -1547,7 +1547,6 @@ static void bxt_ddi_vswing_sequence(struct drm_i915_private *dev_priv,
1547{ 1547{
1548 const struct bxt_ddi_buf_trans *ddi_translations; 1548 const struct bxt_ddi_buf_trans *ddi_translations;
1549 u32 n_entries, i; 1549 u32 n_entries, i;
1550 uint32_t val;
1551 1550
1552 if (type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.low_vswing) { 1551 if (type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.low_vswing) {
1553 n_entries = ARRAY_SIZE(bxt_ddi_translations_edp); 1552 n_entries = ARRAY_SIZE(bxt_ddi_translations_edp);
@@ -1576,38 +1575,11 @@ static void bxt_ddi_vswing_sequence(struct drm_i915_private *dev_priv,
1576 } 1575 }
1577 } 1576 }
1578 1577
1579 /* 1578 bxt_ddi_phy_set_signal_level(dev_priv, port,
1580 * While we write to the group register to program all lanes at once we 1579 ddi_translations[level].margin,
1581 * can read only lane registers and we pick lanes 0/1 for that. 1580 ddi_translations[level].scale,
1582 */ 1581 ddi_translations[level].enable,
1583 val = I915_READ(BXT_PORT_PCS_DW10_LN01(port)); 1582 ddi_translations[level].deemphasis);
1584 val &= ~(TX2_SWING_CALC_INIT | TX1_SWING_CALC_INIT);
1585 I915_WRITE(BXT_PORT_PCS_DW10_GRP(port), val);
1586
1587 val = I915_READ(BXT_PORT_TX_DW2_LN0(port));
1588 val &= ~(MARGIN_000 | UNIQ_TRANS_SCALE);
1589 val |= ddi_translations[level].margin << MARGIN_000_SHIFT |
1590 ddi_translations[level].scale << UNIQ_TRANS_SCALE_SHIFT;
1591 I915_WRITE(BXT_PORT_TX_DW2_GRP(port), val);
1592
1593 val = I915_READ(BXT_PORT_TX_DW3_LN0(port));
1594 val &= ~SCALE_DCOMP_METHOD;
1595 if (ddi_translations[level].enable)
1596 val |= SCALE_DCOMP_METHOD;
1597
1598 if ((val & UNIQUE_TRANGE_EN_METHOD) && !(val & SCALE_DCOMP_METHOD))
1599 DRM_ERROR("Disabled scaling while ouniqetrangenmethod was set");
1600
1601 I915_WRITE(BXT_PORT_TX_DW3_GRP(port), val);
1602
1603 val = I915_READ(BXT_PORT_TX_DW4_LN0(port));
1604 val &= ~DE_EMPHASIS;
1605 val |= ddi_translations[level].deemphasis << DEEMPH_SHIFT;
1606 I915_WRITE(BXT_PORT_TX_DW4_GRP(port), val);
1607
1608 val = I915_READ(BXT_PORT_PCS_DW10_LN01(port));
1609 val |= TX2_SWING_CALC_INIT | TX1_SWING_CALC_INIT;
1610 I915_WRITE(BXT_PORT_PCS_DW10_GRP(port), val);
1611} 1583}
1612 1584
1613static uint32_t translate_signal_level(int signal_levels) 1585static uint32_t translate_signal_level(int signal_levels)
@@ -1923,332 +1895,14 @@ static void intel_disable_ddi(struct intel_encoder *intel_encoder,
1923 } 1895 }
1924} 1896}
1925 1897
1926bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
1927 enum dpio_phy phy)
1928{
1929 enum port port;
1930
1931 if (!(I915_READ(BXT_P_CR_GT_DISP_PWRON) & GT_DISPLAY_POWER_ON(phy)))
1932 return false;
1933
1934 if ((I915_READ(BXT_PORT_CL1CM_DW0(phy)) &
1935 (PHY_POWER_GOOD | PHY_RESERVED)) != PHY_POWER_GOOD) {
1936 DRM_DEBUG_DRIVER("DDI PHY %d powered, but power hasn't settled\n",
1937 phy);
1938
1939 return false;
1940 }
1941
1942 if (phy == DPIO_PHY1 &&
1943 !(I915_READ(BXT_PORT_REF_DW3(DPIO_PHY1)) & GRC_DONE)) {
1944 DRM_DEBUG_DRIVER("DDI PHY 1 powered, but GRC isn't done\n");
1945
1946 return false;
1947 }
1948
1949 if (!(I915_READ(BXT_PHY_CTL_FAMILY(phy)) & COMMON_RESET_DIS)) {
1950 DRM_DEBUG_DRIVER("DDI PHY %d powered, but still in reset\n",
1951 phy);
1952
1953 return false;
1954 }
1955
1956 for_each_port_masked(port,
1957 phy == DPIO_PHY0 ? BIT(PORT_B) | BIT(PORT_C) :
1958 BIT(PORT_A)) {
1959 u32 tmp = I915_READ(BXT_PHY_CTL(port));
1960
1961 if (tmp & BXT_PHY_CMNLANE_POWERDOWN_ACK) {
1962 DRM_DEBUG_DRIVER("DDI PHY %d powered, but common lane "
1963 "for port %c powered down "
1964 "(PHY_CTL %08x)\n",
1965 phy, port_name(port), tmp);
1966
1967 return false;
1968 }
1969 }
1970
1971 return true;
1972}
1973
1974static u32 bxt_get_grc(struct drm_i915_private *dev_priv, enum dpio_phy phy)
1975{
1976 u32 val = I915_READ(BXT_PORT_REF_DW6(phy));
1977
1978 return (val & GRC_CODE_MASK) >> GRC_CODE_SHIFT;
1979}
1980
1981static void bxt_phy_wait_grc_done(struct drm_i915_private *dev_priv,
1982 enum dpio_phy phy)
1983{
1984 if (intel_wait_for_register(dev_priv,
1985 BXT_PORT_REF_DW3(phy),
1986 GRC_DONE, GRC_DONE,
1987 10))
1988 DRM_ERROR("timeout waiting for PHY%d GRC\n", phy);
1989}
1990
1991void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy)
1992{
1993 u32 val;
1994
1995 if (bxt_ddi_phy_is_enabled(dev_priv, phy)) {
1996 /* Still read out the GRC value for state verification */
1997 if (phy == DPIO_PHY0)
1998 dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv, phy);
1999
2000 if (bxt_ddi_phy_verify_state(dev_priv, phy)) {
2001 DRM_DEBUG_DRIVER("DDI PHY %d already enabled, "
2002 "won't reprogram it\n", phy);
2003
2004 return;
2005 }
2006
2007 DRM_DEBUG_DRIVER("DDI PHY %d enabled with invalid state, "
2008 "force reprogramming it\n", phy);
2009 }
2010
2011 val = I915_READ(BXT_P_CR_GT_DISP_PWRON);
2012 val |= GT_DISPLAY_POWER_ON(phy);
2013 I915_WRITE(BXT_P_CR_GT_DISP_PWRON, val);
2014
2015 /*
2016 * The PHY registers start out inaccessible and respond to reads with
2017 * all 1s. Eventually they become accessible as they power up, then
2018 * the reserved bit will give the default 0. Poll on the reserved bit
2019 * becoming 0 to find when the PHY is accessible.
2020 * HW team confirmed that the time to reach phypowergood status is
2021 * anywhere between 50 us and 100us.
2022 */
2023 if (wait_for_us(((I915_READ(BXT_PORT_CL1CM_DW0(phy)) &
2024 (PHY_RESERVED | PHY_POWER_GOOD)) == PHY_POWER_GOOD), 100)) {
2025 DRM_ERROR("timeout during PHY%d power on\n", phy);
2026 }
2027
2028 /* Program PLL Rcomp code offset */
2029 val = I915_READ(BXT_PORT_CL1CM_DW9(phy));
2030 val &= ~IREF0RC_OFFSET_MASK;
2031 val |= 0xE4 << IREF0RC_OFFSET_SHIFT;
2032 I915_WRITE(BXT_PORT_CL1CM_DW9(phy), val);
2033
2034 val = I915_READ(BXT_PORT_CL1CM_DW10(phy));
2035 val &= ~IREF1RC_OFFSET_MASK;
2036 val |= 0xE4 << IREF1RC_OFFSET_SHIFT;
2037 I915_WRITE(BXT_PORT_CL1CM_DW10(phy), val);
2038
2039 /* Program power gating */
2040 val = I915_READ(BXT_PORT_CL1CM_DW28(phy));
2041 val |= OCL1_POWER_DOWN_EN | DW28_OLDO_DYN_PWR_DOWN_EN |
2042 SUS_CLK_CONFIG;
2043 I915_WRITE(BXT_PORT_CL1CM_DW28(phy), val);
2044
2045 if (phy == DPIO_PHY0) {
2046 val = I915_READ(BXT_PORT_CL2CM_DW6_BC);
2047 val |= DW6_OLDO_DYN_PWR_DOWN_EN;
2048 I915_WRITE(BXT_PORT_CL2CM_DW6_BC, val);
2049 }
2050
2051 val = I915_READ(BXT_PORT_CL1CM_DW30(phy));
2052 val &= ~OCL2_LDOFUSE_PWR_DIS;
2053 /*
2054 * On PHY1 disable power on the second channel, since no port is
2055 * connected there. On PHY0 both channels have a port, so leave it
2056 * enabled.
2057 * TODO: port C is only connected on BXT-P, so on BXT0/1 we should
2058 * power down the second channel on PHY0 as well.
2059 *
2060 * FIXME: Clarify programming of the following, the register is
2061 * read-only with bit 6 fixed at 0 at least in stepping A.
2062 */
2063 if (phy == DPIO_PHY1)
2064 val |= OCL2_LDOFUSE_PWR_DIS;
2065 I915_WRITE(BXT_PORT_CL1CM_DW30(phy), val);
2066
2067 if (phy == DPIO_PHY0) {
2068 uint32_t grc_code;
2069 /*
2070 * PHY0 isn't connected to an RCOMP resistor so copy over
2071 * the corresponding calibrated value from PHY1, and disable
2072 * the automatic calibration on PHY0.
2073 */
2074 val = dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv, DPIO_PHY1);
2075 grc_code = val << GRC_CODE_FAST_SHIFT |
2076 val << GRC_CODE_SLOW_SHIFT |
2077 val;
2078 I915_WRITE(BXT_PORT_REF_DW6(DPIO_PHY0), grc_code);
2079
2080 val = I915_READ(BXT_PORT_REF_DW8(DPIO_PHY0));
2081 val |= GRC_DIS | GRC_RDY_OVRD;
2082 I915_WRITE(BXT_PORT_REF_DW8(DPIO_PHY0), val);
2083 }
2084
2085 val = I915_READ(BXT_PHY_CTL_FAMILY(phy));
2086 val |= COMMON_RESET_DIS;
2087 I915_WRITE(BXT_PHY_CTL_FAMILY(phy), val);
2088
2089 if (phy == DPIO_PHY1)
2090 bxt_phy_wait_grc_done(dev_priv, DPIO_PHY1);
2091}
2092
2093void bxt_ddi_phy_uninit(struct drm_i915_private *dev_priv, enum dpio_phy phy)
2094{
2095 uint32_t val;
2096
2097 val = I915_READ(BXT_PHY_CTL_FAMILY(phy));
2098 val &= ~COMMON_RESET_DIS;
2099 I915_WRITE(BXT_PHY_CTL_FAMILY(phy), val);
2100
2101 val = I915_READ(BXT_P_CR_GT_DISP_PWRON);
2102 val &= ~GT_DISPLAY_POWER_ON(phy);
2103 I915_WRITE(BXT_P_CR_GT_DISP_PWRON, val);
2104}
2105
2106static bool __printf(6, 7)
2107__phy_reg_verify_state(struct drm_i915_private *dev_priv, enum dpio_phy phy,
2108 i915_reg_t reg, u32 mask, u32 expected,
2109 const char *reg_fmt, ...)
2110{
2111 struct va_format vaf;
2112 va_list args;
2113 u32 val;
2114
2115 val = I915_READ(reg);
2116 if ((val & mask) == expected)
2117 return true;
2118
2119 va_start(args, reg_fmt);
2120 vaf.fmt = reg_fmt;
2121 vaf.va = &args;
2122
2123 DRM_DEBUG_DRIVER("DDI PHY %d reg %pV [%08x] state mismatch: "
2124 "current %08x, expected %08x (mask %08x)\n",
2125 phy, &vaf, reg.reg, val, (val & ~mask) | expected,
2126 mask);
2127
2128 va_end(args);
2129
2130 return false;
2131}
2132
2133bool bxt_ddi_phy_verify_state(struct drm_i915_private *dev_priv,
2134 enum dpio_phy phy)
2135{
2136 uint32_t mask;
2137 bool ok;
2138
2139#define _CHK(reg, mask, exp, fmt, ...) \
2140 __phy_reg_verify_state(dev_priv, phy, reg, mask, exp, fmt, \
2141 ## __VA_ARGS__)
2142
2143 if (!bxt_ddi_phy_is_enabled(dev_priv, phy))
2144 return false;
2145
2146 ok = true;
2147
2148 /* PLL Rcomp code offset */
2149 ok &= _CHK(BXT_PORT_CL1CM_DW9(phy),
2150 IREF0RC_OFFSET_MASK, 0xe4 << IREF0RC_OFFSET_SHIFT,
2151 "BXT_PORT_CL1CM_DW9(%d)", phy);
2152 ok &= _CHK(BXT_PORT_CL1CM_DW10(phy),
2153 IREF1RC_OFFSET_MASK, 0xe4 << IREF1RC_OFFSET_SHIFT,
2154 "BXT_PORT_CL1CM_DW10(%d)", phy);
2155
2156 /* Power gating */
2157 mask = OCL1_POWER_DOWN_EN | DW28_OLDO_DYN_PWR_DOWN_EN | SUS_CLK_CONFIG;
2158 ok &= _CHK(BXT_PORT_CL1CM_DW28(phy), mask, mask,
2159 "BXT_PORT_CL1CM_DW28(%d)", phy);
2160
2161 if (phy == DPIO_PHY0)
2162 ok &= _CHK(BXT_PORT_CL2CM_DW6_BC,
2163 DW6_OLDO_DYN_PWR_DOWN_EN, DW6_OLDO_DYN_PWR_DOWN_EN,
2164 "BXT_PORT_CL2CM_DW6_BC");
2165
2166 /*
2167 * TODO: Verify BXT_PORT_CL1CM_DW30 bit OCL2_LDOFUSE_PWR_DIS,
2168 * at least on stepping A this bit is read-only and fixed at 0.
2169 */
2170
2171 if (phy == DPIO_PHY0) {
2172 u32 grc_code = dev_priv->bxt_phy_grc;
2173
2174 grc_code = grc_code << GRC_CODE_FAST_SHIFT |
2175 grc_code << GRC_CODE_SLOW_SHIFT |
2176 grc_code;
2177 mask = GRC_CODE_FAST_MASK | GRC_CODE_SLOW_MASK |
2178 GRC_CODE_NOM_MASK;
2179 ok &= _CHK(BXT_PORT_REF_DW6(DPIO_PHY0), mask, grc_code,
2180 "BXT_PORT_REF_DW6(%d)", DPIO_PHY0);
2181
2182 mask = GRC_DIS | GRC_RDY_OVRD;
2183 ok &= _CHK(BXT_PORT_REF_DW8(DPIO_PHY0), mask, mask,
2184 "BXT_PORT_REF_DW8(%d)", DPIO_PHY0);
2185 }
2186
2187 return ok;
2188#undef _CHK
2189}
2190
2191static uint8_t
2192bxt_ddi_phy_calc_lane_lat_optim_mask(struct intel_encoder *encoder,
2193 struct intel_crtc_state *pipe_config)
2194{
2195 switch (pipe_config->lane_count) {
2196 case 1:
2197 return 0;
2198 case 2:
2199 return BIT(2) | BIT(0);
2200 case 4:
2201 return BIT(3) | BIT(2) | BIT(0);
2202 default:
2203 MISSING_CASE(pipe_config->lane_count);
2204
2205 return 0;
2206 }
2207}
2208
2209static void bxt_ddi_pre_pll_enable(struct intel_encoder *encoder, 1898static void bxt_ddi_pre_pll_enable(struct intel_encoder *encoder,
2210 struct intel_crtc_state *pipe_config, 1899 struct intel_crtc_state *pipe_config,
2211 struct drm_connector_state *conn_state) 1900 struct drm_connector_state *conn_state)
2212{ 1901{
2213 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
2214 struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
2215 enum port port = dport->port;
2216 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc); 1902 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
2217 int lane; 1903 uint8_t mask = intel_crtc->config->lane_lat_optim_mask;
2218
2219 for (lane = 0; lane < 4; lane++) {
2220 u32 val = I915_READ(BXT_PORT_TX_DW14_LN(port, lane));
2221
2222 /*
2223 * Note that on CHV this flag is called UPAR, but has
2224 * the same function.
2225 */
2226 val &= ~LATENCY_OPTIM;
2227 if (intel_crtc->config->lane_lat_optim_mask & BIT(lane))
2228 val |= LATENCY_OPTIM;
2229
2230 I915_WRITE(BXT_PORT_TX_DW14_LN(port, lane), val);
2231 }
2232}
2233
2234static uint8_t
2235bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder)
2236{
2237 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
2238 struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
2239 enum port port = dport->port;
2240 int lane;
2241 uint8_t mask;
2242
2243 mask = 0;
2244 for (lane = 0; lane < 4; lane++) {
2245 u32 val = I915_READ(BXT_PORT_TX_DW14_LN(port, lane));
2246
2247 if (val & LATENCY_OPTIM)
2248 mask |= BIT(lane);
2249 }
2250 1904
2251 return mask; 1905 bxt_ddi_phy_set_lane_optim_mask(encoder, mask);
2252} 1906}
2253 1907
2254void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp) 1908void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp)
@@ -2417,7 +2071,7 @@ static bool intel_ddi_compute_config(struct intel_encoder *encoder,
2417 if (IS_BROXTON(dev_priv) && ret) 2071 if (IS_BROXTON(dev_priv) && ret)
2418 pipe_config->lane_lat_optim_mask = 2072 pipe_config->lane_lat_optim_mask =
2419 bxt_ddi_phy_calc_lane_lat_optim_mask(encoder, 2073 bxt_ddi_phy_calc_lane_lat_optim_mask(encoder,
2420 pipe_config); 2074 pipe_config->lane_count);
2421 2075
2422 return ret; 2076 return ret;
2423 2077
diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
index d6a8f11813d5..185e3bbc9ec9 100644
--- a/drivers/gpu/drm/i915/intel_device_info.c
+++ b/drivers/gpu/drm/i915/intel_device_info.c
@@ -282,12 +282,13 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
282 info->num_sprites[PIPE_A] = 2; 282 info->num_sprites[PIPE_A] = 2;
283 info->num_sprites[PIPE_B] = 2; 283 info->num_sprites[PIPE_B] = 2;
284 info->num_sprites[PIPE_C] = 1; 284 info->num_sprites[PIPE_C] = 1;
285 } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 285 } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
286 for_each_pipe(dev_priv, pipe) 286 for_each_pipe(dev_priv, pipe)
287 info->num_sprites[pipe] = 2; 287 info->num_sprites[pipe] = 2;
288 else 288 } else if (INTEL_GEN(dev_priv) >= 5) {
289 for_each_pipe(dev_priv, pipe) 289 for_each_pipe(dev_priv, pipe)
290 info->num_sprites[pipe] = 1; 290 info->num_sprites[pipe] = 1;
291 }
291 292
292 if (i915.disable_display) { 293 if (i915.disable_display) {
293 DRM_INFO("Display disabled (module parameter)\n"); 294 DRM_INFO("Display disabled (module parameter)\n");
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 895b3dc50e3f..92ab01f33208 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -37,7 +37,6 @@
37#include "intel_frontbuffer.h" 37#include "intel_frontbuffer.h"
38#include <drm/i915_drm.h> 38#include <drm/i915_drm.h>
39#include "i915_drv.h" 39#include "i915_drv.h"
40#include "i915_gem_dmabuf.h"
41#include "intel_dsi.h" 40#include "intel_dsi.h"
42#include "i915_trace.h" 41#include "i915_trace.h"
43#include <drm/drm_atomic.h> 42#include <drm/drm_atomic.h>
@@ -116,8 +115,9 @@ static void chv_prepare_pll(struct intel_crtc *crtc,
116 const struct intel_crtc_state *pipe_config); 115 const struct intel_crtc_state *pipe_config);
117static void intel_begin_crtc_commit(struct drm_crtc *, struct drm_crtc_state *); 116static void intel_begin_crtc_commit(struct drm_crtc *, struct drm_crtc_state *);
118static void intel_finish_crtc_commit(struct drm_crtc *, struct drm_crtc_state *); 117static void intel_finish_crtc_commit(struct drm_crtc *, struct drm_crtc_state *);
119static void skl_init_scalers(struct drm_device *dev, struct intel_crtc *intel_crtc, 118static void skl_init_scalers(struct drm_i915_private *dev_priv,
120 struct intel_crtc_state *crtc_state); 119 struct intel_crtc *crtc,
120 struct intel_crtc_state *crtc_state);
121static void skylake_pfit_enable(struct intel_crtc *crtc); 121static void skylake_pfit_enable(struct intel_crtc *crtc);
122static void ironlake_pfit_disable(struct intel_crtc *crtc, bool force); 122static void ironlake_pfit_disable(struct intel_crtc *crtc, bool force);
123static void ironlake_pfit_enable(struct intel_crtc *crtc); 123static void ironlake_pfit_enable(struct intel_crtc *crtc);
@@ -1008,10 +1008,8 @@ bool bxt_find_best_dpll(struct intel_crtc_state *crtc_state, int target_clock,
1008 target_clock, refclk, NULL, best_clock); 1008 target_clock, refclk, NULL, best_clock);
1009} 1009}
1010 1010
1011bool intel_crtc_active(struct drm_crtc *crtc) 1011bool intel_crtc_active(struct intel_crtc *crtc)
1012{ 1012{
1013 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1014
1015 /* Be paranoid as we can arrive here with only partial 1013 /* Be paranoid as we can arrive here with only partial
1016 * state retrieved from the hardware during setup. 1014 * state retrieved from the hardware during setup.
1017 * 1015 *
@@ -1025,17 +1023,16 @@ bool intel_crtc_active(struct drm_crtc *crtc)
1025 * crtc->state->active once we have proper CRTC states wired up 1023 * crtc->state->active once we have proper CRTC states wired up
1026 * for atomic. 1024 * for atomic.
1027 */ 1025 */
1028 return intel_crtc->active && crtc->primary->state->fb && 1026 return crtc->active && crtc->base.primary->state->fb &&
1029 intel_crtc->config->base.adjusted_mode.crtc_clock; 1027 crtc->config->base.adjusted_mode.crtc_clock;
1030} 1028}
1031 1029
1032enum transcoder intel_pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv, 1030enum transcoder intel_pipe_to_cpu_transcoder(struct drm_i915_private *dev_priv,
1033 enum pipe pipe) 1031 enum pipe pipe)
1034{ 1032{
1035 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; 1033 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
1036 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1037 1034
1038 return intel_crtc->config->cpu_transcoder; 1035 return crtc->config->cpu_transcoder;
1039} 1036}
1040 1037
1041static bool pipe_dsl_stopped(struct drm_device *dev, enum pipe pipe) 1038static bool pipe_dsl_stopped(struct drm_device *dev, enum pipe pipe)
@@ -1788,8 +1785,8 @@ void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
1788static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv, 1785static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv,
1789 enum pipe pipe) 1786 enum pipe pipe)
1790{ 1787{
1791 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; 1788 struct intel_crtc *intel_crtc = intel_get_crtc_for_pipe(dev_priv,
1792 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 1789 pipe);
1793 i915_reg_t reg; 1790 i915_reg_t reg;
1794 uint32_t val, pipeconf_val; 1791 uint32_t val, pipeconf_val;
1795 1792
@@ -4253,6 +4250,7 @@ static void ironlake_fdi_disable(struct drm_crtc *crtc)
4253 4250
4254bool intel_has_pending_fb_unpin(struct drm_device *dev) 4251bool intel_has_pending_fb_unpin(struct drm_device *dev)
4255{ 4252{
4253 struct drm_i915_private *dev_priv = to_i915(dev);
4256 struct intel_crtc *crtc; 4254 struct intel_crtc *crtc;
4257 4255
4258 /* Note that we don't need to be called with mode_config.lock here 4256 /* Note that we don't need to be called with mode_config.lock here
@@ -4267,7 +4265,7 @@ bool intel_has_pending_fb_unpin(struct drm_device *dev)
4267 continue; 4265 continue;
4268 4266
4269 if (crtc->flip_work) 4267 if (crtc->flip_work)
4270 intel_wait_for_vblank(dev, crtc->pipe); 4268 intel_wait_for_vblank(dev_priv, crtc->pipe);
4271 4269
4272 return true; 4270 return true;
4273 } 4271 }
@@ -4944,7 +4942,7 @@ void hsw_disable_ips(struct intel_crtc *crtc)
4944 } 4942 }
4945 4943
4946 /* We need to wait for a vblank before we can disable the plane. */ 4944 /* We need to wait for a vblank before we can disable the plane. */
4947 intel_wait_for_vblank(dev, crtc->pipe); 4945 intel_wait_for_vblank(dev_priv, crtc->pipe);
4948} 4946}
4949 4947
4950static void intel_crtc_dpms_overlay_disable(struct intel_crtc *intel_crtc) 4948static void intel_crtc_dpms_overlay_disable(struct intel_crtc *intel_crtc)
@@ -5056,7 +5054,7 @@ intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
5056 if (HAS_GMCH_DISPLAY(dev_priv)) { 5054 if (HAS_GMCH_DISPLAY(dev_priv)) {
5057 intel_set_memory_cxsr(dev_priv, false); 5055 intel_set_memory_cxsr(dev_priv, false);
5058 dev_priv->wm.vlv.cxsr = false; 5056 dev_priv->wm.vlv.cxsr = false;
5059 intel_wait_for_vblank(dev, pipe); 5057 intel_wait_for_vblank(dev_priv, pipe);
5060 } 5058 }
5061} 5059}
5062 5060
@@ -5075,7 +5073,7 @@ static void intel_post_plane_update(struct intel_crtc_state *old_crtc_state)
5075 crtc->wm.cxsr_allowed = true; 5073 crtc->wm.cxsr_allowed = true;
5076 5074
5077 if (pipe_config->update_wm_post && pipe_config->base.active) 5075 if (pipe_config->update_wm_post && pipe_config->base.active)
5078 intel_update_watermarks(&crtc->base); 5076 intel_update_watermarks(crtc);
5079 5077
5080 if (old_pri_state) { 5078 if (old_pri_state) {
5081 struct intel_plane_state *primary_state = 5079 struct intel_plane_state *primary_state =
@@ -5133,7 +5131,7 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state)
5133 if (old_crtc_state->base.active) { 5131 if (old_crtc_state->base.active) {
5134 intel_set_memory_cxsr(dev_priv, false); 5132 intel_set_memory_cxsr(dev_priv, false);
5135 dev_priv->wm.vlv.cxsr = false; 5133 dev_priv->wm.vlv.cxsr = false;
5136 intel_wait_for_vblank(dev, crtc->pipe); 5134 intel_wait_for_vblank(dev_priv, crtc->pipe);
5137 } 5135 }
5138 } 5136 }
5139 5137
@@ -5146,7 +5144,7 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state)
5146 */ 5144 */
5147 if (pipe_config->disable_lp_wm) { 5145 if (pipe_config->disable_lp_wm) {
5148 ilk_disable_lp_wm(dev); 5146 ilk_disable_lp_wm(dev);
5149 intel_wait_for_vblank(dev, crtc->pipe); 5147 intel_wait_for_vblank(dev_priv, crtc->pipe);
5150 } 5148 }
5151 5149
5152 /* 5150 /*
@@ -5173,7 +5171,7 @@ static void intel_pre_plane_update(struct intel_crtc_state *old_crtc_state)
5173 if (dev_priv->display.initial_watermarks != NULL) 5171 if (dev_priv->display.initial_watermarks != NULL)
5174 dev_priv->display.initial_watermarks(pipe_config); 5172 dev_priv->display.initial_watermarks(pipe_config);
5175 else if (pipe_config->update_wm_pre) 5173 else if (pipe_config->update_wm_pre)
5176 intel_update_watermarks(&crtc->base); 5174 intel_update_watermarks(crtc);
5177} 5175}
5178 5176
5179static void intel_crtc_disable_planes(struct drm_crtc *crtc, unsigned plane_mask) 5177static void intel_crtc_disable_planes(struct drm_crtc *crtc, unsigned plane_mask)
@@ -5401,7 +5399,7 @@ static void ironlake_crtc_enable(struct intel_crtc_state *pipe_config,
5401 5399
5402 /* Must wait for vblank to avoid spurious PCH FIFO underruns */ 5400 /* Must wait for vblank to avoid spurious PCH FIFO underruns */
5403 if (intel_crtc->config->has_pch_encoder) 5401 if (intel_crtc->config->has_pch_encoder)
5404 intel_wait_for_vblank(dev, pipe); 5402 intel_wait_for_vblank(dev_priv, pipe);
5405 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); 5403 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
5406 intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true); 5404 intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true);
5407} 5405}
@@ -5493,7 +5491,7 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config,
5493 if (dev_priv->display.initial_watermarks != NULL) 5491 if (dev_priv->display.initial_watermarks != NULL)
5494 dev_priv->display.initial_watermarks(pipe_config); 5492 dev_priv->display.initial_watermarks(pipe_config);
5495 else 5493 else
5496 intel_update_watermarks(crtc); 5494 intel_update_watermarks(intel_crtc);
5497 5495
5498 /* XXX: Do the pipe assertions at the right place for BXT DSI. */ 5496 /* XXX: Do the pipe assertions at the right place for BXT DSI. */
5499 if (!transcoder_is_dsi(cpu_transcoder)) 5497 if (!transcoder_is_dsi(cpu_transcoder))
@@ -5511,8 +5509,8 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config,
5511 intel_encoders_enable(crtc, pipe_config, old_state); 5509 intel_encoders_enable(crtc, pipe_config, old_state);
5512 5510
5513 if (intel_crtc->config->has_pch_encoder) { 5511 if (intel_crtc->config->has_pch_encoder) {
5514 intel_wait_for_vblank(dev, pipe); 5512 intel_wait_for_vblank(dev_priv, pipe);
5515 intel_wait_for_vblank(dev, pipe); 5513 intel_wait_for_vblank(dev_priv, pipe);
5516 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); 5514 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
5517 intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A, 5515 intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
5518 true); 5516 true);
@@ -5522,8 +5520,8 @@ static void haswell_crtc_enable(struct intel_crtc_state *pipe_config,
5522 * to change the workaround. */ 5520 * to change the workaround. */
5523 hsw_workaround_pipe = pipe_config->hsw_workaround_pipe; 5521 hsw_workaround_pipe = pipe_config->hsw_workaround_pipe;
5524 if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) { 5522 if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) {
5525 intel_wait_for_vblank(dev, hsw_workaround_pipe); 5523 intel_wait_for_vblank(dev_priv, hsw_workaround_pipe);
5526 intel_wait_for_vblank(dev, hsw_workaround_pipe); 5524 intel_wait_for_vblank(dev_priv, hsw_workaround_pipe);
5527 } 5525 }
5528} 5526}
5529 5527
@@ -5844,10 +5842,8 @@ static int intel_compute_max_dotclk(struct drm_i915_private *dev_priv)
5844 5842
5845static int skl_calc_cdclk(int max_pixclk, int vco); 5843static int skl_calc_cdclk(int max_pixclk, int vco);
5846 5844
5847static void intel_update_max_cdclk(struct drm_device *dev) 5845static void intel_update_max_cdclk(struct drm_i915_private *dev_priv)
5848{ 5846{
5849 struct drm_i915_private *dev_priv = to_i915(dev);
5850
5851 if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) { 5847 if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
5852 u32 limit = I915_READ(SKL_DFSM) & SKL_DFSM_CDCLK_LIMIT_MASK; 5848 u32 limit = I915_READ(SKL_DFSM) & SKL_DFSM_CDCLK_LIMIT_MASK;
5853 int max_cdclk, vco; 5849 int max_cdclk, vco;
@@ -5905,11 +5901,9 @@ static void intel_update_max_cdclk(struct drm_device *dev)
5905 dev_priv->max_dotclk_freq); 5901 dev_priv->max_dotclk_freq);
5906} 5902}
5907 5903
5908static void intel_update_cdclk(struct drm_device *dev) 5904static void intel_update_cdclk(struct drm_i915_private *dev_priv)
5909{ 5905{
5910 struct drm_i915_private *dev_priv = to_i915(dev); 5906 dev_priv->cdclk_freq = dev_priv->display.get_display_clock_speed(dev_priv);
5911
5912 dev_priv->cdclk_freq = dev_priv->display.get_display_clock_speed(dev);
5913 5907
5914 if (INTEL_GEN(dev_priv) >= 9) 5908 if (INTEL_GEN(dev_priv) >= 9)
5915 DRM_DEBUG_DRIVER("Current CD clock rate: %d kHz, VCO: %d kHz, ref: %d kHz\n", 5909 DRM_DEBUG_DRIVER("Current CD clock rate: %d kHz, VCO: %d kHz, ref: %d kHz\n",
@@ -6070,14 +6064,14 @@ static void bxt_set_cdclk(struct drm_i915_private *dev_priv, int cdclk)
6070 return; 6064 return;
6071 } 6065 }
6072 6066
6073 intel_update_cdclk(&dev_priv->drm); 6067 intel_update_cdclk(dev_priv);
6074} 6068}
6075 6069
6076static void bxt_sanitize_cdclk(struct drm_i915_private *dev_priv) 6070static void bxt_sanitize_cdclk(struct drm_i915_private *dev_priv)
6077{ 6071{
6078 u32 cdctl, expected; 6072 u32 cdctl, expected;
6079 6073
6080 intel_update_cdclk(&dev_priv->drm); 6074 intel_update_cdclk(dev_priv);
6081 6075
6082 if (dev_priv->cdclk_pll.vco == 0 || 6076 if (dev_priv->cdclk_pll.vco == 0 ||
6083 dev_priv->cdclk_freq == dev_priv->cdclk_pll.ref) 6077 dev_priv->cdclk_freq == dev_priv->cdclk_pll.ref)
@@ -6210,7 +6204,7 @@ void skl_set_preferred_cdclk_vco(struct drm_i915_private *dev_priv, int vco)
6210 dev_priv->skl_preferred_vco_freq = vco; 6204 dev_priv->skl_preferred_vco_freq = vco;
6211 6205
6212 if (changed) 6206 if (changed)
6213 intel_update_max_cdclk(&dev_priv->drm); 6207 intel_update_max_cdclk(dev_priv);
6214} 6208}
6215 6209
6216static void 6210static void
@@ -6296,7 +6290,6 @@ static bool skl_cdclk_wait_for_pcu_ready(struct drm_i915_private *dev_priv)
6296 6290
6297static void skl_set_cdclk(struct drm_i915_private *dev_priv, int cdclk, int vco) 6291static void skl_set_cdclk(struct drm_i915_private *dev_priv, int cdclk, int vco)
6298{ 6292{
6299 struct drm_device *dev = &dev_priv->drm;
6300 u32 freq_select, pcu_ack; 6293 u32 freq_select, pcu_ack;
6301 6294
6302 WARN_ON((cdclk == 24000) != (vco == 0)); 6295 WARN_ON((cdclk == 24000) != (vco == 0));
@@ -6347,7 +6340,7 @@ static void skl_set_cdclk(struct drm_i915_private *dev_priv, int cdclk, int vco)
6347 sandybridge_pcode_write(dev_priv, SKL_PCODE_CDCLK_CONTROL, pcu_ack); 6340 sandybridge_pcode_write(dev_priv, SKL_PCODE_CDCLK_CONTROL, pcu_ack);
6348 mutex_unlock(&dev_priv->rps.hw_lock); 6341 mutex_unlock(&dev_priv->rps.hw_lock);
6349 6342
6350 intel_update_cdclk(dev); 6343 intel_update_cdclk(dev_priv);
6351} 6344}
6352 6345
6353static void skl_sanitize_cdclk(struct drm_i915_private *dev_priv); 6346static void skl_sanitize_cdclk(struct drm_i915_private *dev_priv);
@@ -6394,7 +6387,7 @@ static void skl_sanitize_cdclk(struct drm_i915_private *dev_priv)
6394 if ((I915_READ(SWF_ILK(0x18)) & 0x00FFFFFF) == 0) 6387 if ((I915_READ(SWF_ILK(0x18)) & 0x00FFFFFF) == 0)
6395 goto sanitize; 6388 goto sanitize;
6396 6389
6397 intel_update_cdclk(&dev_priv->drm); 6390 intel_update_cdclk(dev_priv);
6398 /* Is PLL enabled and locked ? */ 6391 /* Is PLL enabled and locked ? */
6399 if (dev_priv->cdclk_pll.vco == 0 || 6392 if (dev_priv->cdclk_pll.vco == 0 ||
6400 dev_priv->cdclk_freq == dev_priv->cdclk_pll.ref) 6393 dev_priv->cdclk_freq == dev_priv->cdclk_pll.ref)
@@ -6428,7 +6421,7 @@ static void valleyview_set_cdclk(struct drm_device *dev, int cdclk)
6428 struct drm_i915_private *dev_priv = to_i915(dev); 6421 struct drm_i915_private *dev_priv = to_i915(dev);
6429 u32 val, cmd; 6422 u32 val, cmd;
6430 6423
6431 WARN_ON(dev_priv->display.get_display_clock_speed(dev) 6424 WARN_ON(dev_priv->display.get_display_clock_speed(dev_priv)
6432 != dev_priv->cdclk_freq); 6425 != dev_priv->cdclk_freq);
6433 6426
6434 if (cdclk >= 320000) /* jump to highest voltage for 400MHz too */ 6427 if (cdclk >= 320000) /* jump to highest voltage for 400MHz too */
@@ -6485,7 +6478,7 @@ static void valleyview_set_cdclk(struct drm_device *dev, int cdclk)
6485 6478
6486 mutex_unlock(&dev_priv->sb_lock); 6479 mutex_unlock(&dev_priv->sb_lock);
6487 6480
6488 intel_update_cdclk(dev); 6481 intel_update_cdclk(dev_priv);
6489} 6482}
6490 6483
6491static void cherryview_set_cdclk(struct drm_device *dev, int cdclk) 6484static void cherryview_set_cdclk(struct drm_device *dev, int cdclk)
@@ -6493,7 +6486,7 @@ static void cherryview_set_cdclk(struct drm_device *dev, int cdclk)
6493 struct drm_i915_private *dev_priv = to_i915(dev); 6486 struct drm_i915_private *dev_priv = to_i915(dev);
6494 u32 val, cmd; 6487 u32 val, cmd;
6495 6488
6496 WARN_ON(dev_priv->display.get_display_clock_speed(dev) 6489 WARN_ON(dev_priv->display.get_display_clock_speed(dev_priv)
6497 != dev_priv->cdclk_freq); 6490 != dev_priv->cdclk_freq);
6498 6491
6499 switch (cdclk) { 6492 switch (cdclk) {
@@ -6526,7 +6519,7 @@ static void cherryview_set_cdclk(struct drm_device *dev, int cdclk)
6526 } 6519 }
6527 mutex_unlock(&dev_priv->rps.hw_lock); 6520 mutex_unlock(&dev_priv->rps.hw_lock);
6528 6521
6529 intel_update_cdclk(dev); 6522 intel_update_cdclk(dev_priv);
6530} 6523}
6531 6524
6532static int valleyview_calc_cdclk(struct drm_i915_private *dev_priv, 6525static int valleyview_calc_cdclk(struct drm_i915_private *dev_priv,
@@ -6746,7 +6739,7 @@ static void valleyview_crtc_enable(struct intel_crtc_state *pipe_config,
6746 6739
6747 intel_color_load_luts(&pipe_config->base); 6740 intel_color_load_luts(&pipe_config->base);
6748 6741
6749 intel_update_watermarks(crtc); 6742 intel_update_watermarks(intel_crtc);
6750 intel_enable_pipe(intel_crtc); 6743 intel_enable_pipe(intel_crtc);
6751 6744
6752 assert_vblank_disabled(crtc); 6745 assert_vblank_disabled(crtc);
@@ -6799,7 +6792,7 @@ static void i9xx_crtc_enable(struct intel_crtc_state *pipe_config,
6799 6792
6800 intel_color_load_luts(&pipe_config->base); 6793 intel_color_load_luts(&pipe_config->base);
6801 6794
6802 intel_update_watermarks(crtc); 6795 intel_update_watermarks(intel_crtc);
6803 intel_enable_pipe(intel_crtc); 6796 intel_enable_pipe(intel_crtc);
6804 6797
6805 assert_vblank_disabled(crtc); 6798 assert_vblank_disabled(crtc);
@@ -6837,7 +6830,7 @@ static void i9xx_crtc_disable(struct intel_crtc_state *old_crtc_state,
6837 * wait for planes to fully turn off before disabling the pipe. 6830 * wait for planes to fully turn off before disabling the pipe.
6838 */ 6831 */
6839 if (IS_GEN2(dev_priv)) 6832 if (IS_GEN2(dev_priv))
6840 intel_wait_for_vblank(dev, pipe); 6833 intel_wait_for_vblank(dev_priv, pipe);
6841 6834
6842 intel_encoders_disable(crtc, old_crtc_state, old_state); 6835 intel_encoders_disable(crtc, old_crtc_state, old_state);
6843 6836
@@ -6915,7 +6908,7 @@ static void intel_crtc_disable_noatomic(struct drm_crtc *crtc)
6915 encoder->base.crtc = NULL; 6908 encoder->base.crtc = NULL;
6916 6909
6917 intel_fbc_disable(intel_crtc); 6910 intel_fbc_disable(intel_crtc);
6918 intel_update_watermarks(crtc); 6911 intel_update_watermarks(intel_crtc);
6919 intel_disable_shared_dpll(intel_crtc); 6912 intel_disable_shared_dpll(intel_crtc);
6920 6913
6921 domains = intel_crtc->enabled_power_domains; 6914 domains = intel_crtc->enabled_power_domains;
@@ -7075,7 +7068,7 @@ static int ironlake_check_fdi_lanes(struct drm_device *dev, enum pipe pipe,
7075 if (pipe_config->fdi_lanes <= 2) 7068 if (pipe_config->fdi_lanes <= 2)
7076 return 0; 7069 return 0;
7077 7070
7078 other_crtc = to_intel_crtc(intel_get_crtc_for_pipe(dev, PIPE_C)); 7071 other_crtc = intel_get_crtc_for_pipe(dev_priv, PIPE_C);
7079 other_crtc_state = 7072 other_crtc_state =
7080 intel_atomic_get_crtc_state(state, other_crtc); 7073 intel_atomic_get_crtc_state(state, other_crtc);
7081 if (IS_ERR(other_crtc_state)) 7074 if (IS_ERR(other_crtc_state))
@@ -7094,7 +7087,7 @@ static int ironlake_check_fdi_lanes(struct drm_device *dev, enum pipe pipe,
7094 return -EINVAL; 7087 return -EINVAL;
7095 } 7088 }
7096 7089
7097 other_crtc = to_intel_crtc(intel_get_crtc_for_pipe(dev, PIPE_B)); 7090 other_crtc = intel_get_crtc_for_pipe(dev_priv, PIPE_B);
7098 other_crtc_state = 7091 other_crtc_state =
7099 intel_atomic_get_crtc_state(state, other_crtc); 7092 intel_atomic_get_crtc_state(state, other_crtc);
7100 if (IS_ERR(other_crtc_state)) 7093 if (IS_ERR(other_crtc_state))
@@ -7252,10 +7245,9 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc,
7252 return 0; 7245 return 0;
7253} 7246}
7254 7247
7255static int skylake_get_display_clock_speed(struct drm_device *dev) 7248static int skylake_get_display_clock_speed(struct drm_i915_private *dev_priv)
7256{ 7249{
7257 struct drm_i915_private *dev_priv = to_i915(dev); 7250 u32 cdctl;
7258 uint32_t cdctl;
7259 7251
7260 skl_dpll0_update(dev_priv); 7252 skl_dpll0_update(dev_priv);
7261 7253
@@ -7314,9 +7306,8 @@ static void bxt_de_pll_update(struct drm_i915_private *dev_priv)
7314 dev_priv->cdclk_pll.ref; 7306 dev_priv->cdclk_pll.ref;
7315} 7307}
7316 7308
7317static int broxton_get_display_clock_speed(struct drm_device *dev) 7309static int broxton_get_display_clock_speed(struct drm_i915_private *dev_priv)
7318{ 7310{
7319 struct drm_i915_private *dev_priv = to_i915(dev);
7320 u32 divider; 7311 u32 divider;
7321 int div, vco; 7312 int div, vco;
7322 7313
@@ -7349,9 +7340,8 @@ static int broxton_get_display_clock_speed(struct drm_device *dev)
7349 return DIV_ROUND_CLOSEST(vco, div); 7340 return DIV_ROUND_CLOSEST(vco, div);
7350} 7341}
7351 7342
7352static int broadwell_get_display_clock_speed(struct drm_device *dev) 7343static int broadwell_get_display_clock_speed(struct drm_i915_private *dev_priv)
7353{ 7344{
7354 struct drm_i915_private *dev_priv = to_i915(dev);
7355 uint32_t lcpll = I915_READ(LCPLL_CTL); 7345 uint32_t lcpll = I915_READ(LCPLL_CTL);
7356 uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK; 7346 uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK;
7357 7347
@@ -7369,9 +7359,8 @@ static int broadwell_get_display_clock_speed(struct drm_device *dev)
7369 return 675000; 7359 return 675000;
7370} 7360}
7371 7361
7372static int haswell_get_display_clock_speed(struct drm_device *dev) 7362static int haswell_get_display_clock_speed(struct drm_i915_private *dev_priv)
7373{ 7363{
7374 struct drm_i915_private *dev_priv = to_i915(dev);
7375 uint32_t lcpll = I915_READ(LCPLL_CTL); 7364 uint32_t lcpll = I915_READ(LCPLL_CTL);
7376 uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK; 7365 uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK;
7377 7366
@@ -7387,35 +7376,35 @@ static int haswell_get_display_clock_speed(struct drm_device *dev)
7387 return 540000; 7376 return 540000;
7388} 7377}
7389 7378
7390static int valleyview_get_display_clock_speed(struct drm_device *dev) 7379static int valleyview_get_display_clock_speed(struct drm_i915_private *dev_priv)
7391{ 7380{
7392 return vlv_get_cck_clock_hpll(to_i915(dev), "cdclk", 7381 return vlv_get_cck_clock_hpll(dev_priv, "cdclk",
7393 CCK_DISPLAY_CLOCK_CONTROL); 7382 CCK_DISPLAY_CLOCK_CONTROL);
7394} 7383}
7395 7384
7396static int ilk_get_display_clock_speed(struct drm_device *dev) 7385static int ilk_get_display_clock_speed(struct drm_i915_private *dev_priv)
7397{ 7386{
7398 return 450000; 7387 return 450000;
7399} 7388}
7400 7389
7401static int i945_get_display_clock_speed(struct drm_device *dev) 7390static int i945_get_display_clock_speed(struct drm_i915_private *dev_priv)
7402{ 7391{
7403 return 400000; 7392 return 400000;
7404} 7393}
7405 7394
7406static int i915_get_display_clock_speed(struct drm_device *dev) 7395static int i915_get_display_clock_speed(struct drm_i915_private *dev_priv)
7407{ 7396{
7408 return 333333; 7397 return 333333;
7409} 7398}
7410 7399
7411static int i9xx_misc_get_display_clock_speed(struct drm_device *dev) 7400static int i9xx_misc_get_display_clock_speed(struct drm_i915_private *dev_priv)
7412{ 7401{
7413 return 200000; 7402 return 200000;
7414} 7403}
7415 7404
7416static int pnv_get_display_clock_speed(struct drm_device *dev) 7405static int pnv_get_display_clock_speed(struct drm_i915_private *dev_priv)
7417{ 7406{
7418 struct pci_dev *pdev = dev->pdev; 7407 struct pci_dev *pdev = dev_priv->drm.pdev;
7419 u16 gcfgc = 0; 7408 u16 gcfgc = 0;
7420 7409
7421 pci_read_config_word(pdev, GCFGC, &gcfgc); 7410 pci_read_config_word(pdev, GCFGC, &gcfgc);
@@ -7438,9 +7427,9 @@ static int pnv_get_display_clock_speed(struct drm_device *dev)
7438 } 7427 }
7439} 7428}
7440 7429
7441static int i915gm_get_display_clock_speed(struct drm_device *dev) 7430static int i915gm_get_display_clock_speed(struct drm_i915_private *dev_priv)
7442{ 7431{
7443 struct pci_dev *pdev = dev->pdev; 7432 struct pci_dev *pdev = dev_priv->drm.pdev;
7444 u16 gcfgc = 0; 7433 u16 gcfgc = 0;
7445 7434
7446 pci_read_config_word(pdev, GCFGC, &gcfgc); 7435 pci_read_config_word(pdev, GCFGC, &gcfgc);
@@ -7458,14 +7447,14 @@ static int i915gm_get_display_clock_speed(struct drm_device *dev)
7458 } 7447 }
7459} 7448}
7460 7449
7461static int i865_get_display_clock_speed(struct drm_device *dev) 7450static int i865_get_display_clock_speed(struct drm_i915_private *dev_priv)
7462{ 7451{
7463 return 266667; 7452 return 266667;
7464} 7453}
7465 7454
7466static int i85x_get_display_clock_speed(struct drm_device *dev) 7455static int i85x_get_display_clock_speed(struct drm_i915_private *dev_priv)
7467{ 7456{
7468 struct pci_dev *pdev = dev->pdev; 7457 struct pci_dev *pdev = dev_priv->drm.pdev;
7469 u16 hpllcc = 0; 7458 u16 hpllcc = 0;
7470 7459
7471 /* 7460 /*
@@ -7501,14 +7490,13 @@ static int i85x_get_display_clock_speed(struct drm_device *dev)
7501 return 0; 7490 return 0;
7502} 7491}
7503 7492
7504static int i830_get_display_clock_speed(struct drm_device *dev) 7493static int i830_get_display_clock_speed(struct drm_i915_private *dev_priv)
7505{ 7494{
7506 return 133333; 7495 return 133333;
7507} 7496}
7508 7497
7509static unsigned int intel_hpll_vco(struct drm_device *dev) 7498static unsigned int intel_hpll_vco(struct drm_i915_private *dev_priv)
7510{ 7499{
7511 struct drm_i915_private *dev_priv = to_i915(dev);
7512 static const unsigned int blb_vco[8] = { 7500 static const unsigned int blb_vco[8] = {
7513 [0] = 3200000, 7501 [0] = 3200000,
7514 [1] = 4000000, 7502 [1] = 4000000,
@@ -7555,16 +7543,16 @@ static unsigned int intel_hpll_vco(struct drm_device *dev)
7555 vco_table = ctg_vco; 7543 vco_table = ctg_vco;
7556 else if (IS_G4X(dev_priv)) 7544 else if (IS_G4X(dev_priv))
7557 vco_table = elk_vco; 7545 vco_table = elk_vco;
7558 else if (IS_CRESTLINE(dev)) 7546 else if (IS_CRESTLINE(dev_priv))
7559 vco_table = cl_vco; 7547 vco_table = cl_vco;
7560 else if (IS_PINEVIEW(dev)) 7548 else if (IS_PINEVIEW(dev_priv))
7561 vco_table = pnv_vco; 7549 vco_table = pnv_vco;
7562 else if (IS_G33(dev)) 7550 else if (IS_G33(dev_priv))
7563 vco_table = blb_vco; 7551 vco_table = blb_vco;
7564 else 7552 else
7565 return 0; 7553 return 0;
7566 7554
7567 tmp = I915_READ(IS_MOBILE(dev) ? HPLLVCO_MOBILE : HPLLVCO); 7555 tmp = I915_READ(IS_MOBILE(dev_priv) ? HPLLVCO_MOBILE : HPLLVCO);
7568 7556
7569 vco = vco_table[tmp & 0x7]; 7557 vco = vco_table[tmp & 0x7];
7570 if (vco == 0) 7558 if (vco == 0)
@@ -7575,10 +7563,10 @@ static unsigned int intel_hpll_vco(struct drm_device *dev)
7575 return vco; 7563 return vco;
7576} 7564}
7577 7565
7578static int gm45_get_display_clock_speed(struct drm_device *dev) 7566static int gm45_get_display_clock_speed(struct drm_i915_private *dev_priv)
7579{ 7567{
7580 struct pci_dev *pdev = dev->pdev; 7568 struct pci_dev *pdev = dev_priv->drm.pdev;
7581 unsigned int cdclk_sel, vco = intel_hpll_vco(dev); 7569 unsigned int cdclk_sel, vco = intel_hpll_vco(dev_priv);
7582 uint16_t tmp = 0; 7570 uint16_t tmp = 0;
7583 7571
7584 pci_read_config_word(pdev, GCFGC, &tmp); 7572 pci_read_config_word(pdev, GCFGC, &tmp);
@@ -7598,14 +7586,14 @@ static int gm45_get_display_clock_speed(struct drm_device *dev)
7598 } 7586 }
7599} 7587}
7600 7588
7601static int i965gm_get_display_clock_speed(struct drm_device *dev) 7589static int i965gm_get_display_clock_speed(struct drm_i915_private *dev_priv)
7602{ 7590{
7603 struct pci_dev *pdev = dev->pdev; 7591 struct pci_dev *pdev = dev_priv->drm.pdev;
7604 static const uint8_t div_3200[] = { 16, 10, 8 }; 7592 static const uint8_t div_3200[] = { 16, 10, 8 };
7605 static const uint8_t div_4000[] = { 20, 12, 10 }; 7593 static const uint8_t div_4000[] = { 20, 12, 10 };
7606 static const uint8_t div_5333[] = { 24, 16, 14 }; 7594 static const uint8_t div_5333[] = { 24, 16, 14 };
7607 const uint8_t *div_table; 7595 const uint8_t *div_table;
7608 unsigned int cdclk_sel, vco = intel_hpll_vco(dev); 7596 unsigned int cdclk_sel, vco = intel_hpll_vco(dev_priv);
7609 uint16_t tmp = 0; 7597 uint16_t tmp = 0;
7610 7598
7611 pci_read_config_word(pdev, GCFGC, &tmp); 7599 pci_read_config_word(pdev, GCFGC, &tmp);
@@ -7636,15 +7624,15 @@ fail:
7636 return 200000; 7624 return 200000;
7637} 7625}
7638 7626
7639static int g33_get_display_clock_speed(struct drm_device *dev) 7627static int g33_get_display_clock_speed(struct drm_i915_private *dev_priv)
7640{ 7628{
7641 struct pci_dev *pdev = dev->pdev; 7629 struct pci_dev *pdev = dev_priv->drm.pdev;
7642 static const uint8_t div_3200[] = { 12, 10, 8, 7, 5, 16 }; 7630 static const uint8_t div_3200[] = { 12, 10, 8, 7, 5, 16 };
7643 static const uint8_t div_4000[] = { 14, 12, 10, 8, 6, 20 }; 7631 static const uint8_t div_4000[] = { 14, 12, 10, 8, 6, 20 };
7644 static const uint8_t div_4800[] = { 20, 14, 12, 10, 8, 24 }; 7632 static const uint8_t div_4800[] = { 20, 14, 12, 10, 8, 24 };
7645 static const uint8_t div_5333[] = { 20, 16, 12, 12, 8, 28 }; 7633 static const uint8_t div_5333[] = { 20, 16, 12, 12, 8, 28 };
7646 const uint8_t *div_table; 7634 const uint8_t *div_table;
7647 unsigned int cdclk_sel, vco = intel_hpll_vco(dev); 7635 unsigned int cdclk_sel, vco = intel_hpll_vco(dev_priv);
7648 uint16_t tmp = 0; 7636 uint16_t tmp = 0;
7649 7637
7650 pci_read_config_word(pdev, GCFGC, &tmp); 7638 pci_read_config_word(pdev, GCFGC, &tmp);
@@ -7733,10 +7721,10 @@ static void i9xx_update_pll_dividers(struct intel_crtc *crtc,
7733 struct intel_crtc_state *crtc_state, 7721 struct intel_crtc_state *crtc_state,
7734 struct dpll *reduced_clock) 7722 struct dpll *reduced_clock)
7735{ 7723{
7736 struct drm_device *dev = crtc->base.dev; 7724 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7737 u32 fp, fp2 = 0; 7725 u32 fp, fp2 = 0;
7738 7726
7739 if (IS_PINEVIEW(dev)) { 7727 if (IS_PINEVIEW(dev_priv)) {
7740 fp = pnv_dpll_compute_fp(&crtc_state->dpll); 7728 fp = pnv_dpll_compute_fp(&crtc_state->dpll);
7741 if (reduced_clock) 7729 if (reduced_clock)
7742 fp2 = pnv_dpll_compute_fp(reduced_clock); 7730 fp2 = pnv_dpll_compute_fp(reduced_clock);
@@ -8106,11 +8094,10 @@ static void chv_prepare_pll(struct intel_crtc *crtc,
8106 * in cases where we need the PLL enabled even when @pipe is not going to 8094 * in cases where we need the PLL enabled even when @pipe is not going to
8107 * be enabled. 8095 * be enabled.
8108 */ 8096 */
8109int vlv_force_pll_on(struct drm_device *dev, enum pipe pipe, 8097int vlv_force_pll_on(struct drm_i915_private *dev_priv, enum pipe pipe,
8110 const struct dpll *dpll) 8098 const struct dpll *dpll)
8111{ 8099{
8112 struct intel_crtc *crtc = 8100 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
8113 to_intel_crtc(intel_get_crtc_for_pipe(dev, pipe));
8114 struct intel_crtc_state *pipe_config; 8101 struct intel_crtc_state *pipe_config;
8115 8102
8116 pipe_config = kzalloc(sizeof(*pipe_config), GFP_KERNEL); 8103 pipe_config = kzalloc(sizeof(*pipe_config), GFP_KERNEL);
@@ -8121,7 +8108,7 @@ int vlv_force_pll_on(struct drm_device *dev, enum pipe pipe,
8121 pipe_config->pixel_multiplier = 1; 8108 pipe_config->pixel_multiplier = 1;
8122 pipe_config->dpll = *dpll; 8109 pipe_config->dpll = *dpll;
8123 8110
8124 if (IS_CHERRYVIEW(to_i915(dev))) { 8111 if (IS_CHERRYVIEW(dev_priv)) {
8125 chv_compute_dpll(crtc, pipe_config); 8112 chv_compute_dpll(crtc, pipe_config);
8126 chv_prepare_pll(crtc, pipe_config); 8113 chv_prepare_pll(crtc, pipe_config);
8127 chv_enable_pll(crtc, pipe_config); 8114 chv_enable_pll(crtc, pipe_config);
@@ -8144,20 +8131,19 @@ int vlv_force_pll_on(struct drm_device *dev, enum pipe pipe,
8144 * Disable the PLL for @pipe. To be used in cases where we need 8131 * Disable the PLL for @pipe. To be used in cases where we need
8145 * the PLL enabled even when @pipe is not going to be enabled. 8132 * the PLL enabled even when @pipe is not going to be enabled.
8146 */ 8133 */
8147void vlv_force_pll_off(struct drm_device *dev, enum pipe pipe) 8134void vlv_force_pll_off(struct drm_i915_private *dev_priv, enum pipe pipe)
8148{ 8135{
8149 if (IS_CHERRYVIEW(to_i915(dev))) 8136 if (IS_CHERRYVIEW(dev_priv))
8150 chv_disable_pll(to_i915(dev), pipe); 8137 chv_disable_pll(dev_priv, pipe);
8151 else 8138 else
8152 vlv_disable_pll(to_i915(dev), pipe); 8139 vlv_disable_pll(dev_priv, pipe);
8153} 8140}
8154 8141
8155static void i9xx_compute_dpll(struct intel_crtc *crtc, 8142static void i9xx_compute_dpll(struct intel_crtc *crtc,
8156 struct intel_crtc_state *crtc_state, 8143 struct intel_crtc_state *crtc_state,
8157 struct dpll *reduced_clock) 8144 struct dpll *reduced_clock)
8158{ 8145{
8159 struct drm_device *dev = crtc->base.dev; 8146 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
8160 struct drm_i915_private *dev_priv = to_i915(dev);
8161 u32 dpll; 8147 u32 dpll;
8162 struct dpll *clock = &crtc_state->dpll; 8148 struct dpll *clock = &crtc_state->dpll;
8163 8149
@@ -8183,7 +8169,7 @@ static void i9xx_compute_dpll(struct intel_crtc *crtc,
8183 dpll |= DPLL_SDVO_HIGH_SPEED; 8169 dpll |= DPLL_SDVO_HIGH_SPEED;
8184 8170
8185 /* compute bitmask from p1 value */ 8171 /* compute bitmask from p1 value */
8186 if (IS_PINEVIEW(dev)) 8172 if (IS_PINEVIEW(dev_priv))
8187 dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW; 8173 dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW;
8188 else { 8174 else {
8189 dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT; 8175 dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
@@ -8204,7 +8190,7 @@ static void i9xx_compute_dpll(struct intel_crtc *crtc,
8204 dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14; 8190 dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14;
8205 break; 8191 break;
8206 } 8192 }
8207 if (INTEL_INFO(dev)->gen >= 4) 8193 if (INTEL_GEN(dev_priv) >= 4)
8208 dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT); 8194 dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT);
8209 8195
8210 if (crtc_state->sdvo_tv_clock) 8196 if (crtc_state->sdvo_tv_clock)
@@ -8218,7 +8204,7 @@ static void i9xx_compute_dpll(struct intel_crtc *crtc,
8218 dpll |= DPLL_VCO_ENABLE; 8204 dpll |= DPLL_VCO_ENABLE;
8219 crtc_state->dpll_hw_state.dpll = dpll; 8205 crtc_state->dpll_hw_state.dpll = dpll;
8220 8206
8221 if (INTEL_INFO(dev)->gen >= 4) { 8207 if (INTEL_GEN(dev_priv) >= 4) {
8222 u32 dpll_md = (crtc_state->pixel_multiplier - 1) 8208 u32 dpll_md = (crtc_state->pixel_multiplier - 1)
8223 << DPLL_MD_UDI_MULTIPLIER_SHIFT; 8209 << DPLL_MD_UDI_MULTIPLIER_SHIFT;
8224 crtc_state->dpll_hw_state.dpll_md = dpll_md; 8210 crtc_state->dpll_hw_state.dpll_md = dpll_md;
@@ -10191,7 +10177,7 @@ static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
10191 } 10177 }
10192 10178
10193 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); 10179 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
10194 intel_update_cdclk(&dev_priv->drm); 10180 intel_update_cdclk(dev_priv);
10195} 10181}
10196 10182
10197/* 10183/*
@@ -10261,6 +10247,29 @@ static void bxt_modeset_commit_cdclk(struct drm_atomic_state *old_state)
10261 bxt_set_cdclk(to_i915(dev), req_cdclk); 10247 bxt_set_cdclk(to_i915(dev), req_cdclk);
10262} 10248}
10263 10249
10250static int bdw_adjust_min_pipe_pixel_rate(struct intel_crtc_state *crtc_state,
10251 int pixel_rate)
10252{
10253 struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev);
10254
10255 /* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
10256 if (IS_BROADWELL(dev_priv) && crtc_state->ips_enabled)
10257 pixel_rate = DIV_ROUND_UP(pixel_rate * 100, 95);
10258
10259 /* BSpec says "Do not use DisplayPort with CDCLK less than
10260 * 432 MHz, audio enabled, port width x4, and link rate
10261 * HBR2 (5.4 GHz), or else there may be audio corruption or
10262 * screen corruption."
10263 */
10264 if (intel_crtc_has_dp_encoder(crtc_state) &&
10265 crtc_state->has_audio &&
10266 crtc_state->port_clock >= 540000 &&
10267 crtc_state->lane_count == 4)
10268 pixel_rate = max(432000, pixel_rate);
10269
10270 return pixel_rate;
10271}
10272
10264/* compute the max rate for new configuration */ 10273/* compute the max rate for new configuration */
10265static int ilk_max_pixel_rate(struct drm_atomic_state *state) 10274static int ilk_max_pixel_rate(struct drm_atomic_state *state)
10266{ 10275{
@@ -10286,9 +10295,9 @@ static int ilk_max_pixel_rate(struct drm_atomic_state *state)
10286 10295
10287 pixel_rate = ilk_pipe_pixel_rate(crtc_state); 10296 pixel_rate = ilk_pipe_pixel_rate(crtc_state);
10288 10297
10289 /* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */ 10298 if (IS_BROADWELL(dev_priv) || IS_GEN9(dev_priv))
10290 if (IS_BROADWELL(dev_priv) && crtc_state->ips_enabled) 10299 pixel_rate = bdw_adjust_min_pipe_pixel_rate(crtc_state,
10291 pixel_rate = DIV_ROUND_UP(pixel_rate * 100, 95); 10300 pixel_rate);
10292 10301
10293 intel_state->min_pixclk[i] = pixel_rate; 10302 intel_state->min_pixclk[i] = pixel_rate;
10294 } 10303 }
@@ -10371,7 +10380,7 @@ static void broadwell_set_cdclk(struct drm_device *dev, int cdclk)
10371 10380
10372 I915_WRITE(CDCLK_FREQ, DIV_ROUND_CLOSEST(cdclk, 1000) - 1); 10381 I915_WRITE(CDCLK_FREQ, DIV_ROUND_CLOSEST(cdclk, 1000) - 1);
10373 10382
10374 intel_update_cdclk(dev); 10383 intel_update_cdclk(dev_priv);
10375 10384
10376 WARN(cdclk != dev_priv->cdclk_freq, 10385 WARN(cdclk != dev_priv->cdclk_freq,
10377 "cdclk requested %d kHz but got %d kHz\n", 10386 "cdclk requested %d kHz but got %d kHz\n",
@@ -10736,10 +10745,8 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
10736 I915_READ(GAMMA_MODE(crtc->pipe)) & GAMMA_MODE_MODE_MASK; 10745 I915_READ(GAMMA_MODE(crtc->pipe)) & GAMMA_MODE_MODE_MASK;
10737 10746
10738 if (INTEL_INFO(dev)->gen >= 9) { 10747 if (INTEL_INFO(dev)->gen >= 9) {
10739 skl_init_scalers(dev, crtc, pipe_config); 10748 skl_init_scalers(dev_priv, crtc, pipe_config);
10740 }
10741 10749
10742 if (INTEL_INFO(dev)->gen >= 9) {
10743 pipe_config->scaler_state.scaler_id = -1; 10750 pipe_config->scaler_state.scaler_id = -1;
10744 pipe_config->scaler_state.scaler_users &= ~(1 << SKL_CRTC_INDEX); 10751 pipe_config->scaler_state.scaler_users &= ~(1 << SKL_CRTC_INDEX);
10745 } 10752 }
@@ -11051,7 +11058,7 @@ intel_framebuffer_create_for_mode(struct drm_device *dev,
11051 11058
11052 fb = intel_framebuffer_create(dev, &mode_cmd, obj); 11059 fb = intel_framebuffer_create(dev, &mode_cmd, obj);
11053 if (IS_ERR(fb)) 11060 if (IS_ERR(fb))
11054 i915_gem_object_put_unlocked(obj); 11061 i915_gem_object_put(obj);
11055 11062
11056 return fb; 11063 return fb;
11057} 11064}
@@ -11136,6 +11143,7 @@ bool intel_get_load_detect_pipe(struct drm_connector *connector,
11136 struct drm_encoder *encoder = &intel_encoder->base; 11143 struct drm_encoder *encoder = &intel_encoder->base;
11137 struct drm_crtc *crtc = NULL; 11144 struct drm_crtc *crtc = NULL;
11138 struct drm_device *dev = encoder->dev; 11145 struct drm_device *dev = encoder->dev;
11146 struct drm_i915_private *dev_priv = to_i915(dev);
11139 struct drm_framebuffer *fb; 11147 struct drm_framebuffer *fb;
11140 struct drm_mode_config *config = &dev->mode_config; 11148 struct drm_mode_config *config = &dev->mode_config;
11141 struct drm_atomic_state *state = NULL, *restore_state = NULL; 11149 struct drm_atomic_state *state = NULL, *restore_state = NULL;
@@ -11288,7 +11296,7 @@ found:
11288 old->restore_state = restore_state; 11296 old->restore_state = restore_state;
11289 11297
11290 /* let the connector get through one full cycle before testing */ 11298 /* let the connector get through one full cycle before testing */
11291 intel_wait_for_vblank(dev, intel_crtc->pipe); 11299 intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
11292 return true; 11300 return true;
11293 11301
11294fail: 11302fail:
@@ -11367,7 +11375,7 @@ static void i9xx_crtc_clock_get(struct intel_crtc *crtc,
11367 fp = pipe_config->dpll_hw_state.fp1; 11375 fp = pipe_config->dpll_hw_state.fp1;
11368 11376
11369 clock.m1 = (fp & FP_M1_DIV_MASK) >> FP_M1_DIV_SHIFT; 11377 clock.m1 = (fp & FP_M1_DIV_MASK) >> FP_M1_DIV_SHIFT;
11370 if (IS_PINEVIEW(dev)) { 11378 if (IS_PINEVIEW(dev_priv)) {
11371 clock.n = ffs((fp & FP_N_PINEVIEW_DIV_MASK) >> FP_N_DIV_SHIFT) - 1; 11379 clock.n = ffs((fp & FP_N_PINEVIEW_DIV_MASK) >> FP_N_DIV_SHIFT) - 1;
11372 clock.m2 = (fp & FP_M2_PINEVIEW_DIV_MASK) >> FP_M2_DIV_SHIFT; 11380 clock.m2 = (fp & FP_M2_PINEVIEW_DIV_MASK) >> FP_M2_DIV_SHIFT;
11373 } else { 11381 } else {
@@ -11376,7 +11384,7 @@ static void i9xx_crtc_clock_get(struct intel_crtc *crtc,
11376 } 11384 }
11377 11385
11378 if (!IS_GEN2(dev_priv)) { 11386 if (!IS_GEN2(dev_priv)) {
11379 if (IS_PINEVIEW(dev)) 11387 if (IS_PINEVIEW(dev_priv))
11380 clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW) >> 11388 clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW) >>
11381 DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW); 11389 DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW);
11382 else 11390 else
@@ -11398,7 +11406,7 @@ static void i9xx_crtc_clock_get(struct intel_crtc *crtc,
11398 return; 11406 return;
11399 } 11407 }
11400 11408
11401 if (IS_PINEVIEW(dev)) 11409 if (IS_PINEVIEW(dev_priv))
11402 port_clock = pnv_calc_dpll_params(refclk, &clock); 11410 port_clock = pnv_calc_dpll_params(refclk, &clock);
11403 else 11411 else
11404 port_clock = i9xx_calc_dpll_params(refclk, &clock); 11412 port_clock = i9xx_calc_dpll_params(refclk, &clock);
@@ -11667,8 +11675,7 @@ static bool pageflip_finished(struct intel_crtc *crtc,
11667void intel_finish_page_flip_cs(struct drm_i915_private *dev_priv, int pipe) 11675void intel_finish_page_flip_cs(struct drm_i915_private *dev_priv, int pipe)
11668{ 11676{
11669 struct drm_device *dev = &dev_priv->drm; 11677 struct drm_device *dev = &dev_priv->drm;
11670 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; 11678 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
11671 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
11672 struct intel_flip_work *work; 11679 struct intel_flip_work *work;
11673 unsigned long flags; 11680 unsigned long flags;
11674 11681
@@ -11681,12 +11688,12 @@ void intel_finish_page_flip_cs(struct drm_i915_private *dev_priv, int pipe)
11681 * lost pageflips) so needs the full irqsave spinlocks. 11688 * lost pageflips) so needs the full irqsave spinlocks.
11682 */ 11689 */
11683 spin_lock_irqsave(&dev->event_lock, flags); 11690 spin_lock_irqsave(&dev->event_lock, flags);
11684 work = intel_crtc->flip_work; 11691 work = crtc->flip_work;
11685 11692
11686 if (work != NULL && 11693 if (work != NULL &&
11687 !is_mmio_work(work) && 11694 !is_mmio_work(work) &&
11688 pageflip_finished(intel_crtc, work)) 11695 pageflip_finished(crtc, work))
11689 page_flip_completed(intel_crtc); 11696 page_flip_completed(crtc);
11690 11697
11691 spin_unlock_irqrestore(&dev->event_lock, flags); 11698 spin_unlock_irqrestore(&dev->event_lock, flags);
11692} 11699}
@@ -11694,8 +11701,7 @@ void intel_finish_page_flip_cs(struct drm_i915_private *dev_priv, int pipe)
11694void intel_finish_page_flip_mmio(struct drm_i915_private *dev_priv, int pipe) 11701void intel_finish_page_flip_mmio(struct drm_i915_private *dev_priv, int pipe)
11695{ 11702{
11696 struct drm_device *dev = &dev_priv->drm; 11703 struct drm_device *dev = &dev_priv->drm;
11697 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; 11704 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
11698 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
11699 struct intel_flip_work *work; 11705 struct intel_flip_work *work;
11700 unsigned long flags; 11706 unsigned long flags;
11701 11707
@@ -11708,12 +11714,12 @@ void intel_finish_page_flip_mmio(struct drm_i915_private *dev_priv, int pipe)
11708 * lost pageflips) so needs the full irqsave spinlocks. 11714 * lost pageflips) so needs the full irqsave spinlocks.
11709 */ 11715 */
11710 spin_lock_irqsave(&dev->event_lock, flags); 11716 spin_lock_irqsave(&dev->event_lock, flags);
11711 work = intel_crtc->flip_work; 11717 work = crtc->flip_work;
11712 11718
11713 if (work != NULL && 11719 if (work != NULL &&
11714 is_mmio_work(work) && 11720 is_mmio_work(work) &&
11715 pageflip_finished(intel_crtc, work)) 11721 pageflip_finished(crtc, work))
11716 page_flip_completed(intel_crtc); 11722 page_flip_completed(crtc);
11717 11723
11718 spin_unlock_irqrestore(&dev->event_lock, flags); 11724 spin_unlock_irqrestore(&dev->event_lock, flags);
11719} 11725}
@@ -11967,8 +11973,6 @@ static int intel_gen7_queue_flip(struct drm_device *dev,
11967static bool use_mmio_flip(struct intel_engine_cs *engine, 11973static bool use_mmio_flip(struct intel_engine_cs *engine,
11968 struct drm_i915_gem_object *obj) 11974 struct drm_i915_gem_object *obj)
11969{ 11975{
11970 struct reservation_object *resv;
11971
11972 /* 11976 /*
11973 * This is not being used for older platforms, because 11977 * This is not being used for older platforms, because
11974 * non-availability of flip done interrupt forces us to use 11978 * non-availability of flip done interrupt forces us to use
@@ -11990,12 +11994,7 @@ static bool use_mmio_flip(struct intel_engine_cs *engine,
11990 else if (i915.enable_execlists) 11994 else if (i915.enable_execlists)
11991 return true; 11995 return true;
11992 11996
11993 resv = i915_gem_object_get_dmabuf_resv(obj); 11997 return engine != i915_gem_object_last_write_engine(obj);
11994 if (resv && !reservation_object_test_signaled_rcu(resv, false))
11995 return true;
11996
11997 return engine != i915_gem_active_get_engine(&obj->last_write,
11998 &obj->base.dev->struct_mutex);
11999} 11998}
12000 11999
12001static void skl_do_mmio_flip(struct intel_crtc *intel_crtc, 12000static void skl_do_mmio_flip(struct intel_crtc *intel_crtc,
@@ -12068,17 +12067,8 @@ static void intel_mmio_flip_work_func(struct work_struct *w)
12068 struct intel_framebuffer *intel_fb = 12067 struct intel_framebuffer *intel_fb =
12069 to_intel_framebuffer(crtc->base.primary->fb); 12068 to_intel_framebuffer(crtc->base.primary->fb);
12070 struct drm_i915_gem_object *obj = intel_fb->obj; 12069 struct drm_i915_gem_object *obj = intel_fb->obj;
12071 struct reservation_object *resv;
12072 12070
12073 if (work->flip_queued_req) 12071 WARN_ON(i915_gem_object_wait(obj, 0, MAX_SCHEDULE_TIMEOUT, NULL) < 0);
12074 WARN_ON(i915_wait_request(work->flip_queued_req,
12075 0, NULL, NO_WAITBOOST));
12076
12077 /* For framebuffer backed by dmabuf, wait for fence */
12078 resv = i915_gem_object_get_dmabuf_resv(obj);
12079 if (resv)
12080 WARN_ON(reservation_object_wait_timeout_rcu(resv, false, false,
12081 MAX_SCHEDULE_TIMEOUT) < 0);
12082 12072
12083 intel_pipe_update_start(crtc); 12073 intel_pipe_update_start(crtc);
12084 12074
@@ -12141,8 +12131,7 @@ static bool __pageflip_stall_check_cs(struct drm_i915_private *dev_priv,
12141void intel_check_page_flip(struct drm_i915_private *dev_priv, int pipe) 12131void intel_check_page_flip(struct drm_i915_private *dev_priv, int pipe)
12142{ 12132{
12143 struct drm_device *dev = &dev_priv->drm; 12133 struct drm_device *dev = &dev_priv->drm;
12144 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; 12134 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
12145 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
12146 struct intel_flip_work *work; 12135 struct intel_flip_work *work;
12147 12136
12148 WARN_ON(!in_interrupt()); 12137 WARN_ON(!in_interrupt());
@@ -12151,19 +12140,19 @@ void intel_check_page_flip(struct drm_i915_private *dev_priv, int pipe)
12151 return; 12140 return;
12152 12141
12153 spin_lock(&dev->event_lock); 12142 spin_lock(&dev->event_lock);
12154 work = intel_crtc->flip_work; 12143 work = crtc->flip_work;
12155 12144
12156 if (work != NULL && !is_mmio_work(work) && 12145 if (work != NULL && !is_mmio_work(work) &&
12157 __pageflip_stall_check_cs(dev_priv, intel_crtc, work)) { 12146 __pageflip_stall_check_cs(dev_priv, crtc, work)) {
12158 WARN_ONCE(1, 12147 WARN_ONCE(1,
12159 "Kicking stuck page flip: queued at %d, now %d\n", 12148 "Kicking stuck page flip: queued at %d, now %d\n",
12160 work->flip_queued_vblank, intel_crtc_get_vblank_counter(intel_crtc)); 12149 work->flip_queued_vblank, intel_crtc_get_vblank_counter(crtc));
12161 page_flip_completed(intel_crtc); 12150 page_flip_completed(crtc);
12162 work = NULL; 12151 work = NULL;
12163 } 12152 }
12164 12153
12165 if (work != NULL && !is_mmio_work(work) && 12154 if (work != NULL && !is_mmio_work(work) &&
12166 intel_crtc_get_vblank_counter(intel_crtc) - work->flip_queued_vblank > 1) 12155 intel_crtc_get_vblank_counter(crtc) - work->flip_queued_vblank > 1)
12167 intel_queue_rps_boost_for_request(work->flip_queued_req); 12156 intel_queue_rps_boost_for_request(work->flip_queued_req);
12168 spin_unlock(&dev->event_lock); 12157 spin_unlock(&dev->event_lock);
12169} 12158}
@@ -12279,8 +12268,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
12279 } else if (IS_IVYBRIDGE(dev_priv) || IS_HASWELL(dev_priv)) { 12268 } else if (IS_IVYBRIDGE(dev_priv) || IS_HASWELL(dev_priv)) {
12280 engine = dev_priv->engine[BCS]; 12269 engine = dev_priv->engine[BCS];
12281 } else if (INTEL_INFO(dev)->gen >= 7) { 12270 } else if (INTEL_INFO(dev)->gen >= 7) {
12282 engine = i915_gem_active_get_engine(&obj->last_write, 12271 engine = i915_gem_object_last_write_engine(obj);
12283 &obj->base.dev->struct_mutex);
12284 if (engine == NULL || engine->id != RCS) 12272 if (engine == NULL || engine->id != RCS)
12285 engine = dev_priv->engine[BCS]; 12273 engine = dev_priv->engine[BCS];
12286 } else { 12274 } else {
@@ -12312,9 +12300,6 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
12312 12300
12313 if (mmio_flip) { 12301 if (mmio_flip) {
12314 INIT_WORK(&work->mmio_work, intel_mmio_flip_work_func); 12302 INIT_WORK(&work->mmio_work, intel_mmio_flip_work_func);
12315
12316 work->flip_queued_req = i915_gem_active_get(&obj->last_write,
12317 &obj->base.dev->struct_mutex);
12318 queue_work(system_unbound_wq, &work->mmio_work); 12303 queue_work(system_unbound_wq, &work->mmio_work);
12319 } else { 12304 } else {
12320 request = i915_gem_request_alloc(engine, engine->last_context); 12305 request = i915_gem_request_alloc(engine, engine->last_context);
@@ -12360,7 +12345,7 @@ cleanup:
12360 crtc->primary->fb = old_fb; 12345 crtc->primary->fb = old_fb;
12361 update_state_fb(crtc->primary); 12346 update_state_fb(crtc->primary);
12362 12347
12363 i915_gem_object_put_unlocked(obj); 12348 i915_gem_object_put(obj);
12364 drm_framebuffer_unreference(work->old_fb); 12349 drm_framebuffer_unreference(work->old_fb);
12365 12350
12366 spin_lock_irq(&dev->event_lock); 12351 spin_lock_irq(&dev->event_lock);
@@ -13479,13 +13464,13 @@ static void verify_wm_state(struct drm_crtc *crtc,
13479 return; 13464 return;
13480 13465
13481 skl_pipe_wm_get_hw_state(crtc, &hw_wm); 13466 skl_pipe_wm_get_hw_state(crtc, &hw_wm);
13482 sw_wm = &intel_crtc->wm.active.skl; 13467 sw_wm = &to_intel_crtc_state(new_state)->wm.skl.optimal;
13483 13468
13484 skl_ddb_get_hw_state(dev_priv, &hw_ddb); 13469 skl_ddb_get_hw_state(dev_priv, &hw_ddb);
13485 sw_ddb = &dev_priv->wm.skl_hw.ddb; 13470 sw_ddb = &dev_priv->wm.skl_hw.ddb;
13486 13471
13487 /* planes */ 13472 /* planes */
13488 for_each_plane(dev_priv, pipe, plane) { 13473 for_each_universal_plane(dev_priv, pipe, plane) {
13489 hw_plane_wm = &hw_wm.planes[plane]; 13474 hw_plane_wm = &hw_wm.planes[plane];
13490 sw_plane_wm = &sw_wm->planes[plane]; 13475 sw_plane_wm = &sw_wm->planes[plane];
13491 13476
@@ -14154,13 +14139,10 @@ static int intel_atomic_check(struct drm_device *dev,
14154} 14139}
14155 14140
14156static int intel_atomic_prepare_commit(struct drm_device *dev, 14141static int intel_atomic_prepare_commit(struct drm_device *dev,
14157 struct drm_atomic_state *state, 14142 struct drm_atomic_state *state)
14158 bool nonblock)
14159{ 14143{
14160 struct drm_i915_private *dev_priv = to_i915(dev); 14144 struct drm_i915_private *dev_priv = to_i915(dev);
14161 struct drm_plane_state *plane_state;
14162 struct drm_crtc_state *crtc_state; 14145 struct drm_crtc_state *crtc_state;
14163 struct drm_plane *plane;
14164 struct drm_crtc *crtc; 14146 struct drm_crtc *crtc;
14165 int i, ret; 14147 int i, ret;
14166 14148
@@ -14183,28 +14165,6 @@ static int intel_atomic_prepare_commit(struct drm_device *dev,
14183 ret = drm_atomic_helper_prepare_planes(dev, state); 14165 ret = drm_atomic_helper_prepare_planes(dev, state);
14184 mutex_unlock(&dev->struct_mutex); 14166 mutex_unlock(&dev->struct_mutex);
14185 14167
14186 if (!ret && !nonblock) {
14187 for_each_plane_in_state(state, plane, plane_state, i) {
14188 struct intel_plane_state *intel_plane_state =
14189 to_intel_plane_state(plane_state);
14190
14191 if (!intel_plane_state->wait_req)
14192 continue;
14193
14194 ret = i915_wait_request(intel_plane_state->wait_req,
14195 I915_WAIT_INTERRUPTIBLE,
14196 NULL, NULL);
14197 if (ret) {
14198 /* Any hang should be swallowed by the wait */
14199 WARN_ON(ret == -EIO);
14200 mutex_lock(&dev->struct_mutex);
14201 drm_atomic_helper_cleanup_planes(dev, state);
14202 mutex_unlock(&dev->struct_mutex);
14203 break;
14204 }
14205 }
14206 }
14207
14208 return ret; 14168 return ret;
14209} 14169}
14210 14170
@@ -14230,22 +14190,24 @@ static void intel_atomic_wait_for_vblanks(struct drm_device *dev,
14230 return; 14190 return;
14231 14191
14232 for_each_pipe(dev_priv, pipe) { 14192 for_each_pipe(dev_priv, pipe) {
14233 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; 14193 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv,
14194 pipe);
14234 14195
14235 if (!((1 << pipe) & crtc_mask)) 14196 if (!((1 << pipe) & crtc_mask))
14236 continue; 14197 continue;
14237 14198
14238 ret = drm_crtc_vblank_get(crtc); 14199 ret = drm_crtc_vblank_get(&crtc->base);
14239 if (WARN_ON(ret != 0)) { 14200 if (WARN_ON(ret != 0)) {
14240 crtc_mask &= ~(1 << pipe); 14201 crtc_mask &= ~(1 << pipe);
14241 continue; 14202 continue;
14242 } 14203 }
14243 14204
14244 last_vblank_count[pipe] = drm_crtc_vblank_count(crtc); 14205 last_vblank_count[pipe] = drm_crtc_vblank_count(&crtc->base);
14245 } 14206 }
14246 14207
14247 for_each_pipe(dev_priv, pipe) { 14208 for_each_pipe(dev_priv, pipe) {
14248 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; 14209 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv,
14210 pipe);
14249 long lret; 14211 long lret;
14250 14212
14251 if (!((1 << pipe) & crtc_mask)) 14213 if (!((1 << pipe) & crtc_mask))
@@ -14253,12 +14215,12 @@ static void intel_atomic_wait_for_vblanks(struct drm_device *dev,
14253 14215
14254 lret = wait_event_timeout(dev->vblank[pipe].queue, 14216 lret = wait_event_timeout(dev->vblank[pipe].queue,
14255 last_vblank_count[pipe] != 14217 last_vblank_count[pipe] !=
14256 drm_crtc_vblank_count(crtc), 14218 drm_crtc_vblank_count(&crtc->base),
14257 msecs_to_jiffies(50)); 14219 msecs_to_jiffies(50));
14258 14220
14259 WARN(!lret, "pipe %c vblank wait timed out\n", pipe_name(pipe)); 14221 WARN(!lret, "pipe %c vblank wait timed out\n", pipe_name(pipe));
14260 14222
14261 drm_crtc_vblank_put(crtc); 14223 drm_crtc_vblank_put(&crtc->base);
14262 } 14224 }
14263} 14225}
14264 14226
@@ -14332,7 +14294,7 @@ static void intel_update_crtcs(struct drm_atomic_state *state,
14332static void skl_update_crtcs(struct drm_atomic_state *state, 14294static void skl_update_crtcs(struct drm_atomic_state *state,
14333 unsigned int *crtc_vblank_mask) 14295 unsigned int *crtc_vblank_mask)
14334{ 14296{
14335 struct drm_device *dev = state->dev; 14297 struct drm_i915_private *dev_priv = to_i915(state->dev);
14336 struct intel_atomic_state *intel_state = to_intel_atomic_state(state); 14298 struct intel_atomic_state *intel_state = to_intel_atomic_state(state);
14337 struct drm_crtc *crtc; 14299 struct drm_crtc *crtc;
14338 struct intel_crtc *intel_crtc; 14300 struct intel_crtc *intel_crtc;
@@ -14383,7 +14345,7 @@ static void skl_update_crtcs(struct drm_atomic_state *state,
14383 crtc_vblank_mask); 14345 crtc_vblank_mask);
14384 14346
14385 if (vbl_wait) 14347 if (vbl_wait)
14386 intel_wait_for_vblank(dev, pipe); 14348 intel_wait_for_vblank(dev_priv, pipe);
14387 14349
14388 progress = true; 14350 progress = true;
14389 } 14351 }
@@ -14398,26 +14360,10 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state)
14398 struct drm_crtc_state *old_crtc_state; 14360 struct drm_crtc_state *old_crtc_state;
14399 struct drm_crtc *crtc; 14361 struct drm_crtc *crtc;
14400 struct intel_crtc_state *intel_cstate; 14362 struct intel_crtc_state *intel_cstate;
14401 struct drm_plane *plane;
14402 struct drm_plane_state *plane_state;
14403 bool hw_check = intel_state->modeset; 14363 bool hw_check = intel_state->modeset;
14404 unsigned long put_domains[I915_MAX_PIPES] = {}; 14364 unsigned long put_domains[I915_MAX_PIPES] = {};
14405 unsigned crtc_vblank_mask = 0; 14365 unsigned crtc_vblank_mask = 0;
14406 int i, ret; 14366 int i;
14407
14408 for_each_plane_in_state(state, plane, plane_state, i) {
14409 struct intel_plane_state *intel_plane_state =
14410 to_intel_plane_state(plane->state);
14411
14412 if (!intel_plane_state->wait_req)
14413 continue;
14414
14415 ret = i915_wait_request(intel_plane_state->wait_req,
14416 0, NULL, NULL);
14417 /* EIO should be eaten, and we can't get interrupted in the
14418 * worker, and blocking commits have waited already. */
14419 WARN_ON(ret);
14420 }
14421 14367
14422 drm_atomic_helper_wait_for_dependencies(state); 14368 drm_atomic_helper_wait_for_dependencies(state);
14423 14369
@@ -14462,7 +14408,7 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state)
14462 intel_check_pch_fifo_underruns(dev_priv); 14408 intel_check_pch_fifo_underruns(dev_priv);
14463 14409
14464 if (!crtc->state->active) 14410 if (!crtc->state->active)
14465 intel_update_watermarks(crtc); 14411 intel_update_watermarks(intel_crtc);
14466 } 14412 }
14467 } 14413 }
14468 14414
@@ -14572,12 +14518,33 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state)
14572 14518
14573static void intel_atomic_commit_work(struct work_struct *work) 14519static void intel_atomic_commit_work(struct work_struct *work)
14574{ 14520{
14575 struct drm_atomic_state *state = container_of(work, 14521 struct drm_atomic_state *state =
14576 struct drm_atomic_state, 14522 container_of(work, struct drm_atomic_state, commit_work);
14577 commit_work); 14523
14578 intel_atomic_commit_tail(state); 14524 intel_atomic_commit_tail(state);
14579} 14525}
14580 14526
14527static int __i915_sw_fence_call
14528intel_atomic_commit_ready(struct i915_sw_fence *fence,
14529 enum i915_sw_fence_notify notify)
14530{
14531 struct intel_atomic_state *state =
14532 container_of(fence, struct intel_atomic_state, commit_ready);
14533
14534 switch (notify) {
14535 case FENCE_COMPLETE:
14536 if (state->base.commit_work.func)
14537 queue_work(system_unbound_wq, &state->base.commit_work);
14538 break;
14539
14540 case FENCE_FREE:
14541 drm_atomic_state_put(&state->base);
14542 break;
14543 }
14544
14545 return NOTIFY_DONE;
14546}
14547
14581static void intel_atomic_track_fbs(struct drm_atomic_state *state) 14548static void intel_atomic_track_fbs(struct drm_atomic_state *state)
14582{ 14549{
14583 struct drm_plane_state *old_plane_state; 14550 struct drm_plane_state *old_plane_state;
@@ -14623,11 +14590,14 @@ static int intel_atomic_commit(struct drm_device *dev,
14623 if (ret) 14590 if (ret)
14624 return ret; 14591 return ret;
14625 14592
14626 INIT_WORK(&state->commit_work, intel_atomic_commit_work); 14593 drm_atomic_state_get(state);
14594 i915_sw_fence_init(&intel_state->commit_ready,
14595 intel_atomic_commit_ready);
14627 14596
14628 ret = intel_atomic_prepare_commit(dev, state, nonblock); 14597 ret = intel_atomic_prepare_commit(dev, state);
14629 if (ret) { 14598 if (ret) {
14630 DRM_DEBUG_ATOMIC("Preparing state failed with %i\n", ret); 14599 DRM_DEBUG_ATOMIC("Preparing state failed with %i\n", ret);
14600 i915_sw_fence_commit(&intel_state->commit_ready);
14631 return ret; 14601 return ret;
14632 } 14602 }
14633 14603
@@ -14638,10 +14608,14 @@ static int intel_atomic_commit(struct drm_device *dev,
14638 intel_atomic_track_fbs(state); 14608 intel_atomic_track_fbs(state);
14639 14609
14640 drm_atomic_state_get(state); 14610 drm_atomic_state_get(state);
14641 if (nonblock) 14611 INIT_WORK(&state->commit_work,
14642 queue_work(system_unbound_wq, &state->commit_work); 14612 nonblock ? intel_atomic_commit_work : NULL);
14643 else 14613
14614 i915_sw_fence_commit(&intel_state->commit_ready);
14615 if (!nonblock) {
14616 i915_sw_fence_wait(&intel_state->commit_ready);
14644 intel_atomic_commit_tail(state); 14617 intel_atomic_commit_tail(state);
14618 }
14645 14619
14646 return 0; 14620 return 0;
14647} 14621}
@@ -14753,20 +14727,22 @@ int
14753intel_prepare_plane_fb(struct drm_plane *plane, 14727intel_prepare_plane_fb(struct drm_plane *plane,
14754 struct drm_plane_state *new_state) 14728 struct drm_plane_state *new_state)
14755{ 14729{
14730 struct intel_atomic_state *intel_state =
14731 to_intel_atomic_state(new_state->state);
14756 struct drm_device *dev = plane->dev; 14732 struct drm_device *dev = plane->dev;
14757 struct drm_i915_private *dev_priv = to_i915(dev); 14733 struct drm_i915_private *dev_priv = to_i915(dev);
14758 struct drm_framebuffer *fb = new_state->fb; 14734 struct drm_framebuffer *fb = new_state->fb;
14759 struct drm_i915_gem_object *obj = intel_fb_obj(fb); 14735 struct drm_i915_gem_object *obj = intel_fb_obj(fb);
14760 struct drm_i915_gem_object *old_obj = intel_fb_obj(plane->state->fb); 14736 struct drm_i915_gem_object *old_obj = intel_fb_obj(plane->state->fb);
14761 struct reservation_object *resv; 14737 int ret;
14762 int ret = 0;
14763 14738
14764 if (!obj && !old_obj) 14739 if (!obj && !old_obj)
14765 return 0; 14740 return 0;
14766 14741
14767 if (old_obj) { 14742 if (old_obj) {
14768 struct drm_crtc_state *crtc_state = 14743 struct drm_crtc_state *crtc_state =
14769 drm_atomic_get_existing_crtc_state(new_state->state, plane->state->crtc); 14744 drm_atomic_get_existing_crtc_state(new_state->state,
14745 plane->state->crtc);
14770 14746
14771 /* Big Hammer, we also need to ensure that any pending 14747 /* Big Hammer, we also need to ensure that any pending
14772 * MI_WAIT_FOR_EVENT inside a user batch buffer on the 14748 * MI_WAIT_FOR_EVENT inside a user batch buffer on the
@@ -14779,52 +14755,56 @@ intel_prepare_plane_fb(struct drm_plane *plane,
14779 * This should only fail upon a hung GPU, in which case we 14755 * This should only fail upon a hung GPU, in which case we
14780 * can safely continue. 14756 * can safely continue.
14781 */ 14757 */
14782 if (needs_modeset(crtc_state)) 14758 if (needs_modeset(crtc_state)) {
14783 ret = i915_gem_object_wait_rendering(old_obj, true); 14759 ret = i915_sw_fence_await_reservation(&intel_state->commit_ready,
14784 if (ret) { 14760 old_obj->resv, NULL,
14785 /* GPU hangs should have been swallowed by the wait */ 14761 false, 0,
14786 WARN_ON(ret == -EIO); 14762 GFP_KERNEL);
14787 return ret; 14763 if (ret < 0)
14764 return ret;
14788 } 14765 }
14789 } 14766 }
14790 14767
14768 if (new_state->fence) { /* explicit fencing */
14769 ret = i915_sw_fence_await_dma_fence(&intel_state->commit_ready,
14770 new_state->fence,
14771 I915_FENCE_TIMEOUT,
14772 GFP_KERNEL);
14773 if (ret < 0)
14774 return ret;
14775 }
14776
14791 if (!obj) 14777 if (!obj)
14792 return 0; 14778 return 0;
14793 14779
14794 /* For framebuffer backed by dmabuf, wait for fence */ 14780 if (!new_state->fence) { /* implicit fencing */
14795 resv = i915_gem_object_get_dmabuf_resv(obj); 14781 ret = i915_sw_fence_await_reservation(&intel_state->commit_ready,
14796 if (resv) { 14782 obj->resv, NULL,
14797 long lret; 14783 false, I915_FENCE_TIMEOUT,
14798 14784 GFP_KERNEL);
14799 lret = reservation_object_wait_timeout_rcu(resv, false, true, 14785 if (ret < 0)
14800 MAX_SCHEDULE_TIMEOUT); 14786 return ret;
14801 if (lret == -ERESTARTSYS)
14802 return lret;
14803
14804 WARN(lret < 0, "waiting returns %li\n", lret);
14805 } 14787 }
14806 14788
14807 if (plane->type == DRM_PLANE_TYPE_CURSOR && 14789 if (plane->type == DRM_PLANE_TYPE_CURSOR &&
14808 INTEL_INFO(dev)->cursor_needs_physical) { 14790 INTEL_INFO(dev)->cursor_needs_physical) {
14809 int align = IS_I830(dev_priv) ? 16 * 1024 : 256; 14791 int align = IS_I830(dev_priv) ? 16 * 1024 : 256;
14810 ret = i915_gem_object_attach_phys(obj, align); 14792 ret = i915_gem_object_attach_phys(obj, align);
14811 if (ret) 14793 if (ret) {
14812 DRM_DEBUG_KMS("failed to attach phys object\n"); 14794 DRM_DEBUG_KMS("failed to attach phys object\n");
14795 return ret;
14796 }
14813 } else { 14797 } else {
14814 struct i915_vma *vma; 14798 struct i915_vma *vma;
14815 14799
14816 vma = intel_pin_and_fence_fb_obj(fb, new_state->rotation); 14800 vma = intel_pin_and_fence_fb_obj(fb, new_state->rotation);
14817 if (IS_ERR(vma)) 14801 if (IS_ERR(vma)) {
14818 ret = PTR_ERR(vma); 14802 DRM_DEBUG_KMS("failed to pin object\n");
14819 } 14803 return PTR_ERR(vma);
14820 14804 }
14821 if (ret == 0) {
14822 to_intel_plane_state(new_state)->wait_req =
14823 i915_gem_active_get(&obj->last_write,
14824 &obj->base.dev->struct_mutex);
14825 } 14805 }
14826 14806
14827 return ret; 14807 return 0;
14828} 14808}
14829 14809
14830/** 14810/**
@@ -14842,7 +14822,6 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
14842{ 14822{
14843 struct drm_device *dev = plane->dev; 14823 struct drm_device *dev = plane->dev;
14844 struct intel_plane_state *old_intel_state; 14824 struct intel_plane_state *old_intel_state;
14845 struct intel_plane_state *intel_state = to_intel_plane_state(plane->state);
14846 struct drm_i915_gem_object *old_obj = intel_fb_obj(old_state->fb); 14825 struct drm_i915_gem_object *old_obj = intel_fb_obj(old_state->fb);
14847 struct drm_i915_gem_object *obj = intel_fb_obj(plane->state->fb); 14826 struct drm_i915_gem_object *obj = intel_fb_obj(plane->state->fb);
14848 14827
@@ -14854,9 +14833,6 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
14854 if (old_obj && (plane->type != DRM_PLANE_TYPE_CURSOR || 14833 if (old_obj && (plane->type != DRM_PLANE_TYPE_CURSOR ||
14855 !INTEL_INFO(dev)->cursor_needs_physical)) 14834 !INTEL_INFO(dev)->cursor_needs_physical))
14856 intel_unpin_fb_obj(old_state->fb, old_state->rotation); 14835 intel_unpin_fb_obj(old_state->fb, old_state->rotation);
14857
14858 i915_gem_request_assign(&intel_state->wait_req, NULL);
14859 i915_gem_request_assign(&old_intel_state->wait_req, NULL);
14860} 14836}
14861 14837
14862int 14838int
@@ -14976,9 +14952,6 @@ static void intel_finish_crtc_commit(struct drm_crtc *crtc,
14976 */ 14952 */
14977void intel_plane_destroy(struct drm_plane *plane) 14953void intel_plane_destroy(struct drm_plane *plane)
14978{ 14954{
14979 if (!plane)
14980 return;
14981
14982 drm_plane_cleanup(plane); 14955 drm_plane_cleanup(plane);
14983 kfree(to_intel_plane(plane)); 14956 kfree(to_intel_plane(plane));
14984} 14957}
@@ -14992,13 +14965,11 @@ const struct drm_plane_funcs intel_plane_funcs = {
14992 .atomic_set_property = intel_plane_atomic_set_property, 14965 .atomic_set_property = intel_plane_atomic_set_property,
14993 .atomic_duplicate_state = intel_plane_duplicate_state, 14966 .atomic_duplicate_state = intel_plane_duplicate_state,
14994 .atomic_destroy_state = intel_plane_destroy_state, 14967 .atomic_destroy_state = intel_plane_destroy_state,
14995
14996}; 14968};
14997 14969
14998static struct drm_plane *intel_primary_plane_create(struct drm_device *dev, 14970static struct intel_plane *
14999 int pipe) 14971intel_primary_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe)
15000{ 14972{
15001 struct drm_i915_private *dev_priv = to_i915(dev);
15002 struct intel_plane *primary = NULL; 14973 struct intel_plane *primary = NULL;
15003 struct intel_plane_state *state = NULL; 14974 struct intel_plane_state *state = NULL;
15004 const uint32_t *intel_primary_formats; 14975 const uint32_t *intel_primary_formats;
@@ -15007,17 +14978,22 @@ static struct drm_plane *intel_primary_plane_create(struct drm_device *dev,
15007 int ret; 14978 int ret;
15008 14979
15009 primary = kzalloc(sizeof(*primary), GFP_KERNEL); 14980 primary = kzalloc(sizeof(*primary), GFP_KERNEL);
15010 if (!primary) 14981 if (!primary) {
14982 ret = -ENOMEM;
15011 goto fail; 14983 goto fail;
14984 }
15012 14985
15013 state = intel_create_plane_state(&primary->base); 14986 state = intel_create_plane_state(&primary->base);
15014 if (!state) 14987 if (!state) {
14988 ret = -ENOMEM;
15015 goto fail; 14989 goto fail;
14990 }
14991
15016 primary->base.state = &state->base; 14992 primary->base.state = &state->base;
15017 14993
15018 primary->can_scale = false; 14994 primary->can_scale = false;
15019 primary->max_downscale = 1; 14995 primary->max_downscale = 1;
15020 if (INTEL_INFO(dev)->gen >= 9) { 14996 if (INTEL_GEN(dev_priv) >= 9) {
15021 primary->can_scale = true; 14997 primary->can_scale = true;
15022 state->scaler_id = -1; 14998 state->scaler_id = -1;
15023 } 14999 }
@@ -15025,10 +15001,10 @@ static struct drm_plane *intel_primary_plane_create(struct drm_device *dev,
15025 primary->plane = pipe; 15001 primary->plane = pipe;
15026 primary->frontbuffer_bit = INTEL_FRONTBUFFER_PRIMARY(pipe); 15002 primary->frontbuffer_bit = INTEL_FRONTBUFFER_PRIMARY(pipe);
15027 primary->check_plane = intel_check_primary_plane; 15003 primary->check_plane = intel_check_primary_plane;
15028 if (HAS_FBC(dev) && INTEL_INFO(dev)->gen < 4) 15004 if (HAS_FBC(dev_priv) && INTEL_GEN(dev_priv) < 4)
15029 primary->plane = !pipe; 15005 primary->plane = !pipe;
15030 15006
15031 if (INTEL_INFO(dev)->gen >= 9) { 15007 if (INTEL_GEN(dev_priv) >= 9) {
15032 intel_primary_formats = skl_primary_formats; 15008 intel_primary_formats = skl_primary_formats;
15033 num_formats = ARRAY_SIZE(skl_primary_formats); 15009 num_formats = ARRAY_SIZE(skl_primary_formats);
15034 15010
@@ -15040,7 +15016,7 @@ static struct drm_plane *intel_primary_plane_create(struct drm_device *dev,
15040 15016
15041 primary->update_plane = ironlake_update_primary_plane; 15017 primary->update_plane = ironlake_update_primary_plane;
15042 primary->disable_plane = i9xx_disable_primary_plane; 15018 primary->disable_plane = i9xx_disable_primary_plane;
15043 } else if (INTEL_INFO(dev)->gen >= 4) { 15019 } else if (INTEL_GEN(dev_priv) >= 4) {
15044 intel_primary_formats = i965_primary_formats; 15020 intel_primary_formats = i965_primary_formats;
15045 num_formats = ARRAY_SIZE(i965_primary_formats); 15021 num_formats = ARRAY_SIZE(i965_primary_formats);
15046 15022
@@ -15054,21 +15030,21 @@ static struct drm_plane *intel_primary_plane_create(struct drm_device *dev,
15054 primary->disable_plane = i9xx_disable_primary_plane; 15030 primary->disable_plane = i9xx_disable_primary_plane;
15055 } 15031 }
15056 15032
15057 if (INTEL_INFO(dev)->gen >= 9) 15033 if (INTEL_GEN(dev_priv) >= 9)
15058 ret = drm_universal_plane_init(dev, &primary->base, 0, 15034 ret = drm_universal_plane_init(&dev_priv->drm, &primary->base,
15059 &intel_plane_funcs, 15035 0, &intel_plane_funcs,
15060 intel_primary_formats, num_formats, 15036 intel_primary_formats, num_formats,
15061 DRM_PLANE_TYPE_PRIMARY, 15037 DRM_PLANE_TYPE_PRIMARY,
15062 "plane 1%c", pipe_name(pipe)); 15038 "plane 1%c", pipe_name(pipe));
15063 else if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv)) 15039 else if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv))
15064 ret = drm_universal_plane_init(dev, &primary->base, 0, 15040 ret = drm_universal_plane_init(&dev_priv->drm, &primary->base,
15065 &intel_plane_funcs, 15041 0, &intel_plane_funcs,
15066 intel_primary_formats, num_formats, 15042 intel_primary_formats, num_formats,
15067 DRM_PLANE_TYPE_PRIMARY, 15043 DRM_PLANE_TYPE_PRIMARY,
15068 "primary %c", pipe_name(pipe)); 15044 "primary %c", pipe_name(pipe));
15069 else 15045 else
15070 ret = drm_universal_plane_init(dev, &primary->base, 0, 15046 ret = drm_universal_plane_init(&dev_priv->drm, &primary->base,
15071 &intel_plane_funcs, 15047 0, &intel_plane_funcs,
15072 intel_primary_formats, num_formats, 15048 intel_primary_formats, num_formats,
15073 DRM_PLANE_TYPE_PRIMARY, 15049 DRM_PLANE_TYPE_PRIMARY,
15074 "plane %c", plane_name(primary->plane)); 15050 "plane %c", plane_name(primary->plane));
@@ -15093,13 +15069,13 @@ static struct drm_plane *intel_primary_plane_create(struct drm_device *dev,
15093 15069
15094 drm_plane_helper_add(&primary->base, &intel_plane_helper_funcs); 15070 drm_plane_helper_add(&primary->base, &intel_plane_helper_funcs);
15095 15071
15096 return &primary->base; 15072 return primary;
15097 15073
15098fail: 15074fail:
15099 kfree(state); 15075 kfree(state);
15100 kfree(primary); 15076 kfree(primary);
15101 15077
15102 return NULL; 15078 return ERR_PTR(ret);
15103} 15079}
15104 15080
15105static int 15081static int
@@ -15195,21 +15171,25 @@ intel_update_cursor_plane(struct drm_plane *plane,
15195 intel_crtc_update_cursor(crtc, state); 15171 intel_crtc_update_cursor(crtc, state);
15196} 15172}
15197 15173
15198static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev, 15174static struct intel_plane *
15199 int pipe) 15175intel_cursor_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe)
15200{ 15176{
15201 struct drm_i915_private *dev_priv = to_i915(dev);
15202 struct intel_plane *cursor = NULL; 15177 struct intel_plane *cursor = NULL;
15203 struct intel_plane_state *state = NULL; 15178 struct intel_plane_state *state = NULL;
15204 int ret; 15179 int ret;
15205 15180
15206 cursor = kzalloc(sizeof(*cursor), GFP_KERNEL); 15181 cursor = kzalloc(sizeof(*cursor), GFP_KERNEL);
15207 if (!cursor) 15182 if (!cursor) {
15183 ret = -ENOMEM;
15208 goto fail; 15184 goto fail;
15185 }
15209 15186
15210 state = intel_create_plane_state(&cursor->base); 15187 state = intel_create_plane_state(&cursor->base);
15211 if (!state) 15188 if (!state) {
15189 ret = -ENOMEM;
15212 goto fail; 15190 goto fail;
15191 }
15192
15213 cursor->base.state = &state->base; 15193 cursor->base.state = &state->base;
15214 15194
15215 cursor->can_scale = false; 15195 cursor->can_scale = false;
@@ -15221,8 +15201,8 @@ static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev,
15221 cursor->update_plane = intel_update_cursor_plane; 15201 cursor->update_plane = intel_update_cursor_plane;
15222 cursor->disable_plane = intel_disable_cursor_plane; 15202 cursor->disable_plane = intel_disable_cursor_plane;
15223 15203
15224 ret = drm_universal_plane_init(dev, &cursor->base, 0, 15204 ret = drm_universal_plane_init(&dev_priv->drm, &cursor->base,
15225 &intel_plane_funcs, 15205 0, &intel_plane_funcs,
15226 intel_cursor_formats, 15206 intel_cursor_formats,
15227 ARRAY_SIZE(intel_cursor_formats), 15207 ARRAY_SIZE(intel_cursor_formats),
15228 DRM_PLANE_TYPE_CURSOR, 15208 DRM_PLANE_TYPE_CURSOR,
@@ -15236,76 +15216,94 @@ static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev,
15236 DRM_ROTATE_0 | 15216 DRM_ROTATE_0 |
15237 DRM_ROTATE_180); 15217 DRM_ROTATE_180);
15238 15218
15239 if (INTEL_INFO(dev)->gen >=9) 15219 if (INTEL_GEN(dev_priv) >= 9)
15240 state->scaler_id = -1; 15220 state->scaler_id = -1;
15241 15221
15242 drm_plane_helper_add(&cursor->base, &intel_plane_helper_funcs); 15222 drm_plane_helper_add(&cursor->base, &intel_plane_helper_funcs);
15243 15223
15244 return &cursor->base; 15224 return cursor;
15245 15225
15246fail: 15226fail:
15247 kfree(state); 15227 kfree(state);
15248 kfree(cursor); 15228 kfree(cursor);
15249 15229
15250 return NULL; 15230 return ERR_PTR(ret);
15251} 15231}
15252 15232
15253static void skl_init_scalers(struct drm_device *dev, struct intel_crtc *intel_crtc, 15233static void skl_init_scalers(struct drm_i915_private *dev_priv,
15254 struct intel_crtc_state *crtc_state) 15234 struct intel_crtc *crtc,
15235 struct intel_crtc_state *crtc_state)
15255{ 15236{
15237 struct intel_crtc_scaler_state *scaler_state =
15238 &crtc_state->scaler_state;
15256 int i; 15239 int i;
15257 struct intel_scaler *intel_scaler;
15258 struct intel_crtc_scaler_state *scaler_state = &crtc_state->scaler_state;
15259 15240
15260 for (i = 0; i < intel_crtc->num_scalers; i++) { 15241 for (i = 0; i < crtc->num_scalers; i++) {
15261 intel_scaler = &scaler_state->scalers[i]; 15242 struct intel_scaler *scaler = &scaler_state->scalers[i];
15262 intel_scaler->in_use = 0; 15243
15263 intel_scaler->mode = PS_SCALER_MODE_DYN; 15244 scaler->in_use = 0;
15245 scaler->mode = PS_SCALER_MODE_DYN;
15264 } 15246 }
15265 15247
15266 scaler_state->scaler_id = -1; 15248 scaler_state->scaler_id = -1;
15267} 15249}
15268 15250
15269static void intel_crtc_init(struct drm_device *dev, int pipe) 15251static int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe)
15270{ 15252{
15271 struct drm_i915_private *dev_priv = to_i915(dev);
15272 struct intel_crtc *intel_crtc; 15253 struct intel_crtc *intel_crtc;
15273 struct intel_crtc_state *crtc_state = NULL; 15254 struct intel_crtc_state *crtc_state = NULL;
15274 struct drm_plane *primary = NULL; 15255 struct intel_plane *primary = NULL;
15275 struct drm_plane *cursor = NULL; 15256 struct intel_plane *cursor = NULL;
15276 int ret; 15257 int sprite, ret;
15277 15258
15278 intel_crtc = kzalloc(sizeof(*intel_crtc), GFP_KERNEL); 15259 intel_crtc = kzalloc(sizeof(*intel_crtc), GFP_KERNEL);
15279 if (intel_crtc == NULL) 15260 if (!intel_crtc)
15280 return; 15261 return -ENOMEM;
15281 15262
15282 crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); 15263 crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL);
15283 if (!crtc_state) 15264 if (!crtc_state) {
15265 ret = -ENOMEM;
15284 goto fail; 15266 goto fail;
15267 }
15285 intel_crtc->config = crtc_state; 15268 intel_crtc->config = crtc_state;
15286 intel_crtc->base.state = &crtc_state->base; 15269 intel_crtc->base.state = &crtc_state->base;
15287 crtc_state->base.crtc = &intel_crtc->base; 15270 crtc_state->base.crtc = &intel_crtc->base;
15288 15271
15289 /* initialize shared scalers */ 15272 /* initialize shared scalers */
15290 if (INTEL_INFO(dev)->gen >= 9) { 15273 if (INTEL_GEN(dev_priv) >= 9) {
15291 if (pipe == PIPE_C) 15274 if (pipe == PIPE_C)
15292 intel_crtc->num_scalers = 1; 15275 intel_crtc->num_scalers = 1;
15293 else 15276 else
15294 intel_crtc->num_scalers = SKL_NUM_SCALERS; 15277 intel_crtc->num_scalers = SKL_NUM_SCALERS;
15295 15278
15296 skl_init_scalers(dev, intel_crtc, crtc_state); 15279 skl_init_scalers(dev_priv, intel_crtc, crtc_state);
15297 } 15280 }
15298 15281
15299 primary = intel_primary_plane_create(dev, pipe); 15282 primary = intel_primary_plane_create(dev_priv, pipe);
15300 if (!primary) 15283 if (IS_ERR(primary)) {
15284 ret = PTR_ERR(primary);
15301 goto fail; 15285 goto fail;
15286 }
15287
15288 for_each_sprite(dev_priv, pipe, sprite) {
15289 struct intel_plane *plane;
15302 15290
15303 cursor = intel_cursor_plane_create(dev, pipe); 15291 plane = intel_sprite_plane_create(dev_priv, pipe, sprite);
15304 if (!cursor) 15292 if (!plane) {
15293 ret = PTR_ERR(plane);
15294 goto fail;
15295 }
15296 }
15297
15298 cursor = intel_cursor_plane_create(dev_priv, pipe);
15299 if (!cursor) {
15300 ret = PTR_ERR(cursor);
15305 goto fail; 15301 goto fail;
15302 }
15306 15303
15307 ret = drm_crtc_init_with_planes(dev, &intel_crtc->base, primary, 15304 ret = drm_crtc_init_with_planes(&dev_priv->drm, &intel_crtc->base,
15308 cursor, &intel_crtc_funcs, 15305 &primary->base, &cursor->base,
15306 &intel_crtc_funcs,
15309 "pipe %c", pipe_name(pipe)); 15307 "pipe %c", pipe_name(pipe));
15310 if (ret) 15308 if (ret)
15311 goto fail; 15309 goto fail;
@@ -15315,8 +15313,8 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
15315 * is hooked to pipe B. Hence we want plane A feeding pipe B. 15313 * is hooked to pipe B. Hence we want plane A feeding pipe B.
15316 */ 15314 */
15317 intel_crtc->pipe = pipe; 15315 intel_crtc->pipe = pipe;
15318 intel_crtc->plane = pipe; 15316 intel_crtc->plane = (enum plane) pipe;
15319 if (HAS_FBC(dev) && INTEL_INFO(dev)->gen < 4) { 15317 if (HAS_FBC(dev_priv) && INTEL_GEN(dev_priv) < 4) {
15320 DRM_DEBUG_KMS("swapping pipes & planes for FBC\n"); 15318 DRM_DEBUG_KMS("swapping pipes & planes for FBC\n");
15321 intel_crtc->plane = !pipe; 15319 intel_crtc->plane = !pipe;
15322 } 15320 }
@@ -15329,21 +15327,26 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
15329 15327
15330 BUG_ON(pipe >= ARRAY_SIZE(dev_priv->plane_to_crtc_mapping) || 15328 BUG_ON(pipe >= ARRAY_SIZE(dev_priv->plane_to_crtc_mapping) ||
15331 dev_priv->plane_to_crtc_mapping[intel_crtc->plane] != NULL); 15329 dev_priv->plane_to_crtc_mapping[intel_crtc->plane] != NULL);
15332 dev_priv->plane_to_crtc_mapping[intel_crtc->plane] = &intel_crtc->base; 15330 dev_priv->plane_to_crtc_mapping[intel_crtc->plane] = intel_crtc;
15333 dev_priv->pipe_to_crtc_mapping[intel_crtc->pipe] = &intel_crtc->base; 15331 dev_priv->pipe_to_crtc_mapping[intel_crtc->pipe] = intel_crtc;
15334 15332
15335 drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs); 15333 drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs);
15336 15334
15337 intel_color_init(&intel_crtc->base); 15335 intel_color_init(&intel_crtc->base);
15338 15336
15339 WARN_ON(drm_crtc_index(&intel_crtc->base) != intel_crtc->pipe); 15337 WARN_ON(drm_crtc_index(&intel_crtc->base) != intel_crtc->pipe);
15340 return; 15338
15339 return 0;
15341 15340
15342fail: 15341fail:
15343 intel_plane_destroy(primary); 15342 /*
15344 intel_plane_destroy(cursor); 15343 * drm_mode_config_cleanup() will free up any
15344 * crtcs/planes already initialized.
15345 */
15345 kfree(crtc_state); 15346 kfree(crtc_state);
15346 kfree(intel_crtc); 15347 kfree(intel_crtc);
15348
15349 return ret;
15347} 15350}
15348 15351
15349enum pipe intel_get_pipe_from_connector(struct intel_connector *connector) 15352enum pipe intel_get_pipe_from_connector(struct intel_connector *connector)
@@ -15393,11 +15396,9 @@ static int intel_encoder_clones(struct intel_encoder *encoder)
15393 return index_mask; 15396 return index_mask;
15394} 15397}
15395 15398
15396static bool has_edp_a(struct drm_device *dev) 15399static bool has_edp_a(struct drm_i915_private *dev_priv)
15397{ 15400{
15398 struct drm_i915_private *dev_priv = to_i915(dev); 15401 if (!IS_MOBILE(dev_priv))
15399
15400 if (!IS_MOBILE(dev))
15401 return false; 15402 return false;
15402 15403
15403 if ((I915_READ(DP_A) & DP_DETECTED) == 0) 15404 if ((I915_READ(DP_A) & DP_DETECTED) == 0)
@@ -15537,7 +15538,7 @@ static void intel_setup_outputs(struct drm_device *dev)
15537 int found; 15538 int found;
15538 dpd_is_edp = intel_dp_is_edp(dev, PORT_D); 15539 dpd_is_edp = intel_dp_is_edp(dev, PORT_D);
15539 15540
15540 if (has_edp_a(dev)) 15541 if (has_edp_a(dev_priv))
15541 intel_dp_init(dev, DP_A, PORT_A); 15542 intel_dp_init(dev, DP_A, PORT_A);
15542 15543
15543 if (I915_READ(PCH_HDMIB) & SDVO_DETECTED) { 15544 if (I915_READ(PCH_HDMIB) & SDVO_DETECTED) {
@@ -15929,7 +15930,7 @@ intel_user_framebuffer_create(struct drm_device *dev,
15929 15930
15930 fb = intel_framebuffer_create(dev, &mode_cmd, obj); 15931 fb = intel_framebuffer_create(dev, &mode_cmd, obj);
15931 if (IS_ERR(fb)) 15932 if (IS_ERR(fb))
15932 i915_gem_object_put_unlocked(obj); 15933 i915_gem_object_put(obj);
15933 15934
15934 return fb; 15935 return fb;
15935} 15936}
@@ -16332,11 +16333,11 @@ void intel_modeset_init_hw(struct drm_device *dev)
16332{ 16333{
16333 struct drm_i915_private *dev_priv = to_i915(dev); 16334 struct drm_i915_private *dev_priv = to_i915(dev);
16334 16335
16335 intel_update_cdclk(dev); 16336 intel_update_cdclk(dev_priv);
16336 16337
16337 dev_priv->atomic_cdclk_freq = dev_priv->cdclk_freq; 16338 dev_priv->atomic_cdclk_freq = dev_priv->cdclk_freq;
16338 16339
16339 intel_init_clock_gating(dev); 16340 intel_init_clock_gating(dev_priv);
16340} 16341}
16341 16342
16342/* 16343/*
@@ -16420,11 +16421,10 @@ fail:
16420 drm_modeset_acquire_fini(&ctx); 16421 drm_modeset_acquire_fini(&ctx);
16421} 16422}
16422 16423
16423void intel_modeset_init(struct drm_device *dev) 16424int intel_modeset_init(struct drm_device *dev)
16424{ 16425{
16425 struct drm_i915_private *dev_priv = to_i915(dev); 16426 struct drm_i915_private *dev_priv = to_i915(dev);
16426 struct i915_ggtt *ggtt = &dev_priv->ggtt; 16427 struct i915_ggtt *ggtt = &dev_priv->ggtt;
16427 int sprite, ret;
16428 enum pipe pipe; 16428 enum pipe pipe;
16429 struct intel_crtc *crtc; 16429 struct intel_crtc *crtc;
16430 16430
@@ -16442,10 +16442,10 @@ void intel_modeset_init(struct drm_device *dev)
16442 16442
16443 intel_init_quirks(dev); 16443 intel_init_quirks(dev);
16444 16444
16445 intel_init_pm(dev); 16445 intel_init_pm(dev_priv);
16446 16446
16447 if (INTEL_INFO(dev)->num_pipes == 0) 16447 if (INTEL_INFO(dev)->num_pipes == 0)
16448 return; 16448 return 0;
16449 16449
16450 /* 16450 /*
16451 * There may be no VBT; and if the BIOS enabled SSC we can 16451 * There may be no VBT; and if the BIOS enabled SSC we can
@@ -16494,22 +16494,22 @@ void intel_modeset_init(struct drm_device *dev)
16494 INTEL_INFO(dev)->num_pipes > 1 ? "s" : ""); 16494 INTEL_INFO(dev)->num_pipes > 1 ? "s" : "");
16495 16495
16496 for_each_pipe(dev_priv, pipe) { 16496 for_each_pipe(dev_priv, pipe) {
16497 intel_crtc_init(dev, pipe); 16497 int ret;
16498 for_each_sprite(dev_priv, pipe, sprite) { 16498
16499 ret = intel_plane_init(dev, pipe, sprite); 16499 ret = intel_crtc_init(dev_priv, pipe);
16500 if (ret) 16500 if (ret) {
16501 DRM_DEBUG_KMS("pipe %c sprite %c init failed: %d\n", 16501 drm_mode_config_cleanup(dev);
16502 pipe_name(pipe), sprite_name(pipe, sprite), ret); 16502 return ret;
16503 } 16503 }
16504 } 16504 }
16505 16505
16506 intel_update_czclk(dev_priv); 16506 intel_update_czclk(dev_priv);
16507 intel_update_cdclk(dev); 16507 intel_update_cdclk(dev_priv);
16508 16508
16509 intel_shared_dpll_init(dev); 16509 intel_shared_dpll_init(dev);
16510 16510
16511 if (dev_priv->max_cdclk_freq == 0) 16511 if (dev_priv->max_cdclk_freq == 0)
16512 intel_update_max_cdclk(dev); 16512 intel_update_max_cdclk(dev_priv);
16513 16513
16514 /* Just disable it once at startup */ 16514 /* Just disable it once at startup */
16515 i915_disable_vga(dev); 16515 i915_disable_vga(dev);
@@ -16548,6 +16548,8 @@ void intel_modeset_init(struct drm_device *dev)
16548 * since the watermark calculation done here will use pstate->fb. 16548 * since the watermark calculation done here will use pstate->fb.
16549 */ 16549 */
16550 sanitize_watermarks(dev); 16550 sanitize_watermarks(dev);
16551
16552 return 0;
16551} 16553}
16552 16554
16553static void intel_enable_pipe_a(struct drm_device *dev) 16555static void intel_enable_pipe_a(struct drm_device *dev)
@@ -16877,7 +16879,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
16877 pipe = 0; 16879 pipe = 0;
16878 16880
16879 if (encoder->get_hw_state(encoder, &pipe)) { 16881 if (encoder->get_hw_state(encoder, &pipe)) {
16880 crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); 16882 crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
16883
16881 encoder->base.crtc = &crtc->base; 16884 encoder->base.crtc = &crtc->base;
16882 crtc->config->output_types |= 1 << encoder->type; 16885 crtc->config->output_types |= 1 << encoder->type;
16883 encoder->get_config(encoder, crtc->config); 16886 encoder->get_config(encoder, crtc->config);
@@ -16978,7 +16981,8 @@ intel_modeset_setup_hw_state(struct drm_device *dev)
16978 } 16981 }
16979 16982
16980 for_each_pipe(dev_priv, pipe) { 16983 for_each_pipe(dev_priv, pipe) {
16981 crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); 16984 crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
16985
16982 intel_sanitize_crtc(crtc); 16986 intel_sanitize_crtc(crtc);
16983 intel_dump_pipe_config(crtc, crtc->config, 16987 intel_dump_pipe_config(crtc, crtc->config,
16984 "[setup_hw_state]"); 16988 "[setup_hw_state]");
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 3c2293bd24bf..9df331b3305b 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -213,6 +213,81 @@ intel_dp_downstream_max_dotclock(struct intel_dp *intel_dp)
213 return max_dotclk; 213 return max_dotclk;
214} 214}
215 215
216static int
217intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
218{
219 if (intel_dp->num_sink_rates) {
220 *sink_rates = intel_dp->sink_rates;
221 return intel_dp->num_sink_rates;
222 }
223
224 *sink_rates = default_rates;
225
226 return (intel_dp_max_link_bw(intel_dp) >> 3) + 1;
227}
228
229static int
230intel_dp_source_rates(struct intel_dp *intel_dp, const int **source_rates)
231{
232 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
233 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
234 int size;
235
236 if (IS_BROXTON(dev_priv)) {
237 *source_rates = bxt_rates;
238 size = ARRAY_SIZE(bxt_rates);
239 } else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
240 *source_rates = skl_rates;
241 size = ARRAY_SIZE(skl_rates);
242 } else {
243 *source_rates = default_rates;
244 size = ARRAY_SIZE(default_rates);
245 }
246
247 /* This depends on the fact that 5.4 is last value in the array */
248 if (!intel_dp_source_supports_hbr2(intel_dp))
249 size--;
250
251 return size;
252}
253
254static int intersect_rates(const int *source_rates, int source_len,
255 const int *sink_rates, int sink_len,
256 int *common_rates)
257{
258 int i = 0, j = 0, k = 0;
259
260 while (i < source_len && j < sink_len) {
261 if (source_rates[i] == sink_rates[j]) {
262 if (WARN_ON(k >= DP_MAX_SUPPORTED_RATES))
263 return k;
264 common_rates[k] = source_rates[i];
265 ++k;
266 ++i;
267 ++j;
268 } else if (source_rates[i] < sink_rates[j]) {
269 ++i;
270 } else {
271 ++j;
272 }
273 }
274 return k;
275}
276
277static int intel_dp_common_rates(struct intel_dp *intel_dp,
278 int *common_rates)
279{
280 const int *source_rates, *sink_rates;
281 int source_len, sink_len;
282
283 sink_len = intel_dp_sink_rates(intel_dp, &sink_rates);
284 source_len = intel_dp_source_rates(intel_dp, &source_rates);
285
286 return intersect_rates(source_rates, source_len,
287 sink_rates, sink_len,
288 common_rates);
289}
290
216static enum drm_mode_status 291static enum drm_mode_status
217intel_dp_mode_valid(struct drm_connector *connector, 292intel_dp_mode_valid(struct drm_connector *connector,
218 struct drm_display_mode *mode) 293 struct drm_display_mode *mode)
@@ -320,8 +395,7 @@ static void
320vlv_power_sequencer_kick(struct intel_dp *intel_dp) 395vlv_power_sequencer_kick(struct intel_dp *intel_dp)
321{ 396{
322 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 397 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
323 struct drm_device *dev = intel_dig_port->base.base.dev; 398 struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
324 struct drm_i915_private *dev_priv = to_i915(dev);
325 enum pipe pipe = intel_dp->pps_pipe; 399 enum pipe pipe = intel_dp->pps_pipe;
326 bool pll_enabled, release_cl_override = false; 400 bool pll_enabled, release_cl_override = false;
327 enum dpio_phy phy = DPIO_PHY(pipe); 401 enum dpio_phy phy = DPIO_PHY(pipe);
@@ -359,7 +433,7 @@ vlv_power_sequencer_kick(struct intel_dp *intel_dp)
359 release_cl_override = IS_CHERRYVIEW(dev_priv) && 433 release_cl_override = IS_CHERRYVIEW(dev_priv) &&
360 !chv_phy_powergate_ch(dev_priv, phy, ch, true); 434 !chv_phy_powergate_ch(dev_priv, phy, ch, true);
361 435
362 if (vlv_force_pll_on(dev, pipe, IS_CHERRYVIEW(dev_priv) ? 436 if (vlv_force_pll_on(dev_priv, pipe, IS_CHERRYVIEW(dev_priv) ?
363 &chv_dpll[0].dpll : &vlv_dpll[0].dpll)) { 437 &chv_dpll[0].dpll : &vlv_dpll[0].dpll)) {
364 DRM_ERROR("Failed to force on pll for pipe %c!\n", 438 DRM_ERROR("Failed to force on pll for pipe %c!\n",
365 pipe_name(pipe)); 439 pipe_name(pipe));
@@ -383,7 +457,7 @@ vlv_power_sequencer_kick(struct intel_dp *intel_dp)
383 POSTING_READ(intel_dp->output_reg); 457 POSTING_READ(intel_dp->output_reg);
384 458
385 if (!pll_enabled) { 459 if (!pll_enabled) {
386 vlv_force_pll_off(dev, pipe); 460 vlv_force_pll_off(dev_priv, pipe);
387 461
388 if (release_cl_override) 462 if (release_cl_override)
389 chv_phy_powergate_ch(dev_priv, phy, ch, false); 463 chv_phy_powergate_ch(dev_priv, phy, ch, false);
@@ -1291,19 +1365,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp)
1291 intel_dp->aux.transfer = intel_dp_aux_transfer; 1365 intel_dp->aux.transfer = intel_dp_aux_transfer;
1292} 1366}
1293 1367
1294static int
1295intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
1296{
1297 if (intel_dp->num_sink_rates) {
1298 *sink_rates = intel_dp->sink_rates;
1299 return intel_dp->num_sink_rates;
1300 }
1301
1302 *sink_rates = default_rates;
1303
1304 return (intel_dp_max_link_bw(intel_dp) >> 3) + 1;
1305}
1306
1307bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp) 1368bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp)
1308{ 1369{
1309 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 1370 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
@@ -1316,31 +1377,6 @@ bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp)
1316 return false; 1377 return false;
1317} 1378}
1318 1379
1319static int
1320intel_dp_source_rates(struct intel_dp *intel_dp, const int **source_rates)
1321{
1322 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
1323 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
1324 int size;
1325
1326 if (IS_BROXTON(dev_priv)) {
1327 *source_rates = bxt_rates;
1328 size = ARRAY_SIZE(bxt_rates);
1329 } else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
1330 *source_rates = skl_rates;
1331 size = ARRAY_SIZE(skl_rates);
1332 } else {
1333 *source_rates = default_rates;
1334 size = ARRAY_SIZE(default_rates);
1335 }
1336
1337 /* This depends on the fact that 5.4 is last value in the array */
1338 if (!intel_dp_source_supports_hbr2(intel_dp))
1339 size--;
1340
1341 return size;
1342}
1343
1344static void 1380static void
1345intel_dp_set_clock(struct intel_encoder *encoder, 1381intel_dp_set_clock(struct intel_encoder *encoder,
1346 struct intel_crtc_state *pipe_config) 1382 struct intel_crtc_state *pipe_config)
@@ -1375,43 +1411,6 @@ intel_dp_set_clock(struct intel_encoder *encoder,
1375 } 1411 }
1376} 1412}
1377 1413
1378static int intersect_rates(const int *source_rates, int source_len,
1379 const int *sink_rates, int sink_len,
1380 int *common_rates)
1381{
1382 int i = 0, j = 0, k = 0;
1383
1384 while (i < source_len && j < sink_len) {
1385 if (source_rates[i] == sink_rates[j]) {
1386 if (WARN_ON(k >= DP_MAX_SUPPORTED_RATES))
1387 return k;
1388 common_rates[k] = source_rates[i];
1389 ++k;
1390 ++i;
1391 ++j;
1392 } else if (source_rates[i] < sink_rates[j]) {
1393 ++i;
1394 } else {
1395 ++j;
1396 }
1397 }
1398 return k;
1399}
1400
1401static int intel_dp_common_rates(struct intel_dp *intel_dp,
1402 int *common_rates)
1403{
1404 const int *source_rates, *sink_rates;
1405 int source_len, sink_len;
1406
1407 sink_len = intel_dp_sink_rates(intel_dp, &sink_rates);
1408 source_len = intel_dp_source_rates(intel_dp, &source_rates);
1409
1410 return intersect_rates(source_rates, source_len,
1411 sink_rates, sink_len,
1412 common_rates);
1413}
1414
1415static void snprintf_int_array(char *str, size_t len, 1414static void snprintf_int_array(char *str, size_t len,
1416 const int *array, int nelem) 1415 const int *array, int nelem)
1417{ 1416{
@@ -1451,40 +1450,35 @@ static void intel_dp_print_rates(struct intel_dp *intel_dp)
1451 DRM_DEBUG_KMS("common rates: %s\n", str); 1450 DRM_DEBUG_KMS("common rates: %s\n", str);
1452} 1451}
1453 1452
1454static void intel_dp_print_hw_revision(struct intel_dp *intel_dp) 1453bool
1454__intel_dp_read_desc(struct intel_dp *intel_dp, struct intel_dp_desc *desc)
1455{ 1455{
1456 uint8_t rev; 1456 u32 base = drm_dp_is_branch(intel_dp->dpcd) ? DP_BRANCH_OUI :
1457 int len; 1457 DP_SINK_OUI;
1458
1459 if ((drm_debug & DRM_UT_KMS) == 0)
1460 return;
1461 1458
1462 if (!drm_dp_is_branch(intel_dp->dpcd)) 1459 return drm_dp_dpcd_read(&intel_dp->aux, base, desc, sizeof(*desc)) ==
1463 return; 1460 sizeof(*desc);
1464
1465 len = drm_dp_dpcd_read(&intel_dp->aux, DP_BRANCH_HW_REV, &rev, 1);
1466 if (len < 0)
1467 return;
1468
1469 DRM_DEBUG_KMS("sink hw revision: %d.%d\n", (rev & 0xf0) >> 4, rev & 0xf);
1470} 1461}
1471 1462
1472static void intel_dp_print_sw_revision(struct intel_dp *intel_dp) 1463bool intel_dp_read_desc(struct intel_dp *intel_dp)
1473{ 1464{
1474 uint8_t rev[2]; 1465 struct intel_dp_desc *desc = &intel_dp->desc;
1475 int len; 1466 bool oui_sup = intel_dp->dpcd[DP_DOWN_STREAM_PORT_COUNT] &
1467 DP_OUI_SUPPORT;
1468 int dev_id_len;
1476 1469
1477 if ((drm_debug & DRM_UT_KMS) == 0) 1470 if (!__intel_dp_read_desc(intel_dp, desc))
1478 return; 1471 return false;
1479
1480 if (!drm_dp_is_branch(intel_dp->dpcd))
1481 return;
1482 1472
1483 len = drm_dp_dpcd_read(&intel_dp->aux, DP_BRANCH_SW_REV, &rev, 2); 1473 dev_id_len = strnlen(desc->device_id, sizeof(desc->device_id));
1484 if (len < 0) 1474 DRM_DEBUG_KMS("DP %s: OUI %*phD%s dev-ID %*pE HW-rev %d.%d SW-rev %d.%d\n",
1485 return; 1475 drm_dp_is_branch(intel_dp->dpcd) ? "branch" : "sink",
1476 (int)sizeof(desc->oui), desc->oui, oui_sup ? "" : "(NS)",
1477 dev_id_len, desc->device_id,
1478 desc->hw_rev >> 4, desc->hw_rev & 0xf,
1479 desc->sw_major_rev, desc->sw_minor_rev);
1486 1480
1487 DRM_DEBUG_KMS("sink sw revision: %d.%d\n", rev[0], rev[1]); 1481 return true;
1488} 1482}
1489 1483
1490static int rate_to_index(int find, const int *rates) 1484static int rate_to_index(int find, const int *rates)
@@ -2369,7 +2363,7 @@ static void ironlake_edp_pll_on(struct intel_dp *intel_dp,
2369 * 2. Program DP PLL enable 2363 * 2. Program DP PLL enable
2370 */ 2364 */
2371 if (IS_GEN5(dev_priv)) 2365 if (IS_GEN5(dev_priv))
2372 intel_wait_for_vblank_if_active(&dev_priv->drm, !crtc->pipe); 2366 intel_wait_for_vblank_if_active(dev_priv, !crtc->pipe);
2373 2367
2374 intel_dp->DP |= DP_PLL_ENABLE; 2368 intel_dp->DP |= DP_PLL_ENABLE;
2375 2369
@@ -3492,7 +3486,7 @@ intel_dp_link_down(struct intel_dp *intel_dp)
3492 I915_WRITE(intel_dp->output_reg, DP); 3486 I915_WRITE(intel_dp->output_reg, DP);
3493 POSTING_READ(intel_dp->output_reg); 3487 POSTING_READ(intel_dp->output_reg);
3494 3488
3495 intel_wait_for_vblank_if_active(&dev_priv->drm, PIPE_A); 3489 intel_wait_for_vblank_if_active(dev_priv, PIPE_A);
3496 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true); 3490 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true);
3497 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true); 3491 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
3498 } 3492 }
@@ -3502,7 +3496,7 @@ intel_dp_link_down(struct intel_dp *intel_dp)
3502 intel_dp->DP = DP; 3496 intel_dp->DP = DP;
3503} 3497}
3504 3498
3505static bool 3499bool
3506intel_dp_read_dpcd(struct intel_dp *intel_dp) 3500intel_dp_read_dpcd(struct intel_dp *intel_dp)
3507{ 3501{
3508 if (drm_dp_dpcd_read(&intel_dp->aux, 0x000, intel_dp->dpcd, 3502 if (drm_dp_dpcd_read(&intel_dp->aux, 0x000, intel_dp->dpcd,
@@ -3526,6 +3520,8 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
3526 if (!intel_dp_read_dpcd(intel_dp)) 3520 if (!intel_dp_read_dpcd(intel_dp))
3527 return false; 3521 return false;
3528 3522
3523 intel_dp_read_desc(intel_dp);
3524
3529 if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11) 3525 if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11)
3530 dev_priv->no_aux_handshake = intel_dp->dpcd[DP_MAX_DOWNSPREAD] & 3526 dev_priv->no_aux_handshake = intel_dp->dpcd[DP_MAX_DOWNSPREAD] &
3531 DP_NO_AUX_HANDSHAKE_LINK_TRAINING; 3527 DP_NO_AUX_HANDSHAKE_LINK_TRAINING;
@@ -3627,23 +3623,6 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
3627 return true; 3623 return true;
3628} 3624}
3629 3625
3630static void
3631intel_dp_probe_oui(struct intel_dp *intel_dp)
3632{
3633 u8 buf[3];
3634
3635 if (!(intel_dp->dpcd[DP_DOWN_STREAM_PORT_COUNT] & DP_OUI_SUPPORT))
3636 return;
3637
3638 if (drm_dp_dpcd_read(&intel_dp->aux, DP_SINK_OUI, buf, 3) == 3)
3639 DRM_DEBUG_KMS("Sink OUI: %02hx%02hx%02hx\n",
3640 buf[0], buf[1], buf[2]);
3641
3642 if (drm_dp_dpcd_read(&intel_dp->aux, DP_BRANCH_OUI, buf, 3) == 3)
3643 DRM_DEBUG_KMS("Branch OUI: %02hx%02hx%02hx\n",
3644 buf[0], buf[1], buf[2]);
3645}
3646
3647static bool 3626static bool
3648intel_dp_can_mst(struct intel_dp *intel_dp) 3627intel_dp_can_mst(struct intel_dp *intel_dp)
3649{ 3628{
@@ -3687,7 +3666,7 @@ intel_dp_configure_mst(struct intel_dp *intel_dp)
3687static int intel_dp_sink_crc_stop(struct intel_dp *intel_dp) 3666static int intel_dp_sink_crc_stop(struct intel_dp *intel_dp)
3688{ 3667{
3689 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 3668 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3690 struct drm_device *dev = dig_port->base.base.dev; 3669 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
3691 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc); 3670 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc);
3692 u8 buf; 3671 u8 buf;
3693 int ret = 0; 3672 int ret = 0;
@@ -3708,7 +3687,7 @@ static int intel_dp_sink_crc_stop(struct intel_dp *intel_dp)
3708 } 3687 }
3709 3688
3710 do { 3689 do {
3711 intel_wait_for_vblank(dev, intel_crtc->pipe); 3690 intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
3712 3691
3713 if (drm_dp_dpcd_readb(&intel_dp->aux, 3692 if (drm_dp_dpcd_readb(&intel_dp->aux,
3714 DP_TEST_SINK_MISC, &buf) < 0) { 3693 DP_TEST_SINK_MISC, &buf) < 0) {
@@ -3731,7 +3710,7 @@ static int intel_dp_sink_crc_stop(struct intel_dp *intel_dp)
3731static int intel_dp_sink_crc_start(struct intel_dp *intel_dp) 3710static int intel_dp_sink_crc_start(struct intel_dp *intel_dp)
3732{ 3711{
3733 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 3712 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3734 struct drm_device *dev = dig_port->base.base.dev; 3713 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
3735 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc); 3714 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc);
3736 u8 buf; 3715 u8 buf;
3737 int ret; 3716 int ret;
@@ -3759,14 +3738,14 @@ static int intel_dp_sink_crc_start(struct intel_dp *intel_dp)
3759 return -EIO; 3738 return -EIO;
3760 } 3739 }
3761 3740
3762 intel_wait_for_vblank(dev, intel_crtc->pipe); 3741 intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
3763 return 0; 3742 return 0;
3764} 3743}
3765 3744
3766int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc) 3745int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
3767{ 3746{
3768 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 3747 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3769 struct drm_device *dev = dig_port->base.base.dev; 3748 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
3770 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc); 3749 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc);
3771 u8 buf; 3750 u8 buf;
3772 int count, ret; 3751 int count, ret;
@@ -3777,7 +3756,7 @@ int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
3777 return ret; 3756 return ret;
3778 3757
3779 do { 3758 do {
3780 intel_wait_for_vblank(dev, intel_crtc->pipe); 3759 intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
3781 3760
3782 if (drm_dp_dpcd_readb(&intel_dp->aux, 3761 if (drm_dp_dpcd_readb(&intel_dp->aux,
3783 DP_TEST_SINK_MISC, &buf) < 0) { 3762 DP_TEST_SINK_MISC, &buf) < 0) {
@@ -4010,7 +3989,7 @@ intel_dp_retrain_link(struct intel_dp *intel_dp)
4010 intel_dp_stop_link_train(intel_dp); 3989 intel_dp_stop_link_train(intel_dp);
4011 3990
4012 /* Keep underrun reporting disabled until things are stable */ 3991 /* Keep underrun reporting disabled until things are stable */
4013 intel_wait_for_vblank(&dev_priv->drm, crtc->pipe); 3992 intel_wait_for_vblank(dev_priv, crtc->pipe);
4014 3993
4015 intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, true); 3994 intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, true);
4016 if (crtc->config->has_pch_encoder) 3995 if (crtc->config->has_pch_encoder)
@@ -4422,10 +4401,7 @@ intel_dp_long_pulse(struct intel_connector *intel_connector)
4422 4401
4423 intel_dp_print_rates(intel_dp); 4402 intel_dp_print_rates(intel_dp);
4424 4403
4425 intel_dp_probe_oui(intel_dp); 4404 intel_dp_read_desc(intel_dp);
4426
4427 intel_dp_print_hw_revision(intel_dp);
4428 intel_dp_print_sw_revision(intel_dp);
4429 4405
4430 intel_dp_configure_mst(intel_dp); 4406 intel_dp_configure_mst(intel_dp);
4431 4407
@@ -4489,21 +4465,11 @@ static enum drm_connector_status
4489intel_dp_detect(struct drm_connector *connector, bool force) 4465intel_dp_detect(struct drm_connector *connector, bool force)
4490{ 4466{
4491 struct intel_dp *intel_dp = intel_attached_dp(connector); 4467 struct intel_dp *intel_dp = intel_attached_dp(connector);
4492 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
4493 struct intel_encoder *intel_encoder = &intel_dig_port->base;
4494 enum drm_connector_status status = connector->status; 4468 enum drm_connector_status status = connector->status;
4495 4469
4496 DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", 4470 DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
4497 connector->base.id, connector->name); 4471 connector->base.id, connector->name);
4498 4472
4499 if (intel_dp->is_mst) {
4500 /* MST devices are disconnected from a monitor POV */
4501 intel_dp_unset_edid(intel_dp);
4502 if (intel_encoder->type != INTEL_OUTPUT_EDP)
4503 intel_encoder->type = INTEL_OUTPUT_DP;
4504 return connector_status_disconnected;
4505 }
4506
4507 /* If full detect is not performed yet, do a full detect */ 4473 /* If full detect is not performed yet, do a full detect */
4508 if (!intel_dp->detect_done) 4474 if (!intel_dp->detect_done)
4509 status = intel_dp_long_pulse(intel_dp->attached_connector); 4475 status = intel_dp_long_pulse(intel_dp->attached_connector);
diff --git a/drivers/gpu/drm/i915/intel_dpio_phy.c b/drivers/gpu/drm/i915/intel_dpio_phy.c
index 047f48748944..7a8e82dabbf2 100644
--- a/drivers/gpu/drm/i915/intel_dpio_phy.c
+++ b/drivers/gpu/drm/i915/intel_dpio_phy.c
@@ -23,6 +23,565 @@
23 23
24#include "intel_drv.h" 24#include "intel_drv.h"
25 25
26/**
27 * DOC: DPIO
28 *
29 * VLV, CHV and BXT have slightly peculiar display PHYs for driving DP/HDMI
30 * ports. DPIO is the name given to such a display PHY. These PHYs
31 * don't follow the standard programming model using direct MMIO
32 * registers, and instead their registers must be accessed trough IOSF
33 * sideband. VLV has one such PHY for driving ports B and C, and CHV
34 * adds another PHY for driving port D. Each PHY responds to specific
35 * IOSF-SB port.
36 *
37 * Each display PHY is made up of one or two channels. Each channel
38 * houses a common lane part which contains the PLL and other common
39 * logic. CH0 common lane also contains the IOSF-SB logic for the
40 * Common Register Interface (CRI) ie. the DPIO registers. CRI clock
41 * must be running when any DPIO registers are accessed.
42 *
43 * In addition to having their own registers, the PHYs are also
44 * controlled through some dedicated signals from the display
45 * controller. These include PLL reference clock enable, PLL enable,
46 * and CRI clock selection, for example.
47 *
48 * Eeach channel also has two splines (also called data lanes), and
49 * each spline is made up of one Physical Access Coding Sub-Layer
50 * (PCS) block and two TX lanes. So each channel has two PCS blocks
51 * and four TX lanes. The TX lanes are used as DP lanes or TMDS
52 * data/clock pairs depending on the output type.
53 *
54 * Additionally the PHY also contains an AUX lane with AUX blocks
55 * for each channel. This is used for DP AUX communication, but
56 * this fact isn't really relevant for the driver since AUX is
57 * controlled from the display controller side. No DPIO registers
58 * need to be accessed during AUX communication,
59 *
60 * Generally on VLV/CHV the common lane corresponds to the pipe and
61 * the spline (PCS/TX) corresponds to the port.
62 *
63 * For dual channel PHY (VLV/CHV):
64 *
65 * pipe A == CMN/PLL/REF CH0
66 *
67 * pipe B == CMN/PLL/REF CH1
68 *
69 * port B == PCS/TX CH0
70 *
71 * port C == PCS/TX CH1
72 *
73 * This is especially important when we cross the streams
74 * ie. drive port B with pipe B, or port C with pipe A.
75 *
76 * For single channel PHY (CHV):
77 *
78 * pipe C == CMN/PLL/REF CH0
79 *
80 * port D == PCS/TX CH0
81 *
82 * On BXT the entire PHY channel corresponds to the port. That means
83 * the PLL is also now associated with the port rather than the pipe,
84 * and so the clock needs to be routed to the appropriate transcoder.
85 * Port A PLL is directly connected to transcoder EDP and port B/C
86 * PLLs can be routed to any transcoder A/B/C.
87 *
88 * Note: DDI0 is digital port B, DD1 is digital port C, and DDI2 is
89 * digital port D (CHV) or port A (BXT). ::
90 *
91 *
92 * Dual channel PHY (VLV/CHV/BXT)
93 * ---------------------------------
94 * | CH0 | CH1 |
95 * | CMN/PLL/REF | CMN/PLL/REF |
96 * |---------------|---------------| Display PHY
97 * | PCS01 | PCS23 | PCS01 | PCS23 |
98 * |-------|-------|-------|-------|
99 * |TX0|TX1|TX2|TX3|TX0|TX1|TX2|TX3|
100 * ---------------------------------
101 * | DDI0 | DDI1 | DP/HDMI ports
102 * ---------------------------------
103 *
104 * Single channel PHY (CHV/BXT)
105 * -----------------
106 * | CH0 |
107 * | CMN/PLL/REF |
108 * |---------------| Display PHY
109 * | PCS01 | PCS23 |
110 * |-------|-------|
111 * |TX0|TX1|TX2|TX3|
112 * -----------------
113 * | DDI2 | DP/HDMI port
114 * -----------------
115 */
116
117/**
118 * struct bxt_ddi_phy_info - Hold info for a broxton DDI phy
119 */
120struct bxt_ddi_phy_info {
121 /**
122 * @dual_channel: true if this phy has a second channel.
123 */
124 bool dual_channel;
125
126 /**
127 * @rcomp_phy: If -1, indicates this phy has its own rcomp resistor.
128 * Otherwise the GRC value will be copied from the phy indicated by
129 * this field.
130 */
131 enum dpio_phy rcomp_phy;
132
133 /**
134 * @channel: struct containing per channel information.
135 */
136 struct {
137 /**
138 * @port: which port maps to this channel.
139 */
140 enum port port;
141 } channel[2];
142};
143
144static const struct bxt_ddi_phy_info bxt_ddi_phy_info[] = {
145 [DPIO_PHY0] = {
146 .dual_channel = true,
147 .rcomp_phy = DPIO_PHY1,
148
149 .channel = {
150 [DPIO_CH0] = { .port = PORT_B },
151 [DPIO_CH1] = { .port = PORT_C },
152 }
153 },
154 [DPIO_PHY1] = {
155 .dual_channel = false,
156 .rcomp_phy = -1,
157
158 .channel = {
159 [DPIO_CH0] = { .port = PORT_A },
160 }
161 },
162};
163
164static u32 bxt_phy_port_mask(const struct bxt_ddi_phy_info *phy_info)
165{
166 return (phy_info->dual_channel * BIT(phy_info->channel[DPIO_CH1].port)) |
167 BIT(phy_info->channel[DPIO_CH0].port);
168}
169
170void bxt_port_to_phy_channel(enum port port,
171 enum dpio_phy *phy, enum dpio_channel *ch)
172{
173 const struct bxt_ddi_phy_info *phy_info;
174 int i;
175
176 for (i = 0; i < ARRAY_SIZE(bxt_ddi_phy_info); i++) {
177 phy_info = &bxt_ddi_phy_info[i];
178
179 if (port == phy_info->channel[DPIO_CH0].port) {
180 *phy = i;
181 *ch = DPIO_CH0;
182 return;
183 }
184
185 if (phy_info->dual_channel &&
186 port == phy_info->channel[DPIO_CH1].port) {
187 *phy = i;
188 *ch = DPIO_CH1;
189 return;
190 }
191 }
192
193 WARN(1, "PHY not found for PORT %c", port_name(port));
194 *phy = DPIO_PHY0;
195 *ch = DPIO_CH0;
196}
197
198void bxt_ddi_phy_set_signal_level(struct drm_i915_private *dev_priv,
199 enum port port, u32 margin, u32 scale,
200 u32 enable, u32 deemphasis)
201{
202 u32 val;
203 enum dpio_phy phy;
204 enum dpio_channel ch;
205
206 bxt_port_to_phy_channel(port, &phy, &ch);
207
208 /*
209 * While we write to the group register to program all lanes at once we
210 * can read only lane registers and we pick lanes 0/1 for that.
211 */
212 val = I915_READ(BXT_PORT_PCS_DW10_LN01(phy, ch));
213 val &= ~(TX2_SWING_CALC_INIT | TX1_SWING_CALC_INIT);
214 I915_WRITE(BXT_PORT_PCS_DW10_GRP(phy, ch), val);
215
216 val = I915_READ(BXT_PORT_TX_DW2_LN0(phy, ch));
217 val &= ~(MARGIN_000 | UNIQ_TRANS_SCALE);
218 val |= margin << MARGIN_000_SHIFT | scale << UNIQ_TRANS_SCALE_SHIFT;
219 I915_WRITE(BXT_PORT_TX_DW2_GRP(phy, ch), val);
220
221 val = I915_READ(BXT_PORT_TX_DW3_LN0(phy, ch));
222 val &= ~SCALE_DCOMP_METHOD;
223 if (enable)
224 val |= SCALE_DCOMP_METHOD;
225
226 if ((val & UNIQUE_TRANGE_EN_METHOD) && !(val & SCALE_DCOMP_METHOD))
227 DRM_ERROR("Disabled scaling while ouniqetrangenmethod was set");
228
229 I915_WRITE(BXT_PORT_TX_DW3_GRP(phy, ch), val);
230
231 val = I915_READ(BXT_PORT_TX_DW4_LN0(phy, ch));
232 val &= ~DE_EMPHASIS;
233 val |= deemphasis << DEEMPH_SHIFT;
234 I915_WRITE(BXT_PORT_TX_DW4_GRP(phy, ch), val);
235
236 val = I915_READ(BXT_PORT_PCS_DW10_LN01(phy, ch));
237 val |= TX2_SWING_CALC_INIT | TX1_SWING_CALC_INIT;
238 I915_WRITE(BXT_PORT_PCS_DW10_GRP(phy, ch), val);
239}
240
241bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
242 enum dpio_phy phy)
243{
244 const struct bxt_ddi_phy_info *phy_info = &bxt_ddi_phy_info[phy];
245 enum port port;
246
247 if (!(I915_READ(BXT_P_CR_GT_DISP_PWRON) & GT_DISPLAY_POWER_ON(phy)))
248 return false;
249
250 if ((I915_READ(BXT_PORT_CL1CM_DW0(phy)) &
251 (PHY_POWER_GOOD | PHY_RESERVED)) != PHY_POWER_GOOD) {
252 DRM_DEBUG_DRIVER("DDI PHY %d powered, but power hasn't settled\n",
253 phy);
254
255 return false;
256 }
257
258 if (phy_info->rcomp_phy == -1 &&
259 !(I915_READ(BXT_PORT_REF_DW3(phy)) & GRC_DONE)) {
260 DRM_DEBUG_DRIVER("DDI PHY %d powered, but GRC isn't done\n",
261 phy);
262
263 return false;
264 }
265
266 if (!(I915_READ(BXT_PHY_CTL_FAMILY(phy)) & COMMON_RESET_DIS)) {
267 DRM_DEBUG_DRIVER("DDI PHY %d powered, but still in reset\n",
268 phy);
269
270 return false;
271 }
272
273 for_each_port_masked(port, bxt_phy_port_mask(phy_info)) {
274 u32 tmp = I915_READ(BXT_PHY_CTL(port));
275
276 if (tmp & BXT_PHY_CMNLANE_POWERDOWN_ACK) {
277 DRM_DEBUG_DRIVER("DDI PHY %d powered, but common lane "
278 "for port %c powered down "
279 "(PHY_CTL %08x)\n",
280 phy, port_name(port), tmp);
281
282 return false;
283 }
284 }
285
286 return true;
287}
288
289static u32 bxt_get_grc(struct drm_i915_private *dev_priv, enum dpio_phy phy)
290{
291 u32 val = I915_READ(BXT_PORT_REF_DW6(phy));
292
293 return (val & GRC_CODE_MASK) >> GRC_CODE_SHIFT;
294}
295
296static void bxt_phy_wait_grc_done(struct drm_i915_private *dev_priv,
297 enum dpio_phy phy)
298{
299 if (intel_wait_for_register(dev_priv,
300 BXT_PORT_REF_DW3(phy),
301 GRC_DONE, GRC_DONE,
302 10))
303 DRM_ERROR("timeout waiting for PHY%d GRC\n", phy);
304}
305
306static void _bxt_ddi_phy_init(struct drm_i915_private *dev_priv,
307 enum dpio_phy phy)
308{
309 const struct bxt_ddi_phy_info *phy_info = &bxt_ddi_phy_info[phy];
310 u32 val;
311
312 if (bxt_ddi_phy_is_enabled(dev_priv, phy)) {
313 /* Still read out the GRC value for state verification */
314 if (phy_info->rcomp_phy != -1)
315 dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv, phy);
316
317 if (bxt_ddi_phy_verify_state(dev_priv, phy)) {
318 DRM_DEBUG_DRIVER("DDI PHY %d already enabled, "
319 "won't reprogram it\n", phy);
320
321 return;
322 }
323
324 DRM_DEBUG_DRIVER("DDI PHY %d enabled with invalid state, "
325 "force reprogramming it\n", phy);
326 }
327
328 val = I915_READ(BXT_P_CR_GT_DISP_PWRON);
329 val |= GT_DISPLAY_POWER_ON(phy);
330 I915_WRITE(BXT_P_CR_GT_DISP_PWRON, val);
331
332 /*
333 * The PHY registers start out inaccessible and respond to reads with
334 * all 1s. Eventually they become accessible as they power up, then
335 * the reserved bit will give the default 0. Poll on the reserved bit
336 * becoming 0 to find when the PHY is accessible.
337 * HW team confirmed that the time to reach phypowergood status is
338 * anywhere between 50 us and 100us.
339 */
340 if (wait_for_us(((I915_READ(BXT_PORT_CL1CM_DW0(phy)) &
341 (PHY_RESERVED | PHY_POWER_GOOD)) == PHY_POWER_GOOD), 100)) {
342 DRM_ERROR("timeout during PHY%d power on\n", phy);
343 }
344
345 /* Program PLL Rcomp code offset */
346 val = I915_READ(BXT_PORT_CL1CM_DW9(phy));
347 val &= ~IREF0RC_OFFSET_MASK;
348 val |= 0xE4 << IREF0RC_OFFSET_SHIFT;
349 I915_WRITE(BXT_PORT_CL1CM_DW9(phy), val);
350
351 val = I915_READ(BXT_PORT_CL1CM_DW10(phy));
352 val &= ~IREF1RC_OFFSET_MASK;
353 val |= 0xE4 << IREF1RC_OFFSET_SHIFT;
354 I915_WRITE(BXT_PORT_CL1CM_DW10(phy), val);
355
356 /* Program power gating */
357 val = I915_READ(BXT_PORT_CL1CM_DW28(phy));
358 val |= OCL1_POWER_DOWN_EN | DW28_OLDO_DYN_PWR_DOWN_EN |
359 SUS_CLK_CONFIG;
360 I915_WRITE(BXT_PORT_CL1CM_DW28(phy), val);
361
362 if (phy_info->dual_channel) {
363 val = I915_READ(BXT_PORT_CL2CM_DW6(phy));
364 val |= DW6_OLDO_DYN_PWR_DOWN_EN;
365 I915_WRITE(BXT_PORT_CL2CM_DW6(phy), val);
366 }
367
368 if (phy_info->rcomp_phy != -1) {
369 uint32_t grc_code;
370 /*
371 * PHY0 isn't connected to an RCOMP resistor so copy over
372 * the corresponding calibrated value from PHY1, and disable
373 * the automatic calibration on PHY0.
374 */
375 val = dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv,
376 phy_info->rcomp_phy);
377 grc_code = val << GRC_CODE_FAST_SHIFT |
378 val << GRC_CODE_SLOW_SHIFT |
379 val;
380 I915_WRITE(BXT_PORT_REF_DW6(phy), grc_code);
381
382 val = I915_READ(BXT_PORT_REF_DW8(phy));
383 val |= GRC_DIS | GRC_RDY_OVRD;
384 I915_WRITE(BXT_PORT_REF_DW8(phy), val);
385 }
386
387 val = I915_READ(BXT_PHY_CTL_FAMILY(phy));
388 val |= COMMON_RESET_DIS;
389 I915_WRITE(BXT_PHY_CTL_FAMILY(phy), val);
390
391 if (phy_info->rcomp_phy == -1)
392 bxt_phy_wait_grc_done(dev_priv, phy);
393
394}
395
396void bxt_ddi_phy_uninit(struct drm_i915_private *dev_priv, enum dpio_phy phy)
397{
398 uint32_t val;
399
400 val = I915_READ(BXT_PHY_CTL_FAMILY(phy));
401 val &= ~COMMON_RESET_DIS;
402 I915_WRITE(BXT_PHY_CTL_FAMILY(phy), val);
403
404 val = I915_READ(BXT_P_CR_GT_DISP_PWRON);
405 val &= ~GT_DISPLAY_POWER_ON(phy);
406 I915_WRITE(BXT_P_CR_GT_DISP_PWRON, val);
407}
408
409void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy)
410{
411 const struct bxt_ddi_phy_info *phy_info = &bxt_ddi_phy_info[phy];
412 enum dpio_phy rcomp_phy = phy_info->rcomp_phy;
413 bool was_enabled;
414
415 lockdep_assert_held(&dev_priv->power_domains.lock);
416
417 if (rcomp_phy != -1) {
418 was_enabled = bxt_ddi_phy_is_enabled(dev_priv, rcomp_phy);
419
420 /*
421 * We need to copy the GRC calibration value from rcomp_phy,
422 * so make sure it's powered up.
423 */
424 if (!was_enabled)
425 _bxt_ddi_phy_init(dev_priv, rcomp_phy);
426 }
427
428 _bxt_ddi_phy_init(dev_priv, phy);
429
430 if (rcomp_phy != -1 && !was_enabled)
431 bxt_ddi_phy_uninit(dev_priv, phy_info->rcomp_phy);
432}
433
434static bool __printf(6, 7)
435__phy_reg_verify_state(struct drm_i915_private *dev_priv, enum dpio_phy phy,
436 i915_reg_t reg, u32 mask, u32 expected,
437 const char *reg_fmt, ...)
438{
439 struct va_format vaf;
440 va_list args;
441 u32 val;
442
443 val = I915_READ(reg);
444 if ((val & mask) == expected)
445 return true;
446
447 va_start(args, reg_fmt);
448 vaf.fmt = reg_fmt;
449 vaf.va = &args;
450
451 DRM_DEBUG_DRIVER("DDI PHY %d reg %pV [%08x] state mismatch: "
452 "current %08x, expected %08x (mask %08x)\n",
453 phy, &vaf, reg.reg, val, (val & ~mask) | expected,
454 mask);
455
456 va_end(args);
457
458 return false;
459}
460
461bool bxt_ddi_phy_verify_state(struct drm_i915_private *dev_priv,
462 enum dpio_phy phy)
463{
464 const struct bxt_ddi_phy_info *phy_info = &bxt_ddi_phy_info[phy];
465 uint32_t mask;
466 bool ok;
467
468#define _CHK(reg, mask, exp, fmt, ...) \
469 __phy_reg_verify_state(dev_priv, phy, reg, mask, exp, fmt, \
470 ## __VA_ARGS__)
471
472 if (!bxt_ddi_phy_is_enabled(dev_priv, phy))
473 return false;
474
475 ok = true;
476
477 /* PLL Rcomp code offset */
478 ok &= _CHK(BXT_PORT_CL1CM_DW9(phy),
479 IREF0RC_OFFSET_MASK, 0xe4 << IREF0RC_OFFSET_SHIFT,
480 "BXT_PORT_CL1CM_DW9(%d)", phy);
481 ok &= _CHK(BXT_PORT_CL1CM_DW10(phy),
482 IREF1RC_OFFSET_MASK, 0xe4 << IREF1RC_OFFSET_SHIFT,
483 "BXT_PORT_CL1CM_DW10(%d)", phy);
484
485 /* Power gating */
486 mask = OCL1_POWER_DOWN_EN | DW28_OLDO_DYN_PWR_DOWN_EN | SUS_CLK_CONFIG;
487 ok &= _CHK(BXT_PORT_CL1CM_DW28(phy), mask, mask,
488 "BXT_PORT_CL1CM_DW28(%d)", phy);
489
490 if (phy_info->dual_channel)
491 ok &= _CHK(BXT_PORT_CL2CM_DW6(phy),
492 DW6_OLDO_DYN_PWR_DOWN_EN, DW6_OLDO_DYN_PWR_DOWN_EN,
493 "BXT_PORT_CL2CM_DW6(%d)", phy);
494
495 if (phy_info->rcomp_phy != -1) {
496 u32 grc_code = dev_priv->bxt_phy_grc;
497
498 grc_code = grc_code << GRC_CODE_FAST_SHIFT |
499 grc_code << GRC_CODE_SLOW_SHIFT |
500 grc_code;
501 mask = GRC_CODE_FAST_MASK | GRC_CODE_SLOW_MASK |
502 GRC_CODE_NOM_MASK;
503 ok &= _CHK(BXT_PORT_REF_DW6(phy), mask, grc_code,
504 "BXT_PORT_REF_DW6(%d)", phy);
505
506 mask = GRC_DIS | GRC_RDY_OVRD;
507 ok &= _CHK(BXT_PORT_REF_DW8(phy), mask, mask,
508 "BXT_PORT_REF_DW8(%d)", phy);
509 }
510
511 return ok;
512#undef _CHK
513}
514
515uint8_t
516bxt_ddi_phy_calc_lane_lat_optim_mask(struct intel_encoder *encoder,
517 uint8_t lane_count)
518{
519 switch (lane_count) {
520 case 1:
521 return 0;
522 case 2:
523 return BIT(2) | BIT(0);
524 case 4:
525 return BIT(3) | BIT(2) | BIT(0);
526 default:
527 MISSING_CASE(lane_count);
528
529 return 0;
530 }
531}
532
533void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
534 uint8_t lane_lat_optim_mask)
535{
536 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
537 struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
538 enum port port = dport->port;
539 enum dpio_phy phy;
540 enum dpio_channel ch;
541 int lane;
542
543 bxt_port_to_phy_channel(port, &phy, &ch);
544
545 for (lane = 0; lane < 4; lane++) {
546 u32 val = I915_READ(BXT_PORT_TX_DW14_LN(phy, ch, lane));
547
548 /*
549 * Note that on CHV this flag is called UPAR, but has
550 * the same function.
551 */
552 val &= ~LATENCY_OPTIM;
553 if (lane_lat_optim_mask & BIT(lane))
554 val |= LATENCY_OPTIM;
555
556 I915_WRITE(BXT_PORT_TX_DW14_LN(phy, ch, lane), val);
557 }
558}
559
560uint8_t
561bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder)
562{
563 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
564 struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev);
565 enum port port = dport->port;
566 enum dpio_phy phy;
567 enum dpio_channel ch;
568 int lane;
569 uint8_t mask;
570
571 bxt_port_to_phy_channel(port, &phy, &ch);
572
573 mask = 0;
574 for (lane = 0; lane < 4; lane++) {
575 u32 val = I915_READ(BXT_PORT_TX_DW14_LN(phy, ch, lane));
576
577 if (val & LATENCY_OPTIM)
578 mask |= BIT(lane);
579 }
580
581 return mask;
582}
583
584
26void chv_set_phy_signal_level(struct intel_encoder *encoder, 585void chv_set_phy_signal_level(struct intel_encoder *encoder,
27 u32 deemph_reg_value, u32 margin_reg_value, 586 u32 deemph_reg_value, u32 margin_reg_value,
28 bool uniq_trans_scale) 587 bool uniq_trans_scale)
diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c b/drivers/gpu/drm/i915/intel_dpll_mgr.c
index 605d0b509f24..21853a17b6d9 100644
--- a/drivers/gpu/drm/i915/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c
@@ -1371,6 +1371,10 @@ static void bxt_ddi_pll_enable(struct drm_i915_private *dev_priv,
1371{ 1371{
1372 uint32_t temp; 1372 uint32_t temp;
1373 enum port port = (enum port)pll->id; /* 1:1 port->PLL mapping */ 1373 enum port port = (enum port)pll->id; /* 1:1 port->PLL mapping */
1374 enum dpio_phy phy;
1375 enum dpio_channel ch;
1376
1377 bxt_port_to_phy_channel(port, &phy, &ch);
1374 1378
1375 /* Non-SSC reference */ 1379 /* Non-SSC reference */
1376 temp = I915_READ(BXT_PORT_PLL_ENABLE(port)); 1380 temp = I915_READ(BXT_PORT_PLL_ENABLE(port));
@@ -1378,72 +1382,72 @@ static void bxt_ddi_pll_enable(struct drm_i915_private *dev_priv,
1378 I915_WRITE(BXT_PORT_PLL_ENABLE(port), temp); 1382 I915_WRITE(BXT_PORT_PLL_ENABLE(port), temp);
1379 1383
1380 /* Disable 10 bit clock */ 1384 /* Disable 10 bit clock */
1381 temp = I915_READ(BXT_PORT_PLL_EBB_4(port)); 1385 temp = I915_READ(BXT_PORT_PLL_EBB_4(phy, ch));
1382 temp &= ~PORT_PLL_10BIT_CLK_ENABLE; 1386 temp &= ~PORT_PLL_10BIT_CLK_ENABLE;
1383 I915_WRITE(BXT_PORT_PLL_EBB_4(port), temp); 1387 I915_WRITE(BXT_PORT_PLL_EBB_4(phy, ch), temp);
1384 1388
1385 /* Write P1 & P2 */ 1389 /* Write P1 & P2 */
1386 temp = I915_READ(BXT_PORT_PLL_EBB_0(port)); 1390 temp = I915_READ(BXT_PORT_PLL_EBB_0(phy, ch));
1387 temp &= ~(PORT_PLL_P1_MASK | PORT_PLL_P2_MASK); 1391 temp &= ~(PORT_PLL_P1_MASK | PORT_PLL_P2_MASK);
1388 temp |= pll->config.hw_state.ebb0; 1392 temp |= pll->config.hw_state.ebb0;
1389 I915_WRITE(BXT_PORT_PLL_EBB_0(port), temp); 1393 I915_WRITE(BXT_PORT_PLL_EBB_0(phy, ch), temp);
1390 1394
1391 /* Write M2 integer */ 1395 /* Write M2 integer */
1392 temp = I915_READ(BXT_PORT_PLL(port, 0)); 1396 temp = I915_READ(BXT_PORT_PLL(phy, ch, 0));
1393 temp &= ~PORT_PLL_M2_MASK; 1397 temp &= ~PORT_PLL_M2_MASK;
1394 temp |= pll->config.hw_state.pll0; 1398 temp |= pll->config.hw_state.pll0;
1395 I915_WRITE(BXT_PORT_PLL(port, 0), temp); 1399 I915_WRITE(BXT_PORT_PLL(phy, ch, 0), temp);
1396 1400
1397 /* Write N */ 1401 /* Write N */
1398 temp = I915_READ(BXT_PORT_PLL(port, 1)); 1402 temp = I915_READ(BXT_PORT_PLL(phy, ch, 1));
1399 temp &= ~PORT_PLL_N_MASK; 1403 temp &= ~PORT_PLL_N_MASK;
1400 temp |= pll->config.hw_state.pll1; 1404 temp |= pll->config.hw_state.pll1;
1401 I915_WRITE(BXT_PORT_PLL(port, 1), temp); 1405 I915_WRITE(BXT_PORT_PLL(phy, ch, 1), temp);
1402 1406
1403 /* Write M2 fraction */ 1407 /* Write M2 fraction */
1404 temp = I915_READ(BXT_PORT_PLL(port, 2)); 1408 temp = I915_READ(BXT_PORT_PLL(phy, ch, 2));
1405 temp &= ~PORT_PLL_M2_FRAC_MASK; 1409 temp &= ~PORT_PLL_M2_FRAC_MASK;
1406 temp |= pll->config.hw_state.pll2; 1410 temp |= pll->config.hw_state.pll2;
1407 I915_WRITE(BXT_PORT_PLL(port, 2), temp); 1411 I915_WRITE(BXT_PORT_PLL(phy, ch, 2), temp);
1408 1412
1409 /* Write M2 fraction enable */ 1413 /* Write M2 fraction enable */
1410 temp = I915_READ(BXT_PORT_PLL(port, 3)); 1414 temp = I915_READ(BXT_PORT_PLL(phy, ch, 3));
1411 temp &= ~PORT_PLL_M2_FRAC_ENABLE; 1415 temp &= ~PORT_PLL_M2_FRAC_ENABLE;
1412 temp |= pll->config.hw_state.pll3; 1416 temp |= pll->config.hw_state.pll3;
1413 I915_WRITE(BXT_PORT_PLL(port, 3), temp); 1417 I915_WRITE(BXT_PORT_PLL(phy, ch, 3), temp);
1414 1418
1415 /* Write coeff */ 1419 /* Write coeff */
1416 temp = I915_READ(BXT_PORT_PLL(port, 6)); 1420 temp = I915_READ(BXT_PORT_PLL(phy, ch, 6));
1417 temp &= ~PORT_PLL_PROP_COEFF_MASK; 1421 temp &= ~PORT_PLL_PROP_COEFF_MASK;
1418 temp &= ~PORT_PLL_INT_COEFF_MASK; 1422 temp &= ~PORT_PLL_INT_COEFF_MASK;
1419 temp &= ~PORT_PLL_GAIN_CTL_MASK; 1423 temp &= ~PORT_PLL_GAIN_CTL_MASK;
1420 temp |= pll->config.hw_state.pll6; 1424 temp |= pll->config.hw_state.pll6;
1421 I915_WRITE(BXT_PORT_PLL(port, 6), temp); 1425 I915_WRITE(BXT_PORT_PLL(phy, ch, 6), temp);
1422 1426
1423 /* Write calibration val */ 1427 /* Write calibration val */
1424 temp = I915_READ(BXT_PORT_PLL(port, 8)); 1428 temp = I915_READ(BXT_PORT_PLL(phy, ch, 8));
1425 temp &= ~PORT_PLL_TARGET_CNT_MASK; 1429 temp &= ~PORT_PLL_TARGET_CNT_MASK;
1426 temp |= pll->config.hw_state.pll8; 1430 temp |= pll->config.hw_state.pll8;
1427 I915_WRITE(BXT_PORT_PLL(port, 8), temp); 1431 I915_WRITE(BXT_PORT_PLL(phy, ch, 8), temp);
1428 1432
1429 temp = I915_READ(BXT_PORT_PLL(port, 9)); 1433 temp = I915_READ(BXT_PORT_PLL(phy, ch, 9));
1430 temp &= ~PORT_PLL_LOCK_THRESHOLD_MASK; 1434 temp &= ~PORT_PLL_LOCK_THRESHOLD_MASK;
1431 temp |= pll->config.hw_state.pll9; 1435 temp |= pll->config.hw_state.pll9;
1432 I915_WRITE(BXT_PORT_PLL(port, 9), temp); 1436 I915_WRITE(BXT_PORT_PLL(phy, ch, 9), temp);
1433 1437
1434 temp = I915_READ(BXT_PORT_PLL(port, 10)); 1438 temp = I915_READ(BXT_PORT_PLL(phy, ch, 10));
1435 temp &= ~PORT_PLL_DCO_AMP_OVR_EN_H; 1439 temp &= ~PORT_PLL_DCO_AMP_OVR_EN_H;
1436 temp &= ~PORT_PLL_DCO_AMP_MASK; 1440 temp &= ~PORT_PLL_DCO_AMP_MASK;
1437 temp |= pll->config.hw_state.pll10; 1441 temp |= pll->config.hw_state.pll10;
1438 I915_WRITE(BXT_PORT_PLL(port, 10), temp); 1442 I915_WRITE(BXT_PORT_PLL(phy, ch, 10), temp);
1439 1443
1440 /* Recalibrate with new settings */ 1444 /* Recalibrate with new settings */
1441 temp = I915_READ(BXT_PORT_PLL_EBB_4(port)); 1445 temp = I915_READ(BXT_PORT_PLL_EBB_4(phy, ch));
1442 temp |= PORT_PLL_RECALIBRATE; 1446 temp |= PORT_PLL_RECALIBRATE;
1443 I915_WRITE(BXT_PORT_PLL_EBB_4(port), temp); 1447 I915_WRITE(BXT_PORT_PLL_EBB_4(phy, ch), temp);
1444 temp &= ~PORT_PLL_10BIT_CLK_ENABLE; 1448 temp &= ~PORT_PLL_10BIT_CLK_ENABLE;
1445 temp |= pll->config.hw_state.ebb4; 1449 temp |= pll->config.hw_state.ebb4;
1446 I915_WRITE(BXT_PORT_PLL_EBB_4(port), temp); 1450 I915_WRITE(BXT_PORT_PLL_EBB_4(phy, ch), temp);
1447 1451
1448 /* Enable PLL */ 1452 /* Enable PLL */
1449 temp = I915_READ(BXT_PORT_PLL_ENABLE(port)); 1453 temp = I915_READ(BXT_PORT_PLL_ENABLE(port));
@@ -1459,11 +1463,11 @@ static void bxt_ddi_pll_enable(struct drm_i915_private *dev_priv,
1459 * While we write to the group register to program all lanes at once we 1463 * While we write to the group register to program all lanes at once we
1460 * can read only lane registers and we pick lanes 0/1 for that. 1464 * can read only lane registers and we pick lanes 0/1 for that.
1461 */ 1465 */
1462 temp = I915_READ(BXT_PORT_PCS_DW12_LN01(port)); 1466 temp = I915_READ(BXT_PORT_PCS_DW12_LN01(phy, ch));
1463 temp &= ~LANE_STAGGER_MASK; 1467 temp &= ~LANE_STAGGER_MASK;
1464 temp &= ~LANESTAGGER_STRAP_OVRD; 1468 temp &= ~LANESTAGGER_STRAP_OVRD;
1465 temp |= pll->config.hw_state.pcsdw12; 1469 temp |= pll->config.hw_state.pcsdw12;
1466 I915_WRITE(BXT_PORT_PCS_DW12_GRP(port), temp); 1470 I915_WRITE(BXT_PORT_PCS_DW12_GRP(phy, ch), temp);
1467} 1471}
1468 1472
1469static void bxt_ddi_pll_disable(struct drm_i915_private *dev_priv, 1473static void bxt_ddi_pll_disable(struct drm_i915_private *dev_priv,
@@ -1485,6 +1489,10 @@ static bool bxt_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
1485 enum port port = (enum port)pll->id; /* 1:1 port->PLL mapping */ 1489 enum port port = (enum port)pll->id; /* 1:1 port->PLL mapping */
1486 uint32_t val; 1490 uint32_t val;
1487 bool ret; 1491 bool ret;
1492 enum dpio_phy phy;
1493 enum dpio_channel ch;
1494
1495 bxt_port_to_phy_channel(port, &phy, &ch);
1488 1496
1489 if (!intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_PLLS)) 1497 if (!intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_PLLS))
1490 return false; 1498 return false;
@@ -1495,36 +1503,36 @@ static bool bxt_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
1495 if (!(val & PORT_PLL_ENABLE)) 1503 if (!(val & PORT_PLL_ENABLE))
1496 goto out; 1504 goto out;
1497 1505
1498 hw_state->ebb0 = I915_READ(BXT_PORT_PLL_EBB_0(port)); 1506 hw_state->ebb0 = I915_READ(BXT_PORT_PLL_EBB_0(phy, ch));
1499 hw_state->ebb0 &= PORT_PLL_P1_MASK | PORT_PLL_P2_MASK; 1507 hw_state->ebb0 &= PORT_PLL_P1_MASK | PORT_PLL_P2_MASK;
1500 1508
1501 hw_state->ebb4 = I915_READ(BXT_PORT_PLL_EBB_4(port)); 1509 hw_state->ebb4 = I915_READ(BXT_PORT_PLL_EBB_4(phy, ch));
1502 hw_state->ebb4 &= PORT_PLL_10BIT_CLK_ENABLE; 1510 hw_state->ebb4 &= PORT_PLL_10BIT_CLK_ENABLE;
1503 1511
1504 hw_state->pll0 = I915_READ(BXT_PORT_PLL(port, 0)); 1512 hw_state->pll0 = I915_READ(BXT_PORT_PLL(phy, ch, 0));
1505 hw_state->pll0 &= PORT_PLL_M2_MASK; 1513 hw_state->pll0 &= PORT_PLL_M2_MASK;
1506 1514
1507 hw_state->pll1 = I915_READ(BXT_PORT_PLL(port, 1)); 1515 hw_state->pll1 = I915_READ(BXT_PORT_PLL(phy, ch, 1));
1508 hw_state->pll1 &= PORT_PLL_N_MASK; 1516 hw_state->pll1 &= PORT_PLL_N_MASK;
1509 1517
1510 hw_state->pll2 = I915_READ(BXT_PORT_PLL(port, 2)); 1518 hw_state->pll2 = I915_READ(BXT_PORT_PLL(phy, ch, 2));
1511 hw_state->pll2 &= PORT_PLL_M2_FRAC_MASK; 1519 hw_state->pll2 &= PORT_PLL_M2_FRAC_MASK;
1512 1520
1513 hw_state->pll3 = I915_READ(BXT_PORT_PLL(port, 3)); 1521 hw_state->pll3 = I915_READ(BXT_PORT_PLL(phy, ch, 3));
1514 hw_state->pll3 &= PORT_PLL_M2_FRAC_ENABLE; 1522 hw_state->pll3 &= PORT_PLL_M2_FRAC_ENABLE;
1515 1523
1516 hw_state->pll6 = I915_READ(BXT_PORT_PLL(port, 6)); 1524 hw_state->pll6 = I915_READ(BXT_PORT_PLL(phy, ch, 6));
1517 hw_state->pll6 &= PORT_PLL_PROP_COEFF_MASK | 1525 hw_state->pll6 &= PORT_PLL_PROP_COEFF_MASK |
1518 PORT_PLL_INT_COEFF_MASK | 1526 PORT_PLL_INT_COEFF_MASK |
1519 PORT_PLL_GAIN_CTL_MASK; 1527 PORT_PLL_GAIN_CTL_MASK;
1520 1528
1521 hw_state->pll8 = I915_READ(BXT_PORT_PLL(port, 8)); 1529 hw_state->pll8 = I915_READ(BXT_PORT_PLL(phy, ch, 8));
1522 hw_state->pll8 &= PORT_PLL_TARGET_CNT_MASK; 1530 hw_state->pll8 &= PORT_PLL_TARGET_CNT_MASK;
1523 1531
1524 hw_state->pll9 = I915_READ(BXT_PORT_PLL(port, 9)); 1532 hw_state->pll9 = I915_READ(BXT_PORT_PLL(phy, ch, 9));
1525 hw_state->pll9 &= PORT_PLL_LOCK_THRESHOLD_MASK; 1533 hw_state->pll9 &= PORT_PLL_LOCK_THRESHOLD_MASK;
1526 1534
1527 hw_state->pll10 = I915_READ(BXT_PORT_PLL(port, 10)); 1535 hw_state->pll10 = I915_READ(BXT_PORT_PLL(phy, ch, 10));
1528 hw_state->pll10 &= PORT_PLL_DCO_AMP_OVR_EN_H | 1536 hw_state->pll10 &= PORT_PLL_DCO_AMP_OVR_EN_H |
1529 PORT_PLL_DCO_AMP_MASK; 1537 PORT_PLL_DCO_AMP_MASK;
1530 1538
@@ -1533,11 +1541,11 @@ static bool bxt_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
1533 * can read only lane registers. We configure all lanes the same way, so 1541 * can read only lane registers. We configure all lanes the same way, so
1534 * here just read out lanes 0/1 and output a note if lanes 2/3 differ. 1542 * here just read out lanes 0/1 and output a note if lanes 2/3 differ.
1535 */ 1543 */
1536 hw_state->pcsdw12 = I915_READ(BXT_PORT_PCS_DW12_LN01(port)); 1544 hw_state->pcsdw12 = I915_READ(BXT_PORT_PCS_DW12_LN01(phy, ch));
1537 if (I915_READ(BXT_PORT_PCS_DW12_LN23(port)) != hw_state->pcsdw12) 1545 if (I915_READ(BXT_PORT_PCS_DW12_LN23(phy, ch)) != hw_state->pcsdw12)
1538 DRM_DEBUG_DRIVER("lane stagger config different for lane 01 (%08x) and 23 (%08x)\n", 1546 DRM_DEBUG_DRIVER("lane stagger config different for lane 01 (%08x) and 23 (%08x)\n",
1539 hw_state->pcsdw12, 1547 hw_state->pcsdw12,
1540 I915_READ(BXT_PORT_PCS_DW12_LN23(port))); 1548 I915_READ(BXT_PORT_PCS_DW12_LN23(phy, ch)));
1541 hw_state->pcsdw12 &= LANE_STAGGER_MASK | LANESTAGGER_STRAP_OVRD; 1549 hw_state->pcsdw12 &= LANE_STAGGER_MASK | LANESTAGGER_STRAP_OVRD;
1542 1550
1543 ret = true; 1551 ret = true;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 4e90b0760f3f..398195bf6dd1 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -365,6 +365,8 @@ struct intel_atomic_state {
365 365
366 /* Gen9+ only */ 366 /* Gen9+ only */
367 struct skl_wm_values wm_results; 367 struct skl_wm_values wm_results;
368
369 struct i915_sw_fence commit_ready;
368}; 370};
369 371
370struct intel_plane_state { 372struct intel_plane_state {
@@ -401,9 +403,6 @@ struct intel_plane_state {
401 int scaler_id; 403 int scaler_id;
402 404
403 struct drm_intel_sprite_colorkey ckey; 405 struct drm_intel_sprite_colorkey ckey;
404
405 /* async flip related structures */
406 struct drm_i915_gem_request *wait_req;
407}; 406};
408 407
409struct intel_initial_plane_config { 408struct intel_initial_plane_config {
@@ -501,14 +500,6 @@ struct intel_crtc_wm_state {
501 /* gen9+ only needs 1-step wm programming */ 500 /* gen9+ only needs 1-step wm programming */
502 struct skl_pipe_wm optimal; 501 struct skl_pipe_wm optimal;
503 struct skl_ddb_entry ddb; 502 struct skl_ddb_entry ddb;
504
505 /* cached plane data rate */
506 unsigned plane_data_rate[I915_MAX_PLANES];
507 unsigned plane_y_data_rate[I915_MAX_PLANES];
508
509 /* minimum block allocation */
510 uint16_t minimum_blocks[I915_MAX_PLANES];
511 uint16_t minimum_y_blocks[I915_MAX_PLANES];
512 } skl; 503 } skl;
513 }; 504 };
514 505
@@ -731,7 +722,6 @@ struct intel_crtc {
731 /* watermarks currently being used */ 722 /* watermarks currently being used */
732 union { 723 union {
733 struct intel_pipe_wm ilk; 724 struct intel_pipe_wm ilk;
734 struct skl_pipe_wm skl;
735 } active; 725 } active;
736 726
737 /* allow CxSR on this pipe */ 727 /* allow CxSR on this pipe */
@@ -883,6 +873,14 @@ enum link_m_n_set {
883 M2_N2 873 M2_N2
884}; 874};
885 875
876struct intel_dp_desc {
877 u8 oui[3];
878 u8 device_id[6];
879 u8 hw_rev;
880 u8 sw_major_rev;
881 u8 sw_minor_rev;
882} __packed;
883
886struct intel_dp { 884struct intel_dp {
887 i915_reg_t output_reg; 885 i915_reg_t output_reg;
888 i915_reg_t aux_ch_ctl_reg; 886 i915_reg_t aux_ch_ctl_reg;
@@ -905,6 +903,8 @@ struct intel_dp {
905 /* sink rates as reported by DP_SUPPORTED_LINK_RATES */ 903 /* sink rates as reported by DP_SUPPORTED_LINK_RATES */
906 uint8_t num_sink_rates; 904 uint8_t num_sink_rates;
907 int sink_rates[DP_MAX_SUPPORTED_RATES]; 905 int sink_rates[DP_MAX_SUPPORTED_RATES];
906 /* sink or branch descriptor */
907 struct intel_dp_desc desc;
908 struct drm_dp_aux aux; 908 struct drm_dp_aux aux;
909 uint8_t train_set[4]; 909 uint8_t train_set[4];
910 int panel_power_up_delay; 910 int panel_power_up_delay;
@@ -964,7 +964,7 @@ struct intel_dp {
964struct intel_lspcon { 964struct intel_lspcon {
965 bool active; 965 bool active;
966 enum drm_lspcon_mode mode; 966 enum drm_lspcon_mode mode;
967 struct drm_dp_aux *aux; 967 bool desc_valid;
968}; 968};
969 969
970struct intel_digital_port { 970struct intel_digital_port {
@@ -1028,17 +1028,15 @@ vlv_pipe_to_channel(enum pipe pipe)
1028 } 1028 }
1029} 1029}
1030 1030
1031static inline struct drm_crtc * 1031static inline struct intel_crtc *
1032intel_get_crtc_for_pipe(struct drm_device *dev, int pipe) 1032intel_get_crtc_for_pipe(struct drm_i915_private *dev_priv, enum pipe pipe)
1033{ 1033{
1034 struct drm_i915_private *dev_priv = to_i915(dev);
1035 return dev_priv->pipe_to_crtc_mapping[pipe]; 1034 return dev_priv->pipe_to_crtc_mapping[pipe];
1036} 1035}
1037 1036
1038static inline struct drm_crtc * 1037static inline struct intel_crtc *
1039intel_get_crtc_for_plane(struct drm_device *dev, int plane) 1038intel_get_crtc_for_plane(struct drm_i915_private *dev_priv, enum plane plane)
1040{ 1039{
1041 struct drm_i915_private *dev_priv = to_i915(dev);
1042 return dev_priv->plane_to_crtc_mapping[plane]; 1040 return dev_priv->plane_to_crtc_mapping[plane];
1043} 1041}
1044 1042
@@ -1098,15 +1096,6 @@ hdmi_to_dig_port(struct intel_hdmi *intel_hdmi)
1098 return container_of(intel_hdmi, struct intel_digital_port, hdmi); 1096 return container_of(intel_hdmi, struct intel_digital_port, hdmi);
1099} 1097}
1100 1098
1101/*
1102 * Returns the number of planes for this pipe, ie the number of sprites + 1
1103 * (primary plane). This doesn't count the cursor plane then.
1104 */
1105static inline unsigned int intel_num_planes(struct intel_crtc *crtc)
1106{
1107 return INTEL_INFO(crtc->base.dev)->num_sprites[crtc->pipe] + 1;
1108}
1109
1110/* intel_fifo_underrun.c */ 1099/* intel_fifo_underrun.c */
1111bool intel_set_cpu_fifo_underrun_reporting(struct drm_i915_private *dev_priv, 1100bool intel_set_cpu_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
1112 enum pipe pipe, bool enable); 1101 enum pipe pipe, bool enable);
@@ -1123,6 +1112,9 @@ void intel_check_pch_fifo_underruns(struct drm_i915_private *dev_priv);
1123/* i915_irq.c */ 1112/* i915_irq.c */
1124void gen5_enable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask); 1113void gen5_enable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask);
1125void gen5_disable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask); 1114void gen5_disable_gt_irq(struct drm_i915_private *dev_priv, uint32_t mask);
1115void gen6_reset_pm_iir(struct drm_i915_private *dev_priv, u32 mask);
1116void gen6_mask_pm_irq(struct drm_i915_private *dev_priv, u32 mask);
1117void gen6_unmask_pm_irq(struct drm_i915_private *dev_priv, u32 mask);
1126void gen6_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask); 1118void gen6_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask);
1127void gen6_disable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask); 1119void gen6_disable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask);
1128void gen6_reset_rps_interrupts(struct drm_i915_private *dev_priv); 1120void gen6_reset_rps_interrupts(struct drm_i915_private *dev_priv);
@@ -1145,6 +1137,9 @@ void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv,
1145 unsigned int pipe_mask); 1137 unsigned int pipe_mask);
1146void gen8_irq_power_well_pre_disable(struct drm_i915_private *dev_priv, 1138void gen8_irq_power_well_pre_disable(struct drm_i915_private *dev_priv,
1147 unsigned int pipe_mask); 1139 unsigned int pipe_mask);
1140void gen9_reset_guc_interrupts(struct drm_i915_private *dev_priv);
1141void gen9_enable_guc_interrupts(struct drm_i915_private *dev_priv);
1142void gen9_disable_guc_interrupts(struct drm_i915_private *dev_priv);
1148 1143
1149/* intel_crt.c */ 1144/* intel_crt.c */
1150void intel_crt_init(struct drm_device *dev); 1145void intel_crt_init(struct drm_device *dev);
@@ -1247,18 +1242,17 @@ intel_crtc_has_dp_encoder(const struct intel_crtc_state *crtc_state)
1247 (1 << INTEL_OUTPUT_EDP)); 1242 (1 << INTEL_OUTPUT_EDP));
1248} 1243}
1249static inline void 1244static inline void
1250intel_wait_for_vblank(struct drm_device *dev, int pipe) 1245intel_wait_for_vblank(struct drm_i915_private *dev_priv, enum pipe pipe)
1251{ 1246{
1252 drm_wait_one_vblank(dev, pipe); 1247 drm_wait_one_vblank(&dev_priv->drm, pipe);
1253} 1248}
1254static inline void 1249static inline void
1255intel_wait_for_vblank_if_active(struct drm_device *dev, int pipe) 1250intel_wait_for_vblank_if_active(struct drm_i915_private *dev_priv, int pipe)
1256{ 1251{
1257 const struct intel_crtc *crtc = 1252 const struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
1258 to_intel_crtc(intel_get_crtc_for_pipe(dev, pipe));
1259 1253
1260 if (crtc->active) 1254 if (crtc->active)
1261 intel_wait_for_vblank(dev, pipe); 1255 intel_wait_for_vblank(dev_priv, pipe);
1262} 1256}
1263 1257
1264u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc); 1258u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc);
@@ -1305,9 +1299,9 @@ unsigned int intel_tile_height(const struct drm_i915_private *dev_priv,
1305void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv, 1299void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv,
1306 enum pipe pipe); 1300 enum pipe pipe);
1307 1301
1308int vlv_force_pll_on(struct drm_device *dev, enum pipe pipe, 1302int vlv_force_pll_on(struct drm_i915_private *dev_priv, enum pipe pipe,
1309 const struct dpll *dpll); 1303 const struct dpll *dpll);
1310void vlv_force_pll_off(struct drm_device *dev, enum pipe pipe); 1304void vlv_force_pll_off(struct drm_i915_private *dev_priv, enum pipe pipe);
1311int lpt_get_iclkip(struct drm_i915_private *dev_priv); 1305int lpt_get_iclkip(struct drm_i915_private *dev_priv);
1312 1306
1313/* modesetting asserts */ 1307/* modesetting asserts */
@@ -1335,12 +1329,6 @@ void hsw_enable_pc8(struct drm_i915_private *dev_priv);
1335void hsw_disable_pc8(struct drm_i915_private *dev_priv); 1329void hsw_disable_pc8(struct drm_i915_private *dev_priv);
1336void bxt_init_cdclk(struct drm_i915_private *dev_priv); 1330void bxt_init_cdclk(struct drm_i915_private *dev_priv);
1337void bxt_uninit_cdclk(struct drm_i915_private *dev_priv); 1331void bxt_uninit_cdclk(struct drm_i915_private *dev_priv);
1338void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy);
1339void bxt_ddi_phy_uninit(struct drm_i915_private *dev_priv, enum dpio_phy phy);
1340bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
1341 enum dpio_phy phy);
1342bool bxt_ddi_phy_verify_state(struct drm_i915_private *dev_priv,
1343 enum dpio_phy phy);
1344void gen9_sanitize_dc_state(struct drm_i915_private *dev_priv); 1332void gen9_sanitize_dc_state(struct drm_i915_private *dev_priv);
1345void bxt_enable_dc9(struct drm_i915_private *dev_priv); 1333void bxt_enable_dc9(struct drm_i915_private *dev_priv);
1346void bxt_disable_dc9(struct drm_i915_private *dev_priv); 1334void bxt_disable_dc9(struct drm_i915_private *dev_priv);
@@ -1358,7 +1346,7 @@ bool bxt_find_best_dpll(struct intel_crtc_state *crtc_state, int target_clock,
1358 struct dpll *best_clock); 1346 struct dpll *best_clock);
1359int chv_calc_dpll_params(int refclk, struct dpll *pll_clock); 1347int chv_calc_dpll_params(int refclk, struct dpll *pll_clock);
1360 1348
1361bool intel_crtc_active(struct drm_crtc *crtc); 1349bool intel_crtc_active(struct intel_crtc *crtc);
1362void hsw_enable_ips(struct intel_crtc *crtc); 1350void hsw_enable_ips(struct intel_crtc *crtc);
1363void hsw_disable_ips(struct intel_crtc *crtc); 1351void hsw_disable_ips(struct intel_crtc *crtc);
1364enum intel_display_power_domain 1352enum intel_display_power_domain
@@ -1451,6 +1439,11 @@ static inline unsigned int intel_dp_unused_lane_mask(int lane_count)
1451 return ~((1 << lane_count) - 1) & 0xf; 1439 return ~((1 << lane_count) - 1) & 0xf;
1452} 1440}
1453 1441
1442bool intel_dp_read_dpcd(struct intel_dp *intel_dp);
1443bool __intel_dp_read_desc(struct intel_dp *intel_dp,
1444 struct intel_dp_desc *desc);
1445bool intel_dp_read_desc(struct intel_dp *intel_dp);
1446
1454/* intel_dp_aux_backlight.c */ 1447/* intel_dp_aux_backlight.c */
1455int intel_dp_aux_init_backlight_funcs(struct intel_connector *intel_connector); 1448int intel_dp_aux_init_backlight_funcs(struct intel_connector *intel_connector);
1456 1449
@@ -1655,23 +1648,6 @@ assert_rpm_wakelock_held(struct drm_i915_private *dev_priv)
1655 DRM_DEBUG_DRIVER("RPM wakelock ref not held during HW access"); 1648 DRM_DEBUG_DRIVER("RPM wakelock ref not held during HW access");
1656} 1649}
1657 1650
1658static inline int
1659assert_rpm_atomic_begin(struct drm_i915_private *dev_priv)
1660{
1661 int seq = atomic_read(&dev_priv->pm.atomic_seq);
1662
1663 assert_rpm_wakelock_held(dev_priv);
1664
1665 return seq;
1666}
1667
1668static inline void
1669assert_rpm_atomic_end(struct drm_i915_private *dev_priv, int begin_seq)
1670{
1671 WARN_ONCE(atomic_read(&dev_priv->pm.atomic_seq) != begin_seq,
1672 "HW access outside of RPM atomic section\n");
1673}
1674
1675/** 1651/**
1676 * disable_rpm_wakeref_asserts - disable the RPM assert checks 1652 * disable_rpm_wakeref_asserts - disable the RPM assert checks
1677 * @dev_priv: i915 device instance 1653 * @dev_priv: i915 device instance
@@ -1727,11 +1703,11 @@ bool chv_phy_powergate_ch(struct drm_i915_private *dev_priv, enum dpio_phy phy,
1727 1703
1728 1704
1729/* intel_pm.c */ 1705/* intel_pm.c */
1730void intel_init_clock_gating(struct drm_device *dev); 1706void intel_init_clock_gating(struct drm_i915_private *dev_priv);
1731void intel_suspend_hw(struct drm_device *dev); 1707void intel_suspend_hw(struct drm_i915_private *dev_priv);
1732int ilk_wm_max_level(const struct drm_i915_private *dev_priv); 1708int ilk_wm_max_level(const struct drm_i915_private *dev_priv);
1733void intel_update_watermarks(struct drm_crtc *crtc); 1709void intel_update_watermarks(struct intel_crtc *crtc);
1734void intel_init_pm(struct drm_device *dev); 1710void intel_init_pm(struct drm_i915_private *dev_priv);
1735void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv); 1711void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv);
1736void intel_pm_setup(struct drm_device *dev); 1712void intel_pm_setup(struct drm_device *dev);
1737void intel_gpu_ips_init(struct drm_i915_private *dev_priv); 1713void intel_gpu_ips_init(struct drm_i915_private *dev_priv);
@@ -1790,7 +1766,8 @@ bool intel_sdvo_init(struct drm_device *dev,
1790/* intel_sprite.c */ 1766/* intel_sprite.c */
1791int intel_usecs_to_scanlines(const struct drm_display_mode *adjusted_mode, 1767int intel_usecs_to_scanlines(const struct drm_display_mode *adjusted_mode,
1792 int usecs); 1768 int usecs);
1793int intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane); 1769struct intel_plane *intel_sprite_plane_create(struct drm_i915_private *dev_priv,
1770 enum pipe pipe, int plane);
1794int intel_sprite_set_colorkey(struct drm_device *dev, void *data, 1771int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
1795 struct drm_file *file_priv); 1772 struct drm_file *file_priv);
1796void intel_pipe_update_start(struct intel_crtc *crtc); 1773void intel_pipe_update_start(struct intel_crtc *crtc);
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index cd574900cd8d..708645443046 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -393,12 +393,12 @@ intel_dvo_get_current_mode(struct drm_connector *connector)
393 * its timings to get how the BIOS set up the panel. 393 * its timings to get how the BIOS set up the panel.
394 */ 394 */
395 if (dvo_val & DVO_ENABLE) { 395 if (dvo_val & DVO_ENABLE) {
396 struct drm_crtc *crtc; 396 struct intel_crtc *crtc;
397 int pipe = (dvo_val & DVO_PIPE_B_SELECT) ? 1 : 0; 397 int pipe = (dvo_val & DVO_PIPE_B_SELECT) ? 1 : 0;
398 398
399 crtc = intel_get_crtc_for_pipe(dev, pipe); 399 crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
400 if (crtc) { 400 if (crtc) {
401 mode = intel_crtc_mode_get(dev, crtc); 401 mode = intel_crtc_mode_get(dev, &crtc->base);
402 if (mode) { 402 if (mode) {
403 mode->type |= DRM_MODE_TYPE_PREFERRED; 403 mode->type |= DRM_MODE_TYPE_PREFERRED;
404 if (dvo_val & DVO_HSYNC_ACTIVE_HIGH) 404 if (dvo_val & DVO_HSYNC_ACTIVE_HIGH)
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
index 8cceb345aa0f..841f8d1e1410 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -174,7 +174,7 @@ cleanup:
174 return ret; 174 return ret;
175} 175}
176 176
177void intel_engine_init_seqno(struct intel_engine_cs *engine, u32 seqno) 177void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno)
178{ 178{
179 struct drm_i915_private *dev_priv = engine->i915; 179 struct drm_i915_private *dev_priv = engine->i915;
180 180
@@ -204,13 +204,13 @@ void intel_engine_init_seqno(struct intel_engine_cs *engine, u32 seqno)
204 I915_NUM_ENGINES * gen8_semaphore_seqno_size); 204 I915_NUM_ENGINES * gen8_semaphore_seqno_size);
205 kunmap(page); 205 kunmap(page);
206 } 206 }
207 memset(engine->semaphore.sync_seqno, 0,
208 sizeof(engine->semaphore.sync_seqno));
209 207
210 intel_write_status_page(engine, I915_GEM_HWS_INDEX, seqno); 208 intel_write_status_page(engine, I915_GEM_HWS_INDEX, seqno);
211 if (engine->irq_seqno_barrier) 209 if (engine->irq_seqno_barrier)
212 engine->irq_seqno_barrier(engine); 210 engine->irq_seqno_barrier(engine);
213 engine->last_submitted_seqno = seqno; 211
212 GEM_BUG_ON(i915_gem_active_isset(&engine->timeline->last_request));
213 engine->timeline->last_submitted_seqno = seqno;
214 214
215 engine->hangcheck.seqno = seqno; 215 engine->hangcheck.seqno = seqno;
216 216
@@ -220,15 +220,9 @@ void intel_engine_init_seqno(struct intel_engine_cs *engine, u32 seqno)
220 intel_engine_wakeup(engine); 220 intel_engine_wakeup(engine);
221} 221}
222 222
223void intel_engine_init_hangcheck(struct intel_engine_cs *engine) 223static void intel_engine_init_timeline(struct intel_engine_cs *engine)
224{
225 memset(&engine->hangcheck, 0, sizeof(engine->hangcheck));
226}
227
228static void intel_engine_init_requests(struct intel_engine_cs *engine)
229{ 224{
230 init_request_active(&engine->last_request, NULL); 225 engine->timeline = &engine->i915->gt.global_timeline.engine[engine->id];
231 INIT_LIST_HEAD(&engine->request_list);
232} 226}
233 227
234/** 228/**
@@ -245,9 +239,7 @@ void intel_engine_setup_common(struct intel_engine_cs *engine)
245 INIT_LIST_HEAD(&engine->execlist_queue); 239 INIT_LIST_HEAD(&engine->execlist_queue);
246 spin_lock_init(&engine->execlist_lock); 240 spin_lock_init(&engine->execlist_lock);
247 241
248 engine->fence_context = dma_fence_context_alloc(1); 242 intel_engine_init_timeline(engine);
249
250 intel_engine_init_requests(engine);
251 intel_engine_init_hangcheck(engine); 243 intel_engine_init_hangcheck(engine);
252 i915_gem_batch_pool_init(engine, &engine->batch_pool); 244 i915_gem_batch_pool_init(engine, &engine->batch_pool);
253 245
@@ -264,7 +256,7 @@ int intel_engine_create_scratch(struct intel_engine_cs *engine, int size)
264 256
265 obj = i915_gem_object_create_stolen(&engine->i915->drm, size); 257 obj = i915_gem_object_create_stolen(&engine->i915->drm, size);
266 if (!obj) 258 if (!obj)
267 obj = i915_gem_object_create(&engine->i915->drm, size); 259 obj = i915_gem_object_create_internal(engine->i915, size);
268 if (IS_ERR(obj)) { 260 if (IS_ERR(obj)) {
269 DRM_ERROR("Failed to allocate scratch page\n"); 261 DRM_ERROR("Failed to allocate scratch page\n");
270 return PTR_ERR(obj); 262 return PTR_ERR(obj);
@@ -314,6 +306,10 @@ int intel_engine_init_common(struct intel_engine_cs *engine)
314 if (ret) 306 if (ret)
315 return ret; 307 return ret;
316 308
309 ret = i915_gem_render_state_init(engine);
310 if (ret)
311 return ret;
312
317 return 0; 313 return 0;
318} 314}
319 315
@@ -328,6 +324,7 @@ void intel_engine_cleanup_common(struct intel_engine_cs *engine)
328{ 324{
329 intel_engine_cleanup_scratch(engine); 325 intel_engine_cleanup_scratch(engine);
330 326
327 i915_gem_render_state_fini(engine);
331 intel_engine_fini_breadcrumbs(engine); 328 intel_engine_fini_breadcrumbs(engine);
332 intel_engine_cleanup_cmd_parser(engine); 329 intel_engine_cleanup_cmd_parser(engine);
333 i915_gem_batch_pool_fini(&engine->batch_pool); 330 i915_gem_batch_pool_fini(&engine->batch_pool);
diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
index cbe2ebda4c40..e230d480c5e6 100644
--- a/drivers/gpu/drm/i915/intel_fbc.c
+++ b/drivers/gpu/drm/i915/intel_fbc.c
@@ -1306,7 +1306,7 @@ void intel_fbc_init_pipe_state(struct drm_i915_private *dev_priv)
1306 return; 1306 return;
1307 1307
1308 for_each_intel_crtc(&dev_priv->drm, crtc) 1308 for_each_intel_crtc(&dev_priv->drm, crtc)
1309 if (intel_crtc_active(&crtc->base) && 1309 if (intel_crtc_active(crtc) &&
1310 to_intel_plane_state(crtc->base.primary->state)->base.visible) 1310 to_intel_plane_state(crtc->base.primary->state)->base.visible)
1311 dev_priv->fbc.visible_pipes_mask |= (1 << crtc->pipe); 1311 dev_priv->fbc.visible_pipes_mask |= (1 << crtc->pipe);
1312} 1312}
diff --git a/drivers/gpu/drm/i915/intel_fifo_underrun.c b/drivers/gpu/drm/i915/intel_fifo_underrun.c
index 3018f4f589c8..e660d8b4bbc3 100644
--- a/drivers/gpu/drm/i915/intel_fifo_underrun.c
+++ b/drivers/gpu/drm/i915/intel_fifo_underrun.c
@@ -57,7 +57,7 @@ static bool ivb_can_enable_err_int(struct drm_device *dev)
57 assert_spin_locked(&dev_priv->irq_lock); 57 assert_spin_locked(&dev_priv->irq_lock);
58 58
59 for_each_pipe(dev_priv, pipe) { 59 for_each_pipe(dev_priv, pipe) {
60 crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); 60 crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
61 61
62 if (crtc->cpu_fifo_underrun_disabled) 62 if (crtc->cpu_fifo_underrun_disabled)
63 return false; 63 return false;
@@ -75,7 +75,7 @@ static bool cpt_can_enable_serr_int(struct drm_device *dev)
75 assert_spin_locked(&dev_priv->irq_lock); 75 assert_spin_locked(&dev_priv->irq_lock);
76 76
77 for_each_pipe(dev_priv, pipe) { 77 for_each_pipe(dev_priv, pipe) {
78 crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); 78 crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
79 79
80 if (crtc->pch_fifo_underrun_disabled) 80 if (crtc->pch_fifo_underrun_disabled)
81 return false; 81 return false;
@@ -245,14 +245,13 @@ static bool __intel_set_cpu_fifo_underrun_reporting(struct drm_device *dev,
245 enum pipe pipe, bool enable) 245 enum pipe pipe, bool enable)
246{ 246{
247 struct drm_i915_private *dev_priv = to_i915(dev); 247 struct drm_i915_private *dev_priv = to_i915(dev);
248 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; 248 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
249 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
250 bool old; 249 bool old;
251 250
252 assert_spin_locked(&dev_priv->irq_lock); 251 assert_spin_locked(&dev_priv->irq_lock);
253 252
254 old = !intel_crtc->cpu_fifo_underrun_disabled; 253 old = !crtc->cpu_fifo_underrun_disabled;
255 intel_crtc->cpu_fifo_underrun_disabled = !enable; 254 crtc->cpu_fifo_underrun_disabled = !enable;
256 255
257 if (HAS_GMCH_DISPLAY(dev_priv)) 256 if (HAS_GMCH_DISPLAY(dev_priv))
258 i9xx_set_fifo_underrun_reporting(dev, pipe, enable, old); 257 i9xx_set_fifo_underrun_reporting(dev, pipe, enable, old);
@@ -314,8 +313,8 @@ bool intel_set_pch_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
314 enum transcoder pch_transcoder, 313 enum transcoder pch_transcoder,
315 bool enable) 314 bool enable)
316{ 315{
317 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pch_transcoder]; 316 struct intel_crtc *crtc =
318 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 317 intel_get_crtc_for_pipe(dev_priv, (enum pipe) pch_transcoder);
319 unsigned long flags; 318 unsigned long flags;
320 bool old; 319 bool old;
321 320
@@ -330,8 +329,8 @@ bool intel_set_pch_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
330 329
331 spin_lock_irqsave(&dev_priv->irq_lock, flags); 330 spin_lock_irqsave(&dev_priv->irq_lock, flags);
332 331
333 old = !intel_crtc->pch_fifo_underrun_disabled; 332 old = !crtc->pch_fifo_underrun_disabled;
334 intel_crtc->pch_fifo_underrun_disabled = !enable; 333 crtc->pch_fifo_underrun_disabled = !enable;
335 334
336 if (HAS_PCH_IBX(dev_priv)) 335 if (HAS_PCH_IBX(dev_priv))
337 ibx_set_fifo_underrun_reporting(&dev_priv->drm, 336 ibx_set_fifo_underrun_reporting(&dev_priv->drm,
@@ -358,7 +357,7 @@ bool intel_set_pch_fifo_underrun_reporting(struct drm_i915_private *dev_priv,
358void intel_cpu_fifo_underrun_irq_handler(struct drm_i915_private *dev_priv, 357void intel_cpu_fifo_underrun_irq_handler(struct drm_i915_private *dev_priv,
359 enum pipe pipe) 358 enum pipe pipe)
360{ 359{
361 struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; 360 struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
362 361
363 /* We may be called too early in init, thanks BIOS! */ 362 /* We may be called too early in init, thanks BIOS! */
364 if (crtc == NULL) 363 if (crtc == NULL)
@@ -366,7 +365,7 @@ void intel_cpu_fifo_underrun_irq_handler(struct drm_i915_private *dev_priv,
366 365
367 /* GMCH can't disable fifo underruns, filter them. */ 366 /* GMCH can't disable fifo underruns, filter them. */
368 if (HAS_GMCH_DISPLAY(dev_priv) && 367 if (HAS_GMCH_DISPLAY(dev_priv) &&
369 to_intel_crtc(crtc)->cpu_fifo_underrun_disabled) 368 crtc->cpu_fifo_underrun_disabled)
370 return; 369 return;
371 370
372 if (intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false)) 371 if (intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false))
diff --git a/drivers/gpu/drm/i915/intel_guc.h b/drivers/gpu/drm/i915/intel_guc.h
index 5cdf7aa75be5..0053258e03d3 100644
--- a/drivers/gpu/drm/i915/intel_guc.h
+++ b/drivers/gpu/drm/i915/intel_guc.h
@@ -64,7 +64,7 @@ struct drm_i915_gem_request;
64 */ 64 */
65struct i915_guc_client { 65struct i915_guc_client {
66 struct i915_vma *vma; 66 struct i915_vma *vma;
67 void *client_base; /* first page (only) of above */ 67 void *vaddr;
68 struct i915_gem_context *owner; 68 struct i915_gem_context *owner;
69 struct intel_guc *guc; 69 struct intel_guc *guc;
70 70
@@ -123,10 +123,28 @@ struct intel_guc_fw {
123 uint32_t ucode_offset; 123 uint32_t ucode_offset;
124}; 124};
125 125
126struct intel_guc_log {
127 uint32_t flags;
128 struct i915_vma *vma;
129 void *buf_addr;
130 struct workqueue_struct *flush_wq;
131 struct work_struct flush_work;
132 struct rchan *relay_chan;
133
134 /* logging related stats */
135 u32 capture_miss_count;
136 u32 flush_interrupt_count;
137 u32 prev_overflow_count[GUC_MAX_LOG_BUFFER];
138 u32 total_overflow_count[GUC_MAX_LOG_BUFFER];
139 u32 flush_count[GUC_MAX_LOG_BUFFER];
140};
141
126struct intel_guc { 142struct intel_guc {
127 struct intel_guc_fw guc_fw; 143 struct intel_guc_fw guc_fw;
128 uint32_t log_flags; 144 struct intel_guc_log log;
129 struct i915_vma *log_vma; 145
146 /* GuC2Host interrupt related state */
147 bool interrupts_enabled;
130 148
131 struct i915_vma *ads_vma; 149 struct i915_vma *ads_vma;
132 struct i915_vma *ctx_pool_vma; 150 struct i915_vma *ctx_pool_vma;
@@ -146,6 +164,9 @@ struct intel_guc {
146 164
147 uint64_t submissions[I915_NUM_ENGINES]; 165 uint64_t submissions[I915_NUM_ENGINES];
148 uint32_t last_seqno[I915_NUM_ENGINES]; 166 uint32_t last_seqno[I915_NUM_ENGINES];
167
168 /* To serialize the Host2GuC actions */
169 struct mutex action_lock;
149}; 170};
150 171
151/* intel_guc_loader.c */ 172/* intel_guc_loader.c */
@@ -163,5 +184,10 @@ int i915_guc_wq_reserve(struct drm_i915_gem_request *rq);
163void i915_guc_wq_unreserve(struct drm_i915_gem_request *request); 184void i915_guc_wq_unreserve(struct drm_i915_gem_request *request);
164void i915_guc_submission_disable(struct drm_i915_private *dev_priv); 185void i915_guc_submission_disable(struct drm_i915_private *dev_priv);
165void i915_guc_submission_fini(struct drm_i915_private *dev_priv); 186void i915_guc_submission_fini(struct drm_i915_private *dev_priv);
187void i915_guc_capture_logs(struct drm_i915_private *dev_priv);
188void i915_guc_flush_logs(struct drm_i915_private *dev_priv);
189void i915_guc_register(struct drm_i915_private *dev_priv);
190void i915_guc_unregister(struct drm_i915_private *dev_priv);
191int i915_guc_log_control(struct drm_i915_private *dev_priv, u64 control_val);
166 192
167#endif 193#endif
diff --git a/drivers/gpu/drm/i915/intel_guc_fwif.h b/drivers/gpu/drm/i915/intel_guc_fwif.h
index e40db2d2ae99..324ea902558b 100644
--- a/drivers/gpu/drm/i915/intel_guc_fwif.h
+++ b/drivers/gpu/drm/i915/intel_guc_fwif.h
@@ -104,9 +104,9 @@
104#define GUC_LOG_ALLOC_IN_MEGABYTE (1 << 3) 104#define GUC_LOG_ALLOC_IN_MEGABYTE (1 << 3)
105#define GUC_LOG_CRASH_PAGES 1 105#define GUC_LOG_CRASH_PAGES 1
106#define GUC_LOG_CRASH_SHIFT 4 106#define GUC_LOG_CRASH_SHIFT 4
107#define GUC_LOG_DPC_PAGES 3 107#define GUC_LOG_DPC_PAGES 7
108#define GUC_LOG_DPC_SHIFT 6 108#define GUC_LOG_DPC_SHIFT 6
109#define GUC_LOG_ISR_PAGES 3 109#define GUC_LOG_ISR_PAGES 7
110#define GUC_LOG_ISR_SHIFT 9 110#define GUC_LOG_ISR_SHIFT 9
111#define GUC_LOG_BUF_ADDR_SHIFT 12 111#define GUC_LOG_BUF_ADDR_SHIFT 12
112 112
@@ -419,15 +419,87 @@ struct guc_ads {
419 u32 reserved2[4]; 419 u32 reserved2[4];
420} __packed; 420} __packed;
421 421
422/* GuC logging structures */
423
424enum guc_log_buffer_type {
425 GUC_ISR_LOG_BUFFER,
426 GUC_DPC_LOG_BUFFER,
427 GUC_CRASH_DUMP_LOG_BUFFER,
428 GUC_MAX_LOG_BUFFER
429};
430
431/**
432 * DOC: GuC Log buffer Layout
433 *
434 * Page0 +-------------------------------+
435 * | ISR state header (32 bytes) |
436 * | DPC state header |
437 * | Crash dump state header |
438 * Page1 +-------------------------------+
439 * | ISR logs |
440 * Page9 +-------------------------------+
441 * | DPC logs |
442 * Page17 +-------------------------------+
443 * | Crash Dump logs |
444 * +-------------------------------+
445 *
446 * Below state structure is used for coordination of retrieval of GuC firmware
447 * logs. Separate state is maintained for each log buffer type.
448 * read_ptr points to the location where i915 read last in log buffer and
449 * is read only for GuC firmware. write_ptr is incremented by GuC with number
450 * of bytes written for each log entry and is read only for i915.
451 * When any type of log buffer becomes half full, GuC sends a flush interrupt.
452 * GuC firmware expects that while it is writing to 2nd half of the buffer,
453 * first half would get consumed by Host and then get a flush completed
454 * acknowledgment from Host, so that it does not end up doing any overwrite
455 * causing loss of logs. So when buffer gets half filled & i915 has requested
456 * for interrupt, GuC will set flush_to_file field, set the sampled_write_ptr
457 * to the value of write_ptr and raise the interrupt.
458 * On receiving the interrupt i915 should read the buffer, clear flush_to_file
459 * field and also update read_ptr with the value of sample_write_ptr, before
460 * sending an acknowledgment to GuC. marker & version fields are for internal
461 * usage of GuC and opaque to i915. buffer_full_cnt field is incremented every
462 * time GuC detects the log buffer overflow.
463 */
464struct guc_log_buffer_state {
465 u32 marker[2];
466 u32 read_ptr;
467 u32 write_ptr;
468 u32 size;
469 u32 sampled_write_ptr;
470 union {
471 struct {
472 u32 flush_to_file:1;
473 u32 buffer_full_cnt:4;
474 u32 reserved:27;
475 };
476 u32 flags;
477 };
478 u32 version;
479} __packed;
480
481union guc_log_control {
482 struct {
483 u32 logging_enabled:1;
484 u32 reserved1:3;
485 u32 verbosity:4;
486 u32 reserved2:24;
487 };
488 u32 value;
489} __packed;
490
422/* This Action will be programmed in C180 - SOFT_SCRATCH_O_REG */ 491/* This Action will be programmed in C180 - SOFT_SCRATCH_O_REG */
423enum host2guc_action { 492enum host2guc_action {
424 HOST2GUC_ACTION_DEFAULT = 0x0, 493 HOST2GUC_ACTION_DEFAULT = 0x0,
425 HOST2GUC_ACTION_SAMPLE_FORCEWAKE = 0x6, 494 HOST2GUC_ACTION_SAMPLE_FORCEWAKE = 0x6,
426 HOST2GUC_ACTION_ALLOCATE_DOORBELL = 0x10, 495 HOST2GUC_ACTION_ALLOCATE_DOORBELL = 0x10,
427 HOST2GUC_ACTION_DEALLOCATE_DOORBELL = 0x20, 496 HOST2GUC_ACTION_DEALLOCATE_DOORBELL = 0x20,
497 HOST2GUC_ACTION_LOG_BUFFER_FILE_FLUSH_COMPLETE = 0x30,
498 HOST2GUC_ACTION_FORCE_LOG_BUFFER_FLUSH = 0x302,
428 HOST2GUC_ACTION_ENTER_S_STATE = 0x501, 499 HOST2GUC_ACTION_ENTER_S_STATE = 0x501,
429 HOST2GUC_ACTION_EXIT_S_STATE = 0x502, 500 HOST2GUC_ACTION_EXIT_S_STATE = 0x502,
430 HOST2GUC_ACTION_SLPC_REQUEST = 0x3003, 501 HOST2GUC_ACTION_SLPC_REQUEST = 0x3003,
502 HOST2GUC_ACTION_UK_LOG_ENABLE_LOGGING = 0x0E000,
431 HOST2GUC_ACTION_LIMIT 503 HOST2GUC_ACTION_LIMIT
432}; 504};
433 505
@@ -449,4 +521,10 @@ enum guc2host_status {
449 GUC2HOST_STATUS_GENERIC_FAIL = GUC2HOST_STATUS(0x0000F000) 521 GUC2HOST_STATUS_GENERIC_FAIL = GUC2HOST_STATUS(0x0000F000)
450}; 522};
451 523
524/* This action will be programmed in C1BC - SOFT_SCRATCH_15_REG */
525enum guc2host_message {
526 GUC2HOST_MSG_CRASH_DUMP_POSTED = (1 << 1),
527 GUC2HOST_MSG_FLUSH_LOG_BUFFER = (1 << 3)
528};
529
452#endif 530#endif
diff --git a/drivers/gpu/drm/i915/intel_guc_loader.c b/drivers/gpu/drm/i915/intel_guc_loader.c
index 3c8eaae13732..1aa85236b788 100644
--- a/drivers/gpu/drm/i915/intel_guc_loader.c
+++ b/drivers/gpu/drm/i915/intel_guc_loader.c
@@ -211,11 +211,13 @@ static void guc_params_init(struct drm_i915_private *dev_priv)
211 params[GUC_CTL_FEATURE] |= GUC_CTL_DISABLE_SCHEDULER | 211 params[GUC_CTL_FEATURE] |= GUC_CTL_DISABLE_SCHEDULER |
212 GUC_CTL_VCS2_ENABLED; 212 GUC_CTL_VCS2_ENABLED;
213 213
214 params[GUC_CTL_LOG_PARAMS] = guc->log.flags;
215
214 if (i915.guc_log_level >= 0) { 216 if (i915.guc_log_level >= 0) {
215 params[GUC_CTL_LOG_PARAMS] = guc->log_flags;
216 params[GUC_CTL_DEBUG] = 217 params[GUC_CTL_DEBUG] =
217 i915.guc_log_level << GUC_LOG_VERBOSITY_SHIFT; 218 i915.guc_log_level << GUC_LOG_VERBOSITY_SHIFT;
218 } 219 } else
220 params[GUC_CTL_DEBUG] = GUC_LOG_DISABLED;
219 221
220 if (guc->ads_vma) { 222 if (guc->ads_vma) {
221 u32 ads = i915_ggtt_offset(guc->ads_vma) >> PAGE_SHIFT; 223 u32 ads = i915_ggtt_offset(guc->ads_vma) >> PAGE_SHIFT;
@@ -483,6 +485,7 @@ int intel_guc_setup(struct drm_device *dev)
483 } 485 }
484 486
485 guc_interrupts_release(dev_priv); 487 guc_interrupts_release(dev_priv);
488 gen9_reset_guc_interrupts(dev_priv);
486 489
487 guc_fw->guc_fw_load_status = GUC_FIRMWARE_PENDING; 490 guc_fw->guc_fw_load_status = GUC_FIRMWARE_PENDING;
488 491
@@ -527,6 +530,9 @@ int intel_guc_setup(struct drm_device *dev)
527 intel_guc_fw_status_repr(guc_fw->guc_fw_load_status)); 530 intel_guc_fw_status_repr(guc_fw->guc_fw_load_status));
528 531
529 if (i915.enable_guc_submission) { 532 if (i915.enable_guc_submission) {
533 if (i915.guc_log_level >= 0)
534 gen9_enable_guc_interrupts(dev_priv);
535
530 err = i915_guc_submission_enable(dev_priv); 536 err = i915_guc_submission_enable(dev_priv);
531 if (err) 537 if (err)
532 goto fail; 538 goto fail;
diff --git a/drivers/gpu/drm/i915/intel_hangcheck.c b/drivers/gpu/drm/i915/intel_hangcheck.c
new file mode 100644
index 000000000000..53df5b11bff4
--- /dev/null
+++ b/drivers/gpu/drm/i915/intel_hangcheck.c
@@ -0,0 +1,450 @@
1/*
2 * Copyright © 2016 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 *
23 */
24
25#include "i915_drv.h"
26
27static bool
28ipehr_is_semaphore_wait(struct intel_engine_cs *engine, u32 ipehr)
29{
30 if (INTEL_GEN(engine->i915) >= 8) {
31 return (ipehr >> 23) == 0x1c;
32 } else {
33 ipehr &= ~MI_SEMAPHORE_SYNC_MASK;
34 return ipehr == (MI_SEMAPHORE_MBOX | MI_SEMAPHORE_COMPARE |
35 MI_SEMAPHORE_REGISTER);
36 }
37}
38
39static struct intel_engine_cs *
40semaphore_wait_to_signaller_ring(struct intel_engine_cs *engine, u32 ipehr,
41 u64 offset)
42{
43 struct drm_i915_private *dev_priv = engine->i915;
44 struct intel_engine_cs *signaller;
45 enum intel_engine_id id;
46
47 if (INTEL_GEN(dev_priv) >= 8) {
48 for_each_engine(signaller, dev_priv, id) {
49 if (engine == signaller)
50 continue;
51
52 if (offset == signaller->semaphore.signal_ggtt[engine->hw_id])
53 return signaller;
54 }
55 } else {
56 u32 sync_bits = ipehr & MI_SEMAPHORE_SYNC_MASK;
57
58 for_each_engine(signaller, dev_priv, id) {
59 if(engine == signaller)
60 continue;
61
62 if (sync_bits == signaller->semaphore.mbox.wait[engine->hw_id])
63 return signaller;
64 }
65 }
66
67 DRM_DEBUG_DRIVER("No signaller ring found for %s, ipehr 0x%08x, offset 0x%016llx\n",
68 engine->name, ipehr, offset);
69
70 return ERR_PTR(-ENODEV);
71}
72
73static struct intel_engine_cs *
74semaphore_waits_for(struct intel_engine_cs *engine, u32 *seqno)
75{
76 struct drm_i915_private *dev_priv = engine->i915;
77 void __iomem *vaddr;
78 u32 cmd, ipehr, head;
79 u64 offset = 0;
80 int i, backwards;
81
82 /*
83 * This function does not support execlist mode - any attempt to
84 * proceed further into this function will result in a kernel panic
85 * when dereferencing ring->buffer, which is not set up in execlist
86 * mode.
87 *
88 * The correct way of doing it would be to derive the currently
89 * executing ring buffer from the current context, which is derived
90 * from the currently running request. Unfortunately, to get the
91 * current request we would have to grab the struct_mutex before doing
92 * anything else, which would be ill-advised since some other thread
93 * might have grabbed it already and managed to hang itself, causing
94 * the hang checker to deadlock.
95 *
96 * Therefore, this function does not support execlist mode in its
97 * current form. Just return NULL and move on.
98 */
99 if (engine->buffer == NULL)
100 return NULL;
101
102 ipehr = I915_READ(RING_IPEHR(engine->mmio_base));
103 if (!ipehr_is_semaphore_wait(engine, ipehr))
104 return NULL;
105
106 /*
107 * HEAD is likely pointing to the dword after the actual command,
108 * so scan backwards until we find the MBOX. But limit it to just 3
109 * or 4 dwords depending on the semaphore wait command size.
110 * Note that we don't care about ACTHD here since that might
111 * point at at batch, and semaphores are always emitted into the
112 * ringbuffer itself.
113 */
114 head = I915_READ_HEAD(engine) & HEAD_ADDR;
115 backwards = (INTEL_GEN(dev_priv) >= 8) ? 5 : 4;
116 vaddr = (void __iomem *)engine->buffer->vaddr;
117
118 for (i = backwards; i; --i) {
119 /*
120 * Be paranoid and presume the hw has gone off into the wild -
121 * our ring is smaller than what the hardware (and hence
122 * HEAD_ADDR) allows. Also handles wrap-around.
123 */
124 head &= engine->buffer->size - 1;
125
126 /* This here seems to blow up */
127 cmd = ioread32(vaddr + head);
128 if (cmd == ipehr)
129 break;
130
131 head -= 4;
132 }
133
134 if (!i)
135 return NULL;
136
137 *seqno = ioread32(vaddr + head + 4) + 1;
138 if (INTEL_GEN(dev_priv) >= 8) {
139 offset = ioread32(vaddr + head + 12);
140 offset <<= 32;
141 offset |= ioread32(vaddr + head + 8);
142 }
143 return semaphore_wait_to_signaller_ring(engine, ipehr, offset);
144}
145
146static int semaphore_passed(struct intel_engine_cs *engine)
147{
148 struct drm_i915_private *dev_priv = engine->i915;
149 struct intel_engine_cs *signaller;
150 u32 seqno;
151
152 engine->hangcheck.deadlock++;
153
154 signaller = semaphore_waits_for(engine, &seqno);
155 if (signaller == NULL)
156 return -1;
157
158 if (IS_ERR(signaller))
159 return 0;
160
161 /* Prevent pathological recursion due to driver bugs */
162 if (signaller->hangcheck.deadlock >= I915_NUM_ENGINES)
163 return -1;
164
165 if (i915_seqno_passed(intel_engine_get_seqno(signaller), seqno))
166 return 1;
167
168 /* cursory check for an unkickable deadlock */
169 if (I915_READ_CTL(signaller) & RING_WAIT_SEMAPHORE &&
170 semaphore_passed(signaller) < 0)
171 return -1;
172
173 return 0;
174}
175
176static void semaphore_clear_deadlocks(struct drm_i915_private *dev_priv)
177{
178 struct intel_engine_cs *engine;
179 enum intel_engine_id id;
180
181 for_each_engine(engine, dev_priv, id)
182 engine->hangcheck.deadlock = 0;
183}
184
185static bool instdone_unchanged(u32 current_instdone, u32 *old_instdone)
186{
187 u32 tmp = current_instdone | *old_instdone;
188 bool unchanged;
189
190 unchanged = tmp == *old_instdone;
191 *old_instdone |= tmp;
192
193 return unchanged;
194}
195
196static bool subunits_stuck(struct intel_engine_cs *engine)
197{
198 struct drm_i915_private *dev_priv = engine->i915;
199 struct intel_instdone instdone;
200 struct intel_instdone *accu_instdone = &engine->hangcheck.instdone;
201 bool stuck;
202 int slice;
203 int subslice;
204
205 if (engine->id != RCS)
206 return true;
207
208 intel_engine_get_instdone(engine, &instdone);
209
210 /* There might be unstable subunit states even when
211 * actual head is not moving. Filter out the unstable ones by
212 * accumulating the undone -> done transitions and only
213 * consider those as progress.
214 */
215 stuck = instdone_unchanged(instdone.instdone,
216 &accu_instdone->instdone);
217 stuck &= instdone_unchanged(instdone.slice_common,
218 &accu_instdone->slice_common);
219
220 for_each_instdone_slice_subslice(dev_priv, slice, subslice) {
221 stuck &= instdone_unchanged(instdone.sampler[slice][subslice],
222 &accu_instdone->sampler[slice][subslice]);
223 stuck &= instdone_unchanged(instdone.row[slice][subslice],
224 &accu_instdone->row[slice][subslice]);
225 }
226
227 return stuck;
228}
229
230static enum intel_engine_hangcheck_action
231head_stuck(struct intel_engine_cs *engine, u64 acthd)
232{
233 if (acthd != engine->hangcheck.acthd) {
234
235 /* Clear subunit states on head movement */
236 memset(&engine->hangcheck.instdone, 0,
237 sizeof(engine->hangcheck.instdone));
238
239 return HANGCHECK_ACTIVE;
240 }
241
242 if (!subunits_stuck(engine))
243 return HANGCHECK_ACTIVE;
244
245 return HANGCHECK_HUNG;
246}
247
248static enum intel_engine_hangcheck_action
249engine_stuck(struct intel_engine_cs *engine, u64 acthd)
250{
251 struct drm_i915_private *dev_priv = engine->i915;
252 enum intel_engine_hangcheck_action ha;
253 u32 tmp;
254
255 ha = head_stuck(engine, acthd);
256 if (ha != HANGCHECK_HUNG)
257 return ha;
258
259 if (IS_GEN2(dev_priv))
260 return HANGCHECK_HUNG;
261
262 /* Is the chip hanging on a WAIT_FOR_EVENT?
263 * If so we can simply poke the RB_WAIT bit
264 * and break the hang. This should work on
265 * all but the second generation chipsets.
266 */
267 tmp = I915_READ_CTL(engine);
268 if (tmp & RING_WAIT) {
269 i915_handle_error(dev_priv, 0,
270 "Kicking stuck wait on %s",
271 engine->name);
272 I915_WRITE_CTL(engine, tmp);
273 return HANGCHECK_KICK;
274 }
275
276 if (INTEL_GEN(dev_priv) >= 6 && tmp & RING_WAIT_SEMAPHORE) {
277 switch (semaphore_passed(engine)) {
278 default:
279 return HANGCHECK_HUNG;
280 case 1:
281 i915_handle_error(dev_priv, 0,
282 "Kicking stuck semaphore on %s",
283 engine->name);
284 I915_WRITE_CTL(engine, tmp);
285 return HANGCHECK_KICK;
286 case 0:
287 return HANGCHECK_WAIT;
288 }
289 }
290
291 return HANGCHECK_HUNG;
292}
293
294/*
295 * This is called when the chip hasn't reported back with completed
296 * batchbuffers in a long time. We keep track per ring seqno progress and
297 * if there are no progress, hangcheck score for that ring is increased.
298 * Further, acthd is inspected to see if the ring is stuck. On stuck case
299 * we kick the ring. If we see no progress on three subsequent calls
300 * we assume chip is wedged and try to fix it by resetting the chip.
301 */
302static void i915_hangcheck_elapsed(struct work_struct *work)
303{
304 struct drm_i915_private *dev_priv =
305 container_of(work, typeof(*dev_priv),
306 gpu_error.hangcheck_work.work);
307 struct intel_engine_cs *engine;
308 enum intel_engine_id id;
309 unsigned int hung = 0, stuck = 0;
310 int busy_count = 0;
311#define BUSY 1
312#define KICK 5
313#define HUNG 20
314#define ACTIVE_DECAY 15
315
316 if (!i915.enable_hangcheck)
317 return;
318
319 if (!READ_ONCE(dev_priv->gt.awake))
320 return;
321
322 /* As enabling the GPU requires fairly extensive mmio access,
323 * periodically arm the mmio checker to see if we are triggering
324 * any invalid access.
325 */
326 intel_uncore_arm_unclaimed_mmio_detection(dev_priv);
327
328 for_each_engine(engine, dev_priv, id) {
329 bool busy = intel_engine_has_waiter(engine);
330 u64 acthd;
331 u32 seqno;
332 u32 submit;
333
334 semaphore_clear_deadlocks(dev_priv);
335
336 /* We don't strictly need an irq-barrier here, as we are not
337 * serving an interrupt request, be paranoid in case the
338 * barrier has side-effects (such as preventing a broken
339 * cacheline snoop) and so be sure that we can see the seqno
340 * advance. If the seqno should stick, due to a stale
341 * cacheline, we would erroneously declare the GPU hung.
342 */
343 if (engine->irq_seqno_barrier)
344 engine->irq_seqno_barrier(engine);
345
346 acthd = intel_engine_get_active_head(engine);
347 seqno = intel_engine_get_seqno(engine);
348 submit = intel_engine_last_submit(engine);
349
350 if (engine->hangcheck.seqno == seqno) {
351 if (i915_seqno_passed(seqno, submit)) {
352 engine->hangcheck.action = HANGCHECK_IDLE;
353 } else {
354 /* We always increment the hangcheck score
355 * if the engine is busy and still processing
356 * the same request, so that no single request
357 * can run indefinitely (such as a chain of
358 * batches). The only time we do not increment
359 * the hangcheck score on this ring, if this
360 * engine is in a legitimate wait for another
361 * engine. In that case the waiting engine is a
362 * victim and we want to be sure we catch the
363 * right culprit. Then every time we do kick
364 * the ring, add a small increment to the
365 * score so that we can catch a batch that is
366 * being repeatedly kicked and so responsible
367 * for stalling the machine.
368 */
369 engine->hangcheck.action =
370 engine_stuck(engine, acthd);
371
372 switch (engine->hangcheck.action) {
373 case HANGCHECK_IDLE:
374 case HANGCHECK_WAIT:
375 break;
376 case HANGCHECK_ACTIVE:
377 engine->hangcheck.score += BUSY;
378 break;
379 case HANGCHECK_KICK:
380 engine->hangcheck.score += KICK;
381 break;
382 case HANGCHECK_HUNG:
383 engine->hangcheck.score += HUNG;
384 break;
385 }
386 }
387
388 if (engine->hangcheck.score >= HANGCHECK_SCORE_RING_HUNG) {
389 hung |= intel_engine_flag(engine);
390 if (engine->hangcheck.action != HANGCHECK_HUNG)
391 stuck |= intel_engine_flag(engine);
392 }
393 } else {
394 engine->hangcheck.action = HANGCHECK_ACTIVE;
395
396 /* Gradually reduce the count so that we catch DoS
397 * attempts across multiple batches.
398 */
399 if (engine->hangcheck.score > 0)
400 engine->hangcheck.score -= ACTIVE_DECAY;
401 if (engine->hangcheck.score < 0)
402 engine->hangcheck.score = 0;
403
404 /* Clear head and subunit states on seqno movement */
405 acthd = 0;
406
407 memset(&engine->hangcheck.instdone, 0,
408 sizeof(engine->hangcheck.instdone));
409 }
410
411 engine->hangcheck.seqno = seqno;
412 engine->hangcheck.acthd = acthd;
413 busy_count += busy;
414 }
415
416 if (hung) {
417 char msg[80];
418 unsigned int tmp;
419 int len;
420
421 /* If some rings hung but others were still busy, only
422 * blame the hanging rings in the synopsis.
423 */
424 if (stuck != hung)
425 hung &= ~stuck;
426 len = scnprintf(msg, sizeof(msg),
427 "%s on ", stuck == hung ? "No progress" : "Hang");
428 for_each_engine_masked(engine, dev_priv, hung, tmp)
429 len += scnprintf(msg + len, sizeof(msg) - len,
430 "%s, ", engine->name);
431 msg[len-2] = '\0';
432
433 return i915_handle_error(dev_priv, hung, msg);
434 }
435
436 /* Reset timer in case GPU hangs without another request being added */
437 if (busy_count)
438 i915_queue_hangcheck(dev_priv);
439}
440
441void intel_engine_init_hangcheck(struct intel_engine_cs *engine)
442{
443 memset(&engine->hangcheck, 0, sizeof(engine->hangcheck));
444}
445
446void intel_hangcheck_init(struct drm_i915_private *i915)
447{
448 INIT_DELAYED_WORK(&i915->gpu_error.hangcheck_work,
449 i915_hangcheck_elapsed);
450}
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index af8715f31807..35ada4e1c6cf 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1164,7 +1164,7 @@ static void intel_disable_hdmi(struct intel_encoder *encoder,
1164 I915_WRITE(intel_hdmi->hdmi_reg, temp); 1164 I915_WRITE(intel_hdmi->hdmi_reg, temp);
1165 POSTING_READ(intel_hdmi->hdmi_reg); 1165 POSTING_READ(intel_hdmi->hdmi_reg);
1166 1166
1167 intel_wait_for_vblank_if_active(&dev_priv->drm, PIPE_A); 1167 intel_wait_for_vblank_if_active(dev_priv, PIPE_A);
1168 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true); 1168 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true);
1169 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true); 1169 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
1170 } 1170 }
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index bc86585b9fbb..dde04b7643b1 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -365,7 +365,7 @@ static u64 execlists_update_context(struct drm_i915_gem_request *rq)
365 struct i915_hw_ppgtt *ppgtt = rq->ctx->ppgtt; 365 struct i915_hw_ppgtt *ppgtt = rq->ctx->ppgtt;
366 u32 *reg_state = ce->lrc_reg_state; 366 u32 *reg_state = ce->lrc_reg_state;
367 367
368 reg_state[CTX_RING_TAIL+1] = intel_ring_offset(rq->ring, rq->tail); 368 reg_state[CTX_RING_TAIL+1] = rq->tail;
369 369
370 /* True 32b PPGTT with dynamic page allocation: update PDP 370 /* True 32b PPGTT with dynamic page allocation: update PDP
371 * registers and point the unallocated PDPs to scratch page. 371 * registers and point the unallocated PDPs to scratch page.
@@ -440,7 +440,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
440 if (last) 440 if (last)
441 /* WaIdleLiteRestore:bdw,skl 441 /* WaIdleLiteRestore:bdw,skl
442 * Apply the wa NOOPs to prevent ring:HEAD == req:TAIL 442 * Apply the wa NOOPs to prevent ring:HEAD == req:TAIL
443 * as we resubmit the request. See gen8_emit_request() 443 * as we resubmit the request. See gen8_emit_breadcrumb()
444 * for where we prepare the padding after the end of the 444 * for where we prepare the padding after the end of the
445 * request. 445 * request.
446 */ 446 */
@@ -522,6 +522,28 @@ static bool execlists_elsp_idle(struct intel_engine_cs *engine)
522 return !engine->execlist_port[0].request; 522 return !engine->execlist_port[0].request;
523} 523}
524 524
525/**
526 * intel_execlists_idle() - Determine if all engine submission ports are idle
527 * @dev_priv: i915 device private
528 *
529 * Return true if there are no requests pending on any of the submission ports
530 * of any engines.
531 */
532bool intel_execlists_idle(struct drm_i915_private *dev_priv)
533{
534 struct intel_engine_cs *engine;
535 enum intel_engine_id id;
536
537 if (!i915.enable_execlists)
538 return true;
539
540 for_each_engine(engine, dev_priv, id)
541 if (!execlists_elsp_idle(engine))
542 return false;
543
544 return true;
545}
546
525static bool execlists_elsp_ready(struct intel_engine_cs *engine) 547static bool execlists_elsp_ready(struct intel_engine_cs *engine)
526{ 548{
527 int port; 549 int port;
@@ -599,6 +621,15 @@ static void execlists_submit_request(struct drm_i915_gem_request *request)
599 621
600 spin_lock_irqsave(&engine->execlist_lock, flags); 622 spin_lock_irqsave(&engine->execlist_lock, flags);
601 623
624 /* We keep the previous context alive until we retire the following
625 * request. This ensures that any the context object is still pinned
626 * for any residual writes the HW makes into it on the context switch
627 * into the next object following the breadcrumb. Otherwise, we may
628 * retire the context too early.
629 */
630 request->previous_context = engine->last_context;
631 engine->last_context = request->ctx;
632
602 list_add_tail(&request->execlist_link, &engine->execlist_queue); 633 list_add_tail(&request->execlist_link, &engine->execlist_queue);
603 if (execlists_elsp_idle(engine)) 634 if (execlists_elsp_idle(engine))
604 tasklet_hi_schedule(&engine->irq_tasklet); 635 tasklet_hi_schedule(&engine->irq_tasklet);
@@ -671,46 +702,6 @@ err_unpin:
671 return ret; 702 return ret;
672} 703}
673 704
674/*
675 * intel_logical_ring_advance() - advance the tail and prepare for submission
676 * @request: Request to advance the logical ringbuffer of.
677 *
678 * The tail is updated in our logical ringbuffer struct, not in the actual context. What
679 * really happens during submission is that the context and current tail will be placed
680 * on a queue waiting for the ELSP to be ready to accept a new context submission. At that
681 * point, the tail *inside* the context is updated and the ELSP written to.
682 */
683static int
684intel_logical_ring_advance(struct drm_i915_gem_request *request)
685{
686 struct intel_ring *ring = request->ring;
687 struct intel_engine_cs *engine = request->engine;
688
689 intel_ring_advance(ring);
690 request->tail = ring->tail;
691
692 /*
693 * Here we add two extra NOOPs as padding to avoid
694 * lite restore of a context with HEAD==TAIL.
695 *
696 * Caller must reserve WA_TAIL_DWORDS for us!
697 */
698 intel_ring_emit(ring, MI_NOOP);
699 intel_ring_emit(ring, MI_NOOP);
700 intel_ring_advance(ring);
701 request->wa_tail = ring->tail;
702
703 /* We keep the previous context alive until we retire the following
704 * request. This ensures that any the context object is still pinned
705 * for any residual writes the HW makes into it on the context switch
706 * into the next object following the breadcrumb. Otherwise, we may
707 * retire the context too early.
708 */
709 request->previous_context = engine->last_context;
710 engine->last_context = request->ctx;
711 return 0;
712}
713
714static int intel_lr_context_pin(struct i915_gem_context *ctx, 705static int intel_lr_context_pin(struct i915_gem_context *ctx,
715 struct intel_engine_cs *engine) 706 struct intel_engine_cs *engine)
716{ 707{
@@ -744,7 +735,7 @@ static int intel_lr_context_pin(struct i915_gem_context *ctx,
744 ce->lrc_reg_state[CTX_RING_BUFFER_START+1] = 735 ce->lrc_reg_state[CTX_RING_BUFFER_START+1] =
745 i915_ggtt_offset(ce->ring->vma); 736 i915_ggtt_offset(ce->ring->vma);
746 737
747 ce->state->obj->dirty = true; 738 ce->state->obj->mm.dirty = true;
748 739
749 /* Invalidate GuC TLB. */ 740 /* Invalidate GuC TLB. */
750 if (i915.enable_guc_submission) { 741 if (i915.enable_guc_submission) {
@@ -1566,39 +1557,35 @@ static void bxt_a_seqno_barrier(struct intel_engine_cs *engine)
1566 * used as a workaround for not being allowed to do lite 1557 * used as a workaround for not being allowed to do lite
1567 * restore with HEAD==TAIL (WaIdleLiteRestore). 1558 * restore with HEAD==TAIL (WaIdleLiteRestore).
1568 */ 1559 */
1569 1560static void gen8_emit_wa_tail(struct drm_i915_gem_request *request, u32 *out)
1570static int gen8_emit_request(struct drm_i915_gem_request *request)
1571{ 1561{
1572 struct intel_ring *ring = request->ring; 1562 *out++ = MI_NOOP;
1573 int ret; 1563 *out++ = MI_NOOP;
1574 1564 request->wa_tail = intel_ring_offset(request->ring, out);
1575 ret = intel_ring_begin(request, 6 + WA_TAIL_DWORDS); 1565}
1576 if (ret)
1577 return ret;
1578 1566
1567static void gen8_emit_breadcrumb(struct drm_i915_gem_request *request,
1568 u32 *out)
1569{
1579 /* w/a: bit 5 needs to be zero for MI_FLUSH_DW address. */ 1570 /* w/a: bit 5 needs to be zero for MI_FLUSH_DW address. */
1580 BUILD_BUG_ON(I915_GEM_HWS_INDEX_ADDR & (1 << 5)); 1571 BUILD_BUG_ON(I915_GEM_HWS_INDEX_ADDR & (1 << 5));
1581 1572
1582 intel_ring_emit(ring, (MI_FLUSH_DW + 1) | MI_FLUSH_DW_OP_STOREDW); 1573 *out++ = (MI_FLUSH_DW + 1) | MI_FLUSH_DW_OP_STOREDW;
1583 intel_ring_emit(ring, 1574 *out++ = intel_hws_seqno_address(request->engine) | MI_FLUSH_DW_USE_GTT;
1584 intel_hws_seqno_address(request->engine) | 1575 *out++ = 0;
1585 MI_FLUSH_DW_USE_GTT); 1576 *out++ = request->global_seqno;
1586 intel_ring_emit(ring, 0); 1577 *out++ = MI_USER_INTERRUPT;
1587 intel_ring_emit(ring, request->fence.seqno); 1578 *out++ = MI_NOOP;
1588 intel_ring_emit(ring, MI_USER_INTERRUPT); 1579 request->tail = intel_ring_offset(request->ring, out);
1589 intel_ring_emit(ring, MI_NOOP); 1580
1590 return intel_logical_ring_advance(request); 1581 gen8_emit_wa_tail(request, out);
1591} 1582}
1592 1583
1593static int gen8_emit_request_render(struct drm_i915_gem_request *request) 1584static const int gen8_emit_breadcrumb_sz = 6 + WA_TAIL_DWORDS;
1594{
1595 struct intel_ring *ring = request->ring;
1596 int ret;
1597
1598 ret = intel_ring_begin(request, 8 + WA_TAIL_DWORDS);
1599 if (ret)
1600 return ret;
1601 1585
1586static void gen8_emit_breadcrumb_render(struct drm_i915_gem_request *request,
1587 u32 *out)
1588{
1602 /* We're using qword write, seqno should be aligned to 8 bytes. */ 1589 /* We're using qword write, seqno should be aligned to 8 bytes. */
1603 BUILD_BUG_ON(I915_GEM_HWS_INDEX & 1); 1590 BUILD_BUG_ON(I915_GEM_HWS_INDEX & 1);
1604 1591
@@ -1606,21 +1593,24 @@ static int gen8_emit_request_render(struct drm_i915_gem_request *request)
1606 * need a prior CS_STALL, which is emitted by the flush 1593 * need a prior CS_STALL, which is emitted by the flush
1607 * following the batch. 1594 * following the batch.
1608 */ 1595 */
1609 intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(6)); 1596 *out++ = GFX_OP_PIPE_CONTROL(6);
1610 intel_ring_emit(ring, 1597 *out++ = (PIPE_CONTROL_GLOBAL_GTT_IVB |
1611 (PIPE_CONTROL_GLOBAL_GTT_IVB | 1598 PIPE_CONTROL_CS_STALL |
1612 PIPE_CONTROL_CS_STALL | 1599 PIPE_CONTROL_QW_WRITE);
1613 PIPE_CONTROL_QW_WRITE)); 1600 *out++ = intel_hws_seqno_address(request->engine);
1614 intel_ring_emit(ring, intel_hws_seqno_address(request->engine)); 1601 *out++ = 0;
1615 intel_ring_emit(ring, 0); 1602 *out++ = request->global_seqno;
1616 intel_ring_emit(ring, i915_gem_request_get_seqno(request));
1617 /* We're thrashing one dword of HWS. */ 1603 /* We're thrashing one dword of HWS. */
1618 intel_ring_emit(ring, 0); 1604 *out++ = 0;
1619 intel_ring_emit(ring, MI_USER_INTERRUPT); 1605 *out++ = MI_USER_INTERRUPT;
1620 intel_ring_emit(ring, MI_NOOP); 1606 *out++ = MI_NOOP;
1621 return intel_logical_ring_advance(request); 1607 request->tail = intel_ring_offset(request->ring, out);
1608
1609 gen8_emit_wa_tail(request, out);
1622} 1610}
1623 1611
1612static const int gen8_emit_breadcrumb_render_sz = 8 + WA_TAIL_DWORDS;
1613
1624static int gen8_init_rcs_context(struct drm_i915_gem_request *req) 1614static int gen8_init_rcs_context(struct drm_i915_gem_request *req)
1625{ 1615{
1626 int ret; 1616 int ret;
@@ -1637,7 +1627,7 @@ static int gen8_init_rcs_context(struct drm_i915_gem_request *req)
1637 if (ret) 1627 if (ret)
1638 DRM_ERROR("MOCS failed to program: expect performance issues.\n"); 1628 DRM_ERROR("MOCS failed to program: expect performance issues.\n");
1639 1629
1640 return i915_gem_render_state_init(req); 1630 return i915_gem_render_state_emit(req);
1641} 1631}
1642 1632
1643/** 1633/**
@@ -1694,7 +1684,8 @@ logical_ring_default_vfuncs(struct intel_engine_cs *engine)
1694 engine->init_hw = gen8_init_common_ring; 1684 engine->init_hw = gen8_init_common_ring;
1695 engine->reset_hw = reset_common_ring; 1685 engine->reset_hw = reset_common_ring;
1696 engine->emit_flush = gen8_emit_flush; 1686 engine->emit_flush = gen8_emit_flush;
1697 engine->emit_request = gen8_emit_request; 1687 engine->emit_breadcrumb = gen8_emit_breadcrumb;
1688 engine->emit_breadcrumb_sz = gen8_emit_breadcrumb_sz;
1698 engine->submit_request = execlists_submit_request; 1689 engine->submit_request = execlists_submit_request;
1699 1690
1700 engine->irq_enable = gen8_logical_ring_enable_irq; 1691 engine->irq_enable = gen8_logical_ring_enable_irq;
@@ -1816,7 +1807,8 @@ int logical_render_ring_init(struct intel_engine_cs *engine)
1816 engine->init_hw = gen8_init_render_ring; 1807 engine->init_hw = gen8_init_render_ring;
1817 engine->init_context = gen8_init_rcs_context; 1808 engine->init_context = gen8_init_rcs_context;
1818 engine->emit_flush = gen8_emit_flush_render; 1809 engine->emit_flush = gen8_emit_flush_render;
1819 engine->emit_request = gen8_emit_request_render; 1810 engine->emit_breadcrumb = gen8_emit_breadcrumb_render;
1811 engine->emit_breadcrumb_sz = gen8_emit_breadcrumb_render_sz;
1820 1812
1821 ret = intel_engine_create_scratch(engine, 4096); 1813 ret = intel_engine_create_scratch(engine, 4096);
1822 if (ret) 1814 if (ret)
@@ -2042,7 +2034,7 @@ populate_lr_context(struct i915_gem_context *ctx,
2042 DRM_DEBUG_DRIVER("Could not map object pages! (%d)\n", ret); 2034 DRM_DEBUG_DRIVER("Could not map object pages! (%d)\n", ret);
2043 return ret; 2035 return ret;
2044 } 2036 }
2045 ctx_obj->dirty = true; 2037 ctx_obj->mm.dirty = true;
2046 2038
2047 /* The second page of the context object contains some fields which must 2039 /* The second page of the context object contains some fields which must
2048 * be set up prior to the first execution. */ 2040 * be set up prior to the first execution. */
@@ -2180,7 +2172,7 @@ void intel_lr_context_resume(struct drm_i915_private *dev_priv)
2180 reg[CTX_RING_HEAD+1] = 0; 2172 reg[CTX_RING_HEAD+1] = 0;
2181 reg[CTX_RING_TAIL+1] = 0; 2173 reg[CTX_RING_TAIL+1] = 0;
2182 2174
2183 ce->state->obj->dirty = true; 2175 ce->state->obj->mm.dirty = true;
2184 i915_gem_object_unpin_map(ce->state->obj); 2176 i915_gem_object_unpin_map(ce->state->obj);
2185 2177
2186 ce->ring->head = ce->ring->tail = 0; 2178 ce->ring->head = ce->ring->tail = 0;
diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
index 4fed8165f98a..c1f546180ba2 100644
--- a/drivers/gpu/drm/i915/intel_lrc.h
+++ b/drivers/gpu/drm/i915/intel_lrc.h
@@ -95,5 +95,6 @@ uint64_t intel_lr_context_descriptor(struct i915_gem_context *ctx,
95int intel_sanitize_enable_execlists(struct drm_i915_private *dev_priv, 95int intel_sanitize_enable_execlists(struct drm_i915_private *dev_priv,
96 int enable_execlists); 96 int enable_execlists);
97void intel_execlists_enable_submission(struct drm_i915_private *dev_priv); 97void intel_execlists_enable_submission(struct drm_i915_private *dev_priv);
98bool intel_execlists_idle(struct drm_i915_private *dev_priv);
98 99
99#endif /* _INTEL_LRC_H_ */ 100#endif /* _INTEL_LRC_H_ */
diff --git a/drivers/gpu/drm/i915/intel_lspcon.c b/drivers/gpu/drm/i915/intel_lspcon.c
index 632149c6b3ad..daa523410953 100644
--- a/drivers/gpu/drm/i915/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/intel_lspcon.c
@@ -27,10 +27,18 @@
27#include <drm/drm_dp_dual_mode_helper.h> 27#include <drm/drm_dp_dual_mode_helper.h>
28#include "intel_drv.h" 28#include "intel_drv.h"
29 29
30static struct intel_dp *lspcon_to_intel_dp(struct intel_lspcon *lspcon)
31{
32 struct intel_digital_port *dig_port =
33 container_of(lspcon, struct intel_digital_port, lspcon);
34
35 return &dig_port->dp;
36}
37
30static enum drm_lspcon_mode lspcon_get_current_mode(struct intel_lspcon *lspcon) 38static enum drm_lspcon_mode lspcon_get_current_mode(struct intel_lspcon *lspcon)
31{ 39{
32 enum drm_lspcon_mode current_mode = DRM_LSPCON_MODE_INVALID; 40 enum drm_lspcon_mode current_mode = DRM_LSPCON_MODE_INVALID;
33 struct i2c_adapter *adapter = &lspcon->aux->ddc; 41 struct i2c_adapter *adapter = &lspcon_to_intel_dp(lspcon)->aux.ddc;
34 42
35 if (drm_lspcon_get_mode(adapter, &current_mode)) 43 if (drm_lspcon_get_mode(adapter, &current_mode))
36 DRM_ERROR("Error reading LSPCON mode\n"); 44 DRM_ERROR("Error reading LSPCON mode\n");
@@ -45,7 +53,7 @@ static int lspcon_change_mode(struct intel_lspcon *lspcon,
45{ 53{
46 int err; 54 int err;
47 enum drm_lspcon_mode current_mode; 55 enum drm_lspcon_mode current_mode;
48 struct i2c_adapter *adapter = &lspcon->aux->ddc; 56 struct i2c_adapter *adapter = &lspcon_to_intel_dp(lspcon)->aux.ddc;
49 57
50 err = drm_lspcon_get_mode(adapter, &current_mode); 58 err = drm_lspcon_get_mode(adapter, &current_mode);
51 if (err) { 59 if (err) {
@@ -72,7 +80,7 @@ static int lspcon_change_mode(struct intel_lspcon *lspcon,
72static bool lspcon_probe(struct intel_lspcon *lspcon) 80static bool lspcon_probe(struct intel_lspcon *lspcon)
73{ 81{
74 enum drm_dp_dual_mode_type adaptor_type; 82 enum drm_dp_dual_mode_type adaptor_type;
75 struct i2c_adapter *adapter = &lspcon->aux->ddc; 83 struct i2c_adapter *adapter = &lspcon_to_intel_dp(lspcon)->aux.ddc;
76 84
77 /* Lets probe the adaptor and check its type */ 85 /* Lets probe the adaptor and check its type */
78 adaptor_type = drm_dp_dual_mode_detect(adapter); 86 adaptor_type = drm_dp_dual_mode_detect(adapter);
@@ -89,8 +97,43 @@ static bool lspcon_probe(struct intel_lspcon *lspcon)
89 return true; 97 return true;
90} 98}
91 99
100static void lspcon_resume_in_pcon_wa(struct intel_lspcon *lspcon)
101{
102 struct intel_dp *intel_dp = lspcon_to_intel_dp(lspcon);
103 unsigned long start = jiffies;
104
105 if (!lspcon->desc_valid)
106 return;
107
108 while (1) {
109 struct intel_dp_desc desc;
110
111 /*
112 * The w/a only applies in PCON mode and we don't expect any
113 * AUX errors.
114 */
115 if (!__intel_dp_read_desc(intel_dp, &desc))
116 return;
117
118 if (!memcmp(&intel_dp->desc, &desc, sizeof(desc))) {
119 DRM_DEBUG_KMS("LSPCON recovering in PCON mode after %u ms\n",
120 jiffies_to_msecs(jiffies - start));
121 return;
122 }
123
124 if (time_after(jiffies, start + msecs_to_jiffies(1000)))
125 break;
126
127 usleep_range(10000, 15000);
128 }
129
130 DRM_DEBUG_KMS("LSPCON DP descriptor mismatch after resume\n");
131}
132
92void lspcon_resume(struct intel_lspcon *lspcon) 133void lspcon_resume(struct intel_lspcon *lspcon)
93{ 134{
135 lspcon_resume_in_pcon_wa(lspcon);
136
94 if (lspcon_change_mode(lspcon, DRM_LSPCON_MODE_PCON, true)) 137 if (lspcon_change_mode(lspcon, DRM_LSPCON_MODE_PCON, true))
95 DRM_ERROR("LSPCON resume failed\n"); 138 DRM_ERROR("LSPCON resume failed\n");
96 else 139 else
@@ -111,7 +154,6 @@ bool lspcon_init(struct intel_digital_port *intel_dig_port)
111 154
112 lspcon->active = false; 155 lspcon->active = false;
113 lspcon->mode = DRM_LSPCON_MODE_INVALID; 156 lspcon->mode = DRM_LSPCON_MODE_INVALID;
114 lspcon->aux = &dp->aux;
115 157
116 if (!lspcon_probe(lspcon)) { 158 if (!lspcon_probe(lspcon)) {
117 DRM_ERROR("Failed to probe lspcon\n"); 159 DRM_ERROR("Failed to probe lspcon\n");
@@ -131,6 +173,13 @@ bool lspcon_init(struct intel_digital_port *intel_dig_port)
131 } 173 }
132 } 174 }
133 175
176 if (!intel_dp_read_dpcd(dp)) {
177 DRM_ERROR("LSPCON DPCD read failed\n");
178 return false;
179 }
180
181 lspcon->desc_valid = intel_dp_read_desc(dp);
182
134 DRM_DEBUG_KMS("Success: LSPCON init\n"); 183 DRM_DEBUG_KMS("Success: LSPCON init\n");
135 return true; 184 return true;
136} 185}
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 199b90c7907a..de7b3e6ed477 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -985,7 +985,7 @@ void intel_lvds_init(struct drm_device *dev)
985 struct drm_display_mode *fixed_mode = NULL; 985 struct drm_display_mode *fixed_mode = NULL;
986 struct drm_display_mode *downclock_mode = NULL; 986 struct drm_display_mode *downclock_mode = NULL;
987 struct edid *edid; 987 struct edid *edid;
988 struct drm_crtc *crtc; 988 struct intel_crtc *crtc;
989 i915_reg_t lvds_reg; 989 i915_reg_t lvds_reg;
990 u32 lvds; 990 u32 lvds;
991 int pipe; 991 int pipe;
@@ -1163,10 +1163,10 @@ void intel_lvds_init(struct drm_device *dev)
1163 goto failed; 1163 goto failed;
1164 1164
1165 pipe = (lvds & LVDS_PIPEB_SELECT) ? 1 : 0; 1165 pipe = (lvds & LVDS_PIPEB_SELECT) ? 1 : 0;
1166 crtc = intel_get_crtc_for_pipe(dev, pipe); 1166 crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
1167 1167
1168 if (crtc && (lvds & LVDS_PORT_EN)) { 1168 if (crtc && (lvds & LVDS_PORT_EN)) {
1169 fixed_mode = intel_crtc_mode_get(dev, crtc); 1169 fixed_mode = intel_crtc_mode_get(dev, &crtc->base);
1170 if (fixed_mode) { 1170 if (fixed_mode) {
1171 DRM_DEBUG_KMS("using current (BIOS) mode: "); 1171 DRM_DEBUG_KMS("using current (BIOS) mode: ");
1172 drm_mode_debug_printmodeline(fixed_mode); 1172 drm_mode_debug_printmodeline(fixed_mode);
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c
index 25bcd4a178d3..fd0e4dac7cc1 100644
--- a/drivers/gpu/drm/i915/intel_overlay.c
+++ b/drivers/gpu/drm/i915/intel_overlay.c
@@ -1222,7 +1222,7 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
1222out_unlock: 1222out_unlock:
1223 mutex_unlock(&dev->struct_mutex); 1223 mutex_unlock(&dev->struct_mutex);
1224 drm_modeset_unlock_all(dev); 1224 drm_modeset_unlock_all(dev);
1225 i915_gem_object_put_unlocked(new_bo); 1225 i915_gem_object_put(new_bo);
1226out_free: 1226out_free:
1227 kfree(params); 1227 kfree(params);
1228 1228
@@ -1466,7 +1466,7 @@ void intel_cleanup_overlay(struct drm_i915_private *dev_priv)
1466 * hardware should be off already */ 1466 * hardware should be off already */
1467 WARN_ON(dev_priv->overlay->active); 1467 WARN_ON(dev_priv->overlay->active);
1468 1468
1469 i915_gem_object_put_unlocked(dev_priv->overlay->reg_bo); 1469 i915_gem_object_put(dev_priv->overlay->reg_bo);
1470 kfree(dev_priv->overlay); 1470 kfree(dev_priv->overlay);
1471} 1471}
1472 1472
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 560fc7af8267..cc9e0c0f445f 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -31,6 +31,7 @@
31#include "intel_drv.h" 31#include "intel_drv.h"
32#include "../../../platform/x86/intel_ips.h" 32#include "../../../platform/x86/intel_ips.h"
33#include <linux/module.h> 33#include <linux/module.h>
34#include <drm/drm_atomic_helper.h>
34 35
35/** 36/**
36 * DOC: RC6 37 * DOC: RC6
@@ -55,10 +56,8 @@
55#define INTEL_RC6p_ENABLE (1<<1) 56#define INTEL_RC6p_ENABLE (1<<1)
56#define INTEL_RC6pp_ENABLE (1<<2) 57#define INTEL_RC6pp_ENABLE (1<<2)
57 58
58static void gen9_init_clock_gating(struct drm_device *dev) 59static void gen9_init_clock_gating(struct drm_i915_private *dev_priv)
59{ 60{
60 struct drm_i915_private *dev_priv = dev->dev_private;
61
62 /* See Bspec note for PSR2_CTL bit 31, Wa#828:skl,bxt,kbl */ 61 /* See Bspec note for PSR2_CTL bit 31, Wa#828:skl,bxt,kbl */
63 I915_WRITE(CHICKEN_PAR1_1, 62 I915_WRITE(CHICKEN_PAR1_1,
64 I915_READ(CHICKEN_PAR1_1) | SKL_EDP_PSR_FIX_RDWRAP); 63 I915_READ(CHICKEN_PAR1_1) | SKL_EDP_PSR_FIX_RDWRAP);
@@ -81,11 +80,9 @@ static void gen9_init_clock_gating(struct drm_device *dev)
81 ILK_DPFC_DISABLE_DUMMY0); 80 ILK_DPFC_DISABLE_DUMMY0);
82} 81}
83 82
84static void bxt_init_clock_gating(struct drm_device *dev) 83static void bxt_init_clock_gating(struct drm_i915_private *dev_priv)
85{ 84{
86 struct drm_i915_private *dev_priv = to_i915(dev); 85 gen9_init_clock_gating(dev_priv);
87
88 gen9_init_clock_gating(dev);
89 86
90 /* WaDisableSDEUnitClockGating:bxt */ 87 /* WaDisableSDEUnitClockGating:bxt */
91 I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) | 88 I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) |
@@ -107,9 +104,8 @@ static void bxt_init_clock_gating(struct drm_device *dev)
107 PWM1_GATING_DIS | PWM2_GATING_DIS); 104 PWM1_GATING_DIS | PWM2_GATING_DIS);
108} 105}
109 106
110static void i915_pineview_get_mem_freq(struct drm_device *dev) 107static void i915_pineview_get_mem_freq(struct drm_i915_private *dev_priv)
111{ 108{
112 struct drm_i915_private *dev_priv = to_i915(dev);
113 u32 tmp; 109 u32 tmp;
114 110
115 tmp = I915_READ(CLKCFG); 111 tmp = I915_READ(CLKCFG);
@@ -146,9 +142,8 @@ static void i915_pineview_get_mem_freq(struct drm_device *dev)
146 dev_priv->is_ddr3 = (tmp & CSHRDDR3CTL_DDR3) ? 1 : 0; 142 dev_priv->is_ddr3 = (tmp & CSHRDDR3CTL_DDR3) ? 1 : 0;
147} 143}
148 144
149static void i915_ironlake_get_mem_freq(struct drm_device *dev) 145static void i915_ironlake_get_mem_freq(struct drm_i915_private *dev_priv)
150{ 146{
151 struct drm_i915_private *dev_priv = to_i915(dev);
152 u16 ddrpll, csipll; 147 u16 ddrpll, csipll;
153 148
154 ddrpll = I915_READ16(DDRMPLL1); 149 ddrpll = I915_READ16(DDRMPLL1);
@@ -319,7 +314,6 @@ static void chv_set_memory_pm5(struct drm_i915_private *dev_priv, bool enable)
319 314
320void intel_set_memory_cxsr(struct drm_i915_private *dev_priv, bool enable) 315void intel_set_memory_cxsr(struct drm_i915_private *dev_priv, bool enable)
321{ 316{
322 struct drm_device *dev = &dev_priv->drm;
323 u32 val; 317 u32 val;
324 318
325 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { 319 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
@@ -329,7 +323,7 @@ void intel_set_memory_cxsr(struct drm_i915_private *dev_priv, bool enable)
329 } else if (IS_G4X(dev_priv) || IS_CRESTLINE(dev_priv)) { 323 } else if (IS_G4X(dev_priv) || IS_CRESTLINE(dev_priv)) {
330 I915_WRITE(FW_BLC_SELF, enable ? FW_BLC_SELF_EN : 0); 324 I915_WRITE(FW_BLC_SELF, enable ? FW_BLC_SELF_EN : 0);
331 POSTING_READ(FW_BLC_SELF); 325 POSTING_READ(FW_BLC_SELF);
332 } else if (IS_PINEVIEW(dev)) { 326 } else if (IS_PINEVIEW(dev_priv)) {
333 val = I915_READ(DSPFW3) & ~PINEVIEW_SELF_REFRESH_EN; 327 val = I915_READ(DSPFW3) & ~PINEVIEW_SELF_REFRESH_EN;
334 val |= enable ? PINEVIEW_SELF_REFRESH_EN : 0; 328 val |= enable ? PINEVIEW_SELF_REFRESH_EN : 0;
335 I915_WRITE(DSPFW3, val); 329 I915_WRITE(DSPFW3, val);
@@ -377,10 +371,9 @@ static const int pessimal_latency_ns = 5000;
377#define VLV_FIFO_START(dsparb, dsparb2, lo_shift, hi_shift) \ 371#define VLV_FIFO_START(dsparb, dsparb2, lo_shift, hi_shift) \
378 ((((dsparb) >> (lo_shift)) & 0xff) | ((((dsparb2) >> (hi_shift)) & 0x1) << 8)) 372 ((((dsparb) >> (lo_shift)) & 0xff) | ((((dsparb2) >> (hi_shift)) & 0x1) << 8))
379 373
380static int vlv_get_fifo_size(struct drm_device *dev, 374static int vlv_get_fifo_size(struct drm_i915_private *dev_priv,
381 enum pipe pipe, int plane) 375 enum pipe pipe, int plane)
382{ 376{
383 struct drm_i915_private *dev_priv = to_i915(dev);
384 int sprite0_start, sprite1_start, size; 377 int sprite0_start, sprite1_start, size;
385 378
386 switch (pipe) { 379 switch (pipe) {
@@ -429,9 +422,8 @@ static int vlv_get_fifo_size(struct drm_device *dev,
429 return size; 422 return size;
430} 423}
431 424
432static int i9xx_get_fifo_size(struct drm_device *dev, int plane) 425static int i9xx_get_fifo_size(struct drm_i915_private *dev_priv, int plane)
433{ 426{
434 struct drm_i915_private *dev_priv = to_i915(dev);
435 uint32_t dsparb = I915_READ(DSPARB); 427 uint32_t dsparb = I915_READ(DSPARB);
436 int size; 428 int size;
437 429
@@ -445,9 +437,8 @@ static int i9xx_get_fifo_size(struct drm_device *dev, int plane)
445 return size; 437 return size;
446} 438}
447 439
448static int i830_get_fifo_size(struct drm_device *dev, int plane) 440static int i830_get_fifo_size(struct drm_i915_private *dev_priv, int plane)
449{ 441{
450 struct drm_i915_private *dev_priv = to_i915(dev);
451 uint32_t dsparb = I915_READ(DSPARB); 442 uint32_t dsparb = I915_READ(DSPARB);
452 int size; 443 int size;
453 444
@@ -462,9 +453,8 @@ static int i830_get_fifo_size(struct drm_device *dev, int plane)
462 return size; 453 return size;
463} 454}
464 455
465static int i845_get_fifo_size(struct drm_device *dev, int plane) 456static int i845_get_fifo_size(struct drm_i915_private *dev_priv, int plane)
466{ 457{
467 struct drm_i915_private *dev_priv = to_i915(dev);
468 uint32_t dsparb = I915_READ(DSPARB); 458 uint32_t dsparb = I915_READ(DSPARB);
469 int size; 459 int size;
470 460
@@ -624,11 +614,11 @@ static unsigned long intel_calculate_wm(unsigned long clock_in_khz,
624 return wm_size; 614 return wm_size;
625} 615}
626 616
627static struct drm_crtc *single_enabled_crtc(struct drm_device *dev) 617static struct intel_crtc *single_enabled_crtc(struct drm_i915_private *dev_priv)
628{ 618{
629 struct drm_crtc *crtc, *enabled = NULL; 619 struct intel_crtc *crtc, *enabled = NULL;
630 620
631 for_each_crtc(dev, crtc) { 621 for_each_intel_crtc(&dev_priv->drm, crtc) {
632 if (intel_crtc_active(crtc)) { 622 if (intel_crtc_active(crtc)) {
633 if (enabled) 623 if (enabled)
634 return NULL; 624 return NULL;
@@ -639,11 +629,10 @@ static struct drm_crtc *single_enabled_crtc(struct drm_device *dev)
639 return enabled; 629 return enabled;
640} 630}
641 631
642static void pineview_update_wm(struct drm_crtc *unused_crtc) 632static void pineview_update_wm(struct intel_crtc *unused_crtc)
643{ 633{
644 struct drm_device *dev = unused_crtc->dev; 634 struct drm_i915_private *dev_priv = to_i915(unused_crtc->base.dev);
645 struct drm_i915_private *dev_priv = to_i915(dev); 635 struct intel_crtc *crtc;
646 struct drm_crtc *crtc;
647 const struct cxsr_latency *latency; 636 const struct cxsr_latency *latency;
648 u32 reg; 637 u32 reg;
649 unsigned long wm; 638 unsigned long wm;
@@ -658,10 +647,13 @@ static void pineview_update_wm(struct drm_crtc *unused_crtc)
658 return; 647 return;
659 } 648 }
660 649
661 crtc = single_enabled_crtc(dev); 650 crtc = single_enabled_crtc(dev_priv);
662 if (crtc) { 651 if (crtc) {
663 const struct drm_display_mode *adjusted_mode = &to_intel_crtc(crtc)->config->base.adjusted_mode; 652 const struct drm_display_mode *adjusted_mode =
664 int cpp = drm_format_plane_cpp(crtc->primary->state->fb->pixel_format, 0); 653 &crtc->config->base.adjusted_mode;
654 const struct drm_framebuffer *fb =
655 crtc->base.primary->state->fb;
656 int cpp = drm_format_plane_cpp(fb->pixel_format, 0);
665 int clock = adjusted_mode->crtc_clock; 657 int clock = adjusted_mode->crtc_clock;
666 658
667 /* Display SR */ 659 /* Display SR */
@@ -708,7 +700,7 @@ static void pineview_update_wm(struct drm_crtc *unused_crtc)
708 } 700 }
709} 701}
710 702
711static bool g4x_compute_wm0(struct drm_device *dev, 703static bool g4x_compute_wm0(struct drm_i915_private *dev_priv,
712 int plane, 704 int plane,
713 const struct intel_watermark_params *display, 705 const struct intel_watermark_params *display,
714 int display_latency_ns, 706 int display_latency_ns,
@@ -717,24 +709,26 @@ static bool g4x_compute_wm0(struct drm_device *dev,
717 int *plane_wm, 709 int *plane_wm,
718 int *cursor_wm) 710 int *cursor_wm)
719{ 711{
720 struct drm_crtc *crtc; 712 struct intel_crtc *crtc;
721 const struct drm_display_mode *adjusted_mode; 713 const struct drm_display_mode *adjusted_mode;
714 const struct drm_framebuffer *fb;
722 int htotal, hdisplay, clock, cpp; 715 int htotal, hdisplay, clock, cpp;
723 int line_time_us, line_count; 716 int line_time_us, line_count;
724 int entries, tlb_miss; 717 int entries, tlb_miss;
725 718
726 crtc = intel_get_crtc_for_plane(dev, plane); 719 crtc = intel_get_crtc_for_plane(dev_priv, plane);
727 if (!intel_crtc_active(crtc)) { 720 if (!intel_crtc_active(crtc)) {
728 *cursor_wm = cursor->guard_size; 721 *cursor_wm = cursor->guard_size;
729 *plane_wm = display->guard_size; 722 *plane_wm = display->guard_size;
730 return false; 723 return false;
731 } 724 }
732 725
733 adjusted_mode = &to_intel_crtc(crtc)->config->base.adjusted_mode; 726 adjusted_mode = &crtc->config->base.adjusted_mode;
727 fb = crtc->base.primary->state->fb;
734 clock = adjusted_mode->crtc_clock; 728 clock = adjusted_mode->crtc_clock;
735 htotal = adjusted_mode->crtc_htotal; 729 htotal = adjusted_mode->crtc_htotal;
736 hdisplay = to_intel_crtc(crtc)->config->pipe_src_w; 730 hdisplay = crtc->config->pipe_src_w;
737 cpp = drm_format_plane_cpp(crtc->primary->state->fb->pixel_format, 0); 731 cpp = drm_format_plane_cpp(fb->pixel_format, 0);
738 732
739 /* Use the small buffer method to calculate plane watermark */ 733 /* Use the small buffer method to calculate plane watermark */
740 entries = ((clock * cpp / 1000) * display_latency_ns) / 1000; 734 entries = ((clock * cpp / 1000) * display_latency_ns) / 1000;
@@ -749,7 +743,7 @@ static bool g4x_compute_wm0(struct drm_device *dev,
749 /* Use the large buffer method to calculate cursor watermark */ 743 /* Use the large buffer method to calculate cursor watermark */
750 line_time_us = max(htotal * 1000 / clock, 1); 744 line_time_us = max(htotal * 1000 / clock, 1);
751 line_count = (cursor_latency_ns / line_time_us + 1000) / 1000; 745 line_count = (cursor_latency_ns / line_time_us + 1000) / 1000;
752 entries = line_count * crtc->cursor->state->crtc_w * cpp; 746 entries = line_count * crtc->base.cursor->state->crtc_w * cpp;
753 tlb_miss = cursor->fifo_size*cursor->cacheline_size - hdisplay * 8; 747 tlb_miss = cursor->fifo_size*cursor->cacheline_size - hdisplay * 8;
754 if (tlb_miss > 0) 748 if (tlb_miss > 0)
755 entries += tlb_miss; 749 entries += tlb_miss;
@@ -768,7 +762,7 @@ static bool g4x_compute_wm0(struct drm_device *dev,
768 * can be programmed into the associated watermark register, that watermark 762 * can be programmed into the associated watermark register, that watermark
769 * must be disabled. 763 * must be disabled.
770 */ 764 */
771static bool g4x_check_srwm(struct drm_device *dev, 765static bool g4x_check_srwm(struct drm_i915_private *dev_priv,
772 int display_wm, int cursor_wm, 766 int display_wm, int cursor_wm,
773 const struct intel_watermark_params *display, 767 const struct intel_watermark_params *display,
774 const struct intel_watermark_params *cursor) 768 const struct intel_watermark_params *cursor)
@@ -796,15 +790,16 @@ static bool g4x_check_srwm(struct drm_device *dev,
796 return true; 790 return true;
797} 791}
798 792
799static bool g4x_compute_srwm(struct drm_device *dev, 793static bool g4x_compute_srwm(struct drm_i915_private *dev_priv,
800 int plane, 794 int plane,
801 int latency_ns, 795 int latency_ns,
802 const struct intel_watermark_params *display, 796 const struct intel_watermark_params *display,
803 const struct intel_watermark_params *cursor, 797 const struct intel_watermark_params *cursor,
804 int *display_wm, int *cursor_wm) 798 int *display_wm, int *cursor_wm)
805{ 799{
806 struct drm_crtc *crtc; 800 struct intel_crtc *crtc;
807 const struct drm_display_mode *adjusted_mode; 801 const struct drm_display_mode *adjusted_mode;
802 const struct drm_framebuffer *fb;
808 int hdisplay, htotal, cpp, clock; 803 int hdisplay, htotal, cpp, clock;
809 unsigned long line_time_us; 804 unsigned long line_time_us;
810 int line_count, line_size; 805 int line_count, line_size;
@@ -816,12 +811,13 @@ static bool g4x_compute_srwm(struct drm_device *dev,
816 return false; 811 return false;
817 } 812 }
818 813
819 crtc = intel_get_crtc_for_plane(dev, plane); 814 crtc = intel_get_crtc_for_plane(dev_priv, plane);
820 adjusted_mode = &to_intel_crtc(crtc)->config->base.adjusted_mode; 815 adjusted_mode = &crtc->config->base.adjusted_mode;
816 fb = crtc->base.primary->state->fb;
821 clock = adjusted_mode->crtc_clock; 817 clock = adjusted_mode->crtc_clock;
822 htotal = adjusted_mode->crtc_htotal; 818 htotal = adjusted_mode->crtc_htotal;
823 hdisplay = to_intel_crtc(crtc)->config->pipe_src_w; 819 hdisplay = crtc->config->pipe_src_w;
824 cpp = drm_format_plane_cpp(crtc->primary->state->fb->pixel_format, 0); 820 cpp = drm_format_plane_cpp(fb->pixel_format, 0);
825 821
826 line_time_us = max(htotal * 1000 / clock, 1); 822 line_time_us = max(htotal * 1000 / clock, 1);
827 line_count = (latency_ns / line_time_us + 1000) / 1000; 823 line_count = (latency_ns / line_time_us + 1000) / 1000;
@@ -835,11 +831,11 @@ static bool g4x_compute_srwm(struct drm_device *dev,
835 *display_wm = entries + display->guard_size; 831 *display_wm = entries + display->guard_size;
836 832
837 /* calculate the self-refresh watermark for display cursor */ 833 /* calculate the self-refresh watermark for display cursor */
838 entries = line_count * cpp * crtc->cursor->state->crtc_w; 834 entries = line_count * cpp * crtc->base.cursor->state->crtc_w;
839 entries = DIV_ROUND_UP(entries, cursor->cacheline_size); 835 entries = DIV_ROUND_UP(entries, cursor->cacheline_size);
840 *cursor_wm = entries + cursor->guard_size; 836 *cursor_wm = entries + cursor->guard_size;
841 837
842 return g4x_check_srwm(dev, 838 return g4x_check_srwm(dev_priv,
843 *display_wm, *cursor_wm, 839 *display_wm, *cursor_wm,
844 display, cursor); 840 display, cursor);
845} 841}
@@ -939,10 +935,8 @@ static unsigned int vlv_wm_method2(unsigned int pixel_rate,
939 return ret; 935 return ret;
940} 936}
941 937
942static void vlv_setup_wm_latency(struct drm_device *dev) 938static void vlv_setup_wm_latency(struct drm_i915_private *dev_priv)
943{ 939{
944 struct drm_i915_private *dev_priv = to_i915(dev);
945
946 /* all latencies in usec */ 940 /* all latencies in usec */
947 dev_priv->wm.pri_latency[VLV_WM_LEVEL_PM2] = 3; 941 dev_priv->wm.pri_latency[VLV_WM_LEVEL_PM2] = 3;
948 942
@@ -1329,20 +1323,19 @@ static void vlv_merge_wm(struct drm_device *dev,
1329 } 1323 }
1330} 1324}
1331 1325
1332static void vlv_update_wm(struct drm_crtc *crtc) 1326static void vlv_update_wm(struct intel_crtc *crtc)
1333{ 1327{
1334 struct drm_device *dev = crtc->dev; 1328 struct drm_device *dev = crtc->base.dev;
1335 struct drm_i915_private *dev_priv = to_i915(dev); 1329 struct drm_i915_private *dev_priv = to_i915(dev);
1336 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 1330 enum pipe pipe = crtc->pipe;
1337 enum pipe pipe = intel_crtc->pipe;
1338 struct vlv_wm_values wm = {}; 1331 struct vlv_wm_values wm = {};
1339 1332
1340 vlv_compute_wm(intel_crtc); 1333 vlv_compute_wm(crtc);
1341 vlv_merge_wm(dev, &wm); 1334 vlv_merge_wm(dev, &wm);
1342 1335
1343 if (memcmp(&dev_priv->wm.vlv, &wm, sizeof(wm)) == 0) { 1336 if (memcmp(&dev_priv->wm.vlv, &wm, sizeof(wm)) == 0) {
1344 /* FIXME should be part of crtc atomic commit */ 1337 /* FIXME should be part of crtc atomic commit */
1345 vlv_pipe_set_fifo_size(intel_crtc); 1338 vlv_pipe_set_fifo_size(crtc);
1346 return; 1339 return;
1347 } 1340 }
1348 1341
@@ -1358,9 +1351,9 @@ static void vlv_update_wm(struct drm_crtc *crtc)
1358 intel_set_memory_cxsr(dev_priv, false); 1351 intel_set_memory_cxsr(dev_priv, false);
1359 1352
1360 /* FIXME should be part of crtc atomic commit */ 1353 /* FIXME should be part of crtc atomic commit */
1361 vlv_pipe_set_fifo_size(intel_crtc); 1354 vlv_pipe_set_fifo_size(crtc);
1362 1355
1363 vlv_write_wm_values(intel_crtc, &wm); 1356 vlv_write_wm_values(crtc, &wm);
1364 1357
1365 DRM_DEBUG_KMS("Setting FIFO watermarks - %c: plane=%d, cursor=%d, " 1358 DRM_DEBUG_KMS("Setting FIFO watermarks - %c: plane=%d, cursor=%d, "
1366 "sprite0=%d, sprite1=%d, SR: plane=%d, cursor=%d level=%d cxsr=%d\n", 1359 "sprite0=%d, sprite1=%d, SR: plane=%d, cursor=%d level=%d cxsr=%d\n",
@@ -1384,30 +1377,29 @@ static void vlv_update_wm(struct drm_crtc *crtc)
1384 1377
1385#define single_plane_enabled(mask) is_power_of_2(mask) 1378#define single_plane_enabled(mask) is_power_of_2(mask)
1386 1379
1387static void g4x_update_wm(struct drm_crtc *crtc) 1380static void g4x_update_wm(struct intel_crtc *crtc)
1388{ 1381{
1389 struct drm_device *dev = crtc->dev; 1382 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1390 static const int sr_latency_ns = 12000; 1383 static const int sr_latency_ns = 12000;
1391 struct drm_i915_private *dev_priv = to_i915(dev);
1392 int planea_wm, planeb_wm, cursora_wm, cursorb_wm; 1384 int planea_wm, planeb_wm, cursora_wm, cursorb_wm;
1393 int plane_sr, cursor_sr; 1385 int plane_sr, cursor_sr;
1394 unsigned int enabled = 0; 1386 unsigned int enabled = 0;
1395 bool cxsr_enabled; 1387 bool cxsr_enabled;
1396 1388
1397 if (g4x_compute_wm0(dev, PIPE_A, 1389 if (g4x_compute_wm0(dev_priv, PIPE_A,
1398 &g4x_wm_info, pessimal_latency_ns, 1390 &g4x_wm_info, pessimal_latency_ns,
1399 &g4x_cursor_wm_info, pessimal_latency_ns, 1391 &g4x_cursor_wm_info, pessimal_latency_ns,
1400 &planea_wm, &cursora_wm)) 1392 &planea_wm, &cursora_wm))
1401 enabled |= 1 << PIPE_A; 1393 enabled |= 1 << PIPE_A;
1402 1394
1403 if (g4x_compute_wm0(dev, PIPE_B, 1395 if (g4x_compute_wm0(dev_priv, PIPE_B,
1404 &g4x_wm_info, pessimal_latency_ns, 1396 &g4x_wm_info, pessimal_latency_ns,
1405 &g4x_cursor_wm_info, pessimal_latency_ns, 1397 &g4x_cursor_wm_info, pessimal_latency_ns,
1406 &planeb_wm, &cursorb_wm)) 1398 &planeb_wm, &cursorb_wm))
1407 enabled |= 1 << PIPE_B; 1399 enabled |= 1 << PIPE_B;
1408 1400
1409 if (single_plane_enabled(enabled) && 1401 if (single_plane_enabled(enabled) &&
1410 g4x_compute_srwm(dev, ffs(enabled) - 1, 1402 g4x_compute_srwm(dev_priv, ffs(enabled) - 1,
1411 sr_latency_ns, 1403 sr_latency_ns,
1412 &g4x_wm_info, 1404 &g4x_wm_info,
1413 &g4x_cursor_wm_info, 1405 &g4x_cursor_wm_info,
@@ -1442,25 +1434,27 @@ static void g4x_update_wm(struct drm_crtc *crtc)
1442 intel_set_memory_cxsr(dev_priv, true); 1434 intel_set_memory_cxsr(dev_priv, true);
1443} 1435}
1444 1436
1445static void i965_update_wm(struct drm_crtc *unused_crtc) 1437static void i965_update_wm(struct intel_crtc *unused_crtc)
1446{ 1438{
1447 struct drm_device *dev = unused_crtc->dev; 1439 struct drm_i915_private *dev_priv = to_i915(unused_crtc->base.dev);
1448 struct drm_i915_private *dev_priv = to_i915(dev); 1440 struct intel_crtc *crtc;
1449 struct drm_crtc *crtc;
1450 int srwm = 1; 1441 int srwm = 1;
1451 int cursor_sr = 16; 1442 int cursor_sr = 16;
1452 bool cxsr_enabled; 1443 bool cxsr_enabled;
1453 1444
1454 /* Calc sr entries for one plane configs */ 1445 /* Calc sr entries for one plane configs */
1455 crtc = single_enabled_crtc(dev); 1446 crtc = single_enabled_crtc(dev_priv);
1456 if (crtc) { 1447 if (crtc) {
1457 /* self-refresh has much higher latency */ 1448 /* self-refresh has much higher latency */
1458 static const int sr_latency_ns = 12000; 1449 static const int sr_latency_ns = 12000;
1459 const struct drm_display_mode *adjusted_mode = &to_intel_crtc(crtc)->config->base.adjusted_mode; 1450 const struct drm_display_mode *adjusted_mode =
1451 &crtc->config->base.adjusted_mode;
1452 const struct drm_framebuffer *fb =
1453 crtc->base.primary->state->fb;
1460 int clock = adjusted_mode->crtc_clock; 1454 int clock = adjusted_mode->crtc_clock;
1461 int htotal = adjusted_mode->crtc_htotal; 1455 int htotal = adjusted_mode->crtc_htotal;
1462 int hdisplay = to_intel_crtc(crtc)->config->pipe_src_w; 1456 int hdisplay = crtc->config->pipe_src_w;
1463 int cpp = drm_format_plane_cpp(crtc->primary->state->fb->pixel_format, 0); 1457 int cpp = drm_format_plane_cpp(fb->pixel_format, 0);
1464 unsigned long line_time_us; 1458 unsigned long line_time_us;
1465 int entries; 1459 int entries;
1466 1460
@@ -1478,7 +1472,7 @@ static void i965_update_wm(struct drm_crtc *unused_crtc)
1478 entries, srwm); 1472 entries, srwm);
1479 1473
1480 entries = (((sr_latency_ns / line_time_us) + 1000) / 1000) * 1474 entries = (((sr_latency_ns / line_time_us) + 1000) / 1000) *
1481 cpp * crtc->cursor->state->crtc_w; 1475 cpp * crtc->base.cursor->state->crtc_w;
1482 entries = DIV_ROUND_UP(entries, 1476 entries = DIV_ROUND_UP(entries,
1483 i965_cursor_wm_info.cacheline_size); 1477 i965_cursor_wm_info.cacheline_size);
1484 cursor_sr = i965_cursor_wm_info.fifo_size - 1478 cursor_sr = i965_cursor_wm_info.fifo_size -
@@ -1516,34 +1510,38 @@ static void i965_update_wm(struct drm_crtc *unused_crtc)
1516 1510
1517#undef FW_WM 1511#undef FW_WM
1518 1512
1519static void i9xx_update_wm(struct drm_crtc *unused_crtc) 1513static void i9xx_update_wm(struct intel_crtc *unused_crtc)
1520{ 1514{
1521 struct drm_device *dev = unused_crtc->dev; 1515 struct drm_i915_private *dev_priv = to_i915(unused_crtc->base.dev);
1522 struct drm_i915_private *dev_priv = to_i915(dev);
1523 const struct intel_watermark_params *wm_info; 1516 const struct intel_watermark_params *wm_info;
1524 uint32_t fwater_lo; 1517 uint32_t fwater_lo;
1525 uint32_t fwater_hi; 1518 uint32_t fwater_hi;
1526 int cwm, srwm = 1; 1519 int cwm, srwm = 1;
1527 int fifo_size; 1520 int fifo_size;
1528 int planea_wm, planeb_wm; 1521 int planea_wm, planeb_wm;
1529 struct drm_crtc *crtc, *enabled = NULL; 1522 struct intel_crtc *crtc, *enabled = NULL;
1530 1523
1531 if (IS_I945GM(dev)) 1524 if (IS_I945GM(dev_priv))
1532 wm_info = &i945_wm_info; 1525 wm_info = &i945_wm_info;
1533 else if (!IS_GEN2(dev_priv)) 1526 else if (!IS_GEN2(dev_priv))
1534 wm_info = &i915_wm_info; 1527 wm_info = &i915_wm_info;
1535 else 1528 else
1536 wm_info = &i830_a_wm_info; 1529 wm_info = &i830_a_wm_info;
1537 1530
1538 fifo_size = dev_priv->display.get_fifo_size(dev, 0); 1531 fifo_size = dev_priv->display.get_fifo_size(dev_priv, 0);
1539 crtc = intel_get_crtc_for_plane(dev, 0); 1532 crtc = intel_get_crtc_for_plane(dev_priv, 0);
1540 if (intel_crtc_active(crtc)) { 1533 if (intel_crtc_active(crtc)) {
1541 const struct drm_display_mode *adjusted_mode; 1534 const struct drm_display_mode *adjusted_mode =
1542 int cpp = drm_format_plane_cpp(crtc->primary->state->fb->pixel_format, 0); 1535 &crtc->config->base.adjusted_mode;
1536 const struct drm_framebuffer *fb =
1537 crtc->base.primary->state->fb;
1538 int cpp;
1539
1543 if (IS_GEN2(dev_priv)) 1540 if (IS_GEN2(dev_priv))
1544 cpp = 4; 1541 cpp = 4;
1542 else
1543 cpp = drm_format_plane_cpp(fb->pixel_format, 0);
1545 1544
1546 adjusted_mode = &to_intel_crtc(crtc)->config->base.adjusted_mode;
1547 planea_wm = intel_calculate_wm(adjusted_mode->crtc_clock, 1545 planea_wm = intel_calculate_wm(adjusted_mode->crtc_clock,
1548 wm_info, fifo_size, cpp, 1546 wm_info, fifo_size, cpp,
1549 pessimal_latency_ns); 1547 pessimal_latency_ns);
@@ -1557,15 +1555,20 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
1557 if (IS_GEN2(dev_priv)) 1555 if (IS_GEN2(dev_priv))
1558 wm_info = &i830_bc_wm_info; 1556 wm_info = &i830_bc_wm_info;
1559 1557
1560 fifo_size = dev_priv->display.get_fifo_size(dev, 1); 1558 fifo_size = dev_priv->display.get_fifo_size(dev_priv, 1);
1561 crtc = intel_get_crtc_for_plane(dev, 1); 1559 crtc = intel_get_crtc_for_plane(dev_priv, 1);
1562 if (intel_crtc_active(crtc)) { 1560 if (intel_crtc_active(crtc)) {
1563 const struct drm_display_mode *adjusted_mode; 1561 const struct drm_display_mode *adjusted_mode =
1564 int cpp = drm_format_plane_cpp(crtc->primary->state->fb->pixel_format, 0); 1562 &crtc->config->base.adjusted_mode;
1563 const struct drm_framebuffer *fb =
1564 crtc->base.primary->state->fb;
1565 int cpp;
1566
1565 if (IS_GEN2(dev_priv)) 1567 if (IS_GEN2(dev_priv))
1566 cpp = 4; 1568 cpp = 4;
1569 else
1570 cpp = drm_format_plane_cpp(fb->pixel_format, 0);
1567 1571
1568 adjusted_mode = &to_intel_crtc(crtc)->config->base.adjusted_mode;
1569 planeb_wm = intel_calculate_wm(adjusted_mode->crtc_clock, 1572 planeb_wm = intel_calculate_wm(adjusted_mode->crtc_clock,
1570 wm_info, fifo_size, cpp, 1573 wm_info, fifo_size, cpp,
1571 pessimal_latency_ns); 1574 pessimal_latency_ns);
@@ -1584,7 +1587,7 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
1584 if (IS_I915GM(dev_priv) && enabled) { 1587 if (IS_I915GM(dev_priv) && enabled) {
1585 struct drm_i915_gem_object *obj; 1588 struct drm_i915_gem_object *obj;
1586 1589
1587 obj = intel_fb_obj(enabled->primary->state->fb); 1590 obj = intel_fb_obj(enabled->base.primary->state->fb);
1588 1591
1589 /* self-refresh seems busted with untiled */ 1592 /* self-refresh seems busted with untiled */
1590 if (!i915_gem_object_is_tiled(obj)) 1593 if (!i915_gem_object_is_tiled(obj))
@@ -1600,19 +1603,24 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
1600 intel_set_memory_cxsr(dev_priv, false); 1603 intel_set_memory_cxsr(dev_priv, false);
1601 1604
1602 /* Calc sr entries for one plane configs */ 1605 /* Calc sr entries for one plane configs */
1603 if (HAS_FW_BLC(dev) && enabled) { 1606 if (HAS_FW_BLC(dev_priv) && enabled) {
1604 /* self-refresh has much higher latency */ 1607 /* self-refresh has much higher latency */
1605 static const int sr_latency_ns = 6000; 1608 static const int sr_latency_ns = 6000;
1606 const struct drm_display_mode *adjusted_mode = &to_intel_crtc(enabled)->config->base.adjusted_mode; 1609 const struct drm_display_mode *adjusted_mode =
1610 &enabled->config->base.adjusted_mode;
1611 const struct drm_framebuffer *fb =
1612 enabled->base.primary->state->fb;
1607 int clock = adjusted_mode->crtc_clock; 1613 int clock = adjusted_mode->crtc_clock;
1608 int htotal = adjusted_mode->crtc_htotal; 1614 int htotal = adjusted_mode->crtc_htotal;
1609 int hdisplay = to_intel_crtc(enabled)->config->pipe_src_w; 1615 int hdisplay = enabled->config->pipe_src_w;
1610 int cpp = drm_format_plane_cpp(enabled->primary->state->fb->pixel_format, 0); 1616 int cpp;
1611 unsigned long line_time_us; 1617 unsigned long line_time_us;
1612 int entries; 1618 int entries;
1613 1619
1614 if (IS_I915GM(dev_priv) || IS_I945GM(dev_priv)) 1620 if (IS_I915GM(dev_priv) || IS_I945GM(dev_priv))
1615 cpp = 4; 1621 cpp = 4;
1622 else
1623 cpp = drm_format_plane_cpp(fb->pixel_format, 0);
1616 1624
1617 line_time_us = max(htotal * 1000 / clock, 1); 1625 line_time_us = max(htotal * 1000 / clock, 1);
1618 1626
@@ -1649,23 +1657,22 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
1649 intel_set_memory_cxsr(dev_priv, true); 1657 intel_set_memory_cxsr(dev_priv, true);
1650} 1658}
1651 1659
1652static void i845_update_wm(struct drm_crtc *unused_crtc) 1660static void i845_update_wm(struct intel_crtc *unused_crtc)
1653{ 1661{
1654 struct drm_device *dev = unused_crtc->dev; 1662 struct drm_i915_private *dev_priv = to_i915(unused_crtc->base.dev);
1655 struct drm_i915_private *dev_priv = to_i915(dev); 1663 struct intel_crtc *crtc;
1656 struct drm_crtc *crtc;
1657 const struct drm_display_mode *adjusted_mode; 1664 const struct drm_display_mode *adjusted_mode;
1658 uint32_t fwater_lo; 1665 uint32_t fwater_lo;
1659 int planea_wm; 1666 int planea_wm;
1660 1667
1661 crtc = single_enabled_crtc(dev); 1668 crtc = single_enabled_crtc(dev_priv);
1662 if (crtc == NULL) 1669 if (crtc == NULL)
1663 return; 1670 return;
1664 1671
1665 adjusted_mode = &to_intel_crtc(crtc)->config->base.adjusted_mode; 1672 adjusted_mode = &crtc->config->base.adjusted_mode;
1666 planea_wm = intel_calculate_wm(adjusted_mode->crtc_clock, 1673 planea_wm = intel_calculate_wm(adjusted_mode->crtc_clock,
1667 &i845_wm_info, 1674 &i845_wm_info,
1668 dev_priv->display.get_fifo_size(dev, 0), 1675 dev_priv->display.get_fifo_size(dev_priv, 0),
1669 4, pessimal_latency_ns); 1676 4, pessimal_latency_ns);
1670 fwater_lo = I915_READ(FW_BLC) & ~0xfff; 1677 fwater_lo = I915_READ(FW_BLC) & ~0xfff;
1671 fwater_lo |= (3<<8) | planea_wm; 1678 fwater_lo |= (3<<8) | planea_wm;
@@ -2078,10 +2085,9 @@ hsw_compute_linetime_wm(const struct intel_crtc_state *cstate)
2078 PIPE_WM_LINETIME_TIME(linetime); 2085 PIPE_WM_LINETIME_TIME(linetime);
2079} 2086}
2080 2087
2081static void intel_read_wm_latency(struct drm_device *dev, uint16_t wm[8]) 2088static void intel_read_wm_latency(struct drm_i915_private *dev_priv,
2089 uint16_t wm[8])
2082{ 2090{
2083 struct drm_i915_private *dev_priv = to_i915(dev);
2084
2085 if (IS_GEN9(dev_priv)) { 2091 if (IS_GEN9(dev_priv)) {
2086 uint32_t val; 2092 uint32_t val;
2087 int ret, i; 2093 int ret, i;
@@ -2167,14 +2173,14 @@ static void intel_read_wm_latency(struct drm_device *dev, uint16_t wm[8])
2167 wm[2] = (sskpd >> 12) & 0xFF; 2173 wm[2] = (sskpd >> 12) & 0xFF;
2168 wm[3] = (sskpd >> 20) & 0x1FF; 2174 wm[3] = (sskpd >> 20) & 0x1FF;
2169 wm[4] = (sskpd >> 32) & 0x1FF; 2175 wm[4] = (sskpd >> 32) & 0x1FF;
2170 } else if (INTEL_INFO(dev)->gen >= 6) { 2176 } else if (INTEL_GEN(dev_priv) >= 6) {
2171 uint32_t sskpd = I915_READ(MCH_SSKPD); 2177 uint32_t sskpd = I915_READ(MCH_SSKPD);
2172 2178
2173 wm[0] = (sskpd >> SSKPD_WM0_SHIFT) & SSKPD_WM_MASK; 2179 wm[0] = (sskpd >> SSKPD_WM0_SHIFT) & SSKPD_WM_MASK;
2174 wm[1] = (sskpd >> SSKPD_WM1_SHIFT) & SSKPD_WM_MASK; 2180 wm[1] = (sskpd >> SSKPD_WM1_SHIFT) & SSKPD_WM_MASK;
2175 wm[2] = (sskpd >> SSKPD_WM2_SHIFT) & SSKPD_WM_MASK; 2181 wm[2] = (sskpd >> SSKPD_WM2_SHIFT) & SSKPD_WM_MASK;
2176 wm[3] = (sskpd >> SSKPD_WM3_SHIFT) & SSKPD_WM_MASK; 2182 wm[3] = (sskpd >> SSKPD_WM3_SHIFT) & SSKPD_WM_MASK;
2177 } else if (INTEL_INFO(dev)->gen >= 5) { 2183 } else if (INTEL_GEN(dev_priv) >= 5) {
2178 uint32_t mltr = I915_READ(MLTR_ILK); 2184 uint32_t mltr = I915_READ(MLTR_ILK);
2179 2185
2180 /* ILK primary LP0 latency is 700 ns */ 2186 /* ILK primary LP0 latency is 700 ns */
@@ -2262,9 +2268,8 @@ static bool ilk_increase_wm_latency(struct drm_i915_private *dev_priv,
2262 return true; 2268 return true;
2263} 2269}
2264 2270
2265static void snb_wm_latency_quirk(struct drm_device *dev) 2271static void snb_wm_latency_quirk(struct drm_i915_private *dev_priv)
2266{ 2272{
2267 struct drm_i915_private *dev_priv = to_i915(dev);
2268 bool changed; 2273 bool changed;
2269 2274
2270 /* 2275 /*
@@ -2284,11 +2289,9 @@ static void snb_wm_latency_quirk(struct drm_device *dev)
2284 intel_print_wm_latency(dev_priv, "Cursor", dev_priv->wm.cur_latency); 2289 intel_print_wm_latency(dev_priv, "Cursor", dev_priv->wm.cur_latency);
2285} 2290}
2286 2291
2287static void ilk_setup_wm_latency(struct drm_device *dev) 2292static void ilk_setup_wm_latency(struct drm_i915_private *dev_priv)
2288{ 2293{
2289 struct drm_i915_private *dev_priv = to_i915(dev); 2294 intel_read_wm_latency(dev_priv, dev_priv->wm.pri_latency);
2290
2291 intel_read_wm_latency(dev, dev_priv->wm.pri_latency);
2292 2295
2293 memcpy(dev_priv->wm.spr_latency, dev_priv->wm.pri_latency, 2296 memcpy(dev_priv->wm.spr_latency, dev_priv->wm.pri_latency,
2294 sizeof(dev_priv->wm.pri_latency)); 2297 sizeof(dev_priv->wm.pri_latency));
@@ -2303,14 +2306,12 @@ static void ilk_setup_wm_latency(struct drm_device *dev)
2303 intel_print_wm_latency(dev_priv, "Cursor", dev_priv->wm.cur_latency); 2306 intel_print_wm_latency(dev_priv, "Cursor", dev_priv->wm.cur_latency);
2304 2307
2305 if (IS_GEN6(dev_priv)) 2308 if (IS_GEN6(dev_priv))
2306 snb_wm_latency_quirk(dev); 2309 snb_wm_latency_quirk(dev_priv);
2307} 2310}
2308 2311
2309static void skl_setup_wm_latency(struct drm_device *dev) 2312static void skl_setup_wm_latency(struct drm_i915_private *dev_priv)
2310{ 2313{
2311 struct drm_i915_private *dev_priv = to_i915(dev); 2314 intel_read_wm_latency(dev_priv, dev_priv->wm.skl_latency);
2312
2313 intel_read_wm_latency(dev, dev_priv->wm.skl_latency);
2314 intel_print_wm_latency(dev_priv, "Gen9 Plane", dev_priv->wm.skl_latency); 2315 intel_print_wm_latency(dev_priv, "Gen9 Plane", dev_priv->wm.skl_latency);
2315} 2316}
2316 2317
@@ -3041,7 +3042,7 @@ bool intel_can_enable_sagv(struct drm_atomic_state *state)
3041 3042
3042 /* Since we're now guaranteed to only have one active CRTC... */ 3043 /* Since we're now guaranteed to only have one active CRTC... */
3043 pipe = ffs(intel_state->active_crtcs) - 1; 3044 pipe = ffs(intel_state->active_crtcs) - 1;
3044 crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); 3045 crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
3045 cstate = to_intel_crtc_state(crtc->base.state); 3046 cstate = to_intel_crtc_state(crtc->base.state);
3046 3047
3047 if (crtc->base.state->adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) 3048 if (crtc->base.state->adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE)
@@ -3160,7 +3161,7 @@ void skl_ddb_get_hw_state(struct drm_i915_private *dev_priv,
3160 if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) 3161 if (!intel_display_power_get_if_enabled(dev_priv, power_domain))
3161 continue; 3162 continue;
3162 3163
3163 for_each_plane(dev_priv, pipe, plane) { 3164 for_each_universal_plane(dev_priv, pipe, plane) {
3164 val = I915_READ(PLANE_BUF_CFG(pipe, plane)); 3165 val = I915_READ(PLANE_BUF_CFG(pipe, plane));
3165 skl_ddb_entry_init_from_hw(&ddb->plane[pipe][plane], 3166 skl_ddb_entry_init_from_hw(&ddb->plane[pipe][plane],
3166 val); 3167 val);
@@ -3262,49 +3263,39 @@ skl_plane_relative_data_rate(const struct intel_crtc_state *cstate,
3262 * 3 * 4096 * 8192 * 4 < 2^32 3263 * 3 * 4096 * 8192 * 4 < 2^32
3263 */ 3264 */
3264static unsigned int 3265static unsigned int
3265skl_get_total_relative_data_rate(struct intel_crtc_state *intel_cstate) 3266skl_get_total_relative_data_rate(struct intel_crtc_state *intel_cstate,
3267 unsigned *plane_data_rate,
3268 unsigned *plane_y_data_rate)
3266{ 3269{
3267 struct drm_crtc_state *cstate = &intel_cstate->base; 3270 struct drm_crtc_state *cstate = &intel_cstate->base;
3268 struct drm_atomic_state *state = cstate->state; 3271 struct drm_atomic_state *state = cstate->state;
3269 struct drm_crtc *crtc = cstate->crtc; 3272 struct drm_plane *plane;
3270 struct drm_device *dev = crtc->dev;
3271 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
3272 const struct drm_plane *plane;
3273 const struct intel_plane *intel_plane; 3273 const struct intel_plane *intel_plane;
3274 struct drm_plane_state *pstate; 3274 const struct drm_plane_state *pstate;
3275 unsigned int rate, total_data_rate = 0; 3275 unsigned int rate, total_data_rate = 0;
3276 int id; 3276 int id;
3277 int i;
3278 3277
3279 if (WARN_ON(!state)) 3278 if (WARN_ON(!state))
3280 return 0; 3279 return 0;
3281 3280
3282 /* Calculate and cache data rate for each plane */ 3281 /* Calculate and cache data rate for each plane */
3283 for_each_plane_in_state(state, plane, pstate, i) { 3282 drm_atomic_crtc_state_for_each_plane_state(plane, pstate, cstate) {
3284 id = skl_wm_plane_id(to_intel_plane(plane)); 3283 id = skl_wm_plane_id(to_intel_plane(plane));
3285 intel_plane = to_intel_plane(plane); 3284 intel_plane = to_intel_plane(plane);
3286 3285
3287 if (intel_plane->pipe != intel_crtc->pipe)
3288 continue;
3289
3290 /* packed/uv */ 3286 /* packed/uv */
3291 rate = skl_plane_relative_data_rate(intel_cstate, 3287 rate = skl_plane_relative_data_rate(intel_cstate,
3292 pstate, 0); 3288 pstate, 0);
3293 intel_cstate->wm.skl.plane_data_rate[id] = rate; 3289 plane_data_rate[id] = rate;
3290
3291 total_data_rate += rate;
3294 3292
3295 /* y-plane */ 3293 /* y-plane */
3296 rate = skl_plane_relative_data_rate(intel_cstate, 3294 rate = skl_plane_relative_data_rate(intel_cstate,
3297 pstate, 1); 3295 pstate, 1);
3298 intel_cstate->wm.skl.plane_y_data_rate[id] = rate; 3296 plane_y_data_rate[id] = rate;
3299 }
3300 3297
3301 /* Calculate CRTC's total data rate from cached values */ 3298 total_data_rate += rate;
3302 for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
3303 int id = skl_wm_plane_id(intel_plane);
3304
3305 /* packed/uv */
3306 total_data_rate += intel_cstate->wm.skl.plane_data_rate[id];
3307 total_data_rate += intel_cstate->wm.skl.plane_y_data_rate[id];
3308 } 3299 }
3309 3300
3310 return total_data_rate; 3301 return total_data_rate;
@@ -3373,6 +3364,30 @@ skl_ddb_min_alloc(const struct drm_plane_state *pstate,
3373 return DIV_ROUND_UP((4 * src_w * plane_bpp), 512) * min_scanlines/4 + 3; 3364 return DIV_ROUND_UP((4 * src_w * plane_bpp), 512) * min_scanlines/4 + 3;
3374} 3365}
3375 3366
3367static void
3368skl_ddb_calc_min(const struct intel_crtc_state *cstate, int num_active,
3369 uint16_t *minimum, uint16_t *y_minimum)
3370{
3371 const struct drm_plane_state *pstate;
3372 struct drm_plane *plane;
3373
3374 drm_atomic_crtc_state_for_each_plane_state(plane, pstate, &cstate->base) {
3375 struct intel_plane *intel_plane = to_intel_plane(plane);
3376 int id = skl_wm_plane_id(intel_plane);
3377
3378 if (id == PLANE_CURSOR)
3379 continue;
3380
3381 if (!pstate->visible)
3382 continue;
3383
3384 minimum[id] = skl_ddb_min_alloc(pstate, 0);
3385 y_minimum[id] = skl_ddb_min_alloc(pstate, 1);
3386 }
3387
3388 minimum[PLANE_CURSOR] = skl_cursor_allocation(num_active);
3389}
3390
3376static int 3391static int
3377skl_allocate_pipe_ddb(struct intel_crtc_state *cstate, 3392skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
3378 struct skl_ddb_allocation *ddb /* out */) 3393 struct skl_ddb_allocation *ddb /* out */)
@@ -3381,17 +3396,16 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
3381 struct drm_crtc *crtc = cstate->base.crtc; 3396 struct drm_crtc *crtc = cstate->base.crtc;
3382 struct drm_device *dev = crtc->dev; 3397 struct drm_device *dev = crtc->dev;
3383 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 3398 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
3384 struct intel_plane *intel_plane;
3385 struct drm_plane *plane;
3386 struct drm_plane_state *pstate;
3387 enum pipe pipe = intel_crtc->pipe; 3399 enum pipe pipe = intel_crtc->pipe;
3388 struct skl_ddb_entry *alloc = &cstate->wm.skl.ddb; 3400 struct skl_ddb_entry *alloc = &cstate->wm.skl.ddb;
3389 uint16_t alloc_size, start, cursor_blocks; 3401 uint16_t alloc_size, start;
3390 uint16_t *minimum = cstate->wm.skl.minimum_blocks; 3402 uint16_t minimum[I915_MAX_PLANES] = {};
3391 uint16_t *y_minimum = cstate->wm.skl.minimum_y_blocks; 3403 uint16_t y_minimum[I915_MAX_PLANES] = {};
3392 unsigned int total_data_rate; 3404 unsigned int total_data_rate;
3393 int num_active; 3405 int num_active;
3394 int id, i; 3406 int id, i;
3407 unsigned plane_data_rate[I915_MAX_PLANES] = {};
3408 unsigned plane_y_data_rate[I915_MAX_PLANES] = {};
3395 3409
3396 /* Clear the partitioning for disabled planes. */ 3410 /* Clear the partitioning for disabled planes. */
3397 memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe])); 3411 memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe]));
@@ -3412,57 +3426,43 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
3412 return 0; 3426 return 0;
3413 } 3427 }
3414 3428
3415 cursor_blocks = skl_cursor_allocation(num_active); 3429 skl_ddb_calc_min(cstate, num_active, minimum, y_minimum);
3416 ddb->plane[pipe][PLANE_CURSOR].start = alloc->end - cursor_blocks;
3417 ddb->plane[pipe][PLANE_CURSOR].end = alloc->end;
3418
3419 alloc_size -= cursor_blocks;
3420
3421 /* 1. Allocate the mininum required blocks for each active plane */
3422 for_each_plane_in_state(state, plane, pstate, i) {
3423 intel_plane = to_intel_plane(plane);
3424 id = skl_wm_plane_id(intel_plane);
3425
3426 if (intel_plane->pipe != pipe)
3427 continue;
3428
3429 if (!to_intel_plane_state(pstate)->base.visible) {
3430 minimum[id] = 0;
3431 y_minimum[id] = 0;
3432 continue;
3433 }
3434 if (plane->type == DRM_PLANE_TYPE_CURSOR) {
3435 minimum[id] = 0;
3436 y_minimum[id] = 0;
3437 continue;
3438 }
3439 3430
3440 minimum[id] = skl_ddb_min_alloc(pstate, 0); 3431 /*
3441 y_minimum[id] = skl_ddb_min_alloc(pstate, 1); 3432 * 1. Allocate the mininum required blocks for each active plane
3442 } 3433 * and allocate the cursor, it doesn't require extra allocation
3434 * proportional to the data rate.
3435 */
3443 3436
3444 for (i = 0; i < PLANE_CURSOR; i++) { 3437 for (i = 0; i < I915_MAX_PLANES; i++) {
3445 alloc_size -= minimum[i]; 3438 alloc_size -= minimum[i];
3446 alloc_size -= y_minimum[i]; 3439 alloc_size -= y_minimum[i];
3447 } 3440 }
3448 3441
3442 ddb->plane[pipe][PLANE_CURSOR].start = alloc->end - minimum[PLANE_CURSOR];
3443 ddb->plane[pipe][PLANE_CURSOR].end = alloc->end;
3444
3449 /* 3445 /*
3450 * 2. Distribute the remaining space in proportion to the amount of 3446 * 2. Distribute the remaining space in proportion to the amount of
3451 * data each plane needs to fetch from memory. 3447 * data each plane needs to fetch from memory.
3452 * 3448 *
3453 * FIXME: we may not allocate every single block here. 3449 * FIXME: we may not allocate every single block here.
3454 */ 3450 */
3455 total_data_rate = skl_get_total_relative_data_rate(cstate); 3451 total_data_rate = skl_get_total_relative_data_rate(cstate,
3452 plane_data_rate,
3453 plane_y_data_rate);
3456 if (total_data_rate == 0) 3454 if (total_data_rate == 0)
3457 return 0; 3455 return 0;
3458 3456
3459 start = alloc->start; 3457 start = alloc->start;
3460 for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) { 3458 for (id = 0; id < I915_MAX_PLANES; id++) {
3461 unsigned int data_rate, y_data_rate; 3459 unsigned int data_rate, y_data_rate;
3462 uint16_t plane_blocks, y_plane_blocks = 0; 3460 uint16_t plane_blocks, y_plane_blocks = 0;
3463 int id = skl_wm_plane_id(intel_plane);
3464 3461
3465 data_rate = cstate->wm.skl.plane_data_rate[id]; 3462 if (id == PLANE_CURSOR)
3463 continue;
3464
3465 data_rate = plane_data_rate[id];
3466 3466
3467 /* 3467 /*
3468 * allocation for (packed formats) or (uv-plane part of planar format): 3468 * allocation for (packed formats) or (uv-plane part of planar format):
@@ -3484,7 +3484,7 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
3484 /* 3484 /*
3485 * allocation for y_plane part of planar format: 3485 * allocation for y_plane part of planar format:
3486 */ 3486 */
3487 y_data_rate = cstate->wm.skl.plane_y_data_rate[id]; 3487 y_data_rate = plane_y_data_rate[id];
3488 3488
3489 y_plane_blocks = y_minimum[id]; 3489 y_plane_blocks = y_minimum[id];
3490 y_plane_blocks += div_u64((uint64_t)alloc_size * y_data_rate, 3490 y_plane_blocks += div_u64((uint64_t)alloc_size * y_data_rate,
@@ -3930,11 +3930,11 @@ bool skl_ddb_allocation_overlaps(struct drm_atomic_state *state,
3930} 3930}
3931 3931
3932static int skl_update_pipe_wm(struct drm_crtc_state *cstate, 3932static int skl_update_pipe_wm(struct drm_crtc_state *cstate,
3933 struct skl_ddb_allocation *ddb, /* out */ 3933 const struct skl_pipe_wm *old_pipe_wm,
3934 struct skl_pipe_wm *pipe_wm, /* out */ 3934 struct skl_pipe_wm *pipe_wm, /* out */
3935 struct skl_ddb_allocation *ddb, /* out */
3935 bool *changed /* out */) 3936 bool *changed /* out */)
3936{ 3937{
3937 struct intel_crtc *intel_crtc = to_intel_crtc(cstate->crtc);
3938 struct intel_crtc_state *intel_cstate = to_intel_crtc_state(cstate); 3938 struct intel_crtc_state *intel_cstate = to_intel_crtc_state(cstate);
3939 int ret; 3939 int ret;
3940 3940
@@ -3942,7 +3942,7 @@ static int skl_update_pipe_wm(struct drm_crtc_state *cstate,
3942 if (ret) 3942 if (ret)
3943 return ret; 3943 return ret;
3944 3944
3945 if (!memcmp(&intel_crtc->wm.active.skl, pipe_wm, sizeof(*pipe_wm))) 3945 if (!memcmp(old_pipe_wm, pipe_wm, sizeof(*pipe_wm)))
3946 *changed = false; 3946 *changed = false;
3947 else 3947 else
3948 *changed = true; 3948 *changed = true;
@@ -3981,7 +3981,7 @@ skl_ddb_add_affected_planes(struct intel_crtc_state *cstate)
3981 3981
3982 WARN_ON(!drm_atomic_get_existing_crtc_state(state, crtc)); 3982 WARN_ON(!drm_atomic_get_existing_crtc_state(state, crtc));
3983 3983
3984 drm_for_each_plane_mask(plane, dev, crtc->state->plane_mask) { 3984 drm_for_each_plane_mask(plane, dev, cstate->base.plane_mask) {
3985 id = skl_wm_plane_id(to_intel_plane(plane)); 3985 id = skl_wm_plane_id(to_intel_plane(plane));
3986 3986
3987 if (skl_ddb_entry_equal(&cur_ddb->plane[pipe][id], 3987 if (skl_ddb_entry_equal(&cur_ddb->plane[pipe][id],
@@ -4096,45 +4096,31 @@ skl_print_wm_changes(const struct drm_atomic_state *state)
4096 to_intel_atomic_state(state); 4096 to_intel_atomic_state(state);
4097 const struct drm_crtc *crtc; 4097 const struct drm_crtc *crtc;
4098 const struct drm_crtc_state *cstate; 4098 const struct drm_crtc_state *cstate;
4099 const struct drm_plane *plane;
4100 const struct intel_plane *intel_plane; 4099 const struct intel_plane *intel_plane;
4101 const struct drm_plane_state *pstate;
4102 const struct skl_ddb_allocation *old_ddb = &dev_priv->wm.skl_hw.ddb; 4100 const struct skl_ddb_allocation *old_ddb = &dev_priv->wm.skl_hw.ddb;
4103 const struct skl_ddb_allocation *new_ddb = &intel_state->wm_results.ddb; 4101 const struct skl_ddb_allocation *new_ddb = &intel_state->wm_results.ddb;
4104 enum pipe pipe;
4105 int id; 4102 int id;
4106 int i, j; 4103 int i;
4107 4104
4108 for_each_crtc_in_state(state, crtc, cstate, i) { 4105 for_each_crtc_in_state(state, crtc, cstate, i) {
4109 pipe = to_intel_crtc(crtc)->pipe; 4106 const struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
4107 enum pipe pipe = intel_crtc->pipe;
4110 4108
4111 for_each_plane_in_state(state, plane, pstate, j) { 4109 for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
4112 const struct skl_ddb_entry *old, *new; 4110 const struct skl_ddb_entry *old, *new;
4113 4111
4114 intel_plane = to_intel_plane(plane);
4115 id = skl_wm_plane_id(intel_plane); 4112 id = skl_wm_plane_id(intel_plane);
4116 old = &old_ddb->plane[pipe][id]; 4113 old = &old_ddb->plane[pipe][id];
4117 new = &new_ddb->plane[pipe][id]; 4114 new = &new_ddb->plane[pipe][id];
4118 4115
4119 if (intel_plane->pipe != pipe)
4120 continue;
4121
4122 if (skl_ddb_entry_equal(old, new)) 4116 if (skl_ddb_entry_equal(old, new))
4123 continue; 4117 continue;
4124 4118
4125 if (id != PLANE_CURSOR) { 4119 DRM_DEBUG_ATOMIC("[PLANE:%d:%s] ddb (%d - %d) -> (%d - %d)\n",
4126 DRM_DEBUG_ATOMIC("[PLANE:%d:plane %d%c] ddb (%d - %d) -> (%d - %d)\n", 4120 intel_plane->base.base.id,
4127 plane->base.id, id + 1, 4121 intel_plane->base.name,
4128 pipe_name(pipe), 4122 old->start, old->end,
4129 old->start, old->end, 4123 new->start, new->end);
4130 new->start, new->end);
4131 } else {
4132 DRM_DEBUG_ATOMIC("[PLANE:%d:cursor %c] ddb (%d - %d) -> (%d - %d)\n",
4133 plane->base.id,
4134 pipe_name(pipe),
4135 old->start, old->end,
4136 new->start, new->end);
4137 }
4138 } 4124 }
4139 } 4125 }
4140} 4126}
@@ -4183,10 +4169,12 @@ skl_compute_wm(struct drm_atomic_state *state)
4183 for_each_crtc_in_state(state, crtc, cstate, i) { 4169 for_each_crtc_in_state(state, crtc, cstate, i) {
4184 struct intel_crtc_state *intel_cstate = 4170 struct intel_crtc_state *intel_cstate =
4185 to_intel_crtc_state(cstate); 4171 to_intel_crtc_state(cstate);
4172 const struct skl_pipe_wm *old_pipe_wm =
4173 &to_intel_crtc_state(crtc->state)->wm.skl.optimal;
4186 4174
4187 pipe_wm = &intel_cstate->wm.skl.optimal; 4175 pipe_wm = &intel_cstate->wm.skl.optimal;
4188 ret = skl_update_pipe_wm(cstate, &results->ddb, pipe_wm, 4176 ret = skl_update_pipe_wm(cstate, old_pipe_wm, pipe_wm,
4189 &changed); 4177 &results->ddb, &changed);
4190 if (ret) 4178 if (ret)
4191 return ret; 4179 return ret;
4192 4180
@@ -4205,22 +4193,19 @@ skl_compute_wm(struct drm_atomic_state *state)
4205 return 0; 4193 return 0;
4206} 4194}
4207 4195
4208static void skl_update_wm(struct drm_crtc *crtc) 4196static void skl_update_wm(struct intel_crtc *intel_crtc)
4209{ 4197{
4210 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 4198 struct drm_device *dev = intel_crtc->base.dev;
4211 struct drm_device *dev = crtc->dev;
4212 struct drm_i915_private *dev_priv = to_i915(dev); 4199 struct drm_i915_private *dev_priv = to_i915(dev);
4213 struct skl_wm_values *results = &dev_priv->wm.skl_results; 4200 struct skl_wm_values *results = &dev_priv->wm.skl_results;
4214 struct skl_wm_values *hw_vals = &dev_priv->wm.skl_hw; 4201 struct skl_wm_values *hw_vals = &dev_priv->wm.skl_hw;
4215 struct intel_crtc_state *cstate = to_intel_crtc_state(crtc->state); 4202 struct intel_crtc_state *cstate = to_intel_crtc_state(intel_crtc->base.state);
4216 struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal; 4203 struct skl_pipe_wm *pipe_wm = &cstate->wm.skl.optimal;
4217 enum pipe pipe = intel_crtc->pipe; 4204 enum pipe pipe = intel_crtc->pipe;
4218 4205
4219 if ((results->dirty_pipes & drm_crtc_mask(crtc)) == 0) 4206 if ((results->dirty_pipes & drm_crtc_mask(&intel_crtc->base)) == 0)
4220 return; 4207 return;
4221 4208
4222 intel_crtc->wm.active.skl = *pipe_wm;
4223
4224 mutex_lock(&dev_priv->wm.wm_mutex); 4209 mutex_lock(&dev_priv->wm.wm_mutex);
4225 4210
4226 /* 4211 /*
@@ -4229,10 +4214,10 @@ static void skl_update_wm(struct drm_crtc *crtc)
4229 * the pipe's shut off, just do so here. Already active pipes will have 4214 * the pipe's shut off, just do so here. Already active pipes will have
4230 * their watermarks updated once we update their planes. 4215 * their watermarks updated once we update their planes.
4231 */ 4216 */
4232 if (crtc->state->active_changed) { 4217 if (intel_crtc->base.state->active_changed) {
4233 int plane; 4218 int plane;
4234 4219
4235 for (plane = 0; plane < intel_num_planes(intel_crtc); plane++) 4220 for_each_universal_plane(dev_priv, pipe, plane)
4236 skl_write_plane_wm(intel_crtc, &pipe_wm->planes[plane], 4221 skl_write_plane_wm(intel_crtc, &pipe_wm->planes[plane],
4237 &results->ddb, plane); 4222 &results->ddb, plane);
4238 4223
@@ -4388,10 +4373,8 @@ void skl_wm_get_hw_state(struct drm_device *dev)
4388 4373
4389 skl_pipe_wm_get_hw_state(crtc, &cstate->wm.skl.optimal); 4374 skl_pipe_wm_get_hw_state(crtc, &cstate->wm.skl.optimal);
4390 4375
4391 if (intel_crtc->active) { 4376 if (intel_crtc->active)
4392 hw->dirty_pipes |= drm_crtc_mask(crtc); 4377 hw->dirty_pipes |= drm_crtc_mask(crtc);
4393 intel_crtc->wm.active.skl = cstate->wm.skl.optimal;
4394 }
4395 } 4378 }
4396 4379
4397 if (dev_priv->active_crtcs) { 4380 if (dev_priv->active_crtcs) {
@@ -4553,11 +4536,11 @@ void vlv_wm_get_hw_state(struct drm_device *dev)
4553 plane->wm.fifo_size = 63; 4536 plane->wm.fifo_size = 63;
4554 break; 4537 break;
4555 case DRM_PLANE_TYPE_PRIMARY: 4538 case DRM_PLANE_TYPE_PRIMARY:
4556 plane->wm.fifo_size = vlv_get_fifo_size(dev, plane->pipe, 0); 4539 plane->wm.fifo_size = vlv_get_fifo_size(dev_priv, plane->pipe, 0);
4557 break; 4540 break;
4558 case DRM_PLANE_TYPE_OVERLAY: 4541 case DRM_PLANE_TYPE_OVERLAY:
4559 sprite = plane->plane; 4542 sprite = plane->plane;
4560 plane->wm.fifo_size = vlv_get_fifo_size(dev, plane->pipe, sprite + 1); 4543 plane->wm.fifo_size = vlv_get_fifo_size(dev_priv, plane->pipe, sprite + 1);
4561 break; 4544 break;
4562 } 4545 }
4563 } 4546 }
@@ -4670,9 +4653,9 @@ void ilk_wm_get_hw_state(struct drm_device *dev)
4670 * We don't use the sprite, so we can ignore that. And on Crestline we have 4653 * We don't use the sprite, so we can ignore that. And on Crestline we have
4671 * to set the non-SR watermarks to 8. 4654 * to set the non-SR watermarks to 8.
4672 */ 4655 */
4673void intel_update_watermarks(struct drm_crtc *crtc) 4656void intel_update_watermarks(struct intel_crtc *crtc)
4674{ 4657{
4675 struct drm_i915_private *dev_priv = to_i915(crtc->dev); 4658 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
4676 4659
4677 if (dev_priv->display.update_wm) 4660 if (dev_priv->display.update_wm)
4678 dev_priv->display.update_wm(crtc); 4661 dev_priv->display.update_wm(crtc);
@@ -5878,7 +5861,7 @@ static void valleyview_cleanup_pctx(struct drm_i915_private *dev_priv)
5878 if (WARN_ON(!dev_priv->vlv_pctx)) 5861 if (WARN_ON(!dev_priv->vlv_pctx))
5879 return; 5862 return;
5880 5863
5881 i915_gem_object_put_unlocked(dev_priv->vlv_pctx); 5864 i915_gem_object_put(dev_priv->vlv_pctx);
5882 dev_priv->vlv_pctx = NULL; 5865 dev_priv->vlv_pctx = NULL;
5883} 5866}
5884 5867
@@ -6862,10 +6845,8 @@ void intel_autoenable_gt_powersave(struct drm_i915_private *dev_priv)
6862 } 6845 }
6863} 6846}
6864 6847
6865static void ibx_init_clock_gating(struct drm_device *dev) 6848static void ibx_init_clock_gating(struct drm_i915_private *dev_priv)
6866{ 6849{
6867 struct drm_i915_private *dev_priv = to_i915(dev);
6868
6869 /* 6850 /*
6870 * On Ibex Peak and Cougar Point, we need to disable clock 6851 * On Ibex Peak and Cougar Point, we need to disable clock
6871 * gating for the panel power sequencer or it will fail to 6852 * gating for the panel power sequencer or it will fail to
@@ -6874,9 +6855,8 @@ static void ibx_init_clock_gating(struct drm_device *dev)
6874 I915_WRITE(SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE); 6855 I915_WRITE(SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE);
6875} 6856}
6876 6857
6877static void g4x_disable_trickle_feed(struct drm_device *dev) 6858static void g4x_disable_trickle_feed(struct drm_i915_private *dev_priv)
6878{ 6859{
6879 struct drm_i915_private *dev_priv = to_i915(dev);
6880 enum pipe pipe; 6860 enum pipe pipe;
6881 6861
6882 for_each_pipe(dev_priv, pipe) { 6862 for_each_pipe(dev_priv, pipe) {
@@ -6889,10 +6869,8 @@ static void g4x_disable_trickle_feed(struct drm_device *dev)
6889 } 6869 }
6890} 6870}
6891 6871
6892static void ilk_init_lp_watermarks(struct drm_device *dev) 6872static void ilk_init_lp_watermarks(struct drm_i915_private *dev_priv)
6893{ 6873{
6894 struct drm_i915_private *dev_priv = to_i915(dev);
6895
6896 I915_WRITE(WM3_LP_ILK, I915_READ(WM3_LP_ILK) & ~WM1_LP_SR_EN); 6874 I915_WRITE(WM3_LP_ILK, I915_READ(WM3_LP_ILK) & ~WM1_LP_SR_EN);
6897 I915_WRITE(WM2_LP_ILK, I915_READ(WM2_LP_ILK) & ~WM1_LP_SR_EN); 6875 I915_WRITE(WM2_LP_ILK, I915_READ(WM2_LP_ILK) & ~WM1_LP_SR_EN);
6898 I915_WRITE(WM1_LP_ILK, I915_READ(WM1_LP_ILK) & ~WM1_LP_SR_EN); 6876 I915_WRITE(WM1_LP_ILK, I915_READ(WM1_LP_ILK) & ~WM1_LP_SR_EN);
@@ -6903,9 +6881,8 @@ static void ilk_init_lp_watermarks(struct drm_device *dev)
6903 */ 6881 */
6904} 6882}
6905 6883
6906static void ironlake_init_clock_gating(struct drm_device *dev) 6884static void ironlake_init_clock_gating(struct drm_i915_private *dev_priv)
6907{ 6885{
6908 struct drm_i915_private *dev_priv = to_i915(dev);
6909 uint32_t dspclk_gate = ILK_VRHUNIT_CLOCK_GATE_DISABLE; 6886 uint32_t dspclk_gate = ILK_VRHUNIT_CLOCK_GATE_DISABLE;
6910 6887
6911 /* 6888 /*
@@ -6937,7 +6914,7 @@ static void ironlake_init_clock_gating(struct drm_device *dev)
6937 (I915_READ(DISP_ARB_CTL) | 6914 (I915_READ(DISP_ARB_CTL) |
6938 DISP_FBC_WM_DIS)); 6915 DISP_FBC_WM_DIS));
6939 6916
6940 ilk_init_lp_watermarks(dev); 6917 ilk_init_lp_watermarks(dev_priv);
6941 6918
6942 /* 6919 /*
6943 * Based on the document from hardware guys the following bits 6920 * Based on the document from hardware guys the following bits
@@ -6972,14 +6949,13 @@ static void ironlake_init_clock_gating(struct drm_device *dev)
6972 /* WaDisable_RenderCache_OperationalFlush:ilk */ 6949 /* WaDisable_RenderCache_OperationalFlush:ilk */
6973 I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE)); 6950 I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
6974 6951
6975 g4x_disable_trickle_feed(dev); 6952 g4x_disable_trickle_feed(dev_priv);
6976 6953
6977 ibx_init_clock_gating(dev); 6954 ibx_init_clock_gating(dev_priv);
6978} 6955}
6979 6956
6980static void cpt_init_clock_gating(struct drm_device *dev) 6957static void cpt_init_clock_gating(struct drm_i915_private *dev_priv)
6981{ 6958{
6982 struct drm_i915_private *dev_priv = to_i915(dev);
6983 int pipe; 6959 int pipe;
6984 uint32_t val; 6960 uint32_t val;
6985 6961
@@ -7014,9 +6990,8 @@ static void cpt_init_clock_gating(struct drm_device *dev)
7014 } 6990 }
7015} 6991}
7016 6992
7017static void gen6_check_mch_setup(struct drm_device *dev) 6993static void gen6_check_mch_setup(struct drm_i915_private *dev_priv)
7018{ 6994{
7019 struct drm_i915_private *dev_priv = to_i915(dev);
7020 uint32_t tmp; 6995 uint32_t tmp;
7021 6996
7022 tmp = I915_READ(MCH_SSKPD); 6997 tmp = I915_READ(MCH_SSKPD);
@@ -7025,9 +7000,8 @@ static void gen6_check_mch_setup(struct drm_device *dev)
7025 tmp); 7000 tmp);
7026} 7001}
7027 7002
7028static void gen6_init_clock_gating(struct drm_device *dev) 7003static void gen6_init_clock_gating(struct drm_i915_private *dev_priv)
7029{ 7004{
7030 struct drm_i915_private *dev_priv = to_i915(dev);
7031 uint32_t dspclk_gate = ILK_VRHUNIT_CLOCK_GATE_DISABLE; 7005 uint32_t dspclk_gate = ILK_VRHUNIT_CLOCK_GATE_DISABLE;
7032 7006
7033 I915_WRITE(ILK_DSPCLK_GATE_D, dspclk_gate); 7007 I915_WRITE(ILK_DSPCLK_GATE_D, dspclk_gate);
@@ -7054,7 +7028,7 @@ static void gen6_init_clock_gating(struct drm_device *dev)
7054 I915_WRITE(GEN6_GT_MODE, 7028 I915_WRITE(GEN6_GT_MODE,
7055 _MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4)); 7029 _MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4));
7056 7030
7057 ilk_init_lp_watermarks(dev); 7031 ilk_init_lp_watermarks(dev_priv);
7058 7032
7059 I915_WRITE(CACHE_MODE_0, 7033 I915_WRITE(CACHE_MODE_0,
7060 _MASKED_BIT_DISABLE(CM0_STC_EVICT_DISABLE_LRA_SNB)); 7034 _MASKED_BIT_DISABLE(CM0_STC_EVICT_DISABLE_LRA_SNB));
@@ -7115,11 +7089,11 @@ static void gen6_init_clock_gating(struct drm_device *dev)
7115 ILK_DPARBUNIT_CLOCK_GATE_ENABLE | 7089 ILK_DPARBUNIT_CLOCK_GATE_ENABLE |
7116 ILK_DPFDUNIT_CLOCK_GATE_ENABLE); 7090 ILK_DPFDUNIT_CLOCK_GATE_ENABLE);
7117 7091
7118 g4x_disable_trickle_feed(dev); 7092 g4x_disable_trickle_feed(dev_priv);
7119 7093
7120 cpt_init_clock_gating(dev); 7094 cpt_init_clock_gating(dev_priv);
7121 7095
7122 gen6_check_mch_setup(dev); 7096 gen6_check_mch_setup(dev_priv);
7123} 7097}
7124 7098
7125static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv) 7099static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
@@ -7140,10 +7114,8 @@ static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
7140 I915_WRITE(GEN7_FF_THREAD_MODE, reg); 7114 I915_WRITE(GEN7_FF_THREAD_MODE, reg);
7141} 7115}
7142 7116
7143static void lpt_init_clock_gating(struct drm_device *dev) 7117static void lpt_init_clock_gating(struct drm_i915_private *dev_priv)
7144{ 7118{
7145 struct drm_i915_private *dev_priv = to_i915(dev);
7146
7147 /* 7119 /*
7148 * TODO: this bit should only be enabled when really needed, then 7120 * TODO: this bit should only be enabled when really needed, then
7149 * disabled when not needed anymore in order to save power. 7121 * disabled when not needed anymore in order to save power.
@@ -7159,10 +7131,8 @@ static void lpt_init_clock_gating(struct drm_device *dev)
7159 TRANS_CHICKEN1_DP0UNIT_GC_DISABLE); 7131 TRANS_CHICKEN1_DP0UNIT_GC_DISABLE);
7160} 7132}
7161 7133
7162static void lpt_suspend_hw(struct drm_device *dev) 7134static void lpt_suspend_hw(struct drm_i915_private *dev_priv)
7163{ 7135{
7164 struct drm_i915_private *dev_priv = to_i915(dev);
7165
7166 if (HAS_PCH_LPT_LP(dev_priv)) { 7136 if (HAS_PCH_LPT_LP(dev_priv)) {
7167 uint32_t val = I915_READ(SOUTH_DSPCLK_GATE_D); 7137 uint32_t val = I915_READ(SOUTH_DSPCLK_GATE_D);
7168 7138
@@ -7194,11 +7164,9 @@ static void gen8_set_l3sqc_credits(struct drm_i915_private *dev_priv,
7194 I915_WRITE(GEN7_MISCCPCTL, misccpctl); 7164 I915_WRITE(GEN7_MISCCPCTL, misccpctl);
7195} 7165}
7196 7166
7197static void kabylake_init_clock_gating(struct drm_device *dev) 7167static void kabylake_init_clock_gating(struct drm_i915_private *dev_priv)
7198{ 7168{
7199 struct drm_i915_private *dev_priv = dev->dev_private; 7169 gen9_init_clock_gating(dev_priv);
7200
7201 gen9_init_clock_gating(dev);
7202 7170
7203 /* WaDisableSDEUnitClockGating:kbl */ 7171 /* WaDisableSDEUnitClockGating:kbl */
7204 if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_B0)) 7172 if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_B0))
@@ -7215,11 +7183,9 @@ static void kabylake_init_clock_gating(struct drm_device *dev)
7215 ILK_DPFC_NUKE_ON_ANY_MODIFICATION); 7183 ILK_DPFC_NUKE_ON_ANY_MODIFICATION);
7216} 7184}
7217 7185
7218static void skylake_init_clock_gating(struct drm_device *dev) 7186static void skylake_init_clock_gating(struct drm_i915_private *dev_priv)
7219{ 7187{
7220 struct drm_i915_private *dev_priv = dev->dev_private; 7188 gen9_init_clock_gating(dev_priv);
7221
7222 gen9_init_clock_gating(dev);
7223 7189
7224 /* WAC6entrylatency:skl */ 7190 /* WAC6entrylatency:skl */
7225 I915_WRITE(FBC_LLC_READ_CTRL, I915_READ(FBC_LLC_READ_CTRL) | 7191 I915_WRITE(FBC_LLC_READ_CTRL, I915_READ(FBC_LLC_READ_CTRL) |
@@ -7230,12 +7196,11 @@ static void skylake_init_clock_gating(struct drm_device *dev)
7230 ILK_DPFC_NUKE_ON_ANY_MODIFICATION); 7196 ILK_DPFC_NUKE_ON_ANY_MODIFICATION);
7231} 7197}
7232 7198
7233static void broadwell_init_clock_gating(struct drm_device *dev) 7199static void broadwell_init_clock_gating(struct drm_i915_private *dev_priv)
7234{ 7200{
7235 struct drm_i915_private *dev_priv = to_i915(dev);
7236 enum pipe pipe; 7201 enum pipe pipe;
7237 7202
7238 ilk_init_lp_watermarks(dev); 7203 ilk_init_lp_watermarks(dev_priv);
7239 7204
7240 /* WaSwitchSolVfFArbitrationPriority:bdw */ 7205 /* WaSwitchSolVfFArbitrationPriority:bdw */
7241 I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) | HSW_ECOCHK_ARB_PRIO_SOL); 7206 I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) | HSW_ECOCHK_ARB_PRIO_SOL);
@@ -7278,14 +7243,12 @@ static void broadwell_init_clock_gating(struct drm_device *dev)
7278 I915_WRITE(CHICKEN_PAR2_1, I915_READ(CHICKEN_PAR2_1) 7243 I915_WRITE(CHICKEN_PAR2_1, I915_READ(CHICKEN_PAR2_1)
7279 | KVM_CONFIG_CHANGE_NOTIFICATION_SELECT); 7244 | KVM_CONFIG_CHANGE_NOTIFICATION_SELECT);
7280 7245
7281 lpt_init_clock_gating(dev); 7246 lpt_init_clock_gating(dev_priv);
7282} 7247}
7283 7248
7284static void haswell_init_clock_gating(struct drm_device *dev) 7249static void haswell_init_clock_gating(struct drm_i915_private *dev_priv)
7285{ 7250{
7286 struct drm_i915_private *dev_priv = to_i915(dev); 7251 ilk_init_lp_watermarks(dev_priv);
7287
7288 ilk_init_lp_watermarks(dev);
7289 7252
7290 /* L3 caching of data atomics doesn't work -- disable it. */ 7253 /* L3 caching of data atomics doesn't work -- disable it. */
7291 I915_WRITE(HSW_SCRATCH1, HSW_SCRATCH1_L3_DATA_ATOMICS_DISABLE); 7254 I915_WRITE(HSW_SCRATCH1, HSW_SCRATCH1_L3_DATA_ATOMICS_DISABLE);
@@ -7334,15 +7297,14 @@ static void haswell_init_clock_gating(struct drm_device *dev)
7334 I915_WRITE(CHICKEN_PAR1_1, 7297 I915_WRITE(CHICKEN_PAR1_1,
7335 I915_READ(CHICKEN_PAR1_1) | FORCE_ARB_IDLE_PLANES); 7298 I915_READ(CHICKEN_PAR1_1) | FORCE_ARB_IDLE_PLANES);
7336 7299
7337 lpt_init_clock_gating(dev); 7300 lpt_init_clock_gating(dev_priv);
7338} 7301}
7339 7302
7340static void ivybridge_init_clock_gating(struct drm_device *dev) 7303static void ivybridge_init_clock_gating(struct drm_i915_private *dev_priv)
7341{ 7304{
7342 struct drm_i915_private *dev_priv = to_i915(dev);
7343 uint32_t snpcr; 7305 uint32_t snpcr;
7344 7306
7345 ilk_init_lp_watermarks(dev); 7307 ilk_init_lp_watermarks(dev_priv);
7346 7308
7347 I915_WRITE(ILK_DSPCLK_GATE_D, ILK_VRHUNIT_CLOCK_GATE_DISABLE); 7309 I915_WRITE(ILK_DSPCLK_GATE_D, ILK_VRHUNIT_CLOCK_GATE_DISABLE);
7348 7310
@@ -7399,7 +7361,7 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
7399 I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) | 7361 I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
7400 GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB); 7362 GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
7401 7363
7402 g4x_disable_trickle_feed(dev); 7364 g4x_disable_trickle_feed(dev_priv);
7403 7365
7404 gen7_setup_fixed_func_scheduler(dev_priv); 7366 gen7_setup_fixed_func_scheduler(dev_priv);
7405 7367
@@ -7430,15 +7392,13 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
7430 I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr); 7392 I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
7431 7393
7432 if (!HAS_PCH_NOP(dev_priv)) 7394 if (!HAS_PCH_NOP(dev_priv))
7433 cpt_init_clock_gating(dev); 7395 cpt_init_clock_gating(dev_priv);
7434 7396
7435 gen6_check_mch_setup(dev); 7397 gen6_check_mch_setup(dev_priv);
7436} 7398}
7437 7399
7438static void valleyview_init_clock_gating(struct drm_device *dev) 7400static void valleyview_init_clock_gating(struct drm_i915_private *dev_priv)
7439{ 7401{
7440 struct drm_i915_private *dev_priv = to_i915(dev);
7441
7442 /* WaDisableEarlyCull:vlv */ 7402 /* WaDisableEarlyCull:vlv */
7443 I915_WRITE(_3D_CHICKEN3, 7403 I915_WRITE(_3D_CHICKEN3,
7444 _MASKED_BIT_ENABLE(_3D_CHICKEN_SF_DISABLE_OBJEND_CULL)); 7404 _MASKED_BIT_ENABLE(_3D_CHICKEN_SF_DISABLE_OBJEND_CULL));
@@ -7517,10 +7477,8 @@ static void valleyview_init_clock_gating(struct drm_device *dev)
7517 I915_WRITE(VLV_GUNIT_CLOCK_GATE, GCFG_DIS); 7477 I915_WRITE(VLV_GUNIT_CLOCK_GATE, GCFG_DIS);
7518} 7478}
7519 7479
7520static void cherryview_init_clock_gating(struct drm_device *dev) 7480static void cherryview_init_clock_gating(struct drm_i915_private *dev_priv)
7521{ 7481{
7522 struct drm_i915_private *dev_priv = to_i915(dev);
7523
7524 /* WaVSRefCountFullforceMissDisable:chv */ 7482 /* WaVSRefCountFullforceMissDisable:chv */
7525 /* WaDSRefCountFullforceMissDisable:chv */ 7483 /* WaDSRefCountFullforceMissDisable:chv */
7526 I915_WRITE(GEN7_FF_THREAD_MODE, 7484 I915_WRITE(GEN7_FF_THREAD_MODE,
@@ -7553,9 +7511,8 @@ static void cherryview_init_clock_gating(struct drm_device *dev)
7553 I915_WRITE(HSW_GTT_CACHE_EN, GTT_CACHE_EN_ALL); 7511 I915_WRITE(HSW_GTT_CACHE_EN, GTT_CACHE_EN_ALL);
7554} 7512}
7555 7513
7556static void g4x_init_clock_gating(struct drm_device *dev) 7514static void g4x_init_clock_gating(struct drm_i915_private *dev_priv)
7557{ 7515{
7558 struct drm_i915_private *dev_priv = to_i915(dev);
7559 uint32_t dspclk_gate; 7516 uint32_t dspclk_gate;
7560 7517
7561 I915_WRITE(RENCLK_GATE_D1, 0); 7518 I915_WRITE(RENCLK_GATE_D1, 0);
@@ -7577,13 +7534,11 @@ static void g4x_init_clock_gating(struct drm_device *dev)
7577 /* WaDisable_RenderCache_OperationalFlush:g4x */ 7534 /* WaDisable_RenderCache_OperationalFlush:g4x */
7578 I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE)); 7535 I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
7579 7536
7580 g4x_disable_trickle_feed(dev); 7537 g4x_disable_trickle_feed(dev_priv);
7581} 7538}
7582 7539
7583static void crestline_init_clock_gating(struct drm_device *dev) 7540static void crestline_init_clock_gating(struct drm_i915_private *dev_priv)
7584{ 7541{
7585 struct drm_i915_private *dev_priv = to_i915(dev);
7586
7587 I915_WRITE(RENCLK_GATE_D1, I965_RCC_CLOCK_GATE_DISABLE); 7542 I915_WRITE(RENCLK_GATE_D1, I965_RCC_CLOCK_GATE_DISABLE);
7588 I915_WRITE(RENCLK_GATE_D2, 0); 7543 I915_WRITE(RENCLK_GATE_D2, 0);
7589 I915_WRITE(DSPCLK_GATE_D, 0); 7544 I915_WRITE(DSPCLK_GATE_D, 0);
@@ -7596,10 +7551,8 @@ static void crestline_init_clock_gating(struct drm_device *dev)
7596 I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE)); 7551 I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
7597} 7552}
7598 7553
7599static void broadwater_init_clock_gating(struct drm_device *dev) 7554static void broadwater_init_clock_gating(struct drm_i915_private *dev_priv)
7600{ 7555{
7601 struct drm_i915_private *dev_priv = to_i915(dev);
7602
7603 I915_WRITE(RENCLK_GATE_D1, I965_RCZ_CLOCK_GATE_DISABLE | 7556 I915_WRITE(RENCLK_GATE_D1, I965_RCZ_CLOCK_GATE_DISABLE |
7604 I965_RCC_CLOCK_GATE_DISABLE | 7557 I965_RCC_CLOCK_GATE_DISABLE |
7605 I965_RCPB_CLOCK_GATE_DISABLE | 7558 I965_RCPB_CLOCK_GATE_DISABLE |
@@ -7613,16 +7566,15 @@ static void broadwater_init_clock_gating(struct drm_device *dev)
7613 I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE)); 7566 I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
7614} 7567}
7615 7568
7616static void gen3_init_clock_gating(struct drm_device *dev) 7569static void gen3_init_clock_gating(struct drm_i915_private *dev_priv)
7617{ 7570{
7618 struct drm_i915_private *dev_priv = to_i915(dev);
7619 u32 dstate = I915_READ(D_STATE); 7571 u32 dstate = I915_READ(D_STATE);
7620 7572
7621 dstate |= DSTATE_PLL_D3_OFF | DSTATE_GFX_CLOCK_GATING | 7573 dstate |= DSTATE_PLL_D3_OFF | DSTATE_GFX_CLOCK_GATING |
7622 DSTATE_DOT_CLOCK_GATING; 7574 DSTATE_DOT_CLOCK_GATING;
7623 I915_WRITE(D_STATE, dstate); 7575 I915_WRITE(D_STATE, dstate);
7624 7576
7625 if (IS_PINEVIEW(dev)) 7577 if (IS_PINEVIEW(dev_priv))
7626 I915_WRITE(ECOSKPD, _MASKED_BIT_ENABLE(ECO_GATING_CX_ONLY)); 7578 I915_WRITE(ECOSKPD, _MASKED_BIT_ENABLE(ECO_GATING_CX_ONLY));
7627 7579
7628 /* IIR "flip pending" means done if this bit is set */ 7580 /* IIR "flip pending" means done if this bit is set */
@@ -7638,10 +7590,8 @@ static void gen3_init_clock_gating(struct drm_device *dev)
7638 _MASKED_BIT_ENABLE(MI_ARB_DISPLAY_TRICKLE_FEED_DISABLE)); 7590 _MASKED_BIT_ENABLE(MI_ARB_DISPLAY_TRICKLE_FEED_DISABLE));
7639} 7591}
7640 7592
7641static void i85x_init_clock_gating(struct drm_device *dev) 7593static void i85x_init_clock_gating(struct drm_i915_private *dev_priv)
7642{ 7594{
7643 struct drm_i915_private *dev_priv = to_i915(dev);
7644
7645 I915_WRITE(RENCLK_GATE_D1, SV_CLOCK_GATE_DISABLE); 7595 I915_WRITE(RENCLK_GATE_D1, SV_CLOCK_GATE_DISABLE);
7646 7596
7647 /* interrupts should cause a wake up from C3 */ 7597 /* interrupts should cause a wake up from C3 */
@@ -7652,10 +7602,8 @@ static void i85x_init_clock_gating(struct drm_device *dev)
7652 _MASKED_BIT_ENABLE(MEM_DISPLAY_TRICKLE_FEED_DISABLE)); 7602 _MASKED_BIT_ENABLE(MEM_DISPLAY_TRICKLE_FEED_DISABLE));
7653} 7603}
7654 7604
7655static void i830_init_clock_gating(struct drm_device *dev) 7605static void i830_init_clock_gating(struct drm_i915_private *dev_priv)
7656{ 7606{
7657 struct drm_i915_private *dev_priv = to_i915(dev);
7658
7659 I915_WRITE(DSPCLK_GATE_D, OVRUNIT_CLOCK_GATE_DISABLE); 7607 I915_WRITE(DSPCLK_GATE_D, OVRUNIT_CLOCK_GATE_DISABLE);
7660 7608
7661 I915_WRITE(MEM_MODE, 7609 I915_WRITE(MEM_MODE,
@@ -7663,20 +7611,18 @@ static void i830_init_clock_gating(struct drm_device *dev)
7663 _MASKED_BIT_ENABLE(MEM_DISPLAY_B_TRICKLE_FEED_DISABLE)); 7611 _MASKED_BIT_ENABLE(MEM_DISPLAY_B_TRICKLE_FEED_DISABLE));
7664} 7612}
7665 7613
7666void intel_init_clock_gating(struct drm_device *dev) 7614void intel_init_clock_gating(struct drm_i915_private *dev_priv)
7667{ 7615{
7668 struct drm_i915_private *dev_priv = to_i915(dev); 7616 dev_priv->display.init_clock_gating(dev_priv);
7669
7670 dev_priv->display.init_clock_gating(dev);
7671} 7617}
7672 7618
7673void intel_suspend_hw(struct drm_device *dev) 7619void intel_suspend_hw(struct drm_i915_private *dev_priv)
7674{ 7620{
7675 if (HAS_PCH_LPT(to_i915(dev))) 7621 if (HAS_PCH_LPT(dev_priv))
7676 lpt_suspend_hw(dev); 7622 lpt_suspend_hw(dev_priv);
7677} 7623}
7678 7624
7679static void nop_init_clock_gating(struct drm_device *dev) 7625static void nop_init_clock_gating(struct drm_i915_private *dev_priv)
7680{ 7626{
7681 DRM_DEBUG_KMS("No clock gating settings or workarounds applied.\n"); 7627 DRM_DEBUG_KMS("No clock gating settings or workarounds applied.\n");
7682} 7628}
@@ -7731,25 +7677,23 @@ void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv)
7731} 7677}
7732 7678
7733/* Set up chip specific power management-related functions */ 7679/* Set up chip specific power management-related functions */
7734void intel_init_pm(struct drm_device *dev) 7680void intel_init_pm(struct drm_i915_private *dev_priv)
7735{ 7681{
7736 struct drm_i915_private *dev_priv = to_i915(dev);
7737
7738 intel_fbc_init(dev_priv); 7682 intel_fbc_init(dev_priv);
7739 7683
7740 /* For cxsr */ 7684 /* For cxsr */
7741 if (IS_PINEVIEW(dev)) 7685 if (IS_PINEVIEW(dev_priv))
7742 i915_pineview_get_mem_freq(dev); 7686 i915_pineview_get_mem_freq(dev_priv);
7743 else if (IS_GEN5(dev_priv)) 7687 else if (IS_GEN5(dev_priv))
7744 i915_ironlake_get_mem_freq(dev); 7688 i915_ironlake_get_mem_freq(dev_priv);
7745 7689
7746 /* For FIFO watermark updates */ 7690 /* For FIFO watermark updates */
7747 if (INTEL_INFO(dev)->gen >= 9) { 7691 if (INTEL_GEN(dev_priv) >= 9) {
7748 skl_setup_wm_latency(dev); 7692 skl_setup_wm_latency(dev_priv);
7749 dev_priv->display.update_wm = skl_update_wm; 7693 dev_priv->display.update_wm = skl_update_wm;
7750 dev_priv->display.compute_global_watermarks = skl_compute_wm; 7694 dev_priv->display.compute_global_watermarks = skl_compute_wm;
7751 } else if (HAS_PCH_SPLIT(dev_priv)) { 7695 } else if (HAS_PCH_SPLIT(dev_priv)) {
7752 ilk_setup_wm_latency(dev); 7696 ilk_setup_wm_latency(dev_priv);
7753 7697
7754 if ((IS_GEN5(dev_priv) && dev_priv->wm.pri_latency[1] && 7698 if ((IS_GEN5(dev_priv) && dev_priv->wm.pri_latency[1] &&
7755 dev_priv->wm.spr_latency[1] && dev_priv->wm.cur_latency[1]) || 7699 dev_priv->wm.spr_latency[1] && dev_priv->wm.cur_latency[1]) ||
@@ -7767,12 +7711,12 @@ void intel_init_pm(struct drm_device *dev)
7767 "Disable CxSR\n"); 7711 "Disable CxSR\n");
7768 } 7712 }
7769 } else if (IS_CHERRYVIEW(dev_priv)) { 7713 } else if (IS_CHERRYVIEW(dev_priv)) {
7770 vlv_setup_wm_latency(dev); 7714 vlv_setup_wm_latency(dev_priv);
7771 dev_priv->display.update_wm = vlv_update_wm; 7715 dev_priv->display.update_wm = vlv_update_wm;
7772 } else if (IS_VALLEYVIEW(dev_priv)) { 7716 } else if (IS_VALLEYVIEW(dev_priv)) {
7773 vlv_setup_wm_latency(dev); 7717 vlv_setup_wm_latency(dev_priv);
7774 dev_priv->display.update_wm = vlv_update_wm; 7718 dev_priv->display.update_wm = vlv_update_wm;
7775 } else if (IS_PINEVIEW(dev)) { 7719 } else if (IS_PINEVIEW(dev_priv)) {
7776 if (!intel_get_cxsr_latency(IS_PINEVIEW_G(dev_priv), 7720 if (!intel_get_cxsr_latency(IS_PINEVIEW_G(dev_priv),
7777 dev_priv->is_ddr3, 7721 dev_priv->is_ddr3,
7778 dev_priv->fsb_freq, 7722 dev_priv->fsb_freq,
@@ -7795,7 +7739,7 @@ void intel_init_pm(struct drm_device *dev)
7795 dev_priv->display.update_wm = i9xx_update_wm; 7739 dev_priv->display.update_wm = i9xx_update_wm;
7796 dev_priv->display.get_fifo_size = i9xx_get_fifo_size; 7740 dev_priv->display.get_fifo_size = i9xx_get_fifo_size;
7797 } else if (IS_GEN2(dev_priv)) { 7741 } else if (IS_GEN2(dev_priv)) {
7798 if (INTEL_INFO(dev)->num_pipes == 1) { 7742 if (INTEL_INFO(dev_priv)->num_pipes == 1) {
7799 dev_priv->display.update_wm = i845_update_wm; 7743 dev_priv->display.update_wm = i845_update_wm;
7800 dev_priv->display.get_fifo_size = i845_get_fifo_size; 7744 dev_priv->display.get_fifo_size = i845_get_fifo_size;
7801 } else { 7745 } else {
@@ -8043,5 +7987,4 @@ void intel_pm_setup(struct drm_device *dev)
8043 7987
8044 dev_priv->pm.suspended = false; 7988 dev_priv->pm.suspended = false;
8045 atomic_set(&dev_priv->pm.wakeref_count, 0); 7989 atomic_set(&dev_priv->pm.wakeref_count, 0);
8046 atomic_set(&dev_priv->pm.atomic_seq, 0);
8047} 7990}
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 32786ba199b9..700e93d80616 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -648,7 +648,7 @@ static int intel_rcs_ctx_init(struct drm_i915_gem_request *req)
648 if (ret != 0) 648 if (ret != 0)
649 return ret; 649 return ret;
650 650
651 ret = i915_gem_render_state_init(req); 651 ret = i915_gem_render_state_emit(req);
652 if (ret) 652 if (ret)
653 return ret; 653 return ret;
654 654
@@ -1213,90 +1213,62 @@ static void render_ring_cleanup(struct intel_engine_cs *engine)
1213 i915_vma_unpin_and_release(&dev_priv->semaphore); 1213 i915_vma_unpin_and_release(&dev_priv->semaphore);
1214} 1214}
1215 1215
1216static int gen8_rcs_signal(struct drm_i915_gem_request *req) 1216static u32 *gen8_rcs_signal(struct drm_i915_gem_request *req, u32 *out)
1217{ 1217{
1218 struct intel_ring *ring = req->ring;
1219 struct drm_i915_private *dev_priv = req->i915; 1218 struct drm_i915_private *dev_priv = req->i915;
1220 struct intel_engine_cs *waiter; 1219 struct intel_engine_cs *waiter;
1221 enum intel_engine_id id; 1220 enum intel_engine_id id;
1222 int ret, num_rings;
1223
1224 num_rings = INTEL_INFO(dev_priv)->num_rings;
1225 ret = intel_ring_begin(req, (num_rings-1) * 8);
1226 if (ret)
1227 return ret;
1228 1221
1229 for_each_engine(waiter, dev_priv, id) { 1222 for_each_engine(waiter, dev_priv, id) {
1230 u64 gtt_offset = req->engine->semaphore.signal_ggtt[id]; 1223 u64 gtt_offset = req->engine->semaphore.signal_ggtt[id];
1231 if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID) 1224 if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID)
1232 continue; 1225 continue;
1233 1226
1234 intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(6)); 1227 *out++ = GFX_OP_PIPE_CONTROL(6);
1235 intel_ring_emit(ring, 1228 *out++ = (PIPE_CONTROL_GLOBAL_GTT_IVB |
1236 PIPE_CONTROL_GLOBAL_GTT_IVB | 1229 PIPE_CONTROL_QW_WRITE |
1237 PIPE_CONTROL_QW_WRITE | 1230 PIPE_CONTROL_CS_STALL);
1238 PIPE_CONTROL_CS_STALL); 1231 *out++ = lower_32_bits(gtt_offset);
1239 intel_ring_emit(ring, lower_32_bits(gtt_offset)); 1232 *out++ = upper_32_bits(gtt_offset);
1240 intel_ring_emit(ring, upper_32_bits(gtt_offset)); 1233 *out++ = req->global_seqno;
1241 intel_ring_emit(ring, req->fence.seqno); 1234 *out++ = 0;
1242 intel_ring_emit(ring, 0); 1235 *out++ = (MI_SEMAPHORE_SIGNAL |
1243 intel_ring_emit(ring, 1236 MI_SEMAPHORE_TARGET(waiter->hw_id));
1244 MI_SEMAPHORE_SIGNAL | 1237 *out++ = 0;
1245 MI_SEMAPHORE_TARGET(waiter->hw_id));
1246 intel_ring_emit(ring, 0);
1247 } 1238 }
1248 intel_ring_advance(ring);
1249 1239
1250 return 0; 1240 return out;
1251} 1241}
1252 1242
1253static int gen8_xcs_signal(struct drm_i915_gem_request *req) 1243static u32 *gen8_xcs_signal(struct drm_i915_gem_request *req, u32 *out)
1254{ 1244{
1255 struct intel_ring *ring = req->ring;
1256 struct drm_i915_private *dev_priv = req->i915; 1245 struct drm_i915_private *dev_priv = req->i915;
1257 struct intel_engine_cs *waiter; 1246 struct intel_engine_cs *waiter;
1258 enum intel_engine_id id; 1247 enum intel_engine_id id;
1259 int ret, num_rings;
1260
1261 num_rings = INTEL_INFO(dev_priv)->num_rings;
1262 ret = intel_ring_begin(req, (num_rings-1) * 6);
1263 if (ret)
1264 return ret;
1265 1248
1266 for_each_engine(waiter, dev_priv, id) { 1249 for_each_engine(waiter, dev_priv, id) {
1267 u64 gtt_offset = req->engine->semaphore.signal_ggtt[id]; 1250 u64 gtt_offset = req->engine->semaphore.signal_ggtt[id];
1268 if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID) 1251 if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID)
1269 continue; 1252 continue;
1270 1253
1271 intel_ring_emit(ring, 1254 *out++ = (MI_FLUSH_DW + 1) | MI_FLUSH_DW_OP_STOREDW;
1272 (MI_FLUSH_DW + 1) | MI_FLUSH_DW_OP_STOREDW); 1255 *out++ = lower_32_bits(gtt_offset) | MI_FLUSH_DW_USE_GTT;
1273 intel_ring_emit(ring, 1256 *out++ = upper_32_bits(gtt_offset);
1274 lower_32_bits(gtt_offset) | 1257 *out++ = req->global_seqno;
1275 MI_FLUSH_DW_USE_GTT); 1258 *out++ = (MI_SEMAPHORE_SIGNAL |
1276 intel_ring_emit(ring, upper_32_bits(gtt_offset)); 1259 MI_SEMAPHORE_TARGET(waiter->hw_id));
1277 intel_ring_emit(ring, req->fence.seqno); 1260 *out++ = 0;
1278 intel_ring_emit(ring,
1279 MI_SEMAPHORE_SIGNAL |
1280 MI_SEMAPHORE_TARGET(waiter->hw_id));
1281 intel_ring_emit(ring, 0);
1282 } 1261 }
1283 intel_ring_advance(ring);
1284 1262
1285 return 0; 1263 return out;
1286} 1264}
1287 1265
1288static int gen6_signal(struct drm_i915_gem_request *req) 1266static u32 *gen6_signal(struct drm_i915_gem_request *req, u32 *out)
1289{ 1267{
1290 struct intel_ring *ring = req->ring;
1291 struct drm_i915_private *dev_priv = req->i915; 1268 struct drm_i915_private *dev_priv = req->i915;
1292 struct intel_engine_cs *engine; 1269 struct intel_engine_cs *engine;
1293 enum intel_engine_id id; 1270 enum intel_engine_id id;
1294 int ret, num_rings; 1271 int num_rings = 0;
1295
1296 num_rings = INTEL_INFO(dev_priv)->num_rings;
1297 ret = intel_ring_begin(req, round_up((num_rings-1) * 3, 2));
1298 if (ret)
1299 return ret;
1300 1272
1301 for_each_engine(engine, dev_priv, id) { 1273 for_each_engine(engine, dev_priv, id) {
1302 i915_reg_t mbox_reg; 1274 i915_reg_t mbox_reg;
@@ -1306,101 +1278,78 @@ static int gen6_signal(struct drm_i915_gem_request *req)
1306 1278
1307 mbox_reg = req->engine->semaphore.mbox.signal[engine->hw_id]; 1279 mbox_reg = req->engine->semaphore.mbox.signal[engine->hw_id];
1308 if (i915_mmio_reg_valid(mbox_reg)) { 1280 if (i915_mmio_reg_valid(mbox_reg)) {
1309 intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1)); 1281 *out++ = MI_LOAD_REGISTER_IMM(1);
1310 intel_ring_emit_reg(ring, mbox_reg); 1282 *out++ = i915_mmio_reg_offset(mbox_reg);
1311 intel_ring_emit(ring, req->fence.seqno); 1283 *out++ = req->global_seqno;
1284 num_rings++;
1312 } 1285 }
1313 } 1286 }
1287 if (num_rings & 1)
1288 *out++ = MI_NOOP;
1314 1289
1315 /* If num_dwords was rounded, make sure the tail pointer is correct */ 1290 return out;
1316 if (num_rings % 2 == 0)
1317 intel_ring_emit(ring, MI_NOOP);
1318 intel_ring_advance(ring);
1319
1320 return 0;
1321} 1291}
1322 1292
1323static void i9xx_submit_request(struct drm_i915_gem_request *request) 1293static void i9xx_submit_request(struct drm_i915_gem_request *request)
1324{ 1294{
1325 struct drm_i915_private *dev_priv = request->i915; 1295 struct drm_i915_private *dev_priv = request->i915;
1326 1296
1327 I915_WRITE_TAIL(request->engine, 1297 I915_WRITE_TAIL(request->engine, request->tail);
1328 intel_ring_offset(request->ring, request->tail));
1329} 1298}
1330 1299
1331static int i9xx_emit_request(struct drm_i915_gem_request *req) 1300static void i9xx_emit_breadcrumb(struct drm_i915_gem_request *req,
1301 u32 *out)
1332{ 1302{
1333 struct intel_ring *ring = req->ring; 1303 *out++ = MI_STORE_DWORD_INDEX;
1334 int ret; 1304 *out++ = I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT;
1305 *out++ = req->global_seqno;
1306 *out++ = MI_USER_INTERRUPT;
1335 1307
1336 ret = intel_ring_begin(req, 4); 1308 req->tail = intel_ring_offset(req->ring, out);
1337 if (ret)
1338 return ret;
1339
1340 intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
1341 intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
1342 intel_ring_emit(ring, req->fence.seqno);
1343 intel_ring_emit(ring, MI_USER_INTERRUPT);
1344 intel_ring_advance(ring);
1345
1346 req->tail = ring->tail;
1347
1348 return 0;
1349} 1309}
1350 1310
1311static const int i9xx_emit_breadcrumb_sz = 4;
1312
1351/** 1313/**
1352 * gen6_sema_emit_request - Update the semaphore mailbox registers 1314 * gen6_sema_emit_breadcrumb - Update the semaphore mailbox registers
1353 * 1315 *
1354 * @request - request to write to the ring 1316 * @request - request to write to the ring
1355 * 1317 *
1356 * Update the mailbox registers in the *other* rings with the current seqno. 1318 * Update the mailbox registers in the *other* rings with the current seqno.
1357 * This acts like a signal in the canonical semaphore. 1319 * This acts like a signal in the canonical semaphore.
1358 */ 1320 */
1359static int gen6_sema_emit_request(struct drm_i915_gem_request *req) 1321static void gen6_sema_emit_breadcrumb(struct drm_i915_gem_request *req,
1322 u32 *out)
1360{ 1323{
1361 int ret; 1324 return i9xx_emit_breadcrumb(req,
1362 1325 req->engine->semaphore.signal(req, out));
1363 ret = req->engine->semaphore.signal(req);
1364 if (ret)
1365 return ret;
1366
1367 return i9xx_emit_request(req);
1368} 1326}
1369 1327
1370static int gen8_render_emit_request(struct drm_i915_gem_request *req) 1328static void gen8_render_emit_breadcrumb(struct drm_i915_gem_request *req,
1329 u32 *out)
1371{ 1330{
1372 struct intel_engine_cs *engine = req->engine; 1331 struct intel_engine_cs *engine = req->engine;
1373 struct intel_ring *ring = req->ring;
1374 int ret;
1375 1332
1376 if (engine->semaphore.signal) { 1333 if (engine->semaphore.signal)
1377 ret = engine->semaphore.signal(req); 1334 out = engine->semaphore.signal(req, out);
1378 if (ret)
1379 return ret;
1380 }
1381 1335
1382 ret = intel_ring_begin(req, 8); 1336 *out++ = GFX_OP_PIPE_CONTROL(6);
1383 if (ret) 1337 *out++ = (PIPE_CONTROL_GLOBAL_GTT_IVB |
1384 return ret;
1385
1386 intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(6));
1387 intel_ring_emit(ring, (PIPE_CONTROL_GLOBAL_GTT_IVB |
1388 PIPE_CONTROL_CS_STALL | 1338 PIPE_CONTROL_CS_STALL |
1389 PIPE_CONTROL_QW_WRITE)); 1339 PIPE_CONTROL_QW_WRITE);
1390 intel_ring_emit(ring, intel_hws_seqno_address(engine)); 1340 *out++ = intel_hws_seqno_address(engine);
1391 intel_ring_emit(ring, 0); 1341 *out++ = 0;
1392 intel_ring_emit(ring, i915_gem_request_get_seqno(req)); 1342 *out++ = req->global_seqno;
1393 /* We're thrashing one dword of HWS. */ 1343 /* We're thrashing one dword of HWS. */
1394 intel_ring_emit(ring, 0); 1344 *out++ = 0;
1395 intel_ring_emit(ring, MI_USER_INTERRUPT); 1345 *out++ = MI_USER_INTERRUPT;
1396 intel_ring_emit(ring, MI_NOOP); 1346 *out++ = MI_NOOP;
1397 intel_ring_advance(ring);
1398 1347
1399 req->tail = ring->tail; 1348 req->tail = intel_ring_offset(req->ring, out);
1400
1401 return 0;
1402} 1349}
1403 1350
1351static const int gen8_render_emit_breadcrumb_sz = 8;
1352
1404/** 1353/**
1405 * intel_ring_sync - sync the waiter to the signaller on seqno 1354 * intel_ring_sync - sync the waiter to the signaller on seqno
1406 * 1355 *
@@ -1427,7 +1376,7 @@ gen8_ring_sync_to(struct drm_i915_gem_request *req,
1427 MI_SEMAPHORE_WAIT | 1376 MI_SEMAPHORE_WAIT |
1428 MI_SEMAPHORE_GLOBAL_GTT | 1377 MI_SEMAPHORE_GLOBAL_GTT |
1429 MI_SEMAPHORE_SAD_GTE_SDD); 1378 MI_SEMAPHORE_SAD_GTE_SDD);
1430 intel_ring_emit(ring, signal->fence.seqno); 1379 intel_ring_emit(ring, signal->global_seqno);
1431 intel_ring_emit(ring, lower_32_bits(offset)); 1380 intel_ring_emit(ring, lower_32_bits(offset));
1432 intel_ring_emit(ring, upper_32_bits(offset)); 1381 intel_ring_emit(ring, upper_32_bits(offset));
1433 intel_ring_advance(ring); 1382 intel_ring_advance(ring);
@@ -1465,7 +1414,7 @@ gen6_ring_sync_to(struct drm_i915_gem_request *req,
1465 * seqno is >= the last seqno executed. However for hardware the 1414 * seqno is >= the last seqno executed. However for hardware the
1466 * comparison is strictly greater than. 1415 * comparison is strictly greater than.
1467 */ 1416 */
1468 intel_ring_emit(ring, signal->fence.seqno - 1); 1417 intel_ring_emit(ring, signal->global_seqno - 1);
1469 intel_ring_emit(ring, 0); 1418 intel_ring_emit(ring, 0);
1470 intel_ring_emit(ring, MI_NOOP); 1419 intel_ring_emit(ring, MI_NOOP);
1471 intel_ring_advance(ring); 1420 intel_ring_advance(ring);
@@ -1608,7 +1557,7 @@ hsw_vebox_irq_enable(struct intel_engine_cs *engine)
1608 struct drm_i915_private *dev_priv = engine->i915; 1557 struct drm_i915_private *dev_priv = engine->i915;
1609 1558
1610 I915_WRITE_IMR(engine, ~engine->irq_enable_mask); 1559 I915_WRITE_IMR(engine, ~engine->irq_enable_mask);
1611 gen6_enable_pm_irq(dev_priv, engine->irq_enable_mask); 1560 gen6_unmask_pm_irq(dev_priv, engine->irq_enable_mask);
1612} 1561}
1613 1562
1614static void 1563static void
@@ -1617,7 +1566,7 @@ hsw_vebox_irq_disable(struct intel_engine_cs *engine)
1617 struct drm_i915_private *dev_priv = engine->i915; 1566 struct drm_i915_private *dev_priv = engine->i915;
1618 1567
1619 I915_WRITE_IMR(engine, ~0); 1568 I915_WRITE_IMR(engine, ~0);
1620 gen6_disable_pm_irq(dev_priv, engine->irq_enable_mask); 1569 gen6_mask_pm_irq(dev_priv, engine->irq_enable_mask);
1621} 1570}
1622 1571
1623static void 1572static void
@@ -1762,14 +1711,19 @@ static void cleanup_phys_status_page(struct intel_engine_cs *engine)
1762static void cleanup_status_page(struct intel_engine_cs *engine) 1711static void cleanup_status_page(struct intel_engine_cs *engine)
1763{ 1712{
1764 struct i915_vma *vma; 1713 struct i915_vma *vma;
1714 struct drm_i915_gem_object *obj;
1765 1715
1766 vma = fetch_and_zero(&engine->status_page.vma); 1716 vma = fetch_and_zero(&engine->status_page.vma);
1767 if (!vma) 1717 if (!vma)
1768 return; 1718 return;
1769 1719
1720 obj = vma->obj;
1721
1770 i915_vma_unpin(vma); 1722 i915_vma_unpin(vma);
1771 i915_gem_object_unpin_map(vma->obj); 1723 i915_vma_close(vma);
1772 i915_vma_put(vma); 1724
1725 i915_gem_object_unpin_map(obj);
1726 __i915_gem_object_release_unless_active(obj);
1773} 1727}
1774 1728
1775static int init_status_page(struct intel_engine_cs *engine) 1729static int init_status_page(struct intel_engine_cs *engine)
@@ -1777,9 +1731,10 @@ static int init_status_page(struct intel_engine_cs *engine)
1777 struct drm_i915_gem_object *obj; 1731 struct drm_i915_gem_object *obj;
1778 struct i915_vma *vma; 1732 struct i915_vma *vma;
1779 unsigned int flags; 1733 unsigned int flags;
1734 void *vaddr;
1780 int ret; 1735 int ret;
1781 1736
1782 obj = i915_gem_object_create(&engine->i915->drm, 4096); 1737 obj = i915_gem_object_create_internal(engine->i915, 4096);
1783 if (IS_ERR(obj)) { 1738 if (IS_ERR(obj)) {
1784 DRM_ERROR("Failed to allocate status page\n"); 1739 DRM_ERROR("Failed to allocate status page\n");
1785 return PTR_ERR(obj); 1740 return PTR_ERR(obj);
@@ -1812,15 +1767,22 @@ static int init_status_page(struct intel_engine_cs *engine)
1812 if (ret) 1767 if (ret)
1813 goto err; 1768 goto err;
1814 1769
1770 vaddr = i915_gem_object_pin_map(obj, I915_MAP_WB);
1771 if (IS_ERR(vaddr)) {
1772 ret = PTR_ERR(vaddr);
1773 goto err_unpin;
1774 }
1775
1815 engine->status_page.vma = vma; 1776 engine->status_page.vma = vma;
1816 engine->status_page.ggtt_offset = i915_ggtt_offset(vma); 1777 engine->status_page.ggtt_offset = i915_ggtt_offset(vma);
1817 engine->status_page.page_addr = 1778 engine->status_page.page_addr = memset(vaddr, 0, 4096);
1818 i915_gem_object_pin_map(obj, I915_MAP_WB);
1819 1779
1820 DRM_DEBUG_DRIVER("%s hws offset: 0x%08x\n", 1780 DRM_DEBUG_DRIVER("%s hws offset: 0x%08x\n",
1821 engine->name, i915_ggtt_offset(vma)); 1781 engine->name, i915_ggtt_offset(vma));
1822 return 0; 1782 return 0;
1823 1783
1784err_unpin:
1785 i915_vma_unpin(vma);
1824err: 1786err:
1825 i915_gem_object_put(obj); 1787 i915_gem_object_put(obj);
1826 return ret; 1788 return ret;
@@ -1967,7 +1929,11 @@ intel_engine_create_ring(struct intel_engine_cs *engine, int size)
1967void 1929void
1968intel_ring_free(struct intel_ring *ring) 1930intel_ring_free(struct intel_ring *ring)
1969{ 1931{
1970 i915_vma_put(ring->vma); 1932 struct drm_i915_gem_object *obj = ring->vma->obj;
1933
1934 i915_vma_close(ring->vma);
1935 __i915_gem_object_release_unless_active(obj);
1936
1971 kfree(ring); 1937 kfree(ring);
1972} 1938}
1973 1939
@@ -1983,14 +1949,13 @@ static int intel_ring_context_pin(struct i915_gem_context *ctx,
1983 return 0; 1949 return 0;
1984 1950
1985 if (ce->state) { 1951 if (ce->state) {
1986 ret = i915_gem_object_set_to_gtt_domain(ce->state->obj, false); 1952 struct i915_vma *vma;
1987 if (ret)
1988 goto error;
1989 1953
1990 ret = i915_vma_pin(ce->state, 0, ctx->ggtt_alignment, 1954 vma = i915_gem_context_pin_legacy(ctx, PIN_HIGH);
1991 PIN_GLOBAL | PIN_HIGH); 1955 if (IS_ERR(vma)) {
1992 if (ret) 1956 ret = PTR_ERR(vma);
1993 goto error; 1957 goto error;
1958 }
1994 } 1959 }
1995 1960
1996 /* The kernel context is only used as a placeholder for flushing the 1961 /* The kernel context is only used as a placeholder for flushing the
@@ -2037,9 +2002,6 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine)
2037 2002
2038 intel_engine_setup_common(engine); 2003 intel_engine_setup_common(engine);
2039 2004
2040 memset(engine->semaphore.sync_seqno, 0,
2041 sizeof(engine->semaphore.sync_seqno));
2042
2043 ret = intel_engine_init_common(engine); 2005 ret = intel_engine_init_common(engine);
2044 if (ret) 2006 if (ret)
2045 goto error; 2007 goto error;
@@ -2155,7 +2117,9 @@ static int wait_for_space(struct drm_i915_gem_request *req, int bytes)
2155{ 2117{
2156 struct intel_ring *ring = req->ring; 2118 struct intel_ring *ring = req->ring;
2157 struct drm_i915_gem_request *target; 2119 struct drm_i915_gem_request *target;
2158 int ret; 2120 long timeout;
2121
2122 lockdep_assert_held(&req->i915->drm.struct_mutex);
2159 2123
2160 intel_ring_update_space(ring); 2124 intel_ring_update_space(ring);
2161 if (ring->space >= bytes) 2125 if (ring->space >= bytes)
@@ -2185,11 +2149,11 @@ static int wait_for_space(struct drm_i915_gem_request *req, int bytes)
2185 if (WARN_ON(&target->ring_link == &ring->request_list)) 2149 if (WARN_ON(&target->ring_link == &ring->request_list))
2186 return -ENOSPC; 2150 return -ENOSPC;
2187 2151
2188 ret = i915_wait_request(target, 2152 timeout = i915_wait_request(target,
2189 I915_WAIT_INTERRUPTIBLE | I915_WAIT_LOCKED, 2153 I915_WAIT_INTERRUPTIBLE | I915_WAIT_LOCKED,
2190 NULL, NO_WAITBOOST); 2154 MAX_SCHEDULE_TIMEOUT);
2191 if (ret) 2155 if (timeout < 0)
2192 return ret; 2156 return timeout;
2193 2157
2194 i915_gem_request_retire_upto(target); 2158 i915_gem_request_retire_upto(target);
2195 2159
@@ -2618,9 +2582,22 @@ static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv,
2618 engine->init_hw = init_ring_common; 2582 engine->init_hw = init_ring_common;
2619 engine->reset_hw = reset_ring_common; 2583 engine->reset_hw = reset_ring_common;
2620 2584
2621 engine->emit_request = i9xx_emit_request; 2585 engine->emit_breadcrumb = i9xx_emit_breadcrumb;
2622 if (i915.semaphores) 2586 engine->emit_breadcrumb_sz = i9xx_emit_breadcrumb_sz;
2623 engine->emit_request = gen6_sema_emit_request; 2587 if (i915.semaphores) {
2588 int num_rings;
2589
2590 engine->emit_breadcrumb = gen6_sema_emit_breadcrumb;
2591
2592 num_rings = hweight32(INTEL_INFO(dev_priv)->ring_mask) - 1;
2593 if (INTEL_GEN(dev_priv) >= 8) {
2594 engine->emit_breadcrumb_sz += num_rings * 6;
2595 } else {
2596 engine->emit_breadcrumb_sz += num_rings * 3;
2597 if (num_rings & 1)
2598 engine->emit_breadcrumb_sz++;
2599 }
2600 }
2624 engine->submit_request = i9xx_submit_request; 2601 engine->submit_request = i9xx_submit_request;
2625 2602
2626 if (INTEL_GEN(dev_priv) >= 8) 2603 if (INTEL_GEN(dev_priv) >= 8)
@@ -2647,10 +2624,18 @@ int intel_init_render_ring_buffer(struct intel_engine_cs *engine)
2647 2624
2648 if (INTEL_GEN(dev_priv) >= 8) { 2625 if (INTEL_GEN(dev_priv) >= 8) {
2649 engine->init_context = intel_rcs_ctx_init; 2626 engine->init_context = intel_rcs_ctx_init;
2650 engine->emit_request = gen8_render_emit_request; 2627 engine->emit_breadcrumb = gen8_render_emit_breadcrumb;
2628 engine->emit_breadcrumb_sz = gen8_render_emit_breadcrumb_sz;
2651 engine->emit_flush = gen8_render_ring_flush; 2629 engine->emit_flush = gen8_render_ring_flush;
2652 if (i915.semaphores) 2630 if (i915.semaphores) {
2631 int num_rings;
2632
2653 engine->semaphore.signal = gen8_rcs_signal; 2633 engine->semaphore.signal = gen8_rcs_signal;
2634
2635 num_rings =
2636 hweight32(INTEL_INFO(dev_priv)->ring_mask) - 1;
2637 engine->emit_breadcrumb_sz += num_rings * 6;
2638 }
2654 } else if (INTEL_GEN(dev_priv) >= 6) { 2639 } else if (INTEL_GEN(dev_priv) >= 6) {
2655 engine->init_context = intel_rcs_ctx_init; 2640 engine->init_context = intel_rcs_ctx_init;
2656 engine->emit_flush = gen7_render_ring_flush; 2641 engine->emit_flush = gen7_render_ring_flush;
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index 32b2e6332ccf..642b54692d0d 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -4,6 +4,7 @@
4#include <linux/hashtable.h> 4#include <linux/hashtable.h>
5#include "i915_gem_batch_pool.h" 5#include "i915_gem_batch_pool.h"
6#include "i915_gem_request.h" 6#include "i915_gem_request.h"
7#include "i915_gem_timeline.h"
7 8
8#define I915_CMD_HASH_ORDER 9 9#define I915_CMD_HASH_ORDER 9
9 10
@@ -157,6 +158,7 @@ struct i915_ctx_workarounds {
157}; 158};
158 159
159struct drm_i915_gem_request; 160struct drm_i915_gem_request;
161struct intel_render_state;
160 162
161struct intel_engine_cs { 163struct intel_engine_cs {
162 struct drm_i915_private *i915; 164 struct drm_i915_private *i915;
@@ -168,7 +170,6 @@ struct intel_engine_cs {
168 VCS2, /* Keep instances of the same type engine together. */ 170 VCS2, /* Keep instances of the same type engine together. */
169 VECS 171 VECS
170 } id; 172 } id;
171#define I915_NUM_ENGINES 5
172#define _VCS(n) (VCS + (n)) 173#define _VCS(n) (VCS + (n))
173 unsigned int exec_id; 174 unsigned int exec_id;
174 enum intel_engine_hw_id { 175 enum intel_engine_hw_id {
@@ -179,10 +180,12 @@ struct intel_engine_cs {
179 VCS2_HW 180 VCS2_HW
180 } hw_id; 181 } hw_id;
181 enum intel_engine_hw_id guc_id; /* XXX same as hw_id? */ 182 enum intel_engine_hw_id guc_id; /* XXX same as hw_id? */
182 u64 fence_context;
183 u32 mmio_base; 183 u32 mmio_base;
184 unsigned int irq_shift; 184 unsigned int irq_shift;
185 struct intel_ring *buffer; 185 struct intel_ring *buffer;
186 struct intel_timeline *timeline;
187
188 struct intel_render_state *render_state;
186 189
187 /* Rather than have every client wait upon all user interrupts, 190 /* Rather than have every client wait upon all user interrupts,
188 * with the herd waking after every interrupt and each doing the 191 * with the herd waking after every interrupt and each doing the
@@ -204,7 +207,7 @@ struct intel_engine_cs {
204 struct task_struct __rcu *irq_seqno_bh; /* bh for interrupts */ 207 struct task_struct __rcu *irq_seqno_bh; /* bh for interrupts */
205 bool irq_posted; 208 bool irq_posted;
206 209
207 spinlock_t lock; /* protects the lists of requests */ 210 spinlock_t lock; /* protects the lists of requests; irqsafe */
208 struct rb_root waiters; /* sorted by retirement, priority */ 211 struct rb_root waiters; /* sorted by retirement, priority */
209 struct rb_root signals; /* sorted by retirement */ 212 struct rb_root signals; /* sorted by retirement */
210 struct intel_wait *first_wait; /* oldest waiter by retirement */ 213 struct intel_wait *first_wait; /* oldest waiter by retirement */
@@ -252,7 +255,9 @@ struct intel_engine_cs {
252#define I915_DISPATCH_SECURE BIT(0) 255#define I915_DISPATCH_SECURE BIT(0)
253#define I915_DISPATCH_PINNED BIT(1) 256#define I915_DISPATCH_PINNED BIT(1)
254#define I915_DISPATCH_RS BIT(2) 257#define I915_DISPATCH_RS BIT(2)
255 int (*emit_request)(struct drm_i915_gem_request *req); 258 void (*emit_breadcrumb)(struct drm_i915_gem_request *req,
259 u32 *out);
260 int emit_breadcrumb_sz;
256 261
257 /* Pass the request to the hardware queue (e.g. directly into 262 /* Pass the request to the hardware queue (e.g. directly into
258 * the legacy ringbuffer or to the end of an execlist). 263 * the legacy ringbuffer or to the end of an execlist).
@@ -309,8 +314,6 @@ struct intel_engine_cs {
309 * ie. transpose of f(x, y) 314 * ie. transpose of f(x, y)
310 */ 315 */
311 struct { 316 struct {
312 u32 sync_seqno[I915_NUM_ENGINES-1];
313
314 union { 317 union {
315#define GEN6_SEMAPHORE_LAST VECS_HW 318#define GEN6_SEMAPHORE_LAST VECS_HW
316#define GEN6_NUM_SEMAPHORES (GEN6_SEMAPHORE_LAST + 1) 319#define GEN6_NUM_SEMAPHORES (GEN6_SEMAPHORE_LAST + 1)
@@ -327,7 +330,7 @@ struct intel_engine_cs {
327 /* AKA wait() */ 330 /* AKA wait() */
328 int (*sync_to)(struct drm_i915_gem_request *req, 331 int (*sync_to)(struct drm_i915_gem_request *req,
329 struct drm_i915_gem_request *signal); 332 struct drm_i915_gem_request *signal);
330 int (*signal)(struct drm_i915_gem_request *req); 333 u32 *(*signal)(struct drm_i915_gem_request *req, u32 *out);
331 } semaphore; 334 } semaphore;
332 335
333 /* Execlists */ 336 /* Execlists */
@@ -343,27 +346,6 @@ struct intel_engine_cs {
343 bool preempt_wa; 346 bool preempt_wa;
344 u32 ctx_desc_template; 347 u32 ctx_desc_template;
345 348
346 /**
347 * List of breadcrumbs associated with GPU requests currently
348 * outstanding.
349 */
350 struct list_head request_list;
351
352 /**
353 * Seqno of request most recently submitted to request_list.
354 * Used exclusively by hang checker to avoid grabbing lock while
355 * inspecting request list.
356 */
357 u32 last_submitted_seqno;
358 u32 last_pending_seqno;
359
360 /* An RCU guarded pointer to the last request. No reference is
361 * held to the request, users must carefully acquire a reference to
362 * the request using i915_gem_active_get_rcu(), or hold the
363 * struct_mutex.
364 */
365 struct i915_gem_active last_request;
366
367 struct i915_gem_context *last_context; 349 struct i915_gem_context *last_context;
368 350
369 struct intel_engine_hangcheck hangcheck; 351 struct intel_engine_hangcheck hangcheck;
@@ -401,27 +383,6 @@ intel_engine_flag(const struct intel_engine_cs *engine)
401 return 1 << engine->id; 383 return 1 << engine->id;
402} 384}
403 385
404static inline u32
405intel_engine_sync_index(struct intel_engine_cs *engine,
406 struct intel_engine_cs *other)
407{
408 int idx;
409
410 /*
411 * rcs -> 0 = vcs, 1 = bcs, 2 = vecs, 3 = vcs2;
412 * vcs -> 0 = bcs, 1 = vecs, 2 = vcs2, 3 = rcs;
413 * bcs -> 0 = vecs, 1 = vcs2. 2 = rcs, 3 = vcs;
414 * vecs -> 0 = vcs2, 1 = rcs, 2 = vcs, 3 = bcs;
415 * vcs2 -> 0 = rcs, 1 = vcs, 2 = bcs, 3 = vecs;
416 */
417
418 idx = (other->id - engine->id) - 1;
419 if (idx < 0)
420 idx += I915_NUM_ENGINES;
421
422 return idx;
423}
424
425static inline void 386static inline void
426intel_flush_status_page(struct intel_engine_cs *engine, int reg) 387intel_flush_status_page(struct intel_engine_cs *engine, int reg)
427{ 388{
@@ -504,30 +465,23 @@ static inline void intel_ring_advance(struct intel_ring *ring)
504 */ 465 */
505} 466}
506 467
507static inline u32 intel_ring_offset(struct intel_ring *ring, u32 value) 468static inline u32 intel_ring_offset(struct intel_ring *ring, void *addr)
508{ 469{
509 /* Don't write ring->size (equivalent to 0) as that hangs some GPUs. */ 470 /* Don't write ring->size (equivalent to 0) as that hangs some GPUs. */
510 return value & (ring->size - 1); 471 u32 offset = addr - ring->vaddr;
472 return offset & (ring->size - 1);
511} 473}
512 474
513int __intel_ring_space(int head, int tail, int size); 475int __intel_ring_space(int head, int tail, int size);
514void intel_ring_update_space(struct intel_ring *ring); 476void intel_ring_update_space(struct intel_ring *ring);
515 477
516void intel_engine_init_seqno(struct intel_engine_cs *engine, u32 seqno); 478void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno);
517 479
518void intel_engine_setup_common(struct intel_engine_cs *engine); 480void intel_engine_setup_common(struct intel_engine_cs *engine);
519int intel_engine_init_common(struct intel_engine_cs *engine); 481int intel_engine_init_common(struct intel_engine_cs *engine);
520int intel_engine_create_scratch(struct intel_engine_cs *engine, int size); 482int intel_engine_create_scratch(struct intel_engine_cs *engine, int size);
521void intel_engine_cleanup_common(struct intel_engine_cs *engine); 483void intel_engine_cleanup_common(struct intel_engine_cs *engine);
522 484
523static inline int intel_engine_idle(struct intel_engine_cs *engine,
524 unsigned int flags)
525{
526 /* Wait upon the last request to be completed */
527 return i915_gem_active_wait_unlocked(&engine->last_request,
528 flags, NULL, NULL);
529}
530
531int intel_init_render_ring_buffer(struct intel_engine_cs *engine); 485int intel_init_render_ring_buffer(struct intel_engine_cs *engine);
532int intel_init_bsd_ring_buffer(struct intel_engine_cs *engine); 486int intel_init_bsd_ring_buffer(struct intel_engine_cs *engine);
533int intel_init_bsd2_ring_buffer(struct intel_engine_cs *engine); 487int intel_init_bsd2_ring_buffer(struct intel_engine_cs *engine);
@@ -542,6 +496,18 @@ static inline u32 intel_engine_get_seqno(struct intel_engine_cs *engine)
542 return intel_read_status_page(engine, I915_GEM_HWS_INDEX); 496 return intel_read_status_page(engine, I915_GEM_HWS_INDEX);
543} 497}
544 498
499static inline u32 intel_engine_last_submit(struct intel_engine_cs *engine)
500{
501 /* We are only peeking at the tail of the submit queue (and not the
502 * queue itself) in order to gain a hint as to the current active
503 * state of the engine. Callers are not expected to be taking
504 * engine->timeline->lock, nor are they expected to be concerned
505 * wtih serialising this hint with anything, so document it as
506 * a hint and nothing more.
507 */
508 return READ_ONCE(engine->timeline->last_submitted_seqno);
509}
510
545int init_workarounds_ring(struct intel_engine_cs *engine); 511int init_workarounds_ring(struct intel_engine_cs *engine);
546 512
547void intel_engine_get_instdone(struct intel_engine_cs *engine, 513void intel_engine_get_instdone(struct intel_engine_cs *engine,
@@ -615,9 +581,4 @@ void intel_engine_fini_breadcrumbs(struct intel_engine_cs *engine);
615unsigned int intel_kick_waiters(struct drm_i915_private *i915); 581unsigned int intel_kick_waiters(struct drm_i915_private *i915);
616unsigned int intel_kick_signalers(struct drm_i915_private *i915); 582unsigned int intel_kick_signalers(struct drm_i915_private *i915);
617 583
618static inline bool intel_engine_is_active(struct intel_engine_cs *engine)
619{
620 return i915_gem_active_isset(&engine->last_request);
621}
622
623#endif /* _INTEL_RINGBUFFER_H_ */ 584#endif /* _INTEL_RINGBUFFER_H_ */
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index ee56a8756c07..05994083e161 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -330,7 +330,7 @@ static void skl_power_well_post_enable(struct drm_i915_private *dev_priv,
330 * sure vgacon can keep working normally without triggering interrupts 330 * sure vgacon can keep working normally without triggering interrupts
331 * and error messages. 331 * and error messages.
332 */ 332 */
333 if (power_well->data == SKL_DISP_PW_2) { 333 if (power_well->id == SKL_DISP_PW_2) {
334 vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO); 334 vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO);
335 outb(inb(VGA_MSR_READ), VGA_MSR_WRITE); 335 outb(inb(VGA_MSR_READ), VGA_MSR_WRITE);
336 vga_put(pdev, VGA_RSRC_LEGACY_IO); 336 vga_put(pdev, VGA_RSRC_LEGACY_IO);
@@ -343,7 +343,7 @@ static void skl_power_well_post_enable(struct drm_i915_private *dev_priv,
343static void skl_power_well_pre_disable(struct drm_i915_private *dev_priv, 343static void skl_power_well_pre_disable(struct drm_i915_private *dev_priv,
344 struct i915_power_well *power_well) 344 struct i915_power_well *power_well)
345{ 345{
346 if (power_well->data == SKL_DISP_PW_2) 346 if (power_well->id == SKL_DISP_PW_2)
347 gen8_irq_power_well_pre_disable(dev_priv, 347 gen8_irq_power_well_pre_disable(dev_priv,
348 1 << PIPE_C | 1 << PIPE_B); 348 1 << PIPE_C | 1 << PIPE_B);
349} 349}
@@ -658,7 +658,7 @@ static void
658gen9_sanitize_power_well_requests(struct drm_i915_private *dev_priv, 658gen9_sanitize_power_well_requests(struct drm_i915_private *dev_priv,
659 struct i915_power_well *power_well) 659 struct i915_power_well *power_well)
660{ 660{
661 enum skl_disp_power_wells power_well_id = power_well->data; 661 enum skl_disp_power_wells power_well_id = power_well->id;
662 u32 val; 662 u32 val;
663 u32 mask; 663 u32 mask;
664 664
@@ -703,7 +703,7 @@ static void skl_set_power_well(struct drm_i915_private *dev_priv,
703 tmp = I915_READ(HSW_PWR_WELL_DRIVER); 703 tmp = I915_READ(HSW_PWR_WELL_DRIVER);
704 fuse_status = I915_READ(SKL_FUSE_STATUS); 704 fuse_status = I915_READ(SKL_FUSE_STATUS);
705 705
706 switch (power_well->data) { 706 switch (power_well->id) {
707 case SKL_DISP_PW_1: 707 case SKL_DISP_PW_1:
708 if (intel_wait_for_register(dev_priv, 708 if (intel_wait_for_register(dev_priv,
709 SKL_FUSE_STATUS, 709 SKL_FUSE_STATUS,
@@ -727,13 +727,13 @@ static void skl_set_power_well(struct drm_i915_private *dev_priv,
727 case SKL_DISP_PW_MISC_IO: 727 case SKL_DISP_PW_MISC_IO:
728 break; 728 break;
729 default: 729 default:
730 WARN(1, "Unknown power well %lu\n", power_well->data); 730 WARN(1, "Unknown power well %lu\n", power_well->id);
731 return; 731 return;
732 } 732 }
733 733
734 req_mask = SKL_POWER_WELL_REQ(power_well->data); 734 req_mask = SKL_POWER_WELL_REQ(power_well->id);
735 enable_requested = tmp & req_mask; 735 enable_requested = tmp & req_mask;
736 state_mask = SKL_POWER_WELL_STATE(power_well->data); 736 state_mask = SKL_POWER_WELL_STATE(power_well->id);
737 is_enabled = tmp & state_mask; 737 is_enabled = tmp & state_mask;
738 738
739 if (!enable && enable_requested) 739 if (!enable && enable_requested)
@@ -769,14 +769,14 @@ static void skl_set_power_well(struct drm_i915_private *dev_priv,
769 power_well->name, enable ? "enable" : "disable"); 769 power_well->name, enable ? "enable" : "disable");
770 770
771 if (check_fuse_status) { 771 if (check_fuse_status) {
772 if (power_well->data == SKL_DISP_PW_1) { 772 if (power_well->id == SKL_DISP_PW_1) {
773 if (intel_wait_for_register(dev_priv, 773 if (intel_wait_for_register(dev_priv,
774 SKL_FUSE_STATUS, 774 SKL_FUSE_STATUS,
775 SKL_FUSE_PG1_DIST_STATUS, 775 SKL_FUSE_PG1_DIST_STATUS,
776 SKL_FUSE_PG1_DIST_STATUS, 776 SKL_FUSE_PG1_DIST_STATUS,
777 1)) 777 1))
778 DRM_ERROR("PG1 distributing status timeout\n"); 778 DRM_ERROR("PG1 distributing status timeout\n");
779 } else if (power_well->data == SKL_DISP_PW_2) { 779 } else if (power_well->id == SKL_DISP_PW_2) {
780 if (intel_wait_for_register(dev_priv, 780 if (intel_wait_for_register(dev_priv,
781 SKL_FUSE_STATUS, 781 SKL_FUSE_STATUS,
782 SKL_FUSE_PG2_DIST_STATUS, 782 SKL_FUSE_PG2_DIST_STATUS,
@@ -818,8 +818,8 @@ static void hsw_power_well_disable(struct drm_i915_private *dev_priv,
818static bool skl_power_well_enabled(struct drm_i915_private *dev_priv, 818static bool skl_power_well_enabled(struct drm_i915_private *dev_priv,
819 struct i915_power_well *power_well) 819 struct i915_power_well *power_well)
820{ 820{
821 uint32_t mask = SKL_POWER_WELL_REQ(power_well->data) | 821 uint32_t mask = SKL_POWER_WELL_REQ(power_well->id) |
822 SKL_POWER_WELL_STATE(power_well->data); 822 SKL_POWER_WELL_STATE(power_well->id);
823 823
824 return (I915_READ(HSW_PWR_WELL_DRIVER) & mask) == mask; 824 return (I915_READ(HSW_PWR_WELL_DRIVER) & mask) == mask;
825} 825}
@@ -845,45 +845,22 @@ static void skl_power_well_disable(struct drm_i915_private *dev_priv,
845 skl_set_power_well(dev_priv, power_well, false); 845 skl_set_power_well(dev_priv, power_well, false);
846} 846}
847 847
848static enum dpio_phy bxt_power_well_to_phy(struct i915_power_well *power_well)
849{
850 enum skl_disp_power_wells power_well_id = power_well->data;
851
852 return power_well_id == BXT_DPIO_CMN_A ? DPIO_PHY1 : DPIO_PHY0;
853}
854
855static void bxt_dpio_cmn_power_well_enable(struct drm_i915_private *dev_priv, 848static void bxt_dpio_cmn_power_well_enable(struct drm_i915_private *dev_priv,
856 struct i915_power_well *power_well) 849 struct i915_power_well *power_well)
857{ 850{
858 enum skl_disp_power_wells power_well_id = power_well->data; 851 bxt_ddi_phy_init(dev_priv, power_well->data);
859 struct i915_power_well *cmn_a_well = NULL;
860
861 if (power_well_id == BXT_DPIO_CMN_BC) {
862 /*
863 * We need to copy the GRC calibration value from the eDP PHY,
864 * so make sure it's powered up.
865 */
866 cmn_a_well = lookup_power_well(dev_priv, BXT_DPIO_CMN_A);
867 intel_power_well_get(dev_priv, cmn_a_well);
868 }
869
870 bxt_ddi_phy_init(dev_priv, bxt_power_well_to_phy(power_well));
871
872 if (cmn_a_well)
873 intel_power_well_put(dev_priv, cmn_a_well);
874} 852}
875 853
876static void bxt_dpio_cmn_power_well_disable(struct drm_i915_private *dev_priv, 854static void bxt_dpio_cmn_power_well_disable(struct drm_i915_private *dev_priv,
877 struct i915_power_well *power_well) 855 struct i915_power_well *power_well)
878{ 856{
879 bxt_ddi_phy_uninit(dev_priv, bxt_power_well_to_phy(power_well)); 857 bxt_ddi_phy_uninit(dev_priv, power_well->data);
880} 858}
881 859
882static bool bxt_dpio_cmn_power_well_enabled(struct drm_i915_private *dev_priv, 860static bool bxt_dpio_cmn_power_well_enabled(struct drm_i915_private *dev_priv,
883 struct i915_power_well *power_well) 861 struct i915_power_well *power_well)
884{ 862{
885 return bxt_ddi_phy_is_enabled(dev_priv, 863 return bxt_ddi_phy_is_enabled(dev_priv, power_well->data);
886 bxt_power_well_to_phy(power_well));
887} 864}
888 865
889static void bxt_dpio_cmn_power_well_sync_hw(struct drm_i915_private *dev_priv, 866static void bxt_dpio_cmn_power_well_sync_hw(struct drm_i915_private *dev_priv,
@@ -902,13 +879,11 @@ static void bxt_verify_ddi_phy_power_wells(struct drm_i915_private *dev_priv)
902 879
903 power_well = lookup_power_well(dev_priv, BXT_DPIO_CMN_A); 880 power_well = lookup_power_well(dev_priv, BXT_DPIO_CMN_A);
904 if (power_well->count > 0) 881 if (power_well->count > 0)
905 bxt_ddi_phy_verify_state(dev_priv, 882 bxt_ddi_phy_verify_state(dev_priv, power_well->data);
906 bxt_power_well_to_phy(power_well));
907 883
908 power_well = lookup_power_well(dev_priv, BXT_DPIO_CMN_BC); 884 power_well = lookup_power_well(dev_priv, BXT_DPIO_CMN_BC);
909 if (power_well->count > 0) 885 if (power_well->count > 0)
910 bxt_ddi_phy_verify_state(dev_priv, 886 bxt_ddi_phy_verify_state(dev_priv, power_well->data);
911 bxt_power_well_to_phy(power_well));
912} 887}
913 888
914static bool gen9_dc_off_power_well_enabled(struct drm_i915_private *dev_priv, 889static bool gen9_dc_off_power_well_enabled(struct drm_i915_private *dev_priv,
@@ -932,7 +907,7 @@ static void gen9_dc_off_power_well_enable(struct drm_i915_private *dev_priv,
932 gen9_set_dc_state(dev_priv, DC_STATE_DISABLE); 907 gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
933 908
934 WARN_ON(dev_priv->cdclk_freq != 909 WARN_ON(dev_priv->cdclk_freq !=
935 dev_priv->display.get_display_clock_speed(&dev_priv->drm)); 910 dev_priv->display.get_display_clock_speed(dev_priv));
936 911
937 gen9_assert_dbuf_enabled(dev_priv); 912 gen9_assert_dbuf_enabled(dev_priv);
938 913
@@ -975,7 +950,7 @@ static bool i9xx_always_on_power_well_enabled(struct drm_i915_private *dev_priv,
975static void vlv_set_power_well(struct drm_i915_private *dev_priv, 950static void vlv_set_power_well(struct drm_i915_private *dev_priv,
976 struct i915_power_well *power_well, bool enable) 951 struct i915_power_well *power_well, bool enable)
977{ 952{
978 enum punit_power_well power_well_id = power_well->data; 953 enum punit_power_well power_well_id = power_well->id;
979 u32 mask; 954 u32 mask;
980 u32 state; 955 u32 state;
981 u32 ctrl; 956 u32 ctrl;
@@ -1029,7 +1004,7 @@ static void vlv_power_well_disable(struct drm_i915_private *dev_priv,
1029static bool vlv_power_well_enabled(struct drm_i915_private *dev_priv, 1004static bool vlv_power_well_enabled(struct drm_i915_private *dev_priv,
1030 struct i915_power_well *power_well) 1005 struct i915_power_well *power_well)
1031{ 1006{
1032 int power_well_id = power_well->data; 1007 int power_well_id = power_well->id;
1033 bool enabled = false; 1008 bool enabled = false;
1034 u32 mask; 1009 u32 mask;
1035 u32 state; 1010 u32 state;
@@ -1138,13 +1113,15 @@ static void vlv_display_power_well_deinit(struct drm_i915_private *dev_priv)
1138 1113
1139 intel_power_sequencer_reset(dev_priv); 1114 intel_power_sequencer_reset(dev_priv);
1140 1115
1141 intel_hpd_poll_init(dev_priv); 1116 /* Prevent us from re-enabling polling on accident in late suspend */
1117 if (!dev_priv->drm.dev->power.is_suspended)
1118 intel_hpd_poll_init(dev_priv);
1142} 1119}
1143 1120
1144static void vlv_display_power_well_enable(struct drm_i915_private *dev_priv, 1121static void vlv_display_power_well_enable(struct drm_i915_private *dev_priv,
1145 struct i915_power_well *power_well) 1122 struct i915_power_well *power_well)
1146{ 1123{
1147 WARN_ON_ONCE(power_well->data != PUNIT_POWER_WELL_DISP2D); 1124 WARN_ON_ONCE(power_well->id != PUNIT_POWER_WELL_DISP2D);
1148 1125
1149 vlv_set_power_well(dev_priv, power_well, true); 1126 vlv_set_power_well(dev_priv, power_well, true);
1150 1127
@@ -1154,7 +1131,7 @@ static void vlv_display_power_well_enable(struct drm_i915_private *dev_priv,
1154static void vlv_display_power_well_disable(struct drm_i915_private *dev_priv, 1131static void vlv_display_power_well_disable(struct drm_i915_private *dev_priv,
1155 struct i915_power_well *power_well) 1132 struct i915_power_well *power_well)
1156{ 1133{
1157 WARN_ON_ONCE(power_well->data != PUNIT_POWER_WELL_DISP2D); 1134 WARN_ON_ONCE(power_well->id != PUNIT_POWER_WELL_DISP2D);
1158 1135
1159 vlv_display_power_well_deinit(dev_priv); 1136 vlv_display_power_well_deinit(dev_priv);
1160 1137
@@ -1164,7 +1141,7 @@ static void vlv_display_power_well_disable(struct drm_i915_private *dev_priv,
1164static void vlv_dpio_cmn_power_well_enable(struct drm_i915_private *dev_priv, 1141static void vlv_dpio_cmn_power_well_enable(struct drm_i915_private *dev_priv,
1165 struct i915_power_well *power_well) 1142 struct i915_power_well *power_well)
1166{ 1143{
1167 WARN_ON_ONCE(power_well->data != PUNIT_POWER_WELL_DPIO_CMN_BC); 1144 WARN_ON_ONCE(power_well->id != PUNIT_POWER_WELL_DPIO_CMN_BC);
1168 1145
1169 /* since ref/cri clock was enabled */ 1146 /* since ref/cri clock was enabled */
1170 udelay(1); /* >10ns for cmnreset, >0ns for sidereset */ 1147 udelay(1); /* >10ns for cmnreset, >0ns for sidereset */
@@ -1190,7 +1167,7 @@ static void vlv_dpio_cmn_power_well_disable(struct drm_i915_private *dev_priv,
1190{ 1167{
1191 enum pipe pipe; 1168 enum pipe pipe;
1192 1169
1193 WARN_ON_ONCE(power_well->data != PUNIT_POWER_WELL_DPIO_CMN_BC); 1170 WARN_ON_ONCE(power_well->id != PUNIT_POWER_WELL_DPIO_CMN_BC);
1194 1171
1195 for_each_pipe(dev_priv, pipe) 1172 for_each_pipe(dev_priv, pipe)
1196 assert_pll_disabled(dev_priv, pipe); 1173 assert_pll_disabled(dev_priv, pipe);
@@ -1213,7 +1190,7 @@ static struct i915_power_well *lookup_power_well(struct drm_i915_private *dev_pr
1213 struct i915_power_well *power_well; 1190 struct i915_power_well *power_well;
1214 1191
1215 power_well = &power_domains->power_wells[i]; 1192 power_well = &power_domains->power_wells[i];
1216 if (power_well->data == power_well_id) 1193 if (power_well->id == power_well_id)
1217 return power_well; 1194 return power_well;
1218 } 1195 }
1219 1196
@@ -1337,10 +1314,10 @@ static void chv_dpio_cmn_power_well_enable(struct drm_i915_private *dev_priv,
1337 enum pipe pipe; 1314 enum pipe pipe;
1338 uint32_t tmp; 1315 uint32_t tmp;
1339 1316
1340 WARN_ON_ONCE(power_well->data != PUNIT_POWER_WELL_DPIO_CMN_BC && 1317 WARN_ON_ONCE(power_well->id != PUNIT_POWER_WELL_DPIO_CMN_BC &&
1341 power_well->data != PUNIT_POWER_WELL_DPIO_CMN_D); 1318 power_well->id != PUNIT_POWER_WELL_DPIO_CMN_D);
1342 1319
1343 if (power_well->data == PUNIT_POWER_WELL_DPIO_CMN_BC) { 1320 if (power_well->id == PUNIT_POWER_WELL_DPIO_CMN_BC) {
1344 pipe = PIPE_A; 1321 pipe = PIPE_A;
1345 phy = DPIO_PHY0; 1322 phy = DPIO_PHY0;
1346 } else { 1323 } else {
@@ -1368,7 +1345,7 @@ static void chv_dpio_cmn_power_well_enable(struct drm_i915_private *dev_priv,
1368 DPIO_SUS_CLK_CONFIG_GATE_CLKREQ; 1345 DPIO_SUS_CLK_CONFIG_GATE_CLKREQ;
1369 vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW28, tmp); 1346 vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW28, tmp);
1370 1347
1371 if (power_well->data == PUNIT_POWER_WELL_DPIO_CMN_BC) { 1348 if (power_well->id == PUNIT_POWER_WELL_DPIO_CMN_BC) {
1372 tmp = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW6_CH1); 1349 tmp = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW6_CH1);
1373 tmp |= DPIO_DYNPWRDOWNEN_CH1; 1350 tmp |= DPIO_DYNPWRDOWNEN_CH1;
1374 vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW6_CH1, tmp); 1351 vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW6_CH1, tmp);
@@ -1399,10 +1376,10 @@ static void chv_dpio_cmn_power_well_disable(struct drm_i915_private *dev_priv,
1399{ 1376{
1400 enum dpio_phy phy; 1377 enum dpio_phy phy;
1401 1378
1402 WARN_ON_ONCE(power_well->data != PUNIT_POWER_WELL_DPIO_CMN_BC && 1379 WARN_ON_ONCE(power_well->id != PUNIT_POWER_WELL_DPIO_CMN_BC &&
1403 power_well->data != PUNIT_POWER_WELL_DPIO_CMN_D); 1380 power_well->id != PUNIT_POWER_WELL_DPIO_CMN_D);
1404 1381
1405 if (power_well->data == PUNIT_POWER_WELL_DPIO_CMN_BC) { 1382 if (power_well->id == PUNIT_POWER_WELL_DPIO_CMN_BC) {
1406 phy = DPIO_PHY0; 1383 phy = DPIO_PHY0;
1407 assert_pll_disabled(dev_priv, PIPE_A); 1384 assert_pll_disabled(dev_priv, PIPE_A);
1408 assert_pll_disabled(dev_priv, PIPE_B); 1385 assert_pll_disabled(dev_priv, PIPE_B);
@@ -1551,7 +1528,7 @@ void chv_phy_powergate_lanes(struct intel_encoder *encoder,
1551static bool chv_pipe_power_well_enabled(struct drm_i915_private *dev_priv, 1528static bool chv_pipe_power_well_enabled(struct drm_i915_private *dev_priv,
1552 struct i915_power_well *power_well) 1529 struct i915_power_well *power_well)
1553{ 1530{
1554 enum pipe pipe = power_well->data; 1531 enum pipe pipe = power_well->id;
1555 bool enabled; 1532 bool enabled;
1556 u32 state, ctrl; 1533 u32 state, ctrl;
1557 1534
@@ -1581,7 +1558,7 @@ static void chv_set_pipe_power_well(struct drm_i915_private *dev_priv,
1581 struct i915_power_well *power_well, 1558 struct i915_power_well *power_well,
1582 bool enable) 1559 bool enable)
1583{ 1560{
1584 enum pipe pipe = power_well->data; 1561 enum pipe pipe = power_well->id;
1585 u32 state; 1562 u32 state;
1586 u32 ctrl; 1563 u32 ctrl;
1587 1564
@@ -1614,7 +1591,7 @@ out:
1614static void chv_pipe_power_well_sync_hw(struct drm_i915_private *dev_priv, 1591static void chv_pipe_power_well_sync_hw(struct drm_i915_private *dev_priv,
1615 struct i915_power_well *power_well) 1592 struct i915_power_well *power_well)
1616{ 1593{
1617 WARN_ON_ONCE(power_well->data != PIPE_A); 1594 WARN_ON_ONCE(power_well->id != PIPE_A);
1618 1595
1619 chv_set_pipe_power_well(dev_priv, power_well, power_well->count > 0); 1596 chv_set_pipe_power_well(dev_priv, power_well, power_well->count > 0);
1620} 1597}
@@ -1622,7 +1599,7 @@ static void chv_pipe_power_well_sync_hw(struct drm_i915_private *dev_priv,
1622static void chv_pipe_power_well_enable(struct drm_i915_private *dev_priv, 1599static void chv_pipe_power_well_enable(struct drm_i915_private *dev_priv,
1623 struct i915_power_well *power_well) 1600 struct i915_power_well *power_well)
1624{ 1601{
1625 WARN_ON_ONCE(power_well->data != PIPE_A); 1602 WARN_ON_ONCE(power_well->id != PIPE_A);
1626 1603
1627 chv_set_pipe_power_well(dev_priv, power_well, true); 1604 chv_set_pipe_power_well(dev_priv, power_well, true);
1628 1605
@@ -1632,7 +1609,7 @@ static void chv_pipe_power_well_enable(struct drm_i915_private *dev_priv,
1632static void chv_pipe_power_well_disable(struct drm_i915_private *dev_priv, 1609static void chv_pipe_power_well_disable(struct drm_i915_private *dev_priv,
1633 struct i915_power_well *power_well) 1610 struct i915_power_well *power_well)
1634{ 1611{
1635 WARN_ON_ONCE(power_well->data != PIPE_A); 1612 WARN_ON_ONCE(power_well->id != PIPE_A);
1636 1613
1637 vlv_display_power_well_deinit(dev_priv); 1614 vlv_display_power_well_deinit(dev_priv);
1638 1615
@@ -1976,12 +1953,12 @@ static struct i915_power_well vlv_power_wells[] = {
1976 .always_on = 1, 1953 .always_on = 1,
1977 .domains = POWER_DOMAIN_MASK, 1954 .domains = POWER_DOMAIN_MASK,
1978 .ops = &i9xx_always_on_power_well_ops, 1955 .ops = &i9xx_always_on_power_well_ops,
1979 .data = PUNIT_POWER_WELL_ALWAYS_ON, 1956 .id = PUNIT_POWER_WELL_ALWAYS_ON,
1980 }, 1957 },
1981 { 1958 {
1982 .name = "display", 1959 .name = "display",
1983 .domains = VLV_DISPLAY_POWER_DOMAINS, 1960 .domains = VLV_DISPLAY_POWER_DOMAINS,
1984 .data = PUNIT_POWER_WELL_DISP2D, 1961 .id = PUNIT_POWER_WELL_DISP2D,
1985 .ops = &vlv_display_power_well_ops, 1962 .ops = &vlv_display_power_well_ops,
1986 }, 1963 },
1987 { 1964 {
@@ -1991,7 +1968,7 @@ static struct i915_power_well vlv_power_wells[] = {
1991 VLV_DPIO_TX_C_LANES_01_POWER_DOMAINS | 1968 VLV_DPIO_TX_C_LANES_01_POWER_DOMAINS |
1992 VLV_DPIO_TX_C_LANES_23_POWER_DOMAINS, 1969 VLV_DPIO_TX_C_LANES_23_POWER_DOMAINS,
1993 .ops = &vlv_dpio_power_well_ops, 1970 .ops = &vlv_dpio_power_well_ops,
1994 .data = PUNIT_POWER_WELL_DPIO_TX_B_LANES_01, 1971 .id = PUNIT_POWER_WELL_DPIO_TX_B_LANES_01,
1995 }, 1972 },
1996 { 1973 {
1997 .name = "dpio-tx-b-23", 1974 .name = "dpio-tx-b-23",
@@ -2000,7 +1977,7 @@ static struct i915_power_well vlv_power_wells[] = {
2000 VLV_DPIO_TX_C_LANES_01_POWER_DOMAINS | 1977 VLV_DPIO_TX_C_LANES_01_POWER_DOMAINS |
2001 VLV_DPIO_TX_C_LANES_23_POWER_DOMAINS, 1978 VLV_DPIO_TX_C_LANES_23_POWER_DOMAINS,
2002 .ops = &vlv_dpio_power_well_ops, 1979 .ops = &vlv_dpio_power_well_ops,
2003 .data = PUNIT_POWER_WELL_DPIO_TX_B_LANES_23, 1980 .id = PUNIT_POWER_WELL_DPIO_TX_B_LANES_23,
2004 }, 1981 },
2005 { 1982 {
2006 .name = "dpio-tx-c-01", 1983 .name = "dpio-tx-c-01",
@@ -2009,7 +1986,7 @@ static struct i915_power_well vlv_power_wells[] = {
2009 VLV_DPIO_TX_C_LANES_01_POWER_DOMAINS | 1986 VLV_DPIO_TX_C_LANES_01_POWER_DOMAINS |
2010 VLV_DPIO_TX_C_LANES_23_POWER_DOMAINS, 1987 VLV_DPIO_TX_C_LANES_23_POWER_DOMAINS,
2011 .ops = &vlv_dpio_power_well_ops, 1988 .ops = &vlv_dpio_power_well_ops,
2012 .data = PUNIT_POWER_WELL_DPIO_TX_C_LANES_01, 1989 .id = PUNIT_POWER_WELL_DPIO_TX_C_LANES_01,
2013 }, 1990 },
2014 { 1991 {
2015 .name = "dpio-tx-c-23", 1992 .name = "dpio-tx-c-23",
@@ -2018,12 +1995,12 @@ static struct i915_power_well vlv_power_wells[] = {
2018 VLV_DPIO_TX_C_LANES_01_POWER_DOMAINS | 1995 VLV_DPIO_TX_C_LANES_01_POWER_DOMAINS |
2019 VLV_DPIO_TX_C_LANES_23_POWER_DOMAINS, 1996 VLV_DPIO_TX_C_LANES_23_POWER_DOMAINS,
2020 .ops = &vlv_dpio_power_well_ops, 1997 .ops = &vlv_dpio_power_well_ops,
2021 .data = PUNIT_POWER_WELL_DPIO_TX_C_LANES_23, 1998 .id = PUNIT_POWER_WELL_DPIO_TX_C_LANES_23,
2022 }, 1999 },
2023 { 2000 {
2024 .name = "dpio-common", 2001 .name = "dpio-common",
2025 .domains = VLV_DPIO_CMN_BC_POWER_DOMAINS, 2002 .domains = VLV_DPIO_CMN_BC_POWER_DOMAINS,
2026 .data = PUNIT_POWER_WELL_DPIO_CMN_BC, 2003 .id = PUNIT_POWER_WELL_DPIO_CMN_BC,
2027 .ops = &vlv_dpio_cmn_power_well_ops, 2004 .ops = &vlv_dpio_cmn_power_well_ops,
2028 }, 2005 },
2029}; 2006};
@@ -2043,19 +2020,19 @@ static struct i915_power_well chv_power_wells[] = {
2043 * required for any pipe to work. 2020 * required for any pipe to work.
2044 */ 2021 */
2045 .domains = CHV_DISPLAY_POWER_DOMAINS, 2022 .domains = CHV_DISPLAY_POWER_DOMAINS,
2046 .data = PIPE_A, 2023 .id = PIPE_A,
2047 .ops = &chv_pipe_power_well_ops, 2024 .ops = &chv_pipe_power_well_ops,
2048 }, 2025 },
2049 { 2026 {
2050 .name = "dpio-common-bc", 2027 .name = "dpio-common-bc",
2051 .domains = CHV_DPIO_CMN_BC_POWER_DOMAINS, 2028 .domains = CHV_DPIO_CMN_BC_POWER_DOMAINS,
2052 .data = PUNIT_POWER_WELL_DPIO_CMN_BC, 2029 .id = PUNIT_POWER_WELL_DPIO_CMN_BC,
2053 .ops = &chv_dpio_cmn_power_well_ops, 2030 .ops = &chv_dpio_cmn_power_well_ops,
2054 }, 2031 },
2055 { 2032 {
2056 .name = "dpio-common-d", 2033 .name = "dpio-common-d",
2057 .domains = CHV_DPIO_CMN_D_POWER_DOMAINS, 2034 .domains = CHV_DPIO_CMN_D_POWER_DOMAINS,
2058 .data = PUNIT_POWER_WELL_DPIO_CMN_D, 2035 .id = PUNIT_POWER_WELL_DPIO_CMN_D,
2059 .ops = &chv_dpio_cmn_power_well_ops, 2036 .ops = &chv_dpio_cmn_power_well_ops,
2060 }, 2037 },
2061}; 2038};
@@ -2078,57 +2055,57 @@ static struct i915_power_well skl_power_wells[] = {
2078 .always_on = 1, 2055 .always_on = 1,
2079 .domains = POWER_DOMAIN_MASK, 2056 .domains = POWER_DOMAIN_MASK,
2080 .ops = &i9xx_always_on_power_well_ops, 2057 .ops = &i9xx_always_on_power_well_ops,
2081 .data = SKL_DISP_PW_ALWAYS_ON, 2058 .id = SKL_DISP_PW_ALWAYS_ON,
2082 }, 2059 },
2083 { 2060 {
2084 .name = "power well 1", 2061 .name = "power well 1",
2085 /* Handled by the DMC firmware */ 2062 /* Handled by the DMC firmware */
2086 .domains = 0, 2063 .domains = 0,
2087 .ops = &skl_power_well_ops, 2064 .ops = &skl_power_well_ops,
2088 .data = SKL_DISP_PW_1, 2065 .id = SKL_DISP_PW_1,
2089 }, 2066 },
2090 { 2067 {
2091 .name = "MISC IO power well", 2068 .name = "MISC IO power well",
2092 /* Handled by the DMC firmware */ 2069 /* Handled by the DMC firmware */
2093 .domains = 0, 2070 .domains = 0,
2094 .ops = &skl_power_well_ops, 2071 .ops = &skl_power_well_ops,
2095 .data = SKL_DISP_PW_MISC_IO, 2072 .id = SKL_DISP_PW_MISC_IO,
2096 }, 2073 },
2097 { 2074 {
2098 .name = "DC off", 2075 .name = "DC off",
2099 .domains = SKL_DISPLAY_DC_OFF_POWER_DOMAINS, 2076 .domains = SKL_DISPLAY_DC_OFF_POWER_DOMAINS,
2100 .ops = &gen9_dc_off_power_well_ops, 2077 .ops = &gen9_dc_off_power_well_ops,
2101 .data = SKL_DISP_PW_DC_OFF, 2078 .id = SKL_DISP_PW_DC_OFF,
2102 }, 2079 },
2103 { 2080 {
2104 .name = "power well 2", 2081 .name = "power well 2",
2105 .domains = SKL_DISPLAY_POWERWELL_2_POWER_DOMAINS, 2082 .domains = SKL_DISPLAY_POWERWELL_2_POWER_DOMAINS,
2106 .ops = &skl_power_well_ops, 2083 .ops = &skl_power_well_ops,
2107 .data = SKL_DISP_PW_2, 2084 .id = SKL_DISP_PW_2,
2108 }, 2085 },
2109 { 2086 {
2110 .name = "DDI A/E power well", 2087 .name = "DDI A/E power well",
2111 .domains = SKL_DISPLAY_DDI_A_E_POWER_DOMAINS, 2088 .domains = SKL_DISPLAY_DDI_A_E_POWER_DOMAINS,
2112 .ops = &skl_power_well_ops, 2089 .ops = &skl_power_well_ops,
2113 .data = SKL_DISP_PW_DDI_A_E, 2090 .id = SKL_DISP_PW_DDI_A_E,
2114 }, 2091 },
2115 { 2092 {
2116 .name = "DDI B power well", 2093 .name = "DDI B power well",
2117 .domains = SKL_DISPLAY_DDI_B_POWER_DOMAINS, 2094 .domains = SKL_DISPLAY_DDI_B_POWER_DOMAINS,
2118 .ops = &skl_power_well_ops, 2095 .ops = &skl_power_well_ops,
2119 .data = SKL_DISP_PW_DDI_B, 2096 .id = SKL_DISP_PW_DDI_B,
2120 }, 2097 },
2121 { 2098 {
2122 .name = "DDI C power well", 2099 .name = "DDI C power well",
2123 .domains = SKL_DISPLAY_DDI_C_POWER_DOMAINS, 2100 .domains = SKL_DISPLAY_DDI_C_POWER_DOMAINS,
2124 .ops = &skl_power_well_ops, 2101 .ops = &skl_power_well_ops,
2125 .data = SKL_DISP_PW_DDI_C, 2102 .id = SKL_DISP_PW_DDI_C,
2126 }, 2103 },
2127 { 2104 {
2128 .name = "DDI D power well", 2105 .name = "DDI D power well",
2129 .domains = SKL_DISPLAY_DDI_D_POWER_DOMAINS, 2106 .domains = SKL_DISPLAY_DDI_D_POWER_DOMAINS,
2130 .ops = &skl_power_well_ops, 2107 .ops = &skl_power_well_ops,
2131 .data = SKL_DISP_PW_DDI_D, 2108 .id = SKL_DISP_PW_DDI_D,
2132 }, 2109 },
2133}; 2110};
2134 2111
@@ -2143,31 +2120,33 @@ static struct i915_power_well bxt_power_wells[] = {
2143 .name = "power well 1", 2120 .name = "power well 1",
2144 .domains = 0, 2121 .domains = 0,
2145 .ops = &skl_power_well_ops, 2122 .ops = &skl_power_well_ops,
2146 .data = SKL_DISP_PW_1, 2123 .id = SKL_DISP_PW_1,
2147 }, 2124 },
2148 { 2125 {
2149 .name = "DC off", 2126 .name = "DC off",
2150 .domains = BXT_DISPLAY_DC_OFF_POWER_DOMAINS, 2127 .domains = BXT_DISPLAY_DC_OFF_POWER_DOMAINS,
2151 .ops = &gen9_dc_off_power_well_ops, 2128 .ops = &gen9_dc_off_power_well_ops,
2152 .data = SKL_DISP_PW_DC_OFF, 2129 .id = SKL_DISP_PW_DC_OFF,
2153 }, 2130 },
2154 { 2131 {
2155 .name = "power well 2", 2132 .name = "power well 2",
2156 .domains = BXT_DISPLAY_POWERWELL_2_POWER_DOMAINS, 2133 .domains = BXT_DISPLAY_POWERWELL_2_POWER_DOMAINS,
2157 .ops = &skl_power_well_ops, 2134 .ops = &skl_power_well_ops,
2158 .data = SKL_DISP_PW_2, 2135 .id = SKL_DISP_PW_2,
2159 }, 2136 },
2160 { 2137 {
2161 .name = "dpio-common-a", 2138 .name = "dpio-common-a",
2162 .domains = BXT_DPIO_CMN_A_POWER_DOMAINS, 2139 .domains = BXT_DPIO_CMN_A_POWER_DOMAINS,
2163 .ops = &bxt_dpio_cmn_power_well_ops, 2140 .ops = &bxt_dpio_cmn_power_well_ops,
2164 .data = BXT_DPIO_CMN_A, 2141 .id = BXT_DPIO_CMN_A,
2142 .data = DPIO_PHY1,
2165 }, 2143 },
2166 { 2144 {
2167 .name = "dpio-common-bc", 2145 .name = "dpio-common-bc",
2168 .domains = BXT_DPIO_CMN_BC_POWER_DOMAINS, 2146 .domains = BXT_DPIO_CMN_BC_POWER_DOMAINS,
2169 .ops = &bxt_dpio_cmn_power_well_ops, 2147 .ops = &bxt_dpio_cmn_power_well_ops,
2170 .data = BXT_DPIO_CMN_BC, 2148 .id = BXT_DPIO_CMN_BC,
2149 .data = DPIO_PHY0,
2171 }, 2150 },
2172}; 2151};
2173 2152
@@ -2736,8 +2715,7 @@ void intel_runtime_pm_put(struct drm_i915_private *dev_priv)
2736 struct device *kdev = &pdev->dev; 2715 struct device *kdev = &pdev->dev;
2737 2716
2738 assert_rpm_wakelock_held(dev_priv); 2717 assert_rpm_wakelock_held(dev_priv);
2739 if (atomic_dec_and_test(&dev_priv->pm.wakeref_count)) 2718 atomic_dec(&dev_priv->pm.wakeref_count);
2740 atomic_inc(&dev_priv->pm.atomic_seq);
2741 2719
2742 pm_runtime_mark_last_busy(kdev); 2720 pm_runtime_mark_last_busy(kdev);
2743 pm_runtime_put_autosuspend(kdev); 2721 pm_runtime_put_autosuspend(kdev);
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 49fb95d03d74..3990c805a5b5 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -1472,7 +1472,7 @@ static void intel_disable_sdvo(struct intel_encoder *encoder,
1472 temp &= ~SDVO_ENABLE; 1472 temp &= ~SDVO_ENABLE;
1473 intel_sdvo_write_sdvox(intel_sdvo, temp); 1473 intel_sdvo_write_sdvox(intel_sdvo, temp);
1474 1474
1475 intel_wait_for_vblank_if_active(&dev_priv->drm, PIPE_A); 1475 intel_wait_for_vblank_if_active(dev_priv, PIPE_A);
1476 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true); 1476 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true);
1477 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true); 1477 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
1478 } 1478 }
@@ -1509,7 +1509,7 @@ static void intel_enable_sdvo(struct intel_encoder *encoder,
1509 intel_sdvo_write_sdvox(intel_sdvo, temp); 1509 intel_sdvo_write_sdvox(intel_sdvo, temp);
1510 1510
1511 for (i = 0; i < 2; i++) 1511 for (i = 0; i < 2; i++)
1512 intel_wait_for_vblank(dev, intel_crtc->pipe); 1512 intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
1513 1513
1514 success = intel_sdvo_get_trained_inputs(intel_sdvo, &input1, &input2); 1514 success = intel_sdvo_get_trained_inputs(intel_sdvo, &input1, &input2);
1515 /* Warn if the device reported failure to sync. 1515 /* Warn if the device reported failure to sync.
@@ -2411,10 +2411,10 @@ static void
2411intel_sdvo_add_hdmi_properties(struct intel_sdvo *intel_sdvo, 2411intel_sdvo_add_hdmi_properties(struct intel_sdvo *intel_sdvo,
2412 struct intel_sdvo_connector *connector) 2412 struct intel_sdvo_connector *connector)
2413{ 2413{
2414 struct drm_device *dev = connector->base.base.dev; 2414 struct drm_i915_private *dev_priv = to_i915(connector->base.base.dev);
2415 2415
2416 intel_attach_force_audio_property(&connector->base.base); 2416 intel_attach_force_audio_property(&connector->base.base);
2417 if (INTEL_INFO(dev)->gen >= 4 && IS_MOBILE(dev)) { 2417 if (INTEL_GEN(dev_priv) >= 4 && IS_MOBILE(dev_priv)) {
2418 intel_attach_broadcast_rgb_property(&connector->base.base); 2418 intel_attach_broadcast_rgb_property(&connector->base.base);
2419 intel_sdvo->color_range_auto = true; 2419 intel_sdvo->color_range_auto = true;
2420 } 2420 }
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 43d0350856e7..df0fbb4b15a3 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -1042,10 +1042,10 @@ static uint32_t skl_plane_formats[] = {
1042 DRM_FORMAT_VYUY, 1042 DRM_FORMAT_VYUY,
1043}; 1043};
1044 1044
1045int 1045struct intel_plane *
1046intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane) 1046intel_sprite_plane_create(struct drm_i915_private *dev_priv,
1047 enum pipe pipe, int plane)
1047{ 1048{
1048 struct drm_i915_private *dev_priv = to_i915(dev);
1049 struct intel_plane *intel_plane = NULL; 1049 struct intel_plane *intel_plane = NULL;
1050 struct intel_plane_state *state = NULL; 1050 struct intel_plane_state *state = NULL;
1051 unsigned long possible_crtcs; 1051 unsigned long possible_crtcs;
@@ -1054,9 +1054,6 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
1054 int num_plane_formats; 1054 int num_plane_formats;
1055 int ret; 1055 int ret;
1056 1056
1057 if (INTEL_INFO(dev)->gen < 5)
1058 return -ENODEV;
1059
1060 intel_plane = kzalloc(sizeof(*intel_plane), GFP_KERNEL); 1057 intel_plane = kzalloc(sizeof(*intel_plane), GFP_KERNEL);
1061 if (!intel_plane) { 1058 if (!intel_plane) {
1062 ret = -ENOMEM; 1059 ret = -ENOMEM;
@@ -1070,25 +1067,25 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
1070 } 1067 }
1071 intel_plane->base.state = &state->base; 1068 intel_plane->base.state = &state->base;
1072 1069
1073 switch (INTEL_INFO(dev)->gen) { 1070 if (INTEL_GEN(dev_priv) >= 9) {
1074 case 5:
1075 case 6:
1076 intel_plane->can_scale = true; 1071 intel_plane->can_scale = true;
1077 intel_plane->max_downscale = 16; 1072 state->scaler_id = -1;
1078 intel_plane->update_plane = ilk_update_plane;
1079 intel_plane->disable_plane = ilk_disable_plane;
1080 1073
1081 if (IS_GEN6(dev_priv)) { 1074 intel_plane->update_plane = skl_update_plane;
1082 plane_formats = snb_plane_formats; 1075 intel_plane->disable_plane = skl_disable_plane;
1083 num_plane_formats = ARRAY_SIZE(snb_plane_formats);
1084 } else {
1085 plane_formats = ilk_plane_formats;
1086 num_plane_formats = ARRAY_SIZE(ilk_plane_formats);
1087 }
1088 break;
1089 1076
1090 case 7: 1077 plane_formats = skl_plane_formats;
1091 case 8: 1078 num_plane_formats = ARRAY_SIZE(skl_plane_formats);
1079 } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
1080 intel_plane->can_scale = false;
1081 intel_plane->max_downscale = 1;
1082
1083 intel_plane->update_plane = vlv_update_plane;
1084 intel_plane->disable_plane = vlv_disable_plane;
1085
1086 plane_formats = vlv_plane_formats;
1087 num_plane_formats = ARRAY_SIZE(vlv_plane_formats);
1088 } else if (INTEL_GEN(dev_priv) >= 7) {
1092 if (IS_IVYBRIDGE(dev_priv)) { 1089 if (IS_IVYBRIDGE(dev_priv)) {
1093 intel_plane->can_scale = true; 1090 intel_plane->can_scale = true;
1094 intel_plane->max_downscale = 2; 1091 intel_plane->max_downscale = 2;
@@ -1097,33 +1094,25 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
1097 intel_plane->max_downscale = 1; 1094 intel_plane->max_downscale = 1;
1098 } 1095 }
1099 1096
1100 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { 1097 intel_plane->update_plane = ivb_update_plane;
1101 intel_plane->update_plane = vlv_update_plane; 1098 intel_plane->disable_plane = ivb_disable_plane;
1102 intel_plane->disable_plane = vlv_disable_plane;
1103 1099
1104 plane_formats = vlv_plane_formats; 1100 plane_formats = snb_plane_formats;
1105 num_plane_formats = ARRAY_SIZE(vlv_plane_formats); 1101 num_plane_formats = ARRAY_SIZE(snb_plane_formats);
1106 } else { 1102 } else {
1107 intel_plane->update_plane = ivb_update_plane; 1103 intel_plane->can_scale = true;
1108 intel_plane->disable_plane = ivb_disable_plane; 1104 intel_plane->max_downscale = 16;
1105
1106 intel_plane->update_plane = ilk_update_plane;
1107 intel_plane->disable_plane = ilk_disable_plane;
1109 1108
1109 if (IS_GEN6(dev_priv)) {
1110 plane_formats = snb_plane_formats; 1110 plane_formats = snb_plane_formats;
1111 num_plane_formats = ARRAY_SIZE(snb_plane_formats); 1111 num_plane_formats = ARRAY_SIZE(snb_plane_formats);
1112 } else {
1113 plane_formats = ilk_plane_formats;
1114 num_plane_formats = ARRAY_SIZE(ilk_plane_formats);
1112 } 1115 }
1113 break;
1114 case 9:
1115 intel_plane->can_scale = true;
1116 intel_plane->update_plane = skl_update_plane;
1117 intel_plane->disable_plane = skl_disable_plane;
1118 state->scaler_id = -1;
1119
1120 plane_formats = skl_plane_formats;
1121 num_plane_formats = ARRAY_SIZE(skl_plane_formats);
1122 break;
1123 default:
1124 MISSING_CASE(INTEL_INFO(dev)->gen);
1125 ret = -ENODEV;
1126 goto fail;
1127 } 1116 }
1128 1117
1129 if (INTEL_GEN(dev_priv) >= 9) { 1118 if (INTEL_GEN(dev_priv) >= 9) {
@@ -1142,15 +1131,15 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
1142 1131
1143 possible_crtcs = (1 << pipe); 1132 possible_crtcs = (1 << pipe);
1144 1133
1145 if (INTEL_INFO(dev)->gen >= 9) 1134 if (INTEL_GEN(dev_priv) >= 9)
1146 ret = drm_universal_plane_init(dev, &intel_plane->base, possible_crtcs, 1135 ret = drm_universal_plane_init(&dev_priv->drm, &intel_plane->base,
1147 &intel_plane_funcs, 1136 possible_crtcs, &intel_plane_funcs,
1148 plane_formats, num_plane_formats, 1137 plane_formats, num_plane_formats,
1149 DRM_PLANE_TYPE_OVERLAY, 1138 DRM_PLANE_TYPE_OVERLAY,
1150 "plane %d%c", plane + 2, pipe_name(pipe)); 1139 "plane %d%c", plane + 2, pipe_name(pipe));
1151 else 1140 else
1152 ret = drm_universal_plane_init(dev, &intel_plane->base, possible_crtcs, 1141 ret = drm_universal_plane_init(&dev_priv->drm, &intel_plane->base,
1153 &intel_plane_funcs, 1142 possible_crtcs, &intel_plane_funcs,
1154 plane_formats, num_plane_formats, 1143 plane_formats, num_plane_formats,
1155 DRM_PLANE_TYPE_OVERLAY, 1144 DRM_PLANE_TYPE_OVERLAY,
1156 "sprite %c", sprite_name(pipe, plane)); 1145 "sprite %c", sprite_name(pipe, plane));
@@ -1163,11 +1152,11 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
1163 1152
1164 drm_plane_helper_add(&intel_plane->base, &intel_plane_helper_funcs); 1153 drm_plane_helper_add(&intel_plane->base, &intel_plane_helper_funcs);
1165 1154
1166 return 0; 1155 return intel_plane;
1167 1156
1168fail: 1157fail:
1169 kfree(state); 1158 kfree(state);
1170 kfree(intel_plane); 1159 kfree(intel_plane);
1171 1160
1172 return ret; 1161 return ERR_PTR(ret);
1173} 1162}
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index 7118fb55f57f..9212f00d5752 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -856,7 +856,7 @@ intel_enable_tv(struct intel_encoder *encoder,
856 struct drm_i915_private *dev_priv = to_i915(dev); 856 struct drm_i915_private *dev_priv = to_i915(dev);
857 857
858 /* Prevents vblank waits from timing out in intel_tv_detect_type() */ 858 /* Prevents vblank waits from timing out in intel_tv_detect_type() */
859 intel_wait_for_vblank(encoder->base.dev, 859 intel_wait_for_vblank(dev_priv,
860 to_intel_crtc(encoder->base.crtc)->pipe); 860 to_intel_crtc(encoder->base.crtc)->pipe);
861 861
862 I915_WRITE(TV_CTL, I915_READ(TV_CTL) | TV_ENC_ENABLE); 862 I915_WRITE(TV_CTL, I915_READ(TV_CTL) | TV_ENC_ENABLE);
@@ -1238,7 +1238,7 @@ intel_tv_detect_type(struct intel_tv *intel_tv,
1238 I915_WRITE(TV_DAC, tv_dac); 1238 I915_WRITE(TV_DAC, tv_dac);
1239 POSTING_READ(TV_DAC); 1239 POSTING_READ(TV_DAC);
1240 1240
1241 intel_wait_for_vblank(dev, intel_crtc->pipe); 1241 intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
1242 1242
1243 type = -1; 1243 type = -1;
1244 tv_dac = I915_READ(TV_DAC); 1244 tv_dac = I915_READ(TV_DAC);
@@ -1268,7 +1268,7 @@ intel_tv_detect_type(struct intel_tv *intel_tv,
1268 POSTING_READ(TV_CTL); 1268 POSTING_READ(TV_CTL);
1269 1269
1270 /* For unknown reasons the hw barfs if we don't do this vblank wait. */ 1270 /* For unknown reasons the hw barfs if we don't do this vblank wait. */
1271 intel_wait_for_vblank(dev, intel_crtc->pipe); 1271 intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
1272 1272
1273 /* Restore interrupt config */ 1273 /* Restore interrupt config */
1274 if (connector->polled & DRM_CONNECTOR_POLL_HPD) { 1274 if (connector->polled & DRM_CONNECTOR_POLL_HPD) {