583065c7aa
The explicit out-fences in crtc are signaled as part of vblank event,
indicating all framebuffers present on the Atomic Commit request are
scanned out on the screen. Though the fence signal and the vblank event
notification happens at the same time, triggered by the same hardware
vsync event, the timestamp set in both are different. With drivers
supporting precise vblank timestamp the difference between the two
timestamps would be even higher. This might have an impact on use-mode
frameworks using these fence timestamps for purposes other than simple
buffer usage. For instance, the Android framework [1] uses the
retire-fences as an alternative to vblank when frame-updates are in
progress. Set the fence timestamp during send vblank event using a new
drm_send_event_timestamp_locked variant to avoid discrepancies.
[1] https://android.googlesource.com/platform/frameworks/native/+/master/
services/surfaceflinger/Scheduler/Scheduler.cpp#397
Changes in v2:
- Use drm_send_event_timestamp_locked to update fence timestamp
- add more information to commit text
Changes in v3:
- use same backend helper function for variants of drm_send_event to
avoid code duplications
Changes in v4:
- remove WARN_ON from drm_send_event_timestamp_locked
Signed-off-by: Veera Sundaram Sankaran <veeras@codeaurora.org>
Reviewed-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
[sumits: minor parenthesis alignment correction]
Link: https://patchwork.freedesktop.org/patch/msgid/1610757107-11892-2-git-send-email-veeras@codeaurora.org
(cherry picked from commit
|
||
---|---|---|
.. | ||
bridge | ||
i2c | ||
ttm | ||
amd_asic_type.h | ||
drm_agpsupport.h | ||
drm_atomic_helper.h | ||
drm_atomic_state_helper.h | ||
drm_atomic_uapi.h | ||
drm_atomic.h | ||
drm_audio_component.h | ||
drm_auth.h | ||
drm_blend.h | ||
drm_bridge_connector.h | ||
drm_bridge.h | ||
drm_cache.h | ||
drm_client.h | ||
drm_color_mgmt.h | ||
drm_connector.h | ||
drm_crtc_helper.h | ||
drm_crtc.h | ||
drm_damage_helper.h | ||
drm_debugfs_crc.h | ||
drm_debugfs.h | ||
drm_device.h | ||
drm_displayid.h | ||
drm_dp_dual_mode_helper.h | ||
drm_dp_helper.h | ||
drm_dp_mst_helper.h | ||
drm_drv.h | ||
drm_dsc.h | ||
drm_edid.h | ||
drm_encoder_slave.h | ||
drm_encoder.h | ||
drm_fb_cma_helper.h | ||
drm_fb_helper.h | ||
drm_file.h | ||
drm_fixed.h | ||
drm_flip_work.h | ||
drm_format_helper.h | ||
drm_fourcc.h | ||
drm_framebuffer.h | ||
drm_gem_cma_helper.h | ||
drm_gem_framebuffer_helper.h | ||
drm_gem_shmem_helper.h | ||
drm_gem_ttm_helper.h | ||
drm_gem_vram_helper.h | ||
drm_gem.h | ||
drm_hashtab.h | ||
drm_hdcp.h | ||
drm_ioctl.h | ||
drm_irq.h | ||
drm_lease.h | ||
drm_legacy.h | ||
drm_managed.h | ||
drm_mipi_dbi.h | ||
drm_mipi_dsi.h | ||
drm_mm.h | ||
drm_mode_config.h | ||
drm_mode_object.h | ||
drm_modes.h | ||
drm_modeset_helper_vtables.h | ||
drm_modeset_helper.h | ||
drm_modeset_lock.h | ||
drm_of.h | ||
drm_panel.h | ||
drm_pciids.h | ||
drm_plane_helper.h | ||
drm_plane.h | ||
drm_prime.h | ||
drm_print.h | ||
drm_probe_helper.h | ||
drm_property.h | ||
drm_rect.h | ||
drm_scdc_helper.h | ||
drm_self_refresh_helper.h | ||
drm_simple_kms_helper.h | ||
drm_syncobj.h | ||
drm_sysfs.h | ||
drm_util.h | ||
drm_utils.h | ||
drm_vblank_work.h | ||
drm_vblank.h | ||
drm_vma_manager.h | ||
drm_writeback.h | ||
gma_drm.h | ||
gpu_scheduler.h | ||
i915_component.h | ||
i915_drm.h | ||
i915_mei_hdcp_interface.h | ||
i915_pciids.h | ||
intel_lpe_audio.h | ||
intel-gtt.h | ||
spsc_queue.h | ||
task_barrier.h |