linux/drivers/gpu/drm
Tomeu Vizoso 9edbf1fa60 drm: Add API for capturing frame CRCs
Adds files and directories to debugfs for controlling and reading frame
CRCs, per CRTC:

dri/0/crtc-0/crc
dri/0/crtc-0/crc/control
dri/0/crtc-0/crc/data

Drivers can implement the set_crc_source callback() in drm_crtc_funcs to
start and stop generating frame CRCs and can add entries to the output
by calling drm_crtc_add_crc_entry.

v2:
    - Lots of good fixes suggested by Thierry.
    - Added documentation.
    - Changed the debugfs layout.
    - Moved to allocate the entries circular queue once when frame
      generation gets enabled for the first time.
v3:
    - Use the control file just to select the source, and start and stop
      capture when the data file is opened and closed, respectively.
    - Make variable the number of CRC values per entry, per source.
    - Allocate entries queue each time we start capturing as now there
      isn't a fixed number of CRC values per entry.
    - Store the frame counter in the data file as a 8-digit hex number.
    - For sources that cannot provide useful frame numbers, place
      XXXXXXXX in the frame field.

v4:
    - Build only if CONFIG_DEBUG_FS is enabled.
    - Use memdup_user_nul.
    - Consolidate calculation of the size of an entry in a helper.
    - Add 0x prefix to hex numbers in the data file.
    - Remove unnecessary snprintf and strlen usage in read callback.

v5:
    - Made the crcs array in drm_crtc_crc_entry fixed-size
    - Lots of other smaller improvements suggested by Emil Velikov

v7:
    - Move definition of drm_debugfs_crtc_crc_add to drm_internal.h

v8:
    - Call debugfs_remove_recursive when we fail to create the minor
      device

v9:
    - Register the debugfs directory for a crtc from
      drm_crtc_register_all()

v10:
    - Don't let debugfs failures interrupt CRTC registration (Emil
      Velikov)

v11:
    - Remove extra brace that broke compilation. Sorry!

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Acked-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1475767268-14379-3-git-send-email-tomeu.vizoso@collabora.com
2016-10-17 16:44:34 +02:00
..
amd drm/amdgpu: Remove call to reservation_object_test_signaled_rcu before wait 2016-10-12 19:40:46 +05:30
arc drm: Don't swallow error codes in drm_dev_alloc() 2016-09-22 04:03:48 -07:00
arm drm: Don't swallow error codes in drm_dev_alloc() 2016-09-22 04:03:48 -07:00
armada drm/prime: Take a ref on the drm_dev when exporting a dma_buf 2016-10-05 15:30:32 +02:00
ast drm: use drm_file to tag vm-bos 2016-09-19 11:22:08 +02:00
atmel-hlcdc drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
bochs bugfixes for qemu (bochs, qxl and virtio-gpu) drm drivers 2016-09-28 13:23:07 +10:00
bridge drm/bridge: Drop drm_connector_unregister and call drm_connector_cleanup directly 2016-10-10 11:19:42 +02:00
cirrus drm: use drm_file to tag vm-bos 2016-09-19 11:22:08 +02:00
etnaviv drm/etnaviv: Remove manual call to reservation_object_test_signaled_rcu before wait 2016-10-12 19:44:48 +05:30
exynos drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
fsl-dcu Merge tag 'topic/drm-misc-2016-09-25' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-09-28 10:28:23 +10:00
gma500 drm/gma500: add comments for new parameters 2016-10-13 07:56:14 +02:00
hisilicon drm: Don't swallow error codes in drm_dev_alloc() 2016-09-22 04:03:48 -07:00
i2c Revert "drm/i2c: tda998x: don't register the connector" 2016-09-23 03:29:50 -07:00
i810
i915 drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
imx Linux 4.8-rc8 2016-09-28 12:08:49 +10:00
mediatek drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
mga
mgag200 drm: use drm_file to tag vm-bos 2016-09-19 11:22:08 +02:00
msm drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
nouveau drm/nouveau: Remove call to reservation_object_test_signaled_rcu before wait 2016-10-12 19:46:58 +05:30
omapdrm drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
panel drm/panel: Add JDI LT070ME05000 WUXGA DSI Panel 2016-09-16 17:32:48 +02:00
qxl bugfixes for qemu (bochs, qxl and virtio-gpu) drm drivers 2016-09-28 13:23:07 +10:00
r128
radeon drm/edid: Move dvi_dual/max_tmds_clock to drm_display_info 2016-10-04 08:23:10 +02:00
rcar-du drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
rockchip drm/rockchip: analogix_dp: Refuse to enable PSR if panel doesn't support it 2016-10-04 08:23:17 +02:00
savage drm/savage: dereferencing an error pointer 2016-10-13 07:56:14 +02:00
shmobile
sis
sti drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
sun4i Allwinner sun4i DRM fixes for 4.9 2016-09-28 11:23:15 +10:00
tdfx
tegra drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
tilcdc drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
ttm drm/ttm: remove cpu_address member from ttm_tt 2016-09-16 15:53:05 -04:00
udl drm/prime: Take a ref on the drm_dev when exporting a dma_buf 2016-10-05 15:30:32 +02:00
vc4 drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
vgem drm: Don't swallow error codes in drm_dev_alloc() 2016-09-22 04:03:48 -07:00
via
virtio drm: virtio: reinstate drm_virtio_set_busid() 2016-10-04 13:10:30 +10:00
vmwgfx drm/vmwgfx: Remove call to reservation_object_test_signaled_rcu before wait 2016-10-12 19:48:05 +05:30
ati_pcigart.c
drm_agpsupport.c
drm_atomic.c drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
drm_atomic_helper.c drm: Add reference counting to drm_atomic_state 2016-10-17 08:19:57 +02:00
drm_auth.c
drm_blend.c drm/doc: Polish plane composition property docs 2016-09-22 00:04:02 -07:00
drm_bridge.c drm: Extract drm_bridge.h 2016-09-19 15:04:15 +02:00
drm_bufs.c GPU-DRM: Replace a kzalloc() call by kcalloc() in drm_legacy_addbufs_sg() 2016-09-21 13:24:27 +02:00
drm_cache.c
drm_color_mgmt.c drm/doc: Document color space handling 2016-09-22 00:04:03 -07:00
drm_connector.c drm: Release resources with a safer function 2016-10-10 11:20:48 +02:00
drm_context.c
drm_crtc.c drm: Add API for capturing frame CRCs 2016-10-17 16:44:34 +02:00
drm_crtc_helper.c
drm_crtc_helper_internal.h drm/fb-helper: Fix sparse warnings 2016-09-19 16:45:15 +02:00
drm_crtc_internal.h drm: Extract drm_color_mgmt.[hc] 2016-09-22 00:04:02 -07:00
drm_debugfs.c drm: Add API for capturing frame CRCs 2016-10-17 16:44:34 +02:00
drm_debugfs_crc.c drm: Add API for capturing frame CRCs 2016-10-17 16:44:34 +02:00
drm_dma.c
drm_dp_aux_dev.c
drm_dp_dual_mode_helper.c
drm_dp_helper.c Merge tag 'topic/drm-misc-2016-09-25' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-09-28 10:28:23 +10:00
drm_dp_mst_topology.c
drm_drv.c drm: Simplify drm_printk to reduce object size quite a bit 2016-10-04 08:23:14 +02:00
drm_edid.c drm/edid: Use block local to refer to the block 2016-10-17 14:28:06 +02:00
drm_edid_load.c
drm_encoder.c drm: Fix typo in encoder docs 2016-09-21 13:33:50 +02:00
drm_encoder_slave.c
drm_fb_cma_helper.c
drm_fb_helper.c drm/fb-helper: reject any changes to the fbdev 2016-10-17 16:42:41 +02:00
drm_flip_work.c
drm_fops.c drm: remove redundant drm_file->uid 2016-09-19 11:21:42 +02:00
drm_fourcc.c
drm_framebuffer.c drm: Extract drm_plane.[hc] 2016-09-22 00:01:56 -07:00
drm_gem.c drm: use drm_file to tag vm-bos 2016-09-19 11:22:08 +02:00
drm_gem_cma_helper.c
drm_global.c drm: modify drm_global_item_ref to avoid two times of writing ref->object 2016-09-14 15:10:29 -04:00
drm_hashtab.c drm: fix signed integer overflow 2016-09-06 13:56:41 -04:00
drm_info.c drm: remove redundant drm_file->uid 2016-09-19 11:21:42 +02:00
drm_internal.h drm: Add API for capturing frame CRCs 2016-10-17 16:44:34 +02:00
drm_ioc32.c drm: drop obsolete drm_core.h 2016-09-19 13:57:38 +02:00
drm_ioctl.c drm: drop obsolete drm_core.h 2016-09-19 13:57:38 +02:00
drm_irq.c drm: Document caveats around atomic event handling 2016-10-04 08:23:15 +02:00
drm_kms_helper_common.c
drm_legacy.h
drm_lock.c
drm_memory.c
drm_mipi_dsi.c
drm_mm.c
drm_mode_object.c drm: Move property validation to a helper, v2. 2016-09-12 10:32:49 -04:00
drm_modes.c drm: Add and handle new aspect ratios in DRM layer 2016-10-17 14:23:58 +02:00
drm_modeset_helper.c
drm_modeset_lock.c
drm_of.c
drm_panel.c
drm_pci.c drm: Don't swallow error codes in drm_dev_alloc() 2016-09-22 04:03:48 -07:00
drm_plane.c drm: Undo damage to page_flip_ioctl 2016-10-04 12:53:12 +10:00
drm_plane_helper.c
drm_platform.c drm: Don't swallow error codes in drm_dev_alloc() 2016-09-22 04:03:48 -07:00
drm_prime.c drm: Fix up kerneldoc for new drm_gem_dmabuf_export() 2016-10-10 11:19:42 +02:00
drm_probe_helper.c
drm_property.c Revert "drm: Unify handling of blob and object properties" 2016-09-07 13:24:22 +03:00
drm_rect.c
drm_scatter.c
drm_simple_kms_helper.c drm: simple_kms_helper: Add prepare_fb and cleanup_fb hooks 2016-10-05 15:18:02 +02:00
drm_sysfs.c drm: drop obsolete drm_core.h 2016-09-19 13:57:38 +02:00
drm_trace.h
drm_trace_points.c
drm_vm.c
drm_vma_manager.c drm: use drm_file to tag vm-bos 2016-09-19 11:22:08 +02:00
Kconfig
Makefile drm: Add API for capturing frame CRCs 2016-10-17 16:44:34 +02:00