linux_dsm_epyc7002/drivers/gpu/drm/i915
Ben Widawsky abd58f0175 drm/i915/bdw: Implement interrupt changes
The interrupt handling implementation remains the same as previous
generations with the 4 types of registers, status, identity, mask, and
enable. However the layout of where the bits go have changed entirely.
To address these changes, all of the interrupt vfuncs needed special
gen8 code.

The way it works is there is a top level status register now which
informs the interrupt service routine which unit caused the interrupt,
and therefore which interrupt registers to read to process the
interrupt. For display the division is quite logical, a set of interrupt
registers for each pipe, and in addition to those, a set each for "misc"
and port.

For GT the things get a bit hairy, as seen by the code. Each of the GT
units has it's own bits defined. They all look *very similar* and
resides in 16 bits of a GT register. As an example, RCS and BCS share
register 0. To compact the code a bit, at a slight expense to
complexity, this is exactly how the code works as well. 2 structures are
added to the ring buffer so that our ring buffer interrupt handling code
knows which ring shares the interrupt registers, and a shift value (ie.
the top or bottom 16 bits of the register).

The above allows us to kept the interrupt register caching scheme, the
per interrupt enables, and the code to mask and unmask interrupts
relatively clean (again at the cost of some more complexity).

Most of the GT units mentioned above are command streamers, and so the
symmetry should work quite well for even the yet to be implemented rings
which Broadwell adds.

v2: Fixes up a couple of bugs, and is more verbose about errors in the
Broadwell interrupt handler.

v3: fix DE_MISC IER offset

v4: Simplify interrupts:
I totally misread the docs the first time I implemented interrupts, and
so this should greatly simplify the mess. Unlike GEN6, we never touch
the regular mask registers in irq_get/put.

v5: Rebased on to of recent pch hotplug setup changes.

v6: Fixup on top of moving num_pipes to intel_info.

v7: Rebased on top of Egbert Eich's hpd irq handling rework. Also
wired up ibx_hpd_irq_setup for gen8.

v8: Rebase on top of Jani's asle handling rework.

v9: Rebase on top of Ben's VECS enabling for Haswell, where he
unfortunately went OCD on the gt irq #defines. Not that they're still
not yet fully consistent:
- Used the GT_RENDER_ #defines + bdw shifts.
- Dropped the shift from the L3_PARITY stuff, seemed clearer.
- s/irq_refcount/irq_refcount.gt/

v10: Squash in VECS enabling patches and the gen8_gt_irq_handler
refactoring from Zhao Yakui <yakui.zhao@intel.com>

v11: Rebase on top of the interrupt cleanups in upstream.

v12: Rebase on top of Ben's DPF changes in upstream.

v13: Drop bdw from the HAS_L3_DPF feature flag for now, it's unclear what
exactly needs to be done. Requested by Ben.

v14: Fix the patch.
- Drop the mask of reserved bits and assorted logic, it doesn't match
  the spec.
- Do the posting read inconditionally instead of commenting it out.
- Add a GEN8_MASTER_IRQ_CONTROL definition and use it.
- Fix up the GEN8_PIPE interrupt defines and give the GEN8_ prefixes -
  we actually will need to use them.
- Enclose macros in do {} while (0) (checkpatch).
- Clear DE_MISC interrupt bits only after having processed them.
- Fix whitespace fail (checkpatch).
- Fix overtly long lines where appropriate (checkpatch).
- Don't use typedef'ed private_t (maintainer-scripts).
- Align the function parameter list correctly.

Signed-off-by: Ben Widawsky <ben@bwidawsk.net> (v4)
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

bikeshed
2013-11-08 18:09:39 +01:00
..
dvo_ch7xxx.c drm/i915: dvo_ch7xxx: fix vsync polarity setting 2013-07-25 16:10:22 +02:00
dvo_ch7017.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ivch.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_ns2501.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_sil164.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo_tfp410.c drm/i915/dvo: implement get_hw_state 2012-09-06 07:58:52 +02:00
dvo.h drm/i915: Remove unused mode_fixup() vfunc of struct intel_dvo_dev_ops 2013-09-05 21:39:59 +02:00
i915_debugfs.c drm/i915: Enable DP port CRC for the "auto" source on g4x/vlv 2013-11-01 18:27:56 +01:00
i915_dma.c Merge tag 'v3.12' into drm-intel-next 2013-11-04 16:28:52 +01:00
i915_drv.c drm/i915/bdw: Add device IDs 2013-11-08 18:09:36 +01:00
i915_drv.h drm/i915/bdw: Implement interrupt changes 2013-11-08 18:09:39 +01:00
i915_gem_context.c drm/i915/bdw: HW context support 2013-11-08 18:09:37 +01:00
i915_gem_debug.c drm/i915: Fix #endif comment 2013-08-09 10:45:52 +02:00
i915_gem_dmabuf.c drm/i915: Pin pages whilst mapping the dma-buf 2013-09-03 19:17:58 +02:00
i915_gem_evict.c drm/i915: trace vm eviction instead of everything 2013-10-01 07:45:20 +02:00
i915_gem_execbuffer.c drm/i915: Convert active API to VMA 2013-10-01 07:45:21 +02:00
i915_gem_gtt.c drm/i915/bdw: support GMS and GGMS changes 2013-11-08 18:09:39 +01:00
i915_gem_stolen.c Linux 3.12-rc2 2013-09-24 09:32:53 +02:00
i915_gem_tiling.c drm/i915: prevent tiling changes on framebuffer backing storage 2013-10-16 22:04:52 +02:00
i915_gem.c drm/i915/bdw: Swizzling support 2013-11-08 18:09:37 +01:00
i915_gpu_error.c drm/i915/bdw: Fences on gen8 look just like gen7 2013-11-08 18:09:36 +01:00
i915_ioc32.c UAPI: (Scripted) Convert #include "..." to #include <path/...> in drivers/gpu/ 2012-10-02 18:01:07 +01:00
i915_irq.c drm/i915/bdw: Implement interrupt changes 2013-11-08 18:09:39 +01:00
i915_reg.h drm/i915/bdw: Implement interrupt changes 2013-11-08 18:09:39 +01:00
i915_suspend.c drm/i915: don't save/restore CACHE_MODE_0 on gen7+ 2013-10-11 23:32:32 +02:00
i915_sysfs.c drm/i915: Finish enabling rps before use by sysfs or debugfs 2013-10-10 14:23:39 +02:00
i915_trace_points.c
i915_trace.h drm/i915: Add a tracepoint for using a semaphore 2013-10-01 07:45:24 +02:00
i915_ums.c drm/i915: scrap register address storage 2013-06-10 19:54:14 +02:00
intel_acpi.c i915: fix ACPI _DSM warning 2013-08-05 19:04:05 +02:00
intel_bios.c drm/i915: Rip out SUPPORTS_EDP 2013-10-01 07:45:07 +02:00
intel_bios.h drm/i915: use the HDMI DDI buffer translations from VBT 2013-10-01 07:45:04 +02:00
intel_crt.c i915: fix compiler warning 2013-10-31 15:28:23 -07:00
intel_ddi.c drm/i915: Add HSW CRT output readout support 2013-10-28 17:48:24 +01:00
intel_display.c drm/i915/bdw: display stuff 2013-11-08 18:09:38 +01:00
intel_dp.c Merge tag 'v3.12' into drm-intel-next 2013-11-04 16:28:52 +01:00
intel_drv.h drm/i915: rename i915_init_power_well to init_power_domains_init 2013-10-29 18:53:21 +01:00
intel_dsi_cmd.c drm/i915/dsi: s/size_t/int/ 2013-09-04 17:34:51 +02:00
intel_dsi_cmd.h drm/i915/dsi: s/size_t/int/ 2013-09-04 17:34:51 +02:00
intel_dsi_pll.c drm/i915: Use adjusted_mode in DSI PLL calculations 2013-09-16 23:36:38 +02:00
intel_dsi.c drm/i915: Use pipe_name() instead of the pipe number 2013-10-16 19:42:52 +02:00
intel_dsi.h drm/i915: add VLV DSI PLL Calculations 2013-09-04 17:34:48 +02:00
intel_dvo.c drm/i915: destroy connector sysfs files earlier 2013-10-01 07:45:48 +02:00
intel_fbdev.c drm/i915: fix open-coded DIV_ROUND_UP 2013-10-21 10:04:03 +02:00
intel_hdmi.c drm/i915: Move some hdmi enable function name to vlv specific. 2013-10-16 13:32:18 +02:00
intel_i2c.c drm/i915: Program GMBUS Frequency based on the CDCLK for VLV. 2013-10-01 07:45:41 +02:00
intel_lvds.c Merge tag 'v3.12' into drm-intel-next 2013-11-04 16:28:52 +01:00
intel_modes.c drm/i915: Add "Automatic" mode for the "Broadcast RGB" property 2013-01-20 13:09:44 +01:00
intel_opregion.c drm/i915: Add breadcrumbs for why the backlight is being set 2013-10-14 10:02:36 +02:00
intel_overlay.c drm/i915: use pointer = k[cmz...]alloc(sizeof(*pointer), ...) pattern 2013-10-01 07:45:01 +02:00
intel_panel.c drm/i915: Use pipe_name() instead of the pipe number 2013-10-16 19:42:52 +02:00
intel_pm.c drm/i915/bdw: Clock gating init 2013-11-08 18:09:38 +01:00
intel_ringbuffer.c drm/i915/bdw: Implement interrupt changes 2013-11-08 18:09:39 +01:00
intel_ringbuffer.h drm/i915: Write RING_TAIL once per-request 2013-09-10 15:35:58 +02:00
intel_sdvo_regs.h drm/i915: clear the entire sdvo infoframe buffer 2012-10-24 15:12:48 +02:00
intel_sdvo.c drm/i915: destroy connector sysfs files earlier 2013-10-01 07:45:48 +02:00
intel_sideband.c drm/i915/vlv: add doc names to sideband file 2013-10-11 23:33:44 +02:00
intel_sprite.c drm/i915/bdw: display stuff 2013-11-08 18:09:38 +01:00
intel_tv.c drm/i915: Rename intel_flush_display_plane to intel_flush_primary_plane 2013-10-10 12:47:02 +02:00
intel_uncore.c drm/i915/bdw: Initialize BDW forcewake vfuncs 2013-11-08 18:08:46 +01:00
Kconfig drm/i915: Kconfig option to disable the legacy fbdev support 2013-10-11 23:37:23 +02:00
Makefile drm/i915: rename intel_fb.c to intel_fbdev.c 2013-10-11 23:37:33 +02:00