linux-sg2042/drivers/gpu/drm/i915
Ben Widawsky 254f965c39 drm/i915: preliminary context support
Very basic code for context setup/destruction in the driver.

Adds the file i915_gem_context.c This file implements HW context
support. On gen5+ a HW context consists of an opaque GPU object which is
referenced at times of context saves and restores.  With RC6 enabled,
the context is also referenced as the GPU enters and exists from RC6
(GPU has it's own internal power context, except on gen5).  Though
something like a context does exist for the media ring, the code only
supports contexts for the render ring.

In software, there is a distinction between contexts created by the
user, and the default HW context. The default HW context is used by GPU
clients that do not request setup of their own hardware context. The
default context's state is never restored to help prevent programming
errors. This would happen if a client ran and piggy-backed off another
clients GPU state.  The default context only exists to give the GPU some
offset to load as the current to invoke a save of the context we
actually care about. In fact, the code could likely be constructed,
albeit in a more complicated fashion, to never use the default context,
though that limits the driver's ability to swap out, and/or destroy
other contexts.

All other contexts are created as a request by the GPU client. These
contexts store GPU state, and thus allow GPU clients to not re-emit
state (and potentially query certain state) at any time. The kernel
driver makes certain that the appropriate commands are inserted.

There are 4 entry points into the contexts, init, fini, open, close.
The names are self-explanatory except that init can be called during
reset, and also during pm thaw/resume. As we expect our context to be
preserved across these events, we do not reinitialize in this case.

As Adam Jackson pointed out, The cutoff of 1MB where a HW context is
considered too big is arbitrary. The reason for this is even though
context sizes are increasing with every generation, they have yet to
eclipse even 32k. If we somehow read back way more than that, it
probably means BIOS has done something strange, or we're running on a
platform that wasn't designed for this.

v2: rename load/unload to init/fini (daniel)
remove ILK support for get_size() (indirectly daniel)
add HAS_HW_CONTEXTS macro to clarify supported platforms (daniel)
added comments (Ben)

Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
2012-06-14 17:36:16 +02:00
..
Makefile drm/i915: preliminary context support 2012-06-14 17:36:16 +02:00
dvo.h drm/i915: Subclass intel_encoder. 2010-08-09 11:24:28 -07:00
dvo_ch7xxx.c Drivers: i915: Fix all space related issues. 2011-09-19 18:01:47 -07:00
dvo_ch7017.c Drivers: i915: Fix all space related issues. 2011-09-19 18:01:47 -07:00
dvo_ivch.c Drivers: i915: Fix all space related issues. 2011-09-19 18:01:47 -07:00
dvo_sil164.c Drivers: i915: Fix all space related issues. 2011-09-19 18:01:47 -07:00
dvo_tfp410.c Drivers: i915: Fix all space related issues. 2011-09-19 18:01:47 -07:00
i915_debugfs.c drm/i915: add min freq control to debugfs 2012-06-04 21:34:47 +02:00
i915_dma.c drm/i915: preliminary context support 2012-06-14 17:36:16 +02:00
i915_drv.c drm/i915: preliminary context support 2012-06-14 17:36:16 +02:00
i915_drv.h drm/i915: preliminary context support 2012-06-14 17:36:16 +02:00
i915_gem.c drm/i915: preliminary context support 2012-06-14 17:36:16 +02:00
i915_gem_context.c drm/i915: preliminary context support 2012-06-14 17:36:16 +02:00
i915_gem_debug.c drm/i915: stop using dev->agp->base 2012-06-12 22:18:06 +02:00
i915_gem_dmabuf.c i915: add dma-buf vmap support for exporting vmapped buffer 2012-05-31 14:13:57 +01:00
i915_gem_evict.c drm/i915: Introduce for_each_ring() macro 2012-05-19 22:39:53 +02:00
i915_gem_execbuffer.c drm/i915: Check whether the ring is initialised prior to dispatch 2012-05-19 22:39:53 +02:00
i915_gem_gtt.c i915: add dmabuf/prime buffer sharing support. 2012-05-23 10:47:10 +01:00
i915_gem_stolen.c drm/i915: Split the stolen handling for GEM out of i915_dma.c 2012-05-03 11:18:11 +02:00
i915_gem_tiling.c drm/i915: Only the zap the VMA after updating the tiling parameters 2012-05-03 11:18:07 +02:00
i915_ioc32.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
i915_irq.c Merge remote-tracking branch 'airlied/drm-prime-vmap' into drm-intel-next-queued 2012-06-01 10:52:54 +02:00
i915_reg.h drm/i915: CXT_SIZE register offsets added 2012-06-14 17:36:16 +02:00
i915_suspend.c drm/i915: gen6_enable_rps() wants to be called after ring initialisation 2012-05-19 22:38:29 +02:00
i915_sysfs.c drm/i915: simplify sysfs setup code 2012-06-01 10:00:57 +02:00
i915_trace.h drm/i915: improve i915_wait_request_begin trace 2012-05-25 09:55:15 +02:00
i915_trace_points.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
intel_acpi.c drm/i915: [sparse] trivial sparse fixes 2012-04-18 10:34:49 +02:00
intel_bios.c Merge branch 'drm-intel-next' of git://people.freedesktop.org/~danvet/drm-intel into drm-core-next 2012-04-12 10:27:01 +01:00
intel_bios.h drm/i915: VBT Parser cleanup for eDP block 2012-01-13 08:37:44 -08:00
intel_crt.c drm/i915: account for only one PCH receiver on Haswell 2012-05-19 22:39:47 +02:00
intel_ddi.c drm/i915: add set_infoframes to struct intel_hdmi 2012-05-30 21:36:58 +02:00
intel_display.c drm/i915: ignore pipe select bit when checking for LVDS register initialization 2012-06-13 21:05:06 +02:00
intel_dp.c drm/i915: don't chnage the original mode in dp_mode_fixup 2012-06-04 21:29:47 +02:00
intel_drv.h drm/i915: Switch off FBC when disabling the primary plane when obscured 2012-06-13 20:10:00 +02:00
intel_dvo.c drm/i915/intel_i2c: refactor using intel_gmbus_get_adapter 2012-03-28 14:40:44 +02:00
intel_fb.c drm/i915: stop using dev->agp->base 2012-06-12 22:18:06 +02:00
intel_hdmi.c drm/i915: ensure HDMI port is disabled inside set_infoframes 2012-06-12 19:19:52 +02:00
intel_i2c.c drm/i915: be more careful when returning -ENXIO in gmbus transfer 2012-05-21 21:04:21 +02:00
intel_lvds.c drm/i915: allow pipe A for lvds on gen4 2012-06-12 19:28:40 +02:00
intel_modes.c Merge branch 'drm-intel-next' of git://people.freedesktop.org/~danvet/drm-intel into drm-core-next 2012-04-12 10:27:01 +01:00
intel_opregion.c drm/i915: [sparse] __iomem fixes for opregion 2012-05-03 11:18:00 +02:00
intel_overlay.c drm/i915: s/i915_wait_request/i915_wait_seqno/g 2012-05-25 14:18:42 +02:00
intel_panel.c drm/i915: properly enable the blc controller on the right pipe 2012-06-12 19:27:58 +02:00
intel_pm.c drm/i915: Switch off FBC when disabling the primary plane when obscured 2012-06-13 20:10:00 +02:00
intel_ringbuffer.c drm/i915: stop using dev->agp->base 2012-06-12 22:18:06 +02:00
intel_ringbuffer.h drm/i915: Introduce for_each_ring() macro 2012-05-19 22:39:53 +02:00
intel_sdvo.c Merge remote-tracking branch 'airlied/drm-prime-vmap' into drm-intel-next-queued 2012-06-01 10:52:54 +02:00
intel_sdvo_regs.h drm/i915: properly handle interlaced bit for sdvo dtd conversion 2012-05-24 17:53:52 +02:00
intel_sprite.c drm/i915: Switch off FBC when disabling the primary plane when obscured 2012-06-13 20:10:00 +02:00
intel_tv.c drm/i915: Adding TV Out Missing modes. 2012-05-24 17:54:08 +02:00