drm/print: add drm_print_hex_dump()
authorJani Nikula <jani.nikula@intel.com>
Thu, 5 Dec 2024 09:49:33 +0000 (11:49 +0200)
committerJani Nikula <jani.nikula@intel.com>
Tue, 10 Dec 2024 12:08:40 +0000 (14:08 +0200)
Add a helper to print a hex dump to a struct drm_printer. There's no
fancy formatting stuff, just 16 space-separated bytes per line, with an
optional prefix.

Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/f650fe1ed3e3bb74760426fa7461c3b028d661fb.1733392101.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/drm_print.c
include/drm/drm_print.h

index 08cfea04e22bd2942f27c982107af251a56b607e..79517bd4418fe3728c0ecd6a56f2506eb7d28ada 100644 (file)
@@ -390,3 +390,26 @@ void drm_print_regset32(struct drm_printer *p, struct debugfs_regset32 *regset)
        }
 }
 EXPORT_SYMBOL(drm_print_regset32);
+
+/**
+ * drm_print_hex_dump - print a hex dump to a &drm_printer stream
+ * @p: The &drm_printer
+ * @prefix: Prefix for each line, may be NULL for no prefix
+ * @buf: Buffer to dump
+ * @len: Length of buffer
+ *
+ * Print hex dump to &drm_printer, with 16 space-separated hex bytes per line,
+ * optionally with a prefix on each line. No separator is added after prefix.
+ */
+void drm_print_hex_dump(struct drm_printer *p, const char *prefix,
+                       const u8 *buf, size_t len)
+{
+       int i;
+
+       for (i = 0; i < len; i += 16) {
+               int bytes_per_line = min(16, len - i);
+
+               drm_printf(p, "%s%*ph\n", prefix ?: "", bytes_per_line, buf + i);
+       }
+}
+EXPORT_SYMBOL(drm_print_hex_dump);
index b3906dc043886bf141675c2dc7f867a4a0710051..f77fe1531cf835889ee30fbe1172dccbc73ecc12 100644 (file)
@@ -199,6 +199,8 @@ void drm_puts(struct drm_printer *p, const char *str);
 void drm_print_regset32(struct drm_printer *p, struct debugfs_regset32 *regset);
 void drm_print_bits(struct drm_printer *p, unsigned long value,
                    const char * const bits[], unsigned int nbits);
+void drm_print_hex_dump(struct drm_printer *p, const char *prefix,
+                       const u8 *buf, size_t len);
 
 __printf(2, 0)
 /**