Top | ![]() |
![]() |
![]() |
![]() |
int | igt_debugfs_open () |
FILE * | igt_debugfs_fopen () |
bool | igt_crc_is_null () |
bool | igt_crc_equal () |
char * | igt_crc_to_string () |
void | igt_require_pipe_crc () |
igt_pipe_crc_t * | igt_pipe_crc_new () |
void | igt_pipe_crc_free () |
void | igt_pipe_crc_start () |
void | igt_pipe_crc_stop () |
void | igt_pipe_crc_get_crcs () |
void | igt_pipe_crc_collect_crc () |
#define | DROP_ALL |
void | igt_drop_caches_set () |
void | igt_disable_prefault () |
void | igt_enable_prefault () |
typedef | igt_pipe_crc_t |
igt_crc_t | |
enum | intel_pipe_crc_source |
#define | DROP_UNBOUND |
#define | DROP_BOUND |
#define | DROP_RETIRE |
#define | DROP_ACTIVE |
This library provides helpers to access debugfs features. On top of some
basic functions to access debugfs files with e.g. igt_debugfs_open()
it also
provides higher-level wrappers for some debugfs features
This library wraps up the kernel's support for capturing pipe CRCs into a neat and tidy package. For the detailed usage see all the functions which work on igt_pipe_crc_t. This is supported on all platforms and outputs.
Actually using pipe CRCs to write modeset tests is a bit tricky though, so there is no way to directly check a CRC: Both the details of the plane blending, color correction and other hardware and how exactly the CRC is computed at each tap point vary by hardware generation and are not disclosed.
The only way to use igt_crc_t CRCs therefore is to compare CRCs among each
another either for equality or difference. Otherwise CRCs must be treated as
completely opaque values. Note that not even CRCs from different pipes or tap
points on the same platform can be compared. Hence only use igt_crc_is_null()
and igt_crc_equal()
to inspect CRC values captured by the same
igt_pipe_crc_t object.
This covers the miscellaneous debugfs interface wrappers:
drm/i915 supports interfaces to evict certain clases of gem buffer objects,
see igt_drop_caches_set()
.
drm/i915 supports an interface to disable prefaulting, useful to test
slowpaths in ioctls. See igt_disable_prefault()
.
int igt_debugfs_open (const char *filename
,int mode
);
This opens a debugfs file as a Unix file descriptor. The filename should be relative to the drm device's root, i.e without "drm/<minor>".
FILE * igt_debugfs_fopen (const char *filename
,const char *mode
);
This opens a debugfs file as a libc FILE. The filename should be relative to the drm device's root, i.e without "drm/<minor>".
char *
igt_crc_to_string (igt_crc_t *crc
);
This formats crc
into a string buffer which is owned by igt_crc_to_string()
.
The next call will override the buffer again, which makes this multithreading
unsafe.
This should only ever be used for diagnostic debug output.
void
igt_require_pipe_crc (void
);
Convenience helper to check whether pipe CRC capturing is supported by the kernel. Uses igt_skip to automatically skip the test/subtest if this isn't the case.
igt_pipe_crc_t * igt_pipe_crc_new (enum pipe pipe
,enum intel_pipe_crc_source source
);
This sets up a new pipe CRC capture object for the given pipe
and source
.
void
igt_pipe_crc_free (igt_pipe_crc_t *pipe_crc
);
Frees all resources associated with pipe_crc
.
void
igt_pipe_crc_start (igt_pipe_crc_t *pipe_crc
);
Starts the CRC capture process on pipe_crc
.
void
igt_pipe_crc_stop (igt_pipe_crc_t *pipe_crc
);
Stops the CRC capture process on pipe_crc
.
void igt_pipe_crc_get_crcs (igt_pipe_crc_t *pipe_crc
,int n_crcs
,igt_crc_t **out_crcs
);
Read n_crcs
from pipe_crc
. This function blocks until n_crcs
are
retrieved. out_crcs
is alloced by this function and must be released with
free()
by the caller.
Callers must start and stop the capturing themselves by calling
igt_pipe_crc_start()
and igt_pipe_crc_stop()
.
void igt_pipe_crc_collect_crc (igt_pipe_crc_t *pipe_crc
,igt_crc_t *out_crc
);
Read a single CRC from pipe_crc
. This function blocks until the CRC is
retrieved. out_crc
must be allocated by the caller.
This function takes care of the pipe_crc book-keeping, it will start/stop the collection of the CRC.
void
igt_drop_caches_set (uint64_t val
);
This calls the debugfs interface the drm/i915 GEM driver exposes to drop or evict certain classes of gem buffer objects.
void
igt_disable_prefault (void
);
Disable prefaulting in certain gem ioctls through the debugfs interface. As usual this installs an exit handler to clean up and re-enable prefaulting even when the test exited abnormally.
igt_enable_prefault() will enable normale operation again.
typedef struct _igt_pipe_crc igt_pipe_crc_t;
Pipe CRC support structure. Needs to be allocated and set up with
igt_pipe_crc_new()
for a specific pipe and pipe CRC source value.
typedef struct { uint32_t frame; int n_words; uint32_t crc[5]; } igt_crc_t;
Pipe CRC value. All other members than frame
are private and should not be
inspected by testcases.
Enumeration of all supported pipe CRC sources. Not all platforms and all outputs support all of them. Generic tests should just use INTEL_PIPE_CRC_SOURCE_AUTO. It should always map to an end-of-pipe CRC suitable for checking planes, cursor, color correction and any other output-agnostic features.
#define DROP_BOUND 0x2
Drop all inactive objects which are bound into some gpu address space.
#define DROP_RETIRE 0x4
Wait for all outstanding gpu commands to complete, but do not take any further actions.