• Home
  • Raw
  • Download

Lines Matching refs:pipe

85 drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe,
97 static void store_vblank(struct drm_device *dev, unsigned int pipe, in store_vblank() argument
101 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in store_vblank()
113 static u32 drm_max_vblank_count(struct drm_device *dev, unsigned int pipe) in drm_max_vblank_count() argument
115 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_max_vblank_count()
124 static u32 drm_vblank_no_hw_counter(struct drm_device *dev, unsigned int pipe) in drm_vblank_no_hw_counter() argument
126 WARN_ON_ONCE(drm_max_vblank_count(dev, pipe) != 0); in drm_vblank_no_hw_counter()
130 static u32 __get_vblank_counter(struct drm_device *dev, unsigned int pipe) in __get_vblank_counter() argument
133 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in __get_vblank_counter()
143 return dev->driver->get_vblank_counter(dev, pipe); in __get_vblank_counter()
145 return drm_vblank_no_hw_counter(dev, pipe); in __get_vblank_counter()
157 static void drm_reset_vblank_timestamp(struct drm_device *dev, unsigned int pipe) in drm_reset_vblank_timestamp() argument
171 cur_vblank = __get_vblank_counter(dev, pipe); in drm_reset_vblank_timestamp()
172 rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, false); in drm_reset_vblank_timestamp()
173 } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0); in drm_reset_vblank_timestamp()
187 store_vblank(dev, pipe, 1, t_vblank, cur_vblank); in drm_reset_vblank_timestamp()
204 static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe, in drm_update_vblank_count() argument
207 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_update_vblank_count()
213 u32 max_vblank_count = drm_max_vblank_count(dev, pipe); in drm_update_vblank_count()
228 cur_vblank = __get_vblank_counter(dev, pipe); in drm_update_vblank_count()
229 rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, in_vblank_irq); in drm_update_vblank_count()
230 } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0); in drm_update_vblank_count()
246 pipe, (long long) diff_ns, framedur_ns); in drm_update_vblank_count()
252 pipe); in drm_update_vblank_count()
269 " due to pre-modeset.\n", pipe, diff); in drm_update_vblank_count()
275 pipe, vblank->count, diff, cur_vblank, vblank->last); in drm_update_vblank_count()
291 store_vblank(dev, pipe, diff, t_vblank, cur_vblank); in drm_update_vblank_count()
294 static u64 drm_vblank_count(struct drm_device *dev, unsigned int pipe) in drm_vblank_count() argument
296 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_count()
298 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_vblank_count()
318 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_accurate_vblank_count() local
327 drm_update_vblank_count(dev, pipe, false); in drm_crtc_accurate_vblank_count()
328 vblank = drm_vblank_count(dev, pipe); in drm_crtc_accurate_vblank_count()
336 static void __disable_vblank(struct drm_device *dev, unsigned int pipe) in __disable_vblank() argument
339 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in __disable_vblank()
350 dev->driver->disable_vblank(dev, pipe); in __disable_vblank()
359 void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe) in drm_vblank_disable_and_save() argument
361 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_disable_and_save()
387 drm_update_vblank_count(dev, pipe, false); in drm_vblank_disable_and_save()
388 __disable_vblank(dev, pipe); in drm_vblank_disable_and_save()
399 unsigned int pipe = vblank->pipe; in vblank_disable_fn() local
404 DRM_DEBUG("disabling vblank on crtc %u\n", pipe); in vblank_disable_fn()
405 drm_vblank_disable_and_save(dev, pipe); in vblank_disable_fn()
412 unsigned int pipe; in drm_vblank_cleanup() local
418 for (pipe = 0; pipe < dev->num_crtcs; pipe++) { in drm_vblank_cleanup()
419 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_cleanup()
462 vblank->pipe = i; in drm_vblank_init()
521 unsigned int pipe = drm_crtc_index(crtc); in drm_calc_timestamping_constants() local
522 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_calc_timestamping_constants()
529 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_calc_timestamping_constants()
597 unsigned int pipe, in drm_calc_vbltimestamp_from_scanoutpos() argument
607 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_calc_vbltimestamp_from_scanoutpos()
614 crtc = drm_crtc_from_index(dev, pipe); in drm_calc_vbltimestamp_from_scanoutpos()
616 if (pipe >= dev->num_crtcs || !crtc) { in drm_calc_vbltimestamp_from_scanoutpos()
617 DRM_ERROR("Invalid crtc %u\n", pipe); in drm_calc_vbltimestamp_from_scanoutpos()
636 DRM_DEBUG("crtc %u: Noop due to uninitialized mode.\n", pipe); in drm_calc_vbltimestamp_from_scanoutpos()
654 vbl_status = dev->driver->get_scanout_position(dev, pipe, in drm_calc_vbltimestamp_from_scanoutpos()
663 pipe); in drm_calc_vbltimestamp_from_scanoutpos()
678 pipe, duration_ns/1000, *max_error/1000, i); in drm_calc_vbltimestamp_from_scanoutpos()
703 pipe, hpos, vpos, in drm_calc_vbltimestamp_from_scanoutpos()
734 drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe, in drm_get_last_vbltimestamp() argument
744 ret = dev->driver->get_vblank_timestamp(dev, pipe, &max_error, in drm_get_last_vbltimestamp()
789 static u64 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe, in drm_vblank_count_and_time() argument
792 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_count_and_time()
796 if (WARN_ON(pipe >= dev->num_crtcs)) { in drm_vblank_count_and_time()
854 trace_drm_vblank_event_delivered(e->base.file_priv, e->pipe, seq); in send_vblank_event()
900 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_arm_vblank_event() local
904 e->pipe = pipe; in drm_crtc_arm_vblank_event()
926 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_send_vblank_event() local
930 seq = drm_vblank_count_and_time(dev, pipe, &now); in drm_crtc_send_vblank_event()
936 e->pipe = pipe; in drm_crtc_send_vblank_event()
941 static int __enable_vblank(struct drm_device *dev, unsigned int pipe) in __enable_vblank() argument
944 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in __enable_vblank()
953 return dev->driver->enable_vblank(dev, pipe); in __enable_vblank()
956 static int drm_vblank_enable(struct drm_device *dev, unsigned int pipe) in drm_vblank_enable() argument
958 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_enable()
973 ret = __enable_vblank(dev, pipe); in drm_vblank_enable()
974 DRM_DEBUG("enabling vblank on crtc %u, ret: %d\n", pipe, ret); in drm_vblank_enable()
978 drm_update_vblank_count(dev, pipe, 0); in drm_vblank_enable()
993 static int drm_vblank_get(struct drm_device *dev, unsigned int pipe) in drm_vblank_get() argument
995 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_get()
1002 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_vblank_get()
1008 ret = drm_vblank_enable(dev, pipe); in drm_vblank_get()
1036 static void drm_vblank_put(struct drm_device *dev, unsigned int pipe) in drm_vblank_put() argument
1038 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_vblank_put()
1040 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_vblank_put()
1082 void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe) in drm_wait_one_vblank() argument
1084 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_wait_one_vblank()
1088 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_wait_one_vblank()
1091 ret = drm_vblank_get(dev, pipe); in drm_wait_one_vblank()
1092 if (WARN(ret, "vblank not available on crtc %i, ret=%i\n", pipe, ret)) in drm_wait_one_vblank()
1095 last = drm_vblank_count(dev, pipe); in drm_wait_one_vblank()
1098 last != drm_vblank_count(dev, pipe), in drm_wait_one_vblank()
1101 WARN(ret == 0, "vblank wait timed out on crtc %i\n", pipe); in drm_wait_one_vblank()
1103 drm_vblank_put(dev, pipe); in drm_wait_one_vblank()
1135 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_vblank_off() local
1136 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_crtc_vblank_off()
1143 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_crtc_vblank_off()
1150 pipe, vblank->enabled, vblank->inmodeset); in drm_crtc_vblank_off()
1155 drm_vblank_disable_and_save(dev, pipe); in drm_crtc_vblank_off()
1170 seq = drm_vblank_count_and_time(dev, pipe, &now); in drm_crtc_vblank_off()
1173 if (e->pipe != pipe) in drm_crtc_vblank_off()
1179 drm_vblank_put(dev, pipe); in drm_crtc_vblank_off()
1206 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_vblank_reset() local
1207 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_crtc_vblank_reset()
1245 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_set_max_vblank_count() local
1246 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_crtc_set_max_vblank_count()
1268 unsigned int pipe = drm_crtc_index(crtc); in drm_crtc_vblank_on() local
1269 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_crtc_vblank_on()
1272 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_crtc_vblank_on()
1277 pipe, vblank->enabled, vblank->inmodeset); in drm_crtc_vblank_on()
1285 drm_reset_vblank_timestamp(dev, pipe); in drm_crtc_vblank_on()
1292 WARN_ON(drm_vblank_enable(dev, pipe)); in drm_crtc_vblank_on()
1310 void drm_vblank_restore(struct drm_device *dev, unsigned int pipe) in drm_vblank_restore() argument
1319 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_vblank_restore()
1325 vblank = &dev->vblank[pipe]; in drm_vblank_restore()
1331 cur_vblank = __get_vblank_counter(dev, pipe); in drm_vblank_restore()
1332 drm_get_last_vbltimestamp(dev, pipe, &t_vblank, false); in drm_vblank_restore()
1333 } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0); in drm_vblank_restore()
1342 store_vblank(dev, pipe, diff, t_vblank, cur_vblank); in drm_vblank_restore()
1363 unsigned int pipe) in drm_legacy_vblank_pre_modeset() argument
1365 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_legacy_vblank_pre_modeset()
1371 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_legacy_vblank_pre_modeset()
1383 if (drm_vblank_get(dev, pipe) == 0) in drm_legacy_vblank_pre_modeset()
1389 unsigned int pipe) in drm_legacy_vblank_post_modeset() argument
1391 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_legacy_vblank_post_modeset()
1398 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_legacy_vblank_post_modeset()
1403 drm_reset_vblank_timestamp(dev, pipe); in drm_legacy_vblank_post_modeset()
1407 drm_vblank_put(dev, pipe); in drm_legacy_vblank_post_modeset()
1417 unsigned int pipe; in drm_legacy_modeset_ctl_ioctl() local
1427 pipe = modeset->crtc; in drm_legacy_modeset_ctl_ioctl()
1428 if (pipe >= dev->num_crtcs) in drm_legacy_modeset_ctl_ioctl()
1433 drm_legacy_vblank_pre_modeset(dev, pipe); in drm_legacy_modeset_ctl_ioctl()
1436 drm_legacy_vblank_post_modeset(dev, pipe); in drm_legacy_modeset_ctl_ioctl()
1450 static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe, in drm_queue_vblank_event() argument
1455 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_queue_vblank_event()
1468 e->pipe = pipe; in drm_queue_vblank_event()
1474 struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe); in drm_queue_vblank_event()
1498 seq = drm_vblank_count_and_time(dev, pipe, &now); in drm_queue_vblank_event()
1501 req_seq, seq, pipe); in drm_queue_vblank_event()
1503 trace_drm_vblank_event_queued(file_priv, pipe, req_seq); in drm_queue_vblank_event()
1507 drm_vblank_put(dev, pipe); in drm_queue_vblank_event()
1524 drm_vblank_put(dev, pipe); in drm_queue_vblank_event()
1555 static void drm_wait_vblank_reply(struct drm_device *dev, unsigned int pipe, in drm_wait_vblank_reply() argument
1566 reply->sequence = drm_vblank_count_and_time(dev, pipe, &now); in drm_wait_vblank_reply()
1581 unsigned int flags, pipe, high_pipe; in drm_wait_vblank_ioctl() local
1608 pipe = 0; in drm_wait_vblank_ioctl()
1615 pipe++; in drm_wait_vblank_ioctl()
1618 pipe = pipe_index; in drm_wait_vblank_ioctl()
1621 if (pipe >= dev->num_crtcs) in drm_wait_vblank_ioctl()
1624 vblank = &dev->vblank[pipe]; in drm_wait_vblank_ioctl()
1632 drm_wait_vblank_reply(dev, pipe, &vblwait->reply); in drm_wait_vblank_ioctl()
1636 ret = drm_vblank_get(dev, pipe); in drm_wait_vblank_ioctl()
1638 DRM_DEBUG("crtc %d failed to acquire vblank counter, %d\n", pipe, ret); in drm_wait_vblank_ioctl()
1641 seq = drm_vblank_count(dev, pipe); in drm_wait_vblank_ioctl()
1668 return drm_queue_vblank_event(dev, pipe, req_seq, vblwait, file_priv); in drm_wait_vblank_ioctl()
1675 req_seq, pipe); in drm_wait_vblank_ioctl()
1677 vblank_passed(drm_vblank_count(dev, pipe), req_seq) || in drm_wait_vblank_ioctl()
1697 drm_wait_vblank_reply(dev, pipe, &vblwait->reply); in drm_wait_vblank_ioctl()
1700 pipe, vblwait->reply.sequence); in drm_wait_vblank_ioctl()
1702 DRM_DEBUG("crtc %d vblank wait interrupted by signal\n", pipe); in drm_wait_vblank_ioctl()
1706 drm_vblank_put(dev, pipe); in drm_wait_vblank_ioctl()
1710 static void drm_handle_vblank_events(struct drm_device *dev, unsigned int pipe) in drm_handle_vblank_events() argument
1718 seq = drm_vblank_count_and_time(dev, pipe, &now); in drm_handle_vblank_events()
1721 if (e->pipe != pipe) in drm_handle_vblank_events()
1730 drm_vblank_put(dev, pipe); in drm_handle_vblank_events()
1734 trace_drm_vblank_event(pipe, seq); in drm_handle_vblank_events()
1747 bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe) in drm_handle_vblank() argument
1749 struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; in drm_handle_vblank()
1756 if (WARN_ON(pipe >= dev->num_crtcs)) in drm_handle_vblank()
1774 drm_update_vblank_count(dev, pipe, true); in drm_handle_vblank()
1789 drm_handle_vblank_events(dev, pipe); in drm_handle_vblank()
1831 int pipe; in drm_crtc_get_sequence_ioctl() local
1847 pipe = drm_crtc_index(crtc); in drm_crtc_get_sequence_ioctl()
1849 vblank = &dev->vblank[pipe]; in drm_crtc_get_sequence_ioctl()
1855 DRM_DEBUG("crtc %d failed to acquire vblank counter, %d\n", pipe, ret); in drm_crtc_get_sequence_ioctl()
1865 get_seq->sequence = drm_vblank_count_and_time(dev, pipe, &now); in drm_crtc_get_sequence_ioctl()
1885 int pipe; in drm_crtc_queue_sequence_ioctl() local
1911 pipe = drm_crtc_index(crtc); in drm_crtc_queue_sequence_ioctl()
1913 vblank = &dev->vblank[pipe]; in drm_crtc_queue_sequence_ioctl()
1921 DRM_DEBUG("crtc %d failed to acquire vblank counter, %d\n", pipe, ret); in drm_crtc_queue_sequence_ioctl()
1925 seq = drm_vblank_count_and_time(dev, pipe, &now); in drm_crtc_queue_sequence_ioctl()
1934 e->pipe = pipe; in drm_crtc_queue_sequence_ioctl()