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