xref: /openbmc/linux/drivers/gpu/drm/drm_irq.c (revision e2f1cf25)
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 
8 /*
9  * Created: Fri Mar 19 14:30:16 1999 by faith@valinux.com
10  *
11  * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas.
12  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
13  * All Rights Reserved.
14  *
15  * Permission is hereby granted, free of charge, to any person obtaining a
16  * copy of this software and associated documentation files (the "Software"),
17  * to deal in the Software without restriction, including without limitation
18  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
19  * and/or sell copies of the Software, and to permit persons to whom the
20  * Software is furnished to do so, subject to the following conditions:
21  *
22  * The above copyright notice and this permission notice (including the next
23  * paragraph) shall be included in all copies or substantial portions of the
24  * Software.
25  *
26  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
29  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
30  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
31  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
32  * OTHER DEALINGS IN THE SOFTWARE.
33  */
34 
35 #include <drm/drmP.h>
36 #include "drm_trace.h"
37 #include "drm_internal.h"
38 
39 #include <linux/interrupt.h>	/* For task queue support */
40 #include <linux/slab.h>
41 
42 #include <linux/vgaarb.h>
43 #include <linux/export.h>
44 
45 /* Access macro for slots in vblank timestamp ringbuffer. */
46 #define vblanktimestamp(dev, pipe, count) \
47 	((dev)->vblank[pipe].time[(count) % DRM_VBLANKTIME_RBSIZE])
48 
49 /* Retry timestamp calculation up to 3 times to satisfy
50  * drm_timestamp_precision before giving up.
51  */
52 #define DRM_TIMESTAMP_MAXRETRIES 3
53 
54 /* Threshold in nanoseconds for detection of redundant
55  * vblank irq in drm_handle_vblank(). 1 msec should be ok.
56  */
57 #define DRM_REDUNDANT_VBLIRQ_THRESH_NS 1000000
58 
59 static bool
60 drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe,
61 			  struct timeval *tvblank, unsigned flags);
62 
63 static unsigned int drm_timestamp_precision = 20;  /* Default to 20 usecs. */
64 
65 /*
66  * Default to use monotonic timestamps for wait-for-vblank and page-flip
67  * complete events.
68  */
69 unsigned int drm_timestamp_monotonic = 1;
70 
71 static int drm_vblank_offdelay = 5000;    /* Default to 5000 msecs. */
72 
73 module_param_named(vblankoffdelay, drm_vblank_offdelay, int, 0600);
74 module_param_named(timestamp_precision_usec, drm_timestamp_precision, int, 0600);
75 module_param_named(timestamp_monotonic, drm_timestamp_monotonic, int, 0600);
76 
77 static void store_vblank(struct drm_device *dev, int crtc,
78 			 u32 vblank_count_inc,
79 			 struct timeval *t_vblank)
80 {
81 	struct drm_vblank_crtc *vblank = &dev->vblank[crtc];
82 	u32 tslot;
83 
84 	assert_spin_locked(&dev->vblank_time_lock);
85 
86 	if (t_vblank) {
87 		/* All writers hold the spinlock, but readers are serialized by
88 		 * the latching of vblank->count below.
89 		 */
90 		tslot = vblank->count + vblank_count_inc;
91 		vblanktimestamp(dev, crtc, tslot) = *t_vblank;
92 	}
93 
94 	/*
95 	 * vblank timestamp updates are protected on the write side with
96 	 * vblank_time_lock, but on the read side done locklessly using a
97 	 * sequence-lock on the vblank counter. Ensure correct ordering using
98 	 * memory barrriers. We need the barrier both before and also after the
99 	 * counter update to synchronize with the next timestamp write.
100 	 * The read-side barriers for this are in drm_vblank_count_and_time.
101 	 */
102 	smp_wmb();
103 	vblank->count += vblank_count_inc;
104 	smp_wmb();
105 }
106 
107 /**
108  * drm_update_vblank_count - update the master vblank counter
109  * @dev: DRM device
110  * @pipe: counter to update
111  *
112  * Call back into the driver to update the appropriate vblank counter
113  * (specified by @crtc).  Deal with wraparound, if it occurred, and
114  * update the last read value so we can deal with wraparound on the next
115  * call if necessary.
116  *
117  * Only necessary when going from off->on, to account for frames we
118  * didn't get an interrupt for.
119  *
120  * Note: caller must hold dev->vbl_lock since this reads & writes
121  * device vblank fields.
122  */
123 static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe)
124 {
125 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
126 	u32 cur_vblank, diff;
127 	bool rc;
128 	struct timeval t_vblank;
129 
130 	/*
131 	 * Interrupts were disabled prior to this call, so deal with counter
132 	 * wrap if needed.
133 	 * NOTE!  It's possible we lost a full dev->max_vblank_count + 1 events
134 	 * here if the register is small or we had vblank interrupts off for
135 	 * a long time.
136 	 *
137 	 * We repeat the hardware vblank counter & timestamp query until
138 	 * we get consistent results. This to prevent races between gpu
139 	 * updating its hardware counter while we are retrieving the
140 	 * corresponding vblank timestamp.
141 	 */
142 	do {
143 		cur_vblank = dev->driver->get_vblank_counter(dev, pipe);
144 		rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, 0);
145 	} while (cur_vblank != dev->driver->get_vblank_counter(dev, pipe));
146 
147 	/* Deal with counter wrap */
148 	diff = cur_vblank - vblank->last;
149 	if (cur_vblank < vblank->last) {
150 		diff += dev->max_vblank_count + 1;
151 
152 		DRM_DEBUG("last_vblank[%u]=0x%x, cur_vblank=0x%x => diff=0x%x\n",
153 			  pipe, vblank->last, cur_vblank, diff);
154 	}
155 
156 	DRM_DEBUG("updating vblank count on crtc %u, missed %d\n",
157 		  pipe, diff);
158 
159 	if (diff == 0)
160 		return;
161 
162 	/*
163 	 * Only reinitialize corresponding vblank timestamp if high-precision query
164 	 * available and didn't fail. Otherwise reinitialize delayed at next vblank
165 	 * interrupt and assign 0 for now, to mark the vblanktimestamp as invalid.
166 	 */
167 	if (!rc)
168 		t_vblank = (struct timeval) {0, 0};
169 
170 	store_vblank(dev, pipe, diff, &t_vblank);
171 }
172 
173 /*
174  * Disable vblank irq's on crtc, make sure that last vblank count
175  * of hardware and corresponding consistent software vblank counter
176  * are preserved, even if there are any spurious vblank irq's after
177  * disable.
178  */
179 static void vblank_disable_and_save(struct drm_device *dev, unsigned int pipe)
180 {
181 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
182 	unsigned long irqflags;
183 	u32 vblcount;
184 	s64 diff_ns;
185 	bool vblrc;
186 	struct timeval tvblank;
187 	int count = DRM_TIMESTAMP_MAXRETRIES;
188 
189 	/* Prevent vblank irq processing while disabling vblank irqs,
190 	 * so no updates of timestamps or count can happen after we've
191 	 * disabled. Needed to prevent races in case of delayed irq's.
192 	 */
193 	spin_lock_irqsave(&dev->vblank_time_lock, irqflags);
194 
195 	/*
196 	 * If the vblank interrupt was already disabled update the count
197 	 * and timestamp to maintain the appearance that the counter
198 	 * has been ticking all along until this time. This makes the
199 	 * count account for the entire time between drm_vblank_on() and
200 	 * drm_vblank_off().
201 	 *
202 	 * But only do this if precise vblank timestamps are available.
203 	 * Otherwise we might read a totally bogus timestamp since drivers
204 	 * lacking precise timestamp support rely upon sampling the system clock
205 	 * at vblank interrupt time. Which obviously won't work out well if the
206 	 * vblank interrupt is disabled.
207 	 */
208 	if (!vblank->enabled &&
209 	    drm_get_last_vbltimestamp(dev, pipe, &tvblank, 0)) {
210 		drm_update_vblank_count(dev, pipe);
211 		spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags);
212 		return;
213 	}
214 
215 	/*
216 	 * Only disable vblank interrupts if they're enabled. This avoids
217 	 * calling the ->disable_vblank() operation in atomic context with the
218 	 * hardware potentially runtime suspended.
219 	 */
220 	if (vblank->enabled) {
221 		dev->driver->disable_vblank(dev, pipe);
222 		vblank->enabled = false;
223 	}
224 
225 	/* No further vblank irq's will be processed after
226 	 * this point. Get current hardware vblank count and
227 	 * vblank timestamp, repeat until they are consistent.
228 	 *
229 	 * FIXME: There is still a race condition here and in
230 	 * drm_update_vblank_count() which can cause off-by-one
231 	 * reinitialization of software vblank counter. If gpu
232 	 * vblank counter doesn't increment exactly at the leading
233 	 * edge of a vblank interval, then we can lose 1 count if
234 	 * we happen to execute between start of vblank and the
235 	 * delayed gpu counter increment.
236 	 */
237 	do {
238 		vblank->last = dev->driver->get_vblank_counter(dev, pipe);
239 		vblrc = drm_get_last_vbltimestamp(dev, pipe, &tvblank, 0);
240 	} while (vblank->last != dev->driver->get_vblank_counter(dev, pipe) && (--count) && vblrc);
241 
242 	if (!count)
243 		vblrc = 0;
244 
245 	/* Compute time difference to stored timestamp of last vblank
246 	 * as updated by last invocation of drm_handle_vblank() in vblank irq.
247 	 */
248 	vblcount = vblank->count;
249 	diff_ns = timeval_to_ns(&tvblank) -
250 		  timeval_to_ns(&vblanktimestamp(dev, pipe, vblcount));
251 
252 	/* If there is at least 1 msec difference between the last stored
253 	 * timestamp and tvblank, then we are currently executing our
254 	 * disable inside a new vblank interval, the tvblank timestamp
255 	 * corresponds to this new vblank interval and the irq handler
256 	 * for this vblank didn't run yet and won't run due to our disable.
257 	 * Therefore we need to do the job of drm_handle_vblank() and
258 	 * increment the vblank counter by one to account for this vblank.
259 	 *
260 	 * Skip this step if there isn't any high precision timestamp
261 	 * available. In that case we can't account for this and just
262 	 * hope for the best.
263 	 */
264 	if (vblrc && (abs64(diff_ns) > 1000000))
265 		store_vblank(dev, pipe, 1, &tvblank);
266 
267 	spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags);
268 }
269 
270 static void vblank_disable_fn(unsigned long arg)
271 {
272 	struct drm_vblank_crtc *vblank = (void *)arg;
273 	struct drm_device *dev = vblank->dev;
274 	unsigned int pipe = vblank->pipe;
275 	unsigned long irqflags;
276 
277 	if (!dev->vblank_disable_allowed)
278 		return;
279 
280 	spin_lock_irqsave(&dev->vbl_lock, irqflags);
281 	if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) {
282 		DRM_DEBUG("disabling vblank on crtc %u\n", pipe);
283 		vblank_disable_and_save(dev, pipe);
284 	}
285 	spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
286 }
287 
288 /**
289  * drm_vblank_cleanup - cleanup vblank support
290  * @dev: DRM device
291  *
292  * This function cleans up any resources allocated in drm_vblank_init.
293  */
294 void drm_vblank_cleanup(struct drm_device *dev)
295 {
296 	unsigned int pipe;
297 
298 	/* Bail if the driver didn't call drm_vblank_init() */
299 	if (dev->num_crtcs == 0)
300 		return;
301 
302 	for (pipe = 0; pipe < dev->num_crtcs; pipe++) {
303 		struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
304 
305 		WARN_ON(vblank->enabled &&
306 			drm_core_check_feature(dev, DRIVER_MODESET));
307 
308 		del_timer_sync(&vblank->disable_timer);
309 	}
310 
311 	kfree(dev->vblank);
312 
313 	dev->num_crtcs = 0;
314 }
315 EXPORT_SYMBOL(drm_vblank_cleanup);
316 
317 /**
318  * drm_vblank_init - initialize vblank support
319  * @dev: DRM device
320  * @num_crtcs: number of CRTCs supported by @dev
321  *
322  * This function initializes vblank support for @num_crtcs display pipelines.
323  *
324  * Returns:
325  * Zero on success or a negative error code on failure.
326  */
327 int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs)
328 {
329 	int ret = -ENOMEM;
330 	unsigned int i;
331 
332 	spin_lock_init(&dev->vbl_lock);
333 	spin_lock_init(&dev->vblank_time_lock);
334 
335 	dev->num_crtcs = num_crtcs;
336 
337 	dev->vblank = kcalloc(num_crtcs, sizeof(*dev->vblank), GFP_KERNEL);
338 	if (!dev->vblank)
339 		goto err;
340 
341 	for (i = 0; i < num_crtcs; i++) {
342 		struct drm_vblank_crtc *vblank = &dev->vblank[i];
343 
344 		vblank->dev = dev;
345 		vblank->pipe = i;
346 		init_waitqueue_head(&vblank->queue);
347 		setup_timer(&vblank->disable_timer, vblank_disable_fn,
348 			    (unsigned long)vblank);
349 	}
350 
351 	DRM_INFO("Supports vblank timestamp caching Rev 2 (21.10.2013).\n");
352 
353 	/* Driver specific high-precision vblank timestamping supported? */
354 	if (dev->driver->get_vblank_timestamp)
355 		DRM_INFO("Driver supports precise vblank timestamp query.\n");
356 	else
357 		DRM_INFO("No driver support for vblank timestamp query.\n");
358 
359 	/* Must have precise timestamping for reliable vblank instant disable */
360 	if (dev->vblank_disable_immediate && !dev->driver->get_vblank_timestamp) {
361 		dev->vblank_disable_immediate = false;
362 		DRM_INFO("Setting vblank_disable_immediate to false because "
363 			 "get_vblank_timestamp == NULL\n");
364 	}
365 
366 	dev->vblank_disable_allowed = false;
367 
368 	return 0;
369 
370 err:
371 	dev->num_crtcs = 0;
372 	return ret;
373 }
374 EXPORT_SYMBOL(drm_vblank_init);
375 
376 static void drm_irq_vgaarb_nokms(void *cookie, bool state)
377 {
378 	struct drm_device *dev = cookie;
379 
380 	if (dev->driver->vgaarb_irq) {
381 		dev->driver->vgaarb_irq(dev, state);
382 		return;
383 	}
384 
385 	if (!dev->irq_enabled)
386 		return;
387 
388 	if (state) {
389 		if (dev->driver->irq_uninstall)
390 			dev->driver->irq_uninstall(dev);
391 	} else {
392 		if (dev->driver->irq_preinstall)
393 			dev->driver->irq_preinstall(dev);
394 		if (dev->driver->irq_postinstall)
395 			dev->driver->irq_postinstall(dev);
396 	}
397 }
398 
399 /**
400  * drm_irq_install - install IRQ handler
401  * @dev: DRM device
402  * @irq: IRQ number to install the handler for
403  *
404  * Initializes the IRQ related data. Installs the handler, calling the driver
405  * irq_preinstall() and irq_postinstall() functions before and after the
406  * installation.
407  *
408  * This is the simplified helper interface provided for drivers with no special
409  * needs. Drivers which need to install interrupt handlers for multiple
410  * interrupts must instead set drm_device->irq_enabled to signal the DRM core
411  * that vblank interrupts are available.
412  *
413  * Returns:
414  * Zero on success or a negative error code on failure.
415  */
416 int drm_irq_install(struct drm_device *dev, int irq)
417 {
418 	int ret;
419 	unsigned long sh_flags = 0;
420 
421 	if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
422 		return -EINVAL;
423 
424 	if (irq == 0)
425 		return -EINVAL;
426 
427 	/* Driver must have been initialized */
428 	if (!dev->dev_private)
429 		return -EINVAL;
430 
431 	if (dev->irq_enabled)
432 		return -EBUSY;
433 	dev->irq_enabled = true;
434 
435 	DRM_DEBUG("irq=%d\n", irq);
436 
437 	/* Before installing handler */
438 	if (dev->driver->irq_preinstall)
439 		dev->driver->irq_preinstall(dev);
440 
441 	/* Install handler */
442 	if (drm_core_check_feature(dev, DRIVER_IRQ_SHARED))
443 		sh_flags = IRQF_SHARED;
444 
445 	ret = request_irq(irq, dev->driver->irq_handler,
446 			  sh_flags, dev->driver->name, dev);
447 
448 	if (ret < 0) {
449 		dev->irq_enabled = false;
450 		return ret;
451 	}
452 
453 	if (!drm_core_check_feature(dev, DRIVER_MODESET))
454 		vga_client_register(dev->pdev, (void *)dev, drm_irq_vgaarb_nokms, NULL);
455 
456 	/* After installing handler */
457 	if (dev->driver->irq_postinstall)
458 		ret = dev->driver->irq_postinstall(dev);
459 
460 	if (ret < 0) {
461 		dev->irq_enabled = false;
462 		if (!drm_core_check_feature(dev, DRIVER_MODESET))
463 			vga_client_register(dev->pdev, NULL, NULL, NULL);
464 		free_irq(irq, dev);
465 	} else {
466 		dev->irq = irq;
467 	}
468 
469 	return ret;
470 }
471 EXPORT_SYMBOL(drm_irq_install);
472 
473 /**
474  * drm_irq_uninstall - uninstall the IRQ handler
475  * @dev: DRM device
476  *
477  * Calls the driver's irq_uninstall() function and unregisters the IRQ handler.
478  * This should only be called by drivers which used drm_irq_install() to set up
479  * their interrupt handler. Other drivers must only reset
480  * drm_device->irq_enabled to false.
481  *
482  * Note that for kernel modesetting drivers it is a bug if this function fails.
483  * The sanity checks are only to catch buggy user modesetting drivers which call
484  * the same function through an ioctl.
485  *
486  * Returns:
487  * Zero on success or a negative error code on failure.
488  */
489 int drm_irq_uninstall(struct drm_device *dev)
490 {
491 	unsigned long irqflags;
492 	bool irq_enabled;
493 	int i;
494 
495 	if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
496 		return -EINVAL;
497 
498 	irq_enabled = dev->irq_enabled;
499 	dev->irq_enabled = false;
500 
501 	/*
502 	 * Wake up any waiters so they don't hang. This is just to paper over
503 	 * isssues for UMS drivers which aren't in full control of their
504 	 * vblank/irq handling. KMS drivers must ensure that vblanks are all
505 	 * disabled when uninstalling the irq handler.
506 	 */
507 	if (dev->num_crtcs) {
508 		spin_lock_irqsave(&dev->vbl_lock, irqflags);
509 		for (i = 0; i < dev->num_crtcs; i++) {
510 			struct drm_vblank_crtc *vblank = &dev->vblank[i];
511 
512 			if (!vblank->enabled)
513 				continue;
514 
515 			WARN_ON(drm_core_check_feature(dev, DRIVER_MODESET));
516 
517 			vblank_disable_and_save(dev, i);
518 			wake_up(&vblank->queue);
519 		}
520 		spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
521 	}
522 
523 	if (!irq_enabled)
524 		return -EINVAL;
525 
526 	DRM_DEBUG("irq=%d\n", dev->irq);
527 
528 	if (!drm_core_check_feature(dev, DRIVER_MODESET))
529 		vga_client_register(dev->pdev, NULL, NULL, NULL);
530 
531 	if (dev->driver->irq_uninstall)
532 		dev->driver->irq_uninstall(dev);
533 
534 	free_irq(dev->irq, dev);
535 
536 	return 0;
537 }
538 EXPORT_SYMBOL(drm_irq_uninstall);
539 
540 /*
541  * IRQ control ioctl.
542  *
543  * \param inode device inode.
544  * \param file_priv DRM file private.
545  * \param cmd command.
546  * \param arg user argument, pointing to a drm_control structure.
547  * \return zero on success or a negative number on failure.
548  *
549  * Calls irq_install() or irq_uninstall() according to \p arg.
550  */
551 int drm_control(struct drm_device *dev, void *data,
552 		struct drm_file *file_priv)
553 {
554 	struct drm_control *ctl = data;
555 	int ret = 0, irq;
556 
557 	/* if we haven't irq we fallback for compatibility reasons -
558 	 * this used to be a separate function in drm_dma.h
559 	 */
560 
561 	if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
562 		return 0;
563 	if (drm_core_check_feature(dev, DRIVER_MODESET))
564 		return 0;
565 	/* UMS was only ever support on pci devices. */
566 	if (WARN_ON(!dev->pdev))
567 		return -EINVAL;
568 
569 	switch (ctl->func) {
570 	case DRM_INST_HANDLER:
571 		irq = dev->pdev->irq;
572 
573 		if (dev->if_version < DRM_IF_VERSION(1, 2) &&
574 		    ctl->irq != irq)
575 			return -EINVAL;
576 		mutex_lock(&dev->struct_mutex);
577 		ret = drm_irq_install(dev, irq);
578 		mutex_unlock(&dev->struct_mutex);
579 
580 		return ret;
581 	case DRM_UNINST_HANDLER:
582 		mutex_lock(&dev->struct_mutex);
583 		ret = drm_irq_uninstall(dev);
584 		mutex_unlock(&dev->struct_mutex);
585 
586 		return ret;
587 	default:
588 		return -EINVAL;
589 	}
590 }
591 
592 /**
593  * drm_calc_timestamping_constants - calculate vblank timestamp constants
594  * @crtc: drm_crtc whose timestamp constants should be updated.
595  * @mode: display mode containing the scanout timings
596  *
597  * Calculate and store various constants which are later
598  * needed by vblank and swap-completion timestamping, e.g,
599  * by drm_calc_vbltimestamp_from_scanoutpos(). They are
600  * derived from CRTC's true scanout timing, so they take
601  * things like panel scaling or other adjustments into account.
602  */
603 void drm_calc_timestamping_constants(struct drm_crtc *crtc,
604 				     const struct drm_display_mode *mode)
605 {
606 	int linedur_ns = 0, pixeldur_ns = 0, framedur_ns = 0;
607 	int dotclock = mode->crtc_clock;
608 
609 	/* Valid dotclock? */
610 	if (dotclock > 0) {
611 		int frame_size = mode->crtc_htotal * mode->crtc_vtotal;
612 
613 		/*
614 		 * Convert scanline length in pixels and video
615 		 * dot clock to line duration, frame duration
616 		 * and pixel duration in nanoseconds:
617 		 */
618 		pixeldur_ns = 1000000 / dotclock;
619 		linedur_ns  = div_u64((u64) mode->crtc_htotal * 1000000, dotclock);
620 		framedur_ns = div_u64((u64) frame_size * 1000000, dotclock);
621 
622 		/*
623 		 * Fields of interlaced scanout modes are only half a frame duration.
624 		 */
625 		if (mode->flags & DRM_MODE_FLAG_INTERLACE)
626 			framedur_ns /= 2;
627 	} else
628 		DRM_ERROR("crtc %u: Can't calculate constants, dotclock = 0!\n",
629 			  crtc->base.id);
630 
631 	crtc->pixeldur_ns = pixeldur_ns;
632 	crtc->linedur_ns  = linedur_ns;
633 	crtc->framedur_ns = framedur_ns;
634 
635 	DRM_DEBUG("crtc %u: hwmode: htotal %d, vtotal %d, vdisplay %d\n",
636 		  crtc->base.id, mode->crtc_htotal,
637 		  mode->crtc_vtotal, mode->crtc_vdisplay);
638 	DRM_DEBUG("crtc %u: clock %d kHz framedur %d linedur %d, pixeldur %d\n",
639 		  crtc->base.id, dotclock, framedur_ns,
640 		  linedur_ns, pixeldur_ns);
641 }
642 EXPORT_SYMBOL(drm_calc_timestamping_constants);
643 
644 /**
645  * drm_calc_vbltimestamp_from_scanoutpos - precise vblank timestamp helper
646  * @dev: DRM device
647  * @pipe: index of CRTC whose vblank timestamp to retrieve
648  * @max_error: Desired maximum allowable error in timestamps (nanosecs)
649  *             On return contains true maximum error of timestamp
650  * @vblank_time: Pointer to struct timeval which should receive the timestamp
651  * @flags: Flags to pass to driver:
652  *         0 = Default,
653  *         DRM_CALLED_FROM_VBLIRQ = If function is called from vbl IRQ handler
654  * @refcrtc: CRTC which defines scanout timing
655  * @mode: mode which defines the scanout timings
656  *
657  * Implements calculation of exact vblank timestamps from given drm_display_mode
658  * timings and current video scanout position of a CRTC. This can be called from
659  * within get_vblank_timestamp() implementation of a kms driver to implement the
660  * actual timestamping.
661  *
662  * Should return timestamps conforming to the OML_sync_control OpenML
663  * extension specification. The timestamp corresponds to the end of
664  * the vblank interval, aka start of scanout of topmost-leftmost display
665  * pixel in the following video frame.
666  *
667  * Requires support for optional dev->driver->get_scanout_position()
668  * in kms driver, plus a bit of setup code to provide a drm_display_mode
669  * that corresponds to the true scanout timing.
670  *
671  * The current implementation only handles standard video modes. It
672  * returns as no operation if a doublescan or interlaced video mode is
673  * active. Higher level code is expected to handle this.
674  *
675  * Returns:
676  * Negative value on error, failure or if not supported in current
677  * video mode:
678  *
679  * -EINVAL   - Invalid CRTC.
680  * -EAGAIN   - Temporary unavailable, e.g., called before initial modeset.
681  * -ENOTSUPP - Function not supported in current display mode.
682  * -EIO      - Failed, e.g., due to failed scanout position query.
683  *
684  * Returns or'ed positive status flags on success:
685  *
686  * DRM_VBLANKTIME_SCANOUTPOS_METHOD - Signal this method used for timestamping.
687  * DRM_VBLANKTIME_INVBL - Timestamp taken while scanout was in vblank interval.
688  *
689  */
690 int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
691 					  unsigned int pipe,
692 					  int *max_error,
693 					  struct timeval *vblank_time,
694 					  unsigned flags,
695 					  const struct drm_crtc *refcrtc,
696 					  const struct drm_display_mode *mode)
697 {
698 	struct timeval tv_etime;
699 	ktime_t stime, etime;
700 	int vbl_status;
701 	int vpos, hpos, i;
702 	int framedur_ns, linedur_ns, pixeldur_ns, delta_ns, duration_ns;
703 	bool invbl;
704 
705 	if (pipe >= dev->num_crtcs) {
706 		DRM_ERROR("Invalid crtc %u\n", pipe);
707 		return -EINVAL;
708 	}
709 
710 	/* Scanout position query not supported? Should not happen. */
711 	if (!dev->driver->get_scanout_position) {
712 		DRM_ERROR("Called from driver w/o get_scanout_position()!?\n");
713 		return -EIO;
714 	}
715 
716 	/* Durations of frames, lines, pixels in nanoseconds. */
717 	framedur_ns = refcrtc->framedur_ns;
718 	linedur_ns  = refcrtc->linedur_ns;
719 	pixeldur_ns = refcrtc->pixeldur_ns;
720 
721 	/* If mode timing undefined, just return as no-op:
722 	 * Happens during initial modesetting of a crtc.
723 	 */
724 	if (framedur_ns == 0) {
725 		DRM_DEBUG("crtc %u: Noop due to uninitialized mode.\n", pipe);
726 		return -EAGAIN;
727 	}
728 
729 	/* Get current scanout position with system timestamp.
730 	 * Repeat query up to DRM_TIMESTAMP_MAXRETRIES times
731 	 * if single query takes longer than max_error nanoseconds.
732 	 *
733 	 * This guarantees a tight bound on maximum error if
734 	 * code gets preempted or delayed for some reason.
735 	 */
736 	for (i = 0; i < DRM_TIMESTAMP_MAXRETRIES; i++) {
737 		/*
738 		 * Get vertical and horizontal scanout position vpos, hpos,
739 		 * and bounding timestamps stime, etime, pre/post query.
740 		 */
741 		vbl_status = dev->driver->get_scanout_position(dev, pipe, flags, &vpos,
742 							       &hpos, &stime, &etime);
743 
744 		/* Return as no-op if scanout query unsupported or failed. */
745 		if (!(vbl_status & DRM_SCANOUTPOS_VALID)) {
746 			DRM_DEBUG("crtc %u : scanoutpos query failed [%d].\n",
747 				  pipe, vbl_status);
748 			return -EIO;
749 		}
750 
751 		/* Compute uncertainty in timestamp of scanout position query. */
752 		duration_ns = ktime_to_ns(etime) - ktime_to_ns(stime);
753 
754 		/* Accept result with <  max_error nsecs timing uncertainty. */
755 		if (duration_ns <= *max_error)
756 			break;
757 	}
758 
759 	/* Noisy system timing? */
760 	if (i == DRM_TIMESTAMP_MAXRETRIES) {
761 		DRM_DEBUG("crtc %u: Noisy timestamp %d us > %d us [%d reps].\n",
762 			  pipe, duration_ns/1000, *max_error/1000, i);
763 	}
764 
765 	/* Return upper bound of timestamp precision error. */
766 	*max_error = duration_ns;
767 
768 	/* Check if in vblank area:
769 	 * vpos is >=0 in video scanout area, but negative
770 	 * within vblank area, counting down the number of lines until
771 	 * start of scanout.
772 	 */
773 	invbl = vbl_status & DRM_SCANOUTPOS_IN_VBLANK;
774 
775 	/* Convert scanout position into elapsed time at raw_time query
776 	 * since start of scanout at first display scanline. delta_ns
777 	 * can be negative if start of scanout hasn't happened yet.
778 	 */
779 	delta_ns = vpos * linedur_ns + hpos * pixeldur_ns;
780 
781 	if (!drm_timestamp_monotonic)
782 		etime = ktime_mono_to_real(etime);
783 
784 	/* save this only for debugging purposes */
785 	tv_etime = ktime_to_timeval(etime);
786 	/* Subtract time delta from raw timestamp to get final
787 	 * vblank_time timestamp for end of vblank.
788 	 */
789 	if (delta_ns < 0)
790 		etime = ktime_add_ns(etime, -delta_ns);
791 	else
792 		etime = ktime_sub_ns(etime, delta_ns);
793 	*vblank_time = ktime_to_timeval(etime);
794 
795 	DRM_DEBUG("crtc %u : v %d p(%d,%d)@ %ld.%ld -> %ld.%ld [e %d us, %d rep]\n",
796 		  pipe, (int)vbl_status, hpos, vpos,
797 		  (long)tv_etime.tv_sec, (long)tv_etime.tv_usec,
798 		  (long)vblank_time->tv_sec, (long)vblank_time->tv_usec,
799 		  duration_ns/1000, i);
800 
801 	vbl_status = DRM_VBLANKTIME_SCANOUTPOS_METHOD;
802 	if (invbl)
803 		vbl_status |= DRM_VBLANKTIME_IN_VBLANK;
804 
805 	return vbl_status;
806 }
807 EXPORT_SYMBOL(drm_calc_vbltimestamp_from_scanoutpos);
808 
809 static struct timeval get_drm_timestamp(void)
810 {
811 	ktime_t now;
812 
813 	now = drm_timestamp_monotonic ? ktime_get() : ktime_get_real();
814 	return ktime_to_timeval(now);
815 }
816 
817 /**
818  * drm_get_last_vbltimestamp - retrieve raw timestamp for the most recent
819  *                             vblank interval
820  * @dev: DRM device
821  * @pipe: index of CRTC whose vblank timestamp to retrieve
822  * @tvblank: Pointer to target struct timeval which should receive the timestamp
823  * @flags: Flags to pass to driver:
824  *         0 = Default,
825  *         DRM_CALLED_FROM_VBLIRQ = If function is called from vbl IRQ handler
826  *
827  * Fetches the system timestamp corresponding to the time of the most recent
828  * vblank interval on specified CRTC. May call into kms-driver to
829  * compute the timestamp with a high-precision GPU specific method.
830  *
831  * Returns zero if timestamp originates from uncorrected do_gettimeofday()
832  * call, i.e., it isn't very precisely locked to the true vblank.
833  *
834  * Returns:
835  * True if timestamp is considered to be very precise, false otherwise.
836  */
837 static bool
838 drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe,
839 			  struct timeval *tvblank, unsigned flags)
840 {
841 	int ret;
842 
843 	/* Define requested maximum error on timestamps (nanoseconds). */
844 	int max_error = (int) drm_timestamp_precision * 1000;
845 
846 	/* Query driver if possible and precision timestamping enabled. */
847 	if (dev->driver->get_vblank_timestamp && (max_error > 0)) {
848 		ret = dev->driver->get_vblank_timestamp(dev, pipe, &max_error,
849 							tvblank, flags);
850 		if (ret > 0)
851 			return true;
852 	}
853 
854 	/* GPU high precision timestamp query unsupported or failed.
855 	 * Return current monotonic/gettimeofday timestamp as best estimate.
856 	 */
857 	*tvblank = get_drm_timestamp();
858 
859 	return false;
860 }
861 
862 /**
863  * drm_vblank_count - retrieve "cooked" vblank counter value
864  * @dev: DRM device
865  * @pipe: index of CRTC for which to retrieve the counter
866  *
867  * Fetches the "cooked" vblank count value that represents the number of
868  * vblank events since the system was booted, including lost events due to
869  * modesetting activity.
870  *
871  * This is the legacy version of drm_crtc_vblank_count().
872  *
873  * Returns:
874  * The software vblank counter.
875  */
876 u32 drm_vblank_count(struct drm_device *dev, int pipe)
877 {
878 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
879 
880 	if (WARN_ON(pipe >= dev->num_crtcs))
881 		return 0;
882 
883 	return vblank->count;
884 }
885 EXPORT_SYMBOL(drm_vblank_count);
886 
887 /**
888  * drm_crtc_vblank_count - retrieve "cooked" vblank counter value
889  * @crtc: which counter to retrieve
890  *
891  * Fetches the "cooked" vblank count value that represents the number of
892  * vblank events since the system was booted, including lost events due to
893  * modesetting activity.
894  *
895  * This is the native KMS version of drm_vblank_count().
896  *
897  * Returns:
898  * The software vblank counter.
899  */
900 u32 drm_crtc_vblank_count(struct drm_crtc *crtc)
901 {
902 	return drm_vblank_count(crtc->dev, drm_crtc_index(crtc));
903 }
904 EXPORT_SYMBOL(drm_crtc_vblank_count);
905 
906 /**
907  * drm_vblank_count_and_time - retrieve "cooked" vblank counter value and the
908  *     system timestamp corresponding to that vblank counter value.
909  * @dev: DRM device
910  * @pipe: index of CRTC whose counter to retrieve
911  * @vblanktime: Pointer to struct timeval to receive the vblank timestamp.
912  *
913  * Fetches the "cooked" vblank count value that represents the number of
914  * vblank events since the system was booted, including lost events due to
915  * modesetting activity. Returns corresponding system timestamp of the time
916  * of the vblank interval that corresponds to the current vblank counter value.
917  */
918 u32 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe,
919 			      struct timeval *vblanktime)
920 {
921 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
922 	u32 cur_vblank;
923 
924 	if (WARN_ON(pipe >= dev->num_crtcs))
925 		return 0;
926 
927 	/*
928 	 * Vblank timestamps are read lockless. To ensure consistency the vblank
929 	 * counter is rechecked and ordering is ensured using memory barriers.
930 	 * This works like a seqlock. The write-side barriers are in store_vblank.
931 	 */
932 	do {
933 		cur_vblank = vblank->count;
934 		smp_rmb();
935 		*vblanktime = vblanktimestamp(dev, pipe, cur_vblank);
936 		smp_rmb();
937 	} while (cur_vblank != vblank->count);
938 
939 	return cur_vblank;
940 }
941 EXPORT_SYMBOL(drm_vblank_count_and_time);
942 
943 static void send_vblank_event(struct drm_device *dev,
944 		struct drm_pending_vblank_event *e,
945 		unsigned long seq, struct timeval *now)
946 {
947 	WARN_ON_SMP(!spin_is_locked(&dev->event_lock));
948 	e->event.sequence = seq;
949 	e->event.tv_sec = now->tv_sec;
950 	e->event.tv_usec = now->tv_usec;
951 
952 	list_add_tail(&e->base.link,
953 		      &e->base.file_priv->event_list);
954 	wake_up_interruptible(&e->base.file_priv->event_wait);
955 	trace_drm_vblank_event_delivered(e->base.pid, e->pipe,
956 					 e->event.sequence);
957 }
958 
959 /**
960  * drm_send_vblank_event - helper to send vblank event after pageflip
961  * @dev: DRM device
962  * @pipe: CRTC index
963  * @e: the event to send
964  *
965  * Updates sequence # and timestamp on event, and sends it to userspace.
966  * Caller must hold event lock.
967  *
968  * This is the legacy version of drm_crtc_send_vblank_event().
969  */
970 void drm_send_vblank_event(struct drm_device *dev, unsigned int pipe,
971 			   struct drm_pending_vblank_event *e)
972 {
973 	struct timeval now;
974 	unsigned int seq;
975 
976 	if (dev->num_crtcs > 0) {
977 		seq = drm_vblank_count_and_time(dev, pipe, &now);
978 	} else {
979 		seq = 0;
980 
981 		now = get_drm_timestamp();
982 	}
983 	e->pipe = pipe;
984 	send_vblank_event(dev, e, seq, &now);
985 }
986 EXPORT_SYMBOL(drm_send_vblank_event);
987 
988 /**
989  * drm_crtc_send_vblank_event - helper to send vblank event after pageflip
990  * @crtc: the source CRTC of the vblank event
991  * @e: the event to send
992  *
993  * Updates sequence # and timestamp on event, and sends it to userspace.
994  * Caller must hold event lock.
995  *
996  * This is the native KMS version of drm_send_vblank_event().
997  */
998 void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
999 				struct drm_pending_vblank_event *e)
1000 {
1001 	drm_send_vblank_event(crtc->dev, drm_crtc_index(crtc), e);
1002 }
1003 EXPORT_SYMBOL(drm_crtc_send_vblank_event);
1004 
1005 /**
1006  * drm_vblank_enable - enable the vblank interrupt on a CRTC
1007  * @dev: DRM device
1008  * @pipe: CRTC index
1009  *
1010  * Returns:
1011  * Zero on success or a negative error code on failure.
1012  */
1013 static int drm_vblank_enable(struct drm_device *dev, unsigned int pipe)
1014 {
1015 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1016 	int ret = 0;
1017 
1018 	assert_spin_locked(&dev->vbl_lock);
1019 
1020 	spin_lock(&dev->vblank_time_lock);
1021 
1022 	if (!vblank->enabled) {
1023 		/*
1024 		 * Enable vblank irqs under vblank_time_lock protection.
1025 		 * All vblank count & timestamp updates are held off
1026 		 * until we are done reinitializing master counter and
1027 		 * timestamps. Filtercode in drm_handle_vblank() will
1028 		 * prevent double-accounting of same vblank interval.
1029 		 */
1030 		ret = dev->driver->enable_vblank(dev, pipe);
1031 		DRM_DEBUG("enabling vblank on crtc %u, ret: %d\n", pipe, ret);
1032 		if (ret)
1033 			atomic_dec(&vblank->refcount);
1034 		else {
1035 			vblank->enabled = true;
1036 			drm_update_vblank_count(dev, pipe);
1037 		}
1038 	}
1039 
1040 	spin_unlock(&dev->vblank_time_lock);
1041 
1042 	return ret;
1043 }
1044 
1045 /**
1046  * drm_vblank_get - get a reference count on vblank events
1047  * @dev: DRM device
1048  * @pipe: index of CRTC to own
1049  *
1050  * Acquire a reference count on vblank events to avoid having them disabled
1051  * while in use.
1052  *
1053  * This is the legacy version of drm_crtc_vblank_get().
1054  *
1055  * Returns:
1056  * Zero on success or a negative error code on failure.
1057  */
1058 int drm_vblank_get(struct drm_device *dev, unsigned int pipe)
1059 {
1060 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1061 	unsigned long irqflags;
1062 	int ret = 0;
1063 
1064 	if (!dev->num_crtcs)
1065 		return -EINVAL;
1066 
1067 	if (WARN_ON(pipe >= dev->num_crtcs))
1068 		return -EINVAL;
1069 
1070 	spin_lock_irqsave(&dev->vbl_lock, irqflags);
1071 	/* Going from 0->1 means we have to enable interrupts again */
1072 	if (atomic_add_return(1, &vblank->refcount) == 1) {
1073 		ret = drm_vblank_enable(dev, pipe);
1074 	} else {
1075 		if (!vblank->enabled) {
1076 			atomic_dec(&vblank->refcount);
1077 			ret = -EINVAL;
1078 		}
1079 	}
1080 	spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
1081 
1082 	return ret;
1083 }
1084 EXPORT_SYMBOL(drm_vblank_get);
1085 
1086 /**
1087  * drm_crtc_vblank_get - get a reference count on vblank events
1088  * @crtc: which CRTC to own
1089  *
1090  * Acquire a reference count on vblank events to avoid having them disabled
1091  * while in use.
1092  *
1093  * This is the native kms version of drm_vblank_get().
1094  *
1095  * Returns:
1096  * Zero on success or a negative error code on failure.
1097  */
1098 int drm_crtc_vblank_get(struct drm_crtc *crtc)
1099 {
1100 	return drm_vblank_get(crtc->dev, drm_crtc_index(crtc));
1101 }
1102 EXPORT_SYMBOL(drm_crtc_vblank_get);
1103 
1104 /**
1105  * drm_vblank_put - release ownership of vblank events
1106  * @dev: DRM device
1107  * @pipe: index of CRTC to release
1108  *
1109  * Release ownership of a given vblank counter, turning off interrupts
1110  * if possible. Disable interrupts after drm_vblank_offdelay milliseconds.
1111  *
1112  * This is the legacy version of drm_crtc_vblank_put().
1113  */
1114 void drm_vblank_put(struct drm_device *dev, unsigned int pipe)
1115 {
1116 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1117 
1118 	if (WARN_ON(pipe >= dev->num_crtcs))
1119 		return;
1120 
1121 	if (WARN_ON(atomic_read(&vblank->refcount) == 0))
1122 		return;
1123 
1124 	/* Last user schedules interrupt disable */
1125 	if (atomic_dec_and_test(&vblank->refcount)) {
1126 		if (drm_vblank_offdelay == 0)
1127 			return;
1128 		else if (dev->vblank_disable_immediate || drm_vblank_offdelay < 0)
1129 			vblank_disable_fn((unsigned long)vblank);
1130 		else
1131 			mod_timer(&vblank->disable_timer,
1132 				  jiffies + ((drm_vblank_offdelay * HZ)/1000));
1133 	}
1134 }
1135 EXPORT_SYMBOL(drm_vblank_put);
1136 
1137 /**
1138  * drm_crtc_vblank_put - give up ownership of vblank events
1139  * @crtc: which counter to give up
1140  *
1141  * Release ownership of a given vblank counter, turning off interrupts
1142  * if possible. Disable interrupts after drm_vblank_offdelay milliseconds.
1143  *
1144  * This is the native kms version of drm_vblank_put().
1145  */
1146 void drm_crtc_vblank_put(struct drm_crtc *crtc)
1147 {
1148 	drm_vblank_put(crtc->dev, drm_crtc_index(crtc));
1149 }
1150 EXPORT_SYMBOL(drm_crtc_vblank_put);
1151 
1152 /**
1153  * drm_wait_one_vblank - wait for one vblank
1154  * @dev: DRM device
1155  * @pipe: CRTC index
1156  *
1157  * This waits for one vblank to pass on @crtc, using the irq driver interfaces.
1158  * It is a failure to call this when the vblank irq for @crtc is disabled, e.g.
1159  * due to lack of driver support or because the crtc is off.
1160  */
1161 void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe)
1162 {
1163 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1164 	int ret;
1165 	u32 last;
1166 
1167 	if (WARN_ON(pipe >= dev->num_crtcs))
1168 		return;
1169 
1170 	ret = drm_vblank_get(dev, pipe);
1171 	if (WARN(ret, "vblank not available on crtc %i, ret=%i\n", pipe, ret))
1172 		return;
1173 
1174 	last = drm_vblank_count(dev, pipe);
1175 
1176 	ret = wait_event_timeout(vblank->queue,
1177 				 last != drm_vblank_count(dev, pipe),
1178 				 msecs_to_jiffies(100));
1179 
1180 	WARN(ret == 0, "vblank wait timed out on crtc %i\n", pipe);
1181 
1182 	drm_vblank_put(dev, pipe);
1183 }
1184 EXPORT_SYMBOL(drm_wait_one_vblank);
1185 
1186 /**
1187  * drm_crtc_wait_one_vblank - wait for one vblank
1188  * @crtc: DRM crtc
1189  *
1190  * This waits for one vblank to pass on @crtc, using the irq driver interfaces.
1191  * It is a failure to call this when the vblank irq for @crtc is disabled, e.g.
1192  * due to lack of driver support or because the crtc is off.
1193  */
1194 void drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
1195 {
1196 	drm_wait_one_vblank(crtc->dev, drm_crtc_index(crtc));
1197 }
1198 EXPORT_SYMBOL(drm_crtc_wait_one_vblank);
1199 
1200 /**
1201  * drm_vblank_off - disable vblank events on a CRTC
1202  * @dev: DRM device
1203  * @pipe: CRTC index
1204  *
1205  * Drivers can use this function to shut down the vblank interrupt handling when
1206  * disabling a crtc. This function ensures that the latest vblank frame count is
1207  * stored so that drm_vblank_on() can restore it again.
1208  *
1209  * Drivers must use this function when the hardware vblank counter can get
1210  * reset, e.g. when suspending.
1211  *
1212  * This is the legacy version of drm_crtc_vblank_off().
1213  */
1214 void drm_vblank_off(struct drm_device *dev, unsigned int pipe)
1215 {
1216 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1217 	struct drm_pending_vblank_event *e, *t;
1218 	struct timeval now;
1219 	unsigned long irqflags;
1220 	unsigned int seq;
1221 
1222 	if (WARN_ON(pipe >= dev->num_crtcs))
1223 		return;
1224 
1225 	spin_lock_irqsave(&dev->event_lock, irqflags);
1226 
1227 	spin_lock(&dev->vbl_lock);
1228 	vblank_disable_and_save(dev, pipe);
1229 	wake_up(&vblank->queue);
1230 
1231 	/*
1232 	 * Prevent subsequent drm_vblank_get() from re-enabling
1233 	 * the vblank interrupt by bumping the refcount.
1234 	 */
1235 	if (!vblank->inmodeset) {
1236 		atomic_inc(&vblank->refcount);
1237 		vblank->inmodeset = 1;
1238 	}
1239 	spin_unlock(&dev->vbl_lock);
1240 
1241 	/* Send any queued vblank events, lest the natives grow disquiet */
1242 	seq = drm_vblank_count_and_time(dev, pipe, &now);
1243 
1244 	list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
1245 		if (e->pipe != pipe)
1246 			continue;
1247 		DRM_DEBUG("Sending premature vblank event on disable: \
1248 			  wanted %d, current %d\n",
1249 			  e->event.sequence, seq);
1250 		list_del(&e->base.link);
1251 		drm_vblank_put(dev, pipe);
1252 		send_vblank_event(dev, e, seq, &now);
1253 	}
1254 	spin_unlock_irqrestore(&dev->event_lock, irqflags);
1255 }
1256 EXPORT_SYMBOL(drm_vblank_off);
1257 
1258 /**
1259  * drm_crtc_vblank_off - disable vblank events on a CRTC
1260  * @crtc: CRTC in question
1261  *
1262  * Drivers can use this function to shut down the vblank interrupt handling when
1263  * disabling a crtc. This function ensures that the latest vblank frame count is
1264  * stored so that drm_vblank_on can restore it again.
1265  *
1266  * Drivers must use this function when the hardware vblank counter can get
1267  * reset, e.g. when suspending.
1268  *
1269  * This is the native kms version of drm_vblank_off().
1270  */
1271 void drm_crtc_vblank_off(struct drm_crtc *crtc)
1272 {
1273 	drm_vblank_off(crtc->dev, drm_crtc_index(crtc));
1274 }
1275 EXPORT_SYMBOL(drm_crtc_vblank_off);
1276 
1277 /**
1278  * drm_crtc_vblank_reset - reset vblank state to off on a CRTC
1279  * @drm_crtc: CRTC in question
1280  *
1281  * Drivers can use this function to reset the vblank state to off at load time.
1282  * Drivers should use this together with the drm_crtc_vblank_off() and
1283  * drm_crtc_vblank_on() functions. The difference compared to
1284  * drm_crtc_vblank_off() is that this function doesn't save the vblank counter
1285  * and hence doesn't need to call any driver hooks.
1286  */
1287 void drm_crtc_vblank_reset(struct drm_crtc *drm_crtc)
1288 {
1289 	struct drm_device *dev = drm_crtc->dev;
1290 	unsigned long irqflags;
1291 	int crtc = drm_crtc_index(drm_crtc);
1292 	struct drm_vblank_crtc *vblank = &dev->vblank[crtc];
1293 
1294 	spin_lock_irqsave(&dev->vbl_lock, irqflags);
1295 	/*
1296 	 * Prevent subsequent drm_vblank_get() from enabling the vblank
1297 	 * interrupt by bumping the refcount.
1298 	 */
1299 	if (!vblank->inmodeset) {
1300 		atomic_inc(&vblank->refcount);
1301 		vblank->inmodeset = 1;
1302 	}
1303 	spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
1304 
1305 	WARN_ON(!list_empty(&dev->vblank_event_list));
1306 }
1307 EXPORT_SYMBOL(drm_crtc_vblank_reset);
1308 
1309 /**
1310  * drm_vblank_on - enable vblank events on a CRTC
1311  * @dev: DRM device
1312  * @pipe: CRTC index
1313  *
1314  * This functions restores the vblank interrupt state captured with
1315  * drm_vblank_off() again. Note that calls to drm_vblank_on() and
1316  * drm_vblank_off() can be unbalanced and so can also be unconditionally called
1317  * in driver load code to reflect the current hardware state of the crtc.
1318  *
1319  * This is the legacy version of drm_crtc_vblank_on().
1320  */
1321 void drm_vblank_on(struct drm_device *dev, unsigned int pipe)
1322 {
1323 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1324 	unsigned long irqflags;
1325 
1326 	if (WARN_ON(pipe >= dev->num_crtcs))
1327 		return;
1328 
1329 	spin_lock_irqsave(&dev->vbl_lock, irqflags);
1330 	/* Drop our private "prevent drm_vblank_get" refcount */
1331 	if (vblank->inmodeset) {
1332 		atomic_dec(&vblank->refcount);
1333 		vblank->inmodeset = 0;
1334 	}
1335 
1336 	/*
1337 	 * sample the current counter to avoid random jumps
1338 	 * when drm_vblank_enable() applies the diff
1339 	 *
1340 	 * -1 to make sure user will never see the same
1341 	 * vblank counter value before and after a modeset
1342 	 */
1343 	vblank->last =
1344 		(dev->driver->get_vblank_counter(dev, pipe) - 1) &
1345 		dev->max_vblank_count;
1346 	/*
1347 	 * re-enable interrupts if there are users left, or the
1348 	 * user wishes vblank interrupts to be enabled all the time.
1349 	 */
1350 	if (atomic_read(&vblank->refcount) != 0 ||
1351 	    (!dev->vblank_disable_immediate && drm_vblank_offdelay == 0))
1352 		WARN_ON(drm_vblank_enable(dev, pipe));
1353 	spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
1354 }
1355 EXPORT_SYMBOL(drm_vblank_on);
1356 
1357 /**
1358  * drm_crtc_vblank_on - enable vblank events on a CRTC
1359  * @crtc: CRTC in question
1360  *
1361  * This functions restores the vblank interrupt state captured with
1362  * drm_vblank_off() again. Note that calls to drm_vblank_on() and
1363  * drm_vblank_off() can be unbalanced and so can also be unconditionally called
1364  * in driver load code to reflect the current hardware state of the crtc.
1365  *
1366  * This is the native kms version of drm_vblank_on().
1367  */
1368 void drm_crtc_vblank_on(struct drm_crtc *crtc)
1369 {
1370 	drm_vblank_on(crtc->dev, drm_crtc_index(crtc));
1371 }
1372 EXPORT_SYMBOL(drm_crtc_vblank_on);
1373 
1374 /**
1375  * drm_vblank_pre_modeset - account for vblanks across mode sets
1376  * @dev: DRM device
1377  * @pipe: CRTC index
1378  *
1379  * Account for vblank events across mode setting events, which will likely
1380  * reset the hardware frame counter.
1381  *
1382  * This is done by grabbing a temporary vblank reference to ensure that the
1383  * vblank interrupt keeps running across the modeset sequence. With this the
1384  * software-side vblank frame counting will ensure that there are no jumps or
1385  * discontinuities.
1386  *
1387  * Unfortunately this approach is racy and also doesn't work when the vblank
1388  * interrupt stops running, e.g. across system suspend resume. It is therefore
1389  * highly recommended that drivers use the newer drm_vblank_off() and
1390  * drm_vblank_on() instead. drm_vblank_pre_modeset() only works correctly when
1391  * using "cooked" software vblank frame counters and not relying on any hardware
1392  * counters.
1393  *
1394  * Drivers must call drm_vblank_post_modeset() when re-enabling the same crtc
1395  * again.
1396  */
1397 void drm_vblank_pre_modeset(struct drm_device *dev, unsigned int pipe)
1398 {
1399 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1400 
1401 	/* vblank is not initialized (IRQ not installed ?), or has been freed */
1402 	if (!dev->num_crtcs)
1403 		return;
1404 
1405 	if (WARN_ON(pipe >= dev->num_crtcs))
1406 		return;
1407 
1408 	/*
1409 	 * To avoid all the problems that might happen if interrupts
1410 	 * were enabled/disabled around or between these calls, we just
1411 	 * have the kernel take a reference on the CRTC (just once though
1412 	 * to avoid corrupting the count if multiple, mismatch calls occur),
1413 	 * so that interrupts remain enabled in the interim.
1414 	 */
1415 	if (!vblank->inmodeset) {
1416 		vblank->inmodeset = 0x1;
1417 		if (drm_vblank_get(dev, pipe) == 0)
1418 			vblank->inmodeset |= 0x2;
1419 	}
1420 }
1421 EXPORT_SYMBOL(drm_vblank_pre_modeset);
1422 
1423 /**
1424  * drm_vblank_post_modeset - undo drm_vblank_pre_modeset changes
1425  * @dev: DRM device
1426  * @pipe: CRTC index
1427  *
1428  * This function again drops the temporary vblank reference acquired in
1429  * drm_vblank_pre_modeset.
1430  */
1431 void drm_vblank_post_modeset(struct drm_device *dev, unsigned int pipe)
1432 {
1433 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1434 	unsigned long irqflags;
1435 
1436 	/* vblank is not initialized (IRQ not installed ?), or has been freed */
1437 	if (!dev->num_crtcs)
1438 		return;
1439 
1440 	if (WARN_ON(pipe >= dev->num_crtcs))
1441 		return;
1442 
1443 	if (vblank->inmodeset) {
1444 		spin_lock_irqsave(&dev->vbl_lock, irqflags);
1445 		dev->vblank_disable_allowed = true;
1446 		spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
1447 
1448 		if (vblank->inmodeset & 0x2)
1449 			drm_vblank_put(dev, pipe);
1450 
1451 		vblank->inmodeset = 0;
1452 	}
1453 }
1454 EXPORT_SYMBOL(drm_vblank_post_modeset);
1455 
1456 /*
1457  * drm_modeset_ctl - handle vblank event counter changes across mode switch
1458  * @DRM_IOCTL_ARGS: standard ioctl arguments
1459  *
1460  * Applications should call the %_DRM_PRE_MODESET and %_DRM_POST_MODESET
1461  * ioctls around modesetting so that any lost vblank events are accounted for.
1462  *
1463  * Generally the counter will reset across mode sets.  If interrupts are
1464  * enabled around this call, we don't have to do anything since the counter
1465  * will have already been incremented.
1466  */
1467 int drm_modeset_ctl(struct drm_device *dev, void *data,
1468 		    struct drm_file *file_priv)
1469 {
1470 	struct drm_modeset_ctl *modeset = data;
1471 	unsigned int pipe;
1472 
1473 	/* If drm_vblank_init() hasn't been called yet, just no-op */
1474 	if (!dev->num_crtcs)
1475 		return 0;
1476 
1477 	/* KMS drivers handle this internally */
1478 	if (drm_core_check_feature(dev, DRIVER_MODESET))
1479 		return 0;
1480 
1481 	pipe = modeset->crtc;
1482 	if (pipe >= dev->num_crtcs)
1483 		return -EINVAL;
1484 
1485 	switch (modeset->cmd) {
1486 	case _DRM_PRE_MODESET:
1487 		drm_vblank_pre_modeset(dev, pipe);
1488 		break;
1489 	case _DRM_POST_MODESET:
1490 		drm_vblank_post_modeset(dev, pipe);
1491 		break;
1492 	default:
1493 		return -EINVAL;
1494 	}
1495 
1496 	return 0;
1497 }
1498 
1499 static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
1500 				  union drm_wait_vblank *vblwait,
1501 				  struct drm_file *file_priv)
1502 {
1503 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1504 	struct drm_pending_vblank_event *e;
1505 	struct timeval now;
1506 	unsigned long flags;
1507 	unsigned int seq;
1508 	int ret;
1509 
1510 	e = kzalloc(sizeof(*e), GFP_KERNEL);
1511 	if (e == NULL) {
1512 		ret = -ENOMEM;
1513 		goto err_put;
1514 	}
1515 
1516 	e->pipe = pipe;
1517 	e->base.pid = current->pid;
1518 	e->event.base.type = DRM_EVENT_VBLANK;
1519 	e->event.base.length = sizeof(e->event);
1520 	e->event.user_data = vblwait->request.signal;
1521 	e->base.event = &e->event.base;
1522 	e->base.file_priv = file_priv;
1523 	e->base.destroy = (void (*) (struct drm_pending_event *)) kfree;
1524 
1525 	spin_lock_irqsave(&dev->event_lock, flags);
1526 
1527 	/*
1528 	 * drm_vblank_off() might have been called after we called
1529 	 * drm_vblank_get(). drm_vblank_off() holds event_lock
1530 	 * around the vblank disable, so no need for further locking.
1531 	 * The reference from drm_vblank_get() protects against
1532 	 * vblank disable from another source.
1533 	 */
1534 	if (!vblank->enabled) {
1535 		ret = -EINVAL;
1536 		goto err_unlock;
1537 	}
1538 
1539 	if (file_priv->event_space < sizeof(e->event)) {
1540 		ret = -EBUSY;
1541 		goto err_unlock;
1542 	}
1543 
1544 	file_priv->event_space -= sizeof(e->event);
1545 	seq = drm_vblank_count_and_time(dev, pipe, &now);
1546 
1547 	if ((vblwait->request.type & _DRM_VBLANK_NEXTONMISS) &&
1548 	    (seq - vblwait->request.sequence) <= (1 << 23)) {
1549 		vblwait->request.sequence = seq + 1;
1550 		vblwait->reply.sequence = vblwait->request.sequence;
1551 	}
1552 
1553 	DRM_DEBUG("event on vblank count %d, current %d, crtc %u\n",
1554 		  vblwait->request.sequence, seq, pipe);
1555 
1556 	trace_drm_vblank_event_queued(current->pid, pipe,
1557 				      vblwait->request.sequence);
1558 
1559 	e->event.sequence = vblwait->request.sequence;
1560 	if ((seq - vblwait->request.sequence) <= (1 << 23)) {
1561 		drm_vblank_put(dev, pipe);
1562 		send_vblank_event(dev, e, seq, &now);
1563 		vblwait->reply.sequence = seq;
1564 	} else {
1565 		/* drm_handle_vblank_events will call drm_vblank_put */
1566 		list_add_tail(&e->base.link, &dev->vblank_event_list);
1567 		vblwait->reply.sequence = vblwait->request.sequence;
1568 	}
1569 
1570 	spin_unlock_irqrestore(&dev->event_lock, flags);
1571 
1572 	return 0;
1573 
1574 err_unlock:
1575 	spin_unlock_irqrestore(&dev->event_lock, flags);
1576 	kfree(e);
1577 err_put:
1578 	drm_vblank_put(dev, pipe);
1579 	return ret;
1580 }
1581 
1582 /*
1583  * Wait for VBLANK.
1584  *
1585  * \param inode device inode.
1586  * \param file_priv DRM file private.
1587  * \param cmd command.
1588  * \param data user argument, pointing to a drm_wait_vblank structure.
1589  * \return zero on success or a negative number on failure.
1590  *
1591  * This function enables the vblank interrupt on the pipe requested, then
1592  * sleeps waiting for the requested sequence number to occur, and drops
1593  * the vblank interrupt refcount afterwards. (vblank IRQ disable follows that
1594  * after a timeout with no further vblank waits scheduled).
1595  */
1596 int drm_wait_vblank(struct drm_device *dev, void *data,
1597 		    struct drm_file *file_priv)
1598 {
1599 	struct drm_vblank_crtc *vblank;
1600 	union drm_wait_vblank *vblwait = data;
1601 	int ret;
1602 	unsigned int flags, seq, pipe, high_pipe;
1603 
1604 	if (!dev->irq_enabled)
1605 		return -EINVAL;
1606 
1607 	if (vblwait->request.type & _DRM_VBLANK_SIGNAL)
1608 		return -EINVAL;
1609 
1610 	if (vblwait->request.type &
1611 	    ~(_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK |
1612 	      _DRM_VBLANK_HIGH_CRTC_MASK)) {
1613 		DRM_ERROR("Unsupported type value 0x%x, supported mask 0x%x\n",
1614 			  vblwait->request.type,
1615 			  (_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK |
1616 			   _DRM_VBLANK_HIGH_CRTC_MASK));
1617 		return -EINVAL;
1618 	}
1619 
1620 	flags = vblwait->request.type & _DRM_VBLANK_FLAGS_MASK;
1621 	high_pipe = (vblwait->request.type & _DRM_VBLANK_HIGH_CRTC_MASK);
1622 	if (high_pipe)
1623 		pipe = high_pipe >> _DRM_VBLANK_HIGH_CRTC_SHIFT;
1624 	else
1625 		pipe = flags & _DRM_VBLANK_SECONDARY ? 1 : 0;
1626 	if (pipe >= dev->num_crtcs)
1627 		return -EINVAL;
1628 
1629 	vblank = &dev->vblank[pipe];
1630 
1631 	ret = drm_vblank_get(dev, pipe);
1632 	if (ret) {
1633 		DRM_DEBUG("failed to acquire vblank counter, %d\n", ret);
1634 		return ret;
1635 	}
1636 	seq = drm_vblank_count(dev, pipe);
1637 
1638 	switch (vblwait->request.type & _DRM_VBLANK_TYPES_MASK) {
1639 	case _DRM_VBLANK_RELATIVE:
1640 		vblwait->request.sequence += seq;
1641 		vblwait->request.type &= ~_DRM_VBLANK_RELATIVE;
1642 	case _DRM_VBLANK_ABSOLUTE:
1643 		break;
1644 	default:
1645 		ret = -EINVAL;
1646 		goto done;
1647 	}
1648 
1649 	if (flags & _DRM_VBLANK_EVENT) {
1650 		/* must hold on to the vblank ref until the event fires
1651 		 * drm_vblank_put will be called asynchronously
1652 		 */
1653 		return drm_queue_vblank_event(dev, pipe, vblwait, file_priv);
1654 	}
1655 
1656 	if ((flags & _DRM_VBLANK_NEXTONMISS) &&
1657 	    (seq - vblwait->request.sequence) <= (1<<23)) {
1658 		vblwait->request.sequence = seq + 1;
1659 	}
1660 
1661 	DRM_DEBUG("waiting on vblank count %d, crtc %u\n",
1662 		  vblwait->request.sequence, pipe);
1663 	vblank->last_wait = vblwait->request.sequence;
1664 	DRM_WAIT_ON(ret, vblank->queue, 3 * HZ,
1665 		    (((drm_vblank_count(dev, pipe) -
1666 		       vblwait->request.sequence) <= (1 << 23)) ||
1667 		     !vblank->enabled ||
1668 		     !dev->irq_enabled));
1669 
1670 	if (ret != -EINTR) {
1671 		struct timeval now;
1672 
1673 		vblwait->reply.sequence = drm_vblank_count_and_time(dev, pipe, &now);
1674 		vblwait->reply.tval_sec = now.tv_sec;
1675 		vblwait->reply.tval_usec = now.tv_usec;
1676 
1677 		DRM_DEBUG("returning %d to client\n",
1678 			  vblwait->reply.sequence);
1679 	} else {
1680 		DRM_DEBUG("vblank wait interrupted by signal\n");
1681 	}
1682 
1683 done:
1684 	drm_vblank_put(dev, pipe);
1685 	return ret;
1686 }
1687 
1688 static void drm_handle_vblank_events(struct drm_device *dev, unsigned int pipe)
1689 {
1690 	struct drm_pending_vblank_event *e, *t;
1691 	struct timeval now;
1692 	unsigned int seq;
1693 
1694 	assert_spin_locked(&dev->event_lock);
1695 
1696 	seq = drm_vblank_count_and_time(dev, pipe, &now);
1697 
1698 	list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
1699 		if (e->pipe != pipe)
1700 			continue;
1701 		if ((seq - e->event.sequence) > (1<<23))
1702 			continue;
1703 
1704 		DRM_DEBUG("vblank event on %d, current %d\n",
1705 			  e->event.sequence, seq);
1706 
1707 		list_del(&e->base.link);
1708 		drm_vblank_put(dev, pipe);
1709 		send_vblank_event(dev, e, seq, &now);
1710 	}
1711 
1712 	trace_drm_vblank_event(pipe, seq);
1713 }
1714 
1715 /**
1716  * drm_handle_vblank - handle a vblank event
1717  * @dev: DRM device
1718  * @pipe: index of CRTC where this event occurred
1719  *
1720  * Drivers should call this routine in their vblank interrupt handlers to
1721  * update the vblank counter and send any signals that may be pending.
1722  *
1723  * This is the legacy version of drm_crtc_handle_vblank().
1724  */
1725 bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
1726 {
1727 	struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
1728 	u32 vblcount;
1729 	s64 diff_ns;
1730 	struct timeval tvblank;
1731 	unsigned long irqflags;
1732 
1733 	if (WARN_ON_ONCE(!dev->num_crtcs))
1734 		return false;
1735 
1736 	if (WARN_ON(pipe >= dev->num_crtcs))
1737 		return false;
1738 
1739 	spin_lock_irqsave(&dev->event_lock, irqflags);
1740 
1741 	/* Need timestamp lock to prevent concurrent execution with
1742 	 * vblank enable/disable, as this would cause inconsistent
1743 	 * or corrupted timestamps and vblank counts.
1744 	 */
1745 	spin_lock(&dev->vblank_time_lock);
1746 
1747 	/* Vblank irq handling disabled. Nothing to do. */
1748 	if (!vblank->enabled) {
1749 		spin_unlock(&dev->vblank_time_lock);
1750 		spin_unlock_irqrestore(&dev->event_lock, irqflags);
1751 		return false;
1752 	}
1753 
1754 	/* Fetch corresponding timestamp for this vblank interval from
1755 	 * driver and store it in proper slot of timestamp ringbuffer.
1756 	 */
1757 
1758 	/* Get current timestamp and count. */
1759 	vblcount = vblank->count;
1760 	drm_get_last_vbltimestamp(dev, pipe, &tvblank, DRM_CALLED_FROM_VBLIRQ);
1761 
1762 	/* Compute time difference to timestamp of last vblank */
1763 	diff_ns = timeval_to_ns(&tvblank) -
1764 		  timeval_to_ns(&vblanktimestamp(dev, pipe, vblcount));
1765 
1766 	/* Update vblank timestamp and count if at least
1767 	 * DRM_REDUNDANT_VBLIRQ_THRESH_NS nanoseconds
1768 	 * difference between last stored timestamp and current
1769 	 * timestamp. A smaller difference means basically
1770 	 * identical timestamps. Happens if this vblank has
1771 	 * been already processed and this is a redundant call,
1772 	 * e.g., due to spurious vblank interrupts. We need to
1773 	 * ignore those for accounting.
1774 	 */
1775 	if (abs64(diff_ns) > DRM_REDUNDANT_VBLIRQ_THRESH_NS)
1776 		store_vblank(dev, pipe, 1, &tvblank);
1777 	else
1778 		DRM_DEBUG("crtc %u: Redundant vblirq ignored. diff_ns = %d\n",
1779 			  pipe, (int) diff_ns);
1780 
1781 	spin_unlock(&dev->vblank_time_lock);
1782 
1783 	wake_up(&vblank->queue);
1784 	drm_handle_vblank_events(dev, pipe);
1785 
1786 	spin_unlock_irqrestore(&dev->event_lock, irqflags);
1787 
1788 	return true;
1789 }
1790 EXPORT_SYMBOL(drm_handle_vblank);
1791 
1792 /**
1793  * drm_crtc_handle_vblank - handle a vblank event
1794  * @crtc: where this event occurred
1795  *
1796  * Drivers should call this routine in their vblank interrupt handlers to
1797  * update the vblank counter and send any signals that may be pending.
1798  *
1799  * This is the native KMS version of drm_handle_vblank().
1800  *
1801  * Returns:
1802  * True if the event was successfully handled, false on failure.
1803  */
1804 bool drm_crtc_handle_vblank(struct drm_crtc *crtc)
1805 {
1806 	return drm_handle_vblank(crtc->dev, drm_crtc_index(crtc));
1807 }
1808 EXPORT_SYMBOL(drm_crtc_handle_vblank);
1809