Merge drm/drm-next into drm-intel-next-queued
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / i915_irq.h
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2019 Intel Corporation
4  */
5
6 #ifndef __I915_IRQ_H__
7 #define __I915_IRQ_H__
8
9 #include <linux/types.h>
10
11 #include "i915_drv.h"
12
13 struct drm_i915_private;
14 struct intel_crtc;
15
16 extern void intel_irq_init(struct drm_i915_private *dev_priv);
17 extern void intel_irq_fini(struct drm_i915_private *dev_priv);
18 int intel_irq_install(struct drm_i915_private *dev_priv);
19 void intel_irq_uninstall(struct drm_i915_private *dev_priv);
20
21 u32 i915_pipestat_enable_mask(struct drm_i915_private *dev_priv,
22                               enum pipe pipe);
23 void
24 i915_enable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
25                      u32 status_mask);
26
27 void
28 i915_disable_pipestat(struct drm_i915_private *dev_priv, enum pipe pipe,
29                       u32 status_mask);
30
31 void valleyview_enable_display_irqs(struct drm_i915_private *dev_priv);
32 void valleyview_disable_display_irqs(struct drm_i915_private *dev_priv);
33
34 void i915_hotplug_interrupt_update(struct drm_i915_private *dev_priv,
35                                    u32 mask,
36                                    u32 bits);
37 void ilk_update_display_irq(struct drm_i915_private *dev_priv,
38                             u32 interrupt_mask,
39                             u32 enabled_irq_mask);
40 static inline void
41 ilk_enable_display_irq(struct drm_i915_private *dev_priv, u32 bits)
42 {
43         ilk_update_display_irq(dev_priv, bits, bits);
44 }
45 static inline void
46 ilk_disable_display_irq(struct drm_i915_private *dev_priv, u32 bits)
47 {
48         ilk_update_display_irq(dev_priv, bits, 0);
49 }
50 void bdw_update_pipe_irq(struct drm_i915_private *dev_priv,
51                          enum pipe pipe,
52                          u32 interrupt_mask,
53                          u32 enabled_irq_mask);
54 static inline void bdw_enable_pipe_irq(struct drm_i915_private *dev_priv,
55                                        enum pipe pipe, u32 bits)
56 {
57         bdw_update_pipe_irq(dev_priv, pipe, bits, bits);
58 }
59 static inline void bdw_disable_pipe_irq(struct drm_i915_private *dev_priv,
60                                         enum pipe pipe, u32 bits)
61 {
62         bdw_update_pipe_irq(dev_priv, pipe, bits, 0);
63 }
64 void ibx_display_interrupt_update(struct drm_i915_private *dev_priv,
65                                   u32 interrupt_mask,
66                                   u32 enabled_irq_mask);
67 static inline void
68 ibx_enable_display_interrupt(struct drm_i915_private *dev_priv, u32 bits)
69 {
70         ibx_display_interrupt_update(dev_priv, bits, bits);
71 }
72 static inline void
73 ibx_disable_display_interrupt(struct drm_i915_private *dev_priv, u32 bits)
74 {
75         ibx_display_interrupt_update(dev_priv, bits, 0);
76 }
77
78 void gen5_enable_gt_irq(struct drm_i915_private *dev_priv, u32 mask);
79 void gen5_disable_gt_irq(struct drm_i915_private *dev_priv, u32 mask);
80 void gen6_mask_pm_irq(struct intel_gt *gt, u32 mask);
81 void gen6_unmask_pm_irq(struct intel_gt *gt, u32 mask);
82 void gen11_reset_rps_interrupts(struct drm_i915_private *dev_priv);
83 void gen6_reset_rps_interrupts(struct drm_i915_private *dev_priv);
84 void gen6_enable_rps_interrupts(struct drm_i915_private *dev_priv);
85 void gen6_disable_rps_interrupts(struct drm_i915_private *dev_priv);
86 void gen6_rps_reset_ei(struct drm_i915_private *dev_priv);
87
88 static inline u32 gen6_sanitize_rps_pm_mask(const struct drm_i915_private *i915,
89                                             u32 mask)
90 {
91         return mask & ~i915->gt_pm.rps.pm_intrmsk_mbz;
92 }
93
94 void intel_runtime_pm_disable_interrupts(struct drm_i915_private *dev_priv);
95 void intel_runtime_pm_enable_interrupts(struct drm_i915_private *dev_priv);
96 static inline bool intel_irqs_enabled(struct drm_i915_private *dev_priv)
97 {
98         /*
99          * We only use drm_irq_uninstall() at unload and VT switch, so
100          * this is the only thing we need to check.
101          */
102         return dev_priv->runtime_pm.irqs_enabled;
103 }
104
105 static inline void intel_synchronize_irq(struct drm_i915_private *i915)
106 {
107         synchronize_irq(i915->drm.pdev->irq);
108 }
109
110 int intel_get_crtc_scanline(struct intel_crtc *crtc);
111 void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv,
112                                      u8 pipe_mask);
113 void gen8_irq_power_well_pre_disable(struct drm_i915_private *dev_priv,
114                                      u8 pipe_mask);
115 void gen9_reset_guc_interrupts(struct drm_i915_private *dev_priv);
116 void gen9_enable_guc_interrupts(struct drm_i915_private *dev_priv);
117 void gen9_disable_guc_interrupts(struct drm_i915_private *dev_priv);
118 void gen11_reset_guc_interrupts(struct drm_i915_private *i915);
119 void gen11_enable_guc_interrupts(struct drm_i915_private *i915);
120 void gen11_disable_guc_interrupts(struct drm_i915_private *i915);
121
122 bool i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe,
123                               bool in_vblank_irq, int *vpos, int *hpos,
124                               ktime_t *stime, ktime_t *etime,
125                               const struct drm_display_mode *mode);
126
127 u32 i915_get_vblank_counter(struct drm_crtc *crtc);
128 u32 g4x_get_vblank_counter(struct drm_crtc *crtc);
129
130 int i8xx_enable_vblank(struct drm_crtc *crtc);
131 int i945gm_enable_vblank(struct drm_crtc *crtc);
132 int i965_enable_vblank(struct drm_crtc *crtc);
133 int ilk_enable_vblank(struct drm_crtc *crtc);
134 int bdw_enable_vblank(struct drm_crtc *crtc);
135 void i8xx_disable_vblank(struct drm_crtc *crtc);
136 void i945gm_disable_vblank(struct drm_crtc *crtc);
137 void i965_disable_vblank(struct drm_crtc *crtc);
138 void ilk_disable_vblank(struct drm_crtc *crtc);
139 void bdw_disable_vblank(struct drm_crtc *crtc);
140
141 #endif /* __I915_IRQ_H__ */