linux/drivers/gpu/drm/i915
Chris Wilson 8f9420184a drm/i915: Move the modulus for ring emission to the register write
Space reservation is already safe with respect to the ring->size
modulus, but hardware only expects to see values in the range
0...ring->size-1 (inclusive) and so requires the modulus to prevent us
writing the value ring->size instead of 0. As this is only required for
the register itself, we can defer the modulus to the register update and
not perform it after every command packet. We keep the
intel_ring_advance() around in the code to provide demarcation for the
end-of-packet (which then can be compared against intel_ring_begin() as
the number of dwords emitted must match the reserved space).

v2: Assert that the ring size is a power-of-two to match assumptions in
the code. Simplify the comment before writing the tail value to explain
why the modulus is necessary.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Dave Gordon <david.s.gordon@intel.com>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1470174640-18242-13-git-send-email-chris@chris-wilson.co.uk
2016-08-02 22:58:25 +01:00
..
gvt drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +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/cmdparser: Remove stray intel_engine_cs *ring 2016-07-27 16:23:05 +01:00
i915_debugfs.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
i915_drv.c Revert "drm/i915: Enable RC6 immediately" 2016-07-21 21:43:19 +01:00
i915_drv.h drm/i915: Simplify request_alloc by returning the allocated request 2016-08-02 22:58:20 +01:00
i915_gem_batch_pool.c drm/i915: Only drop the batch-pool's object reference 2016-07-26 13:01:00 +01:00
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Reduce engine->emit_flush() to a single mode parameter 2016-08-02 22:58:19 +01:00
i915_gem_debug.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
i915_gem_dmabuf.c drm/i915: Wrap drm_gem_object_reference in i915_gem_object_get 2016-07-20 13:40:11 +01:00
i915_gem_dmabuf.h drm/i915: Serialise presentation with imported dmabufs 2016-06-17 10:32:26 +01:00
i915_gem_evict.c drm/i915: Rename drm_gem_object_unreference in preparation for lockless free 2016-07-20 13:40:12 +01:00
i915_gem_execbuffer.c drm/i915: Unify legacy/execlists emission of MI_BATCHBUFFER_START 2016-08-02 22:58:21 +01:00
i915_gem_fence.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
i915_gem_gtt.c drm/i915: Reduce engine->emit_flush() to a single mode parameter 2016-08-02 22:58:19 +01:00
i915_gem_gtt.h drm/i915: Treat ringbuffer writes as write to normal memory 2016-07-20 13:40:14 +01:00
i915_gem_render_state.c drm/i915: Unify legacy/execlists emission of MI_BATCHBUFFER_START 2016-08-02 22:58:21 +01:00
i915_gem_render_state.h
i915_gem_request.c drm/i915: Convert engine->write_tail to operate on a request 2016-08-02 22:58:24 +01:00
i915_gem_request.h drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
i915_gem_shrinker.c drm/i915: Prefer list_first_entry_or_null 2016-07-26 13:00:58 +01:00
i915_gem_stolen.c drm/i915: Rename drm_gem_object_unreference in preparation for lockless free 2016-07-20 13:40:12 +01:00
i915_gem_tiling.c drm/i915: Rename drm_gem_object_unreference_unlocked in preparation for lockless free 2016-07-20 13:40:13 +01:00
i915_gem_userptr.c drm/i915: Rename drm_gem_object_unreference_unlocked in preparation for lockless free 2016-07-20 13:40:13 +01:00
i915_gem.c drm/i915: Simplify request_alloc by returning the allocated request 2016-08-02 22:58:20 +01:00
i915_gem.h drm/i915: Add GEM debugging Kconfig option 2016-04-14 10:45:40 +01:00
i915_gpu_error.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
i915_guc_reg.h drm/i915/bxt: reserve space for RC6 in the the GuC WOPCM 2016-05-18 12:49:19 +01:00
i915_guc_submission.c drm/i915: Rename intel_context[engine].ringbuf 2016-08-02 22:58:15 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
i915_params.c drm/i915/guc: Revert "drm/i915/guc: enable GuC loading & submission by default" 2016-07-19 15:45:21 -07:00
i915_params.h drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
i915_pci.c drm/i915: Add missing ring_mask to Pineview 2016-07-29 16:22:42 +01:00
i915_pvinfo.h drm/i915: Use offsetof() to calculate the offset of members in PVINFO page 2016-06-17 19:44:25 +01:00
i915_reg.h drm/i915/gen9: Update i915_drpc_info debugfs for coarse pg & forcewake info 2016-08-02 16:09:14 +02:00
i915_suspend.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
i915_sysfs.c drm/i915: Fix up some stray to_i915(dev) after a recent merge 2016-07-28 07:28:17 +01:00
i915_trace_points.c
i915_trace.h drm/i915: Simplify request_alloc by returning the allocated request 2016-08-02 22:58:20 +01:00
i915_vgpu.c drm/i915: Update missing kerneldoc 2016-07-19 10:34:24 +02:00
i915_vgpu.h drm/i915: Fold vGPU active check into inner functions 2016-06-17 19:44:29 +01:00
intel_acpi.c
intel_atomic_plane.c drm/i915: Revert async unpin and nonblocking atomic commit 2016-06-01 09:46:46 +02:00
intel_atomic.c drm: Consolidate plane arrays in drm_atomic_state 2016-06-02 17:20:25 +02:00
intel_audio.c drm/i915: Replace some open coded intel_crtc_has_dp_encoder()s 2016-07-07 13:10:12 +03:00
intel_bios.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_bios.h drm/i915: Parse LFP brightness control field in VBT 2016-05-02 16:17:38 +03:00
intel_breadcrumbs.c drm/i915: Reduce breadcrumb lock coverage for intel_engine_enable_signaling() 2016-07-26 13:00:58 +01:00
intel_color.c drm/i915: Kill has_dsi_encoder 2016-07-07 13:10:20 +03:00
intel_crt.c drm/i915/vlv: Disable HPD in valleyview_crt_detect_hotplug() 2016-07-14 22:06:11 +02:00
intel_csr.c drm/i915: Remove misleading CSR firmware loading docs 2016-07-21 22:23:04 +02:00
intel_ddi.c drm/i915: Extract bdw_get_buf_trans_edp() 2016-08-02 15:09:20 +03:00
intel_device_info.c drm/i915: Split out runtime configuration of device info to its own file 2016-07-05 11:53:27 +01:00
intel_display.c drm/i915: Simplify request_alloc by returning the allocated request 2016-08-02 22:58:20 +01:00
intel_dp_aux_backlight.c drm/i915: Add Backlight Control using DPCD for eDP connectors (v9) 2016-04-26 15:17:54 +03:00
intel_dp_link_training.c drm/i915: Revert DisplayPort fast link training feature 2016-06-20 12:37:07 +03:00
intel_dp_mst.c drm/i915: Split DP/eDP/FDI and HDMI/DVI DDI buffer programming apart 2016-08-02 15:09:20 +03:00
intel_dp.c drm/i915: Warn about aux msg buffer vs. size mismatch 2016-08-02 16:25:10 +03:00
intel_dpio_phy.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dpll_mgr.c drm/i915: s/INTEL_OUTPUT_DISPLAYPORT/INTEL_OUTPUT_DP/ 2016-07-07 13:10:16 +03:00
intel_dpll_mgr.h
intel_drv.h drm/i915: Split DP/eDP/FDI and HDMI/DVI DDI buffer programming apart 2016-08-02 15:09:20 +03:00
intel_dsi_dcs_backlight.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi_panel_vbt.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi_pll.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi.c drm/i915: Kill has_dsi_encoder 2016-07-07 13:10:20 +03:00
intel_dsi.h drm/i915/dsi: CABC support for Panel PWM backlight control 2016-05-17 16:12:39 +03:00
intel_dvo.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_engine_cs.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
intel_fbc.c drm/i915: remove redundant fbc warnings 2016-08-02 14:25:46 +03:00
intel_fbdev.c drm/i915: Treat ringbuffer writes as write to normal memory 2016-07-20 13:40:14 +01:00
intel_fifo_underrun.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_frontbuffer.c
intel_guc_fwif.h drm/i915/guc: rework guc_add_workqueue_item() 2016-05-23 14:21:53 +01:00
intel_guc_loader.c drm/i915:gen9: restrict WaC6DisallowByGfxPause 2016-07-21 14:48:00 +01:00
intel_guc.h drm/i915/guc: index host arrays by i915 engine ID, not guc_id 2016-06-21 11:24:25 +01:00
intel_gvt.c drm/i915/gvt: Mark i915.enable_gvt as false if loading fails 2016-06-21 12:40:13 +01:00
intel_gvt.h drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
intel_hdmi.c drm/i915: Simplify hdmi_12bpc_possible() 2016-07-07 13:10:24 +03:00
intel_hotplug.c drm/i915: Update missing kerneldoc 2016-07-19 10:34:24 +02:00
intel_i2c.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_lrc.c drm/i915: Move the modulus for ring emission to the register write 2016-08-02 22:58:25 +01:00
intel_lrc.h drm/i915: Remove obsolete engine->gpu_caches_dirty 2016-08-02 22:58:19 +01:00
intel_lvds.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_mocs.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
intel_mocs.h drm/i915: rename 'ring' where it refers to an engine or engine_id 2016-07-21 09:59:41 +01:00
intel_modes.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_opregion.c drm/i915: Ignore panel type from OpRegion on SKL 2016-07-14 16:05:40 +03:00
intel_overlay.c drm/i915: Simplify request_alloc by returning the allocated request 2016-08-02 22:58:20 +01:00
intel_panel.c drm/i915: Introduce Kabypoint PCH for Kabylake H/DT. 2016-07-07 10:01:37 -07:00
intel_pm.c drm/i915: Program FW_BLC_SELF on 915G as well 2016-08-02 16:22:05 +03:00
intel_psr.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h
intel_ringbuffer.c drm/i915: Move the modulus for ring emission to the register write 2016-08-02 22:58:25 +01:00
intel_ringbuffer.h drm/i915: Move the modulus for ring emission to the register write 2016-08-02 22:58:25 +01:00
intel_runtime_pm.c drm/i915: Enable polling when we don't have hpd 2016-07-14 22:06:11 +02:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_sideband.c drm/i915: Convert wait_for(I915_READ(reg)) to intel_wait_for_register() 2016-06-30 15:42:33 +01:00
intel_sprite.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_tv.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_uncore.c Revert "drm/i915: Enable RC6 immediately" 2016-07-21 21:43:19 +01:00
intel_vbt_defs.h drm/i915: Extract physical display dimensions from VBT 2016-06-02 14:33:09 +03:00
Kconfig drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
Kconfig.debug drm/i915: Select DRM_VGEM for igt 2016-07-10 13:22:39 +01:00
Makefile drm/i915: Move GEM request routines to i915_gem_request.c 2016-07-20 09:29:53 +01:00