0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #ifndef __I915_SELFTEST_H__
0025 #define __I915_SELFTEST_H__
0026
0027 #include <linux/types.h>
0028
0029 struct pci_dev;
0030 struct drm_i915_private;
0031
0032 struct i915_selftest {
0033 unsigned long timeout_jiffies;
0034 unsigned int timeout_ms;
0035 unsigned int random_seed;
0036 char *filter;
0037 int mock;
0038 int live;
0039 int perf;
0040 };
0041
0042 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
0043 #include <linux/fault-inject.h>
0044
0045 extern struct i915_selftest i915_selftest;
0046
0047 int i915_mock_selftests(void);
0048 int i915_live_selftests(struct pci_dev *pdev);
0049 int i915_perf_selftests(struct pci_dev *pdev);
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061 #define selftest(name, func) int func(void);
0062 #include "selftests/i915_mock_selftests.h"
0063 #undef selftest
0064 #define selftest(name, func) int func(struct drm_i915_private *i915);
0065 #include "selftests/i915_live_selftests.h"
0066 #include "selftests/i915_perf_selftests.h"
0067 #undef selftest
0068
0069 struct i915_subtest {
0070 int (*func)(void *data);
0071 const char *name;
0072 };
0073
0074 int __i915_nop_setup(void *data);
0075 int __i915_nop_teardown(int err, void *data);
0076
0077 int __i915_live_setup(void *data);
0078 int __i915_live_teardown(int err, void *data);
0079
0080 int __intel_gt_live_setup(void *data);
0081 int __intel_gt_live_teardown(int err, void *data);
0082
0083 int __i915_subtests(const char *caller,
0084 int (*setup)(void *data),
0085 int (*teardown)(int err, void *data),
0086 const struct i915_subtest *st,
0087 unsigned int count,
0088 void *data);
0089 #define i915_subtests(T, data) \
0090 __i915_subtests(__func__, \
0091 __i915_nop_setup, __i915_nop_teardown, \
0092 T, ARRAY_SIZE(T), data)
0093 #define i915_live_subtests(T, data) ({ \
0094 typecheck(struct drm_i915_private *, data); \
0095 __i915_subtests(__func__, \
0096 __i915_live_setup, __i915_live_teardown, \
0097 T, ARRAY_SIZE(T), data); \
0098 })
0099 #define intel_gt_live_subtests(T, data) ({ \
0100 typecheck(struct intel_gt *, data); \
0101 __i915_subtests(__func__, \
0102 __intel_gt_live_setup, __intel_gt_live_teardown, \
0103 T, ARRAY_SIZE(T), data); \
0104 })
0105
0106 #define SUBTEST(x) { x, #x }
0107
0108 #define I915_SELFTEST_DECLARE(x) x
0109 #define I915_SELFTEST_ONLY(x) unlikely(x)
0110 #define I915_SELFTEST_EXPORT
0111
0112 #else
0113
0114 static inline int i915_mock_selftests(void) { return 0; }
0115 static inline int i915_live_selftests(struct pci_dev *pdev) { return 0; }
0116 static inline int i915_perf_selftests(struct pci_dev *pdev) { return 0; }
0117
0118 #define I915_SELFTEST_DECLARE(x)
0119 #define I915_SELFTEST_ONLY(x) 0
0120 #define I915_SELFTEST_EXPORT static
0121
0122 #endif
0123
0124
0125
0126
0127
0128
0129 #define IGT_TIMEOUT(name__) \
0130 unsigned long name__ = jiffies + i915_selftest.timeout_jiffies
0131
0132 __printf(2, 3)
0133 bool __igt_timeout(unsigned long timeout, const char *fmt, ...);
0134
0135 #define igt_timeout(t, fmt, ...) \
0136 __igt_timeout((t), KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
0137
0138 void igt_hexdump(const void *buf, size_t len);
0139
0140 #endif