Home | History | Annotate | Line # | Download | only in display
      1  1.6  riastrad /*	$NetBSD: intel_display.h,v 1.6 2021/12/19 11:48:27 riastradh Exp $	*/
      2  1.1  riastrad 
      3  1.1  riastrad /*
      4  1.1  riastrad  * Copyright  2006-2019 Intel Corporation
      5  1.1  riastrad  *
      6  1.1  riastrad  * Permission is hereby granted, free of charge, to any person obtaining a
      7  1.1  riastrad  * copy of this software and associated documentation files (the "Software"),
      8  1.1  riastrad  * to deal in the Software without restriction, including without limitation
      9  1.1  riastrad  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     10  1.1  riastrad  * and/or sell copies of the Software, and to permit persons to whom the
     11  1.1  riastrad  * Software is furnished to do so, subject to the following conditions:
     12  1.1  riastrad  *
     13  1.1  riastrad  * The above copyright notice and this permission notice (including the next
     14  1.1  riastrad  * paragraph) shall be included in all copies or substantial portions of the
     15  1.1  riastrad  * Software.
     16  1.1  riastrad  *
     17  1.1  riastrad  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     18  1.1  riastrad  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19  1.1  riastrad  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     20  1.1  riastrad  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     21  1.1  riastrad  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     22  1.1  riastrad  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
     23  1.1  riastrad  * IN THE SOFTWARE.
     24  1.1  riastrad  *
     25  1.1  riastrad  */
     26  1.1  riastrad 
     27  1.1  riastrad #ifndef _INTEL_DISPLAY_H_
     28  1.1  riastrad #define _INTEL_DISPLAY_H_
     29  1.1  riastrad 
     30  1.5  riastrad /*
     31  1.5  riastrad  * NetBSD already has struct pipe, and according to C99 6.2.3 there's
     32  1.5  riastrad  * only one namespace for struct, union, and enum tags, but the i915
     33  1.5  riastrad  * driver wants a type called enum pipe.
     34  1.5  riastrad  *
     35  1.5  riastrad  * So rename it to avoid conflicts which confuse tools like ctfmerge --
     36  1.5  riastrad  * but make sure we include <sys/file.h> first to avoid having two
     37  1.5  riastrad  * different versions of struct file, one with a pointer to struct pipe
     38  1.5  riastrad  * and another with a pointer to struct i915_pipe.
     39  1.5  riastrad  *
     40  1.5  riastrad  * This will cause trouble if we ever have an API that involves `pipe'
     41  1.5  riastrad  * as a member which we need to reference from within drm code.  But
     42  1.5  riastrad  * for now that is not the case.
     43  1.5  riastrad  *
     44  1.5  riastrad  * XXX Yes, this is disgusting.  Sorry.
     45  1.5  riastrad  */
     46  1.5  riastrad #include <sys/types.h>
     47  1.5  riastrad #include <sys/file.h>
     48  1.5  riastrad #define	pipe	pipe_drmhack
     49  1.5  riastrad 
     50  1.1  riastrad #include <drm/drm_util.h>
     51  1.1  riastrad #include <drm/i915_drm.h>
     52  1.1  riastrad 
     53  1.1  riastrad enum link_m_n_set;
     54  1.1  riastrad struct dpll;
     55  1.1  riastrad struct drm_connector;
     56  1.1  riastrad struct drm_device;
     57  1.1  riastrad struct drm_display_mode;
     58  1.1  riastrad struct drm_encoder;
     59  1.1  riastrad struct drm_file;
     60  1.1  riastrad struct drm_format_info;
     61  1.1  riastrad struct drm_framebuffer;
     62  1.1  riastrad struct drm_i915_error_state_buf;
     63  1.1  riastrad struct drm_i915_gem_object;
     64  1.1  riastrad struct drm_i915_private;
     65  1.1  riastrad struct drm_modeset_acquire_ctx;
     66  1.1  riastrad struct drm_plane;
     67  1.1  riastrad struct drm_plane_state;
     68  1.1  riastrad struct i915_ggtt_view;
     69  1.1  riastrad struct intel_crtc;
     70  1.1  riastrad struct intel_crtc_state;
     71  1.1  riastrad struct intel_digital_port;
     72  1.1  riastrad struct intel_dp;
     73  1.1  riastrad struct intel_encoder;
     74  1.1  riastrad struct intel_load_detect_pipe;
     75  1.1  riastrad struct intel_plane;
     76  1.1  riastrad struct intel_plane_state;
     77  1.1  riastrad struct intel_remapped_info;
     78  1.1  riastrad struct intel_rotation_info;
     79  1.1  riastrad struct intel_crtc_state;
     80  1.1  riastrad 
     81  1.1  riastrad enum i915_gpio {
     82  1.1  riastrad 	GPIOA,
     83  1.1  riastrad 	GPIOB,
     84  1.1  riastrad 	GPIOC,
     85  1.1  riastrad 	GPIOD,
     86  1.1  riastrad 	GPIOE,
     87  1.1  riastrad 	GPIOF,
     88  1.1  riastrad 	GPIOG,
     89  1.1  riastrad 	GPIOH,
     90  1.1  riastrad 	__GPIOI_UNUSED,
     91  1.1  riastrad 	GPIOJ,
     92  1.1  riastrad 	GPIOK,
     93  1.1  riastrad 	GPIOL,
     94  1.1  riastrad 	GPIOM,
     95  1.1  riastrad 	GPION,
     96  1.1  riastrad 	GPIOO,
     97  1.1  riastrad };
     98  1.1  riastrad 
     99  1.1  riastrad /*
    100  1.1  riastrad  * Keep the pipe enum values fixed: the code assumes that PIPE_A=0, the
    101  1.1  riastrad  * rest have consecutive values and match the enum values of transcoders
    102  1.1  riastrad  * with a 1:1 transcoder -> pipe mapping.
    103  1.1  riastrad  */
    104  1.1  riastrad enum pipe {
    105  1.1  riastrad 	INVALID_PIPE = -1,
    106  1.1  riastrad 
    107  1.1  riastrad 	PIPE_A = 0,
    108  1.1  riastrad 	PIPE_B,
    109  1.1  riastrad 	PIPE_C,
    110  1.1  riastrad 	PIPE_D,
    111  1.1  riastrad 	_PIPE_EDP,
    112  1.1  riastrad 
    113  1.1  riastrad 	I915_MAX_PIPES = _PIPE_EDP
    114  1.1  riastrad };
    115  1.1  riastrad 
    116  1.1  riastrad #define pipe_name(p) ((p) + 'A')
    117  1.1  riastrad 
    118  1.1  riastrad enum transcoder {
    119  1.1  riastrad 	INVALID_TRANSCODER = -1,
    120  1.1  riastrad 	/*
    121  1.1  riastrad 	 * The following transcoders have a 1:1 transcoder -> pipe mapping,
    122  1.1  riastrad 	 * keep their values fixed: the code assumes that TRANSCODER_A=0, the
    123  1.1  riastrad 	 * rest have consecutive values and match the enum values of the pipes
    124  1.1  riastrad 	 * they map to.
    125  1.1  riastrad 	 */
    126  1.1  riastrad 	TRANSCODER_A = PIPE_A,
    127  1.1  riastrad 	TRANSCODER_B = PIPE_B,
    128  1.1  riastrad 	TRANSCODER_C = PIPE_C,
    129  1.1  riastrad 	TRANSCODER_D = PIPE_D,
    130  1.1  riastrad 
    131  1.1  riastrad 	/*
    132  1.1  riastrad 	 * The following transcoders can map to any pipe, their enum value
    133  1.1  riastrad 	 * doesn't need to stay fixed.
    134  1.1  riastrad 	 */
    135  1.1  riastrad 	TRANSCODER_EDP,
    136  1.1  riastrad 	TRANSCODER_DSI_0,
    137  1.1  riastrad 	TRANSCODER_DSI_1,
    138  1.1  riastrad 	TRANSCODER_DSI_A = TRANSCODER_DSI_0,	/* legacy DSI */
    139  1.1  riastrad 	TRANSCODER_DSI_C = TRANSCODER_DSI_1,	/* legacy DSI */
    140  1.1  riastrad 
    141  1.1  riastrad 	I915_MAX_TRANSCODERS
    142  1.1  riastrad };
    143  1.1  riastrad 
    144  1.1  riastrad static inline const char *transcoder_name(enum transcoder transcoder)
    145  1.1  riastrad {
    146  1.1  riastrad 	switch (transcoder) {
    147  1.1  riastrad 	case TRANSCODER_A:
    148  1.1  riastrad 		return "A";
    149  1.1  riastrad 	case TRANSCODER_B:
    150  1.1  riastrad 		return "B";
    151  1.1  riastrad 	case TRANSCODER_C:
    152  1.1  riastrad 		return "C";
    153  1.1  riastrad 	case TRANSCODER_D:
    154  1.1  riastrad 		return "D";
    155  1.1  riastrad 	case TRANSCODER_EDP:
    156  1.1  riastrad 		return "EDP";
    157  1.1  riastrad 	case TRANSCODER_DSI_A:
    158  1.1  riastrad 		return "DSI A";
    159  1.1  riastrad 	case TRANSCODER_DSI_C:
    160  1.1  riastrad 		return "DSI C";
    161  1.1  riastrad 	default:
    162  1.1  riastrad 		return "<invalid>";
    163  1.1  riastrad 	}
    164  1.1  riastrad }
    165  1.1  riastrad 
    166  1.1  riastrad static inline bool transcoder_is_dsi(enum transcoder transcoder)
    167  1.1  riastrad {
    168  1.1  riastrad 	return transcoder == TRANSCODER_DSI_A || transcoder == TRANSCODER_DSI_C;
    169  1.1  riastrad }
    170  1.1  riastrad 
    171  1.1  riastrad /*
    172  1.1  riastrad  * Global legacy plane identifier. Valid only for primary/sprite
    173  1.1  riastrad  * planes on pre-g4x, and only for primary planes on g4x-bdw.
    174  1.1  riastrad  */
    175  1.1  riastrad enum i9xx_plane_id {
    176  1.1  riastrad 	PLANE_A,
    177  1.1  riastrad 	PLANE_B,
    178  1.1  riastrad 	PLANE_C,
    179  1.1  riastrad };
    180  1.1  riastrad 
    181  1.1  riastrad #define plane_name(p) ((p) + 'A')
    182  1.1  riastrad #define sprite_name(p, s) ((p) * RUNTIME_INFO(dev_priv)->num_sprites[(p)] + (s) + 'A')
    183  1.1  riastrad 
    184  1.1  riastrad /*
    185  1.1  riastrad  * Per-pipe plane identifier.
    186  1.1  riastrad  * I915_MAX_PLANES in the enum below is the maximum (across all platforms)
    187  1.1  riastrad  * number of planes per CRTC.  Not all platforms really have this many planes,
    188  1.1  riastrad  * which means some arrays of size I915_MAX_PLANES may have unused entries
    189  1.1  riastrad  * between the topmost sprite plane and the cursor plane.
    190  1.1  riastrad  *
    191  1.1  riastrad  * This is expected to be passed to various register macros
    192  1.1  riastrad  * (eg. PLANE_CTL(), PS_PLANE_SEL(), etc.) so adjust with care.
    193  1.1  riastrad  */
    194  1.1  riastrad enum plane_id {
    195  1.1  riastrad 	PLANE_PRIMARY,
    196  1.1  riastrad 	PLANE_SPRITE0,
    197  1.1  riastrad 	PLANE_SPRITE1,
    198  1.1  riastrad 	PLANE_SPRITE2,
    199  1.1  riastrad 	PLANE_SPRITE3,
    200  1.1  riastrad 	PLANE_SPRITE4,
    201  1.1  riastrad 	PLANE_SPRITE5,
    202  1.1  riastrad 	PLANE_CURSOR,
    203  1.1  riastrad 
    204  1.1  riastrad 	I915_MAX_PLANES,
    205  1.1  riastrad };
    206  1.1  riastrad 
    207  1.1  riastrad #define for_each_plane_id_on_crtc(__crtc, __p) \
    208  1.1  riastrad 	for ((__p) = PLANE_PRIMARY; (__p) < I915_MAX_PLANES; (__p)++) \
    209  1.1  riastrad 		for_each_if((__crtc)->plane_ids_mask & BIT(__p))
    210  1.1  riastrad 
    211  1.1  riastrad enum port {
    212  1.1  riastrad 	PORT_NONE = -1,
    213  1.1  riastrad 
    214  1.1  riastrad 	PORT_A = 0,
    215  1.1  riastrad 	PORT_B,
    216  1.1  riastrad 	PORT_C,
    217  1.1  riastrad 	PORT_D,
    218  1.1  riastrad 	PORT_E,
    219  1.1  riastrad 	PORT_F,
    220  1.1  riastrad 	PORT_G,
    221  1.1  riastrad 	PORT_H,
    222  1.1  riastrad 	PORT_I,
    223  1.1  riastrad 
    224  1.1  riastrad 	I915_MAX_PORTS
    225  1.1  riastrad };
    226  1.1  riastrad 
    227  1.1  riastrad #define port_name(p) ((p) + 'A')
    228  1.1  riastrad 
    229  1.1  riastrad /*
    230  1.1  riastrad  * Ports identifier referenced from other drivers.
    231  1.1  riastrad  * Expected to remain stable over time
    232  1.1  riastrad  */
    233  1.1  riastrad static inline const char *port_identifier(enum port port)
    234  1.1  riastrad {
    235  1.1  riastrad 	switch (port) {
    236  1.1  riastrad 	case PORT_A:
    237  1.1  riastrad 		return "Port A";
    238  1.1  riastrad 	case PORT_B:
    239  1.1  riastrad 		return "Port B";
    240  1.1  riastrad 	case PORT_C:
    241  1.1  riastrad 		return "Port C";
    242  1.1  riastrad 	case PORT_D:
    243  1.1  riastrad 		return "Port D";
    244  1.1  riastrad 	case PORT_E:
    245  1.1  riastrad 		return "Port E";
    246  1.1  riastrad 	case PORT_F:
    247  1.1  riastrad 		return "Port F";
    248  1.1  riastrad 	case PORT_G:
    249  1.1  riastrad 		return "Port G";
    250  1.1  riastrad 	case PORT_H:
    251  1.1  riastrad 		return "Port H";
    252  1.1  riastrad 	case PORT_I:
    253  1.1  riastrad 		return "Port I";
    254  1.1  riastrad 	default:
    255  1.1  riastrad 		return "<invalid>";
    256  1.1  riastrad 	}
    257  1.1  riastrad }
    258  1.1  riastrad 
    259  1.1  riastrad enum tc_port {
    260  1.1  riastrad 	PORT_TC_NONE = -1,
    261  1.1  riastrad 
    262  1.1  riastrad 	PORT_TC1 = 0,
    263  1.1  riastrad 	PORT_TC2,
    264  1.1  riastrad 	PORT_TC3,
    265  1.1  riastrad 	PORT_TC4,
    266  1.1  riastrad 	PORT_TC5,
    267  1.1  riastrad 	PORT_TC6,
    268  1.1  riastrad 
    269  1.1  riastrad 	I915_MAX_TC_PORTS
    270  1.1  riastrad };
    271  1.1  riastrad 
    272  1.1  riastrad enum tc_port_mode {
    273  1.1  riastrad 	TC_PORT_TBT_ALT,
    274  1.1  riastrad 	TC_PORT_DP_ALT,
    275  1.1  riastrad 	TC_PORT_LEGACY,
    276  1.1  riastrad };
    277  1.1  riastrad 
    278  1.1  riastrad enum dpio_channel {
    279  1.1  riastrad 	DPIO_CH0,
    280  1.1  riastrad 	DPIO_CH1
    281  1.1  riastrad };
    282  1.1  riastrad 
    283  1.1  riastrad enum dpio_phy {
    284  1.1  riastrad 	DPIO_PHY0,
    285  1.1  riastrad 	DPIO_PHY1,
    286  1.1  riastrad 	DPIO_PHY2,
    287  1.1  riastrad };
    288  1.1  riastrad 
    289  1.1  riastrad #define I915_NUM_PHYS_VLV 2
    290  1.1  riastrad 
    291  1.1  riastrad enum aux_ch {
    292  1.1  riastrad 	AUX_CH_A,
    293  1.1  riastrad 	AUX_CH_B,
    294  1.1  riastrad 	AUX_CH_C,
    295  1.1  riastrad 	AUX_CH_D,
    296  1.1  riastrad 	AUX_CH_E, /* ICL+ */
    297  1.1  riastrad 	AUX_CH_F,
    298  1.1  riastrad 	AUX_CH_G,
    299  1.1  riastrad };
    300  1.1  riastrad 
    301  1.1  riastrad #define aux_ch_name(a) ((a) + 'A')
    302  1.1  riastrad 
    303  1.1  riastrad /* Used by dp and fdi links */
    304  1.1  riastrad struct intel_link_m_n {
    305  1.1  riastrad 	u32 tu;
    306  1.1  riastrad 	u32 gmch_m;
    307  1.1  riastrad 	u32 gmch_n;
    308  1.1  riastrad 	u32 link_m;
    309  1.1  riastrad 	u32 link_n;
    310  1.1  riastrad };
    311  1.1  riastrad 
    312  1.1  riastrad enum phy {
    313  1.1  riastrad 	PHY_NONE = -1,
    314  1.1  riastrad 
    315  1.1  riastrad 	PHY_A = 0,
    316  1.1  riastrad 	PHY_B,
    317  1.1  riastrad 	PHY_C,
    318  1.1  riastrad 	PHY_D,
    319  1.1  riastrad 	PHY_E,
    320  1.1  riastrad 	PHY_F,
    321  1.1  riastrad 	PHY_G,
    322  1.1  riastrad 	PHY_H,
    323  1.1  riastrad 	PHY_I,
    324  1.1  riastrad 
    325  1.1  riastrad 	I915_MAX_PHYS
    326  1.1  riastrad };
    327  1.1  riastrad 
    328  1.1  riastrad #define phy_name(a) ((a) + 'A')
    329  1.1  riastrad 
    330  1.1  riastrad enum phy_fia {
    331  1.1  riastrad 	FIA1,
    332  1.1  riastrad 	FIA2,
    333  1.1  riastrad 	FIA3,
    334  1.1  riastrad };
    335  1.1  riastrad 
    336  1.1  riastrad #define for_each_pipe(__dev_priv, __p) \
    337  1.1  riastrad 	for ((__p) = 0; (__p) < INTEL_NUM_PIPES(__dev_priv); (__p)++)
    338  1.1  riastrad 
    339  1.1  riastrad #define for_each_pipe_masked(__dev_priv, __p, __mask) \
    340  1.1  riastrad 	for ((__p) = 0; (__p) < INTEL_NUM_PIPES(__dev_priv); (__p)++) \
    341  1.1  riastrad 		for_each_if((__mask) & BIT(__p))
    342  1.1  riastrad 
    343  1.1  riastrad #define for_each_cpu_transcoder_masked(__dev_priv, __t, __mask) \
    344  1.1  riastrad 	for ((__t) = 0; (__t) < I915_MAX_TRANSCODERS; (__t)++)	\
    345  1.1  riastrad 		for_each_if ((__mask) & (1 << (__t)))
    346  1.1  riastrad 
    347  1.1  riastrad #define for_each_universal_plane(__dev_priv, __pipe, __p)		\
    348  1.1  riastrad 	for ((__p) = 0;							\
    349  1.1  riastrad 	     (__p) < RUNTIME_INFO(__dev_priv)->num_sprites[(__pipe)] + 1;	\
    350  1.1  riastrad 	     (__p)++)
    351  1.1  riastrad 
    352  1.1  riastrad #define for_each_sprite(__dev_priv, __p, __s)				\
    353  1.1  riastrad 	for ((__s) = 0;							\
    354  1.1  riastrad 	     (__s) < RUNTIME_INFO(__dev_priv)->num_sprites[(__p)];	\
    355  1.1  riastrad 	     (__s)++)
    356  1.1  riastrad 
    357  1.1  riastrad #define for_each_port(__port) \
    358  1.1  riastrad 	for ((__port) = PORT_A; (__port) < I915_MAX_PORTS; (__port)++)
    359  1.1  riastrad 
    360  1.1  riastrad #define for_each_port_masked(__port, __ports_mask)			\
    361  1.1  riastrad 	for_each_port(__port)						\
    362  1.1  riastrad 		for_each_if((__ports_mask) & BIT(__port))
    363  1.1  riastrad 
    364  1.1  riastrad #define for_each_phy_masked(__phy, __phys_mask) \
    365  1.1  riastrad 	for ((__phy) = PHY_A; (__phy) < I915_MAX_PHYS; (__phy)++)	\
    366  1.1  riastrad 		for_each_if((__phys_mask) & BIT(__phy))
    367  1.1  riastrad 
    368  1.1  riastrad #define for_each_crtc(dev, crtc) \
    369  1.1  riastrad 	list_for_each_entry(crtc, &(dev)->mode_config.crtc_list, head)
    370  1.1  riastrad 
    371  1.1  riastrad #define for_each_intel_plane(dev, intel_plane) \
    372  1.1  riastrad 	list_for_each_entry(intel_plane,			\
    373  1.1  riastrad 			    &(dev)->mode_config.plane_list,	\
    374  1.1  riastrad 			    base.head)
    375  1.1  riastrad 
    376  1.1  riastrad #define for_each_intel_plane_mask(dev, intel_plane, plane_mask)		\
    377  1.1  riastrad 	list_for_each_entry(intel_plane,				\
    378  1.1  riastrad 			    &(dev)->mode_config.plane_list,		\
    379  1.1  riastrad 			    base.head)					\
    380  1.1  riastrad 		for_each_if((plane_mask) &				\
    381  1.1  riastrad 			    drm_plane_mask(&intel_plane->base))
    382  1.1  riastrad 
    383  1.1  riastrad #define for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane)	\
    384  1.1  riastrad 	list_for_each_entry(intel_plane,				\
    385  1.1  riastrad 			    &(dev)->mode_config.plane_list,		\
    386  1.1  riastrad 			    base.head)					\
    387  1.1  riastrad 		for_each_if((intel_plane)->pipe == (intel_crtc)->pipe)
    388  1.1  riastrad 
    389  1.1  riastrad #define for_each_intel_crtc(dev, intel_crtc)				\
    390  1.1  riastrad 	list_for_each_entry(intel_crtc,					\
    391  1.1  riastrad 			    &(dev)->mode_config.crtc_list,		\
    392  1.1  riastrad 			    base.head)
    393  1.1  riastrad 
    394  1.1  riastrad #define for_each_intel_crtc_mask(dev, intel_crtc, crtc_mask)		\
    395  1.1  riastrad 	list_for_each_entry(intel_crtc,					\
    396  1.1  riastrad 			    &(dev)->mode_config.crtc_list,		\
    397  1.1  riastrad 			    base.head)					\
    398  1.1  riastrad 		for_each_if((crtc_mask) & drm_crtc_mask(&intel_crtc->base))
    399  1.1  riastrad 
    400  1.1  riastrad #define for_each_intel_encoder(dev, intel_encoder)		\
    401  1.1  riastrad 	list_for_each_entry(intel_encoder,			\
    402  1.1  riastrad 			    &(dev)->mode_config.encoder_list,	\
    403  1.1  riastrad 			    base.head)
    404  1.1  riastrad 
    405  1.1  riastrad #define for_each_intel_encoder_mask(dev, intel_encoder, encoder_mask)	\
    406  1.1  riastrad 	list_for_each_entry(intel_encoder,				\
    407  1.1  riastrad 			    &(dev)->mode_config.encoder_list,		\
    408  1.1  riastrad 			    base.head)					\
    409  1.1  riastrad 		for_each_if((encoder_mask) &				\
    410  1.1  riastrad 			    drm_encoder_mask(&intel_encoder->base))
    411  1.1  riastrad 
    412  1.1  riastrad #define for_each_intel_dp(dev, intel_encoder)			\
    413  1.1  riastrad 	for_each_intel_encoder(dev, intel_encoder)		\
    414  1.1  riastrad 		for_each_if(intel_encoder_is_dp(intel_encoder))
    415  1.1  riastrad 
    416  1.1  riastrad #define for_each_intel_connector_iter(intel_connector, iter) \
    417  1.1  riastrad 	while ((intel_connector = to_intel_connector(drm_connector_list_iter_next(iter))))
    418  1.1  riastrad 
    419  1.1  riastrad #define for_each_encoder_on_crtc(dev, __crtc, intel_encoder) \
    420  1.1  riastrad 	list_for_each_entry((intel_encoder), &(dev)->mode_config.encoder_list, base.head) \
    421  1.1  riastrad 		for_each_if((intel_encoder)->base.crtc == (__crtc))
    422  1.1  riastrad 
    423  1.1  riastrad #define for_each_connector_on_encoder(dev, __encoder, intel_connector) \
    424  1.1  riastrad 	list_for_each_entry((intel_connector), &(dev)->mode_config.connector_list, base.head) \
    425  1.1  riastrad 		for_each_if((intel_connector)->base.encoder == (__encoder))
    426  1.1  riastrad 
    427  1.1  riastrad #define for_each_old_intel_plane_in_state(__state, plane, old_plane_state, __i) \
    428  1.1  riastrad 	for ((__i) = 0; \
    429  1.1  riastrad 	     (__i) < (__state)->base.dev->mode_config.num_total_plane && \
    430  1.1  riastrad 		     ((plane) = to_intel_plane((__state)->base.planes[__i].ptr), \
    431  1.1  riastrad 		      (old_plane_state) = to_intel_plane_state((__state)->base.planes[__i].old_state), 1); \
    432  1.1  riastrad 	     (__i)++) \
    433  1.1  riastrad 		for_each_if(plane)
    434  1.1  riastrad 
    435  1.1  riastrad #define for_each_new_intel_plane_in_state(__state, plane, new_plane_state, __i) \
    436  1.1  riastrad 	for ((__i) = 0; \
    437  1.1  riastrad 	     (__i) < (__state)->base.dev->mode_config.num_total_plane && \
    438  1.1  riastrad 		     ((plane) = to_intel_plane((__state)->base.planes[__i].ptr), \
    439  1.1  riastrad 		      (new_plane_state) = to_intel_plane_state((__state)->base.planes[__i].new_state), 1); \
    440  1.1  riastrad 	     (__i)++) \
    441  1.1  riastrad 		for_each_if(plane)
    442  1.1  riastrad 
    443  1.1  riastrad #define for_each_new_intel_crtc_in_state(__state, crtc, new_crtc_state, __i) \
    444  1.1  riastrad 	for ((__i) = 0; \
    445  1.1  riastrad 	     (__i) < (__state)->base.dev->mode_config.num_crtc && \
    446  1.1  riastrad 		     ((crtc) = to_intel_crtc((__state)->base.crtcs[__i].ptr), \
    447  1.1  riastrad 		      (new_crtc_state) = to_intel_crtc_state((__state)->base.crtcs[__i].new_state), 1); \
    448  1.1  riastrad 	     (__i)++) \
    449  1.1  riastrad 		for_each_if(crtc)
    450  1.1  riastrad 
    451  1.1  riastrad #define for_each_oldnew_intel_plane_in_state(__state, plane, old_plane_state, new_plane_state, __i) \
    452  1.1  riastrad 	for ((__i) = 0; \
    453  1.1  riastrad 	     (__i) < (__state)->base.dev->mode_config.num_total_plane && \
    454  1.1  riastrad 		     ((plane) = to_intel_plane((__state)->base.planes[__i].ptr), \
    455  1.1  riastrad 		      (old_plane_state) = to_intel_plane_state((__state)->base.planes[__i].old_state), \
    456  1.1  riastrad 		      (new_plane_state) = to_intel_plane_state((__state)->base.planes[__i].new_state), 1); \
    457  1.1  riastrad 	     (__i)++) \
    458  1.1  riastrad 		for_each_if(plane)
    459  1.1  riastrad 
    460  1.1  riastrad #define for_each_oldnew_intel_crtc_in_state(__state, crtc, old_crtc_state, new_crtc_state, __i) \
    461  1.1  riastrad 	for ((__i) = 0; \
    462  1.1  riastrad 	     (__i) < (__state)->base.dev->mode_config.num_crtc && \
    463  1.1  riastrad 		     ((crtc) = to_intel_crtc((__state)->base.crtcs[__i].ptr), \
    464  1.1  riastrad 		      (old_crtc_state) = to_intel_crtc_state((__state)->base.crtcs[__i].old_state), \
    465  1.1  riastrad 		      (new_crtc_state) = to_intel_crtc_state((__state)->base.crtcs[__i].new_state), 1); \
    466  1.1  riastrad 	     (__i)++) \
    467  1.1  riastrad 		for_each_if(crtc)
    468  1.1  riastrad 
    469  1.1  riastrad #define for_each_oldnew_intel_crtc_in_state_reverse(__state, crtc, old_crtc_state, new_crtc_state, __i) \
    470  1.1  riastrad 	for ((__i) = (__state)->base.dev->mode_config.num_crtc - 1; \
    471  1.1  riastrad 	     (__i) >= 0  && \
    472  1.1  riastrad 	     ((crtc) = to_intel_crtc((__state)->base.crtcs[__i].ptr), \
    473  1.1  riastrad 	      (old_crtc_state) = to_intel_crtc_state((__state)->base.crtcs[__i].old_state), \
    474  1.1  riastrad 	      (new_crtc_state) = to_intel_crtc_state((__state)->base.crtcs[__i].new_state), 1); \
    475  1.1  riastrad 	     (__i)--) \
    476  1.1  riastrad 		for_each_if(crtc)
    477  1.1  riastrad 
    478  1.1  riastrad #define intel_atomic_crtc_state_for_each_plane_state( \
    479  1.1  riastrad 		  plane, plane_state, \
    480  1.1  riastrad 		  crtc_state) \
    481  1.1  riastrad 	for_each_intel_plane_mask(((crtc_state)->uapi.state->dev), (plane), \
    482  1.1  riastrad 				((crtc_state)->uapi.plane_mask)) \
    483  1.1  riastrad 		for_each_if ((plane_state = \
    484  1.6  riastrad 			      const_container_of(__drm_atomic_get_current_plane_state((crtc_state)->uapi.state, &plane->base), struct intel_plane_state, uapi)))
    485  1.1  riastrad 
    486  1.1  riastrad #define for_each_new_intel_connector_in_state(__state, connector, new_connector_state, __i) \
    487  1.1  riastrad 	for ((__i) = 0; \
    488  1.1  riastrad 	     (__i) < (__state)->base.num_connector; \
    489  1.1  riastrad 	     (__i)++) \
    490  1.1  riastrad 		for_each_if ((__state)->base.connectors[__i].ptr && \
    491  1.1  riastrad 			     ((connector) = to_intel_connector((__state)->base.connectors[__i].ptr), \
    492  1.1  riastrad 			     (new_connector_state) = to_intel_digital_connector_state((__state)->base.connectors[__i].new_state), 1))
    493  1.1  riastrad 
    494  1.1  riastrad void intel_link_compute_m_n(u16 bpp, int nlanes,
    495  1.1  riastrad 			    int pixel_clock, int link_clock,
    496  1.1  riastrad 			    struct intel_link_m_n *m_n,
    497  1.1  riastrad 			    bool constant_n, bool fec_enable);
    498  1.1  riastrad bool is_ccs_modifier(u64 modifier);
    499  1.1  riastrad int intel_main_to_aux_plane(const struct drm_framebuffer *fb, int main_plane);
    500  1.1  riastrad void lpt_disable_clkout_dp(struct drm_i915_private *dev_priv);
    501  1.1  riastrad u32 intel_plane_fb_max_stride(struct drm_i915_private *dev_priv,
    502  1.1  riastrad 			      u32 pixel_format, u64 modifier);
    503  1.1  riastrad bool intel_plane_can_remap(const struct intel_plane_state *plane_state);
    504  1.1  riastrad enum drm_mode_status
    505  1.1  riastrad intel_mode_valid_max_plane_size(struct drm_i915_private *dev_priv,
    506  1.1  riastrad 				const struct drm_display_mode *mode);
    507  1.1  riastrad enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port);
    508  1.1  riastrad bool is_trans_port_sync_mode(const struct intel_crtc_state *state);
    509  1.1  riastrad 
    510  1.1  riastrad void intel_plane_destroy(struct drm_plane *plane);
    511  1.1  riastrad void intel_disable_pipe(const struct intel_crtc_state *old_crtc_state);
    512  1.1  riastrad void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
    513  1.1  riastrad void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
    514  1.1  riastrad enum pipe intel_crtc_pch_transcoder(struct intel_crtc *crtc);
    515  1.1  riastrad int vlv_get_hpll_vco(struct drm_i915_private *dev_priv);
    516  1.1  riastrad int vlv_get_cck_clock(struct drm_i915_private *dev_priv,
    517  1.1  riastrad 		      const char *name, u32 reg, int ref_freq);
    518  1.1  riastrad int vlv_get_cck_clock_hpll(struct drm_i915_private *dev_priv,
    519  1.1  riastrad 			   const char *name, u32 reg);
    520  1.1  riastrad void lpt_disable_pch_transcoder(struct drm_i915_private *dev_priv);
    521  1.1  riastrad void lpt_disable_iclkip(struct drm_i915_private *dev_priv);
    522  1.1  riastrad void intel_init_display_hooks(struct drm_i915_private *dev_priv);
    523  1.1  riastrad unsigned int intel_fb_xy_to_linear(int x, int y,
    524  1.1  riastrad 				   const struct intel_plane_state *state,
    525  1.1  riastrad 				   int plane);
    526  1.1  riastrad unsigned int intel_fb_align_height(const struct drm_framebuffer *fb,
    527  1.1  riastrad 				   int color_plane, unsigned int height);
    528  1.1  riastrad void intel_add_fb_offsets(int *x, int *y,
    529  1.1  riastrad 			  const struct intel_plane_state *state, int plane);
    530  1.1  riastrad unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info);
    531  1.1  riastrad unsigned int intel_remapped_info_size(const struct intel_remapped_info *rem_info);
    532  1.1  riastrad bool intel_has_pending_fb_unpin(struct drm_i915_private *dev_priv);
    533  1.1  riastrad int intel_display_suspend(struct drm_device *dev);
    534  1.1  riastrad void intel_pps_unlock_regs_wa(struct drm_i915_private *dev_priv);
    535  1.1  riastrad void intel_encoder_destroy(struct drm_encoder *encoder);
    536  1.1  riastrad struct drm_display_mode *
    537  1.1  riastrad intel_encoder_current_mode(struct intel_encoder *encoder);
    538  1.1  riastrad bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy);
    539  1.1  riastrad bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy);
    540  1.1  riastrad enum tc_port intel_port_to_tc(struct drm_i915_private *dev_priv,
    541  1.1  riastrad 			      enum port port);
    542  1.1  riastrad int intel_get_pipe_from_crtc_id_ioctl(struct drm_device *dev, void *data,
    543  1.1  riastrad 				      struct drm_file *file_priv);
    544  1.1  riastrad u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc);
    545  1.1  riastrad void intel_crtc_vblank_off(const struct intel_crtc_state *crtc_state);
    546  1.1  riastrad 
    547  1.1  riastrad int ilk_get_lanes_required(int target_clock, int link_bw, int bpp);
    548  1.1  riastrad void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
    549  1.1  riastrad 			 struct intel_digital_port *dport,
    550  1.1  riastrad 			 unsigned int expected_mask);
    551  1.1  riastrad int intel_get_load_detect_pipe(struct drm_connector *connector,
    552  1.1  riastrad 			       struct intel_load_detect_pipe *old,
    553  1.1  riastrad 			       struct drm_modeset_acquire_ctx *ctx);
    554  1.1  riastrad void intel_release_load_detect_pipe(struct drm_connector *connector,
    555  1.1  riastrad 				    struct intel_load_detect_pipe *old,
    556  1.1  riastrad 				    struct drm_modeset_acquire_ctx *ctx);
    557  1.1  riastrad struct i915_vma *
    558  1.1  riastrad intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb,
    559  1.1  riastrad 			   const struct i915_ggtt_view *view,
    560  1.1  riastrad 			   bool uses_fence,
    561  1.1  riastrad 			   unsigned long *out_flags);
    562  1.1  riastrad void intel_unpin_fb_vma(struct i915_vma *vma, unsigned long flags);
    563  1.1  riastrad struct drm_framebuffer *
    564  1.1  riastrad intel_framebuffer_create(struct drm_i915_gem_object *obj,
    565  1.1  riastrad 			 struct drm_mode_fb_cmd2 *mode_cmd);
    566  1.1  riastrad int intel_prepare_plane_fb(struct drm_plane *plane,
    567  1.1  riastrad 			   struct drm_plane_state *new_state);
    568  1.1  riastrad void intel_cleanup_plane_fb(struct drm_plane *plane,
    569  1.1  riastrad 			    struct drm_plane_state *old_state);
    570  1.1  riastrad 
    571  1.1  riastrad void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv,
    572  1.1  riastrad 				    enum pipe pipe);
    573  1.1  riastrad 
    574  1.1  riastrad int vlv_force_pll_on(struct drm_i915_private *dev_priv, enum pipe pipe,
    575  1.1  riastrad 		     const struct dpll *dpll);
    576  1.1  riastrad void vlv_force_pll_off(struct drm_i915_private *dev_priv, enum pipe pipe);
    577  1.1  riastrad int lpt_get_iclkip(struct drm_i915_private *dev_priv);
    578  1.1  riastrad bool intel_fuzzy_clock_check(int clock1, int clock2);
    579  1.1  riastrad 
    580  1.1  riastrad void intel_prepare_reset(struct drm_i915_private *dev_priv);
    581  1.1  riastrad void intel_finish_reset(struct drm_i915_private *dev_priv);
    582  1.1  riastrad void intel_dp_get_m_n(struct intel_crtc *crtc,
    583  1.1  riastrad 		      struct intel_crtc_state *pipe_config);
    584  1.1  riastrad void intel_dp_set_m_n(const struct intel_crtc_state *crtc_state,
    585  1.1  riastrad 		      enum link_m_n_set m_n);
    586  1.1  riastrad int intel_dotclock_calculate(int link_freq, const struct intel_link_m_n *m_n);
    587  1.1  riastrad bool bxt_find_best_dpll(struct intel_crtc_state *crtc_state,
    588  1.1  riastrad 			struct dpll *best_clock);
    589  1.1  riastrad int chv_calc_dpll_params(int refclk, struct dpll *pll_clock);
    590  1.1  riastrad 
    591  1.1  riastrad bool hsw_crtc_state_ips_capable(const struct intel_crtc_state *crtc_state);
    592  1.1  riastrad void hsw_enable_ips(const struct intel_crtc_state *crtc_state);
    593  1.1  riastrad void hsw_disable_ips(const struct intel_crtc_state *crtc_state);
    594  1.1  riastrad enum intel_display_power_domain intel_port_to_power_domain(enum port port);
    595  1.1  riastrad enum intel_display_power_domain
    596  1.1  riastrad intel_aux_power_domain(struct intel_digital_port *dig_port);
    597  1.1  riastrad void intel_mode_from_pipe_config(struct drm_display_mode *mode,
    598  1.1  riastrad 				 struct intel_crtc_state *pipe_config);
    599  1.1  riastrad void intel_crtc_arm_fifo_underrun(struct intel_crtc *crtc,
    600  1.1  riastrad 				  struct intel_crtc_state *crtc_state);
    601  1.1  riastrad 
    602  1.1  riastrad u16 skl_scaler_calc_phase(int sub, int scale, bool chroma_center);
    603  1.1  riastrad int skl_update_scaler_crtc(struct intel_crtc_state *crtc_state);
    604  1.1  riastrad void skl_scaler_disable(const struct intel_crtc_state *old_crtc_state);
    605  1.1  riastrad void ilk_pfit_disable(const struct intel_crtc_state *old_crtc_state);
    606  1.1  riastrad u32 glk_plane_color_ctl(const struct intel_crtc_state *crtc_state,
    607  1.1  riastrad 			const struct intel_plane_state *plane_state);
    608  1.1  riastrad u32 glk_plane_color_ctl_crtc(const struct intel_crtc_state *crtc_state);
    609  1.1  riastrad u32 skl_plane_ctl(const struct intel_crtc_state *crtc_state,
    610  1.1  riastrad 		  const struct intel_plane_state *plane_state);
    611  1.1  riastrad u32 skl_plane_ctl_crtc(const struct intel_crtc_state *crtc_state);
    612  1.1  riastrad u32 skl_plane_stride(const struct intel_plane_state *plane_state,
    613  1.1  riastrad 		     int plane);
    614  1.1  riastrad int skl_check_plane_surface(struct intel_plane_state *plane_state);
    615  1.1  riastrad int i9xx_check_plane_surface(struct intel_plane_state *plane_state);
    616  1.1  riastrad int skl_format_to_fourcc(int format, bool rgb_order, bool alpha);
    617  1.1  riastrad unsigned int i9xx_plane_max_stride(struct intel_plane *plane,
    618  1.1  riastrad 				   u32 pixel_format, u64 modifier,
    619  1.1  riastrad 				   unsigned int rotation);
    620  1.1  riastrad int bdw_get_pipemisc_bpp(struct intel_crtc *crtc);
    621  1.1  riastrad 
    622  1.1  riastrad struct intel_display_error_state *
    623  1.1  riastrad intel_display_capture_error_state(struct drm_i915_private *dev_priv);
    624  1.1  riastrad void intel_display_print_error_state(struct drm_i915_error_state_buf *e,
    625  1.1  riastrad 				     struct intel_display_error_state *error);
    626  1.1  riastrad 
    627  1.1  riastrad bool
    628  1.1  riastrad intel_format_info_is_yuv_semiplanar(const struct drm_format_info *info,
    629  1.1  riastrad 				    uint64_t modifier);
    630  1.1  riastrad 
    631  1.1  riastrad /* modesetting */
    632  1.1  riastrad void intel_modeset_init_hw(struct drm_i915_private *i915);
    633  1.1  riastrad int intel_modeset_init(struct drm_i915_private *i915);
    634  1.1  riastrad void intel_modeset_driver_remove(struct drm_i915_private *i915);
    635  1.1  riastrad void intel_display_resume(struct drm_device *dev);
    636  1.1  riastrad void intel_init_pch_refclk(struct drm_i915_private *dev_priv);
    637  1.1  riastrad 
    638  1.1  riastrad /* modesetting asserts */
    639  1.1  riastrad void assert_panel_unlocked(struct drm_i915_private *dev_priv,
    640  1.1  riastrad 			   enum pipe pipe);
    641  1.1  riastrad void assert_pll(struct drm_i915_private *dev_priv,
    642  1.1  riastrad 		enum pipe pipe, bool state);
    643  1.1  riastrad #define assert_pll_enabled(d, p) assert_pll(d, p, true)
    644  1.1  riastrad #define assert_pll_disabled(d, p) assert_pll(d, p, false)
    645  1.1  riastrad void assert_dsi_pll(struct drm_i915_private *dev_priv, bool state);
    646  1.1  riastrad #define assert_dsi_pll_enabled(d) assert_dsi_pll(d, true)
    647  1.1  riastrad #define assert_dsi_pll_disabled(d) assert_dsi_pll(d, false)
    648  1.1  riastrad void assert_fdi_rx_pll(struct drm_i915_private *dev_priv,
    649  1.1  riastrad 		       enum pipe pipe, bool state);
    650  1.1  riastrad #define assert_fdi_rx_pll_enabled(d, p) assert_fdi_rx_pll(d, p, true)
    651  1.1  riastrad #define assert_fdi_rx_pll_disabled(d, p) assert_fdi_rx_pll(d, p, false)
    652  1.1  riastrad void assert_pipe(struct drm_i915_private *dev_priv,
    653  1.1  riastrad 		 enum transcoder cpu_transcoder, bool state);
    654  1.1  riastrad #define assert_pipe_enabled(d, t) assert_pipe(d, t, true)
    655  1.1  riastrad #define assert_pipe_disabled(d, t) assert_pipe(d, t, false)
    656  1.1  riastrad 
    657  1.1  riastrad /* Use I915_STATE_WARN(x) and I915_STATE_WARN_ON() (rather than WARN() and
    658  1.1  riastrad  * WARN_ON()) for hw state sanity checks to check for unexpected conditions
    659  1.1  riastrad  * which may not necessarily be a user visible problem.  This will either
    660  1.1  riastrad  * WARN() or DRM_ERROR() depending on the verbose_checks moduleparam, to
    661  1.1  riastrad  * enable distros and users to tailor their preferred amount of i915 abrt
    662  1.1  riastrad  * spam.
    663  1.1  riastrad  */
    664  1.1  riastrad #define I915_STATE_WARN(condition, format...) ({			\
    665  1.1  riastrad 	int __ret_warn_on = !!(condition);				\
    666  1.1  riastrad 	if (unlikely(__ret_warn_on))					\
    667  1.1  riastrad 		if (!WARN(i915_modparams.verbose_state_checks, format))	\
    668  1.1  riastrad 			DRM_ERROR(format);				\
    669  1.1  riastrad 	unlikely(__ret_warn_on);					\
    670  1.1  riastrad })
    671  1.1  riastrad 
    672  1.1  riastrad #define I915_STATE_WARN_ON(x)						\
    673  1.1  riastrad 	I915_STATE_WARN((x), "%s", "WARN_ON(" __stringify(x) ")")
    674  1.1  riastrad 
    675  1.1  riastrad #endif
    676