linux/drivers/gpu/drm/i915
Michel Thierry 4933d51955 drm/i915: Finish gen6/7 dynamic page table allocation
This patch continues on the idea from "Track GEN6 page table usage".
From here on, in the steady state, PDEs are all pointing to the scratch
page table (as recommended in the spec). When an object is allocated in
the VA range, the code will determine if we need to allocate a page for
the page table. Similarly when the object is destroyed, we will remove,
and free the page table pointing the PDE back to the scratch page.

Following patches will work to unify the code a bit as we bring in GEN8
support. GEN6 and GEN8 are different enough that I had a hard time to
get to this point with as much common code as I do.

The aliasing PPGTT must pre-allocate all of the page tables. There are a
few reasons for this. Two trivial ones: aliasing ppgtt goes through the
ggtt paths, so it's hard to maintain, we currently do not restore the
default context (assuming the previous force reload is indeed
necessary). Most importantly though, the only way (it seems from
empirical evidence) to invalidate the CS TLBs on non-render ring is to
either use ring sync (which requires actually stopping the rings in
order to synchronize when the sync completes vs. where you are in
execution), or to reload DCLV.  Since without full PPGTT we do not ever
reload the DCLV register, there is no good way to achieve this. The
simplest solution is just to not support dynamic page table
creation/destruction in the aliasing PPGTT.

We could always reload DCLV, but this seems like quite a bit of excess
overhead only to save at most 2MB-4k of memory for the aliasing PPGTT
page tables.

v2: Make the page table bitmap declared inside the function (Chris)
Simplify the way scratching address space works.
Move the alloc/teardown tracepoints up a level in the call stack so that
both all implementations get the trace.

v3: Updated trace event to spit out a name

v4: Aliasing ppgtt is now initialized differently (in setup global gtt)

v5: Rebase to latest code. Also removed unnecessary aliasing ppgtt check
for trace, as it is no longer possible after the PPGTT cleanup patch series
of a couple of months ago (Daniel).

v6: Implement changes from code review (Daniel):
 - allocate/teardown_va_range calls added.
 - Add a scratch page allocation helper (only need the address).
 - Move trace events to a new patch.
 - Use updated mark_tlbs_dirty.
 - Moved pt preallocation for aliasing ppgtt into gen6_ppgtt_init.

v7: teardown_va_range removed (Daniel).
    In init, gen6_ppgtt_clear_range call is only needed for aliasing ppgtt.

v8: Rebase after s/page_tables/page_table/.

v9: Remove unnecessary scratch flag in page_table struct, future patches
can just compare against ppgtt->scratch_pt, and alloc_pt_scratch becomes
redundant. Initialize scratch_pt and pt. (Mika)

v10: Clean up aliasing ppgtt init error path and prevent leaking the
ppgtt obj when init fails. (Mika)
Updated commit author. (Daniel)

Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Signed-off-by: Michel Thierry <michel.thierry@intel.com> (v4+)
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2015-03-27 09:25:26 +01:00
..
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915: Fix vmap_batch page iterator overrun 2015-03-17 22:30:31 +01:00
i915_debugfs.c drm/i915: Relax RPS contraints to allows setting minfreq on idle 2015-03-20 11:48:13 +01:00
i915_dma.c drm/i915: Rip out GET_SPRITE_COLORKEY ioctl 2015-03-27 09:08:04 +01:00
i915_drv.c drm/i915: Remove the preliminary_hw_support shackles from CHV 2015-03-17 22:30:29 +01:00
i915_drv.h drm/i915: kill i915.powersave 2015-03-26 13:04:23 +01:00
i915_gem_batch_pool.c drm/i915: Mark shadow batch buffers as purgeable 2014-12-16 10:39:09 +01:00
i915_gem_context.c drm/i915: Initialize all contexts 2015-03-20 11:48:19 +01:00
i915_gem_debug.c
i915_gem_dmabuf.c
i915_gem_evict.c drm/i915: kerneldoc for i915_gem_shrinker.c 2015-03-20 11:48:16 +01:00
i915_gem_execbuffer.c drm/i915: Track page table reload need 2015-03-20 11:48:18 +01:00
i915_gem_gtt.c drm/i915: Finish gen6/7 dynamic page table allocation 2015-03-27 09:25:26 +01:00
i915_gem_gtt.h drm/i915: Finish gen6/7 dynamic page table allocation 2015-03-27 09:25:26 +01:00
i915_gem_render_state.c drm/i915: Remove obsolete seqno parameter from 'i915_add_request' 2014-12-03 09:35:19 +01:00
i915_gem_render_state.h
i915_gem_shrinker.c drm/i915: kerneldoc for i915_gem_shrinker.c 2015-03-20 11:48:16 +01:00
i915_gem_stolen.c Linux 4.0-rc3 2015-03-09 19:58:30 +10:00
i915_gem_tiling.c drm/i915: Check obj->vma_list under the struct_mutex 2015-02-24 15:30:42 +02:00
i915_gem_userptr.c drm/i915: Prevent use-after-free in invalidate_range_start callback 2015-02-05 16:31:30 +02:00
i915_gem.c drm/i915/skl: Support secondary (rotated) frame buffer mapping 2015-03-23 15:06:31 +01:00
i915_gpu_error.c drm/i915: Add fault address to error state for gen8 and gen9 2015-03-25 18:23:44 +01:00
i915_ioc32.c
i915_irq.c drm/i915: move clearing of RPS interrupt bits from disable to reset time 2015-03-24 10:14:48 +01:00
i915_params.c drm/i915: kill i915.powersave 2015-03-26 13:04:23 +01:00
i915_reg.h drm/i915: Add fault address to error state for gen8 and gen9 2015-03-25 18:23:44 +01:00
i915_suspend.c drm/i915: Remove regfile code&data for UMS suspend/resume 2015-02-27 18:10:39 +01:00
i915_sysfs.c drm/i915/skl: Updated the act_freq_mhz_show sysfs function 2015-03-17 22:30:25 +01:00
i915_trace_points.c
i915_trace.h drm/i915/trace: Fix offsets for 64b 2015-02-13 23:28:11 +01:00
i915_vgpu.c drm/i915: Adds graphic address space ballooning logic 2015-02-13 23:28:23 +01:00
i915_vgpu.h drm/i915: Add ULL postfix to VGT_MAGIC constant 2015-03-17 22:30:18 +01:00
intel_acpi.c
intel_atomic_plane.c drm/i915: Rotation property is now handled in DRM core 2015-03-10 09:59:33 +01:00
intel_atomic.c drm/i915: Set crtc backpointer when duplicating crtc state 2015-03-17 22:29:53 +01:00
intel_audio.c drm/i915: Make intel_crtc->config a pointer 2015-01-27 09:50:50 +01:00
intel_bios.c drm/i915/skl: Support for edp low_vswing param in vbt 2015-02-25 16:06:00 +01:00
intel_bios.h drm/i915/skl: Support for edp low_vswing param in vbt 2015-02-25 16:06:00 +01:00
intel_crt.c drm/i915: Implement connector state duplication 2015-03-26 16:28:21 +01:00
intel_ddi.c drm/i915: Use atomic state in intel_ddi_crtc_get_new_encoder() 2015-03-26 17:57:55 +01:00
intel_display.c drm/i915: Don't use encoder->new_crtc in compute_baseline_pipe_bpp() 2015-03-26 17:49:53 +01:00
intel_dp_mst.c drm/i915: Don't use staged config in intel_dp_mst_compute_config() 2015-03-26 18:00:18 +01:00
intel_dp.c drm/i915: Don't depend on encoder->new_crtc in intel_dp_compute_config() 2015-03-26 17:50:08 +01:00
intel_drv.h drm/i915: Rip out GET_SPRITE_COLORKEY ioctl 2015-03-27 09:08:04 +01:00
intel_dsi_panel_vbt.c drm/i915/dsi: remove intel_dsi_cmd.c and the unused functions therein 2015-01-29 16:57:14 +01:00
intel_dsi_pll.c drm/i915: Use DSI Pll1 for enabling MIPI DSI on Port C 2014-12-10 17:47:21 +01:00
intel_dsi.c drm/i915: Implement connector state duplication 2015-03-26 16:28:21 +01:00
intel_dsi.h drm/i915/dsi: add drm mipi dsi host support 2015-01-29 16:51:39 +01:00
intel_dvo.c drm/i915: Implement connector state duplication 2015-03-26 16:28:21 +01:00
intel_fbc.c drm/i915: kill i915.powersave 2015-03-26 13:04:23 +01:00
intel_fbdev.c drm/i915: Pass in plane state when (un)pinning frame buffers 2015-03-23 15:00:57 +01:00
intel_fifo_underrun.c drm/i915: Check for driver readyness before handling an underrun interrupt 2015-03-04 10:04:19 +02:00
intel_frontbuffer.c drm/i915: kill i915.powersave 2015-03-26 13:04:23 +01:00
intel_hdmi.c drm/i915: Don't depend on encoder->new_crtc in intel_hdmi_compute_config 2015-03-26 17:52:33 +01:00
intel_i2c.c
intel_lrc.c Linux 4.0-rc3 2015-03-09 19:58:30 +10:00
intel_lrc.h drm/i915: Rename 'flags' to 'dispatch_flags' for better code reading 2015-02-25 22:43:29 +01:00
intel_lvds.c drm/i915: Don't use encoder->new_crtc in intel_lvds_compute_config() 2015-03-26 18:00:48 +01:00
intel_modes.c
intel_opregion.c drm/i915: Remove DRIVER_MODESET checks from modeset code 2015-02-27 18:10:53 +01:00
intel_overlay.c drm/i915: Use GGTT view when (un)pinning objects to planes 2015-03-23 14:56:56 +01:00
intel_panel.c Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-02-16 15:48:00 -08:00
intel_pm.c drm/i915/skl: fix semicolon.cocci warnings 2015-03-26 16:21:41 +01:00
intel_psr.c drm/i915: Remove duplicated psr.active unset 2015-03-26 13:04:37 +01:00
intel_renderstate_gen6.c drm/i915: Add headers to the various render state 2014-12-10 17:47:23 +01:00
intel_renderstate_gen7.c drm/i915: Add headers to the various render state 2014-12-10 17:47:23 +01:00
intel_renderstate_gen8.c drm/i915: Add headers to the various render state 2014-12-10 17:47:23 +01:00
intel_renderstate_gen9.c drm/i915: Add headers to the various render state 2014-12-10 17:47:23 +01:00
intel_renderstate.h
intel_ringbuffer.c drm/i915: fix simple_return.cocci warnings 2015-03-17 22:30:00 +01:00
intel_ringbuffer.h drm/i915: add frontbuffer tracking to FBC 2015-03-17 22:29:56 +01:00
intel_runtime_pm.c drm/i915: Spelling s/auxilliary/auxiliary/ 2015-03-17 22:30:12 +01:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Implement connector state duplication 2015-03-26 16:28:21 +01:00
intel_sideband.c drm/i915: Correct the IOSF Dev_FN field for IOSF transfers 2015-02-09 14:26:19 +02:00
intel_sprite.c drm/i915: Rip out GET_SPRITE_COLORKEY ioctl 2015-03-27 09:08:04 +01:00
intel_tv.c drm/i915: Implement connector state duplication 2015-03-26 16:28:21 +01:00
intel_uncore.c drm/i915: Disable the mmio.debug WARN after it fires 2015-03-17 22:30:00 +01:00
Kconfig drm/i915/dsi: add drm mipi dsi host support 2015-01-29 16:51:39 +01:00
Makefile drm/i915: Extract i915_gem_shrinker.c 2015-03-20 11:48:15 +01:00