Linux 6.10-rc3
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / display / intel_display_core.h
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2022 Intel Corporation
4  */
5
6 #ifndef __INTEL_DISPLAY_CORE_H__
7 #define __INTEL_DISPLAY_CORE_H__
8
9 #include <linux/list.h>
10 #include <linux/llist.h>
11 #include <linux/mutex.h>
12 #include <linux/types.h>
13 #include <linux/wait.h>
14 #include <linux/workqueue.h>
15
16 #include <drm/drm_connector.h>
17 #include <drm/drm_modeset_lock.h>
18
19 #include "intel_cdclk.h"
20 #include "intel_display_device.h"
21 #include "intel_display_limits.h"
22 #include "intel_display_params.h"
23 #include "intel_display_power.h"
24 #include "intel_dpll_mgr.h"
25 #include "intel_fbc.h"
26 #include "intel_global_state.h"
27 #include "intel_gmbus.h"
28 #include "intel_opregion.h"
29 #include "intel_dmc_wl.h"
30 #include "intel_wm_types.h"
31
32 struct task_struct;
33
34 struct drm_i915_private;
35 struct drm_property;
36 struct drm_property_blob;
37 struct i915_audio_component;
38 struct i915_hdcp_arbiter;
39 struct intel_atomic_state;
40 struct intel_audio_funcs;
41 struct intel_cdclk_funcs;
42 struct intel_cdclk_vals;
43 struct intel_color_funcs;
44 struct intel_crtc;
45 struct intel_crtc_state;
46 struct intel_dmc;
47 struct intel_dpll_funcs;
48 struct intel_dpll_mgr;
49 struct intel_fbdev;
50 struct intel_fdi_funcs;
51 struct intel_hotplug_funcs;
52 struct intel_initial_plane_config;
53 struct intel_opregion;
54 struct intel_overlay;
55
56 /* Amount of SAGV/QGV points, BSpec precisely defines this */
57 #define I915_NUM_QGV_POINTS 8
58
59 /* Amount of PSF GV points, BSpec precisely defines this */
60 #define I915_NUM_PSF_GV_POINTS 3
61
62 struct intel_display_funcs {
63         /*
64          * Returns the active state of the crtc, and if the crtc is active,
65          * fills out the pipe-config with the hw state.
66          */
67         bool (*get_pipe_config)(struct intel_crtc *,
68                                 struct intel_crtc_state *);
69         void (*get_initial_plane_config)(struct intel_crtc *,
70                                          struct intel_initial_plane_config *);
71         bool (*fixup_initial_plane_config)(struct intel_crtc *crtc,
72                                            const struct intel_initial_plane_config *plane_config);
73         void (*crtc_enable)(struct intel_atomic_state *state,
74                             struct intel_crtc *crtc);
75         void (*crtc_disable)(struct intel_atomic_state *state,
76                              struct intel_crtc *crtc);
77         void (*commit_modeset_enables)(struct intel_atomic_state *state);
78 };
79
80 /* functions used for watermark calcs for display. */
81 struct intel_wm_funcs {
82         /* update_wm is for legacy wm management */
83         void (*update_wm)(struct drm_i915_private *dev_priv);
84         int (*compute_pipe_wm)(struct intel_atomic_state *state,
85                                struct intel_crtc *crtc);
86         int (*compute_intermediate_wm)(struct intel_atomic_state *state,
87                                        struct intel_crtc *crtc);
88         void (*initial_watermarks)(struct intel_atomic_state *state,
89                                    struct intel_crtc *crtc);
90         void (*atomic_update_watermarks)(struct intel_atomic_state *state,
91                                          struct intel_crtc *crtc);
92         void (*optimize_watermarks)(struct intel_atomic_state *state,
93                                     struct intel_crtc *crtc);
94         int (*compute_global_watermarks)(struct intel_atomic_state *state);
95         void (*get_hw_state)(struct drm_i915_private *i915);
96 };
97
98 struct intel_audio_state {
99         struct intel_encoder *encoder;
100         u8 eld[MAX_ELD_BYTES];
101 };
102
103 struct intel_audio {
104         /* hda/i915 audio component */
105         struct i915_audio_component *component;
106         bool component_registered;
107         /* mutex for audio/video sync */
108         struct mutex mutex;
109         int power_refcount;
110         u32 freq_cntrl;
111
112         /* current audio state for the audio component hooks */
113         struct intel_audio_state state[I915_MAX_TRANSCODERS];
114
115         /* necessary resource sharing with HDMI LPE audio driver. */
116         struct {
117                 struct platform_device *platdev;
118                 int irq;
119         } lpe;
120 };
121
122 /*
123  * dpll and cdclk state is protected by connection_mutex dpll.lock serializes
124  * intel_{prepare,enable,disable}_shared_dpll.  Must be global rather than per
125  * dpll, because on some platforms plls share registers.
126  */
127 struct intel_dpll {
128         struct mutex lock;
129
130         int num_shared_dpll;
131         struct intel_shared_dpll shared_dplls[I915_NUM_PLLS];
132         const struct intel_dpll_mgr *mgr;
133
134         struct {
135                 int nssc;
136                 int ssc;
137         } ref_clks;
138
139         /*
140          * Bitmask of PLLs using the PCH SSC, indexed using enum intel_dpll_id.
141          */
142         u8 pch_ssc_use;
143 };
144
145 struct intel_frontbuffer_tracking {
146         spinlock_t lock;
147
148         /*
149          * Tracking bits for delayed frontbuffer flushing du to gpu activity or
150          * scheduled flips.
151          */
152         unsigned busy_bits;
153         unsigned flip_bits;
154 };
155
156 struct intel_hotplug {
157         struct delayed_work hotplug_work;
158
159         const u32 *hpd, *pch_hpd;
160
161         struct {
162                 unsigned long last_jiffies;
163                 int count;
164                 enum {
165                         HPD_ENABLED = 0,
166                         HPD_DISABLED = 1,
167                         HPD_MARK_DISABLED = 2
168                 } state;
169         } stats[HPD_NUM_PINS];
170         u32 event_bits;
171         u32 retry_bits;
172         struct delayed_work reenable_work;
173
174         u32 long_port_mask;
175         u32 short_port_mask;
176         struct work_struct dig_port_work;
177
178         struct work_struct poll_init_work;
179         bool poll_enabled;
180
181         /*
182          * Queuing of hotplug_work, reenable_work and poll_init_work is
183          * enabled. Protected by drm_i915_private::irq_lock.
184          */
185         bool detection_work_enabled;
186
187         unsigned int hpd_storm_threshold;
188         /* Whether or not to count short HPD IRQs in HPD storms */
189         u8 hpd_short_storm_enabled;
190
191         /* Last state reported by oob_hotplug_event for each encoder */
192         unsigned long oob_hotplug_last_state;
193
194         /*
195          * if we get a HPD irq from DP and a HPD irq from non-DP
196          * the non-DP HPD could block the workqueue on a mode config
197          * mutex getting, that userspace may have taken. However
198          * userspace is waiting on the DP workqueue to run which is
199          * blocked behind the non-DP one.
200          */
201         struct workqueue_struct *dp_wq;
202
203         /*
204          * Flag to track if long HPDs need not to be processed
205          *
206          * Some panels generate long HPDs while keep connected to the port.
207          * This can cause issues with CI tests results. In CI systems we
208          * don't expect to disconnect the panels and could ignore the long
209          * HPDs generated from the faulty panels. This flag can be used as
210          * cue to ignore the long HPDs and can be set / unset using debugfs.
211          */
212         bool ignore_long_hpd;
213 };
214
215 struct intel_vbt_data {
216         /* bdb version */
217         u16 version;
218
219         /* Feature bits */
220         unsigned int int_tv_support:1;
221         unsigned int int_crt_support:1;
222         unsigned int lvds_use_ssc:1;
223         unsigned int int_lvds_support:1;
224         unsigned int display_clock_mode:1;
225         unsigned int fdi_rx_polarity_inverted:1;
226         int lvds_ssc_freq;
227         enum drm_panel_orientation orientation;
228
229         bool override_afc_startup;
230         u8 override_afc_startup_val;
231
232         int crt_ddc_pin;
233
234         struct list_head display_devices;
235         struct list_head bdb_blocks;
236
237         struct sdvo_device_mapping {
238                 u8 initialized;
239                 u8 dvo_port;
240                 u8 slave_addr;
241                 u8 dvo_wiring;
242                 u8 i2c_pin;
243                 u8 ddc_pin;
244         } sdvo_mappings[2];
245 };
246
247 struct intel_wm {
248         /*
249          * Raw watermark latency values:
250          * in 0.1us units for WM0,
251          * in 0.5us units for WM1+.
252          */
253         /* primary */
254         u16 pri_latency[5];
255         /* sprite */
256         u16 spr_latency[5];
257         /* cursor */
258         u16 cur_latency[5];
259         /*
260          * Raw watermark memory latency values
261          * for SKL for all 8 levels
262          * in 1us units.
263          */
264         u16 skl_latency[8];
265
266         /* current hardware state */
267         union {
268                 struct ilk_wm_values hw;
269                 struct vlv_wm_values vlv;
270                 struct g4x_wm_values g4x;
271         };
272
273         u8 num_levels;
274
275         /*
276          * Should be held around atomic WM register writing; also
277          * protects * intel_crtc->wm.active and
278          * crtc_state->wm.need_postvbl_update.
279          */
280         struct mutex wm_mutex;
281
282         bool ipc_enabled;
283 };
284
285 struct intel_display {
286         /* drm device backpointer */
287         struct drm_device *drm;
288
289         /* Display functions */
290         struct {
291                 /* Top level crtc-ish functions */
292                 const struct intel_display_funcs *display;
293
294                 /* Display CDCLK functions */
295                 const struct intel_cdclk_funcs *cdclk;
296
297                 /* Display pll funcs */
298                 const struct intel_dpll_funcs *dpll;
299
300                 /* irq display functions */
301                 const struct intel_hotplug_funcs *hotplug;
302
303                 /* pm display functions */
304                 const struct intel_wm_funcs *wm;
305
306                 /* fdi display functions */
307                 const struct intel_fdi_funcs *fdi;
308
309                 /* Display internal color functions */
310                 const struct intel_color_funcs *color;
311
312                 /* Display internal audio functions */
313                 const struct intel_audio_funcs *audio;
314         } funcs;
315
316         struct {
317                 bool any_task_allowed;
318                 struct task_struct *allowed_task;
319         } access;
320
321         struct {
322                 /* backlight registers and fields in struct intel_panel */
323                 struct mutex lock;
324         } backlight;
325
326         struct {
327                 struct intel_global_obj obj;
328
329                 struct intel_bw_info {
330                         /* for each QGV point */
331                         unsigned int deratedbw[I915_NUM_QGV_POINTS];
332                         /* for each PSF GV point */
333                         unsigned int psf_bw[I915_NUM_PSF_GV_POINTS];
334                         /* Peak BW for each QGV point */
335                         unsigned int peakbw[I915_NUM_QGV_POINTS];
336                         u8 num_qgv_points;
337                         u8 num_psf_gv_points;
338                         u8 num_planes;
339                 } max[6];
340         } bw;
341
342         struct {
343                 /* The current hardware cdclk configuration */
344                 struct intel_cdclk_config hw;
345
346                 /* cdclk, divider, and ratio table from bspec */
347                 const struct intel_cdclk_vals *table;
348
349                 struct intel_global_obj obj;
350
351                 unsigned int max_cdclk_freq;
352                 unsigned int max_dotclk_freq;
353                 unsigned int skl_preferred_vco_freq;
354         } cdclk;
355
356         struct {
357                 struct drm_property_blob *glk_linear_degamma_lut;
358         } color;
359
360         struct {
361                 /* The current hardware dbuf configuration */
362                 u8 enabled_slices;
363
364                 struct intel_global_obj obj;
365         } dbuf;
366
367         struct {
368                 /*
369                  * dkl.phy_lock protects against concurrent access of the
370                  * Dekel TypeC PHYs.
371                  */
372                 spinlock_t phy_lock;
373         } dkl;
374
375         struct {
376                 struct intel_dmc *dmc;
377                 intel_wakeref_t wakeref;
378         } dmc;
379
380         struct {
381                 /* VLV/CHV/BXT/GLK DSI MMIO register base address */
382                 u32 mmio_base;
383         } dsi;
384
385         struct {
386                 /* list of fbdev register on this device */
387                 struct intel_fbdev *fbdev;
388                 struct work_struct suspend_work;
389         } fbdev;
390
391         struct {
392                 unsigned int pll_freq;
393                 u32 rx_config;
394         } fdi;
395
396         struct {
397                 struct list_head obj_list;
398         } global;
399
400         struct {
401                 /*
402                  * Base address of where the gmbus and gpio blocks are located
403                  * (either on PCH or on SoC for platforms without PCH).
404                  */
405                 u32 mmio_base;
406
407                 /*
408                  * gmbus.mutex protects against concurrent usage of the single
409                  * hw gmbus controller on different i2c buses.
410                  */
411                 struct mutex mutex;
412
413                 struct intel_gmbus *bus[GMBUS_NUM_PINS];
414
415                 wait_queue_head_t wait_queue;
416         } gmbus;
417
418         struct {
419                 struct i915_hdcp_arbiter *arbiter;
420                 bool comp_added;
421
422                 /*
423                  * HDCP message struct for allocation of memory which can be
424                  * reused when sending message to gsc cs.
425                  * this is only populated post Meteorlake
426                  */
427                 struct intel_hdcp_gsc_message *hdcp_message;
428                 /* Mutex to protect the above hdcp related values. */
429                 struct mutex hdcp_mutex;
430         } hdcp;
431
432         struct {
433                 /*
434                  * HTI (aka HDPORT) state read during initial hw readout. Most
435                  * platforms don't have HTI, so this will just stay 0. Those
436                  * that do will use this later to figure out which PLLs and PHYs
437                  * are unavailable for driver usage.
438                  */
439                 u32 state;
440         } hti;
441
442         struct {
443                 /* Access with DISPLAY_INFO() */
444                 const struct intel_display_device_info *__device_info;
445
446                 /* Access with DISPLAY_RUNTIME_INFO() */
447                 struct intel_display_runtime_info __runtime_info;
448         } info;
449
450         struct {
451                 bool false_color;
452         } ips;
453
454         struct {
455                 bool display_irqs_enabled;
456
457                 /* For i915gm/i945gm vblank irq workaround */
458                 u8 vblank_enabled;
459
460                 u32 de_irq_mask[I915_MAX_PIPES];
461                 u32 pipestat_irq_mask[I915_MAX_PIPES];
462         } irq;
463
464         struct {
465                 wait_queue_head_t waitqueue;
466
467                 /* mutex to protect pmdemand programming sequence */
468                 struct mutex lock;
469
470                 struct intel_global_obj obj;
471         } pmdemand;
472
473         struct {
474                 struct i915_power_domains domains;
475
476                 /* Shadow for DISPLAY_PHY_CONTROL which can't be safely read */
477                 u32 chv_phy_control;
478
479                 /* perform PHY state sanity checks? */
480                 bool chv_phy_assert[2];
481         } power;
482
483         struct {
484                 u32 mmio_base;
485
486                 /* protects panel power sequencer state */
487                 struct mutex mutex;
488         } pps;
489
490         struct {
491                 struct drm_property *broadcast_rgb;
492                 struct drm_property *force_audio;
493         } properties;
494
495         struct {
496                 unsigned long mask;
497         } quirks;
498
499         struct {
500                 /* restore state for suspend/resume and display reset */
501                 struct drm_atomic_state *modeset_state;
502                 struct drm_modeset_acquire_ctx reset_ctx;
503         } restore;
504
505         struct {
506                 enum {
507                         I915_SAGV_UNKNOWN = 0,
508                         I915_SAGV_DISABLED,
509                         I915_SAGV_ENABLED,
510                         I915_SAGV_NOT_CONTROLLED
511                 } status;
512
513                 u32 block_time_us;
514         } sagv;
515
516         struct {
517                 /*
518                  * DG2: Mask of PHYs that were not calibrated by the firmware
519                  * and should not be used.
520                  */
521                 u8 phy_failed_calibration;
522         } snps;
523
524         struct {
525                 /*
526                  * Shadows for CHV DPLL_MD regs to keep the state
527                  * checker somewhat working in the presence hardware
528                  * crappiness (can't read out DPLL_MD for pipes B & C).
529                  */
530                 u32 chv_dpll_md[I915_MAX_PIPES];
531                 u32 bxt_phy_grc;
532         } state;
533
534         struct {
535                 /* ordered wq for modesets */
536                 struct workqueue_struct *modeset;
537
538                 /* unbound hipri wq for page flips/plane updates */
539                 struct workqueue_struct *flip;
540         } wq;
541
542         /* Grouping using named structs. Keep sorted. */
543         struct drm_dp_tunnel_mgr *dp_tunnel_mgr;
544         struct intel_audio audio;
545         struct intel_dpll dpll;
546         struct intel_fbc *fbc[I915_MAX_FBCS];
547         struct intel_frontbuffer_tracking fb_tracking;
548         struct intel_hotplug hotplug;
549         struct intel_opregion *opregion;
550         struct intel_overlay *overlay;
551         struct intel_display_params params;
552         struct intel_vbt_data vbt;
553         struct intel_dmc_wl wl;
554         struct intel_wm wm;
555 };
556
557 #endif /* __INTEL_DISPLAY_CORE_H__ */