Merge branch 'drm-intel-next-queued' into gvt-next
[sfrench/cifs-2.6.git] / drivers / gpu / drm / drm_vblank.c
1 /*
2  * drm_irq.c IRQ and vblank support
3  *
4  * \author Rickard E. (Rik) Faith <faith@valinux.com>
5  * \author Gareth Hughes <gareth@valinux.com>
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a
8  * copy of this software and associated documentation files (the "Software"),
9  * to deal in the Software without restriction, including without limitation
10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11  * and/or sell copies of the Software, and to permit persons to whom the
12  * Software is furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice (including the next
15  * paragraph) shall be included in all copies or substantial portions of the
16  * Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
22  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24  * OTHER DEALINGS IN THE SOFTWARE.
25  */
26
27 #include <drm/drm_vblank.h>
28 #include <drm/drmP.h>
29 #include <linux/export.h>
30
31 #include "drm_trace.h"
32 #include "drm_internal.h"
33
34 /**
35  * DOC: vblank handling
36  *
37  * Vertical blanking plays a major role in graphics rendering. To achieve
38  * tear-free display, users must synchronize page flips and/or rendering to
39  * vertical blanking. The DRM API offers ioctls to perform page flips
40  * synchronized to vertical blanking and wait for vertical blanking.
41  *
42  * The DRM core handles most of the vertical blanking management logic, which
43  * involves filtering out spurious interrupts, keeping race-free blanking
44  * counters, coping with counter wrap-around and resets and keeping use counts.
45  * It relies on the driver to generate vertical blanking interrupts and
46  * optionally provide a hardware vertical blanking counter.
47  *
48  * Drivers must initialize the vertical blanking handling core with a call to
49  * drm_vblank_init(). Minimally, a driver needs to implement
50  * &drm_crtc_funcs.enable_vblank and &drm_crtc_funcs.disable_vblank plus call
51  * drm_crtc_handle_vblank() in it's vblank interrupt handler for working vblank
52  * support.
53  *
54  * Vertical blanking interrupts can be enabled by the DRM core or by drivers
55  * themselves (for instance to handle page flipping operations).  The DRM core
56  * maintains a vertical blanking use count to ensure that the interrupts are not
57  * disabled while a user still needs them. To increment the use count, drivers
58  * call drm_crtc_vblank_get() and release the vblank reference again with
59  * drm_crtc_vblank_put(). In between these two calls vblank interrupts are
60  * guaranteed to be enabled.
61  *
62  * On many hardware disabling the vblank interrupt cannot be done in a race-free
63  * manner, see &drm_driver.vblank_disable_immediate and
64  * &drm_driver.max_vblank_count. In that case the vblank core only disables the
65  * vblanks after a timer has expired, which can be configured through the
66  * ``vblankoffdelay`` module parameter.
67  */
68
69 /* Retry timestamp calculation up to 3 times to satisfy
70  * drm_timestamp_precision before giving up.
71  */
72 #define DRM_TIMESTAMP_MAXRETRIES 3
73
74 /* Threshold in nanoseconds for detection of redundant
75  * vblank irq in drm_handle_vblank(). 1 msec should be ok.
76  */
77 #define DRM_REDUNDANT_VBLIRQ_THRESH_NS 1000000
78
79 static bool
80 drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe,
81                           ktime_t *tvblank, bool in_vblank_irq);
82
83 static unsigned int drm_timestamp_precision = 20;  /* Default to 20 usecs. */
84
85 static int drm_vblank_offdelay = 5000;    /* Default to 5000 msecs. */
86
87 module_param_named(vblankoffdelay, drm_vblank_offdelay, int, 0600);
88 module_param_named(timestamp_precision_usec, drm_timestamp_precision, int, 0600);
89 MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable [msecs] (0: never disable, <0: disable immediately)");
90 MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]");
91
92 static void store_vblank(struct drm_device *dev, unsigned int pipe,
93                          u32 vblank_count_inc,
94                          ktime_t t_vblank, u32 last)
95 {
96         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
97
98         assert_spin_locked(&dev->vblank_time_lock);
99
100         vblank->last = last;
101
102         write_seqlock(&vblank->seqlock);
103         vblank->time = t_vblank;
104         vblank->count += vblank_count_inc;
105         write_sequnlock(&vblank->seqlock);
106 }
107
108 /*
109  * "No hw counter" fallback implementation of .get_vblank_counter() hook,
110  * if there is no useable hardware frame counter available.
111  */
112 static u32 drm_vblank_no_hw_counter(struct drm_device *dev, unsigned int pipe)
113 {
114         WARN_ON_ONCE(dev->max_vblank_count != 0);
115         return 0;
116 }
117
118 static u32 __get_vblank_counter(struct drm_device *dev, unsigned int pipe)
119 {
120         if (drm_core_check_feature(dev, DRIVER_MODESET)) {
121                 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
122
123                 if (WARN_ON(!crtc))
124                         return 0;
125
126                 if (crtc->funcs->get_vblank_counter)
127                         return crtc->funcs->get_vblank_counter(crtc);
128         }
129
130         if (dev->driver->get_vblank_counter)
131                 return dev->driver->get_vblank_counter(dev, pipe);
132
133         return drm_vblank_no_hw_counter(dev, pipe);
134 }
135
136 /*
137  * Reset the stored timestamp for the current vblank count to correspond
138  * to the last vblank occurred.
139  *
140  * Only to be called from drm_crtc_vblank_on().
141  *
142  * Note: caller must hold &drm_device.vbl_lock since this reads & writes
143  * device vblank fields.
144  */
145 static void drm_reset_vblank_timestamp(struct drm_device *dev, unsigned int pipe)
146 {
147         u32 cur_vblank;
148         bool rc;
149         ktime_t t_vblank;
150         int count = DRM_TIMESTAMP_MAXRETRIES;
151
152         spin_lock(&dev->vblank_time_lock);
153
154         /*
155          * sample the current counter to avoid random jumps
156          * when drm_vblank_enable() applies the diff
157          */
158         do {
159                 cur_vblank = __get_vblank_counter(dev, pipe);
160                 rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, false);
161         } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0);
162
163         /*
164          * Only reinitialize corresponding vblank timestamp if high-precision query
165          * available and didn't fail. Otherwise reinitialize delayed at next vblank
166          * interrupt and assign 0 for now, to mark the vblanktimestamp as invalid.
167          */
168         if (!rc)
169                 t_vblank = 0;
170
171         /*
172          * +1 to make sure user will never see the same
173          * vblank counter value before and after a modeset
174          */
175         store_vblank(dev, pipe, 1, t_vblank, cur_vblank);
176
177         spin_unlock(&dev->vblank_time_lock);
178 }
179
180 /*
181  * Call back into the driver to update the appropriate vblank counter
182  * (specified by @pipe).  Deal with wraparound, if it occurred, and
183  * update the last read value so we can deal with wraparound on the next
184  * call if necessary.
185  *
186  * Only necessary when going from off->on, to account for frames we
187  * didn't get an interrupt for.
188  *
189  * Note: caller must hold &drm_device.vbl_lock since this reads & writes
190  * device vblank fields.
191  */
192 static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe,
193                                     bool in_vblank_irq)
194 {
195         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
196         u32 cur_vblank, diff;
197         bool rc;
198         ktime_t t_vblank;
199         int count = DRM_TIMESTAMP_MAXRETRIES;
200         int framedur_ns = vblank->framedur_ns;
201
202         /*
203          * Interrupts were disabled prior to this call, so deal with counter
204          * wrap if needed.
205          * NOTE!  It's possible we lost a full dev->max_vblank_count + 1 events
206          * here if the register is small or we had vblank interrupts off for
207          * a long time.
208          *
209          * We repeat the hardware vblank counter & timestamp query until
210          * we get consistent results. This to prevent races between gpu
211          * updating its hardware counter while we are retrieving the
212          * corresponding vblank timestamp.
213          */
214         do {
215                 cur_vblank = __get_vblank_counter(dev, pipe);
216                 rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, in_vblank_irq);
217         } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0);
218
219         if (dev->max_vblank_count != 0) {
220                 /* trust the hw counter when it's around */
221                 diff = (cur_vblank - vblank->last) & dev->max_vblank_count;
222         } else if (rc && framedur_ns) {
223                 u64 diff_ns = ktime_to_ns(ktime_sub(t_vblank, vblank->time));
224
225                 /*
226                  * Figure out how many vblanks we've missed based
227                  * on the difference in the timestamps and the
228                  * frame/field duration.
229                  */
230                 diff = DIV_ROUND_CLOSEST_ULL(diff_ns, framedur_ns);
231
232                 if (diff == 0 && in_vblank_irq)
233                         DRM_DEBUG_VBL("crtc %u: Redundant vblirq ignored."
234                                       " diff_ns = %lld, framedur_ns = %d)\n",
235                                       pipe, (long long) diff_ns, framedur_ns);
236         } else {
237                 /* some kind of default for drivers w/o accurate vbl timestamping */
238                 diff = in_vblank_irq ? 1 : 0;
239         }
240
241         /*
242          * Within a drm_vblank_pre_modeset - drm_vblank_post_modeset
243          * interval? If so then vblank irqs keep running and it will likely
244          * happen that the hardware vblank counter is not trustworthy as it
245          * might reset at some point in that interval and vblank timestamps
246          * are not trustworthy either in that interval. Iow. this can result
247          * in a bogus diff >> 1 which must be avoided as it would cause
248          * random large forward jumps of the software vblank counter.
249          */
250         if (diff > 1 && (vblank->inmodeset & 0x2)) {
251                 DRM_DEBUG_VBL("clamping vblank bump to 1 on crtc %u: diffr=%u"
252                               " due to pre-modeset.\n", pipe, diff);
253                 diff = 1;
254         }
255
256         DRM_DEBUG_VBL("updating vblank count on crtc %u:"
257                       " current=%llu, diff=%u, hw=%u hw_last=%u\n",
258                       pipe, vblank->count, diff, cur_vblank, vblank->last);
259
260         if (diff == 0) {
261                 WARN_ON_ONCE(cur_vblank != vblank->last);
262                 return;
263         }
264
265         /*
266          * Only reinitialize corresponding vblank timestamp if high-precision query
267          * available and didn't fail, or we were called from the vblank interrupt.
268          * Otherwise reinitialize delayed at next vblank interrupt and assign 0
269          * for now, to mark the vblanktimestamp as invalid.
270          */
271         if (!rc && !in_vblank_irq)
272                 t_vblank = 0;
273
274         store_vblank(dev, pipe, diff, t_vblank, cur_vblank);
275 }
276
277 static u64 drm_vblank_count(struct drm_device *dev, unsigned int pipe)
278 {
279         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
280
281         if (WARN_ON(pipe >= dev->num_crtcs))
282                 return 0;
283
284         return vblank->count;
285 }
286
287 /**
288  * drm_crtc_accurate_vblank_count - retrieve the master vblank counter
289  * @crtc: which counter to retrieve
290  *
291  * This function is similar to drm_crtc_vblank_count() but this function
292  * interpolates to handle a race with vblank interrupts using the high precision
293  * timestamping support.
294  *
295  * This is mostly useful for hardware that can obtain the scanout position, but
296  * doesn't have a hardware frame counter.
297  */
298 u64 drm_crtc_accurate_vblank_count(struct drm_crtc *crtc)
299 {
300         struct drm_device *dev = crtc->dev;
301         unsigned int pipe = drm_crtc_index(crtc);
302         u64 vblank;
303         unsigned long flags;
304
305         WARN_ONCE(drm_debug & DRM_UT_VBL && !dev->driver->get_vblank_timestamp,
306                   "This function requires support for accurate vblank timestamps.");
307
308         spin_lock_irqsave(&dev->vblank_time_lock, flags);
309
310         drm_update_vblank_count(dev, pipe, false);
311         vblank = drm_vblank_count(dev, pipe);
312
313         spin_unlock_irqrestore(&dev->vblank_time_lock, flags);
314
315         return vblank;
316 }
317 EXPORT_SYMBOL(drm_crtc_accurate_vblank_count);
318
319 static void __disable_vblank(struct drm_device *dev, unsigned int pipe)
320 {
321         if (drm_core_check_feature(dev, DRIVER_MODESET)) {
322                 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
323
324                 if (WARN_ON(!crtc))
325                         return;
326
327                 if (crtc->funcs->disable_vblank) {
328                         crtc->funcs->disable_vblank(crtc);
329                         return;
330                 }
331         }
332
333         dev->driver->disable_vblank(dev, pipe);
334 }
335
336 /*
337  * Disable vblank irq's on crtc, make sure that last vblank count
338  * of hardware and corresponding consistent software vblank counter
339  * are preserved, even if there are any spurious vblank irq's after
340  * disable.
341  */
342 void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe)
343 {
344         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
345         unsigned long irqflags;
346
347         assert_spin_locked(&dev->vbl_lock);
348
349         /* Prevent vblank irq processing while disabling vblank irqs,
350          * so no updates of timestamps or count can happen after we've
351          * disabled. Needed to prevent races in case of delayed irq's.
352          */
353         spin_lock_irqsave(&dev->vblank_time_lock, irqflags);
354
355         /*
356          * Update vblank count and disable vblank interrupts only if the
357          * interrupts were enabled. This avoids calling the ->disable_vblank()
358          * operation in atomic context with the hardware potentially runtime
359          * suspended.
360          */
361         if (!vblank->enabled)
362                 goto out;
363
364         /*
365          * Update the count and timestamp to maintain the
366          * appearance that the counter has been ticking all along until
367          * this time. This makes the count account for the entire time
368          * between drm_crtc_vblank_on() and drm_crtc_vblank_off().
369          */
370         drm_update_vblank_count(dev, pipe, false);
371         __disable_vblank(dev, pipe);
372         vblank->enabled = false;
373
374 out:
375         spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags);
376 }
377
378 static void vblank_disable_fn(struct timer_list *t)
379 {
380         struct drm_vblank_crtc *vblank = from_timer(vblank, t, disable_timer);
381         struct drm_device *dev = vblank->dev;
382         unsigned int pipe = vblank->pipe;
383         unsigned long irqflags;
384
385         spin_lock_irqsave(&dev->vbl_lock, irqflags);
386         if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) {
387                 DRM_DEBUG("disabling vblank on crtc %u\n", pipe);
388                 drm_vblank_disable_and_save(dev, pipe);
389         }
390         spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
391 }
392
393 void drm_vblank_cleanup(struct drm_device *dev)
394 {
395         unsigned int pipe;
396
397         /* Bail if the driver didn't call drm_vblank_init() */
398         if (dev->num_crtcs == 0)
399                 return;
400
401         for (pipe = 0; pipe < dev->num_crtcs; pipe++) {
402                 struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
403
404                 WARN_ON(READ_ONCE(vblank->enabled) &&
405                         drm_core_check_feature(dev, DRIVER_MODESET));
406
407                 del_timer_sync(&vblank->disable_timer);
408         }
409
410         kfree(dev->vblank);
411
412         dev->num_crtcs = 0;
413 }
414
415 /**
416  * drm_vblank_init - initialize vblank support
417  * @dev: DRM device
418  * @num_crtcs: number of CRTCs supported by @dev
419  *
420  * This function initializes vblank support for @num_crtcs display pipelines.
421  * Cleanup is handled by the DRM core, or through calling drm_dev_fini() for
422  * drivers with a &drm_driver.release callback.
423  *
424  * Returns:
425  * Zero on success or a negative error code on failure.
426  */
427 int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs)
428 {
429         int ret = -ENOMEM;
430         unsigned int i;
431
432         spin_lock_init(&dev->vbl_lock);
433         spin_lock_init(&dev->vblank_time_lock);
434
435         dev->num_crtcs = num_crtcs;
436
437         dev->vblank = kcalloc(num_crtcs, sizeof(*dev->vblank), GFP_KERNEL);
438         if (!dev->vblank)
439                 goto err;
440
441         for (i = 0; i < num_crtcs; i++) {
442                 struct drm_vblank_crtc *vblank = &dev->vblank[i];
443
444                 vblank->dev = dev;
445                 vblank->pipe = i;
446                 init_waitqueue_head(&vblank->queue);
447                 timer_setup(&vblank->disable_timer, vblank_disable_fn, 0);
448                 seqlock_init(&vblank->seqlock);
449         }
450
451         DRM_INFO("Supports vblank timestamp caching Rev 2 (21.10.2013).\n");
452
453         /* Driver specific high-precision vblank timestamping supported? */
454         if (dev->driver->get_vblank_timestamp)
455                 DRM_INFO("Driver supports precise vblank timestamp query.\n");
456         else
457                 DRM_INFO("No driver support for vblank timestamp query.\n");
458
459         /* Must have precise timestamping for reliable vblank instant disable */
460         if (dev->vblank_disable_immediate && !dev->driver->get_vblank_timestamp) {
461                 dev->vblank_disable_immediate = false;
462                 DRM_INFO("Setting vblank_disable_immediate to false because "
463                          "get_vblank_timestamp == NULL\n");
464         }
465
466         return 0;
467
468 err:
469         dev->num_crtcs = 0;
470         return ret;
471 }
472 EXPORT_SYMBOL(drm_vblank_init);
473
474 /**
475  * drm_crtc_vblank_waitqueue - get vblank waitqueue for the CRTC
476  * @crtc: which CRTC's vblank waitqueue to retrieve
477  *
478  * This function returns a pointer to the vblank waitqueue for the CRTC.
479  * Drivers can use this to implement vblank waits using wait_event() and related
480  * functions.
481  */
482 wait_queue_head_t *drm_crtc_vblank_waitqueue(struct drm_crtc *crtc)
483 {
484         return &crtc->dev->vblank[drm_crtc_index(crtc)].queue;
485 }
486 EXPORT_SYMBOL(drm_crtc_vblank_waitqueue);
487
488
489 /**
490  * drm_calc_timestamping_constants - calculate vblank timestamp constants
491  * @crtc: drm_crtc whose timestamp constants should be updated.
492  * @mode: display mode containing the scanout timings
493  *
494  * Calculate and store various constants which are later needed by vblank and
495  * swap-completion timestamping, e.g, by
496  * drm_calc_vbltimestamp_from_scanoutpos(). They are derived from CRTC's true
497  * scanout timing, so they take things like panel scaling or other adjustments
498  * into account.
499  */
500 void drm_calc_timestamping_constants(struct drm_crtc *crtc,
501                                      const struct drm_display_mode *mode)
502 {
503         struct drm_device *dev = crtc->dev;
504         unsigned int pipe = drm_crtc_index(crtc);
505         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
506         int linedur_ns = 0, framedur_ns = 0;
507         int dotclock = mode->crtc_clock;
508
509         if (!dev->num_crtcs)
510                 return;
511
512         if (WARN_ON(pipe >= dev->num_crtcs))
513                 return;
514
515         /* Valid dotclock? */
516         if (dotclock > 0) {
517                 int frame_size = mode->crtc_htotal * mode->crtc_vtotal;
518
519                 /*
520                  * Convert scanline length in pixels and video
521                  * dot clock to line duration and frame duration
522                  * in nanoseconds:
523                  */
524                 linedur_ns  = div_u64((u64) mode->crtc_htotal * 1000000, dotclock);
525                 framedur_ns = div_u64((u64) frame_size * 1000000, dotclock);
526
527                 /*
528                  * Fields of interlaced scanout modes are only half a frame duration.
529                  */
530                 if (mode->flags & DRM_MODE_FLAG_INTERLACE)
531                         framedur_ns /= 2;
532         } else
533                 DRM_ERROR("crtc %u: Can't calculate constants, dotclock = 0!\n",
534                           crtc->base.id);
535
536         vblank->linedur_ns  = linedur_ns;
537         vblank->framedur_ns = framedur_ns;
538         vblank->hwmode = *mode;
539
540         DRM_DEBUG("crtc %u: hwmode: htotal %d, vtotal %d, vdisplay %d\n",
541                   crtc->base.id, mode->crtc_htotal,
542                   mode->crtc_vtotal, mode->crtc_vdisplay);
543         DRM_DEBUG("crtc %u: clock %d kHz framedur %d linedur %d\n",
544                   crtc->base.id, dotclock, framedur_ns, linedur_ns);
545 }
546 EXPORT_SYMBOL(drm_calc_timestamping_constants);
547
548 /**
549  * drm_calc_vbltimestamp_from_scanoutpos - precise vblank timestamp helper
550  * @dev: DRM device
551  * @pipe: index of CRTC whose vblank timestamp to retrieve
552  * @max_error: Desired maximum allowable error in timestamps (nanosecs)
553  *             On return contains true maximum error of timestamp
554  * @vblank_time: Pointer to time which should receive the timestamp
555  * @in_vblank_irq:
556  *     True when called from drm_crtc_handle_vblank().  Some drivers
557  *     need to apply some workarounds for gpu-specific vblank irq quirks
558  *     if flag is set.
559  *
560  * Implements calculation of exact vblank timestamps from given drm_display_mode
561  * timings and current video scanout position of a CRTC. This can be directly
562  * used as the &drm_driver.get_vblank_timestamp implementation of a kms driver
563  * if &drm_driver.get_scanout_position is implemented.
564  *
565  * The current implementation only handles standard video modes. For double scan
566  * and interlaced modes the driver is supposed to adjust the hardware mode
567  * (taken from &drm_crtc_state.adjusted mode for atomic modeset drivers) to
568  * match the scanout position reported.
569  *
570  * Note that atomic drivers must call drm_calc_timestamping_constants() before
571  * enabling a CRTC. The atomic helpers already take care of that in
572  * drm_atomic_helper_update_legacy_modeset_state().
573  *
574  * Returns:
575  *
576  * Returns true on success, and false on failure, i.e. when no accurate
577  * timestamp could be acquired.
578  */
579 bool drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
580                                            unsigned int pipe,
581                                            int *max_error,
582                                            ktime_t *vblank_time,
583                                            bool in_vblank_irq)
584 {
585         struct timespec64 ts_etime, ts_vblank_time;
586         ktime_t stime, etime;
587         bool vbl_status;
588         struct drm_crtc *crtc;
589         const struct drm_display_mode *mode;
590         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
591         int vpos, hpos, i;
592         int delta_ns, duration_ns;
593
594         if (!drm_core_check_feature(dev, DRIVER_MODESET))
595                 return false;
596
597         crtc = drm_crtc_from_index(dev, pipe);
598
599         if (pipe >= dev->num_crtcs || !crtc) {
600                 DRM_ERROR("Invalid crtc %u\n", pipe);
601                 return false;
602         }
603
604         /* Scanout position query not supported? Should not happen. */
605         if (!dev->driver->get_scanout_position) {
606                 DRM_ERROR("Called from driver w/o get_scanout_position()!?\n");
607                 return false;
608         }
609
610         if (drm_drv_uses_atomic_modeset(dev))
611                 mode = &vblank->hwmode;
612         else
613                 mode = &crtc->hwmode;
614
615         /* If mode timing undefined, just return as no-op:
616          * Happens during initial modesetting of a crtc.
617          */
618         if (mode->crtc_clock == 0) {
619                 DRM_DEBUG("crtc %u: Noop due to uninitialized mode.\n", pipe);
620                 WARN_ON_ONCE(drm_drv_uses_atomic_modeset(dev));
621
622                 return false;
623         }
624
625         /* Get current scanout position with system timestamp.
626          * Repeat query up to DRM_TIMESTAMP_MAXRETRIES times
627          * if single query takes longer than max_error nanoseconds.
628          *
629          * This guarantees a tight bound on maximum error if
630          * code gets preempted or delayed for some reason.
631          */
632         for (i = 0; i < DRM_TIMESTAMP_MAXRETRIES; i++) {
633                 /*
634                  * Get vertical and horizontal scanout position vpos, hpos,
635                  * and bounding timestamps stime, etime, pre/post query.
636                  */
637                 vbl_status = dev->driver->get_scanout_position(dev, pipe,
638                                                                in_vblank_irq,
639                                                                &vpos, &hpos,
640                                                                &stime, &etime,
641                                                                mode);
642
643                 /* Return as no-op if scanout query unsupported or failed. */
644                 if (!vbl_status) {
645                         DRM_DEBUG("crtc %u : scanoutpos query failed.\n",
646                                   pipe);
647                         return false;
648                 }
649
650                 /* Compute uncertainty in timestamp of scanout position query. */
651                 duration_ns = ktime_to_ns(etime) - ktime_to_ns(stime);
652
653                 /* Accept result with <  max_error nsecs timing uncertainty. */
654                 if (duration_ns <= *max_error)
655                         break;
656         }
657
658         /* Noisy system timing? */
659         if (i == DRM_TIMESTAMP_MAXRETRIES) {
660                 DRM_DEBUG("crtc %u: Noisy timestamp %d us > %d us [%d reps].\n",
661                           pipe, duration_ns/1000, *max_error/1000, i);
662         }
663
664         /* Return upper bound of timestamp precision error. */
665         *max_error = duration_ns;
666
667         /* Convert scanout position into elapsed time at raw_time query
668          * since start of scanout at first display scanline. delta_ns
669          * can be negative if start of scanout hasn't happened yet.
670          */
671         delta_ns = div_s64(1000000LL * (vpos * mode->crtc_htotal + hpos),
672                            mode->crtc_clock);
673
674         /* Subtract time delta from raw timestamp to get final
675          * vblank_time timestamp for end of vblank.
676          */
677         *vblank_time = ktime_sub_ns(etime, delta_ns);
678
679         if ((drm_debug & DRM_UT_VBL) == 0)
680                 return true;
681
682         ts_etime = ktime_to_timespec64(etime);
683         ts_vblank_time = ktime_to_timespec64(*vblank_time);
684
685         DRM_DEBUG_VBL("crtc %u : v p(%d,%d)@ %lld.%06ld -> %lld.%06ld [e %d us, %d rep]\n",
686                       pipe, hpos, vpos,
687                       (u64)ts_etime.tv_sec, ts_etime.tv_nsec / 1000,
688                       (u64)ts_vblank_time.tv_sec, ts_vblank_time.tv_nsec / 1000,
689                       duration_ns / 1000, i);
690
691         return true;
692 }
693 EXPORT_SYMBOL(drm_calc_vbltimestamp_from_scanoutpos);
694
695 /**
696  * drm_get_last_vbltimestamp - retrieve raw timestamp for the most recent
697  *                             vblank interval
698  * @dev: DRM device
699  * @pipe: index of CRTC whose vblank timestamp to retrieve
700  * @tvblank: Pointer to target time which should receive the timestamp
701  * @in_vblank_irq:
702  *     True when called from drm_crtc_handle_vblank().  Some drivers
703  *     need to apply some workarounds for gpu-specific vblank irq quirks
704  *     if flag is set.
705  *
706  * Fetches the system timestamp corresponding to the time of the most recent
707  * vblank interval on specified CRTC. May call into kms-driver to
708  * compute the timestamp with a high-precision GPU specific method.
709  *
710  * Returns zero if timestamp originates from uncorrected do_gettimeofday()
711  * call, i.e., it isn't very precisely locked to the true vblank.
712  *
713  * Returns:
714  * True if timestamp is considered to be very precise, false otherwise.
715  */
716 static bool
717 drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe,
718                           ktime_t *tvblank, bool in_vblank_irq)
719 {
720         bool ret = false;
721
722         /* Define requested maximum error on timestamps (nanoseconds). */
723         int max_error = (int) drm_timestamp_precision * 1000;
724
725         /* Query driver if possible and precision timestamping enabled. */
726         if (dev->driver->get_vblank_timestamp && (max_error > 0))
727                 ret = dev->driver->get_vblank_timestamp(dev, pipe, &max_error,
728                                                         tvblank, in_vblank_irq);
729
730         /* GPU high precision timestamp query unsupported or failed.
731          * Return current monotonic/gettimeofday timestamp as best estimate.
732          */
733         if (!ret)
734                 *tvblank = ktime_get();
735
736         return ret;
737 }
738
739 /**
740  * drm_crtc_vblank_count - retrieve "cooked" vblank counter value
741  * @crtc: which counter to retrieve
742  *
743  * Fetches the "cooked" vblank count value that represents the number of
744  * vblank events since the system was booted, including lost events due to
745  * modesetting activity. Note that this timer isn't correct against a racing
746  * vblank interrupt (since it only reports the software vblank counter), see
747  * drm_crtc_accurate_vblank_count() for such use-cases.
748  *
749  * Returns:
750  * The software vblank counter.
751  */
752 u64 drm_crtc_vblank_count(struct drm_crtc *crtc)
753 {
754         return drm_vblank_count(crtc->dev, drm_crtc_index(crtc));
755 }
756 EXPORT_SYMBOL(drm_crtc_vblank_count);
757
758 /**
759  * drm_vblank_count_and_time - retrieve "cooked" vblank counter value and the
760  *     system timestamp corresponding to that vblank counter value.
761  * @dev: DRM device
762  * @pipe: index of CRTC whose counter to retrieve
763  * @vblanktime: Pointer to ktime_t to receive the vblank timestamp.
764  *
765  * Fetches the "cooked" vblank count value that represents the number of
766  * vblank events since the system was booted, including lost events due to
767  * modesetting activity. Returns corresponding system timestamp of the time
768  * of the vblank interval that corresponds to the current vblank counter value.
769  *
770  * This is the legacy version of drm_crtc_vblank_count_and_time().
771  */
772 static u64 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe,
773                                      ktime_t *vblanktime)
774 {
775         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
776         u64 vblank_count;
777         unsigned int seq;
778
779         if (WARN_ON(pipe >= dev->num_crtcs)) {
780                 *vblanktime = 0;
781                 return 0;
782         }
783
784         do {
785                 seq = read_seqbegin(&vblank->seqlock);
786                 vblank_count = vblank->count;
787                 *vblanktime = vblank->time;
788         } while (read_seqretry(&vblank->seqlock, seq));
789
790         return vblank_count;
791 }
792
793 /**
794  * drm_crtc_vblank_count_and_time - retrieve "cooked" vblank counter value
795  *     and the system timestamp corresponding to that vblank counter value
796  * @crtc: which counter to retrieve
797  * @vblanktime: Pointer to time to receive the vblank timestamp.
798  *
799  * Fetches the "cooked" vblank count value that represents the number of
800  * vblank events since the system was booted, including lost events due to
801  * modesetting activity. Returns corresponding system timestamp of the time
802  * of the vblank interval that corresponds to the current vblank counter value.
803  */
804 u64 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc,
805                                    ktime_t *vblanktime)
806 {
807         return drm_vblank_count_and_time(crtc->dev, drm_crtc_index(crtc),
808                                          vblanktime);
809 }
810 EXPORT_SYMBOL(drm_crtc_vblank_count_and_time);
811
812 static void send_vblank_event(struct drm_device *dev,
813                 struct drm_pending_vblank_event *e,
814                 u64 seq, ktime_t now)
815 {
816         struct timespec64 tv;
817
818         switch (e->event.base.type) {
819         case DRM_EVENT_VBLANK:
820         case DRM_EVENT_FLIP_COMPLETE:
821                 tv = ktime_to_timespec64(now);
822                 e->event.vbl.sequence = seq;
823                 /*
824                  * e->event is a user space structure, with hardcoded unsigned
825                  * 32-bit seconds/microseconds. This is safe as we always use
826                  * monotonic timestamps since linux-4.15
827                  */
828                 e->event.vbl.tv_sec = tv.tv_sec;
829                 e->event.vbl.tv_usec = tv.tv_nsec / 1000;
830                 break;
831         case DRM_EVENT_CRTC_SEQUENCE:
832                 if (seq)
833                         e->event.seq.sequence = seq;
834                 e->event.seq.time_ns = ktime_to_ns(now);
835                 break;
836         }
837         trace_drm_vblank_event_delivered(e->base.file_priv, e->pipe, seq);
838         drm_send_event_locked(dev, &e->base);
839 }
840
841 /**
842  * drm_crtc_arm_vblank_event - arm vblank event after pageflip
843  * @crtc: the source CRTC of the vblank event
844  * @e: the event to send
845  *
846  * A lot of drivers need to generate vblank events for the very next vblank
847  * interrupt. For example when the page flip interrupt happens when the page
848  * flip gets armed, but not when it actually executes within the next vblank
849  * period. This helper function implements exactly the required vblank arming
850  * behaviour.
851  *
852  * NOTE: Drivers using this to send out the &drm_crtc_state.event as part of an
853  * atomic commit must ensure that the next vblank happens at exactly the same
854  * time as the atomic commit is committed to the hardware. This function itself
855  * does **not** protect against the next vblank interrupt racing with either this
856  * function call or the atomic commit operation. A possible sequence could be:
857  *
858  * 1. Driver commits new hardware state into vblank-synchronized registers.
859  * 2. A vblank happens, committing the hardware state. Also the corresponding
860  *    vblank interrupt is fired off and fully processed by the interrupt
861  *    handler.
862  * 3. The atomic commit operation proceeds to call drm_crtc_arm_vblank_event().
863  * 4. The event is only send out for the next vblank, which is wrong.
864  *
865  * An equivalent race can happen when the driver calls
866  * drm_crtc_arm_vblank_event() before writing out the new hardware state.
867  *
868  * The only way to make this work safely is to prevent the vblank from firing
869  * (and the hardware from committing anything else) until the entire atomic
870  * commit sequence has run to completion. If the hardware does not have such a
871  * feature (e.g. using a "go" bit), then it is unsafe to use this functions.
872  * Instead drivers need to manually send out the event from their interrupt
873  * handler by calling drm_crtc_send_vblank_event() and make sure that there's no
874  * possible race with the hardware committing the atomic update.
875  *
876  * Caller must hold a vblank reference for the event @e, which will be dropped
877  * when the next vblank arrives.
878  */
879 void drm_crtc_arm_vblank_event(struct drm_crtc *crtc,
880                                struct drm_pending_vblank_event *e)
881 {
882         struct drm_device *dev = crtc->dev;
883         unsigned int pipe = drm_crtc_index(crtc);
884
885         assert_spin_locked(&dev->event_lock);
886
887         e->pipe = pipe;
888         e->sequence = drm_crtc_accurate_vblank_count(crtc) + 1;
889         list_add_tail(&e->base.link, &dev->vblank_event_list);
890 }
891 EXPORT_SYMBOL(drm_crtc_arm_vblank_event);
892
893 /**
894  * drm_crtc_send_vblank_event - helper to send vblank event after pageflip
895  * @crtc: the source CRTC of the vblank event
896  * @e: the event to send
897  *
898  * Updates sequence # and timestamp on event for the most recently processed
899  * vblank, and sends it to userspace.  Caller must hold event lock.
900  *
901  * See drm_crtc_arm_vblank_event() for a helper which can be used in certain
902  * situation, especially to send out events for atomic commit operations.
903  */
904 void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
905                                 struct drm_pending_vblank_event *e)
906 {
907         struct drm_device *dev = crtc->dev;
908         u64 seq;
909         unsigned int pipe = drm_crtc_index(crtc);
910         ktime_t now;
911
912         if (dev->num_crtcs > 0) {
913                 seq = drm_vblank_count_and_time(dev, pipe, &now);
914         } else {
915                 seq = 0;
916
917                 now = ktime_get();
918         }
919         e->pipe = pipe;
920         send_vblank_event(dev, e, seq, now);
921 }
922 EXPORT_SYMBOL(drm_crtc_send_vblank_event);
923
924 static int __enable_vblank(struct drm_device *dev, unsigned int pipe)
925 {
926         if (drm_core_check_feature(dev, DRIVER_MODESET)) {
927                 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
928
929                 if (WARN_ON(!crtc))
930                         return 0;
931
932                 if (crtc->funcs->enable_vblank)
933                         return crtc->funcs->enable_vblank(crtc);
934         }
935
936         return dev->driver->enable_vblank(dev, pipe);
937 }
938
939 static int drm_vblank_enable(struct drm_device *dev, unsigned int pipe)
940 {
941         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
942         int ret = 0;
943
944         assert_spin_locked(&dev->vbl_lock);
945
946         spin_lock(&dev->vblank_time_lock);
947
948         if (!vblank->enabled) {
949                 /*
950                  * Enable vblank irqs under vblank_time_lock protection.
951                  * All vblank count & timestamp updates are held off
952                  * until we are done reinitializing master counter and
953                  * timestamps. Filtercode in drm_handle_vblank() will
954                  * prevent double-accounting of same vblank interval.
955                  */
956                 ret = __enable_vblank(dev, pipe);
957                 DRM_DEBUG("enabling vblank on crtc %u, ret: %d\n", pipe, ret);
958                 if (ret) {
959                         atomic_dec(&vblank->refcount);
960                 } else {
961                         drm_update_vblank_count(dev, pipe, 0);
962                         /* drm_update_vblank_count() includes a wmb so we just
963                          * need to ensure that the compiler emits the write
964                          * to mark the vblank as enabled after the call
965                          * to drm_update_vblank_count().
966                          */
967                         WRITE_ONCE(vblank->enabled, true);
968                 }
969         }
970
971         spin_unlock(&dev->vblank_time_lock);
972
973         return ret;
974 }
975
976 static int drm_vblank_get(struct drm_device *dev, unsigned int pipe)
977 {
978         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
979         unsigned long irqflags;
980         int ret = 0;
981
982         if (!dev->num_crtcs)
983                 return -EINVAL;
984
985         if (WARN_ON(pipe >= dev->num_crtcs))
986                 return -EINVAL;
987
988         spin_lock_irqsave(&dev->vbl_lock, irqflags);
989         /* Going from 0->1 means we have to enable interrupts again */
990         if (atomic_add_return(1, &vblank->refcount) == 1) {
991                 ret = drm_vblank_enable(dev, pipe);
992         } else {
993                 if (!vblank->enabled) {
994                         atomic_dec(&vblank->refcount);
995                         ret = -EINVAL;
996                 }
997         }
998         spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
999
1000         return ret;
1001 }
1002
1003 /**
1004  * drm_crtc_vblank_get - get a reference count on vblank events
1005  * @crtc: which CRTC to own
1006  *
1007  * Acquire a reference count on vblank events to avoid having them disabled
1008  * while in use.
1009  *
1010  * Returns:
1011  * Zero on success or a negative error code on failure.
1012  */
1013 int drm_crtc_vblank_get(struct drm_crtc *crtc)
1014 {
1015         return drm_vblank_get(crtc->dev, drm_crtc_index(crtc));
1016 }
1017 EXPORT_SYMBOL(drm_crtc_vblank_get);
1018
1019 static void drm_vblank_put(struct drm_device *dev, unsigned int pipe)
1020 {
1021         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1022
1023         if (WARN_ON(pipe >= dev->num_crtcs))
1024                 return;
1025
1026         if (WARN_ON(atomic_read(&vblank->refcount) == 0))
1027                 return;
1028
1029         /* Last user schedules interrupt disable */
1030         if (atomic_dec_and_test(&vblank->refcount)) {
1031                 if (drm_vblank_offdelay == 0)
1032                         return;
1033                 else if (drm_vblank_offdelay < 0)
1034                         vblank_disable_fn(&vblank->disable_timer);
1035                 else if (!dev->vblank_disable_immediate)
1036                         mod_timer(&vblank->disable_timer,
1037                                   jiffies + ((drm_vblank_offdelay * HZ)/1000));
1038         }
1039 }
1040
1041 /**
1042  * drm_crtc_vblank_put - give up ownership of vblank events
1043  * @crtc: which counter to give up
1044  *
1045  * Release ownership of a given vblank counter, turning off interrupts
1046  * if possible. Disable interrupts after drm_vblank_offdelay milliseconds.
1047  */
1048 void drm_crtc_vblank_put(struct drm_crtc *crtc)
1049 {
1050         drm_vblank_put(crtc->dev, drm_crtc_index(crtc));
1051 }
1052 EXPORT_SYMBOL(drm_crtc_vblank_put);
1053
1054 /**
1055  * drm_wait_one_vblank - wait for one vblank
1056  * @dev: DRM device
1057  * @pipe: CRTC index
1058  *
1059  * This waits for one vblank to pass on @pipe, using the irq driver interfaces.
1060  * It is a failure to call this when the vblank irq for @pipe is disabled, e.g.
1061  * due to lack of driver support or because the crtc is off.
1062  *
1063  * This is the legacy version of drm_crtc_wait_one_vblank().
1064  */
1065 void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe)
1066 {
1067         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1068         int ret;
1069         u64 last;
1070
1071         if (WARN_ON(pipe >= dev->num_crtcs))
1072                 return;
1073
1074         ret = drm_vblank_get(dev, pipe);
1075         if (WARN(ret, "vblank not available on crtc %i, ret=%i\n", pipe, ret))
1076                 return;
1077
1078         last = drm_vblank_count(dev, pipe);
1079
1080         ret = wait_event_timeout(vblank->queue,
1081                                  last != drm_vblank_count(dev, pipe),
1082                                  msecs_to_jiffies(100));
1083
1084         WARN(ret == 0, "vblank wait timed out on crtc %i\n", pipe);
1085
1086         drm_vblank_put(dev, pipe);
1087 }
1088 EXPORT_SYMBOL(drm_wait_one_vblank);
1089
1090 /**
1091  * drm_crtc_wait_one_vblank - wait for one vblank
1092  * @crtc: DRM crtc
1093  *
1094  * This waits for one vblank to pass on @crtc, using the irq driver interfaces.
1095  * It is a failure to call this when the vblank irq for @crtc is disabled, e.g.
1096  * due to lack of driver support or because the crtc is off.
1097  */
1098 void drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
1099 {
1100         drm_wait_one_vblank(crtc->dev, drm_crtc_index(crtc));
1101 }
1102 EXPORT_SYMBOL(drm_crtc_wait_one_vblank);
1103
1104 /**
1105  * drm_crtc_vblank_off - disable vblank events on a CRTC
1106  * @crtc: CRTC in question
1107  *
1108  * Drivers can use this function to shut down the vblank interrupt handling when
1109  * disabling a crtc. This function ensures that the latest vblank frame count is
1110  * stored so that drm_vblank_on can restore it again.
1111  *
1112  * Drivers must use this function when the hardware vblank counter can get
1113  * reset, e.g. when suspending or disabling the @crtc in general.
1114  */
1115 void drm_crtc_vblank_off(struct drm_crtc *crtc)
1116 {
1117         struct drm_device *dev = crtc->dev;
1118         unsigned int pipe = drm_crtc_index(crtc);
1119         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1120         struct drm_pending_vblank_event *e, *t;
1121
1122         ktime_t now;
1123         unsigned long irqflags;
1124         u64 seq;
1125
1126         if (WARN_ON(pipe >= dev->num_crtcs))
1127                 return;
1128
1129         spin_lock_irqsave(&dev->event_lock, irqflags);
1130
1131         spin_lock(&dev->vbl_lock);
1132         DRM_DEBUG_VBL("crtc %d, vblank enabled %d, inmodeset %d\n",
1133                       pipe, vblank->enabled, vblank->inmodeset);
1134
1135         /* Avoid redundant vblank disables without previous
1136          * drm_crtc_vblank_on(). */
1137         if (drm_core_check_feature(dev, DRIVER_ATOMIC) || !vblank->inmodeset)
1138                 drm_vblank_disable_and_save(dev, pipe);
1139
1140         wake_up(&vblank->queue);
1141
1142         /*
1143          * Prevent subsequent drm_vblank_get() from re-enabling
1144          * the vblank interrupt by bumping the refcount.
1145          */
1146         if (!vblank->inmodeset) {
1147                 atomic_inc(&vblank->refcount);
1148                 vblank->inmodeset = 1;
1149         }
1150         spin_unlock(&dev->vbl_lock);
1151
1152         /* Send any queued vblank events, lest the natives grow disquiet */
1153         seq = drm_vblank_count_and_time(dev, pipe, &now);
1154
1155         list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
1156                 if (e->pipe != pipe)
1157                         continue;
1158                 DRM_DEBUG("Sending premature vblank event on disable: "
1159                           "wanted %llu, current %llu\n",
1160                           e->sequence, seq);
1161                 list_del(&e->base.link);
1162                 drm_vblank_put(dev, pipe);
1163                 send_vblank_event(dev, e, seq, now);
1164         }
1165         spin_unlock_irqrestore(&dev->event_lock, irqflags);
1166
1167         /* Will be reset by the modeset helpers when re-enabling the crtc by
1168          * calling drm_calc_timestamping_constants(). */
1169         vblank->hwmode.crtc_clock = 0;
1170 }
1171 EXPORT_SYMBOL(drm_crtc_vblank_off);
1172
1173 /**
1174  * drm_crtc_vblank_reset - reset vblank state to off on a CRTC
1175  * @crtc: CRTC in question
1176  *
1177  * Drivers can use this function to reset the vblank state to off at load time.
1178  * Drivers should use this together with the drm_crtc_vblank_off() and
1179  * drm_crtc_vblank_on() functions. The difference compared to
1180  * drm_crtc_vblank_off() is that this function doesn't save the vblank counter
1181  * and hence doesn't need to call any driver hooks.
1182  *
1183  * This is useful for recovering driver state e.g. on driver load, or on resume.
1184  */
1185 void drm_crtc_vblank_reset(struct drm_crtc *crtc)
1186 {
1187         struct drm_device *dev = crtc->dev;
1188         unsigned long irqflags;
1189         unsigned int pipe = drm_crtc_index(crtc);
1190         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1191
1192         spin_lock_irqsave(&dev->vbl_lock, irqflags);
1193         /*
1194          * Prevent subsequent drm_vblank_get() from enabling the vblank
1195          * interrupt by bumping the refcount.
1196          */
1197         if (!vblank->inmodeset) {
1198                 atomic_inc(&vblank->refcount);
1199                 vblank->inmodeset = 1;
1200         }
1201         spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
1202
1203         WARN_ON(!list_empty(&dev->vblank_event_list));
1204 }
1205 EXPORT_SYMBOL(drm_crtc_vblank_reset);
1206
1207 /**
1208  * drm_crtc_vblank_on - enable vblank events on a CRTC
1209  * @crtc: CRTC in question
1210  *
1211  * This functions restores the vblank interrupt state captured with
1212  * drm_crtc_vblank_off() again and is generally called when enabling @crtc. Note
1213  * that calls to drm_crtc_vblank_on() and drm_crtc_vblank_off() can be
1214  * unbalanced and so can also be unconditionally called in driver load code to
1215  * reflect the current hardware state of the crtc.
1216  */
1217 void drm_crtc_vblank_on(struct drm_crtc *crtc)
1218 {
1219         struct drm_device *dev = crtc->dev;
1220         unsigned int pipe = drm_crtc_index(crtc);
1221         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1222         unsigned long irqflags;
1223
1224         if (WARN_ON(pipe >= dev->num_crtcs))
1225                 return;
1226
1227         spin_lock_irqsave(&dev->vbl_lock, irqflags);
1228         DRM_DEBUG_VBL("crtc %d, vblank enabled %d, inmodeset %d\n",
1229                       pipe, vblank->enabled, vblank->inmodeset);
1230
1231         /* Drop our private "prevent drm_vblank_get" refcount */
1232         if (vblank->inmodeset) {
1233                 atomic_dec(&vblank->refcount);
1234                 vblank->inmodeset = 0;
1235         }
1236
1237         drm_reset_vblank_timestamp(dev, pipe);
1238
1239         /*
1240          * re-enable interrupts if there are users left, or the
1241          * user wishes vblank interrupts to be enabled all the time.
1242          */
1243         if (atomic_read(&vblank->refcount) != 0 || drm_vblank_offdelay == 0)
1244                 WARN_ON(drm_vblank_enable(dev, pipe));
1245         spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
1246 }
1247 EXPORT_SYMBOL(drm_crtc_vblank_on);
1248
1249 /**
1250  * drm_vblank_restore - estimate missed vblanks and update vblank count.
1251  * @dev: DRM device
1252  * @pipe: CRTC index
1253  *
1254  * Power manamement features can cause frame counter resets between vblank
1255  * disable and enable. Drivers can use this function in their
1256  * &drm_crtc_funcs.enable_vblank implementation to estimate missed vblanks since
1257  * the last &drm_crtc_funcs.disable_vblank using timestamps and update the
1258  * vblank counter.
1259  *
1260  * This function is the legacy version of drm_crtc_vblank_restore().
1261  */
1262 void drm_vblank_restore(struct drm_device *dev, unsigned int pipe)
1263 {
1264         ktime_t t_vblank;
1265         struct drm_vblank_crtc *vblank;
1266         int framedur_ns;
1267         u64 diff_ns;
1268         u32 cur_vblank, diff = 1;
1269         int count = DRM_TIMESTAMP_MAXRETRIES;
1270
1271         if (WARN_ON(pipe >= dev->num_crtcs))
1272                 return;
1273
1274         assert_spin_locked(&dev->vbl_lock);
1275         assert_spin_locked(&dev->vblank_time_lock);
1276
1277         vblank = &dev->vblank[pipe];
1278         WARN_ONCE((drm_debug & DRM_UT_VBL) && !vblank->framedur_ns,
1279                   "Cannot compute missed vblanks without frame duration\n");
1280         framedur_ns = vblank->framedur_ns;
1281
1282         do {
1283                 cur_vblank = __get_vblank_counter(dev, pipe);
1284                 drm_get_last_vbltimestamp(dev, pipe, &t_vblank, false);
1285         } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0);
1286
1287         diff_ns = ktime_to_ns(ktime_sub(t_vblank, vblank->time));
1288         if (framedur_ns)
1289                 diff = DIV_ROUND_CLOSEST_ULL(diff_ns, framedur_ns);
1290
1291
1292         DRM_DEBUG_VBL("missed %d vblanks in %lld ns, frame duration=%d ns, hw_diff=%d\n",
1293                       diff, diff_ns, framedur_ns, cur_vblank - vblank->last);
1294         store_vblank(dev, pipe, diff, t_vblank, cur_vblank);
1295 }
1296 EXPORT_SYMBOL(drm_vblank_restore);
1297
1298 /**
1299  * drm_crtc_vblank_restore - estimate missed vblanks and update vblank count.
1300  * @crtc: CRTC in question
1301  *
1302  * Power manamement features can cause frame counter resets between vblank
1303  * disable and enable. Drivers can use this function in their
1304  * &drm_crtc_funcs.enable_vblank implementation to estimate missed vblanks since
1305  * the last &drm_crtc_funcs.disable_vblank using timestamps and update the
1306  * vblank counter.
1307  */
1308 void drm_crtc_vblank_restore(struct drm_crtc *crtc)
1309 {
1310         drm_vblank_restore(crtc->dev, drm_crtc_index(crtc));
1311 }
1312 EXPORT_SYMBOL(drm_crtc_vblank_restore);
1313
1314 static void drm_legacy_vblank_pre_modeset(struct drm_device *dev,
1315                                           unsigned int pipe)
1316 {
1317         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1318
1319         /* vblank is not initialized (IRQ not installed ?), or has been freed */
1320         if (!dev->num_crtcs)
1321                 return;
1322
1323         if (WARN_ON(pipe >= dev->num_crtcs))
1324                 return;
1325
1326         /*
1327          * To avoid all the problems that might happen if interrupts
1328          * were enabled/disabled around or between these calls, we just
1329          * have the kernel take a reference on the CRTC (just once though
1330          * to avoid corrupting the count if multiple, mismatch calls occur),
1331          * so that interrupts remain enabled in the interim.
1332          */
1333         if (!vblank->inmodeset) {
1334                 vblank->inmodeset = 0x1;
1335                 if (drm_vblank_get(dev, pipe) == 0)
1336                         vblank->inmodeset |= 0x2;
1337         }
1338 }
1339
1340 static void drm_legacy_vblank_post_modeset(struct drm_device *dev,
1341                                            unsigned int pipe)
1342 {
1343         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1344         unsigned long irqflags;
1345
1346         /* vblank is not initialized (IRQ not installed ?), or has been freed */
1347         if (!dev->num_crtcs)
1348                 return;
1349
1350         if (WARN_ON(pipe >= dev->num_crtcs))
1351                 return;
1352
1353         if (vblank->inmodeset) {
1354                 spin_lock_irqsave(&dev->vbl_lock, irqflags);
1355                 drm_reset_vblank_timestamp(dev, pipe);
1356                 spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
1357
1358                 if (vblank->inmodeset & 0x2)
1359                         drm_vblank_put(dev, pipe);
1360
1361                 vblank->inmodeset = 0;
1362         }
1363 }
1364
1365 int drm_legacy_modeset_ctl_ioctl(struct drm_device *dev, void *data,
1366                                  struct drm_file *file_priv)
1367 {
1368         struct drm_modeset_ctl *modeset = data;
1369         unsigned int pipe;
1370
1371         /* If drm_vblank_init() hasn't been called yet, just no-op */
1372         if (!dev->num_crtcs)
1373                 return 0;
1374
1375         /* KMS drivers handle this internally */
1376         if (!drm_core_check_feature(dev, DRIVER_LEGACY))
1377                 return 0;
1378
1379         pipe = modeset->crtc;
1380         if (pipe >= dev->num_crtcs)
1381                 return -EINVAL;
1382
1383         switch (modeset->cmd) {
1384         case _DRM_PRE_MODESET:
1385                 drm_legacy_vblank_pre_modeset(dev, pipe);
1386                 break;
1387         case _DRM_POST_MODESET:
1388                 drm_legacy_vblank_post_modeset(dev, pipe);
1389                 break;
1390         default:
1391                 return -EINVAL;
1392         }
1393
1394         return 0;
1395 }
1396
1397 static inline bool vblank_passed(u64 seq, u64 ref)
1398 {
1399         return (seq - ref) <= (1 << 23);
1400 }
1401
1402 static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
1403                                   u64 req_seq,
1404                                   union drm_wait_vblank *vblwait,
1405                                   struct drm_file *file_priv)
1406 {
1407         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1408         struct drm_pending_vblank_event *e;
1409         ktime_t now;
1410         unsigned long flags;
1411         u64 seq;
1412         int ret;
1413
1414         e = kzalloc(sizeof(*e), GFP_KERNEL);
1415         if (e == NULL) {
1416                 ret = -ENOMEM;
1417                 goto err_put;
1418         }
1419
1420         e->pipe = pipe;
1421         e->event.base.type = DRM_EVENT_VBLANK;
1422         e->event.base.length = sizeof(e->event.vbl);
1423         e->event.vbl.user_data = vblwait->request.signal;
1424         e->event.vbl.crtc_id = 0;
1425         if (drm_core_check_feature(dev, DRIVER_MODESET)) {
1426                 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
1427                 if (crtc)
1428                         e->event.vbl.crtc_id = crtc->base.id;
1429         }
1430
1431         spin_lock_irqsave(&dev->event_lock, flags);
1432
1433         /*
1434          * drm_crtc_vblank_off() might have been called after we called
1435          * drm_vblank_get(). drm_crtc_vblank_off() holds event_lock around the
1436          * vblank disable, so no need for further locking.  The reference from
1437          * drm_vblank_get() protects against vblank disable from another source.
1438          */
1439         if (!READ_ONCE(vblank->enabled)) {
1440                 ret = -EINVAL;
1441                 goto err_unlock;
1442         }
1443
1444         ret = drm_event_reserve_init_locked(dev, file_priv, &e->base,
1445                                             &e->event.base);
1446
1447         if (ret)
1448                 goto err_unlock;
1449
1450         seq = drm_vblank_count_and_time(dev, pipe, &now);
1451
1452         DRM_DEBUG("event on vblank count %llu, current %llu, crtc %u\n",
1453                   req_seq, seq, pipe);
1454
1455         trace_drm_vblank_event_queued(file_priv, pipe, req_seq);
1456
1457         e->sequence = req_seq;
1458         if (vblank_passed(seq, req_seq)) {
1459                 drm_vblank_put(dev, pipe);
1460                 send_vblank_event(dev, e, seq, now);
1461                 vblwait->reply.sequence = seq;
1462         } else {
1463                 /* drm_handle_vblank_events will call drm_vblank_put */
1464                 list_add_tail(&e->base.link, &dev->vblank_event_list);
1465                 vblwait->reply.sequence = req_seq;
1466         }
1467
1468         spin_unlock_irqrestore(&dev->event_lock, flags);
1469
1470         return 0;
1471
1472 err_unlock:
1473         spin_unlock_irqrestore(&dev->event_lock, flags);
1474         kfree(e);
1475 err_put:
1476         drm_vblank_put(dev, pipe);
1477         return ret;
1478 }
1479
1480 static bool drm_wait_vblank_is_query(union drm_wait_vblank *vblwait)
1481 {
1482         if (vblwait->request.sequence)
1483                 return false;
1484
1485         return _DRM_VBLANK_RELATIVE ==
1486                 (vblwait->request.type & (_DRM_VBLANK_TYPES_MASK |
1487                                           _DRM_VBLANK_EVENT |
1488                                           _DRM_VBLANK_NEXTONMISS));
1489 }
1490
1491 /*
1492  * Widen a 32-bit param to 64-bits.
1493  *
1494  * \param narrow 32-bit value (missing upper 32 bits)
1495  * \param near 64-bit value that should be 'close' to near
1496  *
1497  * This function returns a 64-bit value using the lower 32-bits from
1498  * 'narrow' and constructing the upper 32-bits so that the result is
1499  * as close as possible to 'near'.
1500  */
1501
1502 static u64 widen_32_to_64(u32 narrow, u64 near)
1503 {
1504         return near + (s32) (narrow - near);
1505 }
1506
1507 static void drm_wait_vblank_reply(struct drm_device *dev, unsigned int pipe,
1508                                   struct drm_wait_vblank_reply *reply)
1509 {
1510         ktime_t now;
1511         struct timespec64 ts;
1512
1513         /*
1514          * drm_wait_vblank_reply is a UAPI structure that uses 'long'
1515          * to store the seconds. This is safe as we always use monotonic
1516          * timestamps since linux-4.15.
1517          */
1518         reply->sequence = drm_vblank_count_and_time(dev, pipe, &now);
1519         ts = ktime_to_timespec64(now);
1520         reply->tval_sec = (u32)ts.tv_sec;
1521         reply->tval_usec = ts.tv_nsec / 1000;
1522 }
1523
1524 int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
1525                           struct drm_file *file_priv)
1526 {
1527         struct drm_crtc *crtc;
1528         struct drm_vblank_crtc *vblank;
1529         union drm_wait_vblank *vblwait = data;
1530         int ret;
1531         u64 req_seq, seq;
1532         unsigned int pipe_index;
1533         unsigned int flags, pipe, high_pipe;
1534
1535         if (!dev->irq_enabled)
1536                 return -EINVAL;
1537
1538         if (vblwait->request.type & _DRM_VBLANK_SIGNAL)
1539                 return -EINVAL;
1540
1541         if (vblwait->request.type &
1542             ~(_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK |
1543               _DRM_VBLANK_HIGH_CRTC_MASK)) {
1544                 DRM_ERROR("Unsupported type value 0x%x, supported mask 0x%x\n",
1545                           vblwait->request.type,
1546                           (_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK |
1547                            _DRM_VBLANK_HIGH_CRTC_MASK));
1548                 return -EINVAL;
1549         }
1550
1551         flags = vblwait->request.type & _DRM_VBLANK_FLAGS_MASK;
1552         high_pipe = (vblwait->request.type & _DRM_VBLANK_HIGH_CRTC_MASK);
1553         if (high_pipe)
1554                 pipe_index = high_pipe >> _DRM_VBLANK_HIGH_CRTC_SHIFT;
1555         else
1556                 pipe_index = flags & _DRM_VBLANK_SECONDARY ? 1 : 0;
1557
1558         /* Convert lease-relative crtc index into global crtc index */
1559         if (drm_core_check_feature(dev, DRIVER_MODESET)) {
1560                 pipe = 0;
1561                 drm_for_each_crtc(crtc, dev) {
1562                         if (drm_lease_held(file_priv, crtc->base.id)) {
1563                                 if (pipe_index == 0)
1564                                         break;
1565                                 pipe_index--;
1566                         }
1567                         pipe++;
1568                 }
1569         } else {
1570                 pipe = pipe_index;
1571         }
1572
1573         if (pipe >= dev->num_crtcs)
1574                 return -EINVAL;
1575
1576         vblank = &dev->vblank[pipe];
1577
1578         /* If the counter is currently enabled and accurate, short-circuit
1579          * queries to return the cached timestamp of the last vblank.
1580          */
1581         if (dev->vblank_disable_immediate &&
1582             drm_wait_vblank_is_query(vblwait) &&
1583             READ_ONCE(vblank->enabled)) {
1584                 drm_wait_vblank_reply(dev, pipe, &vblwait->reply);
1585                 return 0;
1586         }
1587
1588         ret = drm_vblank_get(dev, pipe);
1589         if (ret) {
1590                 DRM_DEBUG("crtc %d failed to acquire vblank counter, %d\n", pipe, ret);
1591                 return ret;
1592         }
1593         seq = drm_vblank_count(dev, pipe);
1594
1595         switch (vblwait->request.type & _DRM_VBLANK_TYPES_MASK) {
1596         case _DRM_VBLANK_RELATIVE:
1597                 req_seq = seq + vblwait->request.sequence;
1598                 vblwait->request.sequence = req_seq;
1599                 vblwait->request.type &= ~_DRM_VBLANK_RELATIVE;
1600                 break;
1601         case _DRM_VBLANK_ABSOLUTE:
1602                 req_seq = widen_32_to_64(vblwait->request.sequence, seq);
1603                 break;
1604         default:
1605                 ret = -EINVAL;
1606                 goto done;
1607         }
1608
1609         if ((flags & _DRM_VBLANK_NEXTONMISS) &&
1610             vblank_passed(seq, req_seq)) {
1611                 req_seq = seq + 1;
1612                 vblwait->request.type &= ~_DRM_VBLANK_NEXTONMISS;
1613                 vblwait->request.sequence = req_seq;
1614         }
1615
1616         if (flags & _DRM_VBLANK_EVENT) {
1617                 /* must hold on to the vblank ref until the event fires
1618                  * drm_vblank_put will be called asynchronously
1619                  */
1620                 return drm_queue_vblank_event(dev, pipe, req_seq, vblwait, file_priv);
1621         }
1622
1623         if (req_seq != seq) {
1624                 DRM_DEBUG("waiting on vblank count %llu, crtc %u\n",
1625                           req_seq, pipe);
1626                 DRM_WAIT_ON(ret, vblank->queue, 3 * HZ,
1627                             vblank_passed(drm_vblank_count(dev, pipe),
1628                                           req_seq) ||
1629                             !READ_ONCE(vblank->enabled));
1630         }
1631
1632         if (ret != -EINTR) {
1633                 drm_wait_vblank_reply(dev, pipe, &vblwait->reply);
1634
1635                 DRM_DEBUG("crtc %d returning %u to client\n",
1636                           pipe, vblwait->reply.sequence);
1637         } else {
1638                 DRM_DEBUG("crtc %d vblank wait interrupted by signal\n", pipe);
1639         }
1640
1641 done:
1642         drm_vblank_put(dev, pipe);
1643         return ret;
1644 }
1645
1646 static void drm_handle_vblank_events(struct drm_device *dev, unsigned int pipe)
1647 {
1648         struct drm_pending_vblank_event *e, *t;
1649         ktime_t now;
1650         u64 seq;
1651
1652         assert_spin_locked(&dev->event_lock);
1653
1654         seq = drm_vblank_count_and_time(dev, pipe, &now);
1655
1656         list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
1657                 if (e->pipe != pipe)
1658                         continue;
1659                 if (!vblank_passed(seq, e->sequence))
1660                         continue;
1661
1662                 DRM_DEBUG("vblank event on %llu, current %llu\n",
1663                           e->sequence, seq);
1664
1665                 list_del(&e->base.link);
1666                 drm_vblank_put(dev, pipe);
1667                 send_vblank_event(dev, e, seq, now);
1668         }
1669
1670         trace_drm_vblank_event(pipe, seq);
1671 }
1672
1673 /**
1674  * drm_handle_vblank - handle a vblank event
1675  * @dev: DRM device
1676  * @pipe: index of CRTC where this event occurred
1677  *
1678  * Drivers should call this routine in their vblank interrupt handlers to
1679  * update the vblank counter and send any signals that may be pending.
1680  *
1681  * This is the legacy version of drm_crtc_handle_vblank().
1682  */
1683 bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
1684 {
1685         struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1686         unsigned long irqflags;
1687         bool disable_irq;
1688
1689         if (WARN_ON_ONCE(!dev->num_crtcs))
1690                 return false;
1691
1692         if (WARN_ON(pipe >= dev->num_crtcs))
1693                 return false;
1694
1695         spin_lock_irqsave(&dev->event_lock, irqflags);
1696
1697         /* Need timestamp lock to prevent concurrent execution with
1698          * vblank enable/disable, as this would cause inconsistent
1699          * or corrupted timestamps and vblank counts.
1700          */
1701         spin_lock(&dev->vblank_time_lock);
1702
1703         /* Vblank irq handling disabled. Nothing to do. */
1704         if (!vblank->enabled) {
1705                 spin_unlock(&dev->vblank_time_lock);
1706                 spin_unlock_irqrestore(&dev->event_lock, irqflags);
1707                 return false;
1708         }
1709
1710         drm_update_vblank_count(dev, pipe, true);
1711
1712         spin_unlock(&dev->vblank_time_lock);
1713
1714         wake_up(&vblank->queue);
1715
1716         /* With instant-off, we defer disabling the interrupt until after
1717          * we finish processing the following vblank after all events have
1718          * been signaled. The disable has to be last (after
1719          * drm_handle_vblank_events) so that the timestamp is always accurate.
1720          */
1721         disable_irq = (dev->vblank_disable_immediate &&
1722                        drm_vblank_offdelay > 0 &&
1723                        !atomic_read(&vblank->refcount));
1724
1725         drm_handle_vblank_events(dev, pipe);
1726
1727         spin_unlock_irqrestore(&dev->event_lock, irqflags);
1728
1729         if (disable_irq)
1730                 vblank_disable_fn(&vblank->disable_timer);
1731
1732         return true;
1733 }
1734 EXPORT_SYMBOL(drm_handle_vblank);
1735
1736 /**
1737  * drm_crtc_handle_vblank - handle a vblank event
1738  * @crtc: where this event occurred
1739  *
1740  * Drivers should call this routine in their vblank interrupt handlers to
1741  * update the vblank counter and send any signals that may be pending.
1742  *
1743  * This is the native KMS version of drm_handle_vblank().
1744  *
1745  * Returns:
1746  * True if the event was successfully handled, false on failure.
1747  */
1748 bool drm_crtc_handle_vblank(struct drm_crtc *crtc)
1749 {
1750         return drm_handle_vblank(crtc->dev, drm_crtc_index(crtc));
1751 }
1752 EXPORT_SYMBOL(drm_crtc_handle_vblank);
1753
1754 /*
1755  * Get crtc VBLANK count.
1756  *
1757  * \param dev DRM device
1758  * \param data user arguement, pointing to a drm_crtc_get_sequence structure.
1759  * \param file_priv drm file private for the user's open file descriptor
1760  */
1761
1762 int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data,
1763                                 struct drm_file *file_priv)
1764 {
1765         struct drm_crtc *crtc;
1766         struct drm_vblank_crtc *vblank;
1767         int pipe;
1768         struct drm_crtc_get_sequence *get_seq = data;
1769         ktime_t now;
1770         bool vblank_enabled;
1771         int ret;
1772
1773         if (!drm_core_check_feature(dev, DRIVER_MODESET))
1774                 return -EINVAL;
1775
1776         if (!dev->irq_enabled)
1777                 return -EINVAL;
1778
1779         crtc = drm_crtc_find(dev, file_priv, get_seq->crtc_id);
1780         if (!crtc)
1781                 return -ENOENT;
1782
1783         pipe = drm_crtc_index(crtc);
1784
1785         vblank = &dev->vblank[pipe];
1786         vblank_enabled = dev->vblank_disable_immediate && READ_ONCE(vblank->enabled);
1787
1788         if (!vblank_enabled) {
1789                 ret = drm_crtc_vblank_get(crtc);
1790                 if (ret) {
1791                         DRM_DEBUG("crtc %d failed to acquire vblank counter, %d\n", pipe, ret);
1792                         return ret;
1793                 }
1794         }
1795         drm_modeset_lock(&crtc->mutex, NULL);
1796         if (crtc->state)
1797                 get_seq->active = crtc->state->enable;
1798         else
1799                 get_seq->active = crtc->enabled;
1800         drm_modeset_unlock(&crtc->mutex);
1801         get_seq->sequence = drm_vblank_count_and_time(dev, pipe, &now);
1802         get_seq->sequence_ns = ktime_to_ns(now);
1803         if (!vblank_enabled)
1804                 drm_crtc_vblank_put(crtc);
1805         return 0;
1806 }
1807
1808 /*
1809  * Queue a event for VBLANK sequence
1810  *
1811  * \param dev DRM device
1812  * \param data user arguement, pointing to a drm_crtc_queue_sequence structure.
1813  * \param file_priv drm file private for the user's open file descriptor
1814  */
1815
1816 int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
1817                                   struct drm_file *file_priv)
1818 {
1819         struct drm_crtc *crtc;
1820         struct drm_vblank_crtc *vblank;
1821         int pipe;
1822         struct drm_crtc_queue_sequence *queue_seq = data;
1823         ktime_t now;
1824         struct drm_pending_vblank_event *e;
1825         u32 flags;
1826         u64 seq;
1827         u64 req_seq;
1828         int ret;
1829         unsigned long spin_flags;
1830
1831         if (!drm_core_check_feature(dev, DRIVER_MODESET))
1832                 return -EINVAL;
1833
1834         if (!dev->irq_enabled)
1835                 return -EINVAL;
1836
1837         crtc = drm_crtc_find(dev, file_priv, queue_seq->crtc_id);
1838         if (!crtc)
1839                 return -ENOENT;
1840
1841         flags = queue_seq->flags;
1842         /* Check valid flag bits */
1843         if (flags & ~(DRM_CRTC_SEQUENCE_RELATIVE|
1844                       DRM_CRTC_SEQUENCE_NEXT_ON_MISS))
1845                 return -EINVAL;
1846
1847         pipe = drm_crtc_index(crtc);
1848
1849         vblank = &dev->vblank[pipe];
1850
1851         e = kzalloc(sizeof(*e), GFP_KERNEL);
1852         if (e == NULL)
1853                 return -ENOMEM;
1854
1855         ret = drm_crtc_vblank_get(crtc);
1856         if (ret) {
1857                 DRM_DEBUG("crtc %d failed to acquire vblank counter, %d\n", pipe, ret);
1858                 goto err_free;
1859         }
1860
1861         seq = drm_vblank_count_and_time(dev, pipe, &now);
1862         req_seq = queue_seq->sequence;
1863
1864         if (flags & DRM_CRTC_SEQUENCE_RELATIVE)
1865                 req_seq += seq;
1866
1867         if ((flags & DRM_CRTC_SEQUENCE_NEXT_ON_MISS) && vblank_passed(seq, req_seq))
1868                 req_seq = seq + 1;
1869
1870         e->pipe = pipe;
1871         e->event.base.type = DRM_EVENT_CRTC_SEQUENCE;
1872         e->event.base.length = sizeof(e->event.seq);
1873         e->event.seq.user_data = queue_seq->user_data;
1874
1875         spin_lock_irqsave(&dev->event_lock, spin_flags);
1876
1877         /*
1878          * drm_crtc_vblank_off() might have been called after we called
1879          * drm_crtc_vblank_get(). drm_crtc_vblank_off() holds event_lock around the
1880          * vblank disable, so no need for further locking.  The reference from
1881          * drm_crtc_vblank_get() protects against vblank disable from another source.
1882          */
1883         if (!READ_ONCE(vblank->enabled)) {
1884                 ret = -EINVAL;
1885                 goto err_unlock;
1886         }
1887
1888         ret = drm_event_reserve_init_locked(dev, file_priv, &e->base,
1889                                             &e->event.base);
1890
1891         if (ret)
1892                 goto err_unlock;
1893
1894         e->sequence = req_seq;
1895
1896         if (vblank_passed(seq, req_seq)) {
1897                 drm_crtc_vblank_put(crtc);
1898                 send_vblank_event(dev, e, seq, now);
1899                 queue_seq->sequence = seq;
1900         } else {
1901                 /* drm_handle_vblank_events will call drm_vblank_put */
1902                 list_add_tail(&e->base.link, &dev->vblank_event_list);
1903                 queue_seq->sequence = req_seq;
1904         }
1905
1906         spin_unlock_irqrestore(&dev->event_lock, spin_flags);
1907         return 0;
1908
1909 err_unlock:
1910         spin_unlock_irqrestore(&dev->event_lock, spin_flags);
1911         drm_crtc_vblank_put(crtc);
1912 err_free:
1913         kfree(e);
1914         return ret;
1915 }