hc
2024-05-10 23fa18eaa71266feff7ba8d83022d9e1cc83c65a
kernel/include/drm/drm_print.h
....@@ -30,6 +30,12 @@
3030 #include <linux/printk.h>
3131 #include <linux/seq_file.h>
3232 #include <linux/device.h>
33
+#include <linux/debugfs.h>
34
+
35
+#include <drm/drm.h>
36
+
37
+/* Do *not* use outside of drm_print.[ch]! */
38
+extern unsigned int __drm_debug;
3339
3440 /**
3541 * DOC: print
....@@ -80,10 +86,14 @@
8086 void __drm_puts_seq_file(struct drm_printer *p, const char *str);
8187 void __drm_printfn_info(struct drm_printer *p, struct va_format *vaf);
8288 void __drm_printfn_debug(struct drm_printer *p, struct va_format *vaf);
89
+void __drm_printfn_err(struct drm_printer *p, struct va_format *vaf);
8390
8491 __printf(2, 3)
8592 void drm_printf(struct drm_printer *p, const char *f, ...);
8693 void drm_puts(struct drm_printer *p, const char *str);
94
+void drm_print_regset32(struct drm_printer *p, struct debugfs_regset32 *regset);
95
+void drm_print_bits(struct drm_printer *p, unsigned long value,
96
+ const char * const bits[], unsigned int nbits);
8797
8898 __printf(2, 0)
8999 /**
....@@ -223,62 +233,247 @@
223233 return p;
224234 }
225235
226
-/*
227
- * The following categories are defined:
236
+/**
237
+ * drm_err_printer - construct a &drm_printer that outputs to pr_err()
238
+ * @prefix: debug output prefix
228239 *
229
- * CORE: Used in the generic drm code: drm_ioctl.c, drm_mm.c, drm_memory.c, ...
230
- * This is the category used by the DRM_DEBUG() macro.
240
+ * RETURNS:
241
+ * The &drm_printer object
242
+ */
243
+static inline struct drm_printer drm_err_printer(const char *prefix)
244
+{
245
+ struct drm_printer p = {
246
+ .printfn = __drm_printfn_err,
247
+ .prefix = prefix
248
+ };
249
+ return p;
250
+}
251
+
252
+/**
253
+ * enum drm_debug_category - The DRM debug categories
231254 *
232
- * DRIVER: Used in the vendor specific part of the driver: i915, radeon, ...
233
- * This is the category used by the DRM_DEBUG_DRIVER() macro.
255
+ * Each of the DRM debug logging macros use a specific category, and the logging
256
+ * is filtered by the drm.debug module parameter. This enum specifies the values
257
+ * for the interface.
234258 *
235
- * KMS: used in the modesetting code.
236
- * This is the category used by the DRM_DEBUG_KMS() macro.
259
+ * Each DRM_DEBUG_<CATEGORY> macro logs to DRM_UT_<CATEGORY> category, except
260
+ * DRM_DEBUG() logs to DRM_UT_CORE.
237261 *
238
- * PRIME: used in the prime code.
239
- * This is the category used by the DRM_DEBUG_PRIME() macro.
262
+ * Enabling verbose debug messages is done through the drm.debug parameter, each
263
+ * category being enabled by a bit:
240264 *
241
- * ATOMIC: used in the atomic code.
242
- * This is the category used by the DRM_DEBUG_ATOMIC() macro.
243
- *
244
- * VBL: used for verbose debug message in the vblank code
245
- * This is the category used by the DRM_DEBUG_VBL() macro.
246
- *
247
- * Enabling verbose debug messages is done through the drm.debug parameter,
248
- * each category being enabled by a bit.
249
- *
250
- * drm.debug=0x1 will enable CORE messages
251
- * drm.debug=0x2 will enable DRIVER messages
252
- * drm.debug=0x3 will enable CORE and DRIVER messages
253
- * ...
254
- * drm.debug=0x3f will enable all messages
265
+ * - drm.debug=0x1 will enable CORE messages
266
+ * - drm.debug=0x2 will enable DRIVER messages
267
+ * - drm.debug=0x3 will enable CORE and DRIVER messages
268
+ * - ...
269
+ * - drm.debug=0x1ff will enable all messages
255270 *
256271 * An interesting feature is that it's possible to enable verbose logging at
257
- * run-time by echoing the debug value in its sysfs node:
272
+ * run-time by echoing the debug value in its sysfs node::
273
+ *
258274 * # echo 0xf > /sys/module/drm/parameters/debug
275
+ *
259276 */
260
-#define DRM_UT_NONE 0x00
261
-#define DRM_UT_CORE 0x01
262
-#define DRM_UT_DRIVER 0x02
263
-#define DRM_UT_KMS 0x04
264
-#define DRM_UT_PRIME 0x08
265
-#define DRM_UT_ATOMIC 0x10
266
-#define DRM_UT_VBL 0x20
267
-#define DRM_UT_STATE 0x40
268
-#define DRM_UT_LEASE 0x80
269
-#define DRM_UT_DP 0x100
277
+enum drm_debug_category {
278
+ /**
279
+ * @DRM_UT_CORE: Used in the generic drm code: drm_ioctl.c, drm_mm.c,
280
+ * drm_memory.c, ...
281
+ */
282
+ DRM_UT_CORE = 0x01,
283
+ /**
284
+ * @DRM_UT_DRIVER: Used in the vendor specific part of the driver: i915,
285
+ * radeon, ... macro.
286
+ */
287
+ DRM_UT_DRIVER = 0x02,
288
+ /**
289
+ * @DRM_UT_KMS: Used in the modesetting code.
290
+ */
291
+ DRM_UT_KMS = 0x04,
292
+ /**
293
+ * @DRM_UT_PRIME: Used in the prime code.
294
+ */
295
+ DRM_UT_PRIME = 0x08,
296
+ /**
297
+ * @DRM_UT_ATOMIC: Used in the atomic code.
298
+ */
299
+ DRM_UT_ATOMIC = 0x10,
300
+ /**
301
+ * @DRM_UT_VBL: Used for verbose debug message in the vblank code.
302
+ */
303
+ DRM_UT_VBL = 0x20,
304
+ /**
305
+ * @DRM_UT_STATE: Used for verbose atomic state debugging.
306
+ */
307
+ DRM_UT_STATE = 0x40,
308
+ /**
309
+ * @DRM_UT_LEASE: Used in the lease code.
310
+ */
311
+ DRM_UT_LEASE = 0x80,
312
+ /**
313
+ * @DRM_UT_DP: Used in the DP code.
314
+ */
315
+ DRM_UT_DP = 0x100,
316
+ /**
317
+ * @DRM_UT_DRMRES: Used in the drm managed resources code.
318
+ */
319
+ DRM_UT_DRMRES = 0x200,
320
+};
321
+
322
+static inline bool drm_debug_enabled(enum drm_debug_category category)
323
+{
324
+ return unlikely(__drm_debug & category);
325
+}
326
+
327
+/*
328
+ * struct device based logging
329
+ *
330
+ * Prefer drm_device based logging over device or prink based logging.
331
+ */
270332
271333 __printf(3, 4)
272334 void drm_dev_printk(const struct device *dev, const char *level,
273335 const char *format, ...);
274336 __printf(3, 4)
275
-void drm_dev_dbg(const struct device *dev, unsigned int category,
337
+void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,
276338 const char *format, ...);
277339
340
+/**
341
+ * DRM_DEV_ERROR() - Error output.
342
+ *
343
+ * @dev: device pointer
344
+ * @fmt: printf() like format string.
345
+ */
346
+#define DRM_DEV_ERROR(dev, fmt, ...) \
347
+ drm_dev_printk(dev, KERN_ERR, "*ERROR* " fmt, ##__VA_ARGS__)
348
+
349
+/**
350
+ * DRM_DEV_ERROR_RATELIMITED() - Rate limited error output.
351
+ *
352
+ * @dev: device pointer
353
+ * @fmt: printf() like format string.
354
+ *
355
+ * Like DRM_ERROR() but won't flood the log.
356
+ */
357
+#define DRM_DEV_ERROR_RATELIMITED(dev, fmt, ...) \
358
+({ \
359
+ static DEFINE_RATELIMIT_STATE(_rs, \
360
+ DEFAULT_RATELIMIT_INTERVAL, \
361
+ DEFAULT_RATELIMIT_BURST); \
362
+ \
363
+ if (__ratelimit(&_rs)) \
364
+ DRM_DEV_ERROR(dev, fmt, ##__VA_ARGS__); \
365
+})
366
+
367
+#define DRM_DEV_INFO(dev, fmt, ...) \
368
+ drm_dev_printk(dev, KERN_INFO, fmt, ##__VA_ARGS__)
369
+
370
+#define DRM_DEV_INFO_ONCE(dev, fmt, ...) \
371
+({ \
372
+ static bool __print_once __read_mostly; \
373
+ if (!__print_once) { \
374
+ __print_once = true; \
375
+ DRM_DEV_INFO(dev, fmt, ##__VA_ARGS__); \
376
+ } \
377
+})
378
+
379
+/**
380
+ * DRM_DEV_DEBUG() - Debug output for generic drm code
381
+ *
382
+ * @dev: device pointer
383
+ * @fmt: printf() like format string.
384
+ */
385
+#define DRM_DEV_DEBUG(dev, fmt, ...) \
386
+ drm_dev_dbg(dev, DRM_UT_CORE, fmt, ##__VA_ARGS__)
387
+/**
388
+ * DRM_DEV_DEBUG_DRIVER() - Debug output for vendor specific part of the driver
389
+ *
390
+ * @dev: device pointer
391
+ * @fmt: printf() like format string.
392
+ */
393
+#define DRM_DEV_DEBUG_DRIVER(dev, fmt, ...) \
394
+ drm_dev_dbg(dev, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
395
+/**
396
+ * DRM_DEV_DEBUG_KMS() - Debug output for modesetting code
397
+ *
398
+ * @dev: device pointer
399
+ * @fmt: printf() like format string.
400
+ */
401
+#define DRM_DEV_DEBUG_KMS(dev, fmt, ...) \
402
+ drm_dev_dbg(dev, DRM_UT_KMS, fmt, ##__VA_ARGS__)
403
+
404
+/*
405
+ * struct drm_device based logging
406
+ *
407
+ * Prefer drm_device based logging over device or prink based logging.
408
+ */
409
+
410
+/* Helper for struct drm_device based logging. */
411
+#define __drm_printk(drm, level, type, fmt, ...) \
412
+ dev_##level##type((drm)->dev, "[drm] " fmt, ##__VA_ARGS__)
413
+
414
+
415
+#define drm_info(drm, fmt, ...) \
416
+ __drm_printk((drm), info,, fmt, ##__VA_ARGS__)
417
+
418
+#define drm_notice(drm, fmt, ...) \
419
+ __drm_printk((drm), notice,, fmt, ##__VA_ARGS__)
420
+
421
+#define drm_warn(drm, fmt, ...) \
422
+ __drm_printk((drm), warn,, fmt, ##__VA_ARGS__)
423
+
424
+#define drm_err(drm, fmt, ...) \
425
+ __drm_printk((drm), err,, "*ERROR* " fmt, ##__VA_ARGS__)
426
+
427
+
428
+#define drm_info_once(drm, fmt, ...) \
429
+ __drm_printk((drm), info, _once, fmt, ##__VA_ARGS__)
430
+
431
+#define drm_notice_once(drm, fmt, ...) \
432
+ __drm_printk((drm), notice, _once, fmt, ##__VA_ARGS__)
433
+
434
+#define drm_warn_once(drm, fmt, ...) \
435
+ __drm_printk((drm), warn, _once, fmt, ##__VA_ARGS__)
436
+
437
+#define drm_err_once(drm, fmt, ...) \
438
+ __drm_printk((drm), err, _once, "*ERROR* " fmt, ##__VA_ARGS__)
439
+
440
+
441
+#define drm_err_ratelimited(drm, fmt, ...) \
442
+ __drm_printk((drm), err, _ratelimited, "*ERROR* " fmt, ##__VA_ARGS__)
443
+
444
+
445
+#define drm_dbg_core(drm, fmt, ...) \
446
+ drm_dev_dbg((drm)->dev, DRM_UT_CORE, fmt, ##__VA_ARGS__)
447
+#define drm_dbg(drm, fmt, ...) \
448
+ drm_dev_dbg((drm)->dev, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
449
+#define drm_dbg_kms(drm, fmt, ...) \
450
+ drm_dev_dbg((drm)->dev, DRM_UT_KMS, fmt, ##__VA_ARGS__)
451
+#define drm_dbg_prime(drm, fmt, ...) \
452
+ drm_dev_dbg((drm)->dev, DRM_UT_PRIME, fmt, ##__VA_ARGS__)
453
+#define drm_dbg_atomic(drm, fmt, ...) \
454
+ drm_dev_dbg((drm)->dev, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
455
+#define drm_dbg_vbl(drm, fmt, ...) \
456
+ drm_dev_dbg((drm)->dev, DRM_UT_VBL, fmt, ##__VA_ARGS__)
457
+#define drm_dbg_state(drm, fmt, ...) \
458
+ drm_dev_dbg((drm)->dev, DRM_UT_STATE, fmt, ##__VA_ARGS__)
459
+#define drm_dbg_lease(drm, fmt, ...) \
460
+ drm_dev_dbg((drm)->dev, DRM_UT_LEASE, fmt, ##__VA_ARGS__)
461
+#define drm_dbg_dp(drm, fmt, ...) \
462
+ drm_dev_dbg((drm)->dev, DRM_UT_DP, fmt, ##__VA_ARGS__)
463
+#define drm_dbg_drmres(drm, fmt, ...) \
464
+ drm_dev_dbg((drm)->dev, DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
465
+
466
+
467
+/*
468
+ * printk based logging
469
+ *
470
+ * Prefer drm_device based logging over device or prink based logging.
471
+ */
472
+
278473 __printf(2, 3)
279
-void drm_dbg(unsigned int category, const char *format, ...);
474
+void __drm_dbg(enum drm_debug_category category, const char *format, ...);
280475 __printf(1, 2)
281
-void drm_err(const char *format, ...);
476
+void __drm_err(const char *format, ...);
282477
283478 /* Macros to make printk easier */
284479
....@@ -299,128 +494,73 @@
299494 #define DRM_WARN_ONCE(fmt, ...) \
300495 _DRM_PRINTK(_once, WARNING, fmt, ##__VA_ARGS__)
301496
302
-/**
303
- * Error output.
304
- *
305
- * @dev: device pointer
306
- * @fmt: printf() like format string.
307
- */
308
-#define DRM_DEV_ERROR(dev, fmt, ...) \
309
- drm_dev_printk(dev, KERN_ERR, "*ERROR* " fmt, ##__VA_ARGS__)
310497 #define DRM_ERROR(fmt, ...) \
311
- drm_err(fmt, ##__VA_ARGS__)
498
+ __drm_err(fmt, ##__VA_ARGS__)
312499
313
-/**
314
- * Rate limited error output. Like DRM_ERROR() but won't flood the log.
315
- *
316
- * @dev: device pointer
317
- * @fmt: printf() like format string.
318
- */
319
-#define DRM_DEV_ERROR_RATELIMITED(dev, fmt, ...) \
320
-({ \
321
- static DEFINE_RATELIMIT_STATE(_rs, \
322
- DEFAULT_RATELIMIT_INTERVAL, \
323
- DEFAULT_RATELIMIT_BURST); \
324
- \
325
- if (__ratelimit(&_rs)) \
326
- DRM_DEV_ERROR(dev, fmt, ##__VA_ARGS__); \
327
-})
328500 #define DRM_ERROR_RATELIMITED(fmt, ...) \
329501 DRM_DEV_ERROR_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
330502
331
-#define DRM_DEV_INFO(dev, fmt, ...) \
332
- drm_dev_printk(dev, KERN_INFO, fmt, ##__VA_ARGS__)
333
-
334
-#define DRM_DEV_INFO_ONCE(dev, fmt, ...) \
335
-({ \
336
- static bool __print_once __read_mostly; \
337
- if (!__print_once) { \
338
- __print_once = true; \
339
- DRM_DEV_INFO(dev, fmt, ##__VA_ARGS__); \
340
- } \
341
-})
342
-
343
-/**
344
- * Debug output.
345
- *
346
- * @dev: device pointer
347
- * @fmt: printf() like format string.
348
- */
349
-#define DRM_DEV_DEBUG(dev, fmt, ...) \
350
- drm_dev_dbg(dev, DRM_UT_CORE, fmt, ##__VA_ARGS__)
351503 #define DRM_DEBUG(fmt, ...) \
352
- drm_dbg(DRM_UT_CORE, fmt, ##__VA_ARGS__)
504
+ __drm_dbg(DRM_UT_CORE, fmt, ##__VA_ARGS__)
353505
354
-#define DRM_DEV_DEBUG_DRIVER(dev, fmt, ...) \
355
- drm_dev_dbg(dev, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
356506 #define DRM_DEBUG_DRIVER(fmt, ...) \
357
- drm_dbg(DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
507
+ __drm_dbg(DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
358508
359
-#define DRM_DEV_DEBUG_KMS(dev, fmt, ...) \
360
- drm_dev_dbg(dev, DRM_UT_KMS, fmt, ##__VA_ARGS__)
361509 #define DRM_DEBUG_KMS(fmt, ...) \
362
- drm_dbg(DRM_UT_KMS, fmt, ##__VA_ARGS__)
510
+ __drm_dbg(DRM_UT_KMS, fmt, ##__VA_ARGS__)
363511
364
-#define DRM_DEV_DEBUG_PRIME(dev, fmt, ...) \
365
- drm_dev_dbg(dev, DRM_UT_PRIME, fmt, ##__VA_ARGS__)
366512 #define DRM_DEBUG_PRIME(fmt, ...) \
367
- drm_dbg(DRM_UT_PRIME, fmt, ##__VA_ARGS__)
513
+ __drm_dbg(DRM_UT_PRIME, fmt, ##__VA_ARGS__)
368514
369
-#define DRM_DEV_DEBUG_ATOMIC(dev, fmt, ...) \
370
- drm_dev_dbg(dev, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
371515 #define DRM_DEBUG_ATOMIC(fmt, ...) \
372
- drm_dbg(DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
516
+ __drm_dbg(DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
373517
374
-#define DRM_DEV_DEBUG_VBL(dev, fmt, ...) \
375
- drm_dev_dbg(dev, DRM_UT_VBL, fmt, ##__VA_ARGS__)
376518 #define DRM_DEBUG_VBL(fmt, ...) \
377
- drm_dbg(DRM_UT_VBL, fmt, ##__VA_ARGS__)
519
+ __drm_dbg(DRM_UT_VBL, fmt, ##__VA_ARGS__)
378520
379521 #define DRM_DEBUG_LEASE(fmt, ...) \
380
- drm_dbg(DRM_UT_LEASE, fmt, ##__VA_ARGS__)
522
+ __drm_dbg(DRM_UT_LEASE, fmt, ##__VA_ARGS__)
381523
382
-#define DRM_DEV_DEBUG_DP(dev, fmt, ...) \
383
- drm_dev_dbg(dev, DRM_UT_DP, fmt, ## __VA_ARGS__)
384
-#define DRM_DEBUG_DP(dev, fmt, ...) \
385
- drm_dbg(DRM_UT_DP, fmt, ## __VA_ARGS__)
524
+#define DRM_DEBUG_DP(fmt, ...) \
525
+ __drm_dbg(DRM_UT_DP, fmt, ## __VA_ARGS__)
386526
387
-#define _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, category, fmt, ...) \
527
+
528
+#define DRM_DEBUG_KMS_RATELIMITED(fmt, ...) \
388529 ({ \
389530 static DEFINE_RATELIMIT_STATE(_rs, \
390
- DEFAULT_RATELIMIT_INTERVAL, \
391
- DEFAULT_RATELIMIT_BURST); \
531
+ DEFAULT_RATELIMIT_INTERVAL, \
532
+ DEFAULT_RATELIMIT_BURST); \
392533 if (__ratelimit(&_rs)) \
393
- drm_dev_dbg(dev, category, fmt, ##__VA_ARGS__); \
534
+ drm_dev_dbg(NULL, DRM_UT_KMS, fmt, ##__VA_ARGS__); \
394535 })
395536
396
-/**
397
- * Rate limited debug output. Like DRM_DEBUG() but won't flood the log.
537
+/*
538
+ * struct drm_device based WARNs
398539 *
399
- * @dev: device pointer
400
- * @fmt: printf() like format string.
540
+ * drm_WARN*() acts like WARN*(), but with the key difference of
541
+ * using device specific information so that we know from which device
542
+ * warning is originating from.
543
+ *
544
+ * Prefer drm_device based drm_WARN* over regular WARN*
401545 */
402
-#define DRM_DEV_DEBUG_RATELIMITED(dev, fmt, ...) \
403
- _DEV_DRM_DEFINE_DEBUG_RATELIMITED(dev, DRM_UT_CORE, \
404
- fmt, ##__VA_ARGS__)
405
-#define DRM_DEBUG_RATELIMITED(fmt, ...) \
406
- DRM_DEV_DEBUG_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
407546
408
-#define DRM_DEV_DEBUG_DRIVER_RATELIMITED(dev, fmt, ...) \
409
- _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, DRM_UT_DRIVER, \
410
- fmt, ##__VA_ARGS__)
411
-#define DRM_DEBUG_DRIVER_RATELIMITED(fmt, ...) \
412
- DRM_DEV_DEBUG_DRIVER_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
547
+/* Helper for struct drm_device based WARNs */
548
+#define drm_WARN(drm, condition, format, arg...) \
549
+ WARN(condition, "%s %s: " format, \
550
+ dev_driver_string((drm)->dev), \
551
+ dev_name((drm)->dev), ## arg)
413552
414
-#define DRM_DEV_DEBUG_KMS_RATELIMITED(dev, fmt, ...) \
415
- _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, DRM_UT_KMS, \
416
- fmt, ##__VA_ARGS__)
417
-#define DRM_DEBUG_KMS_RATELIMITED(fmt, ...) \
418
- DRM_DEV_DEBUG_KMS_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
553
+#define drm_WARN_ONCE(drm, condition, format, arg...) \
554
+ WARN_ONCE(condition, "%s %s: " format, \
555
+ dev_driver_string((drm)->dev), \
556
+ dev_name((drm)->dev), ## arg)
419557
420
-#define DRM_DEV_DEBUG_PRIME_RATELIMITED(dev, fmt, ...) \
421
- _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, DRM_UT_PRIME, \
422
- fmt, ##__VA_ARGS__)
423
-#define DRM_DEBUG_PRIME_RATELIMITED(fmt, ...) \
424
- DRM_DEV_DEBUG_PRIME_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
558
+#define drm_WARN_ON(drm, x) \
559
+ drm_WARN((drm), (x), "%s", \
560
+ "drm_WARN_ON(" __stringify(x) ")")
561
+
562
+#define drm_WARN_ON_ONCE(drm, x) \
563
+ drm_WARN_ONCE((drm), (x), "%s", \
564
+ "drm_WARN_ON_ONCE(" __stringify(x) ")")
425565
426566 #endif /* DRM_PRINT_H_ */