linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888
@ 2025-02-21 11:36 Aditya Garg
  2025-02-21 11:37 ` [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc Aditya Garg
                   ` (2 more replies)
  0 siblings, 3 replies; 27+ messages in thread
From: Aditya Garg @ 2025-02-21 11:36 UTC (permalink / raw)
  To: pmladek@suse.com, Steven Rostedt,
	andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com
  Cc: Kerem Karabay, Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

From: Kerem Karabay <kekrby@gmail.com>

Add XRGB8888 emulation helper for devices that only support BGR888.

Signed-off-by: Kerem Karabay <kekrby@gmail.com>
Signed-off-by: Aditya Garg <gargaditya08@live.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
---
v2 -> Fix incorrect description
v3 -> No change in this patch
 drivers/gpu/drm/drm_format_helper.c           | 54 +++++++++++++
 .../gpu/drm/tests/drm_format_helper_test.c    | 81 +++++++++++++++++++
 include/drm/drm_format_helper.h               |  3 +
 3 files changed, 138 insertions(+)

diff --git a/drivers/gpu/drm/drm_format_helper.c b/drivers/gpu/drm/drm_format_helper.c
index b1be458ed..4f60c8d8f 100644
--- a/drivers/gpu/drm/drm_format_helper.c
+++ b/drivers/gpu/drm/drm_format_helper.c
@@ -702,6 +702,57 @@ void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pi
 }
 EXPORT_SYMBOL(drm_fb_xrgb8888_to_rgb888);
 
+static void drm_fb_xrgb8888_to_bgr888_line(void *dbuf, const void *sbuf, unsigned int pixels)
+{
+	u8 *dbuf8 = dbuf;
+	const __le32 *sbuf32 = sbuf;
+	unsigned int x;
+	u32 pix;
+
+	for (x = 0; x < pixels; x++) {
+		pix = le32_to_cpu(sbuf32[x]);
+		/* write red-green-blue to output in little endianness */
+		*dbuf8++ = (pix & 0x00ff0000) >> 16;
+		*dbuf8++ = (pix & 0x0000ff00) >> 8;
+		*dbuf8++ = (pix & 0x000000ff) >> 0;
+	}
+}
+
+/**
+ * drm_fb_xrgb8888_to_bgr888 - Convert XRGB8888 to BGR888 clip buffer
+ * @dst: Array of BGR888 destination buffers
+ * @dst_pitch: Array of numbers of bytes between the start of two consecutive scanlines
+ *             within @dst; can be NULL if scanlines are stored next to each other.
+ * @src: Array of XRGB8888 source buffers
+ * @fb: DRM framebuffer
+ * @clip: Clip rectangle area to copy
+ * @state: Transform and conversion state
+ *
+ * This function copies parts of a framebuffer to display memory and converts the
+ * color format during the process. Destination and framebuffer formats must match. The
+ * parameters @dst, @dst_pitch and @src refer to arrays. Each array must have at
+ * least as many entries as there are planes in @fb's format. Each entry stores the
+ * value for the format's respective color plane at the same index.
+ *
+ * This function does not apply clipping on @dst (i.e. the destination is at the
+ * top-left corner).
+ *
+ * Drivers can use this function for BGR888 devices that don't natively
+ * support XRGB8888.
+ */
+void drm_fb_xrgb8888_to_bgr888(struct iosys_map *dst, const unsigned int *dst_pitch,
+			       const struct iosys_map *src, const struct drm_framebuffer *fb,
+			       const struct drm_rect *clip, struct drm_format_conv_state *state)
+{
+	static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = {
+		3,
+	};
+
+	drm_fb_xfrm(dst, dst_pitch, dst_pixsize, src, fb, clip, false, state,
+		    drm_fb_xrgb8888_to_bgr888_line);
+}
+EXPORT_SYMBOL(drm_fb_xrgb8888_to_bgr888);
+
 static void drm_fb_xrgb8888_to_argb8888_line(void *dbuf, const void *sbuf, unsigned int pixels)
 {
 	__le32 *dbuf32 = dbuf;
@@ -1035,6 +1086,9 @@ int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t d
 		} else if (dst_format == DRM_FORMAT_RGB888) {
 			drm_fb_xrgb8888_to_rgb888(dst, dst_pitch, src, fb, clip, state);
 			return 0;
+		} else if (dst_format == DRM_FORMAT_BGR888) {
+			drm_fb_xrgb8888_to_bgr888(dst, dst_pitch, src, fb, clip, state);
+			return 0;
 		} else if (dst_format == DRM_FORMAT_ARGB8888) {
 			drm_fb_xrgb8888_to_argb8888(dst, dst_pitch, src, fb, clip, state);
 			return 0;
diff --git a/drivers/gpu/drm/tests/drm_format_helper_test.c b/drivers/gpu/drm/tests/drm_format_helper_test.c
index 08992636e..35cd3405d 100644
--- a/drivers/gpu/drm/tests/drm_format_helper_test.c
+++ b/drivers/gpu/drm/tests/drm_format_helper_test.c
@@ -60,6 +60,11 @@ struct convert_to_rgb888_result {
 	const u8 expected[TEST_BUF_SIZE];
 };
 
+struct convert_to_bgr888_result {
+	unsigned int dst_pitch;
+	const u8 expected[TEST_BUF_SIZE];
+};
+
 struct convert_to_argb8888_result {
 	unsigned int dst_pitch;
 	const u32 expected[TEST_BUF_SIZE];
@@ -107,6 +112,7 @@ struct convert_xrgb8888_case {
 	struct convert_to_argb1555_result argb1555_result;
 	struct convert_to_rgba5551_result rgba5551_result;
 	struct convert_to_rgb888_result rgb888_result;
+	struct convert_to_bgr888_result bgr888_result;
 	struct convert_to_argb8888_result argb8888_result;
 	struct convert_to_xrgb2101010_result xrgb2101010_result;
 	struct convert_to_argb2101010_result argb2101010_result;
@@ -151,6 +157,10 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
 			.dst_pitch = TEST_USE_DEFAULT_PITCH,
 			.expected = { 0x00, 0x00, 0xFF },
 		},
+		.bgr888_result = {
+			.dst_pitch = TEST_USE_DEFAULT_PITCH,
+			.expected = { 0xFF, 0x00, 0x00 },
+		},
 		.argb8888_result = {
 			.dst_pitch = TEST_USE_DEFAULT_PITCH,
 			.expected = { 0xFFFF0000 },
@@ -217,6 +227,10 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
 			.dst_pitch = TEST_USE_DEFAULT_PITCH,
 			.expected = { 0x00, 0x00, 0xFF },
 		},
+		.bgr888_result = {
+			.dst_pitch = TEST_USE_DEFAULT_PITCH,
+			.expected = { 0xFF, 0x00, 0x00 },
+		},
 		.argb8888_result = {
 			.dst_pitch = TEST_USE_DEFAULT_PITCH,
 			.expected = { 0xFFFF0000 },
@@ -330,6 +344,15 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
 				0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
 			},
 		},
+		.bgr888_result = {
+			.dst_pitch = TEST_USE_DEFAULT_PITCH,
+			.expected = {
+				0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+				0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00,
+				0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
+				0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF,
+			},
+		},
 		.argb8888_result = {
 			.dst_pitch = TEST_USE_DEFAULT_PITCH,
 			.expected = {
@@ -468,6 +491,17 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {
 				0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 			},
 		},
+		.bgr888_result = {
+			.dst_pitch = 15,
+			.expected = {
+				0x0E, 0x44, 0x9C, 0x11, 0x4D, 0x05, 0xA8, 0xF3, 0x03,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x6C, 0xF0, 0x73, 0x0E, 0x44, 0x9C, 0x11, 0x4D, 0x05,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xA8, 0x03, 0x03, 0x6C, 0xF0, 0x73, 0x0E, 0x44, 0x9C,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		},
 		.argb8888_result = {
 			.dst_pitch = 20,
 			.expected = {
@@ -914,6 +948,52 @@ static void drm_test_fb_xrgb8888_to_rgb888(struct kunit *test)
 	KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);
 }
 
+static void drm_test_fb_xrgb8888_to_bgr888(struct kunit *test)
+{
+	const struct convert_xrgb8888_case *params = test->param_value;
+	const struct convert_to_bgr888_result *result = &params->bgr888_result;
+	size_t dst_size;
+	u8 *buf = NULL;
+	__le32 *xrgb8888 = NULL;
+	struct iosys_map dst, src;
+
+	struct drm_framebuffer fb = {
+		.format = drm_format_info(DRM_FORMAT_XRGB8888),
+		.pitches = { params->pitch, 0, 0 },
+	};
+
+	dst_size = conversion_buf_size(DRM_FORMAT_BGR888, result->dst_pitch,
+				       &params->clip, 0);
+	KUNIT_ASSERT_GT(test, dst_size, 0);
+
+	buf = kunit_kzalloc(test, dst_size, GFP_KERNEL);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
+	iosys_map_set_vaddr(&dst, buf);
+
+	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888);
+	iosys_map_set_vaddr(&src, xrgb8888);
+
+	/*
+	 * BGR888 expected results are already in little-endian
+	 * order, so there's no need to convert the test output.
+	 */
+	drm_fb_xrgb8888_to_bgr888(&dst, &result->dst_pitch, &src, &fb, &params->clip,
+				  &fmtcnv_state);
+	KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);
+
+	buf = dst.vaddr; /* restore original value of buf */
+	memset(buf, 0, dst_size);
+
+	int blit_result = 0;
+
+	blit_result = drm_fb_blit(&dst, &result->dst_pitch, DRM_FORMAT_BGR888, &src, &fb, &params->clip,
+				  &fmtcnv_state);
+
+	KUNIT_EXPECT_FALSE(test, blit_result);
+	KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);
+}
+
 static void drm_test_fb_xrgb8888_to_argb8888(struct kunit *test)
 {
 	const struct convert_xrgb8888_case *params = test->param_value;
@@ -1851,6 +1931,7 @@ static struct kunit_case drm_format_helper_test_cases[] = {
 	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb1555, convert_xrgb8888_gen_params),
 	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgba5551, convert_xrgb8888_gen_params),
 	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb888, convert_xrgb8888_gen_params),
+	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_bgr888, convert_xrgb8888_gen_params),
 	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb8888, convert_xrgb8888_gen_params),
 	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_xrgb2101010, convert_xrgb8888_gen_params),
 	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb2101010, convert_xrgb8888_gen_params),
diff --git a/include/drm/drm_format_helper.h b/include/drm/drm_format_helper.h
index 428d81afe..aa1604d92 100644
--- a/include/drm/drm_format_helper.h
+++ b/include/drm/drm_format_helper.h
@@ -96,6 +96,9 @@ void drm_fb_xrgb8888_to_rgba5551(struct iosys_map *dst, const unsigned int *dst_
 void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pitch,
 			       const struct iosys_map *src, const struct drm_framebuffer *fb,
 			       const struct drm_rect *clip, struct drm_format_conv_state *state);
+void drm_fb_xrgb8888_to_bgr888(struct iosys_map *dst, const unsigned int *dst_pitch,
+			       const struct iosys_map *src, const struct drm_framebuffer *fb,
+			       const struct drm_rect *clip, struct drm_format_conv_state *state);
 void drm_fb_xrgb8888_to_argb8888(struct iosys_map *dst, const unsigned int *dst_pitch,
 				 const struct iosys_map *src, const struct drm_framebuffer *fb,
 				 const struct drm_rect *clip, struct drm_format_conv_state *state);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc
  2025-02-21 11:36 [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888 Aditya Garg
@ 2025-02-21 11:37 ` Aditya Garg
  2025-02-21 11:54   ` Rasmus Villemoes
  2025-02-21 15:29   ` andriy.shevchenko
  2025-02-21 11:37 ` [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs Aditya Garg
  2025-02-21 15:51 ` [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888 andriy.shevchenko
  2 siblings, 2 replies; 27+ messages in thread
From: Aditya Garg @ 2025-02-21 11:37 UTC (permalink / raw)
  To: pmladek@suse.com, Steven Rostedt,
	andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com
  Cc: Kerem Karabay, Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

From: Hector Martin <marcan@marcan.st>

%p4cc is designed for DRM/V4L2 FOURCCs with their specific quirks, but
it's useful to be able to print generic 4-character codes formatted as
an integer. Extend it to add format specifiers for printing generic
32-bit FOURCCs with various endian semantics:

%p4ch   Host-endian
%p4cl	Little-endian
%p4cb	Big-endian
%p4cr	Reverse-endian

The endianness determines how bytes are interpreted as a u32, and the
FOURCC is then always printed MSByte-first (this is the opposite of
V4L/DRM FOURCCs). This covers most practical cases, e.g. %p4cr would
allow printing LSByte-first FOURCCs stored in host endian order
(other than the hex form being in character order, not the integer
value).

Signed-off-by: Hector Martin <marcan@marcan.st>
Signed-off-by: Aditya Garg <gargaditya08@live.com>
---
v2 -> Add this patch
v3 -> Make array static
 Documentation/core-api/printk-formats.rst | 32 +++++++++++++++++++
 lib/test_printf.c                         | 39 +++++++++++++++++++----
 lib/vsprintf.c                            | 38 ++++++++++++++++++----
 scripts/checkpatch.pl                     |  2 +-
 4 files changed, 97 insertions(+), 14 deletions(-)

diff --git a/Documentation/core-api/printk-formats.rst b/Documentation/core-api/printk-formats.rst
index ecccc0473..9982861fa 100644
--- a/Documentation/core-api/printk-formats.rst
+++ b/Documentation/core-api/printk-formats.rst
@@ -648,6 +648,38 @@ Examples::
 	%p4cc	Y10  little-endian (0x20303159)
 	%p4cc	NV12 big-endian (0xb231564e)
 
+Generic FourCC code
+-------------------
+
+::
+	%p4c[hrbl]	gP00 (0x67503030)
+
+Print a generic FourCC code, as both ASCII characters and its numerical
+value as hexadecimal.
+
+The additional ``h``, ``r``, ``b``, and ``l`` specifiers are used to specify
+host, reversed, big or little endian order data respectively. Host endian
+order means the data is interpreted as a 32-bit integer and the most
+significant byte is printed first; that is, the character code as printed
+matches the byte order stored in memory on big-endian systems, and is reversed
+on little-endian systems.
+
+Passed by reference.
+
+Examples for a little-endian machine, given &(u32)0x67503030::
+
+	%p4ch	gP00 (0x67503030)
+	%p4cr	00Pg (0x30305067)
+	%p4cb	00Pg (0x30305067)
+	%p4cl	gP00 (0x67503030)
+
+Examples for a big-endian machine, given &(u32)0x67503030::
+
+	%p4ch	gP00 (0x67503030)
+	%p4cr	00Pg (0x30305067)
+	%p4cb	gP00 (0x67503030)
+	%p4cl	00Pg (0x30305067)
+
 Rust
 ----
 
diff --git a/lib/test_printf.c b/lib/test_printf.c
index 59dbe4f9a..4bde40822 100644
--- a/lib/test_printf.c
+++ b/lib/test_printf.c
@@ -776,21 +776,46 @@ static void __init fwnode_pointer(void)
 	software_node_unregister_node_group(group);
 }
 
+struct fourcc_struct {
+	u32 code;
+	const char *str;
+};
+
+static void __init fourcc_pointer_test(const struct fourcc_struct *fc, size_t n,
+				       const char *fmt)
+{
+	size_t i;
+
+	for (i = 0; i < n; i++)
+		test(fc[i].str, fmt, &fc[i].code);
+}
+
 static void __init fourcc_pointer(void)
 {
-	struct {
-		u32 code;
-		char *str;
-	} const try[] = {
+	static const struct fourcc_struct try_cc[] = {
 		{ 0x3231564e, "NV12 little-endian (0x3231564e)", },
 		{ 0xb231564e, "NV12 big-endian (0xb231564e)", },
 		{ 0x10111213, ".... little-endian (0x10111213)", },
 		{ 0x20303159, "Y10  little-endian (0x20303159)", },
 	};
-	unsigned int i;
+	static const struct fourcc_struct try_ch = {
+		0x41424344, "ABCD (0x41424344)",
+	};
+	struct const struct fourcc_struct try_cr = {
+		0x41424344, "DCBA (0x44434241)",
+	};
+	static const struct fourcc_struct try_cl = {
+		le32_to_cpu(0x41424344), "ABCD (0x41424344)",
+	};
+	struct const struct fourcc_struct try_cb = {
+		be32_to_cpu(0x41424344), "ABCD (0x41424344)",
+	};
 
-	for (i = 0; i < ARRAY_SIZE(try); i++)
-		test(try[i].str, "%p4cc", &try[i].code);
+	fourcc_pointer_test(try_cc, ARRAY_SIZE(try_cc), "%p4cc");
+	fourcc_pointer_test(&try_ch, 1, "%p4ch");
+	fourcc_pointer_test(&try_cr, 1, "%p4cr");
+	fourcc_pointer_test(&try_cl, 1, "%p4cl");
+	fourcc_pointer_test(&try_cb, 1, "%p4cb");
 }
 
 static void __init
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 56fe96319..13733a4da 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -1781,27 +1781,53 @@ char *fourcc_string(char *buf, char *end, const u32 *fourcc,
 	char output[sizeof("0123 little-endian (0x01234567)")];
 	char *p = output;
 	unsigned int i;
+	bool pixel_fmt = false;
 	u32 orig, val;
 
-	if (fmt[1] != 'c' || fmt[2] != 'c')
+	if (fmt[1] != 'c')
 		return error_string(buf, end, "(%p4?)", spec);
 
 	if (check_pointer(&buf, end, fourcc, spec))
 		return buf;
 
 	orig = get_unaligned(fourcc);
-	val = orig & ~BIT(31);
+	switch (fmt[2]) {
+	case 'h':
+		val = orig;
+		break;
+	case 'r':
+		orig = swab32(orig);
+		val = orig;
+		break;
+	case 'l':
+		orig = le32_to_cpu(orig);
+		val = orig;
+		break;
+	case 'b':
+		orig = be32_to_cpu(orig);
+		val = orig;
+		break;
+	case 'c':
+		/* Pixel formats are printed LSB-first */
+		val = swab32(orig & ~BIT(31));
+		pixel_fmt = true;
+		break;
+	default:
+		return error_string(buf, end, "(%p4?)", spec);
+	}
 
 	for (i = 0; i < sizeof(u32); i++) {
-		unsigned char c = val >> (i * 8);
+		unsigned char c = val >> ((3 - i) * 8);
 
 		/* Print non-control ASCII characters as-is, dot otherwise */
 		*p++ = isascii(c) && isprint(c) ? c : '.';
 	}
 
-	*p++ = ' ';
-	strcpy(p, orig & BIT(31) ? "big-endian" : "little-endian");
-	p += strlen(p);
+	if (pixel_fmt) {
+		*p++ = ' ';
+		strcpy(p, orig & BIT(31) ? "big-endian" : "little-endian");
+		p += strlen(p);
+	}
 
 	*p++ = ' ';
 	*p++ = '(';
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 7b28ad331..21516f753 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -6904,7 +6904,7 @@ sub process {
 					    ($extension eq "f" &&
 					     defined $qualifier && $qualifier !~ /^w/) ||
 					    ($extension eq "4" &&
-					     defined $qualifier && $qualifier !~ /^cc/)) {
+					     defined $qualifier && $qualifier !~ /^c[chlbr]/)) {
 						$bad_specifier = $specifier;
 						last;
 					}
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-21 11:36 [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888 Aditya Garg
  2025-02-21 11:37 ` [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc Aditya Garg
@ 2025-02-21 11:37 ` Aditya Garg
  2025-02-21 15:48   ` andriy.shevchenko
  2025-02-24  9:09   ` Thomas Zimmermann
  2025-02-21 15:51 ` [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888 andriy.shevchenko
  2 siblings, 2 replies; 27+ messages in thread
From: Aditya Garg @ 2025-02-21 11:37 UTC (permalink / raw)
  To: pmladek@suse.com, Steven Rostedt,
	andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com
  Cc: Kerem Karabay, Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

From: Kerem Karabay <kekrby@gmail.com>

The Touch Bars found on x86 Macs support two USB configurations: one
where the device presents itself as a HID keyboard and can display
predefined sets of keys, and one where the operating system has full
control over what is displayed.

This commit adds support for the display functionality of the second
configuration. Functionality for the first configuration has been
merged in the HID tree.

Note that this driver has only been tested on T2 Macs, and only includes
the USB device ID for these devices. Testing on T1 Macs would be
appreciated.

Credit goes to Ben (Bingxing) Wang on GitHub [1] for reverse engineering
most of the protocol.

[1]: https://github.com/imbushuo/DFRDisplayKm

Signed-off-by: Kerem Karabay <kekrby@gmail.com>
Co-developed-by: Atharva Tiwari <evepolonium@gmail.com>
Signed-off-by: Atharva Tiwari <evepolonium@gmail.com>
Co-developed-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
---
v2 ->
- Add the driver to MAINTAINERS.
- Allocate memory for request and response in plane's atomic-check helper
- Void the use of drm_fb_blit()
- Implement atomic_disable
- Make PRIME work
- Remove the date field from struct drm_driver 
- intersect damage with dst_clip
- Register DRM device in appletbdrm_probe
- Clear the display as the final call in probe
- Select hid_multitouch as well in kconfig

v3 ->
- Change commit message to credit Ben (Bingxing) Wang
 MAINTAINERS                       |   7 +
 drivers/gpu/drm/tiny/Kconfig      |  14 +
 drivers/gpu/drm/tiny/Makefile     |   1 +
 drivers/gpu/drm/tiny/appletbdrm.c | 806 ++++++++++++++++++++++++++++++
 4 files changed, 828 insertions(+)
 create mode 100644 drivers/gpu/drm/tiny/appletbdrm.c

diff --git a/MAINTAINERS b/MAINTAINERS
index efee40ea5..43fafaab3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -7148,6 +7148,13 @@ S:	Supported
 T:	git https://gitlab.freedesktop.org/drm/misc/kernel.git
 F:	drivers/gpu/drm/sun4i/sun8i*
 
+DRM DRIVER FOR APPLE TOUCH BARS
+M:	Aun-Ali Zaidi <admin@kodeit.net>
+L:	dri-devel@lists.freedesktop.org
+S:	Maintained
+T:	git https://gitlab.freedesktop.org/drm/misc/kernel.git
+F:	drivers/gpu/drm/tiny/appletbdrm.c
+
 DRM DRIVER FOR ARM PL111 CLCD
 M:	Linus Walleij <linus.walleij@linaro.org>
 S:	Maintained
diff --git a/drivers/gpu/drm/tiny/Kconfig b/drivers/gpu/drm/tiny/Kconfig
index 94cbdb133..25471791c 100644
--- a/drivers/gpu/drm/tiny/Kconfig
+++ b/drivers/gpu/drm/tiny/Kconfig
@@ -1,5 +1,19 @@
 # SPDX-License-Identifier: GPL-2.0-only
 
+config DRM_APPLETBDRM
+	tristate "DRM support for Apple Touch Bars"
+	depends on DRM && USB && MMU
+	select DRM_GEM_SHMEM_HELPER
+	select DRM_KMS_HELPER
+	select HID_APPLETB_BL
+	select HID_MULTITOUCH
+	help
+	  Say Y here if you want support for the display of Touch Bars on x86
+	  MacBook Pros.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called appletbdrm.
+
 config DRM_ARCPGU
 	tristate "ARC PGU"
 	depends on DRM && OF
diff --git a/drivers/gpu/drm/tiny/Makefile b/drivers/gpu/drm/tiny/Makefile
index 60816d2eb..0a3a7837a 100644
--- a/drivers/gpu/drm/tiny/Makefile
+++ b/drivers/gpu/drm/tiny/Makefile
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0-only
 
+obj-$(CONFIG_DRM_APPLETBDRM)		+= appletbdrm.o
 obj-$(CONFIG_DRM_ARCPGU)		+= arcpgu.o
 obj-$(CONFIG_DRM_BOCHS)			+= bochs.o
 obj-$(CONFIG_DRM_CIRRUS_QEMU)		+= cirrus-qemu.o
diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c
new file mode 100644
index 000000000..a17a3ecc3
--- /dev/null
+++ b/drivers/gpu/drm/tiny/appletbdrm.c
@@ -0,0 +1,806 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Apple Touch Bar DRM Driver
+ *
+ * Copyright (c) 2023 Kerem Karabay <kekrby@gmail.com>
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/module.h>
+#include <linux/unaligned.h>
+#include <linux/usb.h>
+
+#include <drm/drm_atomic.h>
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_crtc.h>
+#include <drm/drm_damage_helper.h>
+#include <drm/drm_drv.h>
+#include <drm/drm_encoder.h>
+#include <drm/drm_format_helper.h>
+#include <drm/drm_fourcc.h>
+#include <drm/drm_framebuffer.h>
+#include <drm/drm_gem_atomic_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
+#include <drm/drm_gem_shmem_helper.h>
+#include <drm/drm_plane.h>
+#include <drm/drm_probe_helper.h>
+
+#define __APPLETBDRM_MSG_STR4(str4)	((__le32 __force)((str4[0] << 24) | (str4[1] << 16) | (str4[2] << 8) | str4[3]))
+#define __APPLETBDRM_MSG_TOK4(tok4)	__APPLETBDRM_MSG_STR4(#tok4)
+
+#define APPLETBDRM_PIXEL_FORMAT		__APPLETBDRM_MSG_TOK4(RGBA) /* The actual format is BGR888 */
+#define APPLETBDRM_BITS_PER_PIXEL	24
+
+#define APPLETBDRM_MSG_CLEAR_DISPLAY	__APPLETBDRM_MSG_TOK4(CLRD)
+#define APPLETBDRM_MSG_GET_INFORMATION	__APPLETBDRM_MSG_TOK4(GINF)
+#define APPLETBDRM_MSG_UPDATE_COMPLETE	__APPLETBDRM_MSG_TOK4(UDCL)
+#define APPLETBDRM_MSG_SIGNAL_READINESS	__APPLETBDRM_MSG_TOK4(REDY)
+
+#define APPLETBDRM_BULK_MSG_TIMEOUT	1000
+
+#define drm_to_adev(_drm)		container_of(_drm, struct appletbdrm_device, drm)
+#define adev_to_udev(adev)		interface_to_usbdev(to_usb_interface(adev->dev))
+
+struct appletbdrm_msg_request_header {
+	__le16 unk_00;
+	__le16 unk_02;
+	__le32 unk_04;
+	__le32 unk_08;
+	__le32 size;
+} __packed;
+
+struct appletbdrm_msg_response_header {
+	u8 unk_00[16];
+	__le32 msg;
+} __packed;
+
+struct appletbdrm_msg_simple_request {
+	struct appletbdrm_msg_request_header header;
+	__le32 msg;
+	u8 unk_14[8];
+	__le32 size;
+} __packed;
+
+struct appletbdrm_msg_information {
+	struct appletbdrm_msg_response_header header;
+	u8 unk_14[12];
+	__le32 width;
+	__le32 height;
+	u8 bits_per_pixel;
+	__le32 bytes_per_row;
+	__le32 orientation;
+	__le32 bitmap_info;
+	__le32 pixel_format;
+	__le32 width_inches;	/* floating point */
+	__le32 height_inches;	/* floating point */
+} __packed;
+
+struct appletbdrm_frame {
+	__le16 begin_x;
+	__le16 begin_y;
+	__le16 width;
+	__le16 height;
+	__le32 buf_size;
+	u8 buf[];
+} __packed;
+
+struct appletbdrm_fb_request_footer {
+	u8 unk_00[12];
+	__le32 unk_0c;
+	u8 unk_10[12];
+	__le32 unk_1c;
+	__le64 timestamp;
+	u8 unk_28[12];
+	__le32 unk_34;
+	u8 unk_38[20];
+	__le32 unk_4c;
+} __packed;
+
+struct appletbdrm_fb_request {
+	struct appletbdrm_msg_request_header header;
+	__le16 unk_10;
+	u8 msg_id;
+	u8 unk_13[29];
+	/*
+	 * Contents of `data`:
+	 * - struct appletbdrm_frame frames[];
+	 * - struct appletbdrm_fb_request_footer footer;
+	 * - padding to make the total size a multiple of 16
+	 */
+	u8 data[];
+} __packed;
+
+struct appletbdrm_fb_request_response {
+	struct appletbdrm_msg_response_header header;
+	u8 unk_14[12];
+	__le64 timestamp;
+} __packed;
+
+struct appletbdrm_device {
+	struct device *dev;
+	struct device *dmadev;
+
+	unsigned int in_ep;
+	unsigned int out_ep;
+
+	unsigned int width;
+	unsigned int height;
+
+	struct drm_device drm;
+	struct drm_display_mode mode;
+	struct drm_connector connector;
+	struct drm_plane primary_plane;
+	struct drm_crtc crtc;
+	struct drm_encoder encoder;
+};
+
+struct appletbdrm_plane_state {
+	struct drm_shadow_plane_state base;
+	struct appletbdrm_fb_request *request;
+	struct appletbdrm_fb_request_response *response;
+	size_t request_size;
+	size_t frames_size;
+};
+
+static inline struct appletbdrm_plane_state *to_appletbdrm_plane_state(struct drm_plane_state *state)
+{
+	return container_of(state, struct appletbdrm_plane_state, base.base);
+}
+
+static int appletbdrm_send_request(struct appletbdrm_device *adev,
+				   struct appletbdrm_msg_request_header *request, size_t size)
+{
+	struct usb_device *udev = adev_to_udev(adev);
+	struct drm_device *drm = &adev->drm;
+	int ret, actual_size;
+
+	ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, adev->out_ep),
+			   request, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
+	if (ret) {
+		drm_err(drm, "Failed to send message (%d)\n", ret);
+		return ret;
+	}
+
+	if (actual_size != size) {
+		drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
+			actual_size, size);
+		return -EIO;
+	}
+
+	return ret;
+}
+
+static int appletbdrm_read_response(struct appletbdrm_device *adev,
+				    struct appletbdrm_msg_response_header *response,
+				    size_t size, u32 expected_response)
+{
+	struct usb_device *udev = adev_to_udev(adev);
+	struct drm_device *drm = &adev->drm;
+	int ret, actual_size;
+	bool readiness_signal_received = false;
+
+retry:
+	ret = usb_bulk_msg(udev, usb_rcvbulkpipe(udev, adev->in_ep),
+			   response, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
+	if (ret) {
+		drm_err(drm, "Failed to read response (%d)\n", ret);
+		return ret;
+	}
+
+	/*
+	 * The device responds to the first request sent in a particular
+	 * timeframe after the USB device configuration is set with a readiness
+	 * signal, in which case the response should be read again
+	 */
+	if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
+		if (!readiness_signal_received) {
+			readiness_signal_received = true;
+			goto retry;
+		}
+
+		drm_err(drm, "Encountered unexpected readiness signal\n");
+		return -EIO;
+	}
+
+	if (actual_size != size) {
+		drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
+			actual_size, size);
+		return -EIO;
+	}
+
+	if (response->msg != expected_response) {
+		drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
+			&expected_response, &response->msg);
+		return -EIO;
+	}
+
+	return 0;
+}
+
+static int appletbdrm_send_msg(struct appletbdrm_device *adev, u32 msg)
+{
+	struct appletbdrm_msg_simple_request *request;
+	int ret;
+
+	request = kzalloc(sizeof(*request), GFP_KERNEL);
+	if (!request)
+		return -ENOMEM;
+
+	request->header.unk_00 = cpu_to_le16(2);
+	request->header.unk_02 = cpu_to_le16(0x1512);
+	request->header.size = cpu_to_le32(sizeof(*request) - sizeof(request->header));
+	request->msg = msg;
+	request->size = request->header.size;
+
+	ret = appletbdrm_send_request(adev, &request->header, sizeof(*request));
+
+	kfree(request);
+
+	return ret;
+}
+
+static int appletbdrm_clear_display(struct appletbdrm_device *adev)
+{
+	return appletbdrm_send_msg(adev, APPLETBDRM_MSG_CLEAR_DISPLAY);
+}
+
+static int appletbdrm_signal_readiness(struct appletbdrm_device *adev)
+{
+	return appletbdrm_send_msg(adev, APPLETBDRM_MSG_SIGNAL_READINESS);
+}
+
+static int appletbdrm_get_information(struct appletbdrm_device *adev)
+{
+	struct appletbdrm_msg_information *info;
+	struct drm_device *drm = &adev->drm;
+	u8 bits_per_pixel;
+	u32 pixel_format;
+	int ret;
+
+	info = kzalloc(sizeof(*info), GFP_KERNEL);
+	if (!info)
+		return -ENOMEM;
+
+	ret = appletbdrm_send_msg(adev, APPLETBDRM_MSG_GET_INFORMATION);
+	if (ret)
+		return ret;
+
+	ret = appletbdrm_read_response(adev, &info->header, sizeof(*info),
+				       APPLETBDRM_MSG_GET_INFORMATION);
+	if (ret)
+		goto free_info;
+
+	bits_per_pixel = info->bits_per_pixel;
+	pixel_format = get_unaligned(&info->pixel_format);
+
+	adev->width = get_unaligned_le32(&info->width);
+	adev->height = get_unaligned_le32(&info->height);
+
+	if (bits_per_pixel != APPLETBDRM_BITS_PER_PIXEL) {
+		drm_err(drm, "Encountered unexpected bits per pixel value (%d)\n", bits_per_pixel);
+		ret = -EINVAL;
+		goto free_info;
+	}
+
+	if (pixel_format != APPLETBDRM_PIXEL_FORMAT) {
+		drm_err(drm, "Encountered unknown pixel format (%p4ch)\n", &pixel_format);
+		ret = -EINVAL;
+		goto free_info;
+	}
+
+free_info:
+	kfree(info);
+
+	return ret;
+}
+
+static u32 rect_size(struct drm_rect *rect)
+{
+	return drm_rect_width(rect) * drm_rect_height(rect) * (APPLETBDRM_BITS_PER_PIXEL / 8);
+}
+
+static int appletbdrm_connector_helper_get_modes(struct drm_connector *connector)
+{
+	struct appletbdrm_device *adev = drm_to_adev(connector->dev);
+
+	return drm_connector_helper_get_modes_fixed(connector, &adev->mode);
+}
+
+static const u32 appletbdrm_primary_plane_formats[] = {
+	DRM_FORMAT_BGR888,
+	DRM_FORMAT_XRGB8888, /* emulated */
+};
+
+static int appletbdrm_primary_plane_helper_atomic_check(struct drm_plane *plane,
+						   struct drm_atomic_state *state)
+{
+	struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state, plane);
+	struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(state, plane);
+	struct drm_crtc *new_crtc = new_plane_state->crtc;
+	struct drm_crtc_state *new_crtc_state = NULL;
+	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(new_plane_state);
+	struct drm_atomic_helper_damage_iter iter;
+	struct drm_rect damage;
+	size_t frames_size = 0;
+	size_t request_size;
+	int ret;
+
+	if (new_crtc)
+		new_crtc_state = drm_atomic_get_new_crtc_state(state, new_crtc);
+
+	ret = drm_atomic_helper_check_plane_state(new_plane_state, new_crtc_state,
+						  DRM_PLANE_NO_SCALING,
+						  DRM_PLANE_NO_SCALING,
+						  false, false);
+	if (ret)
+		return ret;
+	else if (!new_plane_state->visible)
+		return 0;
+
+	drm_atomic_helper_damage_iter_init(&iter, old_plane_state, new_plane_state);
+	drm_atomic_for_each_plane_damage(&iter, &damage) {
+		frames_size += struct_size((struct appletbdrm_frame *)0, buf, rect_size(&damage));
+	}
+
+	if (!frames_size)
+		return 0;
+
+	request_size = ALIGN(sizeof(struct appletbdrm_fb_request) +
+		       frames_size +
+		       sizeof(struct appletbdrm_fb_request_footer), 16);
+
+	appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
+
+	if (!appletbdrm_state->request)
+		return -ENOMEM;
+
+	appletbdrm_state->response = kzalloc(sizeof(*appletbdrm_state->response), GFP_KERNEL);
+
+	if (!appletbdrm_state->response)
+		return -ENOMEM;
+
+	appletbdrm_state->request_size = request_size;
+	appletbdrm_state->frames_size = frames_size;
+
+	return 0;
+}
+
+static int appletbdrm_flush_damage(struct appletbdrm_device *adev,
+				   struct drm_plane_state *old_state,
+				   struct drm_plane_state *state)
+{
+	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
+	struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state);
+	struct appletbdrm_fb_request_response *response = appletbdrm_state->response;
+	struct appletbdrm_fb_request_footer *footer;
+	struct drm_atomic_helper_damage_iter iter;
+	struct drm_framebuffer *fb = state->fb;
+	struct appletbdrm_fb_request *request = appletbdrm_state->request;
+	struct drm_device *drm = &adev->drm;
+	struct appletbdrm_frame *frame;
+	u64 timestamp = ktime_get_ns();
+	struct drm_rect damage;
+	size_t frames_size = appletbdrm_state->frames_size;
+	size_t request_size = appletbdrm_state->request_size;
+	int ret;
+
+	if (!frames_size)
+		return 0;
+
+	ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE);
+	if (ret) {
+		drm_err(drm, "Failed to start CPU framebuffer access (%d)\n", ret);
+		goto end_fb_cpu_access;
+	}
+
+	request->header.unk_00 = cpu_to_le16(2);
+	request->header.unk_02 = cpu_to_le16(0x12);
+	request->header.unk_04 = cpu_to_le32(9);
+	request->header.size = cpu_to_le32(request_size - sizeof(request->header));
+	request->unk_10 = cpu_to_le16(1);
+	request->msg_id = timestamp & 0xff;
+
+	frame = (struct appletbdrm_frame *)request->data;
+
+	drm_atomic_helper_damage_iter_init(&iter, old_state, state);
+	drm_atomic_for_each_plane_damage(&iter, &damage) {
+		struct drm_rect dst_clip = state->dst;
+		struct iosys_map dst = IOSYS_MAP_INIT_VADDR(frame->buf);
+		u32 buf_size = rect_size(&damage);
+
+		if (!drm_rect_intersect(&dst_clip, &damage))
+			continue;
+
+		/*
+		 * The coordinates need to be translated to the coordinate
+		 * system the device expects, see the comment in
+		 * appletbdrm_setup_mode_config
+		 */
+		frame->begin_x = cpu_to_le16(damage.y1);
+		frame->begin_y = cpu_to_le16(adev->height - damage.x2);
+		frame->width = cpu_to_le16(drm_rect_height(&damage));
+		frame->height = cpu_to_le16(drm_rect_width(&damage));
+		frame->buf_size = cpu_to_le32(buf_size);
+
+		switch (fb->format->format) {
+		case DRM_FORMAT_XRGB8888:
+			drm_fb_xrgb8888_to_bgr888(&dst, NULL, &shadow_plane_state->data[0], fb, &damage, &shadow_plane_state->fmtcnv_state);
+			break;
+		default:
+			drm_fb_memcpy(&dst, NULL, &shadow_plane_state->data[0], fb, &damage);
+			break;
+		}
+
+		frame = (void *)frame + struct_size(frame, buf, buf_size);
+	}
+
+	footer = (struct appletbdrm_fb_request_footer *)&request->data[frames_size];
+
+	footer->unk_0c = cpu_to_le32(0xfffe);
+	footer->unk_1c = cpu_to_le32(0x80001);
+	footer->unk_34 = cpu_to_le32(0x80002);
+	footer->unk_4c = cpu_to_le32(0xffff);
+	footer->timestamp = cpu_to_le64(timestamp);
+
+	ret = appletbdrm_send_request(adev, &request->header, request_size);
+	if (ret)
+		goto end_fb_cpu_access;
+
+	ret = appletbdrm_read_response(adev, &response->header, sizeof(*response),
+				       APPLETBDRM_MSG_UPDATE_COMPLETE);
+	if (ret)
+		goto end_fb_cpu_access;
+
+	if (response->timestamp != footer->timestamp) {
+		drm_err(drm, "Response timestamp (%llu) doesn't match request timestamp (%llu)\n",
+			le64_to_cpu(response->timestamp), timestamp);
+		goto end_fb_cpu_access;
+	}
+
+end_fb_cpu_access:
+	drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE);
+
+	return ret;
+}
+
+static void appletbdrm_primary_plane_helper_atomic_update(struct drm_plane *plane,
+						     struct drm_atomic_state *old_state)
+{
+	struct appletbdrm_device *adev = drm_to_adev(plane->dev);
+	struct drm_device *drm = plane->dev;
+	struct drm_plane_state *plane_state = plane->state;
+	struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(old_state, plane);
+	int idx;
+
+	if (!drm_dev_enter(drm, &idx))
+		return;
+
+	appletbdrm_flush_damage(adev, old_plane_state, plane_state);
+
+	drm_dev_exit(idx);
+}
+
+static void appletbdrm_primary_plane_helper_atomic_disable(struct drm_plane *plane,
+							   struct drm_atomic_state *state)
+{
+	struct drm_device *dev = plane->dev;
+	struct appletbdrm_device *adev = drm_to_adev(dev);
+	int idx;
+
+	if (!drm_dev_enter(dev, &idx))
+		return;
+
+	appletbdrm_clear_display(adev);
+
+	drm_dev_exit(idx);
+}
+
+static void appletbdrm_primary_plane_reset(struct drm_plane *plane)
+{
+	struct appletbdrm_plane_state *appletbdrm_state;
+
+	WARN_ON(plane->state);
+
+	appletbdrm_state = kzalloc(sizeof(*appletbdrm_state), GFP_KERNEL);
+	if (!appletbdrm_state)
+		return;
+
+	__drm_gem_reset_shadow_plane(plane, &appletbdrm_state->base);
+}
+
+static struct drm_plane_state *appletbdrm_primary_plane_duplicate_state(struct drm_plane *plane)
+{
+	struct drm_shadow_plane_state *new_shadow_plane_state;
+	struct appletbdrm_plane_state *old_appletbdrm_state;
+	struct appletbdrm_plane_state *appletbdrm_state;
+
+	if (WARN_ON(!plane->state))
+		return NULL;
+
+	old_appletbdrm_state = to_appletbdrm_plane_state(plane->state);
+	appletbdrm_state = kmemdup(old_appletbdrm_state, sizeof(*appletbdrm_state), GFP_KERNEL);
+	if (!appletbdrm_state)
+		return NULL;
+
+	/* Request and response are not duplicated and are allocated in .atomic_check */
+	appletbdrm_state->request = NULL;
+	appletbdrm_state->response = NULL;
+
+	new_shadow_plane_state = &appletbdrm_state->base;
+
+	__drm_gem_duplicate_shadow_plane_state(plane, new_shadow_plane_state);
+
+	return &new_shadow_plane_state->base;
+}
+
+static void appletbdrm_primary_plane_destroy_state(struct drm_plane *plane,
+						   struct drm_plane_state *state)
+{
+	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
+
+	kfree(appletbdrm_state->request);
+	kfree(appletbdrm_state->response);
+
+	__drm_gem_destroy_shadow_plane_state(&appletbdrm_state->base);
+
+	kfree(appletbdrm_state);
+}
+
+static const struct drm_plane_helper_funcs appletbdrm_primary_plane_helper_funcs = {
+	DRM_GEM_SHADOW_PLANE_HELPER_FUNCS,
+	.atomic_check = appletbdrm_primary_plane_helper_atomic_check,
+	.atomic_update = appletbdrm_primary_plane_helper_atomic_update,
+	.atomic_disable = appletbdrm_primary_plane_helper_atomic_disable,
+};
+
+static const struct drm_plane_funcs appletbdrm_primary_plane_funcs = {
+	.update_plane = drm_atomic_helper_update_plane,
+	.disable_plane = drm_atomic_helper_disable_plane,
+	.reset = appletbdrm_primary_plane_reset,
+	.atomic_duplicate_state = appletbdrm_primary_plane_duplicate_state,
+	.atomic_destroy_state = appletbdrm_primary_plane_destroy_state,
+	.destroy = drm_plane_cleanup,
+};
+
+static enum drm_mode_status appletbdrm_crtc_helper_mode_valid(struct drm_crtc *crtc,
+							  const struct drm_display_mode *mode)
+{
+	struct appletbdrm_device *adev = drm_to_adev(crtc->dev);
+
+	return drm_crtc_helper_mode_valid_fixed(crtc, mode, &adev->mode);
+}
+
+static const struct drm_mode_config_funcs appletbdrm_mode_config_funcs = {
+	.fb_create = drm_gem_fb_create_with_dirty,
+	.atomic_check = drm_atomic_helper_check,
+	.atomic_commit = drm_atomic_helper_commit,
+};
+
+static const struct drm_connector_funcs appletbdrm_connector_funcs = {
+	.reset = drm_atomic_helper_connector_reset,
+	.destroy = drm_connector_cleanup,
+	.fill_modes = drm_helper_probe_single_connector_modes,
+	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
+	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+};
+
+static const struct drm_connector_helper_funcs appletbdrm_connector_helper_funcs = {
+	.get_modes = appletbdrm_connector_helper_get_modes,
+};
+
+static const struct drm_crtc_helper_funcs appletbdrm_crtc_helper_funcs = {
+	.mode_valid = appletbdrm_crtc_helper_mode_valid,
+};
+
+static const struct drm_crtc_funcs appletbdrm_crtc_funcs = {
+	.reset = drm_atomic_helper_crtc_reset,
+	.destroy = drm_crtc_cleanup,
+	.set_config = drm_atomic_helper_set_config,
+	.page_flip = drm_atomic_helper_page_flip,
+	.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
+	.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
+};
+
+static const struct drm_encoder_funcs appletbdrm_encoder_funcs = {
+	.destroy = drm_encoder_cleanup,
+};
+
+static struct drm_gem_object *appletbdrm_driver_gem_prime_import(struct drm_device *dev,
+								 struct dma_buf *dma_buf)
+{
+	struct appletbdrm_device *adev = drm_to_adev(dev);
+
+	if (!adev->dmadev)
+		return ERR_PTR(-ENODEV);
+
+	return drm_gem_prime_import_dev(dev, dma_buf, adev->dmadev);
+}
+
+DEFINE_DRM_GEM_FOPS(appletbdrm_drm_fops);
+
+static const struct drm_driver appletbdrm_drm_driver = {
+	DRM_GEM_SHMEM_DRIVER_OPS,
+	.gem_prime_import	= appletbdrm_driver_gem_prime_import,
+	.name			= "appletbdrm",
+	.desc			= "Apple Touch Bar DRM Driver",
+	.major			= 1,
+	.minor			= 0,
+	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
+	.fops			= &appletbdrm_drm_fops,
+};
+
+static int appletbdrm_setup_mode_config(struct appletbdrm_device *adev)
+{
+	struct drm_connector *connector = &adev->connector;
+	struct drm_plane *primary_plane;
+	struct drm_crtc *crtc;
+	struct drm_encoder *encoder;
+	struct drm_device *drm = &adev->drm;
+	struct device *dev = adev->dev;
+	int ret;
+
+	ret = drmm_mode_config_init(drm);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to initialize mode configuration\n");
+
+	primary_plane = &adev->primary_plane;
+	ret = drm_universal_plane_init(drm, primary_plane, 0,
+				       &appletbdrm_primary_plane_funcs,
+				       appletbdrm_primary_plane_formats,
+				       ARRAY_SIZE(appletbdrm_primary_plane_formats),
+				       NULL,
+				       DRM_PLANE_TYPE_PRIMARY, NULL);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to initialize universal plane object\n");
+	drm_plane_helper_add(primary_plane, &appletbdrm_primary_plane_helper_funcs);
+	drm_plane_enable_fb_damage_clips(primary_plane);
+
+	crtc = &adev->crtc;
+	ret = drm_crtc_init_with_planes(drm, crtc, primary_plane, NULL,
+					&appletbdrm_crtc_funcs, NULL);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to initialize CRTC object\n");
+	drm_crtc_helper_add(crtc, &appletbdrm_crtc_helper_funcs);
+
+	encoder = &adev->encoder;
+	ret = drm_encoder_init(drm, encoder, &appletbdrm_encoder_funcs,
+			       DRM_MODE_ENCODER_DAC, NULL);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to initialize encoder\n");
+	encoder->possible_crtcs = drm_crtc_mask(crtc);
+
+	/*
+	 * The coordinate system used by the device is different from the
+	 * coordinate system of the framebuffer in that the x and y axes are
+	 * swapped, and that the y axis is inverted; so what the device reports
+	 * as the height is actually the width of the framebuffer and vice
+	 * versa
+	 */
+	drm->mode_config.min_width = 0;
+	drm->mode_config.min_height = 0;
+	drm->mode_config.max_width = max(adev->height, DRM_SHADOW_PLANE_MAX_WIDTH);
+	drm->mode_config.max_height = max(adev->width, DRM_SHADOW_PLANE_MAX_HEIGHT);
+	drm->mode_config.preferred_depth = APPLETBDRM_BITS_PER_PIXEL;
+	drm->mode_config.funcs = &appletbdrm_mode_config_funcs;
+
+	adev->mode = (struct drm_display_mode) {
+		DRM_MODE_INIT(60, adev->height, adev->width,
+			      DRM_MODE_RES_MM(adev->height, 218),
+			      DRM_MODE_RES_MM(adev->width, 218))
+	};
+
+	ret = drm_connector_init(drm, connector,
+				 &appletbdrm_connector_funcs, DRM_MODE_CONNECTOR_USB);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to initialize connector\n");
+
+	drm_connector_helper_add(connector, &appletbdrm_connector_helper_funcs);
+
+	ret = drm_connector_set_panel_orientation(connector,
+						  DRM_MODE_PANEL_ORIENTATION_RIGHT_UP);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to set panel orientation\n");
+
+	connector->display_info.non_desktop = true;
+	ret = drm_object_property_set_value(&connector->base,
+					    drm->mode_config.non_desktop_property, true);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to set non-desktop property\n");
+
+	ret = drm_connector_attach_encoder(connector, encoder);
+
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to initialize simple display pipe\n");
+
+	drm_mode_config_reset(drm);
+
+	return 0;
+}
+
+static int appletbdrm_probe(struct usb_interface *intf,
+			    const struct usb_device_id *id)
+{
+	struct usb_endpoint_descriptor *bulk_in, *bulk_out;
+	struct device *dev = &intf->dev;
+	struct appletbdrm_device *adev;
+	struct drm_device *drm;
+	int ret;
+
+	ret = usb_find_common_endpoints(intf->cur_altsetting, &bulk_in, &bulk_out, NULL, NULL);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to find bulk endpoints\n");
+
+	adev = devm_drm_dev_alloc(dev, &appletbdrm_drm_driver, struct appletbdrm_device, drm);
+	if (IS_ERR(adev))
+		return PTR_ERR(adev);
+
+	adev->dev = dev;
+	adev->in_ep = bulk_in->bEndpointAddress;
+	adev->out_ep = bulk_out->bEndpointAddress;
+
+	drm = &adev->drm;
+
+	usb_set_intfdata(intf, adev);
+
+	ret = appletbdrm_get_information(adev);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to get display information\n");
+
+	ret = appletbdrm_signal_readiness(adev);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to signal readiness\n");
+
+	ret = appletbdrm_setup_mode_config(adev);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to setup mode config\n");
+
+	ret = drm_dev_register(drm, 0);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to register DRM device\n");
+
+	ret = appletbdrm_clear_display(adev);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to clear display\n");
+
+	return 0;
+}
+
+static void appletbdrm_disconnect(struct usb_interface *intf)
+{
+	struct appletbdrm_device *adev = usb_get_intfdata(intf);
+	struct drm_device *drm = &adev->drm;
+
+	drm_dev_unplug(drm);
+	drm_atomic_helper_shutdown(drm);
+}
+
+static void appletbdrm_shutdown(struct usb_interface *intf)
+{
+	struct appletbdrm_device *adev = usb_get_intfdata(intf);
+
+	/*
+	 * The framebuffer needs to be cleared on shutdown since its content
+	 * persists across boots
+	 */
+	drm_atomic_helper_shutdown(&adev->drm);
+}
+
+static const struct usb_device_id appletbdrm_usb_id_table[] = {
+	{ USB_DEVICE_INTERFACE_CLASS(0x05ac, 0x8302, USB_CLASS_AUDIO_VIDEO) },
+	{}
+};
+MODULE_DEVICE_TABLE(usb, appletbdrm_usb_id_table);
+
+static struct usb_driver appletbdrm_usb_driver = {
+	.name		= "appletbdrm",
+	.probe		= appletbdrm_probe,
+	.disconnect	= appletbdrm_disconnect,
+	.shutdown	= appletbdrm_shutdown,
+	.id_table	= appletbdrm_usb_id_table,
+};
+module_usb_driver(appletbdrm_usb_driver);
+
+MODULE_AUTHOR("Kerem Karabay <kekrby@gmail.com>");
+MODULE_DESCRIPTION("Apple Touch Bar DRM Driver");
+MODULE_LICENSE("GPL");
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc
  2025-02-21 11:37 ` [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc Aditya Garg
@ 2025-02-21 11:54   ` Rasmus Villemoes
  2025-02-21 15:29   ` andriy.shevchenko
  1 sibling, 0 replies; 27+ messages in thread
From: Rasmus Villemoes @ 2025-02-21 11:54 UTC (permalink / raw)
  To: Aditya Garg
  Cc: pmladek@suse.com, Steven Rostedt,
	andriy.shevchenko@linux.intel.com, senozhatsky@chromium.org,
	Jonathan Corbet, maarten.lankhorst@linux.intel.com,
	mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com,
	simona@ffwll.ch, Andrew Morton, apw@canonical.com,
	joe@perches.com, dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Fri, 21 Feb 2025 at 12:37, Aditya Garg <gargaditya08@live.com> wrote:
>
> From: Hector Martin <marcan@marcan.st>
>
> %p4cc is designed for DRM/V4L2 FOURCCs with their specific quirks, but
> it's useful to be able to print generic 4-character codes formatted as
> an integer. Extend it to add format specifiers for printing generic
> 32-bit FOURCCs with various endian semantics:
>
> %p4ch   Host-endian
> %p4cl   Little-endian
> %p4cb   Big-endian
> %p4cr   Reverse-endian
>
> The endianness determines how bytes are interpreted as a u32, and the
> FOURCC is then always printed MSByte-first (this is the opposite of
> V4L/DRM FOURCCs). This covers most practical cases, e.g. %p4cr would
> allow printing LSByte-first FOURCCs stored in host endian order
> (other than the hex form being in character order, not the integer
> value).
>
> Signed-off-by: Hector Martin <marcan@marcan.st>
> Signed-off-by: Aditya Garg <gargaditya08@live.com>

Acked-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc
  2025-02-21 11:37 ` [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc Aditya Garg
  2025-02-21 11:54   ` Rasmus Villemoes
@ 2025-02-21 15:29   ` andriy.shevchenko
  2025-02-21 19:37     ` Aditya Garg
  1 sibling, 1 reply; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-21 15:29 UTC (permalink / raw)
  To: Aditya Garg
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Fri, Feb 21, 2025 at 11:37:13AM +0000, Aditya Garg wrote:
> From: Hector Martin <marcan@marcan.st>

First of all, I do not see the cover letter. Is it only an issue on my side?

> %p4cc is designed for DRM/V4L2 FOURCCs with their specific quirks, but
> it's useful to be able to print generic 4-character codes formatted as
> an integer. Extend it to add format specifiers for printing generic
> 32-bit FOURCCs with various endian semantics:
> 
> %p4ch   Host-endian
> %p4cl	Little-endian
> %p4cb	Big-endian
> %p4cr	Reverse-endian
> 
> The endianness determines how bytes are interpreted as a u32, and the
> FOURCC is then always printed MSByte-first (this is the opposite of
> V4L/DRM FOURCCs). This covers most practical cases, e.g. %p4cr would
> allow printing LSByte-first FOURCCs stored in host endian order
> (other than the hex form being in character order, not the integer
> value).

Second, don't issue versions too fast, give at least a few days for the
reviewers to have a chance on looking into it.

Due to above this inherits the same issues as v2, please refer to my comments
there.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-21 11:37 ` [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs Aditya Garg
@ 2025-02-21 15:48   ` andriy.shevchenko
  2025-02-21 19:13     ` Aditya Garg
  2025-02-24  9:09   ` Thomas Zimmermann
  1 sibling, 1 reply; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-21 15:48 UTC (permalink / raw)
  To: Aditya Garg
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Fri, Feb 21, 2025 at 11:37:57AM +0000, Aditya Garg wrote:
> From: Kerem Karabay <kekrby@gmail.com>
> 
> The Touch Bars found on x86 Macs support two USB configurations: one
> where the device presents itself as a HID keyboard and can display
> predefined sets of keys, and one where the operating system has full
> control over what is displayed.
> 
> This commit adds support for the display functionality of the second
> configuration. Functionality for the first configuration has been
> merged in the HID tree.
> 
> Note that this driver has only been tested on T2 Macs, and only includes
> the USB device ID for these devices. Testing on T1 Macs would be
> appreciated.
> 
> Credit goes to Ben (Bingxing) Wang on GitHub [1] for reverse engineering
> most of the protocol.
> 
> [1]: https://github.com/imbushuo/DFRDisplayKm

Use Link tag for this.

> +config DRM_APPLETBDRM
> +	tristate "DRM support for Apple Touch Bars"
> +	depends on DRM && USB && MMU

I dunno if tiny is not only about SPI panels, would be nice to hear somebody
from DRM to confirm that USB ones are okay to have.

> +	select DRM_GEM_SHMEM_HELPER
> +	select DRM_KMS_HELPER
> +	select HID_APPLETB_BL
> +	select HID_MULTITOUCH
> +	help
> +	  Say Y here if you want support for the display of Touch Bars on x86
> +	  MacBook Pros.
> +
> +	  To compile this driver as a module, choose M here: the
> +	  module will be called appletbdrm.

...

> +/*
> + * Apple Touch Bar DRM Driver
> + *
> + * Copyright (c) 2023 Kerem Karabay <kekrby@gmail.com>

No changes in 2024/2025?

> + */

...

> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

Why? Don't you have a struct device available?

...

> +#include <linux/module.h>
> +#include <linux/unaligned.h>
> +#include <linux/usb.h>

This is way too little list of what you are actually using, please consider
IWYU principle in place.

...

> +#define __APPLETBDRM_MSG_STR4(str4)	((__le32 __force)((str4[0] << 24) | (str4[1] << 16) | (str4[2] << 8) | str4[3]))

Reinventing a wheel from get_unaligned_be32() AFAICS.

...

> +#define drm_to_adev(_drm)		container_of(_drm, struct appletbdrm_device, drm)

+ container_of.h

...

> +struct appletbdrm_msg_request_header {
> +	__le16 unk_00;

+ types.h

> +	__le16 unk_02;
> +	__le32 unk_04;
> +	__le32 unk_08;
> +	__le32 size;
> +} __packed;

Why __packed? Please explain and justify for all the data types that are marked
with this attribute.

...

> +static int appletbdrm_send_request(struct appletbdrm_device *adev,
> +				   struct appletbdrm_msg_request_header *request, size_t size)
> +{
> +	struct usb_device *udev = adev_to_udev(adev);
> +	struct drm_device *drm = &adev->drm;
> +	int ret, actual_size;
> +
> +	ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, adev->out_ep),
> +			   request, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
> +	if (ret) {
> +		drm_err(drm, "Failed to send message (%d)\n", ret);
> +		return ret;
> +	}
> +
> +	if (actual_size != size) {
> +		drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
> +			actual_size, size);
> +		return -EIO;
> +	}
> +
> +	return ret;

	return 0;

Or you are expecting something else here?

> +}

...

> +static int appletbdrm_read_response(struct appletbdrm_device *adev,
> +				    struct appletbdrm_msg_response_header *response,
> +				    size_t size, u32 expected_response)
> +{
> +	struct usb_device *udev = adev_to_udev(adev);
> +	struct drm_device *drm = &adev->drm;
> +	int ret, actual_size;
> +	bool readiness_signal_received = false;
> +
> +retry:
> +	ret = usb_bulk_msg(udev, usb_rcvbulkpipe(udev, adev->in_ep),
> +			   response, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
> +	if (ret) {
> +		drm_err(drm, "Failed to read response (%d)\n", ret);
> +		return ret;
> +	}
> +
> +	/*
> +	 * The device responds to the first request sent in a particular
> +	 * timeframe after the USB device configuration is set with a readiness
> +	 * signal, in which case the response should be read again
> +	 */
> +	if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
> +		if (!readiness_signal_received) {
> +			readiness_signal_received = true;
> +			goto retry;
> +		}
> +
> +		drm_err(drm, "Encountered unexpected readiness signal\n");
> +		return -EIO;
> +	}
> +
> +	if (actual_size != size) {
> +		drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
> +			actual_size, size);
> +		return -EIO;
> +	}
> +
> +	if (response->msg != expected_response) {
> +		drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
> +			&expected_response, &response->msg);
> +		return -EIO;

For three different cases the same error code, can it be adjusted more to the
situation?

> +	}
> +
> +	return 0;
> +}

> +static int appletbdrm_send_msg(struct appletbdrm_device *adev, u32 msg)
> +{
> +	struct appletbdrm_msg_simple_request *request;
> +	int ret;
> +
> +	request = kzalloc(sizeof(*request), GFP_KERNEL);

+ slab.h

> +	if (!request)
> +		return -ENOMEM;

+ err.h

> +
> +	request->header.unk_00 = cpu_to_le16(2);
> +	request->header.unk_02 = cpu_to_le16(0x1512);
> +	request->header.size = cpu_to_le32(sizeof(*request) - sizeof(request->header));
> +	request->msg = msg;
> +	request->size = request->header.size;
> +
> +	ret = appletbdrm_send_request(adev, &request->header, sizeof(*request));
> +
> +	kfree(request);
> +
> +	return ret;
> +}

...

> +	return drm_rect_width(rect) * drm_rect_height(rect) * (APPLETBDRM_BITS_PER_PIXEL / 8);

BITS_TO_BYTES() ? Will need bits.h IIRC.

...

> +static int appletbdrm_primary_plane_helper_atomic_check(struct drm_plane *plane,
> +						   struct drm_atomic_state *state)
> +{
> +	struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state, plane);
> +	struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(state, plane);
> +	struct drm_crtc *new_crtc = new_plane_state->crtc;
> +	struct drm_crtc_state *new_crtc_state = NULL;
> +	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(new_plane_state);
> +	struct drm_atomic_helper_damage_iter iter;
> +	struct drm_rect damage;
> +	size_t frames_size = 0;
> +	size_t request_size;
> +	int ret;
> +
> +	if (new_crtc)
> +		new_crtc_state = drm_atomic_get_new_crtc_state(state, new_crtc);
> +
> +	ret = drm_atomic_helper_check_plane_state(new_plane_state, new_crtc_state,
> +						  DRM_PLANE_NO_SCALING,
> +						  DRM_PLANE_NO_SCALING,
> +						  false, false);
> +	if (ret)
> +		return ret;

> +	else if (!new_plane_state->visible)

Why 'else'? It's redundant.

> +		return 0;
> +
> +	drm_atomic_helper_damage_iter_init(&iter, old_plane_state, new_plane_state);
> +	drm_atomic_for_each_plane_damage(&iter, &damage) {
> +		frames_size += struct_size((struct appletbdrm_frame *)0, buf, rect_size(&damage));
> +	}
> +
> +	if (!frames_size)
> +		return 0;
> +
> +	request_size = ALIGN(sizeof(struct appletbdrm_fb_request) +
> +		       frames_size +
> +		       sizeof(struct appletbdrm_fb_request_footer), 16);

Missing header for ALIGN().

But have you checked overflow.h for the possibility of using some helper macros
from there? This is what should be usually done for k*alloc() in the kernel.

> +	appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
> +
> +	if (!appletbdrm_state->request)
> +		return -ENOMEM;
> +
> +	appletbdrm_state->response = kzalloc(sizeof(*appletbdrm_state->response), GFP_KERNEL);
> +
> +	if (!appletbdrm_state->response)
> +		return -ENOMEM;
> +
> +	appletbdrm_state->request_size = request_size;
> +	appletbdrm_state->frames_size = frames_size;
> +
> +	return 0;
> +}

...

> +static int appletbdrm_flush_damage(struct appletbdrm_device *adev,
> +				   struct drm_plane_state *old_state,
> +				   struct drm_plane_state *state)
> +{
> +	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
> +	struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state);
> +	struct appletbdrm_fb_request_response *response = appletbdrm_state->response;
> +	struct appletbdrm_fb_request_footer *footer;
> +	struct drm_atomic_helper_damage_iter iter;
> +	struct drm_framebuffer *fb = state->fb;
> +	struct appletbdrm_fb_request *request = appletbdrm_state->request;
> +	struct drm_device *drm = &adev->drm;
> +	struct appletbdrm_frame *frame;
> +	u64 timestamp = ktime_get_ns();
> +	struct drm_rect damage;
> +	size_t frames_size = appletbdrm_state->frames_size;
> +	size_t request_size = appletbdrm_state->request_size;
> +	int ret;
> +
> +	if (!frames_size)
> +		return 0;
> +
> +	ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE);
> +	if (ret) {
> +		drm_err(drm, "Failed to start CPU framebuffer access (%d)\n", ret);

> +		goto end_fb_cpu_access;

Strange. Is it for real that this API requires to be called in both cases for
success and for an error?

> +	}
> +
> +	request->header.unk_00 = cpu_to_le16(2);
> +	request->header.unk_02 = cpu_to_le16(0x12);
> +	request->header.unk_04 = cpu_to_le32(9);
> +	request->header.size = cpu_to_le32(request_size - sizeof(request->header));
> +	request->unk_10 = cpu_to_le16(1);

> +	request->msg_id = timestamp & 0xff;

Why ' & 0xff'?

> +	frame = (struct appletbdrm_frame *)request->data;
> +
> +	drm_atomic_helper_damage_iter_init(&iter, old_state, state);
> +	drm_atomic_for_each_plane_damage(&iter, &damage) {
> +		struct drm_rect dst_clip = state->dst;
> +		struct iosys_map dst = IOSYS_MAP_INIT_VADDR(frame->buf);
> +		u32 buf_size = rect_size(&damage);
> +
> +		if (!drm_rect_intersect(&dst_clip, &damage))
> +			continue;
> +
> +		/*
> +		 * The coordinates need to be translated to the coordinate
> +		 * system the device expects, see the comment in
> +		 * appletbdrm_setup_mode_config
> +		 */
> +		frame->begin_x = cpu_to_le16(damage.y1);
> +		frame->begin_y = cpu_to_le16(adev->height - damage.x2);
> +		frame->width = cpu_to_le16(drm_rect_height(&damage));
> +		frame->height = cpu_to_le16(drm_rect_width(&damage));
> +		frame->buf_size = cpu_to_le32(buf_size);
> +
> +		switch (fb->format->format) {
> +		case DRM_FORMAT_XRGB8888:
> +			drm_fb_xrgb8888_to_bgr888(&dst, NULL, &shadow_plane_state->data[0], fb, &damage, &shadow_plane_state->fmtcnv_state);
> +			break;
> +		default:
> +			drm_fb_memcpy(&dst, NULL, &shadow_plane_state->data[0], fb, &damage);
> +			break;
> +		}
> +
> +		frame = (void *)frame + struct_size(frame, buf, buf_size);

+ overflow.h

> +	}
> +
> +	footer = (struct appletbdrm_fb_request_footer *)&request->data[frames_size];
> +
> +	footer->unk_0c = cpu_to_le32(0xfffe);
> +	footer->unk_1c = cpu_to_le32(0x80001);
> +	footer->unk_34 = cpu_to_le32(0x80002);
> +	footer->unk_4c = cpu_to_le32(0xffff);
> +	footer->timestamp = cpu_to_le64(timestamp);
> +
> +	ret = appletbdrm_send_request(adev, &request->header, request_size);
> +	if (ret)
> +		goto end_fb_cpu_access;
> +
> +	ret = appletbdrm_read_response(adev, &response->header, sizeof(*response),
> +				       APPLETBDRM_MSG_UPDATE_COMPLETE);
> +	if (ret)
> +		goto end_fb_cpu_access;
> +
> +	if (response->timestamp != footer->timestamp) {
> +		drm_err(drm, "Response timestamp (%llu) doesn't match request timestamp (%llu)\n",
> +			le64_to_cpu(response->timestamp), timestamp);
> +		goto end_fb_cpu_access;
> +	}
> +
> +end_fb_cpu_access:
> +	drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE);
> +
> +	return ret;
> +}

...

> +static void appletbdrm_primary_plane_reset(struct drm_plane *plane)
> +{
> +	struct appletbdrm_plane_state *appletbdrm_state;
> +
> +	WARN_ON(plane->state);

+ bug.h

> +	appletbdrm_state = kzalloc(sizeof(*appletbdrm_state), GFP_KERNEL);
> +	if (!appletbdrm_state)
> +		return;
> +
> +	__drm_gem_reset_shadow_plane(plane, &appletbdrm_state->base);
> +}

...

> +static int appletbdrm_setup_mode_config(struct appletbdrm_device *adev)
> +{
> +	struct drm_connector *connector = &adev->connector;
> +	struct drm_plane *primary_plane;
> +	struct drm_crtc *crtc;
> +	struct drm_encoder *encoder;
> +	struct drm_device *drm = &adev->drm;
> +	struct device *dev = adev->dev;
> +	int ret;
> +
> +	ret = drmm_mode_config_init(drm);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize mode configuration\n");

+ dev_printk.h

> +	primary_plane = &adev->primary_plane;
> +	ret = drm_universal_plane_init(drm, primary_plane, 0,
> +				       &appletbdrm_primary_plane_funcs,
> +				       appletbdrm_primary_plane_formats,
> +				       ARRAY_SIZE(appletbdrm_primary_plane_formats),

+ array_size.h

> +				       NULL,
> +				       DRM_PLANE_TYPE_PRIMARY, NULL);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize universal plane object\n");
> +	drm_plane_helper_add(primary_plane, &appletbdrm_primary_plane_helper_funcs);
> +	drm_plane_enable_fb_damage_clips(primary_plane);
> +
> +	crtc = &adev->crtc;
> +	ret = drm_crtc_init_with_planes(drm, crtc, primary_plane, NULL,
> +					&appletbdrm_crtc_funcs, NULL);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize CRTC object\n");
> +	drm_crtc_helper_add(crtc, &appletbdrm_crtc_helper_funcs);
> +
> +	encoder = &adev->encoder;
> +	ret = drm_encoder_init(drm, encoder, &appletbdrm_encoder_funcs,
> +			       DRM_MODE_ENCODER_DAC, NULL);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize encoder\n");
> +	encoder->possible_crtcs = drm_crtc_mask(crtc);
> +
> +	/*
> +	 * The coordinate system used by the device is different from the
> +	 * coordinate system of the framebuffer in that the x and y axes are
> +	 * swapped, and that the y axis is inverted; so what the device reports
> +	 * as the height is actually the width of the framebuffer and vice
> +	 * versa
> +	 */
> +	drm->mode_config.min_width = 0;
> +	drm->mode_config.min_height = 0;
> +	drm->mode_config.max_width = max(adev->height, DRM_SHADOW_PLANE_MAX_WIDTH);
> +	drm->mode_config.max_height = max(adev->width, DRM_SHADOW_PLANE_MAX_HEIGHT);
> +	drm->mode_config.preferred_depth = APPLETBDRM_BITS_PER_PIXEL;
> +	drm->mode_config.funcs = &appletbdrm_mode_config_funcs;
> +
> +	adev->mode = (struct drm_display_mode) {

Why do you need a compound literal here? Perhaps you want to have that to be
done directly in DRM_MODE_INIT()?

> +		DRM_MODE_INIT(60, adev->height, adev->width,
> +			      DRM_MODE_RES_MM(adev->height, 218),
> +			      DRM_MODE_RES_MM(adev->width, 218))
> +	};
> +
> +	ret = drm_connector_init(drm, connector,
> +				 &appletbdrm_connector_funcs, DRM_MODE_CONNECTOR_USB);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize connector\n");
> +
> +	drm_connector_helper_add(connector, &appletbdrm_connector_helper_funcs);
> +
> +	ret = drm_connector_set_panel_orientation(connector,
> +						  DRM_MODE_PANEL_ORIENTATION_RIGHT_UP);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to set panel orientation\n");
> +
> +	connector->display_info.non_desktop = true;
> +	ret = drm_object_property_set_value(&connector->base,
> +					    drm->mode_config.non_desktop_property, true);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to set non-desktop property\n");
> +
> +	ret = drm_connector_attach_encoder(connector, encoder);
> +
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize simple display pipe\n");
> +
> +	drm_mode_config_reset(drm);
> +
> +	return 0;
> +}

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888
  2025-02-21 11:36 [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888 Aditya Garg
  2025-02-21 11:37 ` [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc Aditya Garg
  2025-02-21 11:37 ` [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs Aditya Garg
@ 2025-02-21 15:51 ` andriy.shevchenko
  2025-02-21 17:21   ` Aditya Garg
  2025-02-24  9:19   ` Thomas Zimmermann
  2 siblings, 2 replies; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-21 15:51 UTC (permalink / raw)
  To: Aditya Garg
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Fri, Feb 21, 2025 at 11:36:00AM +0000, Aditya Garg wrote:
> From: Kerem Karabay <kekrby@gmail.com>
> 
> Add XRGB8888 emulation helper for devices that only support BGR888.

...

> +	for (x = 0; x < pixels; x++) {
> +		pix = le32_to_cpu(sbuf32[x]);
> +		/* write red-green-blue to output in little endianness */
> +		*dbuf8++ = (pix & 0x00ff0000) >> 16;
> +		*dbuf8++ = (pix & 0x0000ff00) >> 8;
> +		*dbuf8++ = (pix & 0x000000ff) >> 0;

put_unaligned_be24()

> +	}

...

> +	static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = {
> +		3,
> +	};

One line?

	static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = { 3 };

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888
  2025-02-21 15:51 ` [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888 andriy.shevchenko
@ 2025-02-21 17:21   ` Aditya Garg
  2025-02-21 20:25     ` andriy.shevchenko
  2025-02-24  9:19   ` Thomas Zimmermann
  1 sibling, 1 reply; 27+ messages in thread
From: Aditya Garg @ 2025-02-21 17:21 UTC (permalink / raw)
  To: andriy.shevchenko@linux.intel.com
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

Hi Andy

> On 21 Feb 2025, at 9:21 PM, andriy.shevchenko@linux.intel.com wrote:
> 
> On Fri, Feb 21, 2025 at 11:36:00AM +0000, Aditya Garg wrote:
>> From: Kerem Karabay <kekrby@gmail.com>
>> 
>> Add XRGB8888 emulation helper for devices that only support BGR888.
> 
> ...
> 
>> + for (x = 0; x < pixels; x++) {
>> + pix = le32_to_cpu(sbuf32[x]);
>> + /* write red-green-blue to output in little endianness */
>> + *dbuf8++ = (pix & 0x00ff0000) >> 16;
>> + *dbuf8++ = (pix & 0x0000ff00) >> 8;
>> + *dbuf8++ = (pix & 0x000000ff) >> 0;
> 
> put_unaligned_be24()
> 
>> + }
> 
> ...
> 
>> + static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = {
>> + 3,
>> + };
> 
> One line?
> 
> static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = { 3 };

Wrt all the above respective changes, the formatting has been done exactly like what other emulation helps do in the upstream patch.

I doubt Thomas would want these changes to be done, or would want these changes to be done for the upstream emulation helpers as well.

For reference: https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/drm_format_helper.c

Regards
Aditya

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-21 15:48   ` andriy.shevchenko
@ 2025-02-21 19:13     ` Aditya Garg
  2025-02-21 20:42       ` andriy.shevchenko
  0 siblings, 1 reply; 27+ messages in thread
From: Aditya Garg @ 2025-02-21 19:13 UTC (permalink / raw)
  To: andriy.shevchenko@linux.intel.com
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

Hi

> 
> On Fri, Feb 21, 2025 at 11:37:57AM +0000, Aditya Garg wrote:
>> From: Kerem Karabay <kekrby@gmail.com>
>> 
>> The Touch Bars found on x86 Macs support two USB configurations: one
>> where the device presents itself as a HID keyboard and can display
>> predefined sets of keys, and one where the operating system has full
>> control over what is displayed.
>> 
>> This commit adds support for the display functionality of the second
>> configuration. Functionality for the first configuration has been
>> merged in the HID tree.
>> 
>> Note that this driver has only been tested on T2 Macs, and only includes
>> the USB device ID for these devices. Testing on T1 Macs would be
>> appreciated.
>> 
>> Credit goes to Ben (Bingxing) Wang on GitHub [1] for reverse engineering
>> most of the protocol.
>> 
>> [1]: https://github.com/imbushuo/DFRDisplayKm
> 
> Use Link tag for this.
> 
>> +config DRM_APPLETBDRM
>> + tristate "DRM support for Apple Touch Bars"
>> + depends on DRM && USB && MMU
> 
> I dunno if tiny is not only about SPI panels, would be nice to hear somebody
> from DRM to confirm that USB ones are okay to have.
> 
>> + select DRM_GEM_SHMEM_HELPER
>> + select DRM_KMS_HELPER
>> + select HID_APPLETB_BL
>> + select HID_MULTITOUCH
>> + help
>> +   Say Y here if you want support for the display of Touch Bars on x86
>> +   MacBook Pros.
>> +
>> +   To compile this driver as a module, choose M here: the
>> +   module will be called appletbdrm.
> 
> ...
> 
>> +/*
>> + * Apple Touch Bar DRM Driver
>> + *
>> + * Copyright (c) 2023 Kerem Karabay <kekrby@gmail.com>
> 
> No changes in 2024/2025?

From the original author, no. The only changes were the ones requested by Thomas, and they were done by me. I don’t think that qualifies for a copyright here.

> 
>> + */
> 
> ...
> 
>> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> 
> Why? Don't you have a struct device available?

I’ll remove this
> 
> ...
> 
>> +#include <linux/module.h>
>> +#include <linux/unaligned.h>
>> +#include <linux/usb.h>
> 
> This is way too little list of what you are actually using, please consider
> IWYU principle in place.

Alright (and thanks for pointing out the missing headers below).
> 
> ...
> 
>> +#define __APPLETBDRM_MSG_STR4(str4) ((__le32 __force)((str4[0] << 24) | (str4[1] << 16) | (str4[2] << 8) | str4[3]))
> 
> Reinventing a wheel from get_unaligned_be32() AFAICS.
> 
> ...
> 
>> +#define drm_to_adev(_drm) container_of(_drm, struct appletbdrm_device, drm)
> 
> + container_of.h
> 
> ...
> 
>> +struct appletbdrm_msg_request_header {
>> + __le16 unk_00;
> 
> + types.h
> 
>> + __le16 unk_02;
>> + __le32 unk_04;
>> + __le32 unk_08;
>> + __le32 size;
>> +} __packed;
> 
> Why __packed? Please explain and justify for all the data types that are marked
> with this attribute.

Just following the original Windows driver here (#pragma pack) :

https://github.com/imbushuo/DFRDisplayKm/blob/master/src/DFRDisplayKm/include/DFRHostIo.h

IMO these structures are used for communication with the Touch Bar over USB. The hardware expects a very specific layout for the data it receives and sends. If the compiler were to insert padding for alignment, it would break the communication protocol because the fields would not be in the expected positions.

I tried removing __packed btw and driver no longer works.
> 
> ...
> 
>> +static int appletbdrm_send_request(struct appletbdrm_device *adev,
>> +    struct appletbdrm_msg_request_header *request, size_t size)
>> +{
>> + struct usb_device *udev = adev_to_udev(adev);
>> + struct drm_device *drm = &adev->drm;
>> + int ret, actual_size;
>> +
>> + ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, adev->out_ep),
>> +    request, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
>> + if (ret) {
>> + drm_err(drm, "Failed to send message (%d)\n", ret);
>> + return ret;
>> + }
>> +
>> + if (actual_size != size) {
>> + drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
>> + actual_size, size);
>> + return -EIO;
>> + }
>> +
>> + return ret;
> 
> return 0;
> 
> Or you are expecting something else here?

Will change to return 0;
> 
>> +}
> 
> ...
> 
>> +static int appletbdrm_read_response(struct appletbdrm_device *adev,
>> +     struct appletbdrm_msg_response_header *response,
>> +     size_t size, u32 expected_response)
>> +{
>> + struct usb_device *udev = adev_to_udev(adev);
>> + struct drm_device *drm = &adev->drm;
>> + int ret, actual_size;
>> + bool readiness_signal_received = false;
>> +
>> +retry:
>> + ret = usb_bulk_msg(udev, usb_rcvbulkpipe(udev, adev->in_ep),
>> +    response, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
>> + if (ret) {
>> + drm_err(drm, "Failed to read response (%d)\n", ret);
>> + return ret;
>> + }
>> +
>> + /*
>> +  * The device responds to the first request sent in a particular
>> +  * timeframe after the USB device configuration is set with a readiness
>> +  * signal, in which case the response should be read again
>> +  */
>> + if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
>> + if (!readiness_signal_received) {
>> + readiness_signal_received = true;
>> + goto retry;
>> + }
>> +
>> + drm_err(drm, "Encountered unexpected readiness signal\n");
>> + return -EIO;
>> + }
>> +
>> + if (actual_size != size) {
>> + drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
>> + actual_size, size);
>> + return -EIO;
>> + }
>> +
>> + if (response->msg != expected_response) {
>> + drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
>> + &expected_response, &response->msg);
>> + return -EIO;
> 
> For three different cases the same error code, can it be adjusted more to the
> situation?

All these are I/O errors, you got any suggestion?
> 
>> + }
>> +
>> + return 0;
>> +}
> 
>> +static int appletbdrm_send_msg(struct appletbdrm_device *adev, u32 msg)
>> +{
>> + struct appletbdrm_msg_simple_request *request;
>> + int ret;
>> +
>> + request = kzalloc(sizeof(*request), GFP_KERNEL);
> 
> + slab.h
> 
>> + if (!request)
>> + return -ENOMEM;
> 
> + err.h
> 
>> +
>> + request->header.unk_00 = cpu_to_le16(2);
>> + request->header.unk_02 = cpu_to_le16(0x1512);
>> + request->header.size = cpu_to_le32(sizeof(*request) - sizeof(request->header));
>> + request->msg = msg;
>> + request->size = request->header.size;
>> +
>> + ret = appletbdrm_send_request(adev, &request->header, sizeof(*request));
>> +
>> + kfree(request);
>> +
>> + return ret;
>> +}
> 
> ...
> 
>> + return drm_rect_width(rect) * drm_rect_height(rect) * (APPLETBDRM_BITS_PER_PIXEL / 8);
> 
> BITS_TO_BYTES() ? Will need bits.h IIRC.

bitops.h (will add)

https://github.com/torvalds/linux/blob/master/include/linux/bitops.h#L15
> 
> ...
> 
>> +static int appletbdrm_primary_plane_helper_atomic_check(struct drm_plane *plane,
>> +    struct drm_atomic_state *state)
>> +{
>> + struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state, plane);
>> + struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(state, plane);
>> + struct drm_crtc *new_crtc = new_plane_state->crtc;
>> + struct drm_crtc_state *new_crtc_state = NULL;
>> + struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(new_plane_state);
>> + struct drm_atomic_helper_damage_iter iter;
>> + struct drm_rect damage;
>> + size_t frames_size = 0;
>> + size_t request_size;
>> + int ret;
>> +
>> + if (new_crtc)
>> + new_crtc_state = drm_atomic_get_new_crtc_state(state, new_crtc);
>> +
>> + ret = drm_atomic_helper_check_plane_state(new_plane_state, new_crtc_state,
>> +   DRM_PLANE_NO_SCALING,
>> +   DRM_PLANE_NO_SCALING,
>> +   false, false);
>> + if (ret)
>> + return ret;
> 
>> + else if (!new_plane_state->visible)
> 
> Why 'else'? It's redundant.

I’ve just followed what other drm drivers are doing here:

https://elixir.bootlin.com/linux/v6.13.3/source/drivers/gpu/drm/tiny/bochs.c#L436
https://elixir.bootlin.com/linux/v6.13.3/source/drivers/gpu/drm/tiny/cirrus.c#L363

And plenty more

I won’t mind removing else. You want that?
> 
>> + return 0;
>> +
>> + drm_atomic_helper_damage_iter_init(&iter, old_plane_state, new_plane_state);
>> + drm_atomic_for_each_plane_damage(&iter, &damage) {
>> + frames_size += struct_size((struct appletbdrm_frame *)0, buf, rect_size(&damage));
>> + }
>> +
>> + if (!frames_size)
>> + return 0;
>> +
>> + request_size = ALIGN(sizeof(struct appletbdrm_fb_request) +
>> +        frames_size +
>> +        sizeof(struct appletbdrm_fb_request_footer), 16);
> 
> Missing header for ALIGN().
> 
> But have you checked overflow.h for the possibility of using some helper macros
> from there? This is what should be usually done for k*alloc() in the kernel.

I don’t really think we need a macro here.
> 
>> + appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
>> +
>> + if (!appletbdrm_state->request)
>> + return -ENOMEM;
>> +
>> + appletbdrm_state->response = kzalloc(sizeof(*appletbdrm_state->response), GFP_KERNEL);
>> +
>> + if (!appletbdrm_state->response)
>> + return -ENOMEM;
>> +
>> + appletbdrm_state->request_size = request_size;
>> + appletbdrm_state->frames_size = frames_size;
>> +
>> + return 0;
>> +}
> 
> ...
> 
>> +static int appletbdrm_flush_damage(struct appletbdrm_device *adev,
>> +    struct drm_plane_state *old_state,
>> +    struct drm_plane_state *state)
>> +{
>> + struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
>> + struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state);
>> + struct appletbdrm_fb_request_response *response = appletbdrm_state->response;
>> + struct appletbdrm_fb_request_footer *footer;
>> + struct drm_atomic_helper_damage_iter iter;
>> + struct drm_framebuffer *fb = state->fb;
>> + struct appletbdrm_fb_request *request = appletbdrm_state->request;
>> + struct drm_device *drm = &adev->drm;
>> + struct appletbdrm_frame *frame;
>> + u64 timestamp = ktime_get_ns();
>> + struct drm_rect damage;
>> + size_t frames_size = appletbdrm_state->frames_size;
>> + size_t request_size = appletbdrm_state->request_size;
>> + int ret;
>> +
>> + if (!frames_size)
>> + return 0;
>> +
>> + ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE);
>> + if (ret) {
>> + drm_err(drm, "Failed to start CPU framebuffer access (%d)\n", ret);
> 
>> + goto end_fb_cpu_access;
> 
> Strange. Is it for real that this API requires to be called in both cases for
> success and for an error?

Yes

https://elixir.bootlin.com/linux/v6.13.3/source/drivers/gpu/drm/tiny/ofdrm.c#L839
> 
>> + }
>> +
>> + request->header.unk_00 = cpu_to_le16(2);
>> + request->header.unk_02 = cpu_to_le16(0x12);
>> + request->header.unk_04 = cpu_to_le32(9);
>> + request->header.size = cpu_to_le32(request_size - sizeof(request->header));
>> + request->unk_10 = cpu_to_le16(1);
> 
>> + request->msg_id = timestamp & 0xff;
> 
> Why ' & 0xff'?

https://github.com/imbushuo/DFRDisplayKm/blob/master/src/DFRDisplayKm/DfrDisplay.c#L147

> 
>> + frame = (struct appletbdrm_frame *)request->data;
>> +
>> + drm_atomic_helper_damage_iter_init(&iter, old_state, state);
>> + drm_atomic_for_each_plane_damage(&iter, &damage) {
>> + struct drm_rect dst_clip = state->dst;
>> + struct iosys_map dst = IOSYS_MAP_INIT_VADDR(frame->buf);
>> + u32 buf_size = rect_size(&damage);
>> +
>> + if (!drm_rect_intersect(&dst_clip, &damage))
>> + continue;
>> +
>> + /*
>> +  * The coordinates need to be translated to the coordinate
>> +  * system the device expects, see the comment in
>> +  * appletbdrm_setup_mode_config
>> +  */
>> + frame->begin_x = cpu_to_le16(damage.y1);
>> + frame->begin_y = cpu_to_le16(adev->height - damage.x2);
>> + frame->width = cpu_to_le16(drm_rect_height(&damage));
>> + frame->height = cpu_to_le16(drm_rect_width(&damage));
>> + frame->buf_size = cpu_to_le32(buf_size);
>> +
>> + switch (fb->format->format) {
>> + case DRM_FORMAT_XRGB8888:
>> + drm_fb_xrgb8888_to_bgr888(&dst, NULL, &shadow_plane_state->data[0], fb, &damage, &shadow_plane_state->fmtcnv_state);
>> + break;
>> + default:
>> + drm_fb_memcpy(&dst, NULL, &shadow_plane_state->data[0], fb, &damage);
>> + break;
>> + }
>> +
>> + frame = (void *)frame + struct_size(frame, buf, buf_size);
> 
> + overflow.h
> 
>> + }
>> +
>> + footer = (struct appletbdrm_fb_request_footer *)&request->data[frames_size];
>> +
>> + footer->unk_0c = cpu_to_le32(0xfffe);
>> + footer->unk_1c = cpu_to_le32(0x80001);
>> + footer->unk_34 = cpu_to_le32(0x80002);
>> + footer->unk_4c = cpu_to_le32(0xffff);
>> + footer->timestamp = cpu_to_le64(timestamp);
>> +
>> + ret = appletbdrm_send_request(adev, &request->header, request_size);
>> + if (ret)
>> + goto end_fb_cpu_access;
>> +
>> + ret = appletbdrm_read_response(adev, &response->header, sizeof(*response),
>> +        APPLETBDRM_MSG_UPDATE_COMPLETE);
>> + if (ret)
>> + goto end_fb_cpu_access;
>> +
>> + if (response->timestamp != footer->timestamp) {
>> + drm_err(drm, "Response timestamp (%llu) doesn't match request timestamp (%llu)\n",
>> + le64_to_cpu(response->timestamp), timestamp);
>> + goto end_fb_cpu_access;
>> + }
>> +
>> +end_fb_cpu_access:
>> + drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE);
>> +
>> + return ret;
>> +}
> 
> ...
> 
>> +static void appletbdrm_primary_plane_reset(struct drm_plane *plane)
>> +{
>> + struct appletbdrm_plane_state *appletbdrm_state;
>> +
>> + WARN_ON(plane->state);
> 
> + bug.h
> 
>> + appletbdrm_state = kzalloc(sizeof(*appletbdrm_state), GFP_KERNEL);
>> + if (!appletbdrm_state)
>> + return;
>> +
>> + __drm_gem_reset_shadow_plane(plane, &appletbdrm_state->base);
>> +}
> 
> ...
> 
>> +static int appletbdrm_setup_mode_config(struct appletbdrm_device *adev)
>> +{
>> + struct drm_connector *connector = &adev->connector;
>> + struct drm_plane *primary_plane;
>> + struct drm_crtc *crtc;
>> + struct drm_encoder *encoder;
>> + struct drm_device *drm = &adev->drm;
>> + struct device *dev = adev->dev;
>> + int ret;
>> +
>> + ret = drmm_mode_config_init(drm);
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Failed to initialize mode configuration\n");
> 
> + dev_printk.h
> 
>> + primary_plane = &adev->primary_plane;
>> + ret = drm_universal_plane_init(drm, primary_plane, 0,
>> +        &appletbdrm_primary_plane_funcs,
>> +        appletbdrm_primary_plane_formats,
>> +        ARRAY_SIZE(appletbdrm_primary_plane_formats),
> 
> + array_size.h
> 
>> +        NULL,
>> +        DRM_PLANE_TYPE_PRIMARY, NULL);
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Failed to initialize universal plane object\n");
>> + drm_plane_helper_add(primary_plane, &appletbdrm_primary_plane_helper_funcs);
>> + drm_plane_enable_fb_damage_clips(primary_plane);
>> +
>> + crtc = &adev->crtc;
>> + ret = drm_crtc_init_with_planes(drm, crtc, primary_plane, NULL,
>> + &appletbdrm_crtc_funcs, NULL);
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Failed to initialize CRTC object\n");
>> + drm_crtc_helper_add(crtc, &appletbdrm_crtc_helper_funcs);
>> +
>> + encoder = &adev->encoder;
>> + ret = drm_encoder_init(drm, encoder, &appletbdrm_encoder_funcs,
>> +        DRM_MODE_ENCODER_DAC, NULL);
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Failed to initialize encoder\n");
>> + encoder->possible_crtcs = drm_crtc_mask(crtc);
>> +
>> + /*
>> +  * The coordinate system used by the device is different from the
>> +  * coordinate system of the framebuffer in that the x and y axes are
>> +  * swapped, and that the y axis is inverted; so what the device reports
>> +  * as the height is actually the width of the framebuffer and vice
>> +  * versa
>> +  */
>> + drm->mode_config.min_width = 0;
>> + drm->mode_config.min_height = 0;
>> + drm->mode_config.max_width = max(adev->height, DRM_SHADOW_PLANE_MAX_WIDTH);
>> + drm->mode_config.max_height = max(adev->width, DRM_SHADOW_PLANE_MAX_HEIGHT);
>> + drm->mode_config.preferred_depth = APPLETBDRM_BITS_PER_PIXEL;
>> + drm->mode_config.funcs = &appletbdrm_mode_config_funcs;
>> +
>> + adev->mode = (struct drm_display_mode) {
> 
> Why do you need a compound literal here? Perhaps you want to have that to be
> done directly in DRM_MODE_INIT()?

I really don’t find this as an issue. You want me to declare another structure, basically this?:

struct drm_display_mode mode = {
DRM_MODE_INIT(60, adev->height, adev->width,
DRM_MODE_RES_MM(adev->height, 218),
DRM_MODE_RES_MM(adev->width, 218))
};
adev->mode = mode;

> 
>> + DRM_MODE_INIT(60, adev->height, adev->width,
>> +       DRM_MODE_RES_MM(adev->height, 218),
>> +       DRM_MODE_RES_MM(adev->width, 218))
>> + };
>> +
>> + ret = drm_connector_init(drm, connector,
>> +  &appletbdrm_connector_funcs, DRM_MODE_CONNECTOR_USB);
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Failed to initialize connector\n");
>> +
>> + drm_connector_helper_add(connector, &appletbdrm_connector_helper_funcs);
>> +
>> + ret = drm_connector_set_panel_orientation(connector,
>> +   DRM_MODE_PANEL_ORIENTATION_RIGHT_UP);
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Failed to set panel orientation\n");
>> +
>> + connector->display_info.non_desktop = true;
>> + ret = drm_object_property_set_value(&connector->base,
>> +     drm->mode_config.non_desktop_property, true);
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Failed to set non-desktop property\n");
>> +
>> + ret = drm_connector_attach_encoder(connector, encoder);
>> +
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Failed to initialize simple display pipe\n");
>> +
>> + drm_mode_config_reset(drm);
>> +
>> + return 0;
>> +}

Thanks
Aditya

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc
  2025-02-21 15:29   ` andriy.shevchenko
@ 2025-02-21 19:37     ` Aditya Garg
  2025-02-21 20:18       ` andriy.shevchenko
  0 siblings, 1 reply; 27+ messages in thread
From: Aditya Garg @ 2025-02-21 19:37 UTC (permalink / raw)
  To: andriy.shevchenko@linux.intel.com
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau



> On 21 Feb 2025, at 8:59 PM, andriy.shevchenko@linux.intel.com wrote:
> 
> On Fri, Feb 21, 2025 at 11:37:13AM +0000, Aditya Garg wrote:
>> From: Hector Martin <marcan@marcan.st>
> 
> First of all, I do not see the cover letter. Is it only an issue on my side?

These are literally 3 patches that are self explanatory. Is this a hard and fast rule that a cover letter MUST be there?

> 
>> %p4cc is designed for DRM/V4L2 FOURCCs with their specific quirks, but
>> it's useful to be able to print generic 4-character codes formatted as
>> an integer. Extend it to add format specifiers for printing generic
>> 32-bit FOURCCs with various endian semantics:
>> 
>> %p4ch   Host-endian
>> %p4cl Little-endian
>> %p4cb Big-endian
>> %p4cr Reverse-endian
>> 
>> The endianness determines how bytes are interpreted as a u32, and the
>> FOURCC is then always printed MSByte-first (this is the opposite of
>> V4L/DRM FOURCCs). This covers most practical cases, e.g. %p4cr would
>> allow printing LSByte-first FOURCCs stored in host endian order
>> (other than the hex form being in character order, not the integer
>> value).
> 
> Second, don't issue versions too fast, give at least a few days for the
> reviewers to have a chance on looking into it.

Sure, I’ll take care of that.

BTW, a found a typo:

+ static const struct fourcc_struct try_ch = {
+ 0x41424344, "ABCD (0x41424344)",
+ };
+ struct const struct fourcc_struct try_cr = {
+ 0x41424344, "DCBA (0x44434241)",
+ };
+ static const struct fourcc_struct try_cl = {
+ le32_to_cpu(0x41424344), "ABCD (0x41424344)",
+ };
+ struct const struct fourcc_struct try_cb = {
+ be32_to_cpu(0x41424344), "ABCD (0x41424344)",
+ };

Mistyped struct instead of static. Will fix in v4.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc
  2025-02-21 19:37     ` Aditya Garg
@ 2025-02-21 20:18       ` andriy.shevchenko
  2025-02-21 20:22         ` andriy.shevchenko
  0 siblings, 1 reply; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-21 20:18 UTC (permalink / raw)
  To: Aditya Garg
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Fri, Feb 21, 2025 at 07:37:17PM +0000, Aditya Garg wrote:
> > On 21 Feb 2025, at 8:59 PM, andriy.shevchenko@linux.intel.com wrote:
> > On Fri, Feb 21, 2025 at 11:37:13AM +0000, Aditya Garg wrote:

> > First of all, I do not see the cover letter. Is it only an issue on my side?
> 
> These are literally 3 patches that are self explanatory.

So what? Anybody will be puzzled with the simple question (and probably not the
only one): Why are these in the series? Do they dependent or independent? What's
the goal and how they should be routed? (You see, there are already 4).

> Is this a hard and fast rule that a cover letter MUST be there?

Cover letter SHOULD be there if there are more than one patch.
Yes, there are exceptions, but this is the idea for the series.

Use your common sense, if there is no documented thingy.

...

> > Second, don't issue versions too fast, give at least a few days for the
> > reviewers to have a chance on looking into it.
> 
> Sure, I’ll take care of that.

Btw, _this_ is very clearly documented.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc
  2025-02-21 20:18       ` andriy.shevchenko
@ 2025-02-21 20:22         ` andriy.shevchenko
  0 siblings, 0 replies; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-21 20:22 UTC (permalink / raw)
  To: Aditya Garg
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Fri, Feb 21, 2025 at 10:18:16PM +0200, andriy.shevchenko@linux.intel.com wrote:
> On Fri, Feb 21, 2025 at 07:37:17PM +0000, Aditya Garg wrote:
> > > On 21 Feb 2025, at 8:59 PM, andriy.shevchenko@linux.intel.com wrote:
> > > On Fri, Feb 21, 2025 at 11:37:13AM +0000, Aditya Garg wrote:
> 
> > > First of all, I do not see the cover letter. Is it only an issue on my side?
> > 
> > These are literally 3 patches that are self explanatory.
> 
> So what? Anybody will be puzzled with the simple question (and probably not the
> only one): Why are these in the series? Do they dependent or independent? What's
> the goal and how they should be routed? (You see, there are already 4).
> 
> > Is this a hard and fast rule that a cover letter MUST be there?
> 
> Cover letter SHOULD be there if there are more than one patch.
> Yes, there are exceptions, but this is the idea for the series.

FWIW, two more points:
1) yes, it's a MUST for some subsystems (BPF has this even documented);
2) there are tools (`b4`) that rely on the cover letter (shazam feature
or multiplying trailers if it/they was/were given against the cover letter).

> Use your common sense, if there is no documented thingy.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888
  2025-02-21 17:21   ` Aditya Garg
@ 2025-02-21 20:25     ` andriy.shevchenko
  0 siblings, 0 replies; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-21 20:25 UTC (permalink / raw)
  To: Aditya Garg
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Fri, Feb 21, 2025 at 05:21:08PM +0000, Aditya Garg wrote:
> > On 21 Feb 2025, at 9:21 PM, andriy.shevchenko@linux.intel.com wrote:
> > On Fri, Feb 21, 2025 at 11:36:00AM +0000, Aditya Garg wrote:

...

> >> + for (x = 0; x < pixels; x++) {
> >> + pix = le32_to_cpu(sbuf32[x]);
> >> + /* write red-green-blue to output in little endianness */
> >> + *dbuf8++ = (pix & 0x00ff0000) >> 16;
> >> + *dbuf8++ = (pix & 0x0000ff00) >> 8;
> >> + *dbuf8++ = (pix & 0x000000ff) >> 0;
> > 
> > put_unaligned_be24()

(1)

> >> + }

...

> >> + static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = {
> >> + 3,
> >> + };
> > 
> > One line?
> > 
> > static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = { 3 };
> 
> Wrt all the above respective changes, the formatting has been done exactly like what other emulation helps do in the upstream patch.
> 
> I doubt Thomas would want these changes to be done, or would want these changes to be done for the upstream emulation helpers as well.
> 
> For reference: https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/drm_format_helper.c

I'm not sure how this is applicable to (1) above. Otherwise it's fine if there
is a documented style or due to consistency with the existing style.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-21 19:13     ` Aditya Garg
@ 2025-02-21 20:42       ` andriy.shevchenko
  2025-02-22  9:07         ` Aditya Garg
  0 siblings, 1 reply; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-21 20:42 UTC (permalink / raw)
  To: Aditya Garg
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Fri, Feb 21, 2025 at 07:13:06PM +0000, Aditya Garg wrote:
> > On Fri, Feb 21, 2025 at 11:37:57AM +0000, Aditya Garg wrote:

...

> >> +} __packed;
> > 
> > Why __packed? Please explain and justify for all the data types that are marked
> > with this attribute.
> 
> Just following the original Windows driver here (#pragma pack) :
> 
> https://github.com/imbushuo/DFRDisplayKm/blob/master/src/DFRDisplayKm/include/DFRHostIo.h
> 
> IMO these structures are used for communication with the Touch Bar over USB.
> The hardware expects a very specific layout for the data it receives and
> sends. If the compiler were to insert padding for alignment, it would break
> the communication protocol because the fields would not be in the expected
> positions.

What padding, please? Why TCP UAPI headers do not have these attributes?
Think about it, and think about what actually __packed does and how it affects
(badly) the code generation. Otherwise it looks like a cargo cult.

> I tried removing __packed btw and driver no longer works.

So, you need to find a justification why. But definitely not due to padding in
many of them. They can go without __packed as they are naturally aligned.

...

> >> + if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
> >> + if (!readiness_signal_received) {
> >> + readiness_signal_received = true;
> >> + goto retry;
> >> + }
> >> +
> >> + drm_err(drm, "Encountered unexpected readiness signal\n");
> >> + return -EIO;
> >> + }
> >> +
> >> + if (actual_size != size) {
> >> + drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
> >> + actual_size, size);
> >> + return -EIO;
> >> + }
> >> +
> >> + if (response->msg != expected_response) {
> >> + drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
> >> + &expected_response, &response->msg);
> >> + return -EIO;
> > 
> > For three different cases the same error code, can it be adjusted more to the
> > situation?
> 
> All these are I/O errors, you got any suggestion?

Your email client mangled the code so badly that it's hard to read. But I would
suggest to use -EINTR in the first case, and -EBADMSG. But also you may consider
-EPROTO.

> >> + }

...

> >> + if (ret)
> >> + return ret;
> > 
> >> + else if (!new_plane_state->visible)
> > 
> > Why 'else'? It's redundant.
> 
> I’ve just followed what other drm drivers are doing here:
> 
> https://elixir.bootlin.com/linux/v6.13.3/source/drivers/gpu/drm/tiny/bochs.c#L436
> https://elixir.bootlin.com/linux/v6.13.3/source/drivers/gpu/drm/tiny/cirrus.c#L363
> 
> And plenty more

A bad example is still a bad example. 'else' is simply redundant in this
case and add a noisy to the code.

> I won’t mind removing else. You want that?

Sure.

...

> >> + request_size = ALIGN(sizeof(struct appletbdrm_fb_request) +
> >> +        frames_size +
> >> +        sizeof(struct appletbdrm_fb_request_footer), 16);
> > 
> > Missing header for ALIGN().
> > 
> > But have you checked overflow.h for the possibility of using some helper macros
> > from there? This is what should be usually done for k*alloc() in the kernel.
> 
> I don’t really think we need a macro here.

Hmm... is frames_size known to be in a guaranteed range to make sure no
potential overflow happens?

> >> + appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
> >> +
> >> + if (!appletbdrm_state->request)
> >> + return -ENOMEM;

...

> >> + request->msg_id = timestamp & 0xff;
> > 
> > Why ' & 0xff'?
> 
> https://github.com/imbushuo/DFRDisplayKm/blob/master/src/DFRDisplayKm/DfrDisplay.c#L147

This is not an answer.
Why do you need this here? Isn't the type of msg_id enough?

...

> >> + adev->mode = (struct drm_display_mode) {
> > 
> > Why do you need a compound literal here? Perhaps you want to have that to be
> > done directly in DRM_MODE_INIT()?
> 
> I really don’t find this as an issue. You want me to declare another structure, basically this?:

Nope, I'm asking if the DRM_MODE_INIT() is done in a way that it only can be
used for the static data. Seems like the case. Have you tried to convert
DRM_MODE_INIT() to be always a compound literal? Does it break things?

> struct drm_display_mode mode = {
> DRM_MODE_INIT(60, adev->height, adev->width,
> DRM_MODE_RES_MM(adev->height, 218),
> DRM_MODE_RES_MM(adev->width, 218))
> };
> adev->mode = mode;
> 
> >> + DRM_MODE_INIT(60, adev->height, adev->width,
> >> +       DRM_MODE_RES_MM(adev->height, 218),
> >> +       DRM_MODE_RES_MM(adev->width, 218))
> >> + };

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-21 20:42       ` andriy.shevchenko
@ 2025-02-22  9:07         ` Aditya Garg
  2025-02-22 12:22           ` Aditya Garg
  2025-02-24  8:41           ` Thomas Zimmermann
  0 siblings, 2 replies; 27+ messages in thread
From: Aditya Garg @ 2025-02-22  9:07 UTC (permalink / raw)
  To: andriy.shevchenko@linux.intel.com
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau


> What padding, please? Why TCP UAPI headers do not have these attributes?
> Think about it, and think about what actually __packed does and how it affects
> (badly) the code generation. Otherwise it looks like a cargo cult.
> 
>> I tried removing __packed btw and driver no longer works.
> 
> So, you need to find a justification why. But definitely not due to padding in
> many of them. They can go without __packed as they are naturally aligned.

Alright, I did some debugging, basically printk sizeof(struct). Did it for both packed and unpacked with the following results:

Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_request_header is 16
Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_request_header_unpacked is 16

Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_response_header is 20
Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_response_header_unpacked is 20

Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_simple_request is 32
Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_simple_request_unpacked is 32

Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_information is 65
Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_information_unpacked is 68

Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_frame is 12
Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_frame_unpacked is 12

Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_footer is 80
Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_footer_unpacked is 80

Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request is 48
Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_unpacked is 48

Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_response is 40
Feb 22 13:02:04 MacBook kernel: size of struct appletbdrm_fb_request_response_unpacked is 40

So, the difference in sizeof in unpacked and packed is only in appletbdrm_msg_information. So, I kept this packed, and removed it from others. The Touch Bar still works.

So maybe keep just this packed?
> 
> 
> 
> ...
> 
>>>> + if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
>>>> + if (!readiness_signal_received) {
>>>> + readiness_signal_received = true;
>>>> + goto retry;
>>>> + }
>>>> +
>>>> + drm_err(drm, "Encountered unexpected readiness signal\n");
>>>> + return -EIO;
>>>> + }
>>>> +
>>>> + if (actual_size != size) {
>>>> + drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
>>>> + actual_size, size);
>>>> + return -EIO;
>>>> + }
>>>> +
>>>> + if (response->msg != expected_response) {
>>>> + drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
>>>> + &expected_response, &response->msg);
>>>> + return -EIO;
>>> 
>>> For three different cases the same error code, can it be adjusted more to the
>>> situation?
>> 
>> All these are I/O errors, you got any suggestion?
> 
> Your email client mangled the code so badly that it's hard to read. But I would
> suggest to use -EINTR in the first case, and -EBADMSG. But also you may consider
> -EPROTO.
Thanks
> 
>>>> + }
> 
> ...
> 
>>>> + if (ret)
>>>> + return ret;
>>> 
>>>> + else if (!new_plane_state->visible)
>>> 
>>> Why 'else'? It's redundant.
>> 
>> I’ve just followed what other drm drivers are doing here:
>> 
>> https://elixir.bootlin.com/linux/v6.13.3/source/drivers/gpu/drm/tiny/bochs.c#L436
>> https://elixir.bootlin.com/linux/v6.13.3/source/drivers/gpu/drm/tiny/cirrus.c#L363
>> 
>> And plenty more
> 
> A bad example is still a bad example. 'else' is simply redundant in this
> case and add a noisy to the code.
> 
>> I won’t mind removing else. You want that?
> 
> Sure.
> 
> ...
> 
>>>> + request_size = ALIGN(sizeof(struct appletbdrm_fb_request) +
>>>> +        frames_size +
>>>> +        sizeof(struct appletbdrm_fb_request_footer), 16);
>>> 
>>> Missing header for ALIGN().
>>> 
>>> But have you checked overflow.h for the possibility of using some helper macros
>>> from there? This is what should be usually done for k*alloc() in the kernel.
>> 
>> I don’t really think we need a macro here.
> 
> Hmm... is frames_size known to be in a guaranteed range to make sure no
> potential overflow happens?

I don’t really find any cause of potential overflow.


> 
>>>> + appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
>>>> +
>>>> + if (!appletbdrm_state->request)
>>>> + return -ENOMEM;
> 
> ...
> 
>>>> + request->msg_id = timestamp & 0xff;
>>> 
>>> Why ' & 0xff'?
>> 
>> https://github.com/imbushuo/DFRDisplayKm/blob/master/src/DFRDisplayKm/DfrDisplay.c#L147
> 
> This is not an answer.
> Why do you need this here? Isn't the type of msg_id enough?

Hmm, I double checked this. msg_id is u8 in the Linux port so would anyways never exceed 0xff. I’ll remove this.
Its different in the Windows driver.
> 
> ...
> 
>>>> + adev->mode = (struct drm_display_mode) {
>>> 
>>> Why do you need a compound literal here? Perhaps you want to have that to be
>>> done directly in DRM_MODE_INIT()?
>> 
>> I really don’t find this as an issue. You want me to declare another structure, basically this?:
> 
> Nope, I'm asking if the DRM_MODE_INIT() is done in a way that it only can be
> used for the static data. Seems like the case. Have you tried to convert
> DRM_MODE_INIT() to be always a compound literal? Does it break things?

Seems to be breaking things.
> 
>> struct drm_display_mode mode = {
>> DRM_MODE_INIT(60, adev->height, adev->width,
>> DRM_MODE_RES_MM(adev->height, 218),
>> DRM_MODE_RES_MM(adev->width, 218))
>> };
>> adev->mode = mode;
>> 
>>>> + DRM_MODE_INIT(60, adev->height, adev->width,
>>>> +       DRM_MODE_RES_MM(adev->height, 218),
>>>> +       DRM_MODE_RES_MM(adev->width, 218))
>>>> + };
> 
> -- 
> With Best Regards,
> Andy Shevchenko
> 
> 


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-22  9:07         ` Aditya Garg
@ 2025-02-22 12:22           ` Aditya Garg
  2025-02-23 14:58             ` Aditya Garg
  2025-02-24  8:41           ` Thomas Zimmermann
  1 sibling, 1 reply; 27+ messages in thread
From: Aditya Garg @ 2025-02-22 12:22 UTC (permalink / raw)
  To: andriy.shevchenko@linux.intel.com
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau



> On 22 Feb 2025, at 2:37 PM, Aditya Garg <gargaditya08@live.com> wrote:
> 
>> 
>> What padding, please? Why TCP UAPI headers do not have these attributes?
>> Think about it, and think about what actually __packed does and how it affects
>> (badly) the code generation. Otherwise it looks like a cargo cult.
>> 
>>> I tried removing __packed btw and driver no longer works.
>> 
>> So, you need to find a justification why. But definitely not due to padding in
>> many of them. They can go without __packed as they are naturally aligned.
> 
> Alright, I did some debugging, basically printk sizeof(struct). Did it for both packed and unpacked with the following results:
> 
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_request_header is 16
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_request_header_unpacked is 16
> 
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_response_header is 20
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_response_header_unpacked is 20
> 
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_simple_request is 32
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_simple_request_unpacked is 32
> 
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_information is 65
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_information_unpacked is 68
> 
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_frame is 12
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_frame_unpacked is 12
> 
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_footer is 80
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_footer_unpacked is 80
> 
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request is 48
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_unpacked is 48
> 
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_response is 40
> Feb 22 13:02:04 MacBook kernel: size of struct appletbdrm_fb_request_response_unpacked is 40
> 
> So, the difference in sizeof in unpacked and packed is only in appletbdrm_msg_information. So, I kept this packed, and removed it from others. The Touch Bar still works.
> 
> So maybe keep just this packed?

And for justification why driver was not working, with appletbdrm_msg_information not packed is because sizeof(struct appletbdrm_msg_information) is being used in kzalloc in the driver. Similar is the case for most other __packed structs.

Maybe the author wanted to keep this value consistent across various compiler options? I don’t think CPU architecture really matters here though since this driver is exclusively for x86_64 Intel Macs.



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-22 12:22           ` Aditya Garg
@ 2025-02-23 14:58             ` Aditya Garg
  0 siblings, 0 replies; 27+ messages in thread
From: Aditya Garg @ 2025-02-23 14:58 UTC (permalink / raw)
  To: andriy.shevchenko@linux.intel.com
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau



> On 22 Feb 2025, at 5:52 PM, Aditya Garg <gargaditya08@live.com> wrote:
> 
> 
> 
>> On 22 Feb 2025, at 2:37 PM, Aditya Garg <gargaditya08@live.com> wrote:
>> 
>>> 
>>> What padding, please? Why TCP UAPI headers do not have these attributes?
>>> Think about it, and think about what actually __packed does and how it affects
>>> (badly) the code generation. Otherwise it looks like a cargo cult.
>>> 
>>>> I tried removing __packed btw and driver no longer works.
>>> 
>>> So, you need to find a justification why. But definitely not due to padding in
>>> many of them. They can go without __packed as they are naturally aligned.
>> 
>> Alright, I did some debugging, basically printk sizeof(struct). Did it for both packed and unpacked with the following results:
>> 
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_request_header is 16
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_request_header_unpacked is 16
>> 
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_response_header is 20
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_response_header_unpacked is 20
>> 
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_simple_request is 32
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_simple_request_unpacked is 32
>> 
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_information is 65
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_information_unpacked is 68
>> 
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_frame is 12
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_frame_unpacked is 12
>> 
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_footer is 80
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_footer_unpacked is 80
>> 
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request is 48
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_unpacked is 48
>> 
>> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_response is 40
>> Feb 22 13:02:04 MacBook kernel: size of struct appletbdrm_fb_request_response_unpacked is 40
>> 
>> So, the difference in sizeof in unpacked and packed is only in appletbdrm_msg_information. So, I kept this packed, and removed it from others. The Touch Bar still works.
>> 
>> So maybe keep just this packed?
> 
> And for justification why driver was not working, with appletbdrm_msg_information not packed is because sizeof(struct appletbdrm_msg_information) is being used in kzalloc in the driver. Similar is the case for most other __packed structs.

I tried to debug a bit more and its not really the kzalloc logic, rather its the USB bit that’s causing the issue:

Code:

static int appletbdrm_read_response(struct appletbdrm_device *adev,
				    struct appletbdrm_msg_response_header *response,
				    size_t size, __le32 expected_response)
{
	struct usb_device *udev = adev_to_udev(adev);
	struct drm_device *drm = &adev->drm;
	int ret, actual_size;
	bool readiness_signal_received = false;

retry:
	ret = usb_bulk_msg(udev, usb_rcvbulkpipe(udev, adev->in_ep),
			   response, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
	if (ret) {
		drm_err(drm, "Failed to read response (%d)\n", ret);
		return ret;
	}

	/*
	 * The device responds to the first request sent in a particular
	 * timeframe after the USB device configuration is set with a readiness
	 * signal, in which case the response should be read again
	 */
	if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
		if (!readiness_signal_received) {
			readiness_signal_received = true;
			goto retry;
		}

		drm_err(drm, "Encountered unexpected readiness signal\n");
		return -EIO;
	}

	if (actual_size != size) {
		drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
			actual_size, size);
		return -EIO;
	}

	if (response->msg != expected_response) {
		drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
			&expected_response, &response->msg);
		return -EIO;
	}

	return 0;
}

Error:

Feb 23 20:00:29 MacBook kernel: appletbdrm 7-6:2.1: [drm] *ERROR* Actual size (65) doesn't match expected size (68)

So IMO, we still need this struct to remain packed.

> 
> Maybe the author wanted to keep this value consistent across various compiler options? I don’t think CPU architecture really matters here though since this driver is exclusively for x86_64 Intel Macs.



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-22  9:07         ` Aditya Garg
  2025-02-22 12:22           ` Aditya Garg
@ 2025-02-24  8:41           ` Thomas Zimmermann
  2025-02-24  9:47             ` andriy.shevchenko
  1 sibling, 1 reply; 27+ messages in thread
From: Thomas Zimmermann @ 2025-02-24  8:41 UTC (permalink / raw)
  To: Aditya Garg, andriy.shevchenko@linux.intel.com
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	airlied@gmail.com, simona@ffwll.ch, Andrew Morton,
	apw@canonical.com, joe@perches.com, dwaipayanray1@gmail.com,
	lukas.bulwahn@gmail.com, sumit.semwal@linaro.org,
	christian.koenig@amd.com, Kerem Karabay, Aun-Ali Zaidi,
	Orlando Chamberlain, Atharva Tiwari, linux-doc@vger.kernel.org,
	Linux Kernel Mailing List, dri-devel@lists.freedesktop.org,
	linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org,
	Hector Martin, linux@armlinux.org.uk, Asahi Linux Mailing List,
	Sven Peter, Janne Grunau

Hi

Am 22.02.25 um 10:07 schrieb Aditya Garg:
>> What padding, please? Why TCP UAPI headers do not have these attributes?
>> Think about it, and think about what actually __packed does and how it affects
>> (badly) the code generation. Otherwise it looks like a cargo cult.
>>
>>> I tried removing __packed btw and driver no longer works.
>> So, you need to find a justification why. But definitely not due to padding in
>> many of them. They can go without __packed as they are naturally aligned.
> Alright, I did some debugging, basically printk sizeof(struct). Did it for both packed and unpacked with the following results:
>
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_request_header is 16
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_request_header_unpacked is 16
>
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_response_header is 20
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_response_header_unpacked is 20
>
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_simple_request is 32
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_simple_request_unpacked is 32
>
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_information is 65
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_information_unpacked is 68

In the unpacked version, there is a 3-byte gap after the 
'bits_per_pixel' to align the next field. Using __packed removes those 
gaps at the expense of runtime overhead.
>
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_frame is 12
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_frame_unpacked is 12
>
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_footer is 80
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_footer_unpacked is 80
>
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request is 48
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_unpacked is 48
>
> Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_response is 40
> Feb 22 13:02:04 MacBook kernel: size of struct appletbdrm_fb_request_response_unpacked is 40
>
> So, the difference in sizeof in unpacked and packed is only in appletbdrm_msg_information. So, I kept this packed, and removed it from others. The Touch Bar still works.
>
> So maybe keep just this packed?

The fields in the TCP header are aligned by design. Unfortunately, this 
hardware's protocol is not. And there's no way of fixing this now. Just 
keep all of them packed if you want. At least it's clear then what 
happens. And if your hardware requires this, you can't do much anyway.

Best regards
Thomas


>>
>>
>> ...
>>
>>>>> + if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
>>>>> + if (!readiness_signal_received) {
>>>>> + readiness_signal_received = true;
>>>>> + goto retry;
>>>>> + }
>>>>> +
>>>>> + drm_err(drm, "Encountered unexpected readiness signal\n");
>>>>> + return -EIO;
>>>>> + }
>>>>> +
>>>>> + if (actual_size != size) {
>>>>> + drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
>>>>> + actual_size, size);
>>>>> + return -EIO;
>>>>> + }
>>>>> +
>>>>> + if (response->msg != expected_response) {
>>>>> + drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
>>>>> + &expected_response, &response->msg);
>>>>> + return -EIO;
>>>> For three different cases the same error code, can it be adjusted more to the
>>>> situation?
>>> All these are I/O errors, you got any suggestion?
>> Your email client mangled the code so badly that it's hard to read. But I would
>> suggest to use -EINTR in the first case, and -EBADMSG. But also you may consider
>> -EPROTO.
> Thanks
>>>>> + }
>> ...
>>
>>>>> + if (ret)
>>>>> + return ret;
>>>>> + else if (!new_plane_state->visible)
>>>> Why 'else'? It's redundant.
>>> I’ve just followed what other drm drivers are doing here:
>>>
>>> https://elixir.bootlin.com/linux/v6.13.3/source/drivers/gpu/drm/tiny/bochs.c#L436
>>> https://elixir.bootlin.com/linux/v6.13.3/source/drivers/gpu/drm/tiny/cirrus.c#L363
>>>
>>> And plenty more
>> A bad example is still a bad example. 'else' is simply redundant in this
>> case and add a noisy to the code.
>>
>>> I won’t mind removing else. You want that?
>> Sure.
>>
>> ...
>>
>>>>> + request_size = ALIGN(sizeof(struct appletbdrm_fb_request) +
>>>>> +        frames_size +
>>>>> +        sizeof(struct appletbdrm_fb_request_footer), 16);
>>>> Missing header for ALIGN().
>>>>
>>>> But have you checked overflow.h for the possibility of using some helper macros
>>>> from there? This is what should be usually done for k*alloc() in the kernel.
>>> I don’t really think we need a macro here.
>> Hmm... is frames_size known to be in a guaranteed range to make sure no
>> potential overflow happens?
> I don’t really find any cause of potential overflow.
>
>
>>>>> + appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
>>>>> +
>>>>> + if (!appletbdrm_state->request)
>>>>> + return -ENOMEM;
>> ...
>>
>>>>> + request->msg_id = timestamp & 0xff;
>>>> Why ' & 0xff'?
>>> https://github.com/imbushuo/DFRDisplayKm/blob/master/src/DFRDisplayKm/DfrDisplay.c#L147
>> This is not an answer.
>> Why do you need this here? Isn't the type of msg_id enough?
> Hmm, I double checked this. msg_id is u8 in the Linux port so would anyways never exceed 0xff. I’ll remove this.
> Its different in the Windows driver.
>> ...
>>
>>>>> + adev->mode = (struct drm_display_mode) {
>>>> Why do you need a compound literal here? Perhaps you want to have that to be
>>>> done directly in DRM_MODE_INIT()?
>>> I really don’t find this as an issue. You want me to declare another structure, basically this?:
>> Nope, I'm asking if the DRM_MODE_INIT() is done in a way that it only can be
>> used for the static data. Seems like the case. Have you tried to convert
>> DRM_MODE_INIT() to be always a compound literal? Does it break things?
> Seems to be breaking things.
>>> struct drm_display_mode mode = {
>>> DRM_MODE_INIT(60, adev->height, adev->width,
>>> DRM_MODE_RES_MM(adev->height, 218),
>>> DRM_MODE_RES_MM(adev->width, 218))
>>> };
>>> adev->mode = mode;
>>>
>>>>> + DRM_MODE_INIT(60, adev->height, adev->width,
>>>>> +       DRM_MODE_RES_MM(adev->height, 218),
>>>>> +       DRM_MODE_RES_MM(adev->width, 218))
>>>>> + };
>> -- 
>> With Best Regards,
>> Andy Shevchenko
>>
>>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-21 11:37 ` [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs Aditya Garg
  2025-02-21 15:48   ` andriy.shevchenko
@ 2025-02-24  9:09   ` Thomas Zimmermann
  2025-02-24  9:14     ` Aditya Garg
  1 sibling, 1 reply; 27+ messages in thread
From: Thomas Zimmermann @ 2025-02-24  9:09 UTC (permalink / raw)
  To: Aditya Garg, pmladek@suse.com, Steven Rostedt,
	andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	airlied@gmail.com, simona@ffwll.ch, Andrew Morton,
	apw@canonical.com, joe@perches.com, dwaipayanray1@gmail.com,
	lukas.bulwahn@gmail.com, sumit.semwal@linaro.org,
	christian.koenig@amd.com
  Cc: Kerem Karabay, Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

Hi

Am 21.02.25 um 12:37 schrieb Aditya Garg:
> From: Kerem Karabay <kekrby@gmail.com>
>
> The Touch Bars found on x86 Macs support two USB configurations: one
> where the device presents itself as a HID keyboard and can display
> predefined sets of keys, and one where the operating system has full
> control over what is displayed.
>
> This commit adds support for the display functionality of the second
> configuration. Functionality for the first configuration has been
> merged in the HID tree.
>
> Note that this driver has only been tested on T2 Macs, and only includes
> the USB device ID for these devices. Testing on T1 Macs would be
> appreciated.
>
> Credit goes to Ben (Bingxing) Wang on GitHub [1] for reverse engineering
> most of the protocol.
>
> [1]: https://github.com/imbushuo/DFRDisplayKm
>
> Signed-off-by: Kerem Karabay <kekrby@gmail.com>
> Co-developed-by: Atharva Tiwari <evepolonium@gmail.com>
> Signed-off-by: Atharva Tiwari <evepolonium@gmail.com>
> Co-developed-by: Aditya Garg <gargaditya08@live.com>
> Signed-off-by: Aditya Garg <gargaditya08@live.com>
> Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
> ---
> v2 ->
> - Add the driver to MAINTAINERS.
> - Allocate memory for request and response in plane's atomic-check helper
> - Void the use of drm_fb_blit()
> - Implement atomic_disable
> - Make PRIME work
> - Remove the date field from struct drm_driver
> - intersect damage with dst_clip
> - Register DRM device in appletbdrm_probe
> - Clear the display as the final call in probe
> - Select hid_multitouch as well in kconfig
>
> v3 ->
> - Change commit message to credit Ben (Bingxing) Wang
>   MAINTAINERS                       |   7 +
>   drivers/gpu/drm/tiny/Kconfig      |  14 +
>   drivers/gpu/drm/tiny/Makefile     |   1 +
>   drivers/gpu/drm/tiny/appletbdrm.c | 806 ++++++++++++++++++++++++++++++
>   4 files changed, 828 insertions(+)
>   create mode 100644 drivers/gpu/drm/tiny/appletbdrm.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index efee40ea5..43fafaab3 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -7148,6 +7148,13 @@ S:	Supported
>   T:	git https://gitlab.freedesktop.org/drm/misc/kernel.git
>   F:	drivers/gpu/drm/sun4i/sun8i*
>   
> +DRM DRIVER FOR APPLE TOUCH BARS
> +M:	Aun-Ali Zaidi <admin@kodeit.net>

You cannot put someone else here. Who is that?

> +L:	dri-devel@lists.freedesktop.org
> +S:	Maintained
> +T:	git https://gitlab.freedesktop.org/drm/misc/kernel.git
> +F:	drivers/gpu/drm/tiny/appletbdrm.c
> +
>   DRM DRIVER FOR ARM PL111 CLCD
>   M:	Linus Walleij <linus.walleij@linaro.org>
>   S:	Maintained
> diff --git a/drivers/gpu/drm/tiny/Kconfig b/drivers/gpu/drm/tiny/Kconfig
> index 94cbdb133..25471791c 100644
> --- a/drivers/gpu/drm/tiny/Kconfig
> +++ b/drivers/gpu/drm/tiny/Kconfig
> @@ -1,5 +1,19 @@
>   # SPDX-License-Identifier: GPL-2.0-only
>   
> +config DRM_APPLETBDRM
> +	tristate "DRM support for Apple Touch Bars"
> +	depends on DRM && USB && MMU
> +	select DRM_GEM_SHMEM_HELPER
> +	select DRM_KMS_HELPER
> +	select HID_APPLETB_BL
> +	select HID_MULTITOUCH
> +	help
> +	  Say Y here if you want support for the display of Touch Bars on x86
> +	  MacBook Pros.
> +
> +	  To compile this driver as a module, choose M here: the
> +	  module will be called appletbdrm.
> +
>   config DRM_ARCPGU
>   	tristate "ARC PGU"
>   	depends on DRM && OF
> diff --git a/drivers/gpu/drm/tiny/Makefile b/drivers/gpu/drm/tiny/Makefile
> index 60816d2eb..0a3a7837a 100644
> --- a/drivers/gpu/drm/tiny/Makefile
> +++ b/drivers/gpu/drm/tiny/Makefile
> @@ -1,5 +1,6 @@
>   # SPDX-License-Identifier: GPL-2.0-only
>   
> +obj-$(CONFIG_DRM_APPLETBDRM)		+= appletbdrm.o
>   obj-$(CONFIG_DRM_ARCPGU)		+= arcpgu.o
>   obj-$(CONFIG_DRM_BOCHS)			+= bochs.o
>   obj-$(CONFIG_DRM_CIRRUS_QEMU)		+= cirrus-qemu.o
> diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c

Putting this driver into tiny is ok. It's the preferred place for 
single-file DRM drivers like this one.

> new file mode 100644
> index 000000000..a17a3ecc3
> --- /dev/null
> +++ b/drivers/gpu/drm/tiny/appletbdrm.c
> @@ -0,0 +1,806 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Apple Touch Bar DRM Driver
> + *
> + * Copyright (c) 2023 Kerem Karabay <kekrby@gmail.com>
> + */
> +
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
> +#include <linux/module.h>
> +#include <linux/unaligned.h>
> +#include <linux/usb.h>
> +
> +#include <drm/drm_atomic.h>
> +#include <drm/drm_atomic_helper.h>
> +#include <drm/drm_crtc.h>
> +#include <drm/drm_damage_helper.h>
> +#include <drm/drm_drv.h>
> +#include <drm/drm_encoder.h>
> +#include <drm/drm_format_helper.h>
> +#include <drm/drm_fourcc.h>
> +#include <drm/drm_framebuffer.h>
> +#include <drm/drm_gem_atomic_helper.h>
> +#include <drm/drm_gem_framebuffer_helper.h>
> +#include <drm/drm_gem_shmem_helper.h>
> +#include <drm/drm_plane.h>
> +#include <drm/drm_probe_helper.h>
> +
> +#define __APPLETBDRM_MSG_STR4(str4)	((__le32 __force)((str4[0] << 24) | (str4[1] << 16) | (str4[2] << 8) | str4[3]))
> +#define __APPLETBDRM_MSG_TOK4(tok4)	__APPLETBDRM_MSG_STR4(#tok4)
> +
> +#define APPLETBDRM_PIXEL_FORMAT		__APPLETBDRM_MSG_TOK4(RGBA) /* The actual format is BGR888 */
> +#define APPLETBDRM_BITS_PER_PIXEL	24
> +
> +#define APPLETBDRM_MSG_CLEAR_DISPLAY	__APPLETBDRM_MSG_TOK4(CLRD)
> +#define APPLETBDRM_MSG_GET_INFORMATION	__APPLETBDRM_MSG_TOK4(GINF)
> +#define APPLETBDRM_MSG_UPDATE_COMPLETE	__APPLETBDRM_MSG_TOK4(UDCL)
> +#define APPLETBDRM_MSG_SIGNAL_READINESS	__APPLETBDRM_MSG_TOK4(REDY)
> +
> +#define APPLETBDRM_BULK_MSG_TIMEOUT	1000
> +
> +#define drm_to_adev(_drm)		container_of(_drm, struct appletbdrm_device, drm)
> +#define adev_to_udev(adev)		interface_to_usbdev(to_usb_interface(adev->dev))
> +
> +struct appletbdrm_msg_request_header {
> +	__le16 unk_00;
> +	__le16 unk_02;
> +	__le32 unk_04;
> +	__le32 unk_08;
> +	__le32 size;
> +} __packed;
> +
> +struct appletbdrm_msg_response_header {
> +	u8 unk_00[16];
> +	__le32 msg;
> +} __packed;
> +
> +struct appletbdrm_msg_simple_request {
> +	struct appletbdrm_msg_request_header header;
> +	__le32 msg;
> +	u8 unk_14[8];
> +	__le32 size;
> +} __packed;
> +
> +struct appletbdrm_msg_information {
> +	struct appletbdrm_msg_response_header header;
> +	u8 unk_14[12];
> +	__le32 width;
> +	__le32 height;
> +	u8 bits_per_pixel;
> +	__le32 bytes_per_row;
> +	__le32 orientation;
> +	__le32 bitmap_info;
> +	__le32 pixel_format;
> +	__le32 width_inches;	/* floating point */
> +	__le32 height_inches;	/* floating point */
> +} __packed;
> +
> +struct appletbdrm_frame {
> +	__le16 begin_x;
> +	__le16 begin_y;
> +	__le16 width;
> +	__le16 height;
> +	__le32 buf_size;
> +	u8 buf[];
> +} __packed;
> +
> +struct appletbdrm_fb_request_footer {
> +	u8 unk_00[12];
> +	__le32 unk_0c;
> +	u8 unk_10[12];
> +	__le32 unk_1c;
> +	__le64 timestamp;
> +	u8 unk_28[12];
> +	__le32 unk_34;
> +	u8 unk_38[20];
> +	__le32 unk_4c;
> +} __packed;
> +
> +struct appletbdrm_fb_request {
> +	struct appletbdrm_msg_request_header header;
> +	__le16 unk_10;
> +	u8 msg_id;
> +	u8 unk_13[29];
> +	/*
> +	 * Contents of `data`:
> +	 * - struct appletbdrm_frame frames[];
> +	 * - struct appletbdrm_fb_request_footer footer;
> +	 * - padding to make the total size a multiple of 16
> +	 */
> +	u8 data[];
> +} __packed;
> +
> +struct appletbdrm_fb_request_response {
> +	struct appletbdrm_msg_response_header header;
> +	u8 unk_14[12];
> +	__le64 timestamp;
> +} __packed;
> +
> +struct appletbdrm_device {
> +	struct device *dev;

This field should not be here. The Linux device is already available at 
drm.dev.

> +	struct device *dmadev;
> +
> +	unsigned int in_ep;
> +	unsigned int out_ep;
> +
> +	unsigned int width;
> +	unsigned int height;
> +
> +	struct drm_device drm;
> +	struct drm_display_mode mode;
> +	struct drm_connector connector;
> +	struct drm_plane primary_plane;
> +	struct drm_crtc crtc;
> +	struct drm_encoder encoder;
> +};
> +
> +struct appletbdrm_plane_state {
> +	struct drm_shadow_plane_state base;
> +	struct appletbdrm_fb_request *request;
> +	struct appletbdrm_fb_request_response *response;
> +	size_t request_size;
> +	size_t frames_size;
> +};
> +
> +static inline struct appletbdrm_plane_state *to_appletbdrm_plane_state(struct drm_plane_state *state)
> +{
> +	return container_of(state, struct appletbdrm_plane_state, base.base);
> +}
> +
> +static int appletbdrm_send_request(struct appletbdrm_device *adev,
> +				   struct appletbdrm_msg_request_header *request, size_t size)
> +{
> +	struct usb_device *udev = adev_to_udev(adev);
> +	struct drm_device *drm = &adev->drm;
> +	int ret, actual_size;
> +
> +	ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, adev->out_ep),
> +			   request, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
> +	if (ret) {
> +		drm_err(drm, "Failed to send message (%d)\n", ret);
> +		return ret;
> +	}
> +
> +	if (actual_size != size) {
> +		drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
> +			actual_size, size);
> +		return -EIO;
> +	}
> +
> +	return ret;
> +}
> +
> +static int appletbdrm_read_response(struct appletbdrm_device *adev,
> +				    struct appletbdrm_msg_response_header *response,
> +				    size_t size, u32 expected_response)
> +{
> +	struct usb_device *udev = adev_to_udev(adev);
> +	struct drm_device *drm = &adev->drm;
> +	int ret, actual_size;
> +	bool readiness_signal_received = false;
> +
> +retry:
> +	ret = usb_bulk_msg(udev, usb_rcvbulkpipe(udev, adev->in_ep),
> +			   response, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
> +	if (ret) {
> +		drm_err(drm, "Failed to read response (%d)\n", ret);
> +		return ret;
> +	}
> +
> +	/*
> +	 * The device responds to the first request sent in a particular
> +	 * timeframe after the USB device configuration is set with a readiness
> +	 * signal, in which case the response should be read again
> +	 */
> +	if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
> +		if (!readiness_signal_received) {
> +			readiness_signal_received = true;
> +			goto retry;
> +		}
> +
> +		drm_err(drm, "Encountered unexpected readiness signal\n");
> +		return -EIO;
> +	}
> +
> +	if (actual_size != size) {
> +		drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
> +			actual_size, size);
> +		return -EIO;
> +	}
> +
> +	if (response->msg != expected_response) {
> +		drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
> +			&expected_response, &response->msg);
> +		return -EIO;
> +	}
> +
> +	return 0;
> +}
> +
> +static int appletbdrm_send_msg(struct appletbdrm_device *adev, u32 msg)
> +{
> +	struct appletbdrm_msg_simple_request *request;
> +	int ret;
> +
> +	request = kzalloc(sizeof(*request), GFP_KERNEL);
> +	if (!request)
> +		return -ENOMEM;
> +
> +	request->header.unk_00 = cpu_to_le16(2);
> +	request->header.unk_02 = cpu_to_le16(0x1512);
> +	request->header.size = cpu_to_le32(sizeof(*request) - sizeof(request->header));
> +	request->msg = msg;
> +	request->size = request->header.size;
> +
> +	ret = appletbdrm_send_request(adev, &request->header, sizeof(*request));
> +
> +	kfree(request);
> +
> +	return ret;
> +}
> +
> +static int appletbdrm_clear_display(struct appletbdrm_device *adev)
> +{
> +	return appletbdrm_send_msg(adev, APPLETBDRM_MSG_CLEAR_DISPLAY);
> +}
> +
> +static int appletbdrm_signal_readiness(struct appletbdrm_device *adev)
> +{
> +	return appletbdrm_send_msg(adev, APPLETBDRM_MSG_SIGNAL_READINESS);
> +}
> +
> +static int appletbdrm_get_information(struct appletbdrm_device *adev)
> +{
> +	struct appletbdrm_msg_information *info;
> +	struct drm_device *drm = &adev->drm;
> +	u8 bits_per_pixel;
> +	u32 pixel_format;
> +	int ret;
> +
> +	info = kzalloc(sizeof(*info), GFP_KERNEL);
> +	if (!info)
> +		return -ENOMEM;
> +
> +	ret = appletbdrm_send_msg(adev, APPLETBDRM_MSG_GET_INFORMATION);
> +	if (ret)
> +		return ret;
> +
> +	ret = appletbdrm_read_response(adev, &info->header, sizeof(*info),
> +				       APPLETBDRM_MSG_GET_INFORMATION);
> +	if (ret)
> +		goto free_info;
> +
> +	bits_per_pixel = info->bits_per_pixel;
> +	pixel_format = get_unaligned(&info->pixel_format);
> +
> +	adev->width = get_unaligned_le32(&info->width);
> +	adev->height = get_unaligned_le32(&info->height);
> +
> +	if (bits_per_pixel != APPLETBDRM_BITS_PER_PIXEL) {
> +		drm_err(drm, "Encountered unexpected bits per pixel value (%d)\n", bits_per_pixel);
> +		ret = -EINVAL;
> +		goto free_info;
> +	}
> +
> +	if (pixel_format != APPLETBDRM_PIXEL_FORMAT) {
> +		drm_err(drm, "Encountered unknown pixel format (%p4ch)\n", &pixel_format);
> +		ret = -EINVAL;
> +		goto free_info;
> +	}
> +
> +free_info:
> +	kfree(info);
> +
> +	return ret;
> +}
> +
> +static u32 rect_size(struct drm_rect *rect)
> +{
> +	return drm_rect_width(rect) * drm_rect_height(rect) * (APPLETBDRM_BITS_PER_PIXEL / 8);
> +}
> +
> +static int appletbdrm_connector_helper_get_modes(struct drm_connector *connector)
> +{
> +	struct appletbdrm_device *adev = drm_to_adev(connector->dev);
> +
> +	return drm_connector_helper_get_modes_fixed(connector, &adev->mode);
> +}
> +
> +static const u32 appletbdrm_primary_plane_formats[] = {
> +	DRM_FORMAT_BGR888,
> +	DRM_FORMAT_XRGB8888, /* emulated */
> +};
> +
> +static int appletbdrm_primary_plane_helper_atomic_check(struct drm_plane *plane,
> +						   struct drm_atomic_state *state)
> +{
> +	struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state, plane);
> +	struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(state, plane);
> +	struct drm_crtc *new_crtc = new_plane_state->crtc;
> +	struct drm_crtc_state *new_crtc_state = NULL;
> +	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(new_plane_state);
> +	struct drm_atomic_helper_damage_iter iter;
> +	struct drm_rect damage;
> +	size_t frames_size = 0;
> +	size_t request_size;
> +	int ret;
> +
> +	if (new_crtc)
> +		new_crtc_state = drm_atomic_get_new_crtc_state(state, new_crtc);
> +
> +	ret = drm_atomic_helper_check_plane_state(new_plane_state, new_crtc_state,
> +						  DRM_PLANE_NO_SCALING,
> +						  DRM_PLANE_NO_SCALING,
> +						  false, false);
> +	if (ret)
> +		return ret;
> +	else if (!new_plane_state->visible)
> +		return 0;
> +
> +	drm_atomic_helper_damage_iter_init(&iter, old_plane_state, new_plane_state);
> +	drm_atomic_for_each_plane_damage(&iter, &damage) {
> +		frames_size += struct_size((struct appletbdrm_frame *)0, buf, rect_size(&damage));
> +	}
> +
> +	if (!frames_size)
> +		return 0;
> +
> +	request_size = ALIGN(sizeof(struct appletbdrm_fb_request) +
> +		       frames_size +
> +		       sizeof(struct appletbdrm_fb_request_footer), 16);
> +
> +	appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
> +
> +	if (!appletbdrm_state->request)
> +		return -ENOMEM;
> +
> +	appletbdrm_state->response = kzalloc(sizeof(*appletbdrm_state->response), GFP_KERNEL);
> +
> +	if (!appletbdrm_state->response)
> +		return -ENOMEM;
> +
> +	appletbdrm_state->request_size = request_size;
> +	appletbdrm_state->frames_size = frames_size;

AFAIU you're preallocating the memory for the drawing commands. Makes 
sense to me.

> +
> +	return 0;
> +}
> +
> +static int appletbdrm_flush_damage(struct appletbdrm_device *adev,
> +				   struct drm_plane_state *old_state,
> +				   struct drm_plane_state *state)
> +{
> +	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
> +	struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state);
> +	struct appletbdrm_fb_request_response *response = appletbdrm_state->response;
> +	struct appletbdrm_fb_request_footer *footer;
> +	struct drm_atomic_helper_damage_iter iter;
> +	struct drm_framebuffer *fb = state->fb;
> +	struct appletbdrm_fb_request *request = appletbdrm_state->request;
> +	struct drm_device *drm = &adev->drm;
> +	struct appletbdrm_frame *frame;
> +	u64 timestamp = ktime_get_ns();
> +	struct drm_rect damage;
> +	size_t frames_size = appletbdrm_state->frames_size;
> +	size_t request_size = appletbdrm_state->request_size;
> +	int ret;
> +
> +	if (!frames_size)
> +		return 0;
> +
> +	ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE);
> +	if (ret) {
> +		drm_err(drm, "Failed to start CPU framebuffer access (%d)\n", ret);
> +		goto end_fb_cpu_access;
> +	}
> +
> +	request->header.unk_00 = cpu_to_le16(2);
> +	request->header.unk_02 = cpu_to_le16(0x12);
> +	request->header.unk_04 = cpu_to_le32(9);
> +	request->header.size = cpu_to_le32(request_size - sizeof(request->header));
> +	request->unk_10 = cpu_to_le16(1);
> +	request->msg_id = timestamp & 0xff;
> +
> +	frame = (struct appletbdrm_frame *)request->data;
> +
> +	drm_atomic_helper_damage_iter_init(&iter, old_state, state);
> +	drm_atomic_for_each_plane_damage(&iter, &damage) {
> +		struct drm_rect dst_clip = state->dst;
> +		struct iosys_map dst = IOSYS_MAP_INIT_VADDR(frame->buf);
> +		u32 buf_size = rect_size(&damage);
> +
> +		if (!drm_rect_intersect(&dst_clip, &damage))
> +			continue;
> +
> +		/*
> +		 * The coordinates need to be translated to the coordinate
> +		 * system the device expects, see the comment in
> +		 * appletbdrm_setup_mode_config
> +		 */
> +		frame->begin_x = cpu_to_le16(damage.y1);
> +		frame->begin_y = cpu_to_le16(adev->height - damage.x2);
> +		frame->width = cpu_to_le16(drm_rect_height(&damage));
> +		frame->height = cpu_to_le16(drm_rect_width(&damage));
> +		frame->buf_size = cpu_to_le32(buf_size);
> +
> +		switch (fb->format->format) {
> +		case DRM_FORMAT_XRGB8888:
> +			drm_fb_xrgb8888_to_bgr888(&dst, NULL, &shadow_plane_state->data[0], fb, &damage, &shadow_plane_state->fmtcnv_state);
> +			break;
> +		default:
> +			drm_fb_memcpy(&dst, NULL, &shadow_plane_state->data[0], fb, &damage);
> +			break;
> +		}
> +
> +		frame = (void *)frame + struct_size(frame, buf, buf_size);
> +	}
> +
> +	footer = (struct appletbdrm_fb_request_footer *)&request->data[frames_size];
> +
> +	footer->unk_0c = cpu_to_le32(0xfffe);
> +	footer->unk_1c = cpu_to_le32(0x80001);
> +	footer->unk_34 = cpu_to_le32(0x80002);
> +	footer->unk_4c = cpu_to_le32(0xffff);
> +	footer->timestamp = cpu_to_le64(timestamp);

And here you're building the drawing commands from the allocated frame 
memory. Also makes sense.

> +
> +	ret = appletbdrm_send_request(adev, &request->header, request_size);
> +	if (ret)
> +		goto end_fb_cpu_access;
> +
> +	ret = appletbdrm_read_response(adev, &response->header, sizeof(*response),
> +				       APPLETBDRM_MSG_UPDATE_COMPLETE);
> +	if (ret)
> +		goto end_fb_cpu_access;
> +
> +	if (response->timestamp != footer->timestamp) {
> +		drm_err(drm, "Response timestamp (%llu) doesn't match request timestamp (%llu)\n",
> +			le64_to_cpu(response->timestamp), timestamp);
> +		goto end_fb_cpu_access;
> +	}
> +
> +end_fb_cpu_access:
> +	drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE);
> +
> +	return ret;
> +}
> +
> +static void appletbdrm_primary_plane_helper_atomic_update(struct drm_plane *plane,
> +						     struct drm_atomic_state *old_state)
> +{
> +	struct appletbdrm_device *adev = drm_to_adev(plane->dev);
> +	struct drm_device *drm = plane->dev;
> +	struct drm_plane_state *plane_state = plane->state;
> +	struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(old_state, plane);
> +	int idx;
> +
> +	if (!drm_dev_enter(drm, &idx))
> +		return;
> +
> +	appletbdrm_flush_damage(adev, old_plane_state, plane_state);
> +
> +	drm_dev_exit(idx);
> +}
> +
> +static void appletbdrm_primary_plane_helper_atomic_disable(struct drm_plane *plane,
> +							   struct drm_atomic_state *state)
> +{
> +	struct drm_device *dev = plane->dev;
> +	struct appletbdrm_device *adev = drm_to_adev(dev);
> +	int idx;
> +
> +	if (!drm_dev_enter(dev, &idx))
> +		return;
> +
> +	appletbdrm_clear_display(adev);
> +
> +	drm_dev_exit(idx);
> +}
> +
> +static void appletbdrm_primary_plane_reset(struct drm_plane *plane)
> +{
> +	struct appletbdrm_plane_state *appletbdrm_state;
> +
> +	WARN_ON(plane->state);
> +
> +	appletbdrm_state = kzalloc(sizeof(*appletbdrm_state), GFP_KERNEL);
> +	if (!appletbdrm_state)
> +		return;
> +
> +	__drm_gem_reset_shadow_plane(plane, &appletbdrm_state->base);
> +}
> +
> +static struct drm_plane_state *appletbdrm_primary_plane_duplicate_state(struct drm_plane *plane)
> +{
> +	struct drm_shadow_plane_state *new_shadow_plane_state;
> +	struct appletbdrm_plane_state *old_appletbdrm_state;
> +	struct appletbdrm_plane_state *appletbdrm_state;
> +
> +	if (WARN_ON(!plane->state))
> +		return NULL;
> +
> +	old_appletbdrm_state = to_appletbdrm_plane_state(plane->state);
> +	appletbdrm_state = kmemdup(old_appletbdrm_state, sizeof(*appletbdrm_state), GFP_KERNEL);
> +	if (!appletbdrm_state)
> +		return NULL;
> +
> +	/* Request and response are not duplicated and are allocated in .atomic_check */
> +	appletbdrm_state->request = NULL;
> +	appletbdrm_state->response = NULL;

You also have to clear the frame and request size, I think.

Duplicated state will be processed by the atomic_check before being 
used. So you'll have a chance of recomputing these temporary buffers.

Simply allocate with kzalloc instead of kmemdup() and you'll be fine.

> +
> +	new_shadow_plane_state = &appletbdrm_state->base;
> +
> +	__drm_gem_duplicate_shadow_plane_state(plane, new_shadow_plane_state);

This call is important to do.

> +
> +	return &new_shadow_plane_state->base;
> +}
> +
> +static void appletbdrm_primary_plane_destroy_state(struct drm_plane *plane,
> +						   struct drm_plane_state *state)
> +{
> +	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
> +
> +	kfree(appletbdrm_state->request);
> +	kfree(appletbdrm_state->response);
> +
> +	__drm_gem_destroy_shadow_plane_state(&appletbdrm_state->base);
> +
> +	kfree(appletbdrm_state);
> +}
> +
> +static const struct drm_plane_helper_funcs appletbdrm_primary_plane_helper_funcs = {
> +	DRM_GEM_SHADOW_PLANE_HELPER_FUNCS,
> +	.atomic_check = appletbdrm_primary_plane_helper_atomic_check,
> +	.atomic_update = appletbdrm_primary_plane_helper_atomic_update,
> +	.atomic_disable = appletbdrm_primary_plane_helper_atomic_disable,
> +};
> +
> +static const struct drm_plane_funcs appletbdrm_primary_plane_funcs = {
> +	.update_plane = drm_atomic_helper_update_plane,
> +	.disable_plane = drm_atomic_helper_disable_plane,
> +	.reset = appletbdrm_primary_plane_reset,
> +	.atomic_duplicate_state = appletbdrm_primary_plane_duplicate_state,
> +	.atomic_destroy_state = appletbdrm_primary_plane_destroy_state,
> +	.destroy = drm_plane_cleanup,
> +};
> +
> +static enum drm_mode_status appletbdrm_crtc_helper_mode_valid(struct drm_crtc *crtc,
> +							  const struct drm_display_mode *mode)
> +{
> +	struct appletbdrm_device *adev = drm_to_adev(crtc->dev);
> +
> +	return drm_crtc_helper_mode_valid_fixed(crtc, mode, &adev->mode);
> +}
> +
> +static const struct drm_mode_config_funcs appletbdrm_mode_config_funcs = {
> +	.fb_create = drm_gem_fb_create_with_dirty,
> +	.atomic_check = drm_atomic_helper_check,
> +	.atomic_commit = drm_atomic_helper_commit,
> +};
> +
> +static const struct drm_connector_funcs appletbdrm_connector_funcs = {
> +	.reset = drm_atomic_helper_connector_reset,
> +	.destroy = drm_connector_cleanup,
> +	.fill_modes = drm_helper_probe_single_connector_modes,
> +	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> +	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
> +};
> +
> +static const struct drm_connector_helper_funcs appletbdrm_connector_helper_funcs = {
> +	.get_modes = appletbdrm_connector_helper_get_modes,
> +};
> +
> +static const struct drm_crtc_helper_funcs appletbdrm_crtc_helper_funcs = {
> +	.mode_valid = appletbdrm_crtc_helper_mode_valid,
> +};
> +
> +static const struct drm_crtc_funcs appletbdrm_crtc_funcs = {
> +	.reset = drm_atomic_helper_crtc_reset,
> +	.destroy = drm_crtc_cleanup,
> +	.set_config = drm_atomic_helper_set_config,
> +	.page_flip = drm_atomic_helper_page_flip,
> +	.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
> +	.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
> +};
> +
> +static const struct drm_encoder_funcs appletbdrm_encoder_funcs = {
> +	.destroy = drm_encoder_cleanup,
> +};
> +
> +static struct drm_gem_object *appletbdrm_driver_gem_prime_import(struct drm_device *dev,
> +								 struct dma_buf *dma_buf)
> +{
> +	struct appletbdrm_device *adev = drm_to_adev(dev);
> +
> +	if (!adev->dmadev)
> +		return ERR_PTR(-ENODEV);
> +
> +	return drm_gem_prime_import_dev(dev, dma_buf, adev->dmadev);
> +}
> +
> +DEFINE_DRM_GEM_FOPS(appletbdrm_drm_fops);
> +
> +static const struct drm_driver appletbdrm_drm_driver = {
> +	DRM_GEM_SHMEM_DRIVER_OPS,
> +	.gem_prime_import	= appletbdrm_driver_gem_prime_import,
> +	.name			= "appletbdrm",
> +	.desc			= "Apple Touch Bar DRM Driver",
> +	.major			= 1,
> +	.minor			= 0,
> +	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
> +	.fops			= &appletbdrm_drm_fops,
> +};
> +
> +static int appletbdrm_setup_mode_config(struct appletbdrm_device *adev)
> +{
> +	struct drm_connector *connector = &adev->connector;
> +	struct drm_plane *primary_plane;
> +	struct drm_crtc *crtc;
> +	struct drm_encoder *encoder;
> +	struct drm_device *drm = &adev->drm;
> +	struct device *dev = adev->dev;
> +	int ret;
> +
> +	ret = drmm_mode_config_init(drm);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize mode configuration\n");

Use drm_err() here. It does the right thing. We don't have a 
drm_dev_probe() yet, but you're discouraged from useing the dev_() print 
helpers.

Same below.

> +
> +	primary_plane = &adev->primary_plane;
> +	ret = drm_universal_plane_init(drm, primary_plane, 0,
> +				       &appletbdrm_primary_plane_funcs,
> +				       appletbdrm_primary_plane_formats,
> +				       ARRAY_SIZE(appletbdrm_primary_plane_formats),
> +				       NULL,
> +				       DRM_PLANE_TYPE_PRIMARY, NULL);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize universal plane object\n");
> +	drm_plane_helper_add(primary_plane, &appletbdrm_primary_plane_helper_funcs);
> +	drm_plane_enable_fb_damage_clips(primary_plane);
> +
> +	crtc = &adev->crtc;
> +	ret = drm_crtc_init_with_planes(drm, crtc, primary_plane, NULL,
> +					&appletbdrm_crtc_funcs, NULL);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize CRTC object\n");
> +	drm_crtc_helper_add(crtc, &appletbdrm_crtc_helper_funcs);
> +
> +	encoder = &adev->encoder;
> +	ret = drm_encoder_init(drm, encoder, &appletbdrm_encoder_funcs,
> +			       DRM_MODE_ENCODER_DAC, NULL);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize encoder\n");
> +	encoder->possible_crtcs = drm_crtc_mask(crtc);
> +
> +	/*
> +	 * The coordinate system used by the device is different from the
> +	 * coordinate system of the framebuffer in that the x and y axes are
> +	 * swapped, and that the y axis is inverted; so what the device reports
> +	 * as the height is actually the width of the framebuffer and vice
> +	 * versa
> +	 */
> +	drm->mode_config.min_width = 0;
> +	drm->mode_config.min_height = 0;

No need to clear this to zero.

> +	drm->mode_config.max_width = max(adev->height, DRM_SHADOW_PLANE_MAX_WIDTH);
> +	drm->mode_config.max_height = max(adev->width, DRM_SHADOW_PLANE_MAX_HEIGHT);
> +	drm->mode_config.preferred_depth = APPLETBDRM_BITS_PER_PIXEL;
> +	drm->mode_config.funcs = &appletbdrm_mode_config_funcs;
> +
> +	adev->mode = (struct drm_display_mode) {
> +		DRM_MODE_INIT(60, adev->height, adev->width,
> +			      DRM_MODE_RES_MM(adev->height, 218),
> +			      DRM_MODE_RES_MM(adev->width, 218))
> +	};
> +
> +	ret = drm_connector_init(drm, connector,
> +				 &appletbdrm_connector_funcs, DRM_MODE_CONNECTOR_USB);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize connector\n");
> +
> +	drm_connector_helper_add(connector, &appletbdrm_connector_helper_funcs);
> +
> +	ret = drm_connector_set_panel_orientation(connector,
> +						  DRM_MODE_PANEL_ORIENTATION_RIGHT_UP);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to set panel orientation\n");
> +
> +	connector->display_info.non_desktop = true;
> +	ret = drm_object_property_set_value(&connector->base,
> +					    drm->mode_config.non_desktop_property, true);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to set non-desktop property\n");
> +
> +	ret = drm_connector_attach_encoder(connector, encoder);
> +
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to initialize simple display pipe\n");
> +
> +	drm_mode_config_reset(drm);
> +
> +	return 0;
> +}
> +
> +static int appletbdrm_probe(struct usb_interface *intf,
> +			    const struct usb_device_id *id)
> +{
> +	struct usb_endpoint_descriptor *bulk_in, *bulk_out;
> +	struct device *dev = &intf->dev;
> +	struct appletbdrm_device *adev;
> +	struct drm_device *drm;
> +	int ret;
> +
> +	ret = usb_find_common_endpoints(intf->cur_altsetting, &bulk_in, &bulk_out, NULL, NULL);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to find bulk endpoints\n");
> +
> +	adev = devm_drm_dev_alloc(dev, &appletbdrm_drm_driver, struct appletbdrm_device, drm);
> +	if (IS_ERR(adev))
> +		return PTR_ERR(adev);
> +
> +	adev->dev = dev;
> +	adev->in_ep = bulk_in->bEndpointAddress;
> +	adev->out_ep = bulk_out->bEndpointAddress;
> +
> +	drm = &adev->drm;
> +
> +	usb_set_intfdata(intf, adev);
> +
> +	ret = appletbdrm_get_information(adev);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to get display information\n");
> +
> +	ret = appletbdrm_signal_readiness(adev);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to signal readiness\n");
> +
> +	ret = appletbdrm_setup_mode_config(adev);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to setup mode config\n");
> +
> +	ret = drm_dev_register(drm, 0);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to register DRM device\n");
> +
> +	ret = appletbdrm_clear_display(adev);
> +	if (ret)
> +		return dev_err_probe(dev, ret, "Failed to clear display\n");
> +
> +	return 0;
> +}
> +
> +static void appletbdrm_disconnect(struct usb_interface *intf)
> +{
> +	struct appletbdrm_device *adev = usb_get_intfdata(intf);
> +	struct drm_device *drm = &adev->drm;
> +

You have to put_device(dmadev) to release the DMA device.

Best regards
Thomas

> +	drm_dev_unplug(drm);
> +	drm_atomic_helper_shutdown(drm);
> +}
> +
> +static void appletbdrm_shutdown(struct usb_interface *intf)
> +{
> +	struct appletbdrm_device *adev = usb_get_intfdata(intf);
> +
> +	/*
> +	 * The framebuffer needs to be cleared on shutdown since its content
> +	 * persists across boots
> +	 */
> +	drm_atomic_helper_shutdown(&adev->drm);
> +}
> +
> +static const struct usb_device_id appletbdrm_usb_id_table[] = {
> +	{ USB_DEVICE_INTERFACE_CLASS(0x05ac, 0x8302, USB_CLASS_AUDIO_VIDEO) },
> +	{}
> +};
> +MODULE_DEVICE_TABLE(usb, appletbdrm_usb_id_table);
> +
> +static struct usb_driver appletbdrm_usb_driver = {
> +	.name		= "appletbdrm",
> +	.probe		= appletbdrm_probe,
> +	.disconnect	= appletbdrm_disconnect,
> +	.shutdown	= appletbdrm_shutdown,
> +	.id_table	= appletbdrm_usb_id_table,
> +};
> +module_usb_driver(appletbdrm_usb_driver);
> +
> +MODULE_AUTHOR("Kerem Karabay <kekrby@gmail.com>");
> +MODULE_DESCRIPTION("Apple Touch Bar DRM Driver");
> +MODULE_LICENSE("GPL");

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-24  9:09   ` Thomas Zimmermann
@ 2025-02-24  9:14     ` Aditya Garg
  0 siblings, 0 replies; 27+ messages in thread
From: Aditya Garg @ 2025-02-24  9:14 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: pmladek@suse.com, Steven Rostedt,
	andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	airlied@gmail.com, simona@ffwll.ch, Andrew Morton,
	apw@canonical.com, joe@perches.com, dwaipayanray1@gmail.com,
	lukas.bulwahn@gmail.com, sumit.semwal@linaro.org,
	christian.koenig@amd.com, Kerem Karabay, Aun-Ali Zaidi,
	Orlando Chamberlain, Atharva Tiwari, linux-doc@vger.kernel.org,
	Linux Kernel Mailing List, dri-devel@lists.freedesktop.org,
	linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org,
	Hector Martin, linux@armlinux.org.uk, asahi@lists.linux.dev,
	Sven Peter, Janne Grunau

Hi

> On 24 Feb 2025, at 2:40 PM, Thomas Zimmermann <tzimmermann@suse.de> wrote:
> 
> Hi
> 
>> Am 21.02.25 um 12:37 schrieb Aditya Garg:
>> From: Kerem Karabay <kekrby@gmail.com>
>> 
>> The Touch Bars found on x86 Macs support two USB configurations: one
>> where the device presents itself as a HID keyboard and can display
>> predefined sets of keys, and one where the operating system has full
>> control over what is displayed.
>> 
>> This commit adds support for the display functionality of the second
>> configuration. Functionality for the first configuration has been
>> merged in the HID tree.
>> 
>> Note that this driver has only been tested on T2 Macs, and only includes
>> the USB device ID for these devices. Testing on T1 Macs would be
>> appreciated.
>> 
>> Credit goes to Ben (Bingxing) Wang on GitHub [1] for reverse engineering
>> most of the protocol.
>> 
>> [1]: https://github.com/imbushuo/DFRDisplayKm
>> 
>> Signed-off-by: Kerem Karabay <kekrby@gmail.com>
>> Co-developed-by: Atharva Tiwari <evepolonium@gmail.com>
>> Signed-off-by: Atharva Tiwari <evepolonium@gmail.com>
>> Co-developed-by: Aditya Garg <gargaditya08@live.com>
>> Signed-off-by: Aditya Garg <gargaditya08@live.com>
>> Signed-off-by: Aun-Ali Zaidi <admin@kodeit.net>
>> ---
>> v2 ->
>> - Add the driver to MAINTAINERS.
>> - Allocate memory for request and response in plane's atomic-check helper
>> - Void the use of drm_fb_blit()
>> - Implement atomic_disable
>> - Make PRIME work
>> - Remove the date field from struct drm_driver
>> - intersect damage with dst_clip
>> - Register DRM device in appletbdrm_probe
>> - Clear the display as the final call in probe
>> - Select hid_multitouch as well in kconfig
>> 
>> v3 ->
>> - Change commit message to credit Ben (Bingxing) Wang
>>  MAINTAINERS                       |   7 +
>>  drivers/gpu/drm/tiny/Kconfig      |  14 +
>>  drivers/gpu/drm/tiny/Makefile     |   1 +
>>  drivers/gpu/drm/tiny/appletbdrm.c | 806 ++++++++++++++++++++++++++++++
>>  4 files changed, 828 insertions(+)
>>  create mode 100644 drivers/gpu/drm/tiny/appletbdrm.c
>> 
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index efee40ea5..43fafaab3 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -7148,6 +7148,13 @@ S:    Supported
>>  T:    git https://gitlab.freedesktop.org/drm/misc/kernel.git
>>  F:    drivers/gpu/drm/sun4i/sun8i*
>>  +DRM DRIVER FOR APPLE TOUCH BARS
>> +M:    Aun-Ali Zaidi <admin@kodeit.net>
> 
> You cannot put someone else here. Who is that?

Aun-Ali Zaidi and I both a part of t2linux.org. He volunteered to be a maintainer on my request. If you want I can add myself as a co maintainer. You want that?
> 
>> +L:    dri-devel@lists.freedesktop.org
>> +S:    Maintained
>> +T:    git https://gitlab.freedesktop.org/drm/misc/kernel.git
>> +F:    drivers/gpu/drm/tiny/appletbdrm.c
>> +
>>  DRM DRIVER FOR ARM PL111 CLCD
>>  M:    Linus Walleij <linus.walleij@linaro.org>
>>  S:    Maintained
>> diff --git a/drivers/gpu/drm/tiny/Kconfig b/drivers/gpu/drm/tiny/Kconfig
>> index 94cbdb133..25471791c 100644
>> --- a/drivers/gpu/drm/tiny/Kconfig
>> +++ b/drivers/gpu/drm/tiny/Kconfig
>> @@ -1,5 +1,19 @@
>>  # SPDX-License-Identifier: GPL-2.0-only
>>  +config DRM_APPLETBDRM
>> +    tristate "DRM support for Apple Touch Bars"
>> +    depends on DRM && USB && MMU
>> +    select DRM_GEM_SHMEM_HELPER
>> +    select DRM_KMS_HELPER
>> +    select HID_APPLETB_BL
>> +    select HID_MULTITOUCH
>> +    help
>> +      Say Y here if you want support for the display of Touch Bars on x86
>> +      MacBook Pros.
>> +
>> +      To compile this driver as a module, choose M here: the
>> +      module will be called appletbdrm.
>> +
>>  config DRM_ARCPGU
>>      tristate "ARC PGU"
>>      depends on DRM && OF
>> diff --git a/drivers/gpu/drm/tiny/Makefile b/drivers/gpu/drm/tiny/Makefile
>> index 60816d2eb..0a3a7837a 100644
>> --- a/drivers/gpu/drm/tiny/Makefile
>> +++ b/drivers/gpu/drm/tiny/Makefile
>> @@ -1,5 +1,6 @@
>>  # SPDX-License-Identifier: GPL-2.0-only
>>  +obj-$(CONFIG_DRM_APPLETBDRM)        += appletbdrm.o
>>  obj-$(CONFIG_DRM_ARCPGU)        += arcpgu.o
>>  obj-$(CONFIG_DRM_BOCHS)            += bochs.o
>>  obj-$(CONFIG_DRM_CIRRUS_QEMU)        += cirrus-qemu.o
>> diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c
> 
> Putting this driver into tiny is ok. It's the preferred place for single-file DRM drivers like this one.
> 
>> new file mode 100644
>> index 000000000..a17a3ecc3
>> --- /dev/null
>> +++ b/drivers/gpu/drm/tiny/appletbdrm.c
>> @@ -0,0 +1,806 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +/*
>> + * Apple Touch Bar DRM Driver
>> + *
>> + * Copyright (c) 2023 Kerem Karabay <kekrby@gmail.com>
>> + */
>> +
>> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
>> +
>> +#include <linux/module.h>
>> +#include <linux/unaligned.h>
>> +#include <linux/usb.h>
>> +
>> +#include <drm/drm_atomic.h>
>> +#include <drm/drm_atomic_helper.h>
>> +#include <drm/drm_crtc.h>
>> +#include <drm/drm_damage_helper.h>
>> +#include <drm/drm_drv.h>
>> +#include <drm/drm_encoder.h>
>> +#include <drm/drm_format_helper.h>
>> +#include <drm/drm_fourcc.h>
>> +#include <drm/drm_framebuffer.h>
>> +#include <drm/drm_gem_atomic_helper.h>
>> +#include <drm/drm_gem_framebuffer_helper.h>
>> +#include <drm/drm_gem_shmem_helper.h>
>> +#include <drm/drm_plane.h>
>> +#include <drm/drm_probe_helper.h>
>> +
>> +#define __APPLETBDRM_MSG_STR4(str4)    ((__le32 __force)((str4[0] << 24) | (str4[1] << 16) | (str4[2] << 8) | str4[3]))
>> +#define __APPLETBDRM_MSG_TOK4(tok4)    __APPLETBDRM_MSG_STR4(#tok4)
>> +
>> +#define APPLETBDRM_PIXEL_FORMAT        __APPLETBDRM_MSG_TOK4(RGBA) /* The actual format is BGR888 */
>> +#define APPLETBDRM_BITS_PER_PIXEL    24
>> +
>> +#define APPLETBDRM_MSG_CLEAR_DISPLAY    __APPLETBDRM_MSG_TOK4(CLRD)
>> +#define APPLETBDRM_MSG_GET_INFORMATION    __APPLETBDRM_MSG_TOK4(GINF)
>> +#define APPLETBDRM_MSG_UPDATE_COMPLETE    __APPLETBDRM_MSG_TOK4(UDCL)
>> +#define APPLETBDRM_MSG_SIGNAL_READINESS    __APPLETBDRM_MSG_TOK4(REDY)
>> +
>> +#define APPLETBDRM_BULK_MSG_TIMEOUT    1000
>> +
>> +#define drm_to_adev(_drm)        container_of(_drm, struct appletbdrm_device, drm)
>> +#define adev_to_udev(adev)        interface_to_usbdev(to_usb_interface(adev->dev))
>> +
>> +struct appletbdrm_msg_request_header {
>> +    __le16 unk_00;
>> +    __le16 unk_02;
>> +    __le32 unk_04;
>> +    __le32 unk_08;
>> +    __le32 size;
>> +} __packed;
>> +
>> +struct appletbdrm_msg_response_header {
>> +    u8 unk_00[16];
>> +    __le32 msg;
>> +} __packed;
>> +
>> +struct appletbdrm_msg_simple_request {
>> +    struct appletbdrm_msg_request_header header;
>> +    __le32 msg;
>> +    u8 unk_14[8];
>> +    __le32 size;
>> +} __packed;
>> +
>> +struct appletbdrm_msg_information {
>> +    struct appletbdrm_msg_response_header header;
>> +    u8 unk_14[12];
>> +    __le32 width;
>> +    __le32 height;
>> +    u8 bits_per_pixel;
>> +    __le32 bytes_per_row;
>> +    __le32 orientation;
>> +    __le32 bitmap_info;
>> +    __le32 pixel_format;
>> +    __le32 width_inches;    /* floating point */
>> +    __le32 height_inches;    /* floating point */
>> +} __packed;
>> +
>> +struct appletbdrm_frame {
>> +    __le16 begin_x;
>> +    __le16 begin_y;
>> +    __le16 width;
>> +    __le16 height;
>> +    __le32 buf_size;
>> +    u8 buf[];
>> +} __packed;
>> +
>> +struct appletbdrm_fb_request_footer {
>> +    u8 unk_00[12];
>> +    __le32 unk_0c;
>> +    u8 unk_10[12];
>> +    __le32 unk_1c;
>> +    __le64 timestamp;
>> +    u8 unk_28[12];
>> +    __le32 unk_34;
>> +    u8 unk_38[20];
>> +    __le32 unk_4c;
>> +} __packed;
>> +
>> +struct appletbdrm_fb_request {
>> +    struct appletbdrm_msg_request_header header;
>> +    __le16 unk_10;
>> +    u8 msg_id;
>> +    u8 unk_13[29];
>> +    /*
>> +     * Contents of `data`:
>> +     * - struct appletbdrm_frame frames[];
>> +     * - struct appletbdrm_fb_request_footer footer;
>> +     * - padding to make the total size a multiple of 16
>> +     */
>> +    u8 data[];
>> +} __packed;
>> +
>> +struct appletbdrm_fb_request_response {
>> +    struct appletbdrm_msg_response_header header;
>> +    u8 unk_14[12];
>> +    __le64 timestamp;
>> +} __packed;
>> +
>> +struct appletbdrm_device {
>> +    struct device *dev;
> 
> This field should not be here. The Linux device is already available at drm.dev.
> 
>> +    struct device *dmadev;
>> +
>> +    unsigned int in_ep;
>> +    unsigned int out_ep;
>> +
>> +    unsigned int width;
>> +    unsigned int height;
>> +
>> +    struct drm_device drm;
>> +    struct drm_display_mode mode;
>> +    struct drm_connector connector;
>> +    struct drm_plane primary_plane;
>> +    struct drm_crtc crtc;
>> +    struct drm_encoder encoder;
>> +};
>> +
>> +struct appletbdrm_plane_state {
>> +    struct drm_shadow_plane_state base;
>> +    struct appletbdrm_fb_request *request;
>> +    struct appletbdrm_fb_request_response *response;
>> +    size_t request_size;
>> +    size_t frames_size;
>> +};
>> +
>> +static inline struct appletbdrm_plane_state *to_appletbdrm_plane_state(struct drm_plane_state *state)
>> +{
>> +    return container_of(state, struct appletbdrm_plane_state, base.base);
>> +}
>> +
>> +static int appletbdrm_send_request(struct appletbdrm_device *adev,
>> +                   struct appletbdrm_msg_request_header *request, size_t size)
>> +{
>> +    struct usb_device *udev = adev_to_udev(adev);
>> +    struct drm_device *drm = &adev->drm;
>> +    int ret, actual_size;
>> +
>> +    ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, adev->out_ep),
>> +               request, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
>> +    if (ret) {
>> +        drm_err(drm, "Failed to send message (%d)\n", ret);
>> +        return ret;
>> +    }
>> +
>> +    if (actual_size != size) {
>> +        drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
>> +            actual_size, size);
>> +        return -EIO;
>> +    }
>> +
>> +    return ret;
>> +}
>> +
>> +static int appletbdrm_read_response(struct appletbdrm_device *adev,
>> +                    struct appletbdrm_msg_response_header *response,
>> +                    size_t size, u32 expected_response)
>> +{
>> +    struct usb_device *udev = adev_to_udev(adev);
>> +    struct drm_device *drm = &adev->drm;
>> +    int ret, actual_size;
>> +    bool readiness_signal_received = false;
>> +
>> +retry:
>> +    ret = usb_bulk_msg(udev, usb_rcvbulkpipe(udev, adev->in_ep),
>> +               response, size, &actual_size, APPLETBDRM_BULK_MSG_TIMEOUT);
>> +    if (ret) {
>> +        drm_err(drm, "Failed to read response (%d)\n", ret);
>> +        return ret;
>> +    }
>> +
>> +    /*
>> +     * The device responds to the first request sent in a particular
>> +     * timeframe after the USB device configuration is set with a readiness
>> +     * signal, in which case the response should be read again
>> +     */
>> +    if (response->msg == APPLETBDRM_MSG_SIGNAL_READINESS) {
>> +        if (!readiness_signal_received) {
>> +            readiness_signal_received = true;
>> +            goto retry;
>> +        }
>> +
>> +        drm_err(drm, "Encountered unexpected readiness signal\n");
>> +        return -EIO;
>> +    }
>> +
>> +    if (actual_size != size) {
>> +        drm_err(drm, "Actual size (%d) doesn't match expected size (%lu)\n",
>> +            actual_size, size);
>> +        return -EIO;
>> +    }
>> +
>> +    if (response->msg != expected_response) {
>> +        drm_err(drm, "Unexpected response from device (expected %p4ch found %p4ch)\n",
>> +            &expected_response, &response->msg);
>> +        return -EIO;
>> +    }
>> +
>> +    return 0;
>> +}
>> +
>> +static int appletbdrm_send_msg(struct appletbdrm_device *adev, u32 msg)
>> +{
>> +    struct appletbdrm_msg_simple_request *request;
>> +    int ret;
>> +
>> +    request = kzalloc(sizeof(*request), GFP_KERNEL);
>> +    if (!request)
>> +        return -ENOMEM;
>> +
>> +    request->header.unk_00 = cpu_to_le16(2);
>> +    request->header.unk_02 = cpu_to_le16(0x1512);
>> +    request->header.size = cpu_to_le32(sizeof(*request) - sizeof(request->header));
>> +    request->msg = msg;
>> +    request->size = request->header.size;
>> +
>> +    ret = appletbdrm_send_request(adev, &request->header, sizeof(*request));
>> +
>> +    kfree(request);
>> +
>> +    return ret;
>> +}
>> +
>> +static int appletbdrm_clear_display(struct appletbdrm_device *adev)
>> +{
>> +    return appletbdrm_send_msg(adev, APPLETBDRM_MSG_CLEAR_DISPLAY);
>> +}
>> +
>> +static int appletbdrm_signal_readiness(struct appletbdrm_device *adev)
>> +{
>> +    return appletbdrm_send_msg(adev, APPLETBDRM_MSG_SIGNAL_READINESS);
>> +}
>> +
>> +static int appletbdrm_get_information(struct appletbdrm_device *adev)
>> +{
>> +    struct appletbdrm_msg_information *info;
>> +    struct drm_device *drm = &adev->drm;
>> +    u8 bits_per_pixel;
>> +    u32 pixel_format;
>> +    int ret;
>> +
>> +    info = kzalloc(sizeof(*info), GFP_KERNEL);
>> +    if (!info)
>> +        return -ENOMEM;
>> +
>> +    ret = appletbdrm_send_msg(adev, APPLETBDRM_MSG_GET_INFORMATION);
>> +    if (ret)
>> +        return ret;
>> +
>> +    ret = appletbdrm_read_response(adev, &info->header, sizeof(*info),
>> +                       APPLETBDRM_MSG_GET_INFORMATION);
>> +    if (ret)
>> +        goto free_info;
>> +
>> +    bits_per_pixel = info->bits_per_pixel;
>> +    pixel_format = get_unaligned(&info->pixel_format);
>> +
>> +    adev->width = get_unaligned_le32(&info->width);
>> +    adev->height = get_unaligned_le32(&info->height);
>> +
>> +    if (bits_per_pixel != APPLETBDRM_BITS_PER_PIXEL) {
>> +        drm_err(drm, "Encountered unexpected bits per pixel value (%d)\n", bits_per_pixel);
>> +        ret = -EINVAL;
>> +        goto free_info;
>> +    }
>> +
>> +    if (pixel_format != APPLETBDRM_PIXEL_FORMAT) {
>> +        drm_err(drm, "Encountered unknown pixel format (%p4ch)\n", &pixel_format);
>> +        ret = -EINVAL;
>> +        goto free_info;
>> +    }
>> +
>> +free_info:
>> +    kfree(info);
>> +
>> +    return ret;
>> +}
>> +
>> +static u32 rect_size(struct drm_rect *rect)
>> +{
>> +    return drm_rect_width(rect) * drm_rect_height(rect) * (APPLETBDRM_BITS_PER_PIXEL / 8);
>> +}
>> +
>> +static int appletbdrm_connector_helper_get_modes(struct drm_connector *connector)
>> +{
>> +    struct appletbdrm_device *adev = drm_to_adev(connector->dev);
>> +
>> +    return drm_connector_helper_get_modes_fixed(connector, &adev->mode);
>> +}
>> +
>> +static const u32 appletbdrm_primary_plane_formats[] = {
>> +    DRM_FORMAT_BGR888,
>> +    DRM_FORMAT_XRGB8888, /* emulated */
>> +};
>> +
>> +static int appletbdrm_primary_plane_helper_atomic_check(struct drm_plane *plane,
>> +                           struct drm_atomic_state *state)
>> +{
>> +    struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state, plane);
>> +    struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(state, plane);
>> +    struct drm_crtc *new_crtc = new_plane_state->crtc;
>> +    struct drm_crtc_state *new_crtc_state = NULL;
>> +    struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(new_plane_state);
>> +    struct drm_atomic_helper_damage_iter iter;
>> +    struct drm_rect damage;
>> +    size_t frames_size = 0;
>> +    size_t request_size;
>> +    int ret;
>> +
>> +    if (new_crtc)
>> +        new_crtc_state = drm_atomic_get_new_crtc_state(state, new_crtc);
>> +
>> +    ret = drm_atomic_helper_check_plane_state(new_plane_state, new_crtc_state,
>> +                          DRM_PLANE_NO_SCALING,
>> +                          DRM_PLANE_NO_SCALING,
>> +                          false, false);
>> +    if (ret)
>> +        return ret;
>> +    else if (!new_plane_state->visible)
>> +        return 0;
>> +
>> +    drm_atomic_helper_damage_iter_init(&iter, old_plane_state, new_plane_state);
>> +    drm_atomic_for_each_plane_damage(&iter, &damage) {
>> +        frames_size += struct_size((struct appletbdrm_frame *)0, buf, rect_size(&damage));
>> +    }
>> +
>> +    if (!frames_size)
>> +        return 0;
>> +
>> +    request_size = ALIGN(sizeof(struct appletbdrm_fb_request) +
>> +               frames_size +
>> +               sizeof(struct appletbdrm_fb_request_footer), 16);
>> +
>> +    appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
>> +
>> +    if (!appletbdrm_state->request)
>> +        return -ENOMEM;
>> +
>> +    appletbdrm_state->response = kzalloc(sizeof(*appletbdrm_state->response), GFP_KERNEL);
>> +
>> +    if (!appletbdrm_state->response)
>> +        return -ENOMEM;
>> +
>> +    appletbdrm_state->request_size = request_size;
>> +    appletbdrm_state->frames_size = frames_size;
> 
> AFAIU you're preallocating the memory for the drawing commands. Makes sense to me.
> 
>> +
>> +    return 0;
>> +}
>> +
>> +static int appletbdrm_flush_damage(struct appletbdrm_device *adev,
>> +                   struct drm_plane_state *old_state,
>> +                   struct drm_plane_state *state)
>> +{
>> +    struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
>> +    struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state);
>> +    struct appletbdrm_fb_request_response *response = appletbdrm_state->response;
>> +    struct appletbdrm_fb_request_footer *footer;
>> +    struct drm_atomic_helper_damage_iter iter;
>> +    struct drm_framebuffer *fb = state->fb;
>> +    struct appletbdrm_fb_request *request = appletbdrm_state->request;
>> +    struct drm_device *drm = &adev->drm;
>> +    struct appletbdrm_frame *frame;
>> +    u64 timestamp = ktime_get_ns();
>> +    struct drm_rect damage;
>> +    size_t frames_size = appletbdrm_state->frames_size;
>> +    size_t request_size = appletbdrm_state->request_size;
>> +    int ret;
>> +
>> +    if (!frames_size)
>> +        return 0;
>> +
>> +    ret = drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE);
>> +    if (ret) {
>> +        drm_err(drm, "Failed to start CPU framebuffer access (%d)\n", ret);
>> +        goto end_fb_cpu_access;
>> +    }
>> +
>> +    request->header.unk_00 = cpu_to_le16(2);
>> +    request->header.unk_02 = cpu_to_le16(0x12);
>> +    request->header.unk_04 = cpu_to_le32(9);
>> +    request->header.size = cpu_to_le32(request_size - sizeof(request->header));
>> +    request->unk_10 = cpu_to_le16(1);
>> +    request->msg_id = timestamp & 0xff;
>> +
>> +    frame = (struct appletbdrm_frame *)request->data;
>> +
>> +    drm_atomic_helper_damage_iter_init(&iter, old_state, state);
>> +    drm_atomic_for_each_plane_damage(&iter, &damage) {
>> +        struct drm_rect dst_clip = state->dst;
>> +        struct iosys_map dst = IOSYS_MAP_INIT_VADDR(frame->buf);
>> +        u32 buf_size = rect_size(&damage);
>> +
>> +        if (!drm_rect_intersect(&dst_clip, &damage))
>> +            continue;
>> +
>> +        /*
>> +         * The coordinates need to be translated to the coordinate
>> +         * system the device expects, see the comment in
>> +         * appletbdrm_setup_mode_config
>> +         */
>> +        frame->begin_x = cpu_to_le16(damage.y1);
>> +        frame->begin_y = cpu_to_le16(adev->height - damage.x2);
>> +        frame->width = cpu_to_le16(drm_rect_height(&damage));
>> +        frame->height = cpu_to_le16(drm_rect_width(&damage));
>> +        frame->buf_size = cpu_to_le32(buf_size);
>> +
>> +        switch (fb->format->format) {
>> +        case DRM_FORMAT_XRGB8888:
>> +            drm_fb_xrgb8888_to_bgr888(&dst, NULL, &shadow_plane_state->data[0], fb, &damage, &shadow_plane_state->fmtcnv_state);
>> +            break;
>> +        default:
>> +            drm_fb_memcpy(&dst, NULL, &shadow_plane_state->data[0], fb, &damage);
>> +            break;
>> +        }
>> +
>> +        frame = (void *)frame + struct_size(frame, buf, buf_size);
>> +    }
>> +
>> +    footer = (struct appletbdrm_fb_request_footer *)&request->data[frames_size];
>> +
>> +    footer->unk_0c = cpu_to_le32(0xfffe);
>> +    footer->unk_1c = cpu_to_le32(0x80001);
>> +    footer->unk_34 = cpu_to_le32(0x80002);
>> +    footer->unk_4c = cpu_to_le32(0xffff);
>> +    footer->timestamp = cpu_to_le64(timestamp);
> 
> And here you're building the drawing commands from the allocated frame memory. Also makes sense.
> 
>> +
>> +    ret = appletbdrm_send_request(adev, &request->header, request_size);
>> +    if (ret)
>> +        goto end_fb_cpu_access;
>> +
>> +    ret = appletbdrm_read_response(adev, &response->header, sizeof(*response),
>> +                       APPLETBDRM_MSG_UPDATE_COMPLETE);
>> +    if (ret)
>> +        goto end_fb_cpu_access;
>> +
>> +    if (response->timestamp != footer->timestamp) {
>> +        drm_err(drm, "Response timestamp (%llu) doesn't match request timestamp (%llu)\n",
>> +            le64_to_cpu(response->timestamp), timestamp);
>> +        goto end_fb_cpu_access;
>> +    }
>> +
>> +end_fb_cpu_access:
>> +    drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE);
>> +
>> +    return ret;
>> +}
>> +
>> +static void appletbdrm_primary_plane_helper_atomic_update(struct drm_plane *plane,
>> +                             struct drm_atomic_state *old_state)
>> +{
>> +    struct appletbdrm_device *adev = drm_to_adev(plane->dev);
>> +    struct drm_device *drm = plane->dev;
>> +    struct drm_plane_state *plane_state = plane->state;
>> +    struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(old_state, plane);
>> +    int idx;
>> +
>> +    if (!drm_dev_enter(drm, &idx))
>> +        return;
>> +
>> +    appletbdrm_flush_damage(adev, old_plane_state, plane_state);
>> +
>> +    drm_dev_exit(idx);
>> +}
>> +
>> +static void appletbdrm_primary_plane_helper_atomic_disable(struct drm_plane *plane,
>> +                               struct drm_atomic_state *state)
>> +{
>> +    struct drm_device *dev = plane->dev;
>> +    struct appletbdrm_device *adev = drm_to_adev(dev);
>> +    int idx;
>> +
>> +    if (!drm_dev_enter(dev, &idx))
>> +        return;
>> +
>> +    appletbdrm_clear_display(adev);
>> +
>> +    drm_dev_exit(idx);
>> +}
>> +
>> +static void appletbdrm_primary_plane_reset(struct drm_plane *plane)
>> +{
>> +    struct appletbdrm_plane_state *appletbdrm_state;
>> +
>> +    WARN_ON(plane->state);
>> +
>> +    appletbdrm_state = kzalloc(sizeof(*appletbdrm_state), GFP_KERNEL);
>> +    if (!appletbdrm_state)
>> +        return;
>> +
>> +    __drm_gem_reset_shadow_plane(plane, &appletbdrm_state->base);
>> +}
>> +
>> +static struct drm_plane_state *appletbdrm_primary_plane_duplicate_state(struct drm_plane *plane)
>> +{
>> +    struct drm_shadow_plane_state *new_shadow_plane_state;
>> +    struct appletbdrm_plane_state *old_appletbdrm_state;
>> +    struct appletbdrm_plane_state *appletbdrm_state;
>> +
>> +    if (WARN_ON(!plane->state))
>> +        return NULL;
>> +
>> +    old_appletbdrm_state = to_appletbdrm_plane_state(plane->state);
>> +    appletbdrm_state = kmemdup(old_appletbdrm_state, sizeof(*appletbdrm_state), GFP_KERNEL);
>> +    if (!appletbdrm_state)
>> +        return NULL;
>> +
>> +    /* Request and response are not duplicated and are allocated in .atomic_check */
>> +    appletbdrm_state->request = NULL;
>> +    appletbdrm_state->response = NULL;
> 
> You also have to clear the frame and request size, I think.
> 
> Duplicated state will be processed by the atomic_check before being used. So you'll have a chance of recomputing these temporary buffers.
> 
> Simply allocate with kzalloc instead of kmemdup() and you'll be fine.
> 
>> +
>> +    new_shadow_plane_state = &appletbdrm_state->base;
>> +
>> +    __drm_gem_duplicate_shadow_plane_state(plane, new_shadow_plane_state);
> 
> This call is important to do.
> 
>> +
>> +    return &new_shadow_plane_state->base;
>> +}
>> +
>> +static void appletbdrm_primary_plane_destroy_state(struct drm_plane *plane,
>> +                           struct drm_plane_state *state)
>> +{
>> +    struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
>> +
>> +    kfree(appletbdrm_state->request);
>> +    kfree(appletbdrm_state->response);
>> +
>> +    __drm_gem_destroy_shadow_plane_state(&appletbdrm_state->base);
>> +
>> +    kfree(appletbdrm_state);
>> +}
>> +
>> +static const struct drm_plane_helper_funcs appletbdrm_primary_plane_helper_funcs = {
>> +    DRM_GEM_SHADOW_PLANE_HELPER_FUNCS,
>> +    .atomic_check = appletbdrm_primary_plane_helper_atomic_check,
>> +    .atomic_update = appletbdrm_primary_plane_helper_atomic_update,
>> +    .atomic_disable = appletbdrm_primary_plane_helper_atomic_disable,
>> +};
>> +
>> +static const struct drm_plane_funcs appletbdrm_primary_plane_funcs = {
>> +    .update_plane = drm_atomic_helper_update_plane,
>> +    .disable_plane = drm_atomic_helper_disable_plane,
>> +    .reset = appletbdrm_primary_plane_reset,
>> +    .atomic_duplicate_state = appletbdrm_primary_plane_duplicate_state,
>> +    .atomic_destroy_state = appletbdrm_primary_plane_destroy_state,
>> +    .destroy = drm_plane_cleanup,
>> +};
>> +
>> +static enum drm_mode_status appletbdrm_crtc_helper_mode_valid(struct drm_crtc *crtc,
>> +                              const struct drm_display_mode *mode)
>> +{
>> +    struct appletbdrm_device *adev = drm_to_adev(crtc->dev);
>> +
>> +    return drm_crtc_helper_mode_valid_fixed(crtc, mode, &adev->mode);
>> +}
>> +
>> +static const struct drm_mode_config_funcs appletbdrm_mode_config_funcs = {
>> +    .fb_create = drm_gem_fb_create_with_dirty,
>> +    .atomic_check = drm_atomic_helper_check,
>> +    .atomic_commit = drm_atomic_helper_commit,
>> +};
>> +
>> +static const struct drm_connector_funcs appletbdrm_connector_funcs = {
>> +    .reset = drm_atomic_helper_connector_reset,
>> +    .destroy = drm_connector_cleanup,
>> +    .fill_modes = drm_helper_probe_single_connector_modes,
>> +    .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
>> +    .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
>> +};
>> +
>> +static const struct drm_connector_helper_funcs appletbdrm_connector_helper_funcs = {
>> +    .get_modes = appletbdrm_connector_helper_get_modes,
>> +};
>> +
>> +static const struct drm_crtc_helper_funcs appletbdrm_crtc_helper_funcs = {
>> +    .mode_valid = appletbdrm_crtc_helper_mode_valid,
>> +};
>> +
>> +static const struct drm_crtc_funcs appletbdrm_crtc_funcs = {
>> +    .reset = drm_atomic_helper_crtc_reset,
>> +    .destroy = drm_crtc_cleanup,
>> +    .set_config = drm_atomic_helper_set_config,
>> +    .page_flip = drm_atomic_helper_page_flip,
>> +    .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
>> +    .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
>> +};
>> +
>> +static const struct drm_encoder_funcs appletbdrm_encoder_funcs = {
>> +    .destroy = drm_encoder_cleanup,
>> +};
>> +
>> +static struct drm_gem_object *appletbdrm_driver_gem_prime_import(struct drm_device *dev,
>> +                                 struct dma_buf *dma_buf)
>> +{
>> +    struct appletbdrm_device *adev = drm_to_adev(dev);
>> +
>> +    if (!adev->dmadev)
>> +        return ERR_PTR(-ENODEV);
>> +
>> +    return drm_gem_prime_import_dev(dev, dma_buf, adev->dmadev);
>> +}
>> +
>> +DEFINE_DRM_GEM_FOPS(appletbdrm_drm_fops);
>> +
>> +static const struct drm_driver appletbdrm_drm_driver = {
>> +    DRM_GEM_SHMEM_DRIVER_OPS,
>> +    .gem_prime_import    = appletbdrm_driver_gem_prime_import,
>> +    .name            = "appletbdrm",
>> +    .desc            = "Apple Touch Bar DRM Driver",
>> +    .major            = 1,
>> +    .minor            = 0,
>> +    .driver_features    = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
>> +    .fops            = &appletbdrm_drm_fops,
>> +};
>> +
>> +static int appletbdrm_setup_mode_config(struct appletbdrm_device *adev)
>> +{
>> +    struct drm_connector *connector = &adev->connector;
>> +    struct drm_plane *primary_plane;
>> +    struct drm_crtc *crtc;
>> +    struct drm_encoder *encoder;
>> +    struct drm_device *drm = &adev->drm;
>> +    struct device *dev = adev->dev;
>> +    int ret;
>> +
>> +    ret = drmm_mode_config_init(drm);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to initialize mode configuration\n");
> 
> Use drm_err() here. It does the right thing. We don't have a drm_dev_probe() yet, but you're discouraged from useing the dev_() print helpers.
> 
> Same below.
> 
>> +
>> +    primary_plane = &adev->primary_plane;
>> +    ret = drm_universal_plane_init(drm, primary_plane, 0,
>> +                       &appletbdrm_primary_plane_funcs,
>> +                       appletbdrm_primary_plane_formats,
>> +                       ARRAY_SIZE(appletbdrm_primary_plane_formats),
>> +                       NULL,
>> +                       DRM_PLANE_TYPE_PRIMARY, NULL);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to initialize universal plane object\n");
>> +    drm_plane_helper_add(primary_plane, &appletbdrm_primary_plane_helper_funcs);
>> +    drm_plane_enable_fb_damage_clips(primary_plane);
>> +
>> +    crtc = &adev->crtc;
>> +    ret = drm_crtc_init_with_planes(drm, crtc, primary_plane, NULL,
>> +                    &appletbdrm_crtc_funcs, NULL);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to initialize CRTC object\n");
>> +    drm_crtc_helper_add(crtc, &appletbdrm_crtc_helper_funcs);
>> +
>> +    encoder = &adev->encoder;
>> +    ret = drm_encoder_init(drm, encoder, &appletbdrm_encoder_funcs,
>> +                   DRM_MODE_ENCODER_DAC, NULL);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to initialize encoder\n");
>> +    encoder->possible_crtcs = drm_crtc_mask(crtc);
>> +
>> +    /*
>> +     * The coordinate system used by the device is different from the
>> +     * coordinate system of the framebuffer in that the x and y axes are
>> +     * swapped, and that the y axis is inverted; so what the device reports
>> +     * as the height is actually the width of the framebuffer and vice
>> +     * versa
>> +     */
>> +    drm->mode_config.min_width = 0;
>> +    drm->mode_config.min_height = 0;
> 
> No need to clear this to zero.
> 
>> +    drm->mode_config.max_width = max(adev->height, DRM_SHADOW_PLANE_MAX_WIDTH);
>> +    drm->mode_config.max_height = max(adev->width, DRM_SHADOW_PLANE_MAX_HEIGHT);
>> +    drm->mode_config.preferred_depth = APPLETBDRM_BITS_PER_PIXEL;
>> +    drm->mode_config.funcs = &appletbdrm_mode_config_funcs;
>> +
>> +    adev->mode = (struct drm_display_mode) {
>> +        DRM_MODE_INIT(60, adev->height, adev->width,
>> +                  DRM_MODE_RES_MM(adev->height, 218),
>> +                  DRM_MODE_RES_MM(adev->width, 218))
>> +    };
>> +
>> +    ret = drm_connector_init(drm, connector,
>> +                 &appletbdrm_connector_funcs, DRM_MODE_CONNECTOR_USB);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to initialize connector\n");
>> +
>> +    drm_connector_helper_add(connector, &appletbdrm_connector_helper_funcs);
>> +
>> +    ret = drm_connector_set_panel_orientation(connector,
>> +                          DRM_MODE_PANEL_ORIENTATION_RIGHT_UP);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to set panel orientation\n");
>> +
>> +    connector->display_info.non_desktop = true;
>> +    ret = drm_object_property_set_value(&connector->base,
>> +                        drm->mode_config.non_desktop_property, true);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to set non-desktop property\n");
>> +
>> +    ret = drm_connector_attach_encoder(connector, encoder);
>> +
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to initialize simple display pipe\n");
>> +
>> +    drm_mode_config_reset(drm);
>> +
>> +    return 0;
>> +}
>> +
>> +static int appletbdrm_probe(struct usb_interface *intf,
>> +                const struct usb_device_id *id)
>> +{
>> +    struct usb_endpoint_descriptor *bulk_in, *bulk_out;
>> +    struct device *dev = &intf->dev;
>> +    struct appletbdrm_device *adev;
>> +    struct drm_device *drm;
>> +    int ret;
>> +
>> +    ret = usb_find_common_endpoints(intf->cur_altsetting, &bulk_in, &bulk_out, NULL, NULL);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to find bulk endpoints\n");
>> +
>> +    adev = devm_drm_dev_alloc(dev, &appletbdrm_drm_driver, struct appletbdrm_device, drm);
>> +    if (IS_ERR(adev))
>> +        return PTR_ERR(adev);
>> +
>> +    adev->dev = dev;
>> +    adev->in_ep = bulk_in->bEndpointAddress;
>> +    adev->out_ep = bulk_out->bEndpointAddress;
>> +
>> +    drm = &adev->drm;
>> +
>> +    usb_set_intfdata(intf, adev);
>> +
>> +    ret = appletbdrm_get_information(adev);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to get display information\n");
>> +
>> +    ret = appletbdrm_signal_readiness(adev);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to signal readiness\n");
>> +
>> +    ret = appletbdrm_setup_mode_config(adev);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to setup mode config\n");
>> +
>> +    ret = drm_dev_register(drm, 0);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to register DRM device\n");
>> +
>> +    ret = appletbdrm_clear_display(adev);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to clear display\n");
>> +
>> +    return 0;
>> +}
>> +
>> +static void appletbdrm_disconnect(struct usb_interface *intf)
>> +{
>> +    struct appletbdrm_device *adev = usb_get_intfdata(intf);
>> +    struct drm_device *drm = &adev->drm;
>> +
> 
> You have to put_device(dmadev) to release the DMA device.
> 
> Best regards
> Thomas
> 
>> +    drm_dev_unplug(drm);
>> +    drm_atomic_helper_shutdown(drm);
>> +}
>> +
>> +static void appletbdrm_shutdown(struct usb_interface *intf)
>> +{
>> +    struct appletbdrm_device *adev = usb_get_intfdata(intf);
>> +
>> +    /*
>> +     * The framebuffer needs to be cleared on shutdown since its content
>> +     * persists across boots
>> +     */
>> +    drm_atomic_helper_shutdown(&adev->drm);
>> +}
>> +
>> +static const struct usb_device_id appletbdrm_usb_id_table[] = {
>> +    { USB_DEVICE_INTERFACE_CLASS(0x05ac, 0x8302, USB_CLASS_AUDIO_VIDEO) },
>> +    {}
>> +};
>> +MODULE_DEVICE_TABLE(usb, appletbdrm_usb_id_table);
>> +
>> +static struct usb_driver appletbdrm_usb_driver = {
>> +    .name        = "appletbdrm",
>> +    .probe        = appletbdrm_probe,
>> +    .disconnect    = appletbdrm_disconnect,
>> +    .shutdown    = appletbdrm_shutdown,
>> +    .id_table    = appletbdrm_usb_id_table,
>> +};
>> +module_usb_driver(appletbdrm_usb_driver);
>> +
>> +MODULE_AUTHOR("Kerem Karabay <kekrby@gmail.com>");
>> +MODULE_DESCRIPTION("Apple Touch Bar DRM Driver");
>> +MODULE_LICENSE("GPL");
> 
> --
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Software Solutions Germany GmbH
> Frankenstrasse 146, 90461 Nuernberg, Germany
> GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
> HRB 36809 (AG Nuernberg)
> 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888
  2025-02-21 15:51 ` [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888 andriy.shevchenko
  2025-02-21 17:21   ` Aditya Garg
@ 2025-02-24  9:19   ` Thomas Zimmermann
  2025-02-24  9:55     ` andriy.shevchenko
  1 sibling, 1 reply; 27+ messages in thread
From: Thomas Zimmermann @ 2025-02-24  9:19 UTC (permalink / raw)
  To: andriy.shevchenko@linux.intel.com, Aditya Garg
  Cc: pmladek@suse.com, Steven Rostedt, linux@rasmusvillemoes.dk,
	senozhatsky@chromium.org, Jonathan Corbet,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	airlied@gmail.com, simona@ffwll.ch, Andrew Morton,
	apw@canonical.com, joe@perches.com, dwaipayanray1@gmail.com,
	lukas.bulwahn@gmail.com, sumit.semwal@linaro.org,
	christian.koenig@amd.com, Kerem Karabay, Aun-Ali Zaidi,
	Orlando Chamberlain, Atharva Tiwari, linux-doc@vger.kernel.org,
	Linux Kernel Mailing List, dri-devel@lists.freedesktop.org,
	linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org,
	Hector Martin, linux@armlinux.org.uk, Asahi Linux Mailing List,
	Sven Peter, Janne Grunau

Hi

Am 21.02.25 um 16:51 schrieb andriy.shevchenko@linux.intel.com:
> On Fri, Feb 21, 2025 at 11:36:00AM +0000, Aditya Garg wrote:
>> From: Kerem Karabay <kekrby@gmail.com>
>>
>> Add XRGB8888 emulation helper for devices that only support BGR888.
> ...
>
>> +	for (x = 0; x < pixels; x++) {
>> +		pix = le32_to_cpu(sbuf32[x]);
>> +		/* write red-green-blue to output in little endianness */
>> +		*dbuf8++ = (pix & 0x00ff0000) >> 16;
>> +		*dbuf8++ = (pix & 0x0000ff00) >> 8;
>> +		*dbuf8++ = (pix & 0x000000ff) >> 0;
> put_unaligned_be24()

I'm all for sharing helper code, but maybe not here.

- DRM pixel formats are always little endian.
- CPU encoding is LE or BE.
- Pixel-component order can be anything: RGB/BGR/etc.

So the code has a comment to explain what happens here. Adding that call 
with the _be24 postfix into the mix would make it more confusing.


>
>> +	}
> ...
>
>> +	static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = {
>> +		3,
>> +	};
> One line?
>
> 	static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = { 3 };

I'd be ok, if there's a string preference in the kernel to use thins 
style. Most of DRM doesn't AFAIK.

Best regards
Thomas

>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-24  8:41           ` Thomas Zimmermann
@ 2025-02-24  9:47             ` andriy.shevchenko
  2025-02-24 11:20               ` Aditya Garg
  0 siblings, 1 reply; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-24  9:47 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: Aditya Garg, pmladek@suse.com, Steven Rostedt,
	linux@rasmusvillemoes.dk, senozhatsky@chromium.org,
	Jonathan Corbet, maarten.lankhorst@linux.intel.com,
	mripard@kernel.org, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Mon, Feb 24, 2025 at 09:41:43AM +0100, Thomas Zimmermann wrote:
> Am 22.02.25 um 10:07 schrieb Aditya Garg:

...

> > > What padding, please? Why TCP UAPI headers do not have these attributes?
> > > Think about it, and think about what actually __packed does and how it affects
> > > (badly) the code generation. Otherwise it looks like a cargo cult.
> > > 
> > > > I tried removing __packed btw and driver no longer works.
> > > So, you need to find a justification why. But definitely not due to padding in
> > > many of them. They can go without __packed as they are naturally aligned.
> > Alright, I did some debugging, basically printk sizeof(struct). Did it for both packed and unpacked with the following results:
> > 
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_request_header is 16
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_request_header_unpacked is 16
> > 
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_response_header is 20
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_response_header_unpacked is 20
> > 
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_simple_request is 32
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_simple_request_unpacked is 32
> > 
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_information is 65
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_msg_information_unpacked is 68
> 
> In the unpacked version, there is a 3-byte gap after the 'bits_per_pixel' to
> align the next field. Using __packed removes those gaps at the expense of
> runtime overhead.
> > 
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_frame is 12
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_frame_unpacked is 12
> > 
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_footer is 80
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_footer_unpacked is 80
> > 
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request is 48
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_unpacked is 48
> > 
> > Feb 22 13:02:03 MacBook kernel: size of struct appletbdrm_fb_request_response is 40
> > Feb 22 13:02:04 MacBook kernel: size of struct appletbdrm_fb_request_response_unpacked is 40
> > 
> > So, the difference in sizeof in unpacked and packed is only in appletbdrm_msg_information. So, I kept this packed, and removed it from others. The Touch Bar still works.
> > 
> > So maybe keep just this packed?
> 
> The fields in the TCP header are aligned by design.

> Unfortunately, this hardware's protocol is not. And there's no way of fixing
> this now. Just keep all of them packed if you want.

It would be nice to see the difference in the code generation for the all
__packed vs. only those that require it.

> At least it's clear then
> what happens. And if your hardware requires this, you can't do much anyway.

One aspect (member level alignment) is clear but the other is not
(object level alignment). I dunno if it makes sense to be pedantic about this,
but would like to see the binary outcome asked for.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888
  2025-02-24  9:19   ` Thomas Zimmermann
@ 2025-02-24  9:55     ` andriy.shevchenko
  0 siblings, 0 replies; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-24  9:55 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: Aditya Garg, pmladek@suse.com, Steven Rostedt,
	linux@rasmusvillemoes.dk, senozhatsky@chromium.org,
	Jonathan Corbet, maarten.lankhorst@linux.intel.com,
	mripard@kernel.org, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Mon, Feb 24, 2025 at 10:19:13AM +0100, Thomas Zimmermann wrote:
> Am 21.02.25 um 16:51 schrieb andriy.shevchenko@linux.intel.com:
> > On Fri, Feb 21, 2025 at 11:36:00AM +0000, Aditya Garg wrote:

...

> > > +	for (x = 0; x < pixels; x++) {
> > > +		pix = le32_to_cpu(sbuf32[x]);
> > > +		/* write red-green-blue to output in little endianness */
> > > +		*dbuf8++ = (pix & 0x00ff0000) >> 16;
> > > +		*dbuf8++ = (pix & 0x0000ff00) >> 8;
> > > +		*dbuf8++ = (pix & 0x000000ff) >> 0;
> > put_unaligned_be24()
> 
> I'm all for sharing helper code, but maybe not here.
> 
> - DRM pixel formats are always little endian.
> - CPU encoding is LE or BE.
> - Pixel-component order can be anything: RGB/BGR/etc.
> 
> So the code has a comment to explain what happens here. Adding that call
> with the _be24 postfix into the mix would make it more confusing.

I'm not objecting the comment, the code has definite meaning and with the
proposed helper it makes clearer (in my opinion).

Comment can be adjusted to explain better this conversion.

Or, perhaps pix should be be32? That's probably where confusion starts.

		pix = be32_to_cpu(sbuf32[x]);

		/* write red-green-blue to output in little endianness */
		put_unaligned_le24(...);

?

> > > +	}

...

> > > +	static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = {
> > > +		3,
> > > +	};
> > One line?
> > 
> > 	static const u8 dst_pixsize[DRM_FORMAT_MAX_PLANES] = { 3 };
> 
> I'd be ok, if there's a string preference in the kernel to use thins style.

Just a common sense to avoid more LoCs when it's not needed / redundant.

> Most of DRM doesn't AFAIK.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-24  9:47             ` andriy.shevchenko
@ 2025-02-24 11:20               ` Aditya Garg
  2025-02-24 11:42                 ` andriy.shevchenko
  0 siblings, 1 reply; 27+ messages in thread
From: Aditya Garg @ 2025-02-24 11:20 UTC (permalink / raw)
  To: andriy.shevchenko@linux.intel.com
  Cc: Thomas Zimmermann, pmladek@suse.com, Steven Rostedt,
	linux@rasmusvillemoes.dk, senozhatsky@chromium.org,
	Jonathan Corbet, maarten.lankhorst@linux.intel.com,
	mripard@kernel.org, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau


> 
> It would be nice to see the difference in the code generation for the all
> __packed vs. only those that require it.
> 
>> At least it's clear then
>> what happens. And if your hardware requires this, you can't do much anyway.
> 
> One aspect (member level alignment) is clear but the other is not
> (object level alignment). I dunno if it makes sense to be pedantic about this,
> but would like to see the binary outcome asked for.

Hex dump of the compiled binary:

1. All packed:

00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............
00000010: 0100 3e00 0100 0000 0000 0000 0000 0000  ..>.............
00000020: 0000 0000 0000 0000 e084 0000 0000 0000  ................
00000030: 0000 0000 4000 0000 0000 4000 2a00 2900  ....@.....@.*.).
00000040: 0400 0000 1400 0000 0300 0000 474e 5500  ............GNU.
00000050: aa4c 98f4 a8d5 30bc e50a 9478 fcb1 bcf0  .L....0....x....
00000060: bc77 dd31 0600 0000 0400 0000 0101 0000  .w.1............
00000070: 4c69 6e75 7800 0000 0000 0000 0600 0000  Linux...........
00000080: 0100 0000 0001 0000 4c69 6e75 7800 0000  ........Linux...
00000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000a0: 9090 9090 9090 9090 9090 9090 9090 9090  ................
000000b0: e800 0000 0055 488b bfc8 0000 0048 83c7  .....UH......H..
000000c0: 2048 89e5 e800 0000 005d 31ff e900 0000   H.......]1.....
000000d0: 0066 662e 0f1f 8400 0000 0000 0f1f 4000  .ff...........@.
000000e0: 9090 9090 9090 9090 9090 9090 9090 9090  ................
000000f0: e800 0000 0055 4889 e553 488b 9fc8 0000  .....UH..SH.....
00000100: 0048 83c3 2048 89df e800 0000 0048 89df  .H.. H.......H..
00000110: e800 0000 0048 8b5d f8c9 31ff e900 0000  .....H.]..1.....
00000120: 0066 662e 0f1f 8400 0000 0000 0f1f 4000  .ff...........@.
00000130: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000140: e800 0000 0048 8b57 e848 85d2 7415 5548  .....H.W.H..t.UH
00000150: 89e5 e800 0000 005d 31d2 31f6 31ff e900  .......]1.1.1...
00000160: 0000 0048 c7c0 edff ffff 31d2 31f6 31ff  ...H......1.1.1.
00000170: e900 0000 0066 662e 0f1f 8400 0000 0000  .....ff.........
00000180: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000190: e800 0000 0055 4889 f041 b9e8 0300 0048  .....UH..A.....H
000001a0: 89e5 4156 4989 d641 554c 8d45 d444 89f1  ..AVI..AUL.E.D..
000001b0: 4154 5348 89fb 4c8d 6320 4883 ec10 6548  ATSH..L.c H...eH
000001c0: 8b14 2528 0000 0048 8955 d848 8b17 c745  ..%(...H.U.H...E
000001d0: d400 0000 0048 8b7a 408b 5314 8bb7 58ff  .....H.z@.S...X.
000001e0: ffff c1e2 0f48 81ef a800 0000 c1e6 0809  .....H..........
000001f0: d648 89c2 81ce 0000 00c0 e800 0000 0041  .H.............A
00000200: 89c5 85c0 753d 4863 45d4 4889 c24c 39f0  ....u=HcE.H..L9.
00000210: 754e 488b 45d8 6548 2b04 2528 0000 0075  uNH.E.eH+.%(...u
00000220: 6248 83c4 1044 89e8 5b41 5c41 5d41 5e5d  bH...D..[A\A]A^]
00000230: 31d2 31c9 31f6 31ff 4531 c045 31c9 e900  1.1.1.1.E1.E1...
00000240: 0000 004d 85e4 7404 4c8b 6328 4489 ea48  ...M..t.L.c(D..H
00000250: c7c6 0000 0000 4c89 e7e8 0000 0000 ebb2  ......L.........
00000260: 4d85 e474 044c 8b63 284c 89f1 48c7 c600  M..t.L.c(L..H...
00000270: 0000 004c 89e7 41bd fbff ffff e800 0000  ...L..A.........
00000280: 00eb 8fe8 0000 0000 0f1f 8400 0000 0000  ................
00000290: 9090 9090 9090 9090 9090 9090 9090 9090  ................
000002a0: e800 0000 0055 4889 e541 5741 5649 89f6  .....UH..AWAVI..
000002b0: 4155 4c8d 6f20 4154 41bc 0200 0000 5348  AUL.o ATA.....SH
000002c0: 89fb 4883 ec28 4889 55b0 894d c465 488b  ..H..(H.U..M.eH.
000002d0: 0425 2800 0000 4889 45d0 488b 07c7 45cc  .%(...H.E.H...E.
000002e0: 0000 0000 8955 c04c 8b78 4049 8d87 58ff  .....U.L.x@I..X.
000002f0: ffff 4889 45b8 8b43 108b 4dc0 41b9 e803  ..H.E..C..M.A...
00000300: 0000 4c8d 45cc 418b b758 ffff ff48 8b7d  ..L.E.A..X...H.}
00000310: b84c 89f2 c1e0 0fc1 e608 09c6 81ce 8000  .L..............
00000320: 00c0 e800 0000 0085 c075 7241 8b56 1081  .........urA.V..
00000330: fa59 4445 520f 8584 0000 0041 83fc 0175  .YDER......A...u
00000340: 514d 85ed 7404 4c8b 6b28 48c7 c600 0000  QM..t.L.k(H.....
00000350: 004c 89ef e800 0000 00b8 fbff ffff 488b  .L............H.
00000360: 55d0 6548 2b14 2528 0000 000f 85ab 0000  U.eH+.%(........
00000370: 0048 83c4 285b 415c 415d 415e 415f 5d31  .H..([A\A]A^A_]1
00000380: d231 c931 f631 ff45 31c0 4531 c9e9 0000  .1.1.1.E1.E1....
00000390: 0000 41bc 0100 0000 e959 ffff ff4d 85ed  ..A......Y...M..
000003a0: 7404 4c8b 6b28 89c2 48c7 c600 0000 004c  t.L.k(..H......L
000003b0: 89ef 8945 b8e8 0000 0000 8b45 b8eb 9f48  ...E.......E...H
000003c0: 634d cc48 8b7d b048 89ce 4839 f975 2a3b  cM.H.}.H..H9.u*;
000003d0: 55c4 748a 498d 4e10 4d85 ed74 044c 8b6b  U.t.I.N.M..t.L.k
000003e0: 2848 8d55 c448 c7c6 0000 0000 4c89 efe8  (H.U.H......L...
000003f0: 0000 0000 e960 ffff ff4d 85ed 7404 4c8b  .....`...M..t.L.
00000400: 6b28 488b 4db0 89f2 4c89 ef48 c7c6 0000  k(H.M...L..H....
00000410: 0000 e800 0000 00e9 3dff ffff e800 0000  ........=.......
00000420: 0066 662e 0f1f 8400 0000 0000 0f1f 4000  .ff...........@.
00000430: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000440: e800 0000 0055 488b 0748 8db0 1806 0000  .....UH..H......
00000450: 4889 e5e8 0000 0000 5d31 f631 ffe9 0000  H.......]1.1....
00000460: 0000 6666 2e0f 1f84 0000 0000 000f 1f00  ..ff............
00000470: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000480: e800 0000 0055 488b 0748 8d90 1806 0000  .....UH..H......
00000490: 4889 e5e8 0000 0000 5d31 d231 f631 ffe9  H.......]1.1.1..
000004a0: 0000 0000 6666 2e0f 1f84 0000 0000 0090  ....ff..........
000004b0: 9090 9090 9090 9090 9090 9090 9090 9090  ................
000004c0: e800 0000 0055 488b be48 0100 0048 89e5  .....UH..H...H..
000004d0: 5348 89f3 e800 0000 0048 8bbb 5001 0000  SH.......H..P...
000004e0: e800 0000 0048 89df e800 0000 0048 89df  .....H.......H..
000004f0: e800 0000 0048 8b5d f8c9 31f6 31ff e900  .....H.]..1.1...
00000500: 0000 0066 662e 0f1f 8400 0000 0000 6690  ...ff.........f.
00000510: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000520: e800 0000 0055 4889 e541 5453 488b 9fd8  .....UH..ATSH...
00000530: 0400 0048 85db 7450 4989 fcba c00c 0000  ...H..tPI.......
00000540: 4889 dfbe 6801 0000 e800 0000 0048 89c3  H...h........H..
00000550: 4885 c074 2148 c780 4801 0000 0000 0000  H..t!H..H.......
00000560: 4889 c64c 89e7 48c7 8050 0100 0000 0000  H..L..H..P......
00000570: 00e8 0000 0000 4889 d85b 415c 5d31 d231  ......H..[A\]1.1
00000580: f631 ffe9 0000 0000 0f0b 4889 d85b 415c  .1........H..[A\
00000590: 5d31 d231 f631 ffe9 0000 0000 0f1f 4000  ]1.1.1........@.
000005a0: 9090 9090 9090 9090 9090 9090 9090 9090  ................
000005b0: e800 0000 0055 4889 e541 5741 5641 5541  .....UH..AWAVAUA
000005c0: 5453 4883 e4f0 4881 ecb0 0000 004c 8b2f  TSH...H......L./
000005d0: 488b 9fd8 0400 0065 488b 0425 2800 0000  H......eH..%(...
000005e0: 4889 8424 a800 0000 31c0 8b87 cc04 0000  H..$....1.......
000005f0: c744 244c 0000 0000 4c89 ef48 c1e0 0548  .D$L....L..H...H
00000600: 0346 1848 8d74 244c 4c8b 7810 e800 0000  .F.H.t$LL.x.....
00000610: 0084 c075 3a48 8b84 24a8 0000 0065 482b  ...u:H..$....eH+
00000620: 0425 2800 0000 0f85 0803 0000 488d 65d8  .%(.........H.e.
00000630: 5b41 5c41 5d41 5e41 5f5d 31c0 31d2 31c9  [A\A]A^A_]1.1.1.
00000640: 31f6 31ff 4531 c045 31c9 e900 0000 0048  1.1.E1.E1......H
00000650: 8b83 5001 0000 48c7 8424 8000 0000 0000  ..P...H..$......
00000660: 0000 48c7 8424 8800 0000 0000 0000 4889  ..H..$........H.
00000670: 4424 1848 8b83 4801 0000 48c7 8424 9000  D$.H..H...H..$..
00000680: 0000 0000 0000 48c7 8424 9800 0000 0000  ......H..$......
00000690: 0000 48c7 8424 a000 0000 0000 0000 4c8b  ..H..$........L.
000006a0: 7310 4889 4424 28e8 0000 0000 4889 4424  s.H.D$(.....H.D$
000006b0: 3048 8b83 6001 0000 48c7 4424 6000 0000  0H..`...H.D$`...
000006c0: 0048 c744 2468 0000 0000 4889 4424 2048  .H.D$h....H.D$ H
000006d0: 85c0 7450 488b 8358 0100 00be 0200 0000  ..tPH..X........
000006e0: 4c89 f74c 896c 2410 4889 4424 08e8 0000  L..L.l$.H.D$....
000006f0: 0000 85c0 743c 4d85 ed74 0949 8b5d 0848  ....t<M..t.I.].H
00000700: 895c 2410 488b 7c24 1089 c248 c7c6 0000  .\$.H.|$...H....
00000710: 0000 e800 0000 00be 0200 0000 4c89 f7e8  ............L...
00000720: 0000 0000 8b7c 244c e800 0000 00e9 e3fe  .....|$L........
00000730: ffff 488b 4c24 284c 89fe 4889 da48 b802  ..H.L$(L..H..H..
00000740: 0012 0009 0000 0048 8dbc 2480 0000 0048  .......H..$....H
00000750: 8901 8b44 2408 4c8d 6130 4d89 e783 e810  ...D$.L.a0M.....
00000760: 8941 0cb8 0100 0000 6689 4110 0fb6 4424  .A......f.A...D$
00000770: 3088 4112 e800 0000 0048 8d74 2460 488d  0.A......H.t$`H.
00000780: bc24 8000 0000 e800 0000 0084 c00f 84f1  .$..............
00000790: 0000 0048 8b43 7c8b 4c24 6448 8d74 2460  ...H.C|.L$dH.t$`
000007a0: 488d 7c24 7048 8b93 8400 0000 448b 6424  H.|$pH......D.d$
000007b0: 6048 c744 2458 0000 0000 4889 4424 7049  `H.D$X....H.D$pI
000007c0: 8d47 0c48 8954 2478 8b54 246c 4889 4424  .G.H.T$x.T$lH.D$
000007d0: 508b 4424 6889 5424 4089 4424 4489 4c24  P.D$h.T$@.D$D.L$
000007e0: 3ce8 0000 0000 84c0 748f 8b44 2444 8b54  <.......t..D$D.T
000007f0: 2440 8b4c 243c 4429 e029 ca0f afc2 488d  $@.L$<D).)....H.
00000800: 9308 0100 0044 8d24 408b 4424 6466 4189  .....D.$@.D$dfA.
00000810: 0741 8b45 fc66 2b44 2468 6641 8947 028b  .A.E.f+D$hfA.G..
00000820: 4424 6c2b 4424 6466 4189 4704 8b44 2468  D$l+D$dfA.G..D$h
00000830: 2b44 2460 4589 6708 6641 8947 0649 8b46  +D$`E.g.fA.G.I.F
00000840: 4881 3858 5232 3474 1e4c 8d44 2460 4c89  H.8XR24t.L.D$`L.
00000850: f148 8d7c 2450 31f6 e800 0000 004f 8d7c  .H.|$P1......O.|
00000860: 270c e912 ffff ff4c 8d44 2460 4c89 f148  '......L.D$`L..H
00000870: 8d7c 2450 31f6 4c8d 8bb0 0000 00e8 0000  .|$P1.L.........
00000880: 0000 ebd9 488b 4424 2048 8b74 2428 498d  ....H.D$ H.t$(I.
00000890: 5de0 488b 5424 0848 89df 4c8d 6406 3048  ].H.T$.H..L.d.0H
000008a0: 8b44 2430 41c7 4424 0cfe ff00 0041 c744  .D$0A.D$.....A.D
000008b0: 241c 0100 0800 41c7 4424 3402 0008 0041  $.....A.D$4....A
000008c0: c744 244c ffff 0000 4989 4424 20e8 bef8  .D$L....I.D$ ...
000008d0: ffff 85c0 0f85 3dfe ffff 4c8b 7c24 18b9  ......=...L.|$..
000008e0: 4c43 4455 ba28 0000 0048 89df 4c89 fee8  LCDU.(...H..L...
000008f0: acf9 ffff 85c0 0f85 1bfe ffff 498b 5720  ............I.W 
00000900: 493b 5424 200f 840c feff ff4d 85ed 7409  I;T$ ......M..t.
00000910: 498b 4508 4889 4424 1048 8b4c 2430 488b  I.E.H.D$.H.L$0H.
00000920: 7c24 1048 c7c6 0000 0000 e800 0000 00e9  |$.H............
00000930: e3fd ffff e800 0000 000f 1f80 0000 0000  ................
00000940: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000950: e800 0000 0048 baeb 83b5 8046 86c8 6155  .....H.....F..aU
00000960: 4889 e541 5541 89f5 bec0 0d00 0048 8b45  H..AUA.......H.E
00000970: 0848 3305 0000 0000 4154 4989 fc48 0faf  .H3.....ATI..H..
00000980: c253 48c1 e83c 488d 14c5 0000 0000 4829  .SH..<H.......H)
00000990: c248 89d0 ba20 0000 0048 c1e0 0448 8bb8  .H... ...H...H..
000009a0: 0000 0000 e800 0000 0048 85c0 744a c700  .........H..tJ..
000009b0: 0200 1215 4c89 e748 89c3 4889 c6c7 400c  ....L..H..H...@.
000009c0: 1000 0000 ba20 0000 0044 8968 10c7 401c  ..... ...D.h..@.
000009d0: 1000 0000 e8b7 f7ff ff48 89df 4189 c4e8  .........H..A...
000009e0: 0000 0000 5b44 89e0 415c 415d 5d31 d231  ....[D..A\A]]1.1
000009f0: f631 ffe9 0000 0000 41bc f4ff ffff ebe4  .1......A.......
00000a00: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000a10: e800 0000 0055 4889 e553 488d 75ec 4883  .....UH..SH.u.H.
00000a20: ec10 488b 1f65 488b 0425 2800 0000 4889  ..H..eH..%(...H.
00000a30: 45f0 31c0 c745 ec00 0000 0048 89df e800  E.1..E.....H....
00000a40: 0000 0084 c074 1648 8d7b e0be 4452 4c43  .....t.H.{..DRLC
00000a50: e8fb feff ff8b 7dec e800 0000 0048 8b45  ......}......H.E
00000a60: f065 482b 0425 2800 0000 7510 488b 5df8  .eH+.%(...u.H.].
00000a70: c931 c031 f631 ffe9 0000 0000 e800 0000  .1.1.1..........
00000a80: 0066 662e 0f1f 8400 0000 0000 0f1f 4000  .ff...........@.
00000a90: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000aa0: e800 0000 0055 4889 e553 4883 bfd8 0400  .....UH..SH.....
00000ab0: 0000 4889 fb75 6748 8b45 0848 3305 0000  ..H..ugH.E.H3...
00000ac0: 0000 bec0 0d00 0048 baeb 83b5 8046 86c8  .......H.....F..
00000ad0: 6148 0faf c248 c1e8 3c48 8d14 c500 0000  aH...H..<H......
00000ae0: 0048 29c2 4889 d0ba 6801 0000 48c1 e004  .H).H...h...H...
00000af0: 488b b800 0000 00e8 0000 0000 4889 c648  H...........H..H
00000b00: 85c0 7408 4889 dfe8 0000 0000 488b 5df8  ..t.H.......H.].
00000b10: c931 c031 d231 f631 ffe9 0000 0000 0f0b  .1.1.1.1........
00000b20: eb95 6666 2e0f 1f84 0000 0000 000f 1f00  ..ff............
00000b30: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000b40: e800 0000 0055 4531 c031 c948 89e5 4157  .....UE1.1.H..AW
00000b50: 4156 488d 55c8 488d 75c0 4155 4154 4989  AVH.U.H.u.AUATI.
00000b60: fc53 488d 5f50 4883 ec28 488b 7f08 6548  .SH._PH..(H...eH
00000b70: 8b04 2528 0000 0048 8945 d031 c048 c745  ..%(...H.E.1.H.E
00000b80: c000 0000 0048 c745 c800 0000 00e8 0000  .....H.E........
00000b90: 0000 85c0 0f85 6401 0000 b920 0000 00ba  ......d.... ....
00000ba0: 581b 0000 48c7 c600 0000 0048 89df e800  X...H......H....
00000bb0: 0000 0049 89c7 483d 00f0 ffff 0f87 9d00  ...I..H=........
00000bc0: 0000 4889 1848 8b45 c0be c00d 0000 48ba  ..H..H.E......H.
00000bd0: eb83 b580 4686 c861 0fb6 4002 4189 4710  ....F..a..@.A.G.
00000be0: 488b 45c8 0fb6 4002 c745 bc00 0000 0041  H.E...@..E.....A
00000bf0: 8947 144d 89bc 24c8 0000 0048 8b45 0848  .G.M..$....H.E.H
00000c00: 3305 0000 0000 480f afc2 48c1 e83c 488d  3.....H...H..<H.
00000c10: 14c5 0000 0000 4829 c248 89d0 ba41 0000  ......H).H...A..
00000c20: 0048 c1e0 0448 8bb8 0000 0000 e800 0000  .H...H..........
00000c30: 0049 89c5 4885 c00f 84e0 0400 00be 464e  .I..H.........FN
00000c40: 4947 4c89 ffe8 06fd ffff 85c0 7448 48c7  IGL.........tHH.
00000c50: c200 0000 0089 c648 89df e800 0000 0048  .......H.......H
00000c60: 8b55 d065 482b 1425 2800 0000 0f85 a604  .U.eH+.%(.......
00000c70: 0000 488d 65d8 5b41 5c41 5d41 5e41 5f5d  ..H.e.[A\A]A^A_]
00000c80: 31d2 31c9 31f6 31ff 4531 c045 31c9 4531  1.1.1.1.E1.E1.E1
00000c90: d2e9 0000 0000 b946 4e49 47ba 4100 0000  .......FNIG.A...
00000ca0: 4c89 ee4c 89ff e8f5 f5ff ff85 c075 6541  L..L.........ueA
00000cb0: 8b4d 2041 8b45 354d 8d67 2041 0fb6 5528  .M A.E5M.g A..U(
00000cc0: 4189 4f18 418b 4d24 8945 bc41 894f 1c80  A.O.A.M$.E.A.O..
00000cd0: fa18 7453 4d85 e474 044d 8b67 284c 89e7  ..tSM..t.M.g(L..
00000ce0: 48c7 c600 0000 00e8 0000 0000 4c89 efe8  H...........L...
00000cf0: 0000 0000 b8ea ffff ffe9 50ff ffff 48c7  ..........P...H.
00000d00: c200 0000 0089 c648 89df e800 0000 00e9  .......H........
00000d10: 4bff ffff 4c89 ef89 45b0 e800 0000 008b  K...L...E.......
00000d20: 45b0 e927 ffff ff3d 4142 4752 0f85 3903  E..'...=ABGR..9.
00000d30: 0000 4c89 efe8 0000 0000 be59 4445 524c  ..L........YDERL
00000d40: 89ff e809 fcff ff85 c00f 8579 0200 004c  ...........y...L
00000d50: 89e7 4d8b 2fe8 0000 0000 85c0 0f85 7c02  ..M./.........|.
00000d60: 0000 6a00 4d8d b720 0f00 0031 d24c 89e7  ..j.M.. ...1.L..
00000d70: 6a01 41b9 0200 0000 4c89 f649 c7c0 0000  j.A.....L..I....
00000d80: 0000 6a00 48c7 c100 0000 00e8 0000 0000  ..j.H...........
00000d90: 4883 c418 85c0 0f85 a602 0000 49c7 87f0  H...........I...
00000da0: 1300 0000 0000 004c 89f7 e800 0000 0045  .......L.......E
00000db0: 31c9 31c9 4c89 f249 8db7 6814 0000 49c7  1.1.L..I..h...I.
00000dc0: c000 0000 004c 89e7 e800 0000 0085 c00f  .....L..........
00000dd0: 85d5 0200 004d 8db7 d81a 0000 4531 c0b9  .....M......E1..
00000de0: 0100 0000 4c89 e749 c787 1816 0000 0000  ....L..I........
00000df0: 0000 48c7 c200 0000 004c 89f6 e800 0000  ..H......L......
00000e00: 0085 c00f 858b 0200 0041 8b8f f814 0000  .........A......
00000e10: 83f9 1f0f 8700 0000 00b8 0100 0000 418b  ..............A.
00000e20: 571c 418b 7718 498d bf38 0600 00d3 e0b9  W.A.w.I..8......
00000e30: 0f00 0000 49c7 8730 0300 0000 0000 004d  ....I..0.......M
00000e40: 8d97 b006 0000 4189 8720 1b00 00b8 0010  ......A.. ......
00000e50: 0000 39c2 4c89 55b0 41c7 87a0 0500 0018  ..9.L.U.A.......
00000e60: 0000 000f 43c2 49c7 8740 0300 0000 0000  ....C.I..@......
00000e70: 0041 8987 3803 0000 b800 1000 0039 c60f  .A..8........9..
00000e80: 43c6 4189 873c 0300 0031 c0f3 48ab 89d0  C.A..<...1..H...
00000e90: 6641 8997 3c06 0000 4c89 e70f afc6 6641  fA..<...L.....fA
00000ea0: 8997 3e06 0000 48b9 f11f 3c80 0fff c103  ..>...H...<.....
00000eb0: 6641 8997 4006 0000 6641 8997 4206 0000  fA..@...fA..B...
00000ec0: 6bc0 3c66 4189 b746 0600 0066 4189 b748  k.<fA..F...fA..H
00000ed0: 0600 0066 4189 b74a 0600 0048 69c0 d34d  ...fA..J...Hi..M
00000ee0: 6210 6641 89b7 4c06 0000 41c6 8776 0600  b.fA..L...A..v..
00000ef0: 0040 48c1 e826 4189 8738 0600 0089 d048  .@H..&A..8.....H
00000f00: 89c2 48c1 e207 4829 c248 01d2 48c1 ea02  ..H...H).H..H...
00000f10: 4889 d048 f7e1 48c1 ea03 6641 8997 7206  H..H..H...fA..r.
00000f20: 0000 4889 f248 c1e2 0748 29f2 4c89 d648  ..H..H...H).L..H
00000f30: 01d2 48c1 ea02 4889 d048 f7e1 b914 0000  ..H...H..H......
00000f40: 0048 c1ea 0366 4189 9774 0600 0048 c7c2  .H...fA..t...H..
00000f50: 0000 0000 e800 0000 0085 c00f 855f 0100  ............._..
00000f60: 0049 c787 c80c 0000 0000 0000 488b 7db0  .I..........H.}.
00000f70: be03 0000 00e8 0000 0000 85c0 0f85 5401  ..............T.
00000f80: 0000 41c6 8710 0800 0001 498b b760 0500  ..A.......I..`..
00000f90: 00ba 0100 0000 498d bff0 0600 00e8 0000  ......I.........
00000fa0: 0000 85c0 0f85 4201 0000 488b 7db0 4c89  ......B...H.}.L.
00000fb0: f6e8 0000 0000 85c0 0f85 4401 0000 4c89  ..........D...L.
00000fc0: e7e8 0000 0000 eb2b 48c7 c200 0000 0089  .......+H.......
00000fd0: c648 89df e800 0000 00e9 81fc ffff 48c7  .H............H.
00000fe0: c200 0000 0089 c64c 89ef e800 0000 0085  .......L........
00000ff0: c075 3931 f64c 89e7 e800 0000 0085 c075  .u91.L.........u
00001000: 54be 4452 4c43 4c89 ffe8 42f9 ffff 85c0  T.DRLCL...B.....
00001010: 0f84 49fc ffff 48c7 c200 0000 0089 c648  ..I...H........H
00001020: 89df e800 0000 00e9 33fc ffff 48c7 c200  ........3...H...
00001030: 0000 0089 c648 89df e800 0000 00e9 1dfc  .....H..........
00001040: ffff 48c7 c200 0000 0089 c64c 89ef e800  ..H........L....
00001050: 0000 00eb 9a48 c7c2 0000 0000 89c6 4889  .....H........H.
00001060: dfe8 0000 0000 e9f4 fbff ff4d 85e4 7404  ...........M..t.
00001070: 4d8b 6728 4c89 e748 8d55 bc48 c7c6 0000  M.g(L..H.U.H....
00001080: 0000 e800 0000 004c 89ef e800 0000 00e9  .......L........
00001090: 60fc ffff 48c7 c200 0000 0089 c64c 89ef  `...H........L..
000010a0: e800 0000 00e9 45ff ffff 48c7 c200 0000  ......E...H.....
000010b0: 0089 c64c 89ef e800 0000 00e9 2fff ffff  ...L......../...
000010c0: 48c7 c200 0000 0089 c64c 89ef e800 0000  H........L......
000010d0: 00e9 19ff ffff 48c7 c200 0000 0089 c64c  ......H........L
000010e0: 89ef e800 0000 00e9 03ff ffff 48c7 c200  ............H...
000010f0: 0000 0089 c64c 89ef e800 0000 00e9 edfe  .....L..........
00001100: ffff 48c7 c200 0000 0089 c64c 89ef e800  ..H........L....
00001110: 0000 00e9 d7fe ffff e800 0000 00b8 f4ff  ................
00001120: ffff e927 fbff ff66 0f1f 8400 0000 0000  ...'...f........
00001130: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00001140: e800 0000 0055 4889 e541 5641 5541 5453  .....UH..AVAUATS
00001150: 4883 e4f0 4883 ec40 6548 8b04 2528 0000  H...H..@eH..%(..
00001160: 0048 8944 2438 31c0 8b87 cc04 0000 48c1  .H.D$81.......H.
00001170: e005 4803 4618 4c8b 6818 488b 5810 498b  ..H.F.L.h.H.X.I.
00001180: 4508 48c7 0424 0000 0000 48c7 4424 1000  E.H..$....H.D$..
00001190: 0000 0048 c744 2418 0000 0000 48c7 4424  ...H.D$.....H.D$
000011a0: 2000 0000 0048 c744 2428 0000 0000 48c7   ....H.D$(....H.
000011b0: 4424 3000 0000 0048 c744 2408 0000 0000  D$0....H.D$.....
000011c0: 4885 c074 1d8b 9090 0000 0048 8d04 d500  H..t.......H....
000011d0: 0000 0048 29d0 488b 5620 488d 04c2 488b  ...H).H.V H...H.
000011e0: 4018 4531 c945 31c0 b900 0001 00ba 0000  @.E1.E1.........
000011f0: 0100 4889 c64c 89ef e800 0000 0041 89c4  ..H..L.......A..
00001200: 85c0 7518 450f b6b5 8c00 0000 4180 fe01  ..u.E.......A...
00001210: 0f87 0000 0000 4183 e601 7536 488b 4424  ......A...u6H.D$
00001220: 3865 482b 0425 2800 0000 0f85 ee00 0000  8eH+.%(.........
00001230: 488d 65e0 4489 e05b 415c 415d 415e 5d31  H.e.D..[A\A]A^]1
00001240: d231 c931 f631 ff45 31c0 4531 c9e9 0000  .1.1.1.E1.E1....
00001250: 0000 4889 de4c 89ea 488d 7c24 1031 dbe8  ..H..L..H.|$.1..
00001260: 0000 0000 eb1a 8b44 2408 8b54 240c 2b04  .......D$..T$.+.
00001270: 242b 5424 040f afc2 8d04 4048 8d5c 030c  $+T$......@H.\..
00001280: 4889 e648 8d7c 2410 e800 0000 0084 c075  H..H.|$........u
00001290: d548 85db 7486 4c8d b38f 0000 00be c00d  .H..t.L.........
000012a0: 0000 4983 e6f0 4c89 f7e8 0000 0000 4989  ..I...L.......I.
000012b0: 8548 0100 0048 85c0 7469 488b 4508 4833  .H...H..tiH.E.H3
000012c0: 0500 0000 00be c00d 0000 48ba eb83 b580  ..........H.....
000012d0: 4686 c861 480f afc2 48c1 e83c 488d 14c5  F..aH...H..<H...
000012e0: 0000 0000 4829 c248 89d0 ba28 0000 0048  ....H).H...(...H
000012f0: c1e0 0448 8bb8 0000 0000 e800 0000 0049  ...H...........I
00001300: 8985 5001 0000 4885 c074 184d 89b5 5801  ..P...H..t.M..X.
00001310: 0000 4989 9d60 0100 00e9 fefe ffff e800  ..I..`..........
00001320: 0000 0041 bcf4 ffff ffe9 eefe ffff 0000  ...A............
00001330: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00001340: e800 0000 0055 48c7 c200 0000 0048 c7c6  .....UH......H..
00001350: 0000 0000 48c7 c700 0000 0048 89e5 e800  ....H......H....
00001360: 0000 005d 31d2 31f6 31ff e900 0000 0000  ...]1.1.1.......
00001370: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00001380: 5548 c7c7 0000 0000 4889 e5e8 0000 0000  UH......H.......
00001390: 5d31 ffe9 0000 0000 89ca be01 0000 0048  ]1.............H
000013a0: c7c7 0000 0000 894d b0e8 0000 0000 8b4d  .......M.......M
000013b0: b0e9 0000 0000 410f b6f6 48c7 c700 0000  ......A...H.....
000013c0: 00e8 0000 0000 e900 0000 0061 7070 6c65  ...........apple
000013d0: 7462 6472 6d00 6170 706c 6574 6264 726d  tbdrm.appletbdrm
000013e0: 2e63 0046 6169 6c65 6420 746f 2073 6967  .c.Failed to sig
000013f0: 6e61 6c20 7265 6164 696e 6573 730a 0046  nal readiness..F
00001400: 6169 6c65 6420 746f 2069 6e69 7469 616c  ailed to initial
00001410: 697a 6520 656e 636f 6465 720a 0046 6169  ize encoder..Fai
00001420: 6c65 6420 746f 2073 6574 7570 206d 6f64  led to setup mod
00001430: 6520 636f 6e66 6967 0a00 4661 696c 6564  e config..Failed
00001440: 2074 6f20 636c 6561 7220 6469 7370 6c61   to clear displa
00001450: 790a 0041 7070 6c65 2054 6f75 6368 2042  y..Apple Touch B
00001460: 6172 2044 524d 2044 7269 7665 7200 0000  ar DRM Driver...
00001470: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001480: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001490: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014f0: 5b64 726d 5d20 2a45 5252 4f52 2a20 4661  [drm] *ERROR* Fa
00001500: 696c 6564 2074 6f20 7365 6e64 206d 6573  iled to send mes
00001510: 7361 6765 2028 2564 290a 0000 0000 0000  sage (%d).......
00001520: 5b64 726d 5d20 2a45 5252 4f52 2a20 4163  [drm] *ERROR* Ac
00001530: 7475 616c 2073 697a 6520 2825 6429 2064  tual size (%d) d
00001540: 6f65 736e 2774 206d 6174 6368 2065 7870  oesn't match exp
00001550: 6563 7465 6420 7369 7a65 2028 256c 7529  ected size (%lu)
00001560: 0a00 0000 0000 0000 5b64 726d 5d20 2a45  ........[drm] *E
00001570: 5252 4f52 2a20 4661 696c 6564 2074 6f20  RROR* Failed to 
00001580: 7265 6164 2072 6573 706f 6e73 6520 2825  read response (%
00001590: 6429 0a00 0000 0000 5b64 726d 5d20 2a45  d)......[drm] *E
000015a0: 5252 4f52 2a20 456e 636f 756e 7465 7265  RROR* Encountere
000015b0: 6420 756e 6578 7065 6374 6564 2072 6561  d unexpected rea
000015c0: 6469 6e65 7373 2073 6967 6e61 6c0a 0000  diness signal...
000015d0: 5b64 726d 5d20 2a45 5252 4f52 2a20 556e  [drm] *ERROR* Un
000015e0: 6578 7065 6374 6564 2072 6573 706f 6e73  expected respons
000015f0: 6520 6672 6f6d 2064 6576 6963 6520 2865  e from device (e
00001600: 7870 6563 7465 6420 2570 3463 6820 666f  xpected %p4ch fo
00001610: 756e 6420 2570 3463 6829 0a00 0000 0000  und %p4ch)......
00001620: 5b64 726d 5d20 2a45 5252 4f52 2a20 4661  [drm] *ERROR* Fa
00001630: 696c 6564 2074 6f20 7374 6172 7420 4350  iled to start CP
00001640: 5520 6672 616d 6562 7566 6665 7220 6163  U framebuffer ac
00001650: 6365 7373 2028 2564 290a 0000 0000 0000  cess (%d).......
00001660: 5b64 726d 5d20 2a45 5252 4f52 2a20 5265  [drm] *ERROR* Re
00001670: 7370 6f6e 7365 2074 696d 6573 7461 6d70  sponse timestamp
00001680: 2028 256c 6c75 2920 646f 6573 6e27 7420   (%llu) doesn't 
00001690: 6d61 7463 6820 7265 7175 6573 7420 7469  match request ti
000016a0: 6d65 7374 616d 7020 2825 6c6c 7529 0a00  mestamp (%llu)..
000016b0: 4661 696c 6564 2074 6f20 6669 6e64 2062  Failed to find b
000016c0: 756c 6b20 656e 6470 6f69 6e74 730a 0000  ulk endpoints...
000016d0: 5b64 726d 5d20 2a45 5252 4f52 2a20 456e  [drm] *ERROR* En
000016e0: 636f 756e 7465 7265 6420 756e 6578 7065  countered unexpe
000016f0: 6374 6564 2062 6974 7320 7065 7220 7069  cted bits per pi
00001700: 7865 6c20 7661 6c75 6520 2825 6429 0a00  xel value (%d)..
00001710: 5b64 726d 5d20 2a45 5252 4f52 2a20 456e  [drm] *ERROR* En
00001720: 636f 756e 7465 7265 6420 756e 6b6e 6f77  countered unknow
00001730: 6e20 7069 7865 6c20 666f 726d 6174 2028  n pixel format (
00001740: 2570 3463 6829 0a00 4661 696c 6564 2074  %p4ch)..Failed t
00001750: 6f20 6765 7420 6469 7370 6c61 7920 696e  o get display in
00001760: 666f 726d 6174 696f 6e0a 0000 0000 0000  formation.......
00001770: 4661 696c 6564 2074 6f20 696e 6974 6961  Failed to initia
00001780: 6c69 7a65 206d 6f64 6520 636f 6e66 6967  lize mode config
00001790: 7572 6174 696f 6e0a 0000 0000 0000 0000  uration.........
000017a0: 4661 696c 6564 2074 6f20 696e 6974 6961  Failed to initia
000017b0: 6c69 7a65 2075 6e69 7665 7273 616c 2070  lize universal p
000017c0: 6c61 6e65 206f 626a 6563 740a 0000 0000  lane object.....
000017d0: 4661 696c 6564 2074 6f20 696e 6974 6961  Failed to initia
000017e0: 6c69 7a65 2043 5254 4320 6f62 6a65 6374  lize CRTC object
000017f0: 0a00 0000 0000 0000 4661 696c 6564 2074  ........Failed t
00001800: 6f20 696e 6974 6961 6c69 7a65 2063 6f6e  o initialize con
00001810: 6e65 6374 6f72 0a00 4661 696c 6564 2074  nector..Failed t
00001820: 6f20 7365 7420 7061 6e65 6c20 6f72 6965  o set panel orie
00001830: 6e74 6174 696f 6e0a 0000 0000 0000 0000  ntation.........
00001840: 4661 696c 6564 2074 6f20 7365 7420 6e6f  Failed to set no
00001850: 6e2d 6465 736b 746f 7020 7072 6f70 6572  n-desktop proper
00001860: 7479 0a00 0000 0000 4661 696c 6564 2074  ty......Failed t
00001870: 6f20 696e 6974 6961 6c69 7a65 2073 696d  o initialize sim
00001880: 706c 6520 6469 7370 6c61 7920 7069 7065  ple display pipe
00001890: 0a00 0000 0000 0000 4661 696c 6564 2074  ........Failed t
000018a0: 6f20 7265 6769 7374 6572 2044 524d 2064  o register DRM d
000018b0: 6576 6963 650a 0000 2f75 7372 2f73 7263  evice.../usr/src
000018c0: 2f6c 696e 7578 2d68 6561 6465 7273 2d36  /linux-headers-6
000018d0: 2e31 332e 332d 312d 7432 2d6e 6f62 6c65  .13.3-1-t2-noble
000018e0: 2f69 6e63 6c75 6465 2f6c 696e 7578 2f73  /include/linux/s
000018f0: 6c61 622e 6800 0000 2f75 7372 2f73 7263  lab.h.../usr/src
00001900: 2f6c 696e 7578 2d68 6561 6465 7273 2d36  /linux-headers-6
00001910: 2e31 332e 332d 312d 7432 2d6e 6f62 6c65  .13.3-1-t2-noble
00001920: 2f69 6e63 6c75 6465 2f64 726d 2f64 726d  /include/drm/drm
00001930: 5f63 7274 632e 6800 6c69 6365 6e73 653d  _crtc.h.license=
00001940: 4750 4c00 6465 7363 7269 7074 696f 6e3d  GPL.description=
00001950: 4170 706c 6520 546f 7563 6820 4261 7220  Apple Touch Bar 
00001960: 4452 4d20 4472 6976 6572 0061 7574 686f  DRM Driver.autho
00001970: 723d 4b65 7265 6d20 4b61 7261 6261 7920  r=Kerem Karabay 
00001980: 3c6b 656b 7262 7940 676d 6169 6c2e 636f  <kekrby@gmail.co
00001990: 6d3e 0073 7263 7665 7273 696f 6e3d 3739  m>.srcversion=79
000019a0: 3746 3245 4332 4632 4238 3543 4235 3246  7F2EC2F2B85CB52F
000019b0: 3735 3546 4200 616c 6961 733d 7573 623a  755FB.alias=usb:
000019c0: 7630 3541 4370 3833 3032 642a 6463 2a64  v05ACp8302d*dc*d
000019d0: 7363 2a64 702a 6963 3130 6973 632a 6970  sc*dp*ic10isc*ip
000019e0: 2a69 6e2a 0064 6570 656e 6473 3d00 6e61  *in*.depends=.na
000019f0: 6d65 3d61 7070 6c65 7462 6472 6d00 7265  me=appletbdrm.re
00001a00: 7470 6f6c 696e 653d 5900 7665 726d 6167  tpoline=Y.vermag
00001a10: 6963 3d36 2e31 332e 332d 312d 7432 2d6e  ic=6.13.3-1-t2-n
00001a20: 6f62 6c65 2053 4d50 2070 7265 656d 7074  oble SMP preempt
00001a30: 206d 6f64 5f75 6e6c 6f61 6420 6d6f 6476   mod_unload modv
00001a40: 6572 7369 6f6e 7320 0000 0000 0000 0000  ersions ........
00001a50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001a60: 8300 ac05 0283 0000 0000 0000 0010 0000  ................
00001a70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001a80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001a90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001aa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ab0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ac0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ad0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ae0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001af0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b20: 0000 0000 0000 0000 0100 0000 0000 0000  ................
00001b30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b50: 1300 0000 0000 0000 0000 0000 0000 0000  ................
00001b60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b80: 0000 0000 0000 0000 2000 0000 0000 0000  ........ .......
00001b90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001bb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001bc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001bd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001be0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001bf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ca0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001cb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001cc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001cd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ce0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001cf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001da0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001dc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001dd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001de0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001df0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ea0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001eb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ec0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ed0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ee0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ef0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001fa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001fb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001fc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001fd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001fe0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ff0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002020: 4247 3234 5852 3234 0000 0000 0000 0000  BG24XR24........
00002030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002150: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002180: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002200: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002210: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002220: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002230: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002240: 3738 99ec 0000 0000 7573 625f 6465 7265  78......usb_dere
00002250: 6769 7374 6572 0000 0000 0000 0000 0000  gister..........
00002260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002270: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002280: 0ec6 6c88 0000 0000 6472 6d5f 6465 765f  ..l.....drm_dev_
00002290: 656e 7465 7200 0000 0000 0000 0000 0000  enter...........
000022a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000022b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000022c0: 6593 3fb4 0000 0000 6b74 696d 655f 6765  e.?.....ktime_ge
000022d0: 7400 0000 0000 0000 0000 0000 0000 0000  t...............
000022e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000022f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002300: 36da 5e0d 0000 0000 6472 6d5f 6765 6d5f  6.^.....drm_gem_
00002310: 6662 5f62 6567 696e 5f63 7075 5f61 6363  fb_begin_cpu_acc
00002320: 6573 7300 0000 0000 0000 0000 0000 0000  ess.............
00002330: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002340: 0ab5 7d98 0000 0000 6472 6d5f 6765 6d5f  ..}.....drm_gem_
00002350: 6662 5f65 6e64 5f63 7075 5f61 6363 6573  fb_end_cpu_acces
00002360: 7300 0000 0000 0000 0000 0000 0000 0000  s...............
00002370: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002380: df34 a0e8 0000 0000 6472 6d5f 6465 765f  .4......drm_dev_
00002390: 6578 6974 0000 0000 0000 0000 0000 0000  exit............
000023a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000023b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000023c0: 7181 48df 0000 0000 6472 6d5f 6174 6f6d  q.H.....drm_atom
000023d0: 6963 5f68 656c 7065 725f 6461 6d61 6765  ic_helper_damage
000023e0: 5f69 7465 725f 696e 6974 0000 0000 0000  _iter_init......
000023f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002400: 062b 5c6b 0000 0000 6472 6d5f 6174 6f6d  .+\k....drm_atom
00002410: 6963 5f68 656c 7065 725f 6461 6d61 6765  ic_helper_damage
00002420: 5f69 7465 725f 6e65 7874 0000 0000 0000  _iter_next......
00002430: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002440: 1ab4 1a87 0000 0000 6472 6d5f 7265 6374  ........drm_rect
00002450: 5f69 6e74 6572 7365 6374 0000 0000 0000  _intersect......
00002460: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002470: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002480: 482c 8363 0000 0000 6472 6d5f 6662 5f6d  H,.c....drm_fb_m
00002490: 656d 6370 7900 0000 0000 0000 0000 0000  emcpy...........
000024a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000024b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000024c0: e9da a66d 0000 0000 6472 6d5f 6662 5f78  ...m....drm_fb_x
000024d0: 7267 6238 3838 385f 746f 5f62 6772 3838  rgb8888_to_bgr88
000024e0: 3800 0000 0000 0000 0000 0000 0000 0000  8...............
000024f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002500: 63a5 034c 0000 0000 7261 6e64 6f6d 5f6b  c..L....random_k
00002510: 6d61 6c6c 6f63 5f73 6565 6400 0000 0000  malloc_seed.....
00002520: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002530: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002540: 05cf a982 0000 0000 6b6d 616c 6c6f 635f  ........kmalloc_
00002550: 6361 6368 6573 0000 0000 0000 0000 0000  caches..........
00002560: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002570: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002580: 760e 5305 0000 0000 5f5f 6b6d 616c 6c6f  v.S.....__kmallo
00002590: 635f 6361 6368 655f 6e6f 7072 6f66 0000  c_cache_noprof..
000025a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000025b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000025c0: 07c3 8471 0000 0000 5f5f 6472 6d5f 6765  ...q....__drm_ge
000025d0: 6d5f 7265 7365 745f 7368 6164 6f77 5f70  m_reset_shadow_p
000025e0: 6c61 6e65 0000 0000 0000 0000 0000 0000  lane............
000025f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002600: ebed c793 0000 0000 7573 625f 6669 6e64  ........usb_find
00002610: 5f63 6f6d 6d6f 6e5f 656e 6470 6f69 6e74  _common_endpoint
00002620: 7300 0000 0000 0000 0000 0000 0000 0000  s...............
00002630: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002640: 12b7 3b39 0000 0000 5f5f 6465 766d 5f64  ..;9....__devm_d
00002650: 726d 5f64 6576 5f61 6c6c 6f63 0000 0000  rm_dev_alloc....
00002660: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002670: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002680: 9302 e603 0000 0000 6465 765f 6572 725f  ........dev_err_
00002690: 7072 6f62 6500 0000 0000 0000 0000 0000  probe...........
000026a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000026b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000026c0: 4238 0d5b 0000 0000 6472 6d6d 5f6d 6f64  B8.[....drmm_mod
000026d0: 655f 636f 6e66 6967 5f69 6e69 7400 0000  e_config_init...
000026e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000026f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002700: f5b6 0c88 0000 0000 6472 6d5f 756e 6976  ........drm_univ
00002710: 6572 7361 6c5f 706c 616e 655f 696e 6974  ersal_plane_init
00002720: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002730: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002740: a73c 6ac3 0000 0000 6472 6d5f 706c 616e  .<j.....drm_plan
00002750: 655f 656e 6162 6c65 5f66 625f 6461 6d61  e_enable_fb_dama
00002760: 6765 5f63 6c69 7073 0000 0000 0000 0000  ge_clips........
00002770: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002780: 1323 57f8 0000 0000 6472 6d5f 6372 7463  .#W.....drm_crtc
00002790: 5f69 6e69 745f 7769 7468 5f70 6c61 6e65  _init_with_plane
000027a0: 7300 0000 0000 0000 0000 0000 0000 0000  s...............
000027b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000027c0: d868 da56 0000 0000 6472 6d5f 656e 636f  .h.V....drm_enco
000027d0: 6465 725f 696e 6974 0000 0000 0000 0000  der_init........
000027e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000027f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002800: 6961 addc 0000 0000 6472 6d5f 636f 6e6e  ia......drm_conn
00002810: 6563 746f 725f 696e 6974 0000 0000 0000  ector_init......
00002820: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002830: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002840: 0b07 1d1a 0000 0000 6472 6d5f 636f 6e6e  ........drm_conn
00002850: 6563 746f 725f 7365 745f 7061 6e65 6c5f  ector_set_panel_
00002860: 6f72 6965 6e74 6174 696f 6e00 0000 0000  orientation.....
00002870: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002880: 5af1 558c 0000 0000 6472 6d5f 6f62 6a65  Z.U.....drm_obje
00002890: 6374 5f70 726f 7065 7274 795f 7365 745f  ct_property_set_
000028a0: 7661 6c75 6500 0000 0000 0000 0000 0000  value...........
000028b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000028c0: f151 8307 0000 0000 6472 6d5f 636f 6e6e  .Q......drm_conn
000028d0: 6563 746f 725f 6174 7461 6368 5f65 6e63  ector_attach_enc
000028e0: 6f64 6572 0000 0000 0000 0000 0000 0000  oder............
000028f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002900: 8013 5e2d 0000 0000 6472 6d5f 6d6f 6465  ..^-....drm_mode
00002910: 5f63 6f6e 6669 675f 7265 7365 7400 0000  _config_reset...
00002920: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002930: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002940: c145 3875 0000 0000 6472 6d5f 6465 765f  .E8u....drm_dev_
00002950: 7265 6769 7374 6572 0000 0000 0000 0000  register........
00002960: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002970: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002980: 61e5 48a6 0000 0000 5f5f 7562 7361 6e5f  a.H.....__ubsan_
00002990: 6861 6e64 6c65 5f73 6869 6674 5f6f 7574  handle_shift_out
000029a0: 5f6f 665f 626f 756e 6473 0000 0000 0000  _of_bounds......
000029b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000029c0: 17c3 92be 0000 0000 6472 6d5f 6174 6f6d  ........drm_atom
000029d0: 6963 5f68 656c 7065 725f 6368 6563 6b5f  ic_helper_check_
000029e0: 706c 616e 655f 7374 6174 6500 0000 0000  plane_state.....
000029f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002a00: 91c9 c552 0000 0000 5f5f 6b6d 616c 6c6f  ...R....__kmallo
00002a10: 635f 6e6f 7072 6f66 0000 0000 0000 0000  c_noprof........
00002a20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002a30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002a40: c6fa b154 0000 0000 5f5f 7562 7361 6e5f  ...T....__ubsan_
00002a50: 6861 6e64 6c65 5f6c 6f61 645f 696e 7661  handle_load_inva
00002a60: 6c69 645f 7661 6c75 6500 0000 0000 0000  lid_value.......
00002a70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002a80: 9ec0 f9ed 0000 0000 6472 6d5f 6765 6d5f  ........drm_gem_
00002a90: 7368 6d65 6d5f 7072 696d 655f 696d 706f  shmem_prime_impo
00002aa0: 7274 5f73 675f 7461 626c 6500 0000 0000  rt_sg_table.....
00002ab0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002ac0: eb4d bb88 0000 0000 6472 6d5f 6765 6d5f  .M......drm_gem_
00002ad0: 7368 6d65 6d5f 6475 6d62 5f63 7265 6174  shmem_dumb_creat
00002ae0: 6500 0000 0000 0000 0000 0000 0000 0000  e...............
00002af0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b00: 4a7a 62b5 0000 0000 6e6f 6f70 5f6c 6c73  Jzb.....noop_lls
00002b10: 6565 6b00 0000 0000 0000 0000 0000 0000  eek.............
00002b20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b40: fd4e a7ae 0000 0000 6472 6d5f 7265 6164  .N......drm_read
00002b50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b80: c7ed ff53 0000 0000 6472 6d5f 706f 6c6c  ...S....drm_poll
00002b90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002bb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002bc0: 087e 9bf7 0000 0000 6472 6d5f 696f 6374  .~......drm_ioct
00002bd0: 6c00 0000 0000 0000 0000 0000 0000 0000  l...............
00002be0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002bf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002c00: a9c0 7b5a 0000 0000 6472 6d5f 636f 6d70  ..{Z....drm_comp
00002c10: 6174 5f69 6f63 746c 0000 0000 0000 0000  at_ioctl........
00002c20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002c30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002c40: 8289 f8a7 0000 0000 6472 6d5f 6765 6d5f  ........drm_gem_
00002c50: 6d6d 6170 0000 0000 0000 0000 0000 0000  mmap............
00002c60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002c70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002c80: 3fca d15f 0000 0000 6472 6d5f 6f70 656e  ?.._....drm_open
00002c90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002ca0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002cb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002cc0: b987 58b2 0000 0000 6472 6d5f 7265 6c65  ..X.....drm_rele
00002cd0: 6173 6500 0000 0000 0000 0000 0000 0000  ase.............
00002ce0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002cf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002d00: 362e 249a 0000 0000 6472 6d5f 656e 636f  6.$.....drm_enco
00002d10: 6465 725f 636c 6561 6e75 7000 0000 0000  der_cleanup.....
00002d20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002d30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002d40: d792 407d 0000 0000 6472 6d5f 6174 6f6d  ..@}....drm_atom
00002d50: 6963 5f68 656c 7065 725f 6372 7463 5f72  ic_helper_crtc_r
00002d60: 6573 6574 0000 0000 0000 0000 0000 0000  eset............
00002d70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002d80: 730e 3d2a 0000 0000 6472 6d5f 6372 7463  s.=*....drm_crtc
00002d90: 5f63 6c65 616e 7570 0000 0000 0000 0000  _cleanup........
00002da0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002dc0: 84cb 7c4b 0000 0000 6472 6d5f 6174 6f6d  ..|K....drm_atom
00002dd0: 6963 5f68 656c 7065 725f 7365 745f 636f  ic_helper_set_co
00002de0: 6e66 6967 0000 0000 0000 0000 0000 0000  nfig............
00002df0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002e00: 2b20 b2c8 0000 0000 6472 6d5f 6174 6f6d  + ......drm_atom
00002e10: 6963 5f68 656c 7065 725f 7061 6765 5f66  ic_helper_page_f
00002e20: 6c69 7000 0000 0000 0000 0000 0000 0000  lip.............
00002e30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002e40: 2314 8344 0000 0000 6472 6d5f 6174 6f6d  #..D....drm_atom
00002e50: 6963 5f68 656c 7065 725f 6372 7463 5f64  ic_helper_crtc_d
00002e60: 7570 6c69 6361 7465 5f73 7461 7465 0000  uplicate_state..
00002e70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002e80: 243d 51c9 0000 0000 6472 6d5f 6174 6f6d  $=Q.....drm_atom
00002e90: 6963 5f68 656c 7065 725f 6372 7463 5f64  ic_helper_crtc_d
00002ea0: 6573 7472 6f79 5f73 7461 7465 0000 0000  estroy_state....
00002eb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002ec0: 7f1a 8263 0000 0000 6472 6d5f 6174 6f6d  ...c....drm_atom
00002ed0: 6963 5f68 656c 7065 725f 636f 6e6e 6563  ic_helper_connec
00002ee0: 746f 725f 7265 7365 7400 0000 0000 0000  tor_reset.......
00002ef0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002f00: 72f8 0889 0000 0000 6472 6d5f 6865 6c70  r.......drm_help
00002f10: 6572 5f70 726f 6265 5f73 696e 676c 655f  er_probe_single_
00002f20: 636f 6e6e 6563 746f 725f 6d6f 6465 7300  connector_modes.
00002f30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002f40: 7003 c7b9 0000 0000 6472 6d5f 636f 6e6e  p.......drm_conn
00002f50: 6563 746f 725f 636c 6561 6e75 7000 0000  ector_cleanup...
00002f60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002f70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002f80: 1fc1 4f27 0000 0000 6472 6d5f 6174 6f6d  ..O'....drm_atom
00002f90: 6963 5f68 656c 7065 725f 636f 6e6e 6563  ic_helper_connec
00002fa0: 746f 725f 6475 706c 6963 6174 655f 7374  tor_duplicate_st
00002fb0: 6174 6500 0000 0000 0000 0000 0000 0000  ate.............
00002fc0: 74d1 188c 0000 0000 6472 6d5f 6174 6f6d  t.......drm_atom
00002fd0: 6963 5f68 656c 7065 725f 636f 6e6e 6563  ic_helper_connec
00002fe0: 746f 725f 6465 7374 726f 795f 7374 6174  tor_destroy_stat
00002ff0: 6500 0000 0000 0000 0000 0000 0000 0000  e...............
00003000: b789 a2cb 0000 0000 6472 6d5f 6765 6d5f  ........drm_gem_
00003010: 6662 5f63 7265 6174 655f 7769 7468 5f64  fb_create_with_d
00003020: 6972 7479 0000 0000 0000 0000 0000 0000  irty............
00003030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003040: e833 5446 0000 0000 6472 6d5f 6174 6f6d  .3TF....drm_atom
00003050: 6963 5f68 656c 7065 725f 6368 6563 6b00  ic_helper_check.
00003060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003080: c52e 6d0d 0000 0000 6472 6d5f 6174 6f6d  ..m.....drm_atom
00003090: 6963 5f68 656c 7065 725f 636f 6d6d 6974  ic_helper_commit
000030a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000030b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000030c0: 30e8 4123 0000 0000 6472 6d5f 6174 6f6d  0.A#....drm_atom
000030d0: 6963 5f68 656c 7065 725f 7570 6461 7465  ic_helper_update
000030e0: 5f70 6c61 6e65 0000 0000 0000 0000 0000  _plane..........
000030f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003100: 8b9f cb79 0000 0000 6472 6d5f 6174 6f6d  ...y....drm_atom
00003110: 6963 5f68 656c 7065 725f 6469 7361 626c  ic_helper_disabl
00003120: 655f 706c 616e 6500 0000 0000 0000 0000  e_plane.........
00003130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003140: 8844 a72e 0000 0000 6472 6d5f 706c 616e  .D......drm_plan
00003150: 655f 636c 6561 6e75 7000 0000 0000 0000  e_cleanup.......
00003160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003180: 8efc 6e3e 0000 0000 6472 6d5f 6765 6d5f  ..n>....drm_gem_
00003190: 6265 6769 6e5f 7368 6164 6f77 5f66 625f  begin_shadow_fb_
000031a0: 6163 6365 7373 0000 0000 0000 0000 0000  access..........
000031b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000031c0: b876 7013 0000 0000 6472 6d5f 6765 6d5f  .vp.....drm_gem_
000031d0: 656e 645f 7368 6164 6f77 5f66 625f 6163  end_shadow_fb_ac
000031e0: 6365 7373 0000 0000 0000 0000 0000 0000  cess............
000031f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003200: bb6d fbbd 0000 0000 5f5f 6665 6e74 7279  .m......__fentry
00003210: 5f5f 0000 0000 0000 0000 0000 0000 0000  __..............
00003220: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003230: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003240: 128e d33c 0000 0000 7573 625f 7265 6769  ...<....usb_regi
00003250: 7374 6572 5f64 7269 7665 7200 0000 0000  ster_driver.....
00003260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003270: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003280: ca39 825b 0000 0000 5f5f 7838 365f 7265  .9.[....__x86_re
00003290: 7475 726e 5f74 6875 6e6b 0000 0000 0000  turn_thunk......
000032a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000032b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000032c0: 4716 594e 0000 0000 6472 6d5f 6174 6f6d  G.YN....drm_atom
000032d0: 6963 5f68 656c 7065 725f 7368 7574 646f  ic_helper_shutdo
000032e0: 776e 0000 0000 0000 0000 0000 0000 0000  wn..............
000032f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003300: fe35 d0a1 0000 0000 6472 6d5f 6465 765f  .5......drm_dev_
00003310: 756e 706c 7567 0000 0000 0000 0000 0000  unplug..........
00003320: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003330: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003340: ca98 858a 0000 0000 6472 6d5f 6765 6d5f  ........drm_gem_
00003350: 7072 696d 655f 696d 706f 7274 5f64 6576  prime_import_dev
00003360: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003370: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003380: d2cf 6aed 0000 0000 7573 625f 6275 6c6b  ..j.....usb_bulk
00003390: 5f6d 7367 0000 0000 0000 0000 0000 0000  _msg............
000033a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000033b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000033c0: f38e 7d8a 0000 0000 5f64 6576 5f65 7272  ..}....._dev_err
000033d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000033e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000033f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003400: cbf6 fdf0 0000 0000 5f5f 7374 6163 6b5f  ........__stack_
00003410: 6368 6b5f 6661 696c 0000 0000 0000 0000  chk_fail........
00003420: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003430: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003440: e16a a611 0000 0000 6472 6d5f 636f 6e6e  .j......drm_conn
00003450: 6563 746f 725f 6865 6c70 6572 5f67 6574  ector_helper_get
00003460: 5f6d 6f64 6573 5f66 6978 6564 0000 0000  _modes_fixed....
00003470: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003480: 2850 66cb 0000 0000 6472 6d5f 6372 7463  (Pf.....drm_crtc
00003490: 5f68 656c 7065 725f 6d6f 6465 5f76 616c  _helper_mode_val
000034a0: 6964 5f66 6978 6564 0000 0000 0000 0000  id_fixed........
000034b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000034c0: ba0c 7a03 0000 0000 6b66 7265 6500 0000  ..z.....kfree...
000034d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000034e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000034f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003500: 660b e0c4 0000 0000 5f5f 6472 6d5f 6765  f.......__drm_ge
00003510: 6d5f 6465 7374 726f 795f 7368 6164 6f77  m_destroy_shadow
00003520: 5f70 6c61 6e65 5f73 7461 7465 0000 0000  _plane_state....
00003530: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003540: 2be1 ada8 0000 0000 6b6d 656d 6475 705f  +.......kmemdup_
00003550: 6e6f 7072 6f66 0000 0000 0000 0000 0000  noprof..........
00003560: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003570: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003580: 8a7f 9921 0000 0000 5f5f 6472 6d5f 6765  ...!....__drm_ge
00003590: 6d5f 6475 706c 6963 6174 655f 7368 6164  m_duplicate_shad
000035a0: 6f77 5f70 6c61 6e65 5f73 7461 7465 0000  ow_plane_state..
000035b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000035c0: 2e42 fedf 0000 0000 6d6f 6475 6c65 5f6c  .B......module_l
000035d0: 6179 6f75 7400 0000 0000 0000 0000 0000  ayout...........
000035e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000035f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003600: 0000 0000 0000 0000 0f02 0109 0000 0000  ................
00003610: 0000 0000 0002 0109 0000 0000 0000 0000  ................
00003620: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003630: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003640: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003650: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003660: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003670: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003680: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003690: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000036a0: 0047 4343 3a20 2855 6275 6e74 7520 3133  .GCC: (Ubuntu 13
000036b0: 2e33 2e30 2d36 7562 756e 7475 327e 3234  .3.0-6ubuntu2~24
000036c0: 2e30 3429 2031 332e 332e 3000 0047 4343  .04) 13.3.0..GCC
000036d0: 3a20 2855 6275 6e74 7520 3133 2e33 2e30  : (Ubuntu 13.3.0
000036e0: 2d36 7562 756e 7475 327e 3234 2e30 3429  -6ubuntu2~24.04)
000036f0: 2031 332e 332e 3000 0047 4343 3a20 2855   13.3.0..GCC: (U
00003700: 6275 6e74 7520 3133 2e33 2e30 2d36 7562  buntu 13.3.0-6ub
00003710: 756e 7475 327e 3234 2e30 3429 2031 332e  untu2~24.04) 13.
00003720: 332e 3000 0000 0000 0000 0000 0000 0000  3.0.............
00003730: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003740: 0000 0000 0000 0000 8603 0000 1300 0000  ................
00003750: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003760: 0000 0000 0000 0000 8603 0000 1300 0000  ................
00003770: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003780: 0000 0000 0000 0000 8603 0000 1300 0000  ................
00003790: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000037a0: 0000 0000 0000 0000 8603 0000 1300 0000  ................
000037b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000037c0: ffff 0000 276b 6d65 6d5f 6361 6368 6520  ....'kmem_cache 
000037d0: 2a5b 3139 5d5b 3134 5d27 0000 0000 0000  *[19][14]'......
000037e0: 0000 0000 0000 0000 5b01 0000 1b00 0000  ........[.......
000037f0: 0000 0000 0000 0000 0000 0600 275f 426f  ............'_Bo
00003800: 6f6c 2700 0000 0000 0000 0000 0000 0000  ol'.............
00003810: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003820: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003830: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003840: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003850: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003860: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003870: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003880: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003890: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003900: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003910: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003920: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003930: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003940: 0000 0000 0000 0000 ff04 0000 0b00 0000  ................
00003950: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003960: 0000 0a00 2775 6e73 6967 6e65 6420 696e  ....'unsigned in
00003970: 7427 0000 0000 0b00 2769 6e74 2700 0000  t'......'int'...
00003980: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003990: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000039a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000039b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000039c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000039d0: 0000 0000 0000 0000 6170 706c 6574 6264  ........appletbd
000039e0: 726d 0000 0000 0000 0000 0000 0000 0000  rm..............
000039f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003aa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ab0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ac0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ad0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ae0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003af0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003bb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003bc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003bd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003be0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003bf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ca0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003cb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003cc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003cd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ce0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003cf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003da0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003dc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003dd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003de0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003df0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ea0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003eb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ec0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ed0: 0000 0000 0000 0000 0000 0000 0300 0100  ................
00003ee0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ef0: 0000 0000 0300 0200 0000 0000 0000 0000  ................
00003f00: 0000 0000 0000 0000 0000 0000 0300 0300  ................
00003f10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003f20: 0000 0000 0300 0500 0000 0000 0000 0000  ................
00003f30: 0000 0000 0000 0000 0000 0000 0300 0700  ................
00003f40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003f50: 0000 0000 0300 0900 0000 0000 0000 0000  ................
00003f60: 0000 0000 0000 0000 0000 0000 0300 0b00  ................
00003f70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003f80: 0000 0000 0300 0c00 0000 0000 0000 0000  ................
00003f90: 0000 0000 0000 0000 0000 0000 0300 0e00  ................
00003fa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003fb0: 0000 0000 0300 0f00 0000 0000 0000 0000  ................
00003fc0: 0000 0000 0000 0000 0000 0000 0300 1000  ................
00003fd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003fe0: 0000 0000 0300 1200 0000 0000 0000 0000  ................
00003ff0: 0000 0000 0000 0000 0000 0000 0300 1400  ................
00004000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004010: 0000 0000 0300 1600 0000 0000 0000 0000  ................
00004020: 0000 0000 0000 0000 0000 0000 0300 1700  ................
00004030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004040: 0000 0000 0300 1900 0000 0000 0000 0000  ................
00004050: 0000 0000 0000 0000 0000 0000 0300 1b00  ................
00004060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004070: 0000 0000 0300 1c00 0000 0000 0000 0000  ................
00004080: 0000 0000 0000 0000 0000 0000 0300 1d00  ................
00004090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000040a0: 0000 0000 0300 1e00 0000 0000 0000 0000  ................
000040b0: 0000 0000 0000 0000 0000 0000 0300 2000  .............. .
000040c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000040d0: 0000 0000 0300 2200 0000 0000 0000 0000  ......".........
000040e0: 0000 0000 0000 0000 0000 0000 0300 2400  ..............$.
000040f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004100: 0000 0000 0300 2600 0000 0000 0000 0000  ......&.........
00004110: 0000 0000 0000 0000 0100 0000 0400 f1ff  ................
00004120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004130: 1100 0000 0100 0f00 c600 0000 0000 0000  ................
00004140: 0c00 0000 0000 0000 2a00 0000 0100 0f00  ........*.......
00004150: d200 0000 0000 0000 3f00 0000 0000 0000  ........?.......
00004160: 4200 0000 0100 0200 0000 0000 0000 0000  B...............
00004170: 1800 0000 0000 0000 4b00 0000 0100 0200  ........K.......
00004180: 1800 0000 0000 0000 1800 0000 0000 0000  ................
00004190: 5400 0000 0400 f1ff 0000 0000 0000 0000  T...............
000041a0: 0000 0000 0000 0000 db04 0000 0200 0500  ................
000041b0: 1000 0000 0000 0000 2f00 0000 0000 0000  ......../.......
000041c0: 6100 0000 0100 1e00 e000 0000 0000 0000  a...............
000041d0: 0801 0000 0000 0000 9d02 0000 0200 0300  ................
000041e0: 1000 0000 0000 0000 2100 0000 0000 0000  ........!.......
000041f0: b702 0000 0200 0300 5000 0000 0000 0000  ........P.......
00004200: 3100 0000 0000 0000 d302 0000 0200 0300  1...............
00004210: a000 0000 0000 0000 3500 0000 0000 0000  ........5.......
00004220: fc02 0000 0200 0300 f000 0000 0000 0000  ................
00004230: f800 0000 0000 0000 1a03 0000 0200 0300  ................
00004240: 0002 0000 0000 0000 8101 0000 0000 0000  ................
00004250: 3903 0000 0200 0300 a003 0000 0000 0000  9...............
00004260: 2200 0000 0000 0000 6503 0000 0200 0300  ".......e.......
00004270: e003 0000 0000 0000 2400 0000 0000 0000  ........$.......
00004280: 8d03 0000 0200 0300 2004 0000 0000 0000  ........ .......
00004290: 4300 0000 0000 0000 ba03 0000 0200 0300  C...............
000042a0: 8004 0000 0000 0000 7c00 0000 0000 0000  ........|.......
000042b0: fc04 0000 0200 0700 1000 0000 0000 0000  ................
000042c0: 1800 0000 0000 0000 e903 0000 0200 0300  ................
000042d0: 1005 0000 0000 0000 8903 0000 0000 0000  ................
000042e0: 1d04 0000 0200 0300 b008 0000 0000 0000  ................
000042f0: b000 0000 0000 0000 3704 0000 0200 0300  ........7.......
00004300: 7009 0000 0000 0000 7100 0000 0000 0000  p.......q.......
00004310: 6c04 0000 0200 0300 000a 0000 0000 0000  l...............
00004320: 8200 0000 0000 0000 9104 0000 0200 0300  ................
00004330: a00a 0000 0000 0000 e705 0000 0000 0000  ................
00004340: 7700 0000 0100 1000 4000 0000 0000 0000  w.......@.......
00004350: d000 0000 0000 0000 8d00 0000 0100 1000  ................
00004360: c005 0000 0000 0000 0800 0000 0000 0000  ................
00004370: ae00 0000 0100 1000 e004 0000 0000 0000  ................
00004380: 6800 0000 0000 0000 cd00 0000 0100 1000  h...............
00004390: 6005 0000 0000 0000 6000 0000 0000 0000  `.......`.......
000043a0: f300 0000 0100 1000 8002 0000 0000 0000  ................
000043b0: c000 0000 0000 0000 0901 0000 0100 1000  ................
000043c0: 4003 0000 0000 0000 8000 0000 0000 0000  @...............
000043d0: 2601 0000 0100 1000 4002 0000 0000 0000  &.......@.......
000043e0: 2800 0000 0000 0000 3f01 0000 0100 1000  (.......?.......
000043f0: a004 0000 0000 0000 4000 0000 0000 0000  ........@.......
00004400: 5c01 0000 0100 1000 2004 0000 0000 0000  \....... .......
00004410: 8000 0000 0000 0000 7701 0000 0100 1000  ........w.......
00004420: c003 0000 0000 0000 6000 0000 0000 0000  ........`.......
00004430: 9901 0000 0200 0900 0000 0000 0000 0000  ................
00004440: 1e00 0000 0000 0000 a804 0000 0200 0300  ................
00004450: a010 0000 0000 0000 ee01 0000 0000 0000  ................
00004460: af01 0000 0200 0900 1e00 0000 0000 0000  ................
00004470: 1500 0000 0000 0000 e101 0000 0100 0f00  ................
00004480: 0000 0000 0000 0000 0c00 0000 0000 0000  ................
00004490: f801 0000 0100 0f00 0c00 0000 0000 0000  ................
000044a0: 2700 0000 0000 0000 1302 0000 0100 0f00  '...............
000044b0: 3300 0000 0000 0000 2800 0000 0000 0000  3.......(.......
000044c0: 2902 0000 0100 2000 0000 0000 0000 0000  )..... .........
000044d0: 0800 0000 0000 0000 5502 0000 0100 2200  ........U.....".
000044e0: 0000 0000 0000 0000 0800 0000 0000 0000  ................
000044f0: 2306 0000 0100 1000 0000 0000 0000 0000  #...............
00004500: 4000 0000 0000 0000 7e02 0000 0100 1000  @.......~.......
00004510: 2001 0000 0000 0000 0801 0000 0000 0000   ...............
00004520: 9202 0000 0000 0b00 0b00 0000 0000 0000  ................
00004530: 0000 0000 0000 0000 9702 0000 0200 0300  ................
00004540: 0000 0000 0000 0000 1000 0000 0000 0000  ................
00004550: b102 0000 0200 0300 4000 0000 0000 0000  ........@.......
00004560: 1000 0000 0000 0000 cd02 0000 0200 0300  ................
00004570: 9000 0000 0000 0000 1000 0000 0000 0000  ................
00004580: f602 0000 0200 0300 e000 0000 0000 0000  ................
00004590: 1000 0000 0000 0000 1403 0000 0200 0300  ................
000045a0: f001 0000 0000 0000 1000 0000 0000 0000  ................
000045b0: 3303 0000 0200 0300 9003 0000 0000 0000  3...............
000045c0: 1000 0000 0000 0000 5f03 0000 0200 0300  ........_.......
000045d0: d003 0000 0000 0000 1000 0000 0000 0000  ................
000045e0: 8703 0000 0200 0300 1004 0000 0000 0000  ................
000045f0: 1000 0000 0000 0000 b403 0000 0200 0300  ................
00004600: 7004 0000 0000 0000 1000 0000 0000 0000  p...............
00004610: e303 0000 0200 0300 0005 0000 0000 0000  ................
00004620: 1000 0000 0000 0000 1704 0000 0200 0300  ................
00004630: a008 0000 0000 0000 1000 0000 0000 0000  ................
00004640: 3104 0000 0200 0300 6009 0000 0000 0000  1.......`.......
00004650: 1000 0000 0000 0000 6604 0000 0200 0300  ........f.......
00004660: f009 0000 0000 0000 1000 0000 0000 0000  ................
00004670: 8b04 0000 0200 0300 900a 0000 0000 0000  ................
00004680: 1000 0000 0000 0000 a204 0000 0200 0300  ................
00004690: 9010 0000 0000 0000 1000 0000 0000 0000  ................
000046a0: d504 0000 0200 0500 0000 0000 0000 0000  ................
000046b0: 1000 0000 0000 0000 f604 0000 0200 0700  ................
000046c0: 0000 0000 0000 0000 1000 0000 0000 0000  ................
000046d0: 1705 0000 0400 f1ff 0000 0000 0000 0000  ................
000046e0: 0000 0000 0000 0000 2805 0000 0100 0f00  ........(.......
000046f0: 5b00 0000 0000 0000 2300 0000 0000 0000  [.......#.......
00004700: 4205 0000 0100 0f00 7e00 0000 0000 0000  B.......~.......
00004710: 2f00 0000 0000 0000 5705 0000 0100 0f00  /.......W.......
00004720: ad00 0000 0000 0000 0900 0000 0000 0000  ................
00004730: 6e05 0000 0100 1600 0000 0000 0000 0000  n...............
00004740: c013 0000 0000 0000 7b05 0000 0100 0f00  ........{.......
00004750: b600 0000 0000 0000 1000 0000 0000 0000  ................
00004760: 8f05 0000 1000 0000 0000 0000 0000 0000  ................
00004770: 0000 0000 0000 0000 b305 0000 1000 0000  ................
00004780: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004790: bc05 0000 1000 0000 0000 0000 0000 0000  ................
000047a0: 0000 0000 0000 0000 c505 0000 1000 0000  ................
000047b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000047c0: e205 0000 1000 0000 0000 0000 0000 0000  ................
000047d0: 0000 0000 0000 0000 fc05 0000 1000 0000  ................
000047e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000047f0: 0a06 0000 1100 1000 0000 0000 0000 0000  ................
00004800: 4000 0000 0000 0000 3b06 0000 1000 0000  @.......;.......
00004810: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004820: 4c06 0000 1000 0000 0000 0000 0000 0000  L...............
00004830: 0000 0000 0000 0000 6d06 0000 1100 2400  ........m.....$.
00004840: 0000 0000 0000 0000 0005 0000 0000 0000  ................
00004850: 7b06 0000 1000 0000 0000 0000 0000 0000  {...............
00004860: 0000 0000 0000 0000 9506 0000 1000 0000  ................
00004870: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004880: b606 0000 1000 0000 0000 0000 0000 0000  ................
00004890: 0000 0000 0000 0000 d606 0000 1000 0000  ................
000048a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000048b0: f906 0000 1000 0000 0000 0000 0000 0000  ................
000048c0: 0000 0000 0000 0000 1407 0000 1000 0000  ................
000048d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000048e0: 2807 0000 1000 1b00 0000 0000 0000 0000  (...............
000048f0: 0000 0000 0000 0000 e109 0000 1200 0700  ................
00004900: 1000 0000 0000 0000 1800 0000 0000 0000  ................
00004910: 3a07 0000 1000 0000 0000 0000 0000 0000  :...............
00004920: 0000 0000 0000 0000 4007 0000 1000 0000  ........@.......
00004930: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004940: 6507 0000 1000 0000 0000 0000 0000 0000  e...............
00004950: 0000 0000 0000 0000 8a07 0000 1000 0000  ................
00004960: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004970: 9b07 0000 1000 0000 0000 0000 0000 0000  ................
00004980: 0000 0000 0000 0000 af07 0000 1000 0000  ................
00004990: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000049a0: c507 0000 1000 0000 0000 0000 0000 0000  ................
000049b0: 0000 0000 0000 0000 0709 0000 1200 0500  ................
000049c0: 1000 0000 0000 0000 2f00 0000 0000 0000  ......../.......
000049d0: d007 0000 1000 0000 0000 0000 0000 0000  ................
000049e0: 0000 0000 0000 0000 ed07 0000 1000 0000  ................
000049f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004a00: 0708 0000 1000 1b00 0000 0000 0000 0000  ................
00004a10: 0000 0000 0000 0000 1a08 0000 1000 0000  ................
00004a20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004a30: 3d08 0000 1000 0000 0000 0000 0000 0000  =...............
00004a40: 0000 0000 0000 0000 4a08 0000 1000 0000  ........J.......
00004a50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004a60: 5b08 0000 1000 0000 0000 0000 0000 0000  [...............
00004a70: 0000 0000 0000 0000 7408 0000 1000 0000  ........t.......
00004a80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004a90: 8c08 0000 1000 0000 0000 0000 0000 0000  ................
00004aa0: 0000 0000 0000 0000 b608 0000 1000 0000  ................
00004ab0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004ac0: c308 0000 1000 0000 0000 0000 0000 0000  ................
00004ad0: 0000 0000 0000 0000 cd08 0000 1000 0000  ................
00004ae0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004af0: df08 0000 1000 0000 0000 0000 0000 0000  ................
00004b00: 0000 0000 0000 0000 ee08 0000 1000 0000  ................
00004b10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004b20: 0109 0000 1200 0500 0000 0000 0000 0000  ................
00004b30: 1000 0000 0000 0000 1309 0000 1000 0000  ................
00004b40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004b50: 1c09 0000 1000 0000 0000 0000 0000 0000  ................
00004b60: 0000 0000 0000 0000 2809 0000 1000 0000  ........(.......
00004b70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004b80: 3109 0000 1000 0000 0000 0000 0000 0000  1...............
00004b90: 0000 0000 0000 0000 4e09 0000 1000 0000  ........N.......
00004ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004bb0: 6209 0000 1000 0000 0000 0000 0000 0000  b...............
00004bc0: 0000 0000 0000 0000 8109 0000 1000 0000  ................
00004bd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004be0: a509 0000 1000 0000 0000 0000 0000 0000  ................
00004bf0: 0000 0000 0000 0000 bf09 0000 1000 0000  ................
00004c00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004c10: ce09 0000 1000 0000 0000 0000 0000 0000  ................
00004c20: 0000 0000 0000 0000 db09 0000 1200 0700  ................
00004c30: 0000 0000 0000 0000 1000 0000 0000 0000  ................
00004c40: f009 0000 1000 0000 0000 0000 0000 0000  ................
00004c50: 0000 0000 0000 0000 050a 0000 1000 0000  ................
00004c60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004c70: 290a 0000 1000 0000 0000 0000 0000 0000  )...............
00004c80: 0000 0000 0000 0000 3c0a 0000 1000 0000  ........<.......
00004c90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004ca0: 4f0a 0000 1000 0000 0000 0000 0000 0000  O...............
00004cb0: 0000 0000 0000 0000 6c0a 0000 1000 0000  ........l.......
00004cc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004cd0: 7b0a 0000 1000 0000 0000 0000 0000 0000  {...............
00004ce0: 0000 0000 0000 0000 a70a 0000 1000 0000  ................
00004cf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004d00: bd0a 0000 1000 0000 0000 0000 0000 0000  ................
00004d10: 0000 0000 0000 0000 d60a 0000 1000 0000  ................
00004d20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004d30: f30a 0000 1000 0000 0000 0000 0000 0000  ................
00004d40: 0000 0000 0000 0000 010b 0000 1000 0000  ................
00004d50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004d60: 240b 0000 1000 0000 0000 0000 0000 0000  $...............
00004d70: 0000 0000 0000 0000 420b 0000 1000 0000  ........B.......
00004d80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004d90: 530b 0000 1000 0000 0000 0000 0000 0000  S...............
00004da0: 0000 0000 0000 0000 6f0b 0000 1000 0000  ........o.......
00004db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004dc0: 860b 0000 1000 0000 0000 0000 0000 0000  ................
00004dd0: 0000 0000 0000 0000 900b 0000 1000 0000  ................
00004de0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004df0: b80b 0000 1000 0000 0000 0000 0000 0000  ................
00004e00: 0000 0000 0000 0000 d10b 0000 1000 0000  ................
00004e10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004e20: ee0b 0000 1000 0000 0000 0000 0000 0000  ................
00004e30: 0000 0000 0000 0000 0a0c 0000 1000 0000  ................
00004e40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004e50: 2c0c 0000 1000 0000 0000 0000 0000 0000  ,...............
00004e60: 0000 0000 0000 0000 460c 0000 1000 0000  ........F.......
00004e70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004e80: 540c 0000 1000 0000 0000 0000 0000 0000  T...............
00004e90: 0000 0000 0000 0000 6a0c 0000 1000 0000  ........j.......
00004ea0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004eb0: 910c 0000 1000 0000 0000 0000 0000 0000  ................
00004ec0: 0000 0000 0000 0000 b30c 0000 1000 0000  ................
00004ed0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004ee0: d80c 0000 1000 0000 0000 0000 0000 0000  ................
00004ef0: 0000 0000 0000 0000 ff0c 0000 1000 0000  ................
00004f00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004f10: 1e0d 0000 1000 0000 0000 0000 0000 0000  ................
00004f20: 0000 0000 0000 0000 2f0d 0000 1000 0000  ......../.......
00004f30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004f40: 400d 0000 1000 0000 0000 0000 0000 0000  @...............
00004f50: 0000 0000 0000 0000 4f0d 0000 1000 0000  ........O.......
00004f60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004f70: 006d 6f64 756c 652d 636f 6d6d 6f6e 2e63  .module-common.c
00004f80: 005f 5f55 4e49 5155 455f 4944 5f72 6574  .__UNIQUE_ID_ret
00004f90: 706f 6c69 6e65 3437 3100 5f5f 554e 4951  poline471.__UNIQ
00004fa0: 5545 5f49 445f 7665 726d 6167 6963 3437  UE_ID_vermagic47
00004fb0: 3000 5f6e 6f74 655f 3139 005f 6e6f 7465  0._note_19._note
00004fc0: 5f31 3800 6170 706c 6574 6264 726d 2e63  _18.appletbdrm.c
00004fd0: 0061 7070 6c65 7462 6472 6d5f 7573 625f  .appletbdrm_usb_
00004fe0: 6472 6976 6572 0061 7070 6c65 7462 6472  driver.appletbdr
00004ff0: 6d5f 6472 6d5f 6472 6976 6572 0061 7070  m_drm_driver.app
00005000: 6c65 7462 6472 6d5f 7072 696d 6172 795f  letbdrm_primary_
00005010: 706c 616e 655f 666f 726d 6174 7300 6170  plane_formats.ap
00005020: 706c 6574 6264 726d 5f70 7269 6d61 7279  pletbdrm_primary
00005030: 5f70 6c61 6e65 5f66 756e 6373 0061 7070  _plane_funcs.app
00005040: 6c65 7462 6472 6d5f 7072 696d 6172 795f  letbdrm_primary_
00005050: 706c 616e 655f 6865 6c70 6572 5f66 756e  plane_helper_fun
00005060: 6373 0061 7070 6c65 7462 6472 6d5f 6372  cs.appletbdrm_cr
00005070: 7463 5f66 756e 6373 0061 7070 6c65 7462  tc_funcs.appletb
00005080: 6472 6d5f 6372 7463 5f68 656c 7065 725f  drm_crtc_helper_
00005090: 6675 6e63 7300 6170 706c 6574 6264 726d  funcs.appletbdrm
000050a0: 5f65 6e63 6f64 6572 5f66 756e 6373 0061  _encoder_funcs.a
000050b0: 7070 6c65 7462 6472 6d5f 6d6f 6465 5f63  ppletbdrm_mode_c
000050c0: 6f6e 6669 675f 6675 6e63 7300 6170 706c  onfig_funcs.appl
000050d0: 6574 6264 726d 5f63 6f6e 6e65 6374 6f72  etbdrm_connector
000050e0: 5f66 756e 6373 0061 7070 6c65 7462 6472  _funcs.appletbdr
000050f0: 6d5f 636f 6e6e 6563 746f 725f 6865 6c70  m_connector_help
00005100: 6572 5f66 756e 6373 0061 7070 6c65 7462  er_funcs.appletb
00005110: 6472 6d5f 7072 6f62 652e 636f 6c64 0061  drm_probe.cold.a
00005120: 7070 6c65 7462 6472 6d5f 7072 696d 6172  ppletbdrm_primar
00005130: 795f 706c 616e 655f 6865 6c70 6572 5f61  y_plane_helper_a
00005140: 746f 6d69 635f 6368 6563 6b2e 636f 6c64  tomic_check.cold
00005150: 005f 5f55 4e49 5155 455f 4944 5f6c 6963  .__UNIQUE_ID_lic
00005160: 656e 7365 3536 3000 5f5f 554e 4951 5545  ense560.__UNIQUE
00005170: 5f49 445f 6465 7363 7269 7074 696f 6e35  _ID_description5
00005180: 3539 005f 5f55 4e49 5155 455f 4944 5f61  59.__UNIQUE_ID_a
00005190: 7574 686f 7235 3538 005f 5f55 4e49 5155  uthor558.__UNIQU
000051a0: 455f 4944 5f5f 5f61 6464 7265 7373 6162  E_ID___addressab
000051b0: 6c65 5f63 6c65 616e 7570 5f6d 6f64 756c  le_cleanup_modul
000051c0: 6535 3537 005f 5f55 4e49 5155 455f 4944  e557.__UNIQUE_ID
000051d0: 5f5f 5f61 6464 7265 7373 6162 6c65 5f69  ___addressable_i
000051e0: 6e69 745f 6d6f 6475 6c65 3535 3600 6170  nit_module556.ap
000051f0: 706c 6574 6264 726d 5f64 726d 5f66 6f70  pletbdrm_drm_fop
00005200: 7300 2e4c 4336 005f 5f70 6678 5f61 7070  s..LC6.__pfx_app
00005210: 6c65 7462 6472 6d5f 7368 7574 646f 776e  letbdrm_shutdown
00005220: 005f 5f70 6678 5f61 7070 6c65 7462 6472  .__pfx_appletbdr
00005230: 6d5f 6469 7363 6f6e 6e65 6374 005f 5f70  m_disconnect.__p
00005240: 6678 5f61 7070 6c65 7462 6472 6d5f 6472  fx_appletbdrm_dr
00005250: 6976 6572 5f67 656d 5f70 7269 6d65 5f69  iver_gem_prime_i
00005260: 6d70 6f72 7400 5f5f 7066 785f 6170 706c  mport.__pfx_appl
00005270: 6574 6264 726d 5f73 656e 645f 7265 7175  etbdrm_send_requ
00005280: 6573 7400 5f5f 7066 785f 6170 706c 6574  est.__pfx_applet
00005290: 6264 726d 5f72 6561 645f 7265 7370 6f6e  bdrm_read_respon
000052a0: 7365 005f 5f70 6678 5f61 7070 6c65 7462  se.__pfx_appletb
000052b0: 6472 6d5f 636f 6e6e 6563 746f 725f 6865  drm_connector_he
000052c0: 6c70 6572 5f67 6574 5f6d 6f64 6573 005f  lper_get_modes._
000052d0: 5f70 6678 5f61 7070 6c65 7462 6472 6d5f  _pfx_appletbdrm_
000052e0: 6372 7463 5f68 656c 7065 725f 6d6f 6465  crtc_helper_mode
000052f0: 5f76 616c 6964 005f 5f70 6678 5f61 7070  _valid.__pfx_app
00005300: 6c65 7462 6472 6d5f 7072 696d 6172 795f  letbdrm_primary_
00005310: 706c 616e 655f 6465 7374 726f 795f 7374  plane_destroy_st
00005320: 6174 6500 5f5f 7066 785f 6170 706c 6574  ate.__pfx_applet
00005330: 6264 726d 5f70 7269 6d61 7279 5f70 6c61  bdrm_primary_pla
00005340: 6e65 5f64 7570 6c69 6361 7465 5f73 7461  ne_duplicate_sta
00005350: 7465 005f 5f70 6678 5f61 7070 6c65 7462  te.__pfx_appletb
00005360: 6472 6d5f 7072 696d 6172 795f 706c 616e  drm_primary_plan
00005370: 655f 6865 6c70 6572 5f61 746f 6d69 635f  e_helper_atomic_
00005380: 7570 6461 7465 005f 5f70 6678 5f61 7070  update.__pfx_app
00005390: 6c65 7462 6472 6d5f 7365 6e64 5f6d 7367  letbdrm_send_msg
000053a0: 005f 5f70 6678 5f61 7070 6c65 7462 6472  .__pfx_appletbdr
000053b0: 6d5f 7072 696d 6172 795f 706c 616e 655f  m_primary_plane_
000053c0: 6865 6c70 6572 5f61 746f 6d69 635f 6469  helper_atomic_di
000053d0: 7361 626c 6500 5f5f 7066 785f 6170 706c  sable.__pfx_appl
000053e0: 6574 6264 726d 5f70 7269 6d61 7279 5f70  etbdrm_primary_p
000053f0: 6c61 6e65 5f72 6573 6574 005f 5f70 6678  lane_reset.__pfx
00005400: 5f61 7070 6c65 7462 6472 6d5f 7072 6f62  _appletbdrm_prob
00005410: 6500 5f5f 7066 785f 6170 706c 6574 6264  e.__pfx_appletbd
00005420: 726d 5f70 7269 6d61 7279 5f70 6c61 6e65  rm_primary_plane
00005430: 5f68 656c 7065 725f 6174 6f6d 6963 5f63  _helper_atomic_c
00005440: 6865 636b 005f 5f70 6678 5f61 7070 6c65  heck.__pfx_apple
00005450: 7462 6472 6d5f 7573 625f 6472 6976 6572  tbdrm_usb_driver
00005460: 5f69 6e69 7400 5f5f 7066 785f 6170 706c  _init.__pfx_appl
00005470: 6574 6264 726d 5f75 7362 5f64 7269 7665  etbdrm_usb_drive
00005480: 725f 6578 6974 0061 7070 6c65 7462 6472  r_exit.appletbdr
00005490: 6d2e 6d6f 642e 6300 5f5f 554e 4951 5545  m.mod.c.__UNIQUE
000054a0: 5f49 445f 7372 6376 6572 7369 6f6e 3437  _ID_srcversion47
000054b0: 3300 5f5f 554e 4951 5545 5f49 445f 616c  3.__UNIQUE_ID_al
000054c0: 6961 7334 3732 005f 5f55 4e49 5155 455f  ias472.__UNIQUE_
000054d0: 4944 5f64 6570 656e 6473 3437 3100 5f5f  ID_depends471.__
000054e0: 5f5f 7665 7273 696f 6e73 005f 5f55 4e49  __versions.__UNI
000054f0: 5155 455f 4944 5f6e 616d 6534 3730 0064  QUE_ID_name470.d
00005500: 726d 5f63 6f6e 6e65 6374 6f72 5f73 6574  rm_connector_set
00005510: 5f70 616e 656c 5f6f 7269 656e 7461 7469  _panel_orientati
00005520: 6f6e 0064 726d 5f6f 7065 6e00 6472 6d5f  on.drm_open.drm_
00005530: 706f 6c6c 005f 5f64 726d 5f67 656d 5f72  poll.__drm_gem_r
00005540: 6573 6574 5f73 6861 646f 775f 706c 616e  eset_shadow_plan
00005550: 6500 6472 6d5f 6765 6d5f 6662 5f65 6e64  e.drm_gem_fb_end
00005560: 5f63 7075 5f61 6363 6573 7300 6472 6d5f  _cpu_access.drm_
00005570: 6465 765f 656e 7465 7200 5f5f 6d6f 645f  dev_enter.__mod_
00005580: 6465 7669 6365 5f74 6162 6c65 5f5f 7573  device_table__us
00005590: 625f 5f61 7070 6c65 7462 6472 6d5f 7573  b__appletbdrm_us
000055a0: 625f 6964 5f74 6162 6c65 005f 5f6b 6d61  b_id_table.__kma
000055b0: 6c6c 6f63 5f6e 6f70 726f 6600 6472 6d5f  lloc_noprof.drm_
000055c0: 706c 616e 655f 656e 6162 6c65 5f66 625f  plane_enable_fb_
000055d0: 6461 6d61 6765 5f63 6c69 7073 005f 5f74  damage_clips.__t
000055e0: 6869 735f 6d6f 6475 6c65 0064 726d 5f67  his_module.drm_g
000055f0: 656d 5f73 686d 656d 5f64 756d 625f 6372  em_shmem_dumb_cr
00005600: 6561 7465 0064 726d 5f63 7274 635f 6865  eate.drm_crtc_he
00005610: 6c70 6572 5f6d 6f64 655f 7661 6c69 645f  lper_mode_valid_
00005620: 6669 7865 6400 6472 6d5f 6174 6f6d 6963  fixed.drm_atomic
00005630: 5f68 656c 7065 725f 6469 7361 626c 655f  _helper_disable_
00005640: 706c 616e 6500 6472 6d5f 6174 6f6d 6963  plane.drm_atomic
00005650: 5f68 656c 7065 725f 6461 6d61 6765 5f69  _helper_damage_i
00005660: 7465 725f 6e65 7874 0064 726d 5f61 746f  ter_next.drm_ato
00005670: 6d69 635f 6865 6c70 6572 5f73 6875 7464  mic_helper_shutd
00005680: 6f77 6e00 7573 625f 7265 6769 7374 6572  own.usb_register
00005690: 5f64 7269 7665 7200 5f5f 7374 6f70 5f61  _driver.__stop_a
000056a0: 6c6c 6f63 5f74 6167 7300 6b66 7265 6500  lloc_tags.kfree.
000056b0: 6472 6d5f 636f 6e6e 6563 746f 725f 6865  drm_connector_he
000056c0: 6c70 6572 5f67 6574 5f6d 6f64 6573 5f66  lper_get_modes_f
000056d0: 6978 6564 0064 726d 5f61 746f 6d69 635f  ixed.drm_atomic_
000056e0: 6865 6c70 6572 5f63 7274 635f 6465 7374  helper_crtc_dest
000056f0: 726f 795f 7374 6174 6500 6472 6d5f 6372  roy_state.drm_cr
00005700: 7463 5f63 6c65 616e 7570 0064 726d 5f65  tc_cleanup.drm_e
00005710: 6e63 6f64 6572 5f63 6c65 616e 7570 0064  ncoder_cleanup.d
00005720: 726d 6d5f 6d6f 6465 5f63 6f6e 6669 675f  rmm_mode_config_
00005730: 696e 6974 005f 5f66 656e 7472 795f 5f00  init.__fentry__.
00005740: 6472 6d5f 636f 6e6e 6563 746f 725f 6174  drm_connector_at
00005750: 7461 6368 5f65 6e63 6f64 6572 0075 7362  tach_encoder.usb
00005760: 5f66 696e 645f 636f 6d6d 6f6e 5f65 6e64  _find_common_end
00005770: 706f 696e 7473 005f 5f73 7461 7274 5f61  points.__start_a
00005780: 6c6c 6f63 5f74 6167 7300 6472 6d5f 6174  lloc_tags.drm_at
00005790: 6f6d 6963 5f68 656c 7065 725f 6461 6d61  omic_helper_dama
000057a0: 6765 5f69 7465 725f 696e 6974 0075 7362  ge_iter_init.usb
000057b0: 5f62 756c 6b5f 6d73 6700 5f5f 7374 6163  _bulk_msg.__stac
000057c0: 6b5f 6368 6b5f 6661 696c 0064 726d 5f61  k_chk_fail.drm_a
000057d0: 746f 6d69 635f 6865 6c70 6572 5f63 6f6d  tomic_helper_com
000057e0: 6d69 7400 6472 6d5f 6174 6f6d 6963 5f68  mit.drm_atomic_h
000057f0: 656c 7065 725f 6368 6563 6b00 6472 6d5f  elper_check.drm_
00005800: 6174 6f6d 6963 5f68 656c 7065 725f 636f  atomic_helper_co
00005810: 6e6e 6563 746f 725f 6465 7374 726f 795f  nnector_destroy_
00005820: 7374 6174 6500 6472 6d5f 6765 6d5f 6d6d  state.drm_gem_mm
00005830: 6170 0064 726d 5f69 6f63 746c 0064 726d  ap.drm_ioctl.drm
00005840: 5f70 6c61 6e65 5f63 6c65 616e 7570 0064  _plane_cleanup.d
00005850: 726d 5f64 6576 5f75 6e70 6c75 6700 6472  rm_dev_unplug.dr
00005860: 6d5f 636f 6e6e 6563 746f 725f 696e 6974  m_connector_init
00005870: 005f 5f70 6678 5f69 6e69 745f 6d6f 6475  .__pfx_init_modu
00005880: 6c65 005f 6465 765f 6572 7200 6e6f 6f70  le._dev_err.noop
00005890: 5f6c 6c73 6565 6b00 6472 6d5f 7265 6164  _llseek.drm_read
000058a0: 0064 726d 5f67 656d 5f66 625f 6372 6561  .drm_gem_fb_crea
000058b0: 7465 5f77 6974 685f 6469 7274 7900 7261  te_with_dirty.ra
000058c0: 6e64 6f6d 5f6b 6d61 6c6c 6f63 5f73 6565  ndom_kmalloc_see
000058d0: 6400 6472 6d5f 6765 6d5f 6265 6769 6e5f  d.drm_gem_begin_
000058e0: 7368 6164 6f77 5f66 625f 6163 6365 7373  shadow_fb_access
000058f0: 0064 726d 5f61 746f 6d69 635f 6865 6c70  .drm_atomic_help
00005900: 6572 5f63 6865 636b 5f70 6c61 6e65 5f73  er_check_plane_s
00005910: 7461 7465 0064 726d 5f63 7274 635f 696e  tate.drm_crtc_in
00005920: 6974 5f77 6974 685f 706c 616e 6573 0075  it_with_planes.u
00005930: 7362 5f64 6572 6567 6973 7465 7200 6472  sb_deregister.dr
00005940: 6d5f 6465 765f 6578 6974 005f 5f70 6678  m_dev_exit.__pfx
00005950: 5f63 6c65 616e 7570 5f6d 6f64 756c 6500  _cleanup_module.
00005960: 5f5f 6465 766d 5f64 726d 5f64 6576 5f61  __devm_drm_dev_a
00005970: 6c6c 6f63 0064 726d 5f67 656d 5f73 686d  lloc.drm_gem_shm
00005980: 656d 5f70 7269 6d65 5f69 6d70 6f72 745f  em_prime_import_
00005990: 7367 5f74 6162 6c65 0064 726d 5f72 6563  sg_table.drm_rec
000059a0: 745f 696e 7465 7273 6563 7400 5f5f 7838  t_intersect.__x8
000059b0: 365f 7265 7475 726e 5f74 6875 6e6b 0064  6_return_thunk.d
000059c0: 726d 5f61 746f 6d69 635f 6865 6c70 6572  rm_atomic_helper
000059d0: 5f73 6574 5f63 6f6e 6669 6700 6b6d 656d  _set_config.kmem
000059e0: 6475 705f 6e6f 7072 6f66 0064 726d 5f61  dup_noprof.drm_a
000059f0: 746f 6d69 635f 6865 6c70 6572 5f63 6f6e  tomic_helper_con
00005a00: 6e65 6374 6f72 5f64 7570 6c69 6361 7465  nector_duplicate
00005a10: 5f73 7461 7465 0064 726d 5f63 6f6e 6e65  _state.drm_conne
00005a20: 6374 6f72 5f63 6c65 616e 7570 0064 726d  ctor_cleanup.drm
00005a30: 5f75 6e69 7665 7273 616c 5f70 6c61 6e65  _universal_plane
00005a40: 5f69 6e69 7400 6472 6d5f 6174 6f6d 6963  _init.drm_atomic
00005a50: 5f68 656c 7065 725f 6372 7463 5f72 6573  _helper_crtc_res
00005a60: 6574 0064 726d 5f66 625f 6d65 6d63 7079  et.drm_fb_memcpy
00005a70: 005f 5f75 6273 616e 5f68 616e 646c 655f  .__ubsan_handle_
00005a80: 7368 6966 745f 6f75 745f 6f66 5f62 6f75  shift_out_of_bou
00005a90: 6e64 7300 6472 6d5f 6f62 6a65 6374 5f70  nds.drm_object_p
00005aa0: 726f 7065 7274 795f 7365 745f 7661 6c75  roperty_set_valu
00005ab0: 6500 6472 6d5f 656e 636f 6465 725f 696e  e.drm_encoder_in
00005ac0: 6974 0064 726d 5f67 656d 5f66 625f 6265  it.drm_gem_fb_be
00005ad0: 6769 6e5f 6370 755f 6163 6365 7373 005f  gin_cpu_access._
00005ae0: 5f6b 6d61 6c6c 6f63 5f63 6163 6865 5f6e  _kmalloc_cache_n
00005af0: 6f70 726f 6600 6b74 696d 655f 6765 7400  oprof.ktime_get.
00005b00: 6472 6d5f 6865 6c70 6572 5f70 726f 6265  drm_helper_probe
00005b10: 5f73 696e 676c 655f 636f 6e6e 6563 746f  _single_connecto
00005b20: 725f 6d6f 6465 7300 6472 6d5f 6765 6d5f  r_modes.drm_gem_
00005b30: 7072 696d 655f 696d 706f 7274 5f64 6576  prime_import_dev
00005b40: 0064 726d 5f67 656d 5f65 6e64 5f73 6861  .drm_gem_end_sha
00005b50: 646f 775f 6662 5f61 6363 6573 7300 6472  dow_fb_access.dr
00005b60: 6d5f 6174 6f6d 6963 5f68 656c 7065 725f  m_atomic_helper_
00005b70: 7061 6765 5f66 6c69 7000 6472 6d5f 6174  page_flip.drm_at
00005b80: 6f6d 6963 5f68 656c 7065 725f 636f 6e6e  omic_helper_conn
00005b90: 6563 746f 725f 7265 7365 7400 6472 6d5f  ector_reset.drm_
00005ba0: 6662 5f78 7267 6238 3838 385f 746f 5f62  fb_xrgb8888_to_b
00005bb0: 6772 3838 3800 6465 765f 6572 725f 7072  gr888.dev_err_pr
00005bc0: 6f62 6500 6472 6d5f 6d6f 6465 5f63 6f6e  obe.drm_mode_con
00005bd0: 6669 675f 7265 7365 7400 5f5f 6472 6d5f  fig_reset.__drm_
00005be0: 6765 6d5f 6475 706c 6963 6174 655f 7368  gem_duplicate_sh
00005bf0: 6164 6f77 5f70 6c61 6e65 5f73 7461 7465  adow_plane_state
00005c00: 005f 5f75 6273 616e 5f68 616e 646c 655f  .__ubsan_handle_
00005c10: 6c6f 6164 5f69 6e76 616c 6964 5f76 616c  load_invalid_val
00005c20: 7565 005f 5f64 726d 5f67 656d 5f64 6573  ue.__drm_gem_des
00005c30: 7472 6f79 5f73 6861 646f 775f 706c 616e  troy_shadow_plan
00005c40: 655f 7374 6174 6500 6472 6d5f 6174 6f6d  e_state.drm_atom
00005c50: 6963 5f68 656c 7065 725f 6372 7463 5f64  ic_helper_crtc_d
00005c60: 7570 6c69 6361 7465 5f73 7461 7465 0064  uplicate_state.d
00005c70: 726d 5f61 746f 6d69 635f 6865 6c70 6572  rm_atomic_helper
00005c80: 5f75 7064 6174 655f 706c 616e 6500 6472  _update_plane.dr
00005c90: 6d5f 636f 6d70 6174 5f69 6f63 746c 0064  m_compat_ioctl.d
00005ca0: 726d 5f64 6576 5f72 6567 6973 7465 7200  rm_dev_register.
00005cb0: 6b6d 616c 6c6f 635f 6361 6368 6573 0064  kmalloc_caches.d
00005cc0: 726d 5f72 656c 6561 7365 0000 0000 0000  rm_release......
00005cd0: 1100 0000 0000 0000 0400 0000 7400 0000  ............t...
00005ce0: fcff ffff ffff ffff 2500 0000 0000 0000  ........%.......
00005cf0: 0400 0000 6a00 0000 fcff ffff ffff ffff  ....j...........
00005d00: 2d00 0000 0000 0000 0400 0000 9300 0000  -...............
00005d10: fcff ffff ffff ffff 5100 0000 0000 0000  ........Q.......
00005d20: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00005d30: 6900 0000 0000 0000 0400 0000 8200 0000  i...............
00005d40: fcff ffff ffff ffff 7100 0000 0000 0000  ........q.......
00005d50: 0400 0000 6a00 0000 fcff ffff ffff ffff  ....j...........
00005d60: 7d00 0000 0000 0000 0400 0000 9300 0000  }...............
00005d70: fcff ffff ffff ffff a100 0000 0000 0000  ................
00005d80: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00005d90: b300 0000 0000 0000 0400 0000 a200 0000  ................
00005da0: fcff ffff ffff ffff bf00 0000 0000 0000  ................
00005db0: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00005dc0: d100 0000 0000 0000 0400 0000 9300 0000  ................
00005dd0: fcff ffff ffff ffff f100 0000 0000 0000  ................
00005de0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00005df0: 5b01 0000 0000 0000 0400 0000 7a00 0000  [...........z...
00005e00: fcff ffff ffff ffff 9f01 0000 0000 0000  ................
00005e10: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00005e20: b201 0000 0000 0000 0b00 0000 0900 0000  ................
00005e30: 0000 0000 0000 0000 ba01 0000 0000 0000  ................
00005e40: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00005e50: cf01 0000 0000 0000 0b00 0000 0900 0000  ................
00005e60: 3000 0000 0000 0000 dd01 0000 0000 0000  0...............
00005e70: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00005e80: e401 0000 0000 0000 0400 0000 7b00 0000  ............{...
00005e90: fcff ffff ffff ffff 0102 0000 0000 0000  ................
00005ea0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00005eb0: 8302 0000 0000 0000 0400 0000 7a00 0000  ............z...
00005ec0: fcff ffff ffff ffff ad02 0000 0000 0000  ................
00005ed0: 0b00 0000 0900 0000 a800 0000 0000 0000  ................
00005ee0: b502 0000 0000 0000 0400 0000 8500 0000  ................
00005ef0: fcff ffff ffff ffff ee02 0000 0000 0000  ................
00005f00: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00005f10: 0b03 0000 0000 0000 0b00 0000 0900 0000  ................
00005f20: 7800 0000 0000 0000 1603 0000 0000 0000  x...............
00005f30: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00005f40: 4803 0000 0000 0000 0b00 0000 0900 0000  H...............
00005f50: e000 0000 0000 0000 5003 0000 0000 0000  ........P.......
00005f60: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00005f70: 6e03 0000 0000 0000 0b00 0000 0900 0000  n...............
00005f80: 3000 0000 0000 0000 7303 0000 0000 0000  0.......s.......
00005f90: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00005fa0: 7d03 0000 0000 0000 0400 0000 7b00 0000  }...........{...
00005fb0: fcff ffff ffff ffff a103 0000 0000 0000  ................
00005fc0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00005fd0: b403 0000 0000 0000 0400 0000 6f00 0000  ............o...
00005fe0: fcff ffff ffff ffff be03 0000 0000 0000  ................
00005ff0: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006000: e103 0000 0000 0000 0400 0000 7400 0000  ............t...
00006010: fcff ffff ffff ffff f403 0000 0000 0000  ................
00006020: 0400 0000 6700 0000 fcff ffff ffff ffff  ....g...........
00006030: 0004 0000 0000 0000 0400 0000 9300 0000  ................
00006040: fcff ffff ffff ffff 2104 0000 0000 0000  ........!.......
00006050: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00006060: 3504 0000 0000 0000 0400 0000 6e00 0000  5...........n...
00006070: fcff ffff ffff ffff 4104 0000 0000 0000  ........A.......
00006080: 0400 0000 6e00 0000 fcff ffff ffff ffff  ....n...........
00006090: 4904 0000 0000 0000 0400 0000 ab00 0000  I...............
000060a0: fcff ffff ffff ffff 5104 0000 0000 0000  ........Q.......
000060b0: 0400 0000 6e00 0000 fcff ffff ffff ffff  ....n...........
000060c0: 5f04 0000 0000 0000 0400 0000 9300 0000  _...............
000060d0: fcff ffff ffff ffff 8104 0000 0000 0000  ................
000060e0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
000060f0: a904 0000 0000 0000 0400 0000 9500 0000  ................
00006100: fcff ffff ffff ffff d204 0000 0000 0000  ................
00006110: 0400 0000 a900 0000 fcff ffff ffff ffff  ................
00006120: e404 0000 0000 0000 0400 0000 9300 0000  ................
00006130: fcff ffff ffff ffff f804 0000 0000 0000  ................
00006140: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006150: 1105 0000 0000 0000 0400 0000 7400 0000  ............t...
00006160: fcff ffff ffff ffff 6d05 0000 0000 0000  ........m.......
00006170: 0400 0000 6100 0000 fcff ffff ffff ffff  ....a...........
00006180: ab05 0000 0000 0000 0400 0000 9300 0000  ................
00006190: fcff ffff ffff ffff 0806 0000 0000 0000  ................
000061a0: 0400 0000 a000 0000 fcff ffff ffff ffff  ................
000061b0: 4e06 0000 0000 0000 0400 0000 9e00 0000  N...............
000061c0: fcff ffff ffff ffff 6e06 0000 0000 0000  ........n.......
000061d0: 0b00 0000 0900 0000 3001 0000 0000 0000  ........0.......
000061e0: 7306 0000 0000 0000 0400 0000 8500 0000  s...............
000061f0: fcff ffff ffff ffff 8006 0000 0000 0000  ................
00006200: 0400 0000 6000 0000 fcff ffff ffff ffff  ....`...........
00006210: 8906 0000 0000 0000 0400 0000 8e00 0000  ................
00006220: fcff ffff ffff ffff d506 0000 0000 0000  ................
00006230: 0400 0000 7900 0000 fcff ffff ffff ffff  ....y...........
00006240: e706 0000 0000 0000 0400 0000 6900 0000  ............i...
00006250: fcff ffff ffff ffff 4207 0000 0000 0000  ........B.......
00006260: 0400 0000 9200 0000 fcff ffff ffff ffff  ................
00006270: b907 0000 0000 0000 0400 0000 9a00 0000  ................
00006280: fcff ffff ffff ffff de07 0000 0000 0000  ................
00006290: 0400 0000 a600 0000 fcff ffff ffff ffff  ................
000062a0: 8608 0000 0000 0000 0b00 0000 0900 0000  ................
000062b0: 7001 0000 0000 0000 8b08 0000 0000 0000  p...............
000062c0: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
000062d0: 9508 0000 0000 0000 0400 0000 7b00 0000  ............{...
000062e0: fcff ffff ffff ffff b108 0000 0000 0000  ................
000062f0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00006300: d408 0000 0000 0000 0200 0000 8900 0000  ................
00006310: fcff ffff ffff ffff 0009 0000 0000 0000  ................
00006320: 0b00 0000 b000 0000 2800 0000 0000 0000  ........(.......
00006330: 0509 0000 0000 0000 0400 0000 9f00 0000  ................
00006340: fcff ffff ffff ffff 4009 0000 0000 0000  ........@.......
00006350: 0400 0000 6e00 0000 fcff ffff ffff ffff  ....n...........
00006360: 5409 0000 0000 0000 0400 0000 9300 0000  T...............
00006370: fcff ffff ffff ffff 7109 0000 0000 0000  ........q.......
00006380: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00006390: 9f09 0000 0000 0000 0400 0000 6100 0000  ............a...
000063a0: fcff ffff ffff ffff b909 0000 0000 0000  ................
000063b0: 0400 0000 8e00 0000 fcff ffff ffff ffff  ................
000063c0: d809 0000 0000 0000 0400 0000 9300 0000  ................
000063d0: fcff ffff ffff ffff dd09 0000 0000 0000  ................
000063e0: 0400 0000 7b00 0000 fcff ffff ffff ffff  ....{...........
000063f0: 010a 0000 0000 0000 0400 0000 7400 0000  ............t...
00006400: fcff ffff ffff ffff 1e0a 0000 0000 0000  ................
00006410: 0200 0000 8900 0000 fcff ffff ffff ffff  ................
00006420: 530a 0000 0000 0000 0b00 0000 b000 0000  S...............
00006430: 4800 0000 0000 0000 580a 0000 0000 0000  H.......X.......
00006440: 0400 0000 9f00 0000 fcff ffff ffff ffff  ................
00006450: 680a 0000 0000 0000 0400 0000 5f00 0000  h..........._...
00006460: fcff ffff ffff ffff 7a0a 0000 0000 0000  ........z.......
00006470: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006480: a10a 0000 0000 0000 0400 0000 7400 0000  ............t...
00006490: fcff ffff ffff ffff ee0a 0000 0000 0000  ................
000064a0: 0400 0000 7700 0000 fcff ffff ffff ffff  ....w...........
000064b0: 070b 0000 0000 0000 0b00 0000 0b00 0000  ................
000064c0: 4000 0000 0000 0000 0f0b 0000 0000 0000  @...............
000064d0: 0400 0000 9000 0000 fcff ffff ffff ffff  ................
000064e0: 620b 0000 0000 0000 0200 0000 8900 0000  b...............
000064f0: fcff ffff ffff ffff 880b 0000 0000 0000  ................
00006500: 0b00 0000 b000 0000 0800 0000 0000 0000  ................
00006510: 8d0b 0000 0000 0000 0400 0000 9f00 0000  ................
00006520: fcff ffff ffff ffff b10b 0000 0000 0000  ................
00006530: 0b00 0000 0900 0000 5802 0000 0000 0000  ........X.......
00006540: bb0b 0000 0000 0000 0400 0000 a700 0000  ................
00006550: fcff ffff ffff ffff f20b 0000 0000 0000  ................
00006560: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006570: 430c 0000 0000 0000 0b00 0000 0900 0000  C...............
00006580: e001 0000 0000 0000 480c 0000 0000 0000  ........H.......
00006590: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
000065a0: 500c 0000 0000 0000 0400 0000 6e00 0000  P...........n...
000065b0: fcff ffff ffff ffff 610c 0000 0000 0000  ........a.......
000065c0: 0b00 0000 0900 0000 c001 0000 0000 0000  ................
000065d0: 6b0c 0000 0000 0000 0400 0000 a700 0000  k...............
000065e0: fcff ffff ffff ffff 7b0c 0000 0000 0000  ........{.......
000065f0: 0400 0000 6e00 0000 fcff ffff ffff ffff  ....n...........
00006600: 960c 0000 0000 0000 0400 0000 6e00 0000  ............n...
00006610: fcff ffff ffff ffff b60c 0000 0000 0000  ................
00006620: 0400 0000 7300 0000 fcff ffff ffff ffff  ....s...........
00006630: de0c 0000 0000 0000 0b00 0000 0b00 0000  ................
00006640: c005 0000 0000 0000 e70c 0000 0000 0000  ................
00006650: 0b00 0000 0b00 0000 e004 0000 0000 0000  ................
00006660: ec0c 0000 0000 0000 0400 0000 9800 0000  ................
00006670: fcff ffff ffff ffff 030d 0000 0000 0000  ................
00006680: 0b00 0000 0b00 0000 6005 0000 0000 0000  ........`.......
00006690: 0b0d 0000 0000 0000 0400 0000 6400 0000  ............d...
000066a0: fcff ffff ffff ffff 210d 0000 0000 0000  ........!.......
000066b0: 0b00 0000 0b00 0000 8002 0000 0000 0000  ................
000066c0: 290d 0000 0000 0000 0400 0000 8c00 0000  )...............
000066d0: fcff ffff ffff ffff 4e0d 0000 0000 0000  ........N.......
000066e0: 0b00 0000 0b00 0000 4003 0000 0000 0000  ........@.......
000066f0: 550d 0000 0000 0000 0b00 0000 0b00 0000  U...............
00006700: 4002 0000 0000 0000 5d0d 0000 0000 0000  @.......].......
00006710: 0400 0000 9d00 0000 fcff ffff ffff ffff  ................
00006720: 750d 0000 0000 0000 0200 0000 0600 0000  u...............
00006730: fcff ffff ffff ffff cd0d 0000 0000 0000  ................
00006740: 0b00 0000 0b00 0000 a004 0000 0000 0000  ................
00006750: b00e 0000 0000 0000 0b00 0000 0b00 0000  ................
00006760: 2004 0000 0000 0000 b50e 0000 0000 0000   ...............
00006770: 0400 0000 8300 0000 fcff ffff ffff ffff  ................
00006780: c80e 0000 0000 0000 0b00 0000 0b00 0000  ................
00006790: c003 0000 0000 0000 d60e 0000 0000 0000  ................
000067a0: 0400 0000 5c00 0000 fcff ffff ffff ffff  ....\...........
000067b0: fe0e 0000 0000 0000 0400 0000 9c00 0000  ................
000067c0: fcff ffff ffff ffff 120f 0000 0000 0000  ................
000067d0: 0400 0000 7600 0000 fcff ffff ffff ffff  ....v...........
000067e0: 220f 0000 0000 0000 0400 0000 a800 0000  "...............
000067f0: fcff ffff ffff ffff 2b0f 0000 0000 0000  ........+.......
00006800: 0b00 0000 0700 0000 1800 0000 0000 0000  ................
00006810: 350f 0000 0000 0000 0400 0000 a700 0000  5...............
00006820: fcff ffff ffff ffff 410f 0000 0000 0000  ........A.......
00006830: 0b00 0000 0900 0000 8002 0000 0000 0000  ................
00006840: 4b0f 0000 0000 0000 0400 0000 a700 0000  K...............
00006850: fcff ffff ffff ffff 590f 0000 0000 0000  ........Y.......
00006860: 0400 0000 af00 0000 fcff ffff ffff ffff  ................
00006870: 790f 0000 0000 0000 0b00 0000 0700 0000  y...............
00006880: 6f00 0000 0000 0000 830f 0000 0000 0000  o...............
00006890: 0400 0000 a700 0000 fcff ffff ffff ffff  ................
000068a0: 8f0f 0000 0000 0000 0b00 0000 0700 0000  ................
000068b0: 5200 0000 0000 0000 990f 0000 0000 0000  R...............
000068c0: 0400 0000 a700 0000 fcff ffff ffff ffff  ................
000068d0: a50f 0000 0000 0000 0b00 0000 0900 0000  ................
000068e0: b002 0000 0000 0000 af0f 0000 0000 0000  ................
000068f0: 0400 0000 a700 0000 fcff ffff ffff ffff  ................
00006900: b80f 0000 0000 0000 0b00 0000 0900 0000  ................
00006910: a803 0000 0000 0000 c20f 0000 0000 0000  ................
00006920: 0400 0000 a700 0000 fcff ffff ffff ffff  ................
00006930: de0f 0000 0000 0000 0b00 0000 0900 0000  ................
00006940: 2002 0000 0000 0000 e30f 0000 0000 0000   ...............
00006950: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00006960: eb0f 0000 0000 0000 0400 0000 6e00 0000  ............n...
00006970: fcff ffff ffff ffff f70f 0000 0000 0000  ................
00006980: 0b00 0000 0700 0000 3400 0000 0000 0000  ........4.......
00006990: 0110 0000 0000 0000 0400 0000 a700 0000  ................
000069a0: fcff ffff ffff ffff 0d10 0000 0000 0000  ................
000069b0: 0b00 0000 0900 0000 e002 0000 0000 0000  ................
000069c0: 1710 0000 0000 0000 0400 0000 a700 0000  ................
000069d0: fcff ffff ffff ffff 2310 0000 0000 0000  ........#.......
000069e0: 0b00 0000 0900 0000 0803 0000 0000 0000  ................
000069f0: 2d10 0000 0000 0000 0400 0000 a700 0000  -...............
00006a00: fcff ffff ffff ffff 3910 0000 0000 0000  ........9.......
00006a10: 0b00 0000 0900 0000 2803 0000 0000 0000  ........(.......
00006a20: 4310 0000 0000 0000 0400 0000 a700 0000  C...............
00006a30: fcff ffff ffff ffff 4f10 0000 0000 0000  ........O.......
00006a40: 0b00 0000 0900 0000 5003 0000 0000 0000  ........P.......
00006a50: 5910 0000 0000 0000 0400 0000 a700 0000  Y...............
00006a60: fcff ffff ffff ffff 6510 0000 0000 0000  ........e.......
00006a70: 0b00 0000 0900 0000 7803 0000 0000 0000  ........x.......
00006a80: 6f10 0000 0000 0000 0400 0000 a700 0000  o...............
00006a90: fcff ffff ffff ffff 7910 0000 0000 0000  ........y.......
00006aa0: 0400 0000 7b00 0000 fcff ffff ffff ffff  ....{...........
00006ab0: a110 0000 0000 0000 0400 0000 7400 0000  ............t...
00006ac0: fcff ffff ffff ffff 5911 0000 0000 0000  ........Y.......
00006ad0: 0400 0000 8b00 0000 fcff ffff ffff ffff  ................
00006ae0: 7211 0000 0000 0000 0200 0000 0600 0000  r...............
00006af0: 1a00 0000 0000 0000 ae11 0000 0000 0000  ................
00006b00: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006b10: c011 0000 0000 0000 0400 0000 7900 0000  ............y...
00006b20: fcff ffff ffff ffff e911 0000 0000 0000  ................
00006b30: 0400 0000 6900 0000 fcff ffff ffff ffff  ....i...........
00006b40: 0a12 0000 0000 0000 0400 0000 6300 0000  ............c...
00006b50: fcff ffff ffff ffff 2112 0000 0000 0000  ........!.......
00006b60: 0200 0000 8900 0000 fcff ffff ffff ffff  ................
00006b70: 5612 0000 0000 0000 0b00 0000 b000 0000  V...............
00006b80: 3000 0000 0000 0000 5b12 0000 0000 0000  0.......[.......
00006b90: 0400 0000 9f00 0000 fcff ffff ffff ffff  ................
00006ba0: 7f12 0000 0000 0000 0400 0000 7b00 0000  ............{...
00006bb0: fcff ffff ffff ffff 1100 0000 0000 0000  ................
00006bc0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00006bd0: 1900 0000 0000 0000 0b00 0000 0700 0000  ................
00006be0: 0000 0000 0000 0000 2000 0000 0000 0000  ........ .......
00006bf0: 0b00 0000 6500 0000 0000 0000 0000 0000  ....e...........
00006c00: 2700 0000 0000 0000 0b00 0000 1400 0000  '...............
00006c10: e000 0000 0000 0000 2f00 0000 0000 0000  ......../.......
00006c20: 0400 0000 6b00 0000 fcff ffff ffff ffff  ....k...........
00006c30: 3b00 0000 0000 0000 0400 0000 9300 0000  ;...............
00006c40: fcff ffff ffff ffff 1400 0000 0000 0000  ................
00006c50: 0b00 0000 1400 0000 e000 0000 0000 0000  ................
00006c60: 1c00 0000 0000 0000 0400 0000 8d00 0000  ................
00006c70: fcff ffff ffff ffff 2400 0000 0000 0000  ........$.......
00006c80: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006c90: 0a00 0000 0000 0000 0b00 0000 1400 0000  ................
00006ca0: 0002 0000 0000 0000 1200 0000 0000 0000  ................
00006cb0: 0400 0000 9b00 0000 fcff ffff ffff ffff  ................
00006cc0: 1a00 0000 0000 0000 0200 0000 0300 0000  ................
00006cd0: 750d 0000 0000 0000 2500 0000 0000 0000  u.......%.......
00006ce0: 0b00 0000 1400 0000 a000 0000 0000 0000  ................
00006cf0: 2a00 0000 0000 0000 0400 0000 aa00 0000  *...............
00006d00: fcff ffff ffff ffff 2f00 0000 0000 0000  ......../.......
00006d10: 0200 0000 0300 0000 7211 0000 0000 0000  ........r.......
00006d20: 0000 0000 0000 0000 0100 0000 0400 0000  ................
00006d30: 1000 0000 0000 0000 0800 0000 0000 0000  ................
00006d40: 0100 0000 0300 0000 1000 0000 0000 0000  ................
00006d50: 1000 0000 0000 0000 0100 0000 0300 0000  ................
00006d60: 5000 0000 0000 0000 1800 0000 0000 0000  P...............
00006d70: 0100 0000 0300 0000 a000 0000 0000 0000  ................
00006d80: 2000 0000 0000 0000 0100 0000 0300 0000   ...............
00006d90: f000 0000 0000 0000 2800 0000 0000 0000  ........(.......
00006da0: 0100 0000 0300 0000 0002 0000 0000 0000  ................
00006db0: 3000 0000 0000 0000 0100 0000 0300 0000  0...............
00006dc0: a003 0000 0000 0000 3800 0000 0000 0000  ........8.......
00006dd0: 0100 0000 0300 0000 e003 0000 0000 0000  ................
00006de0: 4000 0000 0000 0000 0100 0000 0300 0000  @...............
00006df0: 2004 0000 0000 0000 4800 0000 0000 0000   .......H.......
00006e00: 0100 0000 0300 0000 8004 0000 0000 0000  ................
00006e10: 5000 0000 0000 0000 0100 0000 0300 0000  P...............
00006e20: 1005 0000 0000 0000 5800 0000 0000 0000  ........X.......
00006e30: 0100 0000 0300 0000 b008 0000 0000 0000  ................
00006e40: 6000 0000 0000 0000 0100 0000 0300 0000  `...............
00006e50: 7009 0000 0000 0000 6800 0000 0000 0000  p.......h.......
00006e60: 0100 0000 0300 0000 000a 0000 0000 0000  ................
00006e70: 7000 0000 0000 0000 0100 0000 0300 0000  p...............
00006e80: a00a 0000 0000 0000 7800 0000 0000 0000  ........x.......
00006e90: 0100 0000 0300 0000 a010 0000 0000 0000  ................
00006ea0: 9800 0000 0000 0000 0100 0000 0300 0000  ................
00006eb0: a000 0000 0000 0000 a000 0000 0000 0000  ................
00006ec0: 0100 0000 9100 0000 0000 0000 0000 0000  ................
00006ed0: a800 0000 0000 0000 0100 0000 6600 0000  ............f...
00006ee0: 0000 0000 0000 0000 d800 0000 0000 0000  ................
00006ef0: 0100 0000 0700 0000 0000 0000 0000 0000  ................
00006f00: e000 0000 0000 0000 0100 0000 0700 0000  ................
00006f10: 8800 0000 0000 0000 0801 0000 0000 0000  ................
00006f20: 0100 0000 0b00 0000 2001 0000 0000 0000  ........ .......
00006f30: 2001 0000 0000 0000 0100 0000 6500 0000   ...........e...
00006f40: 0000 0000 0000 0000 3001 0000 0000 0000  ........0.......
00006f50: 0100 0000 8600 0000 0000 0000 0000 0000  ................
00006f60: 3801 0000 0000 0000 0100 0000 8700 0000  8...............
00006f70: 0000 0000 0000 0000 6801 0000 0000 0000  ........h.......
00006f80: 0100 0000 5e00 0000 0000 0000 0000 0000  ....^...........
00006f90: 7001 0000 0000 0000 0100 0000 8000 0000  p...............
00006fa0: 0000 0000 0000 0000 7801 0000 0000 0000  ........x.......
00006fb0: 0100 0000 ae00 0000 0000 0000 0000 0000  ................
00006fc0: 8001 0000 0000 0000 0100 0000 7f00 0000  ................
00006fd0: 0000 0000 0000 0000 8801 0000 0000 0000  ................
00006fe0: 0100 0000 5d00 0000 0000 0000 0000 0000  ....]...........
00006ff0: 9801 0000 0000 0000 0100 0000 b100 0000  ................
00007000: 0000 0000 0000 0000 4802 0000 0000 0000  ........H.......
00007010: 0100 0000 7200 0000 0000 0000 0000 0000  ....r...........
00007020: 8002 0000 0000 0000 0100 0000 9900 0000  ................
00007030: 0000 0000 0000 0000 a802 0000 0000 0000  ................
00007040: 0100 0000 7100 0000 0000 0000 0000 0000  ....q...........
00007050: b002 0000 0000 0000 0100 0000 9400 0000  ................
00007060: 0000 0000 0000 0000 b802 0000 0000 0000  ................
00007070: 0100 0000 a400 0000 0000 0000 0000 0000  ................
00007080: d002 0000 0000 0000 0100 0000 ac00 0000  ................
00007090: 0000 0000 0000 0000 d802 0000 0000 0000  ................
000070a0: 0100 0000 7000 0000 0000 0000 0000 0000  ....p...........
000070b0: 5803 0000 0000 0000 0100 0000 0300 0000  X...............
000070c0: e003 0000 0000 0000 c003 0000 0000 0000  ................
000070d0: 0100 0000 0300 0000 a003 0000 0000 0000  ................
000070e0: 2804 0000 0000 0000 0100 0000 a500 0000  (...............
000070f0: 0000 0000 0000 0000 4004 0000 0000 0000  ........@.......
00007100: 0100 0000 a100 0000 0000 0000 0000 0000  ................
00007110: 6004 0000 0000 0000 0100 0000 9700 0000  `...............
00007120: 0000 0000 0000 0000 6804 0000 0000 0000  ........h.......
00007130: 0100 0000 9600 0000 0000 0000 0000 0000  ................
00007140: 7004 0000 0000 0000 0100 0000 7e00 0000  p...........~...
00007150: 0000 0000 0000 0000 a004 0000 0000 0000  ................
00007160: 0100 0000 8800 0000 0000 0000 0000 0000  ................
00007170: b804 0000 0000 0000 0100 0000 7d00 0000  ............}...
00007180: 0000 0000 0000 0000 c004 0000 0000 0000  ................
00007190: 0100 0000 7c00 0000 0000 0000 0000 0000  ....|...........
000071a0: e004 0000 0000 0000 0100 0000 ad00 0000  ................
000071b0: 0000 0000 0000 0000 e804 0000 0000 0000  ................
000071c0: 0100 0000 6800 0000 0000 0000 0000 0000  ....h...........
000071d0: f004 0000 0000 0000 0100 0000 8100 0000  ................
000071e0: 0000 0000 0000 0000 f804 0000 0000 0000  ................
000071f0: 0100 0000 0300 0000 000a 0000 0000 0000  ................
00007200: 0805 0000 0000 0000 0100 0000 0300 0000  ................
00007210: 8004 0000 0000 0000 1005 0000 0000 0000  ................
00007220: 0100 0000 0300 0000 2004 0000 0000 0000  ........ .......
00007230: 7005 0000 0000 0000 0100 0000 8a00 0000  p...............
00007240: 0000 0000 0000 0000 7805 0000 0000 0000  ........x.......
00007250: 0100 0000 a300 0000 0000 0000 0000 0000  ................
00007260: 8005 0000 0000 0000 0100 0000 0300 0000  ................
00007270: a010 0000 0000 0000 8805 0000 0000 0000  ................
00007280: 0100 0000 0300 0000 1005 0000 0000 0000  ................
00007290: 9805 0000 0000 0000 0100 0000 0300 0000  ................
000072a0: 7009 0000 0000 0000 0000 0000 0000 0000  p...............
000072b0: 0200 0000 0300 0000 2c00 0000 0000 0000  ........,.......
000072c0: 0400 0000 0000 0000 0200 0000 0300 0000  ................
000072d0: 7c00 0000 0000 0000 0800 0000 0000 0000  |...............
000072e0: 0200 0000 0300 0000 be00 0000 0000 0000  ................
000072f0: 0c00 0000 0000 0000 0200 0000 0300 0000  ................
00007300: d000 0000 0000 0000 1000 0000 0000 0000  ................
00007310: 0200 0000 0300 0000 9e01 0000 0000 0000  ................
00007320: 1400 0000 0000 0000 0200 0000 0300 0000  ................
00007330: ed02 0000 0000 0000 1800 0000 0000 0000  ................
00007340: 0200 0000 0300 0000 bd03 0000 0000 0000  ................
00007350: 1c00 0000 0000 0000 0200 0000 0300 0000  ................
00007360: ff03 0000 0000 0000 2000 0000 0000 0000  ........ .......
00007370: 0200 0000 0300 0000 5e04 0000 0000 0000  ........^.......
00007380: 2400 0000 0000 0000 0200 0000 0300 0000  $...............
00007390: e304 0000 0000 0000 2800 0000 0000 0000  ........(.......
000073a0: 0200 0000 0300 0000 f704 0000 0000 0000  ................
000073b0: 2c00 0000 0000 0000 0200 0000 0300 0000  ,...............
000073c0: aa05 0000 0000 0000 3000 0000 0000 0000  ........0.......
000073d0: 0200 0000 0300 0000 5309 0000 0000 0000  ........S.......
000073e0: 3400 0000 0000 0000 0200 0000 0300 0000  4...............
000073f0: d709 0000 0000 0000 3800 0000 0000 0000  ........8.......
00007400: 0200 0000 0300 0000 790a 0000 0000 0000  ........y.......
00007410: 3c00 0000 0000 0000 0200 0000 0300 0000  <...............
00007420: f10b 0000 0000 0000 4000 0000 0000 0000  ........@.......
00007430: 0200 0000 0300 0000 ad11 0000 0000 0000  ................
00007440: 4400 0000 0000 0000 0200 0000 0400 0000  D...............
00007450: 3a00 0000 0000 0000 4800 0000 0000 0000  :.......H.......
00007460: 0200 0000 0500 0000 2300 0000 0000 0000  ........#.......
00007470: 0000 0000 0000 0000 0200 0000 0300 0000  ................
00007480: 1000 0000 0000 0000 0400 0000 0000 0000  ................
00007490: 0200 0000 0300 0000 2400 0000 0000 0000  ........$.......
000074a0: 0800 0000 0000 0000 0200 0000 0300 0000  ................
000074b0: 5000 0000 0000 0000 0c00 0000 0000 0000  P...............
000074c0: 0200 0000 0300 0000 6800 0000 0000 0000  ........h.......
000074d0: 1000 0000 0000 0000 0200 0000 0300 0000  ................
000074e0: 7000 0000 0000 0000 1400 0000 0000 0000  p...............
000074f0: 0200 0000 0300 0000 a000 0000 0000 0000  ................
00007500: 1800 0000 0000 0000 0200 0000 0300 0000  ................
00007510: b200 0000 0000 0000 1c00 0000 0000 0000  ................
00007520: 0200 0000 0300 0000 f000 0000 0000 0000  ................
00007530: 2000 0000 0000 0000 0200 0000 0300 0000   ...............
00007540: 5a01 0000 0000 0000 2400 0000 0000 0000  Z.......$.......
00007550: 0200 0000 0300 0000 b901 0000 0000 0000  ................
00007560: 2800 0000 0000 0000 0200 0000 0300 0000  (...............
00007570: dc01 0000 0000 0000 2c00 0000 0000 0000  ........,.......
00007580: 0200 0000 0300 0000 e301 0000 0000 0000  ................
00007590: 3000 0000 0000 0000 0200 0000 0300 0000  0...............
000075a0: 0002 0000 0000 0000 3400 0000 0000 0000  ........4.......
000075b0: 0200 0000 0300 0000 8202 0000 0000 0000  ................
000075c0: 3800 0000 0000 0000 0200 0000 0300 0000  8...............
000075d0: b402 0000 0000 0000 3c00 0000 0000 0000  ........<.......
000075e0: 0200 0000 0300 0000 1503 0000 0000 0000  ................
000075f0: 4000 0000 0000 0000 0200 0000 0300 0000  @...............
00007600: 4f03 0000 0000 0000 4400 0000 0000 0000  O.......D.......
00007610: 0200 0000 0300 0000 7203 0000 0000 0000  ........r.......
00007620: 4800 0000 0000 0000 0200 0000 0300 0000  H...............
00007630: 7c03 0000 0000 0000 4c00 0000 0000 0000  |.......L.......
00007640: 0200 0000 0300 0000 a003 0000 0000 0000  ................
00007650: 5000 0000 0000 0000 0200 0000 0300 0000  P...............
00007660: b303 0000 0000 0000 5400 0000 0000 0000  ........T.......
00007670: 0200 0000 0300 0000 e003 0000 0000 0000  ................
00007680: 5800 0000 0000 0000 0200 0000 0300 0000  X...............
00007690: f303 0000 0000 0000 5c00 0000 0000 0000  ........\.......
000076a0: 0200 0000 0300 0000 2004 0000 0000 0000  ........ .......
000076b0: 6000 0000 0000 0000 0200 0000 0300 0000  `...............
000076c0: 3404 0000 0000 0000 6400 0000 0000 0000  4.......d.......
000076d0: 0200 0000 0300 0000 4004 0000 0000 0000  ........@.......
000076e0: 6800 0000 0000 0000 0200 0000 0300 0000  h...............
000076f0: 4804 0000 0000 0000 6c00 0000 0000 0000  H.......l.......
00007700: 0200 0000 0300 0000 5004 0000 0000 0000  ........P.......
00007710: 7000 0000 0000 0000 0200 0000 0300 0000  p...............
00007720: 8004 0000 0000 0000 7400 0000 0000 0000  ........t.......
00007730: 0200 0000 0300 0000 a804 0000 0000 0000  ................
00007740: 7800 0000 0000 0000 0200 0000 0300 0000  x...............
00007750: d104 0000 0000 0000 7c00 0000 0000 0000  ........|.......
00007760: 0200 0000 0300 0000 1005 0000 0000 0000  ................
00007770: 8000 0000 0000 0000 0200 0000 0300 0000  ................
00007780: 6c05 0000 0000 0000 8400 0000 0000 0000  l...............
00007790: 0200 0000 0300 0000 0706 0000 0000 0000  ................
000077a0: 8800 0000 0000 0000 0200 0000 0300 0000  ................
000077b0: 4d06 0000 0000 0000 8c00 0000 0000 0000  M...............
000077c0: 0200 0000 0300 0000 7206 0000 0000 0000  ........r.......
000077d0: 9000 0000 0000 0000 0200 0000 0300 0000  ................
000077e0: 7f06 0000 0000 0000 9400 0000 0000 0000  ................
000077f0: 0200 0000 0300 0000 8806 0000 0000 0000  ................
00007800: 9800 0000 0000 0000 0200 0000 0300 0000  ................
00007810: d406 0000 0000 0000 9c00 0000 0000 0000  ................
00007820: 0200 0000 0300 0000 e606 0000 0000 0000  ................
00007830: a000 0000 0000 0000 0200 0000 0300 0000  ................
00007840: 4107 0000 0000 0000 a400 0000 0000 0000  A...............
00007850: 0200 0000 0300 0000 b807 0000 0000 0000  ................
00007860: a800 0000 0000 0000 0200 0000 0300 0000  ................
00007870: dd07 0000 0000 0000 ac00 0000 0000 0000  ................
00007880: 0200 0000 0300 0000 2d08 0000 0000 0000  ........-.......
00007890: b000 0000 0000 0000 0200 0000 0300 0000  ................
000078a0: 4f08 0000 0000 0000 b400 0000 0000 0000  O...............
000078b0: 0200 0000 0300 0000 8a08 0000 0000 0000  ................
000078c0: b800 0000 0000 0000 0200 0000 0300 0000  ................
000078d0: 9408 0000 0000 0000 bc00 0000 0000 0000  ................
000078e0: 0200 0000 0300 0000 b008 0000 0000 0000  ................
000078f0: c000 0000 0000 0000 0200 0000 0300 0000  ................
00007900: 0409 0000 0000 0000 c400 0000 0000 0000  ................
00007910: 0200 0000 0300 0000 3409 0000 0000 0000  ........4.......
00007920: c800 0000 0000 0000 0200 0000 0300 0000  ................
00007930: 3f09 0000 0000 0000 cc00 0000 0000 0000  ?...............
00007940: 0200 0000 0300 0000 7009 0000 0000 0000  ........p.......
00007950: d000 0000 0000 0000 0200 0000 0300 0000  ................
00007960: 9e09 0000 0000 0000 d400 0000 0000 0000  ................
00007970: 0200 0000 0300 0000 b009 0000 0000 0000  ................
00007980: d800 0000 0000 0000 0200 0000 0300 0000  ................
00007990: b809 0000 0000 0000 dc00 0000 0000 0000  ................
000079a0: 0200 0000 0300 0000 dc09 0000 0000 0000  ................
000079b0: e000 0000 0000 0000 0200 0000 0300 0000  ................
000079c0: 000a 0000 0000 0000 e400 0000 0000 0000  ................
000079d0: 0200 0000 0300 0000 570a 0000 0000 0000  ........W.......
000079e0: e800 0000 0000 0000 0200 0000 0300 0000  ................
000079f0: 670a 0000 0000 0000 ec00 0000 0000 0000  g...............
00007a00: 0200 0000 0300 0000 a00a 0000 0000 0000  ................
00007a10: f000 0000 0000 0000 0200 0000 0300 0000  ................
00007a20: ed0a 0000 0000 0000 f400 0000 0000 0000  ................
00007a30: 0200 0000 0300 0000 0e0b 0000 0000 0000  ................
00007a40: f800 0000 0000 0000 0200 0000 0300 0000  ................
00007a50: 8c0b 0000 0000 0000 fc00 0000 0000 0000  ................
00007a60: 0200 0000 0300 0000 a50b 0000 0000 0000  ................
00007a70: 0001 0000 0000 0000 0200 0000 0300 0000  ................
00007a80: ba0b 0000 0000 0000 0401 0000 0000 0000  ................
00007a90: 0200 0000 0300 0000 060c 0000 0000 0000  ................
00007aa0: 0801 0000 0000 0000 0200 0000 0300 0000  ................
00007ab0: 470c 0000 0000 0000 0c01 0000 0000 0000  G...............
00007ac0: 0200 0000 0300 0000 4f0c 0000 0000 0000  ........O.......
00007ad0: 1001 0000 0000 0000 0200 0000 0300 0000  ................
00007ae0: 6a0c 0000 0000 0000 1401 0000 0000 0000  j...............
00007af0: 0200 0000 0300 0000 7a0c 0000 0000 0000  ........z.......
00007b00: 1801 0000 0000 0000 0200 0000 0300 0000  ................
00007b10: 950c 0000 0000 0000 1c01 0000 0000 0000  ................
00007b20: 0200 0000 0300 0000 a20c 0000 0000 0000  ................
00007b30: 2001 0000 0000 0000 0200 0000 0300 0000   ...............
00007b40: b50c 0000 0000 0000 2401 0000 0000 0000  ........$.......
00007b50: 0200 0000 0300 0000 eb0c 0000 0000 0000  ................
00007b60: 2801 0000 0000 0000 0200 0000 0300 0000  (...............
00007b70: 0a0d 0000 0000 0000 2c01 0000 0000 0000  ........,.......
00007b80: 0200 0000 0300 0000 280d 0000 0000 0000  ........(.......
00007b90: 3001 0000 0000 0000 0200 0000 0300 0000  0...............
00007ba0: 5c0d 0000 0000 0000 3401 0000 0000 0000  \.......4.......
00007bb0: 0200 0000 0300 0000 b40e 0000 0000 0000  ................
00007bc0: 3801 0000 0000 0000 0200 0000 0300 0000  8...............
00007bd0: d50e 0000 0000 0000 3c01 0000 0000 0000  ........<.......
00007be0: 0200 0000 0300 0000 fd0e 0000 0000 0000  ................
00007bf0: 4001 0000 0000 0000 0200 0000 0300 0000  @...............
00007c00: 110f 0000 0000 0000 4401 0000 0000 0000  ........D.......
00007c10: 0200 0000 0300 0000 210f 0000 0000 0000  ........!.......
00007c20: 4801 0000 0000 0000 0200 0000 0300 0000  H...............
00007c30: 340f 0000 0000 0000 4c01 0000 0000 0000  4.......L.......
00007c40: 0200 0000 0300 0000 4a0f 0000 0000 0000  ........J.......
00007c50: 5001 0000 0000 0000 0200 0000 0300 0000  P...............
00007c60: 580f 0000 0000 0000 5401 0000 0000 0000  X.......T.......
00007c70: 0200 0000 0300 0000 690f 0000 0000 0000  ........i.......
00007c80: 5801 0000 0000 0000 0200 0000 0300 0000  X...............
00007c90: 820f 0000 0000 0000 5c01 0000 0000 0000  ........\.......
00007ca0: 0200 0000 0300 0000 980f 0000 0000 0000  ................
00007cb0: 6001 0000 0000 0000 0200 0000 0300 0000  `...............
00007cc0: ae0f 0000 0000 0000 6401 0000 0000 0000  ........d.......
00007cd0: 0200 0000 0300 0000 c10f 0000 0000 0000  ................
00007ce0: 6801 0000 0000 0000 0200 0000 0300 0000  h...............
00007cf0: e20f 0000 0000 0000 6c01 0000 0000 0000  ........l.......
00007d00: 0200 0000 0300 0000 ea0f 0000 0000 0000  ................
00007d10: 7001 0000 0000 0000 0200 0000 0300 0000  p...............
00007d20: 0010 0000 0000 0000 7401 0000 0000 0000  ........t.......
00007d30: 0200 0000 0300 0000 1610 0000 0000 0000  ................
00007d40: 7801 0000 0000 0000 0200 0000 0300 0000  x...............
00007d50: 2c10 0000 0000 0000 7c01 0000 0000 0000  ,.......|.......
00007d60: 0200 0000 0300 0000 4210 0000 0000 0000  ........B.......
00007d70: 8001 0000 0000 0000 0200 0000 0300 0000  ................
00007d80: 5810 0000 0000 0000 8401 0000 0000 0000  X...............
00007d90: 0200 0000 0300 0000 6e10 0000 0000 0000  ........n.......
00007da0: 8801 0000 0000 0000 0200 0000 0300 0000  ................
00007db0: 7810 0000 0000 0000 8c01 0000 0000 0000  x...............
00007dc0: 0200 0000 0300 0000 a010 0000 0000 0000  ................
00007dd0: 9001 0000 0000 0000 0200 0000 0300 0000  ................
00007de0: 5811 0000 0000 0000 9401 0000 0000 0000  X...............
00007df0: 0200 0000 0300 0000 bf11 0000 0000 0000  ................
00007e00: 9801 0000 0000 0000 0200 0000 0300 0000  ................
00007e10: e811 0000 0000 0000 9c01 0000 0000 0000  ................
00007e20: 0200 0000 0300 0000 0912 0000 0000 0000  ................
00007e30: a001 0000 0000 0000 0200 0000 0300 0000  ................
00007e40: 5a12 0000 0000 0000 a401 0000 0000 0000  Z...............
00007e50: 0200 0000 0300 0000 7e12 0000 0000 0000  ........~.......
00007e60: a801 0000 0000 0000 0200 0000 0400 0000  ................
00007e70: 1000 0000 0000 0000 ac01 0000 0000 0000  ................
00007e80: 0200 0000 0400 0000 2e00 0000 0000 0000  ................
00007e90: b001 0000 0000 0000 0200 0000 0500 0000  ................
00007ea0: 1b00 0000 0000 0000 b401 0000 0000 0000  ................
00007eb0: 0200 0000 0600 0000 1100 0000 0000 0000  ................
00007ec0: b801 0000 0000 0000 0200 0000 0600 0000  ................
00007ed0: 2900 0000 0000 0000 0000 0000 0000 0000  )...............
00007ee0: 0200 0000 0300 0000 e804 0000 0000 0000  ................
00007ef0: 0400 0000 0000 0000 0200 0000 4400 0000  ............D...
00007f00: 0000 0000 0000 0000 0c00 0000 0000 0000  ................
00007f10: 0200 0000 0300 0000 7e0a 0000 0000 0000  ........~.......
00007f20: 1000 0000 0000 0000 0200 0000 4400 0000  ............D...
00007f30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00007f40: 0100 0000 0400 0000 0000 0000 0000 0000  ................
00007f50: 0800 0000 0000 0000 0100 0000 0300 0000  ................
00007f60: 0000 0000 0000 0000 1000 0000 0000 0000  ................
00007f70: 0100 0000 0300 0000 4000 0000 0000 0000  ........@.......
00007f80: 1800 0000 0000 0000 0100 0000 0300 0000  ................
00007f90: 9000 0000 0000 0000 2000 0000 0000 0000  ........ .......
00007fa0: 0100 0000 0300 0000 e000 0000 0000 0000  ................
00007fb0: 2800 0000 0000 0000 0100 0000 0300 0000  (...............
00007fc0: f001 0000 0000 0000 3000 0000 0000 0000  ........0.......
00007fd0: 0100 0000 0300 0000 9003 0000 0000 0000  ................
00007fe0: 3800 0000 0000 0000 0100 0000 0300 0000  8...............
00007ff0: d003 0000 0000 0000 4000 0000 0000 0000  ........@.......
00008000: 0100 0000 0300 0000 1004 0000 0000 0000  ................
00008010: 4800 0000 0000 0000 0100 0000 0300 0000  H...............
00008020: 7004 0000 0000 0000 5000 0000 0000 0000  p.......P.......
00008030: 0100 0000 0500 0000 0000 0000 0000 0000  ................
00008040: 5800 0000 0000 0000 0100 0000 0300 0000  X...............
00008050: 0005 0000 0000 0000 6000 0000 0000 0000  ........`.......
00008060: 0100 0000 0300 0000 a008 0000 0000 0000  ................
00008070: 6800 0000 0000 0000 0100 0000 0300 0000  h...............
00008080: 6009 0000 0000 0000 7000 0000 0000 0000  `.......p.......
00008090: 0100 0000 0300 0000 f009 0000 0000 0000  ................
000080a0: 7800 0000 0000 0000 0100 0000 0300 0000  x...............
000080b0: 900a 0000 0000 0000 8000 0000 0000 0000  ................
000080c0: 0100 0000 0300 0000 9010 0000 0000 0000  ................
000080d0: 0000 0000 0000 0000 0100 0000 0900 0000  ................
000080e0: c803 0000 0000 0000 1000 0000 0000 0000  ................
000080f0: 0100 0000 1400 0000 8000 0000 0000 0000  ................
00008100: 1800 0000 0000 0000 0100 0000 1400 0000  ................
00008110: 2002 0000 0000 0000 2000 0000 0000 0000   ....... .......
00008120: 0100 0000 0900 0000 c803 0000 0000 0000  ................
00008130: 3000 0000 0000 0000 0100 0000 1400 0000  0...............
00008140: 8000 0000 0000 0000 3800 0000 0000 0000  ........8.......
00008150: 0100 0000 1400 0000 2002 0000 0000 0000  ........ .......
00008160: 4000 0000 0000 0000 0100 0000 0900 0000  @...............
00008170: c803 0000 0000 0000 5000 0000 0000 0000  ........P.......
00008180: 0100 0000 1400 0000 8000 0000 0000 0000  ................
00008190: 5800 0000 0000 0000 0100 0000 1400 0000  X...............
000081a0: 2002 0000 0000 0000 6000 0000 0000 0000   .......`.......
000081b0: 0100 0000 0900 0000 c803 0000 0000 0000  ................
000081c0: 7000 0000 0000 0000 0100 0000 1400 0000  p...............
000081d0: 8000 0000 0000 0000 7800 0000 0000 0000  ........x.......
000081e0: 0100 0000 1400 0000 2002 0000 0000 0000  ........ .......
000081f0: a000 0000 0000 0000 0100 0000 0700 0000  ................
00008200: 0b00 0000 0000 0000 b000 0000 0000 0000  ................
00008210: 0100 0000 1400 0000 b800 0000 0000 0000  ................
00008220: e000 0000 0000 0000 0100 0000 0700 0000  ................
00008230: 0000 0000 0000 0000 e800 0000 0000 0000  ................
00008240: 0100 0000 0300 0000 a00a 0000 0000 0000  ................
00008250: f000 0000 0000 0000 0100 0000 0300 0000  ................
00008260: 5000 0000 0000 0000 2801 0000 0000 0000  P.......(.......
00008270: 0100 0000 0300 0000 1000 0000 0000 0000  ................
00008280: 3001 0000 0000 0000 0100 0000 0b00 0000  0...............
00008290: 0000 0000 0000 0000 0002 0000 0000 0000  ................
000082a0: 0100 0000 0900 0000 0804 0000 0000 0000  ................
000082b0: 1002 0000 0000 0000 0100 0000 1400 0000  ................
000082c0: 3402 0000 0000 0000 1802 0000 0000 0000  4...............
000082d0: 0100 0000 1400 0000 2002 0000 0000 0000  ........ .......
000082e0: 0000 0000 0000 0000 0100 0000 6d00 0000  ............m...
000082f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008300: 0100 0000 7500 0000 0000 0000 0000 0000  ....u...........
00008310: 3801 0000 0000 0000 0100 0000 7500 0000  8...........u...
00008320: 0000 0000 0000 0000 b804 0000 0000 0000  ................
00008330: 0100 0000 6d00 0000 0000 0000 0000 0000  ....m...........
00008340: 002e 7379 6d74 6162 002e 7374 7274 6162  ..symtab..strtab
00008350: 002e 7368 7374 7274 6162 002e 6e6f 7465  ..shstrtab..note
00008360: 2e67 6e75 2e62 7569 6c64 2d69 6400 2e6e  .gnu.build-id..n
00008370: 6f74 652e 4c69 6e75 7800 2e72 656c 612e  ote.Linux..rela.
00008380: 7465 7874 002e 7265 6c61 2e69 6e69 742e  text..rela.init.
00008390: 7465 7874 002e 7265 6c61 2e65 7869 742e  text..rela.exit.
000083a0: 7465 7874 002e 7265 6c61 2e74 6578 742e  text..rela.text.
000083b0: 756e 6c69 6b65 6c79 002e 726f 6461 7461  unlikely..rodata
000083c0: 2e73 7472 312e 3100 2e72 656c 615f 5f6d  .str1.1..rela__m
000083d0: 636f 756e 745f 6c6f 6300 2e72 6f64 6174  count_loc..rodat
000083e0: 612e 7374 7231 2e38 002e 6d6f 6469 6e66  a.str1.8..modinf
000083f0: 6f00 2e72 656c 612e 726f 6461 7461 002e  o..rela.rodata..
00008400: 7265 6c61 2e72 6574 7572 6e5f 7369 7465  rela.return_site
00008410: 7300 2e72 656c 612e 6361 6c6c 5f73 6974  s..rela.call_sit
00008420: 6573 005f 5f76 6572 7369 6f6e 7300 2e72  es.__versions..r
00008430: 656c 615f 5f62 7567 5f74 6162 6c65 002e  ela__bug_table..
00008440: 7265 6c61 5f5f 7061 7463 6861 626c 655f  rela__patchable_
00008450: 6675 6e63 7469 6f6e 5f65 6e74 7269 6573  function_entries
00008460: 002e 636f 6465 7461 672e 616c 6c6f 635f  ..codetag.alloc_
00008470: 7461 6773 002e 636f 6d6d 656e 7400 2e6e  tags..comment..n
00008480: 6f74 652e 474e 552d 7374 6163 6b00 2e72  ote.GNU-stack..r
00008490: 656c 612e 6461 7461 002e 7265 6c61 2e65  ela.data..rela.e
000084a0: 7869 742e 6461 7461 002e 7265 6c61 2e69  xit.data..rela.i
000084b0: 6e69 742e 6461 7461 002e 7265 6c61 2e67  nit.data..rela.g
000084c0: 6e75 2e6c 696e 6b6f 6e63 652e 7468 6973  nu.linkonce.this
000084d0: 5f6d 6f64 756c 6500 2e62 7373 0000 0000  _module..bss....
000084e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000084f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008500: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008510: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008520: 1b00 0000 0700 0000 0200 0000 0000 0000  ................
00008530: 0000 0000 0000 0000 4000 0000 0000 0000  ........@.......
00008540: 2400 0000 0000 0000 0000 0000 0000 0000  $...............
00008550: 0400 0000 0000 0000 0000 0000 0000 0000  ................
00008560: 2e00 0000 0700 0000 0200 0000 0000 0000  ................
00008570: 0000 0000 0000 0000 6400 0000 0000 0000  ........d.......
00008580: 3000 0000 0000 0000 0000 0000 0000 0000  0...............
00008590: 0400 0000 0000 0000 0000 0000 0000 0000  ................
000085a0: 3f00 0000 0100 0000 0600 0000 0000 0000  ?...............
000085b0: 0000 0000 0000 0000 a000 0000 0000 0000  ................
000085c0: 8e12 0000 0000 0000 0000 0000 0000 0000  ................
000085d0: 1000 0000 0000 0000 0000 0000 0000 0000  ................
000085e0: 3a00 0000 0400 0000 4000 0000 0000 0000  :.......@.......
000085f0: 0000 0000 0000 0000 d05c 0000 0000 0000  .........\......
00008600: e80e 0000 0000 0000 2700 0000 0300 0000  ........'.......
00008610: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008620: 4a00 0000 0100 0000 0600 0000 0000 0000  J...............
00008630: 0000 0000 0000 0000 3013 0000 0000 0000  ........0.......
00008640: 3f00 0000 0000 0000 0000 0000 0000 0000  ?...............
00008650: 1000 0000 0000 0000 0000 0000 0000 0000  ................
00008660: 4500 0000 0400 0000 4000 0000 0000 0000  E.......@.......
00008670: 0000 0000 0000 0000 b86b 0000 0000 0000  .........k......
00008680: 9000 0000 0000 0000 2700 0000 0500 0000  ........'.......
00008690: 0800 0000 0000 0000 1800 0000 0000 0000  ................
000086a0: 5a00 0000 0100 0000 0600 0000 0000 0000  Z...............
000086b0: 0000 0000 0000 0000 7013 0000 0000 0000  ........p.......
000086c0: 2800 0000 0000 0000 0000 0000 0000 0000  (...............
000086d0: 1000 0000 0000 0000 0000 0000 0000 0000  ................
000086e0: 5500 0000 0400 0000 4000 0000 0000 0000  U.......@.......
000086f0: 0000 0000 0000 0000 486c 0000 0000 0000  ........Hl......
00008700: 4800 0000 0000 0000 2700 0000 0700 0000  H.......'.......
00008710: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008720: 6a00 0000 0100 0000 0600 0000 0000 0000  j...............
00008730: 0000 0000 0000 0000 9813 0000 0000 0000  ................
00008740: 3300 0000 0000 0000 0000 0000 0000 0000  3...............
00008750: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008760: 6500 0000 0400 0000 4000 0000 0000 0000  e.......@.......
00008770: 0000 0000 0000 0000 906c 0000 0000 0000  .........l......
00008780: 9000 0000 0000 0000 2700 0000 0900 0000  ........'.......
00008790: 0800 0000 0000 0000 1800 0000 0000 0000  ................
000087a0: 7900 0000 0100 0000 3200 0000 0000 0000  y.......2.......
000087b0: 0000 0000 0000 0000 cb13 0000 0000 0000  ................
000087c0: a300 0000 0000 0000 0000 0000 0000 0000  ................
000087d0: 0100 0000 0000 0000 0100 0000 0000 0000  ................
000087e0: 8d00 0000 0100 0000 0200 0000 0000 0000  ................
000087f0: 0000 0000 0000 0000 6e14 0000 0000 0000  ........n.......
00008800: 8000 0000 0000 0000 0000 0000 0000 0000  ................
00008810: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008820: 8800 0000 0400 0000 4000 0000 0000 0000  ........@.......
00008830: 0000 0000 0000 0000 206d 0000 0000 0000  ........ m......
00008840: 8001 0000 0000 0000 2700 0000 0c00 0000  ........'.......
00008850: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008860: 9a00 0000 0100 0000 3200 0000 0000 0000  ........2.......
00008870: 0000 0000 0000 0000 f014 0000 0000 0000  ................
00008880: 4804 0000 0000 0000 0000 0000 0000 0000  H...............
00008890: 0800 0000 0000 0000 0100 0000 0000 0000  ................
000088a0: a900 0000 0100 0000 0200 0000 0000 0000  ................
000088b0: 0000 0000 0000 0000 3819 0000 0000 0000  ........8.......
000088c0: 1101 0000 0000 0000 0000 0000 0000 0000  ................
000088d0: 0100 0000 0000 0000 0000 0000 0000 0000  ................
000088e0: b700 0000 0100 0000 0200 0000 0000 0000  ................
000088f0: 0000 0000 0000 0000 601a 0000 0000 0000  ........`.......
00008900: c805 0000 0000 0000 0000 0000 0000 0000  ................
00008910: 2000 0000 0000 0000 0000 0000 0000 0000   ...............
00008920: b200 0000 0400 0000 4000 0000 0000 0000  ........@.......
00008930: 0000 0000 0000 0000 a06e 0000 0000 0000  .........n......
00008940: 0804 0000 0000 0000 2700 0000 1000 0000  ........'.......
00008950: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008960: c400 0000 0100 0000 0200 0000 0000 0000  ................
00008970: 0000 0000 0000 0000 2820 0000 0000 0000  ........( ......
00008980: 4c00 0000 0000 0000 0000 0000 0000 0000  L...............
00008990: 0100 0000 0000 0000 0000 0000 0000 0000  ................
000089a0: bf00 0000 0400 0000 4000 0000 0000 0000  ........@.......
000089b0: 0000 0000 0000 0000 a872 0000 0000 0000  .........r......
000089c0: c801 0000 0000 0000 2700 0000 1200 0000  ........'.......
000089d0: 0800 0000 0000 0000 1800 0000 0000 0000  ................
000089e0: d700 0000 0100 0000 0200 0000 0000 0000  ................
000089f0: 0000 0000 0000 0000 7420 0000 0000 0000  ........t ......
00008a00: bc01 0000 0000 0000 0000 0000 0000 0000  ................
00008a10: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008a20: d200 0000 0400 0000 4000 0000 0000 0000  ........@.......
00008a30: 0000 0000 0000 0000 7074 0000 0000 0000  ........pt......
00008a40: 680a 0000 0000 0000 2700 0000 1400 0000  h.......'.......
00008a50: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008a60: e300 0000 0100 0000 0200 0000 0000 0000  ................
00008a70: 0000 0000 0000 0000 4022 0000 0000 0000  ........@"......
00008a80: c013 0000 0000 0000 0000 0000 0000 0000  ................
00008a90: 2000 0000 0000 0000 0000 0000 0000 0000   ...............
00008aa0: f300 0000 0100 0000 0300 0000 0000 0000  ................
00008ab0: 0000 0000 0000 0000 0036 0000 0000 0000  .........6......
00008ac0: 1800 0000 0000 0000 0000 0000 0000 0000  ................
00008ad0: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008ae0: ee00 0000 0400 0000 4000 0000 0000 0000  ........@.......
00008af0: 0000 0000 0000 0000 d87e 0000 0000 0000  .........~......
00008b00: 6000 0000 0000 0000 2700 0000 1700 0000  `.......'.......
00008b10: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008b20: 0401 0000 0100 0000 8300 0000 0000 0000  ................
00008b30: 1800 0000 0000 0000 1836 0000 0000 0000  .........6......
00008b40: 8800 0000 0000 0000 0500 0000 0000 0000  ................
00008b50: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008b60: ff00 0000 0400 0000 4000 0000 0000 0000  ........@.......
00008b70: 0000 0000 0000 0000 387f 0000 0000 0000  ........8.......
00008b80: 9801 0000 0000 0000 2700 0000 1900 0000  ........'.......
00008b90: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008ba0: 2101 0000 0100 0000 0100 0000 0000 0000  !...............
00008bb0: 0000 0000 0000 0000 a036 0000 0000 0000  .........6......
00008bc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008bd0: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008be0: 3501 0000 0100 0000 3000 0000 0000 0000  5.......0.......
00008bf0: 0000 0000 0000 0000 a036 0000 0000 0000  .........6......
00008c00: 8400 0000 0000 0000 0000 0000 0000 0000  ................
00008c10: 0100 0000 0000 0000 0100 0000 0000 0000  ................
00008c20: 3e01 0000 0100 0000 0000 0000 0000 0000  >...............
00008c30: 0000 0000 0000 0000 2437 0000 0000 0000  ........$7......
00008c40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008c50: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008c60: 5301 0000 0100 0000 0300 0000 0000 0000  S...............
00008c70: a000 0000 0000 0000 4037 0000 0000 0000  ........@7......
00008c80: 3e02 0000 0000 0000 0000 0000 0000 0000  >...............
00008c90: 2000 0000 0000 0000 0000 0000 0000 0000   ...............
00008ca0: 4e01 0000 0400 0000 4000 0000 0000 0000  N.......@.......
00008cb0: 0000 0000 0000 0000 d080 0000 0000 0000  ................
00008cc0: 1002 0000 0000 0000 2700 0000 1e00 0000  ........'.......
00008cd0: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008ce0: 5e01 0000 0100 0000 0300 0000 0000 0000  ^...............
00008cf0: 0000 0000 0000 0000 8039 0000 0000 0000  .........9......
00008d00: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008d10: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008d20: 5901 0000 0400 0000 4000 0000 0000 0000  Y.......@.......
00008d30: 0000 0000 0000 0000 e082 0000 0000 0000  ................
00008d40: 1800 0000 0000 0000 2700 0000 2000 0000  ........'... ...
00008d50: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008d60: 6e01 0000 0100 0000 0300 0000 0000 0000  n...............
00008d70: 0000 0000 0000 0000 8839 0000 0000 0000  .........9......
00008d80: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008d90: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008da0: 6901 0000 0400 0000 4000 0000 0000 0000  i.......@.......
00008db0: 0000 0000 0000 0000 f882 0000 0000 0000  ................
00008dc0: 1800 0000 0000 0000 2700 0000 2200 0000  ........'..."...
00008dd0: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008de0: 7e01 0000 0100 0000 0300 0000 0000 0000  ~...............
00008df0: 0000 0000 0000 0000 c039 0000 0000 0000  .........9......
00008e00: 0005 0000 0000 0000 0000 0000 0000 0000  ................
00008e10: 4000 0000 0000 0000 0000 0000 0000 0000  @...............
00008e20: 7901 0000 0400 0000 4000 0000 0000 0000  y.......@.......
00008e30: 0000 0000 0000 0000 1083 0000 0000 0000  ................
00008e40: 3000 0000 0000 0000 2700 0000 2400 0000  0.......'...$...
00008e50: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008e60: 9801 0000 0800 0000 0300 0000 0000 0000  ................
00008e70: 0000 0000 0000 0000 c03e 0000 0000 0000  .........>......
00008e80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008e90: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008ea0: 0100 0000 0200 0000 0000 0000 0000 0000  ................
00008eb0: 0000 0000 0000 0000 c03e 0000 0000 0000  .........>......
00008ec0: b010 0000 0000 0000 2800 0000 5c00 0000  ........(...\...
00008ed0: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008ee0: 0900 0000 0300 0000 0000 0000 0000 0000  ................
00008ef0: 0000 0000 0000 0000 704f 0000 0000 0000  ........pO......
00008f00: 5b0d 0000 0000 0000 0000 0000 0000 0000  [...............
00008f10: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008f20: 1100 0000 0300 0000 0000 0000 0000 0000  ................
00008f30: 0000 0000 0000 0000 4083 0000 0000 0000  ........@.......
00008f40: 9d01 0000 0000 0000 0000 0000 0000 0000  ................
00008f50: 0100 0000 0000 0000 0000 0000 0000 0000  ................


2. Only the trouble maker packed:

00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............
00000010: 0100 3e00 0100 0000 0000 0000 0000 0000  ..>.............
00000020: 0000 0000 0000 0000 e084 0000 0000 0000  ................
00000030: 0000 0000 4000 0000 0000 4000 2a00 2900  ....@.....@.*.).
00000040: 0400 0000 1400 0000 0300 0000 474e 5500  ............GNU.
00000050: 271f 25d4 d21a cffc c669 b501 12b0 d98f  '.%......i......
00000060: b2a7 f71c 0600 0000 0400 0000 0101 0000  ................
00000070: 4c69 6e75 7800 0000 0000 0000 0600 0000  Linux...........
00000080: 0100 0000 0001 0000 4c69 6e75 7800 0000  ........Linux...
00000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000a0: 9090 9090 9090 9090 9090 9090 9090 9090  ................
000000b0: e800 0000 0055 488b bfc8 0000 0048 83c7  .....UH......H..
000000c0: 2048 89e5 e800 0000 005d 31ff e900 0000   H.......]1.....
000000d0: 0066 662e 0f1f 8400 0000 0000 0f1f 4000  .ff...........@.
000000e0: 9090 9090 9090 9090 9090 9090 9090 9090  ................
000000f0: e800 0000 0055 4889 e553 488b 9fc8 0000  .....UH..SH.....
00000100: 0048 83c3 2048 89df e800 0000 0048 89df  .H.. H.......H..
00000110: e800 0000 0048 8b5d f8c9 31ff e900 0000  .....H.]..1.....
00000120: 0066 662e 0f1f 8400 0000 0000 0f1f 4000  .ff...........@.
00000130: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000140: e800 0000 0048 8b57 e848 85d2 7415 5548  .....H.W.H..t.UH
00000150: 89e5 e800 0000 005d 31d2 31f6 31ff e900  .......]1.1.1...
00000160: 0000 0048 c7c0 edff ffff 31d2 31f6 31ff  ...H......1.1.1.
00000170: e900 0000 0066 662e 0f1f 8400 0000 0000  .....ff.........
00000180: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000190: e800 0000 0055 4889 f041 b9e8 0300 0048  .....UH..A.....H
000001a0: 89e5 4156 4989 d641 554c 8d45 d444 89f1  ..AVI..AUL.E.D..
000001b0: 4154 5348 89fb 4c8d 6320 4883 ec10 6548  ATSH..L.c H...eH
000001c0: 8b14 2528 0000 0048 8955 d848 8b17 c745  ..%(...H.U.H...E
000001d0: d400 0000 0048 8b7a 408b 5314 8bb7 58ff  .....H.z@.S...X.
000001e0: ffff c1e2 0f48 81ef a800 0000 c1e6 0809  .....H..........
000001f0: d648 89c2 81ce 0000 00c0 e800 0000 0041  .H.............A
00000200: 89c5 85c0 753d 4863 45d4 4889 c24c 39f0  ....u=HcE.H..L9.
00000210: 754e 488b 45d8 6548 2b04 2528 0000 0075  uNH.E.eH+.%(...u
00000220: 6248 83c4 1044 89e8 5b41 5c41 5d41 5e5d  bH...D..[A\A]A^]
00000230: 31d2 31c9 31f6 31ff 4531 c045 31c9 e900  1.1.1.1.E1.E1...
00000240: 0000 004d 85e4 7404 4c8b 6328 4489 ea48  ...M..t.L.c(D..H
00000250: c7c6 0000 0000 4c89 e7e8 0000 0000 ebb2  ......L.........
00000260: 4d85 e474 044c 8b63 284c 89f1 48c7 c600  M..t.L.c(L..H...
00000270: 0000 004c 89e7 41bd fbff ffff e800 0000  ...L..A.........
00000280: 00eb 8fe8 0000 0000 0f1f 8400 0000 0000  ................
00000290: 9090 9090 9090 9090 9090 9090 9090 9090  ................
000002a0: e800 0000 0055 4889 e541 5741 5649 89f6  .....UH..AWAVI..
000002b0: 4155 4c8d 6f20 4154 41bc 0200 0000 5348  AUL.o ATA.....SH
000002c0: 89fb 4883 ec28 4889 55b0 894d c465 488b  ..H..(H.U..M.eH.
000002d0: 0425 2800 0000 4889 45d0 488b 07c7 45cc  .%(...H.E.H...E.
000002e0: 0000 0000 8955 c04c 8b78 4049 8d87 58ff  .....U.L.x@I..X.
000002f0: ffff 4889 45b8 8b43 108b 4dc0 41b9 e803  ..H.E..C..M.A...
00000300: 0000 4c8d 45cc 418b b758 ffff ff48 8b7d  ..L.E.A..X...H.}
00000310: b84c 89f2 c1e0 0fc1 e608 09c6 81ce 8000  .L..............
00000320: 00c0 e800 0000 0085 c075 7241 8b56 1081  .........urA.V..
00000330: fa59 4445 520f 8584 0000 0041 83fc 0175  .YDER......A...u
00000340: 514d 85ed 7404 4c8b 6b28 48c7 c600 0000  QM..t.L.k(H.....
00000350: 004c 89ef e800 0000 00b8 fbff ffff 488b  .L............H.
00000360: 55d0 6548 2b14 2528 0000 000f 85ab 0000  U.eH+.%(........
00000370: 0048 83c4 285b 415c 415d 415e 415f 5d31  .H..([A\A]A^A_]1
00000380: d231 c931 f631 ff45 31c0 4531 c9e9 0000  .1.1.1.E1.E1....
00000390: 0000 41bc 0100 0000 e959 ffff ff4d 85ed  ..A......Y...M..
000003a0: 7404 4c8b 6b28 89c2 48c7 c600 0000 004c  t.L.k(..H......L
000003b0: 89ef 8945 b8e8 0000 0000 8b45 b8eb 9f48  ...E.......E...H
000003c0: 634d cc48 8b7d b048 89ce 4839 f975 2a3b  cM.H.}.H..H9.u*;
000003d0: 55c4 748a 498d 4e10 4d85 ed74 044c 8b6b  U.t.I.N.M..t.L.k
000003e0: 2848 8d55 c448 c7c6 0000 0000 4c89 efe8  (H.U.H......L...
000003f0: 0000 0000 e960 ffff ff4d 85ed 7404 4c8b  .....`...M..t.L.
00000400: 6b28 488b 4db0 89f2 4c89 ef48 c7c6 0000  k(H.M...L..H....
00000410: 0000 e800 0000 00e9 3dff ffff e800 0000  ........=.......
00000420: 0066 662e 0f1f 8400 0000 0000 0f1f 4000  .ff...........@.
00000430: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000440: e800 0000 0055 488b 0748 8db0 1806 0000  .....UH..H......
00000450: 4889 e5e8 0000 0000 5d31 f631 ffe9 0000  H.......]1.1....
00000460: 0000 6666 2e0f 1f84 0000 0000 000f 1f00  ..ff............
00000470: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000480: e800 0000 0055 488b 0748 8d90 1806 0000  .....UH..H......
00000490: 4889 e5e8 0000 0000 5d31 d231 f631 ffe9  H.......]1.1.1..
000004a0: 0000 0000 6666 2e0f 1f84 0000 0000 0090  ....ff..........
000004b0: 9090 9090 9090 9090 9090 9090 9090 9090  ................
000004c0: e800 0000 0055 488b be48 0100 0048 89e5  .....UH..H...H..
000004d0: 5348 89f3 e800 0000 0048 8bbb 5001 0000  SH.......H..P...
000004e0: e800 0000 0048 89df e800 0000 0048 89df  .....H.......H..
000004f0: e800 0000 0048 8b5d f8c9 31f6 31ff e900  .....H.]..1.1...
00000500: 0000 0066 662e 0f1f 8400 0000 0000 6690  ...ff.........f.
00000510: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000520: e800 0000 0055 4889 e541 5453 488b 9fd8  .....UH..ATSH...
00000530: 0400 0048 85db 7450 4989 fcba c00c 0000  ...H..tPI.......
00000540: 4889 dfbe 6801 0000 e800 0000 0048 89c3  H...h........H..
00000550: 4885 c074 2148 c780 4801 0000 0000 0000  H..t!H..H.......
00000560: 4889 c64c 89e7 48c7 8050 0100 0000 0000  H..L..H..P......
00000570: 00e8 0000 0000 4889 d85b 415c 5d31 d231  ......H..[A\]1.1
00000580: f631 ffe9 0000 0000 0f0b 4889 d85b 415c  .1........H..[A\
00000590: 5d31 d231 f631 ffe9 0000 0000 0f1f 4000  ]1.1.1........@.
000005a0: 9090 9090 9090 9090 9090 9090 9090 9090  ................
000005b0: e800 0000 0055 4889 e541 5741 5641 5541  .....UH..AWAVAUA
000005c0: 5453 4883 e4f0 4881 ecb0 0000 004c 8b2f  TSH...H......L./
000005d0: 488b 9fd8 0400 0065 488b 0425 2800 0000  H......eH..%(...
000005e0: 4889 8424 a800 0000 31c0 8b87 cc04 0000  H..$....1.......
000005f0: c744 244c 0000 0000 4c89 ef48 c1e0 0548  .D$L....L..H...H
00000600: 0346 1848 8d74 244c 4c8b 7810 e800 0000  .F.H.t$LL.x.....
00000610: 0084 c075 3a48 8b84 24a8 0000 0065 482b  ...u:H..$....eH+
00000620: 0425 2800 0000 0f85 0803 0000 488d 65d8  .%(.........H.e.
00000630: 5b41 5c41 5d41 5e41 5f5d 31c0 31d2 31c9  [A\A]A^A_]1.1.1.
00000640: 31f6 31ff 4531 c045 31c9 e900 0000 0048  1.1.E1.E1......H
00000650: 8b83 5001 0000 48c7 8424 8000 0000 0000  ..P...H..$......
00000660: 0000 48c7 8424 8800 0000 0000 0000 4889  ..H..$........H.
00000670: 4424 1848 8b83 4801 0000 48c7 8424 9000  D$.H..H...H..$..
00000680: 0000 0000 0000 48c7 8424 9800 0000 0000  ......H..$......
00000690: 0000 48c7 8424 a000 0000 0000 0000 4c8b  ..H..$........L.
000006a0: 7310 4889 4424 28e8 0000 0000 4889 4424  s.H.D$(.....H.D$
000006b0: 3048 8b83 6001 0000 48c7 4424 6000 0000  0H..`...H.D$`...
000006c0: 0048 c744 2468 0000 0000 4889 4424 2048  .H.D$h....H.D$ H
000006d0: 85c0 7450 488b 8358 0100 00be 0200 0000  ..tPH..X........
000006e0: 4c89 f74c 896c 2410 4889 4424 08e8 0000  L..L.l$.H.D$....
000006f0: 0000 85c0 743c 4d85 ed74 0949 8b5d 0848  ....t<M..t.I.].H
00000700: 895c 2410 488b 7c24 1089 c248 c7c6 0000  .\$.H.|$...H....
00000710: 0000 e800 0000 00be 0200 0000 4c89 f7e8  ............L...
00000720: 0000 0000 8b7c 244c e800 0000 00e9 e3fe  .....|$L........
00000730: ffff 488b 4c24 284c 89fe 4889 da48 b802  ..H.L$(L..H..H..
00000740: 0012 0009 0000 0048 8dbc 2480 0000 0048  .......H..$....H
00000750: 8901 8b44 2408 4c8d 6130 4d89 e783 e810  ...D$.L.a0M.....
00000760: 8941 0cb8 0100 0000 6689 4110 0fb6 4424  .A......f.A...D$
00000770: 3088 4112 e800 0000 0048 8d74 2460 488d  0.A......H.t$`H.
00000780: bc24 8000 0000 e800 0000 0084 c00f 84f1  .$..............
00000790: 0000 0048 8b43 7c8b 4c24 6448 8d74 2460  ...H.C|.L$dH.t$`
000007a0: 488d 7c24 7048 8b93 8400 0000 448b 6424  H.|$pH......D.d$
000007b0: 6048 c744 2458 0000 0000 4889 4424 7049  `H.D$X....H.D$pI
000007c0: 8d47 0c48 8954 2478 8b54 246c 4889 4424  .G.H.T$x.T$lH.D$
000007d0: 508b 4424 6889 5424 4089 4424 4489 4c24  P.D$h.T$@.D$D.L$
000007e0: 3ce8 0000 0000 84c0 748f 8b44 2444 8b54  <.......t..D$D.T
000007f0: 2440 8b4c 243c 4429 e029 ca0f afc2 488d  $@.L$<D).)....H.
00000800: 9308 0100 0044 8d24 408b 4424 6466 4189  .....D.$@.D$dfA.
00000810: 0741 8b45 fc66 2b44 2468 6641 8947 028b  .A.E.f+D$hfA.G..
00000820: 4424 6c2b 4424 6466 4189 4704 8b44 2468  D$l+D$dfA.G..D$h
00000830: 2b44 2460 4589 6708 6641 8947 0649 8b46  +D$`E.g.fA.G.I.F
00000840: 4881 3858 5232 3474 1e4c 8d44 2460 4c89  H.8XR24t.L.D$`L.
00000850: f148 8d7c 2450 31f6 e800 0000 004f 8d7c  .H.|$P1......O.|
00000860: 270c e912 ffff ff4c 8d44 2460 4c89 f148  '......L.D$`L..H
00000870: 8d7c 2450 31f6 4c8d 8bb0 0000 00e8 0000  .|$P1.L.........
00000880: 0000 ebd9 488b 4424 2048 8b74 2428 498d  ....H.D$ H.t$(I.
00000890: 5de0 488b 5424 0848 89df 4c8d 6406 3048  ].H.T$.H..L.d.0H
000008a0: 8b44 2430 41c7 4424 0cfe ff00 0041 c744  .D$0A.D$.....A.D
000008b0: 241c 0100 0800 41c7 4424 3402 0008 0041  $.....A.D$4....A
000008c0: c744 244c ffff 0000 4989 4424 20e8 bef8  .D$L....I.D$ ...
000008d0: ffff 85c0 0f85 3dfe ffff 4c8b 7c24 18b9  ......=...L.|$..
000008e0: 4c43 4455 ba28 0000 0048 89df 4c89 fee8  LCDU.(...H..L...
000008f0: acf9 ffff 85c0 0f85 1bfe ffff 498b 5720  ............I.W 
00000900: 493b 5424 200f 840c feff ff4d 85ed 7409  I;T$ ......M..t.
00000910: 498b 4508 4889 4424 1048 8b4c 2430 488b  I.E.H.D$.H.L$0H.
00000920: 7c24 1048 c7c6 0000 0000 e800 0000 00e9  |$.H............
00000930: e3fd ffff e800 0000 000f 1f80 0000 0000  ................
00000940: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000950: e800 0000 0048 baeb 83b5 8046 86c8 6155  .....H.....F..aU
00000960: 4889 e541 5541 89f5 bec0 0d00 0048 8b45  H..AUA.......H.E
00000970: 0848 3305 0000 0000 4154 4989 fc48 0faf  .H3.....ATI..H..
00000980: c253 48c1 e83c 488d 14c5 0000 0000 4829  .SH..<H.......H)
00000990: c248 89d0 ba20 0000 0048 c1e0 0448 8bb8  .H... ...H...H..
000009a0: 0000 0000 e800 0000 0048 85c0 744a c700  .........H..tJ..
000009b0: 0200 1215 4c89 e748 89c3 4889 c6c7 400c  ....L..H..H...@.
000009c0: 1000 0000 ba20 0000 0044 8968 10c7 401c  ..... ...D.h..@.
000009d0: 1000 0000 e8b7 f7ff ff48 89df 4189 c4e8  .........H..A...
000009e0: 0000 0000 5b44 89e0 415c 415d 5d31 d231  ....[D..A\A]]1.1
000009f0: f631 ffe9 0000 0000 41bc f4ff ffff ebe4  .1......A.......
00000a00: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000a10: e800 0000 0055 4889 e553 488d 75ec 4883  .....UH..SH.u.H.
00000a20: ec10 488b 1f65 488b 0425 2800 0000 4889  ..H..eH..%(...H.
00000a30: 45f0 31c0 c745 ec00 0000 0048 89df e800  E.1..E.....H....
00000a40: 0000 0084 c074 1648 8d7b e0be 4452 4c43  .....t.H.{..DRLC
00000a50: e8fb feff ff8b 7dec e800 0000 0048 8b45  ......}......H.E
00000a60: f065 482b 0425 2800 0000 7510 488b 5df8  .eH+.%(...u.H.].
00000a70: c931 c031 f631 ffe9 0000 0000 e800 0000  .1.1.1..........
00000a80: 0066 662e 0f1f 8400 0000 0000 0f1f 4000  .ff...........@.
00000a90: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000aa0: e800 0000 0055 4889 e553 4883 bfd8 0400  .....UH..SH.....
00000ab0: 0000 4889 fb75 6748 8b45 0848 3305 0000  ..H..ugH.E.H3...
00000ac0: 0000 bec0 0d00 0048 baeb 83b5 8046 86c8  .......H.....F..
00000ad0: 6148 0faf c248 c1e8 3c48 8d14 c500 0000  aH...H..<H......
00000ae0: 0048 29c2 4889 d0ba 6801 0000 48c1 e004  .H).H...h...H...
00000af0: 488b b800 0000 00e8 0000 0000 4889 c648  H...........H..H
00000b00: 85c0 7408 4889 dfe8 0000 0000 488b 5df8  ..t.H.......H.].
00000b10: c931 c031 d231 f631 ffe9 0000 0000 0f0b  .1.1.1.1........
00000b20: eb95 6666 2e0f 1f84 0000 0000 000f 1f00  ..ff............
00000b30: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00000b40: e800 0000 0055 4531 c031 c948 89e5 4157  .....UE1.1.H..AW
00000b50: 4156 488d 55c8 488d 75c0 4155 4154 4989  AVH.U.H.u.AUATI.
00000b60: fc53 488d 5f50 4883 ec28 488b 7f08 6548  .SH._PH..(H...eH
00000b70: 8b04 2528 0000 0048 8945 d031 c048 c745  ..%(...H.E.1.H.E
00000b80: c000 0000 0048 c745 c800 0000 00e8 0000  .....H.E........
00000b90: 0000 85c0 0f85 6401 0000 b920 0000 00ba  ......d.... ....
00000ba0: 581b 0000 48c7 c600 0000 0048 89df e800  X...H......H....
00000bb0: 0000 0049 89c7 483d 00f0 ffff 0f87 9d00  ...I..H=........
00000bc0: 0000 4889 1848 8b45 c0be c00d 0000 48ba  ..H..H.E......H.
00000bd0: eb83 b580 4686 c861 0fb6 4002 4189 4710  ....F..a..@.A.G.
00000be0: 488b 45c8 0fb6 4002 c745 bc00 0000 0041  H.E...@..E.....A
00000bf0: 8947 144d 89bc 24c8 0000 0048 8b45 0848  .G.M..$....H.E.H
00000c00: 3305 0000 0000 480f afc2 48c1 e83c 488d  3.....H...H..<H.
00000c10: 14c5 0000 0000 4829 c248 89d0 ba41 0000  ......H).H...A..
00000c20: 0048 c1e0 0448 8bb8 0000 0000 e800 0000  .H...H..........
00000c30: 0049 89c5 4885 c00f 84e0 0400 00be 464e  .I..H.........FN
00000c40: 4947 4c89 ffe8 06fd ffff 85c0 7448 48c7  IGL.........tHH.
00000c50: c200 0000 0089 c648 89df e800 0000 0048  .......H.......H
00000c60: 8b55 d065 482b 1425 2800 0000 0f85 a604  .U.eH+.%(.......
00000c70: 0000 488d 65d8 5b41 5c41 5d41 5e41 5f5d  ..H.e.[A\A]A^A_]
00000c80: 31d2 31c9 31f6 31ff 4531 c045 31c9 4531  1.1.1.1.E1.E1.E1
00000c90: d2e9 0000 0000 b946 4e49 47ba 4100 0000  .......FNIG.A...
00000ca0: 4c89 ee4c 89ff e8f5 f5ff ff85 c075 6541  L..L.........ueA
00000cb0: 8b4d 2041 8b45 354d 8d67 2041 0fb6 5528  .M A.E5M.g A..U(
00000cc0: 4189 4f18 418b 4d24 8945 bc41 894f 1c80  A.O.A.M$.E.A.O..
00000cd0: fa18 7453 4d85 e474 044d 8b67 284c 89e7  ..tSM..t.M.g(L..
00000ce0: 48c7 c600 0000 00e8 0000 0000 4c89 efe8  H...........L...
00000cf0: 0000 0000 b8ea ffff ffe9 50ff ffff 48c7  ..........P...H.
00000d00: c200 0000 0089 c648 89df e800 0000 00e9  .......H........
00000d10: 4bff ffff 4c89 ef89 45b0 e800 0000 008b  K...L...E.......
00000d20: 45b0 e927 ffff ff3d 4142 4752 0f85 3903  E..'...=ABGR..9.
00000d30: 0000 4c89 efe8 0000 0000 be59 4445 524c  ..L........YDERL
00000d40: 89ff e809 fcff ff85 c00f 8579 0200 004c  ...........y...L
00000d50: 89e7 4d8b 2fe8 0000 0000 85c0 0f85 7c02  ..M./.........|.
00000d60: 0000 6a00 4d8d b720 0f00 0031 d24c 89e7  ..j.M.. ...1.L..
00000d70: 6a01 41b9 0200 0000 4c89 f649 c7c0 0000  j.A.....L..I....
00000d80: 0000 6a00 48c7 c100 0000 00e8 0000 0000  ..j.H...........
00000d90: 4883 c418 85c0 0f85 a602 0000 49c7 87f0  H...........I...
00000da0: 1300 0000 0000 004c 89f7 e800 0000 0045  .......L.......E
00000db0: 31c9 31c9 4c89 f249 8db7 6814 0000 49c7  1.1.L..I..h...I.
00000dc0: c000 0000 004c 89e7 e800 0000 0085 c00f  .....L..........
00000dd0: 85d5 0200 004d 8db7 d81a 0000 4531 c0b9  .....M......E1..
00000de0: 0100 0000 4c89 e749 c787 1816 0000 0000  ....L..I........
00000df0: 0000 48c7 c200 0000 004c 89f6 e800 0000  ..H......L......
00000e00: 0085 c00f 858b 0200 0041 8b8f f814 0000  .........A......
00000e10: 83f9 1f0f 8700 0000 00b8 0100 0000 418b  ..............A.
00000e20: 571c 418b 7718 498d bf38 0600 00d3 e0b9  W.A.w.I..8......
00000e30: 0f00 0000 49c7 8730 0300 0000 0000 004d  ....I..0.......M
00000e40: 8d97 b006 0000 4189 8720 1b00 00b8 0010  ......A.. ......
00000e50: 0000 39c2 4c89 55b0 41c7 87a0 0500 0018  ..9.L.U.A.......
00000e60: 0000 000f 43c2 49c7 8740 0300 0000 0000  ....C.I..@......
00000e70: 0041 8987 3803 0000 b800 1000 0039 c60f  .A..8........9..
00000e80: 43c6 4189 873c 0300 0031 c0f3 48ab 89d0  C.A..<...1..H...
00000e90: 6641 8997 3c06 0000 4c89 e70f afc6 6641  fA..<...L.....fA
00000ea0: 8997 3e06 0000 48b9 f11f 3c80 0fff c103  ..>...H...<.....
00000eb0: 6641 8997 4006 0000 6641 8997 4206 0000  fA..@...fA..B...
00000ec0: 6bc0 3c66 4189 b746 0600 0066 4189 b748  k.<fA..F...fA..H
00000ed0: 0600 0066 4189 b74a 0600 0048 69c0 d34d  ...fA..J...Hi..M
00000ee0: 6210 6641 89b7 4c06 0000 41c6 8776 0600  b.fA..L...A..v..
00000ef0: 0040 48c1 e826 4189 8738 0600 0089 d048  .@H..&A..8.....H
00000f00: 89c2 48c1 e207 4829 c248 01d2 48c1 ea02  ..H...H).H..H...
00000f10: 4889 d048 f7e1 48c1 ea03 6641 8997 7206  H..H..H...fA..r.
00000f20: 0000 4889 f248 c1e2 0748 29f2 4c89 d648  ..H..H...H).L..H
00000f30: 01d2 48c1 ea02 4889 d048 f7e1 b914 0000  ..H...H..H......
00000f40: 0048 c1ea 0366 4189 9774 0600 0048 c7c2  .H...fA..t...H..
00000f50: 0000 0000 e800 0000 0085 c00f 855f 0100  ............._..
00000f60: 0049 c787 c80c 0000 0000 0000 488b 7db0  .I..........H.}.
00000f70: be03 0000 00e8 0000 0000 85c0 0f85 5401  ..............T.
00000f80: 0000 41c6 8710 0800 0001 498b b760 0500  ..A.......I..`..
00000f90: 00ba 0100 0000 498d bff0 0600 00e8 0000  ......I.........
00000fa0: 0000 85c0 0f85 4201 0000 488b 7db0 4c89  ......B...H.}.L.
00000fb0: f6e8 0000 0000 85c0 0f85 4401 0000 4c89  ..........D...L.
00000fc0: e7e8 0000 0000 eb2b 48c7 c200 0000 0089  .......+H.......
00000fd0: c648 89df e800 0000 00e9 81fc ffff 48c7  .H............H.
00000fe0: c200 0000 0089 c64c 89ef e800 0000 0085  .......L........
00000ff0: c075 3931 f64c 89e7 e800 0000 0085 c075  .u91.L.........u
00001000: 54be 4452 4c43 4c89 ffe8 42f9 ffff 85c0  T.DRLCL...B.....
00001010: 0f84 49fc ffff 48c7 c200 0000 0089 c648  ..I...H........H
00001020: 89df e800 0000 00e9 33fc ffff 48c7 c200  ........3...H...
00001030: 0000 0089 c648 89df e800 0000 00e9 1dfc  .....H..........
00001040: ffff 48c7 c200 0000 0089 c64c 89ef e800  ..H........L....
00001050: 0000 00eb 9a48 c7c2 0000 0000 89c6 4889  .....H........H.
00001060: dfe8 0000 0000 e9f4 fbff ff4d 85e4 7404  ...........M..t.
00001070: 4d8b 6728 4c89 e748 8d55 bc48 c7c6 0000  M.g(L..H.U.H....
00001080: 0000 e800 0000 004c 89ef e800 0000 00e9  .......L........
00001090: 60fc ffff 48c7 c200 0000 0089 c64c 89ef  `...H........L..
000010a0: e800 0000 00e9 45ff ffff 48c7 c200 0000  ......E...H.....
000010b0: 0089 c64c 89ef e800 0000 00e9 2fff ffff  ...L......../...
000010c0: 48c7 c200 0000 0089 c64c 89ef e800 0000  H........L......
000010d0: 00e9 19ff ffff 48c7 c200 0000 0089 c64c  ......H........L
000010e0: 89ef e800 0000 00e9 03ff ffff 48c7 c200  ............H...
000010f0: 0000 0089 c64c 89ef e800 0000 00e9 edfe  .....L..........
00001100: ffff 48c7 c200 0000 0089 c64c 89ef e800  ..H........L....
00001110: 0000 00e9 d7fe ffff e800 0000 00b8 f4ff  ................
00001120: ffff e927 fbff ff66 0f1f 8400 0000 0000  ...'...f........
00001130: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00001140: e800 0000 0055 4889 e541 5641 5541 5453  .....UH..AVAUATS
00001150: 4883 e4f0 4883 ec40 6548 8b04 2528 0000  H...H..@eH..%(..
00001160: 0048 8944 2438 31c0 8b87 cc04 0000 48c1  .H.D$81.......H.
00001170: e005 4803 4618 4c8b 6818 488b 5810 498b  ..H.F.L.h.H.X.I.
00001180: 4508 48c7 0424 0000 0000 48c7 4424 1000  E.H..$....H.D$..
00001190: 0000 0048 c744 2418 0000 0000 48c7 4424  ...H.D$.....H.D$
000011a0: 2000 0000 0048 c744 2428 0000 0000 48c7   ....H.D$(....H.
000011b0: 4424 3000 0000 0048 c744 2408 0000 0000  D$0....H.D$.....
000011c0: 4885 c074 1d8b 9090 0000 0048 8d04 d500  H..t.......H....
000011d0: 0000 0048 29d0 488b 5620 488d 04c2 488b  ...H).H.V H...H.
000011e0: 4018 4531 c945 31c0 b900 0001 00ba 0000  @.E1.E1.........
000011f0: 0100 4889 c64c 89ef e800 0000 0041 89c4  ..H..L.......A..
00001200: 85c0 7518 450f b6b5 8c00 0000 4180 fe01  ..u.E.......A...
00001210: 0f87 0000 0000 4183 e601 7536 488b 4424  ......A...u6H.D$
00001220: 3865 482b 0425 2800 0000 0f85 ee00 0000  8eH+.%(.........
00001230: 488d 65e0 4489 e05b 415c 415d 415e 5d31  H.e.D..[A\A]A^]1
00001240: d231 c931 f631 ff45 31c0 4531 c9e9 0000  .1.1.1.E1.E1....
00001250: 0000 4889 de4c 89ea 488d 7c24 1031 dbe8  ..H..L..H.|$.1..
00001260: 0000 0000 eb1a 8b44 2408 8b54 240c 2b04  .......D$..T$.+.
00001270: 242b 5424 040f afc2 8d04 4048 8d5c 030c  $+T$......@H.\..
00001280: 4889 e648 8d7c 2410 e800 0000 0084 c075  H..H.|$........u
00001290: d548 85db 7486 4c8d b38f 0000 00be c00d  .H..t.L.........
000012a0: 0000 4983 e6f0 4c89 f7e8 0000 0000 4989  ..I...L.......I.
000012b0: 8548 0100 0048 85c0 7469 488b 4508 4833  .H...H..tiH.E.H3
000012c0: 0500 0000 00be c00d 0000 48ba eb83 b580  ..........H.....
000012d0: 4686 c861 480f afc2 48c1 e83c 488d 14c5  F..aH...H..<H...
000012e0: 0000 0000 4829 c248 89d0 ba28 0000 0048  ....H).H...(...H
000012f0: c1e0 0448 8bb8 0000 0000 e800 0000 0049  ...H...........I
00001300: 8985 5001 0000 4885 c074 184d 89b5 5801  ..P...H..t.M..X.
00001310: 0000 4989 9d60 0100 00e9 fefe ffff e800  ..I..`..........
00001320: 0000 0041 bcf4 ffff ffe9 eefe ffff 0000  ...A............
00001330: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00001340: e800 0000 0055 48c7 c200 0000 0048 c7c6  .....UH......H..
00001350: 0000 0000 48c7 c700 0000 0048 89e5 e800  ....H......H....
00001360: 0000 005d 31d2 31f6 31ff e900 0000 0000  ...]1.1.1.......
00001370: 9090 9090 9090 9090 9090 9090 9090 9090  ................
00001380: 5548 c7c7 0000 0000 4889 e5e8 0000 0000  UH......H.......
00001390: 5d31 ffe9 0000 0000 89ca be01 0000 0048  ]1.............H
000013a0: c7c7 0000 0000 894d b0e8 0000 0000 8b4d  .......M.......M
000013b0: b0e9 0000 0000 410f b6f6 48c7 c700 0000  ......A...H.....
000013c0: 00e8 0000 0000 e900 0000 0061 7070 6c65  ...........apple
000013d0: 7462 6472 6d00 6170 706c 6574 6264 726d  tbdrm.appletbdrm
000013e0: 2e63 0046 6169 6c65 6420 746f 2073 6967  .c.Failed to sig
000013f0: 6e61 6c20 7265 6164 696e 6573 730a 0046  nal readiness..F
00001400: 6169 6c65 6420 746f 2069 6e69 7469 616c  ailed to initial
00001410: 697a 6520 656e 636f 6465 720a 0046 6169  ize encoder..Fai
00001420: 6c65 6420 746f 2073 6574 7570 206d 6f64  led to setup mod
00001430: 6520 636f 6e66 6967 0a00 4661 696c 6564  e config..Failed
00001440: 2074 6f20 636c 6561 7220 6469 7370 6c61   to clear displa
00001450: 790a 0041 7070 6c65 2054 6f75 6368 2042  y..Apple Touch B
00001460: 6172 2044 524d 2044 7269 7665 7200 0000  ar DRM Driver...
00001470: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001480: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001490: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000014f0: 5b64 726d 5d20 2a45 5252 4f52 2a20 4661  [drm] *ERROR* Fa
00001500: 696c 6564 2074 6f20 7365 6e64 206d 6573  iled to send mes
00001510: 7361 6765 2028 2564 290a 0000 0000 0000  sage (%d).......
00001520: 5b64 726d 5d20 2a45 5252 4f52 2a20 4163  [drm] *ERROR* Ac
00001530: 7475 616c 2073 697a 6520 2825 6429 2064  tual size (%d) d
00001540: 6f65 736e 2774 206d 6174 6368 2065 7870  oesn't match exp
00001550: 6563 7465 6420 7369 7a65 2028 256c 7529  ected size (%lu)
00001560: 0a00 0000 0000 0000 5b64 726d 5d20 2a45  ........[drm] *E
00001570: 5252 4f52 2a20 4661 696c 6564 2074 6f20  RROR* Failed to 
00001580: 7265 6164 2072 6573 706f 6e73 6520 2825  read response (%
00001590: 6429 0a00 0000 0000 5b64 726d 5d20 2a45  d)......[drm] *E
000015a0: 5252 4f52 2a20 456e 636f 756e 7465 7265  RROR* Encountere
000015b0: 6420 756e 6578 7065 6374 6564 2072 6561  d unexpected rea
000015c0: 6469 6e65 7373 2073 6967 6e61 6c0a 0000  diness signal...
000015d0: 5b64 726d 5d20 2a45 5252 4f52 2a20 556e  [drm] *ERROR* Un
000015e0: 6578 7065 6374 6564 2072 6573 706f 6e73  expected respons
000015f0: 6520 6672 6f6d 2064 6576 6963 6520 2865  e from device (e
00001600: 7870 6563 7465 6420 2570 3463 6820 666f  xpected %p4ch fo
00001610: 756e 6420 2570 3463 6829 0a00 0000 0000  und %p4ch)......
00001620: 5b64 726d 5d20 2a45 5252 4f52 2a20 4661  [drm] *ERROR* Fa
00001630: 696c 6564 2074 6f20 7374 6172 7420 4350  iled to start CP
00001640: 5520 6672 616d 6562 7566 6665 7220 6163  U framebuffer ac
00001650: 6365 7373 2028 2564 290a 0000 0000 0000  cess (%d).......
00001660: 5b64 726d 5d20 2a45 5252 4f52 2a20 5265  [drm] *ERROR* Re
00001670: 7370 6f6e 7365 2074 696d 6573 7461 6d70  sponse timestamp
00001680: 2028 256c 6c75 2920 646f 6573 6e27 7420   (%llu) doesn't 
00001690: 6d61 7463 6820 7265 7175 6573 7420 7469  match request ti
000016a0: 6d65 7374 616d 7020 2825 6c6c 7529 0a00  mestamp (%llu)..
000016b0: 4661 696c 6564 2074 6f20 6669 6e64 2062  Failed to find b
000016c0: 756c 6b20 656e 6470 6f69 6e74 730a 0000  ulk endpoints...
000016d0: 5b64 726d 5d20 2a45 5252 4f52 2a20 456e  [drm] *ERROR* En
000016e0: 636f 756e 7465 7265 6420 756e 6578 7065  countered unexpe
000016f0: 6374 6564 2062 6974 7320 7065 7220 7069  cted bits per pi
00001700: 7865 6c20 7661 6c75 6520 2825 6429 0a00  xel value (%d)..
00001710: 5b64 726d 5d20 2a45 5252 4f52 2a20 456e  [drm] *ERROR* En
00001720: 636f 756e 7465 7265 6420 756e 6b6e 6f77  countered unknow
00001730: 6e20 7069 7865 6c20 666f 726d 6174 2028  n pixel format (
00001740: 2570 3463 6829 0a00 4661 696c 6564 2074  %p4ch)..Failed t
00001750: 6f20 6765 7420 6469 7370 6c61 7920 696e  o get display in
00001760: 666f 726d 6174 696f 6e0a 0000 0000 0000  formation.......
00001770: 4661 696c 6564 2074 6f20 696e 6974 6961  Failed to initia
00001780: 6c69 7a65 206d 6f64 6520 636f 6e66 6967  lize mode config
00001790: 7572 6174 696f 6e0a 0000 0000 0000 0000  uration.........
000017a0: 4661 696c 6564 2074 6f20 696e 6974 6961  Failed to initia
000017b0: 6c69 7a65 2075 6e69 7665 7273 616c 2070  lize universal p
000017c0: 6c61 6e65 206f 626a 6563 740a 0000 0000  lane object.....
000017d0: 4661 696c 6564 2074 6f20 696e 6974 6961  Failed to initia
000017e0: 6c69 7a65 2043 5254 4320 6f62 6a65 6374  lize CRTC object
000017f0: 0a00 0000 0000 0000 4661 696c 6564 2074  ........Failed t
00001800: 6f20 696e 6974 6961 6c69 7a65 2063 6f6e  o initialize con
00001810: 6e65 6374 6f72 0a00 4661 696c 6564 2074  nector..Failed t
00001820: 6f20 7365 7420 7061 6e65 6c20 6f72 6965  o set panel orie
00001830: 6e74 6174 696f 6e0a 0000 0000 0000 0000  ntation.........
00001840: 4661 696c 6564 2074 6f20 7365 7420 6e6f  Failed to set no
00001850: 6e2d 6465 736b 746f 7020 7072 6f70 6572  n-desktop proper
00001860: 7479 0a00 0000 0000 4661 696c 6564 2074  ty......Failed t
00001870: 6f20 696e 6974 6961 6c69 7a65 2073 696d  o initialize sim
00001880: 706c 6520 6469 7370 6c61 7920 7069 7065  ple display pipe
00001890: 0a00 0000 0000 0000 4661 696c 6564 2074  ........Failed t
000018a0: 6f20 7265 6769 7374 6572 2044 524d 2064  o register DRM d
000018b0: 6576 6963 650a 0000 2f75 7372 2f73 7263  evice.../usr/src
000018c0: 2f6c 696e 7578 2d68 6561 6465 7273 2d36  /linux-headers-6
000018d0: 2e31 332e 332d 312d 7432 2d6e 6f62 6c65  .13.3-1-t2-noble
000018e0: 2f69 6e63 6c75 6465 2f6c 696e 7578 2f73  /include/linux/s
000018f0: 6c61 622e 6800 0000 2f75 7372 2f73 7263  lab.h.../usr/src
00001900: 2f6c 696e 7578 2d68 6561 6465 7273 2d36  /linux-headers-6
00001910: 2e31 332e 332d 312d 7432 2d6e 6f62 6c65  .13.3-1-t2-noble
00001920: 2f69 6e63 6c75 6465 2f64 726d 2f64 726d  /include/drm/drm
00001930: 5f63 7274 632e 6800 6c69 6365 6e73 653d  _crtc.h.license=
00001940: 4750 4c00 6465 7363 7269 7074 696f 6e3d  GPL.description=
00001950: 4170 706c 6520 546f 7563 6820 4261 7220  Apple Touch Bar 
00001960: 4452 4d20 4472 6976 6572 0061 7574 686f  DRM Driver.autho
00001970: 723d 4b65 7265 6d20 4b61 7261 6261 7920  r=Kerem Karabay 
00001980: 3c6b 656b 7262 7940 676d 6169 6c2e 636f  <kekrby@gmail.co
00001990: 6d3e 0073 7263 7665 7273 696f 6e3d 3746  m>.srcversion=7F
000019a0: 3237 3834 3139 4337 3243 4641 3135 4341  278419C72CFA15CA
000019b0: 4242 3333 3500 616c 6961 733d 7573 623a  BB335.alias=usb:
000019c0: 7630 3541 4370 3833 3032 642a 6463 2a64  v05ACp8302d*dc*d
000019d0: 7363 2a64 702a 6963 3130 6973 632a 6970  sc*dp*ic10isc*ip
000019e0: 2a69 6e2a 0064 6570 656e 6473 3d00 6e61  *in*.depends=.na
000019f0: 6d65 3d61 7070 6c65 7462 6472 6d00 7265  me=appletbdrm.re
00001a00: 7470 6f6c 696e 653d 5900 7665 726d 6167  tpoline=Y.vermag
00001a10: 6963 3d36 2e31 332e 332d 312d 7432 2d6e  ic=6.13.3-1-t2-n
00001a20: 6f62 6c65 2053 4d50 2070 7265 656d 7074  oble SMP preempt
00001a30: 206d 6f64 5f75 6e6c 6f61 6420 6d6f 6476   mod_unload modv
00001a40: 6572 7369 6f6e 7320 0000 0000 0000 0000  ersions ........
00001a50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001a60: 8300 ac05 0283 0000 0000 0000 0010 0000  ................
00001a70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001a80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001a90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001aa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ab0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ac0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ad0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ae0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001af0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b20: 0000 0000 0000 0000 0100 0000 0000 0000  ................
00001b30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b50: 1300 0000 0000 0000 0000 0000 0000 0000  ................
00001b60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001b80: 0000 0000 0000 0000 2000 0000 0000 0000  ........ .......
00001b90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001bb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001bc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001bd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001be0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001bf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001c90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ca0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001cb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001cc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001cd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ce0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001cf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001d90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001da0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001dc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001dd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001de0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001df0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001e90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ea0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001eb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ec0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ed0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ee0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ef0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001fa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001fb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001fc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001fd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001fe0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001ff0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002020: 4247 3234 5852 3234 0000 0000 0000 0000  BG24XR24........
00002030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000020f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002150: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002180: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000021f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002200: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002210: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002220: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002230: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002240: 3738 99ec 0000 0000 7573 625f 6465 7265  78......usb_dere
00002250: 6769 7374 6572 0000 0000 0000 0000 0000  gister..........
00002260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002270: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002280: 0ec6 6c88 0000 0000 6472 6d5f 6465 765f  ..l.....drm_dev_
00002290: 656e 7465 7200 0000 0000 0000 0000 0000  enter...........
000022a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000022b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000022c0: 6593 3fb4 0000 0000 6b74 696d 655f 6765  e.?.....ktime_ge
000022d0: 7400 0000 0000 0000 0000 0000 0000 0000  t...............
000022e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000022f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002300: 36da 5e0d 0000 0000 6472 6d5f 6765 6d5f  6.^.....drm_gem_
00002310: 6662 5f62 6567 696e 5f63 7075 5f61 6363  fb_begin_cpu_acc
00002320: 6573 7300 0000 0000 0000 0000 0000 0000  ess.............
00002330: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002340: 0ab5 7d98 0000 0000 6472 6d5f 6765 6d5f  ..}.....drm_gem_
00002350: 6662 5f65 6e64 5f63 7075 5f61 6363 6573  fb_end_cpu_acces
00002360: 7300 0000 0000 0000 0000 0000 0000 0000  s...............
00002370: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002380: df34 a0e8 0000 0000 6472 6d5f 6465 765f  .4......drm_dev_
00002390: 6578 6974 0000 0000 0000 0000 0000 0000  exit............
000023a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000023b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000023c0: 7181 48df 0000 0000 6472 6d5f 6174 6f6d  q.H.....drm_atom
000023d0: 6963 5f68 656c 7065 725f 6461 6d61 6765  ic_helper_damage
000023e0: 5f69 7465 725f 696e 6974 0000 0000 0000  _iter_init......
000023f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002400: 062b 5c6b 0000 0000 6472 6d5f 6174 6f6d  .+\k....drm_atom
00002410: 6963 5f68 656c 7065 725f 6461 6d61 6765  ic_helper_damage
00002420: 5f69 7465 725f 6e65 7874 0000 0000 0000  _iter_next......
00002430: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002440: 1ab4 1a87 0000 0000 6472 6d5f 7265 6374  ........drm_rect
00002450: 5f69 6e74 6572 7365 6374 0000 0000 0000  _intersect......
00002460: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002470: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002480: 482c 8363 0000 0000 6472 6d5f 6662 5f6d  H,.c....drm_fb_m
00002490: 656d 6370 7900 0000 0000 0000 0000 0000  emcpy...........
000024a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000024b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000024c0: e9da a66d 0000 0000 6472 6d5f 6662 5f78  ...m....drm_fb_x
000024d0: 7267 6238 3838 385f 746f 5f62 6772 3838  rgb8888_to_bgr88
000024e0: 3800 0000 0000 0000 0000 0000 0000 0000  8...............
000024f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002500: 63a5 034c 0000 0000 7261 6e64 6f6d 5f6b  c..L....random_k
00002510: 6d61 6c6c 6f63 5f73 6565 6400 0000 0000  malloc_seed.....
00002520: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002530: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002540: 05cf a982 0000 0000 6b6d 616c 6c6f 635f  ........kmalloc_
00002550: 6361 6368 6573 0000 0000 0000 0000 0000  caches..........
00002560: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002570: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002580: 760e 5305 0000 0000 5f5f 6b6d 616c 6c6f  v.S.....__kmallo
00002590: 635f 6361 6368 655f 6e6f 7072 6f66 0000  c_cache_noprof..
000025a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000025b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000025c0: 07c3 8471 0000 0000 5f5f 6472 6d5f 6765  ...q....__drm_ge
000025d0: 6d5f 7265 7365 745f 7368 6164 6f77 5f70  m_reset_shadow_p
000025e0: 6c61 6e65 0000 0000 0000 0000 0000 0000  lane............
000025f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002600: ebed c793 0000 0000 7573 625f 6669 6e64  ........usb_find
00002610: 5f63 6f6d 6d6f 6e5f 656e 6470 6f69 6e74  _common_endpoint
00002620: 7300 0000 0000 0000 0000 0000 0000 0000  s...............
00002630: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002640: 12b7 3b39 0000 0000 5f5f 6465 766d 5f64  ..;9....__devm_d
00002650: 726d 5f64 6576 5f61 6c6c 6f63 0000 0000  rm_dev_alloc....
00002660: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002670: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002680: 9302 e603 0000 0000 6465 765f 6572 725f  ........dev_err_
00002690: 7072 6f62 6500 0000 0000 0000 0000 0000  probe...........
000026a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000026b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000026c0: 4238 0d5b 0000 0000 6472 6d6d 5f6d 6f64  B8.[....drmm_mod
000026d0: 655f 636f 6e66 6967 5f69 6e69 7400 0000  e_config_init...
000026e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000026f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002700: f5b6 0c88 0000 0000 6472 6d5f 756e 6976  ........drm_univ
00002710: 6572 7361 6c5f 706c 616e 655f 696e 6974  ersal_plane_init
00002720: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002730: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002740: a73c 6ac3 0000 0000 6472 6d5f 706c 616e  .<j.....drm_plan
00002750: 655f 656e 6162 6c65 5f66 625f 6461 6d61  e_enable_fb_dama
00002760: 6765 5f63 6c69 7073 0000 0000 0000 0000  ge_clips........
00002770: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002780: 1323 57f8 0000 0000 6472 6d5f 6372 7463  .#W.....drm_crtc
00002790: 5f69 6e69 745f 7769 7468 5f70 6c61 6e65  _init_with_plane
000027a0: 7300 0000 0000 0000 0000 0000 0000 0000  s...............
000027b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000027c0: d868 da56 0000 0000 6472 6d5f 656e 636f  .h.V....drm_enco
000027d0: 6465 725f 696e 6974 0000 0000 0000 0000  der_init........
000027e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000027f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002800: 6961 addc 0000 0000 6472 6d5f 636f 6e6e  ia......drm_conn
00002810: 6563 746f 725f 696e 6974 0000 0000 0000  ector_init......
00002820: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002830: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002840: 0b07 1d1a 0000 0000 6472 6d5f 636f 6e6e  ........drm_conn
00002850: 6563 746f 725f 7365 745f 7061 6e65 6c5f  ector_set_panel_
00002860: 6f72 6965 6e74 6174 696f 6e00 0000 0000  orientation.....
00002870: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002880: 5af1 558c 0000 0000 6472 6d5f 6f62 6a65  Z.U.....drm_obje
00002890: 6374 5f70 726f 7065 7274 795f 7365 745f  ct_property_set_
000028a0: 7661 6c75 6500 0000 0000 0000 0000 0000  value...........
000028b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000028c0: f151 8307 0000 0000 6472 6d5f 636f 6e6e  .Q......drm_conn
000028d0: 6563 746f 725f 6174 7461 6368 5f65 6e63  ector_attach_enc
000028e0: 6f64 6572 0000 0000 0000 0000 0000 0000  oder............
000028f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002900: 8013 5e2d 0000 0000 6472 6d5f 6d6f 6465  ..^-....drm_mode
00002910: 5f63 6f6e 6669 675f 7265 7365 7400 0000  _config_reset...
00002920: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002930: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002940: c145 3875 0000 0000 6472 6d5f 6465 765f  .E8u....drm_dev_
00002950: 7265 6769 7374 6572 0000 0000 0000 0000  register........
00002960: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002970: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002980: 61e5 48a6 0000 0000 5f5f 7562 7361 6e5f  a.H.....__ubsan_
00002990: 6861 6e64 6c65 5f73 6869 6674 5f6f 7574  handle_shift_out
000029a0: 5f6f 665f 626f 756e 6473 0000 0000 0000  _of_bounds......
000029b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000029c0: 17c3 92be 0000 0000 6472 6d5f 6174 6f6d  ........drm_atom
000029d0: 6963 5f68 656c 7065 725f 6368 6563 6b5f  ic_helper_check_
000029e0: 706c 616e 655f 7374 6174 6500 0000 0000  plane_state.....
000029f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002a00: 91c9 c552 0000 0000 5f5f 6b6d 616c 6c6f  ...R....__kmallo
00002a10: 635f 6e6f 7072 6f66 0000 0000 0000 0000  c_noprof........
00002a20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002a30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002a40: c6fa b154 0000 0000 5f5f 7562 7361 6e5f  ...T....__ubsan_
00002a50: 6861 6e64 6c65 5f6c 6f61 645f 696e 7661  handle_load_inva
00002a60: 6c69 645f 7661 6c75 6500 0000 0000 0000  lid_value.......
00002a70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002a80: 9ec0 f9ed 0000 0000 6472 6d5f 6765 6d5f  ........drm_gem_
00002a90: 7368 6d65 6d5f 7072 696d 655f 696d 706f  shmem_prime_impo
00002aa0: 7274 5f73 675f 7461 626c 6500 0000 0000  rt_sg_table.....
00002ab0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002ac0: eb4d bb88 0000 0000 6472 6d5f 6765 6d5f  .M......drm_gem_
00002ad0: 7368 6d65 6d5f 6475 6d62 5f63 7265 6174  shmem_dumb_creat
00002ae0: 6500 0000 0000 0000 0000 0000 0000 0000  e...............
00002af0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b00: 4a7a 62b5 0000 0000 6e6f 6f70 5f6c 6c73  Jzb.....noop_lls
00002b10: 6565 6b00 0000 0000 0000 0000 0000 0000  eek.............
00002b20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b40: fd4e a7ae 0000 0000 6472 6d5f 7265 6164  .N......drm_read
00002b50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002b80: c7ed ff53 0000 0000 6472 6d5f 706f 6c6c  ...S....drm_poll
00002b90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002bb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002bc0: 087e 9bf7 0000 0000 6472 6d5f 696f 6374  .~......drm_ioct
00002bd0: 6c00 0000 0000 0000 0000 0000 0000 0000  l...............
00002be0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002bf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002c00: a9c0 7b5a 0000 0000 6472 6d5f 636f 6d70  ..{Z....drm_comp
00002c10: 6174 5f69 6f63 746c 0000 0000 0000 0000  at_ioctl........
00002c20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002c30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002c40: 8289 f8a7 0000 0000 6472 6d5f 6765 6d5f  ........drm_gem_
00002c50: 6d6d 6170 0000 0000 0000 0000 0000 0000  mmap............
00002c60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002c70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002c80: 3fca d15f 0000 0000 6472 6d5f 6f70 656e  ?.._....drm_open
00002c90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002ca0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002cb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002cc0: b987 58b2 0000 0000 6472 6d5f 7265 6c65  ..X.....drm_rele
00002cd0: 6173 6500 0000 0000 0000 0000 0000 0000  ase.............
00002ce0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002cf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002d00: 362e 249a 0000 0000 6472 6d5f 656e 636f  6.$.....drm_enco
00002d10: 6465 725f 636c 6561 6e75 7000 0000 0000  der_cleanup.....
00002d20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002d30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002d40: d792 407d 0000 0000 6472 6d5f 6174 6f6d  ..@}....drm_atom
00002d50: 6963 5f68 656c 7065 725f 6372 7463 5f72  ic_helper_crtc_r
00002d60: 6573 6574 0000 0000 0000 0000 0000 0000  eset............
00002d70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002d80: 730e 3d2a 0000 0000 6472 6d5f 6372 7463  s.=*....drm_crtc
00002d90: 5f63 6c65 616e 7570 0000 0000 0000 0000  _cleanup........
00002da0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002dc0: 84cb 7c4b 0000 0000 6472 6d5f 6174 6f6d  ..|K....drm_atom
00002dd0: 6963 5f68 656c 7065 725f 7365 745f 636f  ic_helper_set_co
00002de0: 6e66 6967 0000 0000 0000 0000 0000 0000  nfig............
00002df0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002e00: 2b20 b2c8 0000 0000 6472 6d5f 6174 6f6d  + ......drm_atom
00002e10: 6963 5f68 656c 7065 725f 7061 6765 5f66  ic_helper_page_f
00002e20: 6c69 7000 0000 0000 0000 0000 0000 0000  lip.............
00002e30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002e40: 2314 8344 0000 0000 6472 6d5f 6174 6f6d  #..D....drm_atom
00002e50: 6963 5f68 656c 7065 725f 6372 7463 5f64  ic_helper_crtc_d
00002e60: 7570 6c69 6361 7465 5f73 7461 7465 0000  uplicate_state..
00002e70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002e80: 243d 51c9 0000 0000 6472 6d5f 6174 6f6d  $=Q.....drm_atom
00002e90: 6963 5f68 656c 7065 725f 6372 7463 5f64  ic_helper_crtc_d
00002ea0: 6573 7472 6f79 5f73 7461 7465 0000 0000  estroy_state....
00002eb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002ec0: 7f1a 8263 0000 0000 6472 6d5f 6174 6f6d  ...c....drm_atom
00002ed0: 6963 5f68 656c 7065 725f 636f 6e6e 6563  ic_helper_connec
00002ee0: 746f 725f 7265 7365 7400 0000 0000 0000  tor_reset.......
00002ef0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002f00: 72f8 0889 0000 0000 6472 6d5f 6865 6c70  r.......drm_help
00002f10: 6572 5f70 726f 6265 5f73 696e 676c 655f  er_probe_single_
00002f20: 636f 6e6e 6563 746f 725f 6d6f 6465 7300  connector_modes.
00002f30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002f40: 7003 c7b9 0000 0000 6472 6d5f 636f 6e6e  p.......drm_conn
00002f50: 6563 746f 725f 636c 6561 6e75 7000 0000  ector_cleanup...
00002f60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002f70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002f80: 1fc1 4f27 0000 0000 6472 6d5f 6174 6f6d  ..O'....drm_atom
00002f90: 6963 5f68 656c 7065 725f 636f 6e6e 6563  ic_helper_connec
00002fa0: 746f 725f 6475 706c 6963 6174 655f 7374  tor_duplicate_st
00002fb0: 6174 6500 0000 0000 0000 0000 0000 0000  ate.............
00002fc0: 74d1 188c 0000 0000 6472 6d5f 6174 6f6d  t.......drm_atom
00002fd0: 6963 5f68 656c 7065 725f 636f 6e6e 6563  ic_helper_connec
00002fe0: 746f 725f 6465 7374 726f 795f 7374 6174  tor_destroy_stat
00002ff0: 6500 0000 0000 0000 0000 0000 0000 0000  e...............
00003000: b789 a2cb 0000 0000 6472 6d5f 6765 6d5f  ........drm_gem_
00003010: 6662 5f63 7265 6174 655f 7769 7468 5f64  fb_create_with_d
00003020: 6972 7479 0000 0000 0000 0000 0000 0000  irty............
00003030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003040: e833 5446 0000 0000 6472 6d5f 6174 6f6d  .3TF....drm_atom
00003050: 6963 5f68 656c 7065 725f 6368 6563 6b00  ic_helper_check.
00003060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003080: c52e 6d0d 0000 0000 6472 6d5f 6174 6f6d  ..m.....drm_atom
00003090: 6963 5f68 656c 7065 725f 636f 6d6d 6974  ic_helper_commit
000030a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000030b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000030c0: 30e8 4123 0000 0000 6472 6d5f 6174 6f6d  0.A#....drm_atom
000030d0: 6963 5f68 656c 7065 725f 7570 6461 7465  ic_helper_update
000030e0: 5f70 6c61 6e65 0000 0000 0000 0000 0000  _plane..........
000030f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003100: 8b9f cb79 0000 0000 6472 6d5f 6174 6f6d  ...y....drm_atom
00003110: 6963 5f68 656c 7065 725f 6469 7361 626c  ic_helper_disabl
00003120: 655f 706c 616e 6500 0000 0000 0000 0000  e_plane.........
00003130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003140: 8844 a72e 0000 0000 6472 6d5f 706c 616e  .D......drm_plan
00003150: 655f 636c 6561 6e75 7000 0000 0000 0000  e_cleanup.......
00003160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003180: 8efc 6e3e 0000 0000 6472 6d5f 6765 6d5f  ..n>....drm_gem_
00003190: 6265 6769 6e5f 7368 6164 6f77 5f66 625f  begin_shadow_fb_
000031a0: 6163 6365 7373 0000 0000 0000 0000 0000  access..........
000031b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000031c0: b876 7013 0000 0000 6472 6d5f 6765 6d5f  .vp.....drm_gem_
000031d0: 656e 645f 7368 6164 6f77 5f66 625f 6163  end_shadow_fb_ac
000031e0: 6365 7373 0000 0000 0000 0000 0000 0000  cess............
000031f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003200: bb6d fbbd 0000 0000 5f5f 6665 6e74 7279  .m......__fentry
00003210: 5f5f 0000 0000 0000 0000 0000 0000 0000  __..............
00003220: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003230: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003240: 128e d33c 0000 0000 7573 625f 7265 6769  ...<....usb_regi
00003250: 7374 6572 5f64 7269 7665 7200 0000 0000  ster_driver.....
00003260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003270: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003280: ca39 825b 0000 0000 5f5f 7838 365f 7265  .9.[....__x86_re
00003290: 7475 726e 5f74 6875 6e6b 0000 0000 0000  turn_thunk......
000032a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000032b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000032c0: 4716 594e 0000 0000 6472 6d5f 6174 6f6d  G.YN....drm_atom
000032d0: 6963 5f68 656c 7065 725f 7368 7574 646f  ic_helper_shutdo
000032e0: 776e 0000 0000 0000 0000 0000 0000 0000  wn..............
000032f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003300: fe35 d0a1 0000 0000 6472 6d5f 6465 765f  .5......drm_dev_
00003310: 756e 706c 7567 0000 0000 0000 0000 0000  unplug..........
00003320: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003330: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003340: ca98 858a 0000 0000 6472 6d5f 6765 6d5f  ........drm_gem_
00003350: 7072 696d 655f 696d 706f 7274 5f64 6576  prime_import_dev
00003360: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003370: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003380: d2cf 6aed 0000 0000 7573 625f 6275 6c6b  ..j.....usb_bulk
00003390: 5f6d 7367 0000 0000 0000 0000 0000 0000  _msg............
000033a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000033b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000033c0: f38e 7d8a 0000 0000 5f64 6576 5f65 7272  ..}....._dev_err
000033d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000033e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000033f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003400: cbf6 fdf0 0000 0000 5f5f 7374 6163 6b5f  ........__stack_
00003410: 6368 6b5f 6661 696c 0000 0000 0000 0000  chk_fail........
00003420: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003430: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003440: e16a a611 0000 0000 6472 6d5f 636f 6e6e  .j......drm_conn
00003450: 6563 746f 725f 6865 6c70 6572 5f67 6574  ector_helper_get
00003460: 5f6d 6f64 6573 5f66 6978 6564 0000 0000  _modes_fixed....
00003470: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003480: 2850 66cb 0000 0000 6472 6d5f 6372 7463  (Pf.....drm_crtc
00003490: 5f68 656c 7065 725f 6d6f 6465 5f76 616c  _helper_mode_val
000034a0: 6964 5f66 6978 6564 0000 0000 0000 0000  id_fixed........
000034b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000034c0: ba0c 7a03 0000 0000 6b66 7265 6500 0000  ..z.....kfree...
000034d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000034e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000034f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003500: 660b e0c4 0000 0000 5f5f 6472 6d5f 6765  f.......__drm_ge
00003510: 6d5f 6465 7374 726f 795f 7368 6164 6f77  m_destroy_shadow
00003520: 5f70 6c61 6e65 5f73 7461 7465 0000 0000  _plane_state....
00003530: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003540: 2be1 ada8 0000 0000 6b6d 656d 6475 705f  +.......kmemdup_
00003550: 6e6f 7072 6f66 0000 0000 0000 0000 0000  noprof..........
00003560: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003570: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003580: 8a7f 9921 0000 0000 5f5f 6472 6d5f 6765  ...!....__drm_ge
00003590: 6d5f 6475 706c 6963 6174 655f 7368 6164  m_duplicate_shad
000035a0: 6f77 5f70 6c61 6e65 5f73 7461 7465 0000  ow_plane_state..
000035b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000035c0: 2e42 fedf 0000 0000 6d6f 6475 6c65 5f6c  .B......module_l
000035d0: 6179 6f75 7400 0000 0000 0000 0000 0000  ayout...........
000035e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000035f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003600: 0000 0000 0000 0000 0f02 0109 0000 0000  ................
00003610: 0000 0000 0002 0109 0000 0000 0000 0000  ................
00003620: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003630: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003640: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003650: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003660: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003670: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003680: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003690: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000036a0: 0047 4343 3a20 2855 6275 6e74 7520 3133  .GCC: (Ubuntu 13
000036b0: 2e33 2e30 2d36 7562 756e 7475 327e 3234  .3.0-6ubuntu2~24
000036c0: 2e30 3429 2031 332e 332e 3000 0047 4343  .04) 13.3.0..GCC
000036d0: 3a20 2855 6275 6e74 7520 3133 2e33 2e30  : (Ubuntu 13.3.0
000036e0: 2d36 7562 756e 7475 327e 3234 2e30 3429  -6ubuntu2~24.04)
000036f0: 2031 332e 332e 3000 0047 4343 3a20 2855   13.3.0..GCC: (U
00003700: 6275 6e74 7520 3133 2e33 2e30 2d36 7562  buntu 13.3.0-6ub
00003710: 756e 7475 327e 3234 2e30 3429 2031 332e  untu2~24.04) 13.
00003720: 332e 3000 0000 0000 0000 0000 0000 0000  3.0.............
00003730: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003740: 0000 0000 0000 0000 8603 0000 1300 0000  ................
00003750: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003760: 0000 0000 0000 0000 8603 0000 1300 0000  ................
00003770: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003780: 0000 0000 0000 0000 8603 0000 1300 0000  ................
00003790: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000037a0: 0000 0000 0000 0000 8603 0000 1300 0000  ................
000037b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000037c0: ffff 0000 276b 6d65 6d5f 6361 6368 6520  ....'kmem_cache 
000037d0: 2a5b 3139 5d5b 3134 5d27 0000 0000 0000  *[19][14]'......
000037e0: 0000 0000 0000 0000 5b01 0000 1b00 0000  ........[.......
000037f0: 0000 0000 0000 0000 0000 0600 275f 426f  ............'_Bo
00003800: 6f6c 2700 0000 0000 0000 0000 0000 0000  ol'.............
00003810: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003820: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003830: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003840: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003850: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003860: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003870: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003880: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003890: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000038f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003900: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003910: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003920: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003930: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003940: 0000 0000 0000 0000 ff04 0000 0b00 0000  ................
00003950: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003960: 0000 0a00 2775 6e73 6967 6e65 6420 696e  ....'unsigned in
00003970: 7427 0000 0000 0b00 2769 6e74 2700 0000  t'......'int'...
00003980: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003990: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000039a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000039b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000039c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000039d0: 0000 0000 0000 0000 6170 706c 6574 6264  ........appletbd
000039e0: 726d 0000 0000 0000 0000 0000 0000 0000  rm..............
000039f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003a90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003aa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ab0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ac0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ad0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ae0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003af0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003b90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003bb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003bc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003bd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003be0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003bf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003c90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ca0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003cb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003cc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003cd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ce0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003cf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003d90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003da0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003dc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003dd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003de0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003df0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003e90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ea0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003eb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ec0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ed0: 0000 0000 0000 0000 0000 0000 0300 0100  ................
00003ee0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003ef0: 0000 0000 0300 0200 0000 0000 0000 0000  ................
00003f00: 0000 0000 0000 0000 0000 0000 0300 0300  ................
00003f10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003f20: 0000 0000 0300 0500 0000 0000 0000 0000  ................
00003f30: 0000 0000 0000 0000 0000 0000 0300 0700  ................
00003f40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003f50: 0000 0000 0300 0900 0000 0000 0000 0000  ................
00003f60: 0000 0000 0000 0000 0000 0000 0300 0b00  ................
00003f70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003f80: 0000 0000 0300 0c00 0000 0000 0000 0000  ................
00003f90: 0000 0000 0000 0000 0000 0000 0300 0e00  ................
00003fa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003fb0: 0000 0000 0300 0f00 0000 0000 0000 0000  ................
00003fc0: 0000 0000 0000 0000 0000 0000 0300 1000  ................
00003fd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00003fe0: 0000 0000 0300 1200 0000 0000 0000 0000  ................
00003ff0: 0000 0000 0000 0000 0000 0000 0300 1400  ................
00004000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004010: 0000 0000 0300 1600 0000 0000 0000 0000  ................
00004020: 0000 0000 0000 0000 0000 0000 0300 1700  ................
00004030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004040: 0000 0000 0300 1900 0000 0000 0000 0000  ................
00004050: 0000 0000 0000 0000 0000 0000 0300 1b00  ................
00004060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004070: 0000 0000 0300 1c00 0000 0000 0000 0000  ................
00004080: 0000 0000 0000 0000 0000 0000 0300 1d00  ................
00004090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000040a0: 0000 0000 0300 1e00 0000 0000 0000 0000  ................
000040b0: 0000 0000 0000 0000 0000 0000 0300 2000  .............. .
000040c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000040d0: 0000 0000 0300 2200 0000 0000 0000 0000  ......".........
000040e0: 0000 0000 0000 0000 0000 0000 0300 2400  ..............$.
000040f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004100: 0000 0000 0300 2600 0000 0000 0000 0000  ......&.........
00004110: 0000 0000 0000 0000 0100 0000 0400 f1ff  ................
00004120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004130: 1100 0000 0100 0f00 c600 0000 0000 0000  ................
00004140: 0c00 0000 0000 0000 2a00 0000 0100 0f00  ........*.......
00004150: d200 0000 0000 0000 3f00 0000 0000 0000  ........?.......
00004160: 4200 0000 0100 0200 0000 0000 0000 0000  B...............
00004170: 1800 0000 0000 0000 4b00 0000 0100 0200  ........K.......
00004180: 1800 0000 0000 0000 1800 0000 0000 0000  ................
00004190: 5400 0000 0400 f1ff 0000 0000 0000 0000  T...............
000041a0: 0000 0000 0000 0000 db04 0000 0200 0500  ................
000041b0: 1000 0000 0000 0000 2f00 0000 0000 0000  ......../.......
000041c0: 6100 0000 0100 1e00 e000 0000 0000 0000  a...............
000041d0: 0801 0000 0000 0000 9d02 0000 0200 0300  ................
000041e0: 1000 0000 0000 0000 2100 0000 0000 0000  ........!.......
000041f0: b702 0000 0200 0300 5000 0000 0000 0000  ........P.......
00004200: 3100 0000 0000 0000 d302 0000 0200 0300  1...............
00004210: a000 0000 0000 0000 3500 0000 0000 0000  ........5.......
00004220: fc02 0000 0200 0300 f000 0000 0000 0000  ................
00004230: f800 0000 0000 0000 1a03 0000 0200 0300  ................
00004240: 0002 0000 0000 0000 8101 0000 0000 0000  ................
00004250: 3903 0000 0200 0300 a003 0000 0000 0000  9...............
00004260: 2200 0000 0000 0000 6503 0000 0200 0300  ".......e.......
00004270: e003 0000 0000 0000 2400 0000 0000 0000  ........$.......
00004280: 8d03 0000 0200 0300 2004 0000 0000 0000  ........ .......
00004290: 4300 0000 0000 0000 ba03 0000 0200 0300  C...............
000042a0: 8004 0000 0000 0000 7c00 0000 0000 0000  ........|.......
000042b0: fc04 0000 0200 0700 1000 0000 0000 0000  ................
000042c0: 1800 0000 0000 0000 e903 0000 0200 0300  ................
000042d0: 1005 0000 0000 0000 8903 0000 0000 0000  ................
000042e0: 1d04 0000 0200 0300 b008 0000 0000 0000  ................
000042f0: b000 0000 0000 0000 3704 0000 0200 0300  ........7.......
00004300: 7009 0000 0000 0000 7100 0000 0000 0000  p.......q.......
00004310: 6c04 0000 0200 0300 000a 0000 0000 0000  l...............
00004320: 8200 0000 0000 0000 9104 0000 0200 0300  ................
00004330: a00a 0000 0000 0000 e705 0000 0000 0000  ................
00004340: 7700 0000 0100 1000 4000 0000 0000 0000  w.......@.......
00004350: d000 0000 0000 0000 8d00 0000 0100 1000  ................
00004360: c005 0000 0000 0000 0800 0000 0000 0000  ................
00004370: ae00 0000 0100 1000 e004 0000 0000 0000  ................
00004380: 6800 0000 0000 0000 cd00 0000 0100 1000  h...............
00004390: 6005 0000 0000 0000 6000 0000 0000 0000  `.......`.......
000043a0: f300 0000 0100 1000 8002 0000 0000 0000  ................
000043b0: c000 0000 0000 0000 0901 0000 0100 1000  ................
000043c0: 4003 0000 0000 0000 8000 0000 0000 0000  @...............
000043d0: 2601 0000 0100 1000 4002 0000 0000 0000  &.......@.......
000043e0: 2800 0000 0000 0000 3f01 0000 0100 1000  (.......?.......
000043f0: a004 0000 0000 0000 4000 0000 0000 0000  ........@.......
00004400: 5c01 0000 0100 1000 2004 0000 0000 0000  \....... .......
00004410: 8000 0000 0000 0000 7701 0000 0100 1000  ........w.......
00004420: c003 0000 0000 0000 6000 0000 0000 0000  ........`.......
00004430: 9901 0000 0200 0900 0000 0000 0000 0000  ................
00004440: 1e00 0000 0000 0000 a804 0000 0200 0300  ................
00004450: a010 0000 0000 0000 ee01 0000 0000 0000  ................
00004460: af01 0000 0200 0900 1e00 0000 0000 0000  ................
00004470: 1500 0000 0000 0000 e101 0000 0100 0f00  ................
00004480: 0000 0000 0000 0000 0c00 0000 0000 0000  ................
00004490: f801 0000 0100 0f00 0c00 0000 0000 0000  ................
000044a0: 2700 0000 0000 0000 1302 0000 0100 0f00  '...............
000044b0: 3300 0000 0000 0000 2800 0000 0000 0000  3.......(.......
000044c0: 2902 0000 0100 2000 0000 0000 0000 0000  )..... .........
000044d0: 0800 0000 0000 0000 5502 0000 0100 2200  ........U.....".
000044e0: 0000 0000 0000 0000 0800 0000 0000 0000  ................
000044f0: 2306 0000 0100 1000 0000 0000 0000 0000  #...............
00004500: 4000 0000 0000 0000 7e02 0000 0100 1000  @.......~.......
00004510: 2001 0000 0000 0000 0801 0000 0000 0000   ...............
00004520: 9202 0000 0000 0b00 0b00 0000 0000 0000  ................
00004530: 0000 0000 0000 0000 9702 0000 0200 0300  ................
00004540: 0000 0000 0000 0000 1000 0000 0000 0000  ................
00004550: b102 0000 0200 0300 4000 0000 0000 0000  ........@.......
00004560: 1000 0000 0000 0000 cd02 0000 0200 0300  ................
00004570: 9000 0000 0000 0000 1000 0000 0000 0000  ................
00004580: f602 0000 0200 0300 e000 0000 0000 0000  ................
00004590: 1000 0000 0000 0000 1403 0000 0200 0300  ................
000045a0: f001 0000 0000 0000 1000 0000 0000 0000  ................
000045b0: 3303 0000 0200 0300 9003 0000 0000 0000  3...............
000045c0: 1000 0000 0000 0000 5f03 0000 0200 0300  ........_.......
000045d0: d003 0000 0000 0000 1000 0000 0000 0000  ................
000045e0: 8703 0000 0200 0300 1004 0000 0000 0000  ................
000045f0: 1000 0000 0000 0000 b403 0000 0200 0300  ................
00004600: 7004 0000 0000 0000 1000 0000 0000 0000  p...............
00004610: e303 0000 0200 0300 0005 0000 0000 0000  ................
00004620: 1000 0000 0000 0000 1704 0000 0200 0300  ................
00004630: a008 0000 0000 0000 1000 0000 0000 0000  ................
00004640: 3104 0000 0200 0300 6009 0000 0000 0000  1.......`.......
00004650: 1000 0000 0000 0000 6604 0000 0200 0300  ........f.......
00004660: f009 0000 0000 0000 1000 0000 0000 0000  ................
00004670: 8b04 0000 0200 0300 900a 0000 0000 0000  ................
00004680: 1000 0000 0000 0000 a204 0000 0200 0300  ................
00004690: 9010 0000 0000 0000 1000 0000 0000 0000  ................
000046a0: d504 0000 0200 0500 0000 0000 0000 0000  ................
000046b0: 1000 0000 0000 0000 f604 0000 0200 0700  ................
000046c0: 0000 0000 0000 0000 1000 0000 0000 0000  ................
000046d0: 1705 0000 0400 f1ff 0000 0000 0000 0000  ................
000046e0: 0000 0000 0000 0000 2805 0000 0100 0f00  ........(.......
000046f0: 5b00 0000 0000 0000 2300 0000 0000 0000  [.......#.......
00004700: 4205 0000 0100 0f00 7e00 0000 0000 0000  B.......~.......
00004710: 2f00 0000 0000 0000 5705 0000 0100 0f00  /.......W.......
00004720: ad00 0000 0000 0000 0900 0000 0000 0000  ................
00004730: 6e05 0000 0100 1600 0000 0000 0000 0000  n...............
00004740: c013 0000 0000 0000 7b05 0000 0100 0f00  ........{.......
00004750: b600 0000 0000 0000 1000 0000 0000 0000  ................
00004760: 8f05 0000 1000 0000 0000 0000 0000 0000  ................
00004770: 0000 0000 0000 0000 b305 0000 1000 0000  ................
00004780: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004790: bc05 0000 1000 0000 0000 0000 0000 0000  ................
000047a0: 0000 0000 0000 0000 c505 0000 1000 0000  ................
000047b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000047c0: e205 0000 1000 0000 0000 0000 0000 0000  ................
000047d0: 0000 0000 0000 0000 fc05 0000 1000 0000  ................
000047e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000047f0: 0a06 0000 1100 1000 0000 0000 0000 0000  ................
00004800: 4000 0000 0000 0000 3b06 0000 1000 0000  @.......;.......
00004810: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004820: 4c06 0000 1000 0000 0000 0000 0000 0000  L...............
00004830: 0000 0000 0000 0000 6d06 0000 1100 2400  ........m.....$.
00004840: 0000 0000 0000 0000 0005 0000 0000 0000  ................
00004850: 7b06 0000 1000 0000 0000 0000 0000 0000  {...............
00004860: 0000 0000 0000 0000 9506 0000 1000 0000  ................
00004870: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004880: b606 0000 1000 0000 0000 0000 0000 0000  ................
00004890: 0000 0000 0000 0000 d606 0000 1000 0000  ................
000048a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000048b0: f906 0000 1000 0000 0000 0000 0000 0000  ................
000048c0: 0000 0000 0000 0000 1407 0000 1000 0000  ................
000048d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000048e0: 2807 0000 1000 1b00 0000 0000 0000 0000  (...............
000048f0: 0000 0000 0000 0000 e109 0000 1200 0700  ................
00004900: 1000 0000 0000 0000 1800 0000 0000 0000  ................
00004910: 3a07 0000 1000 0000 0000 0000 0000 0000  :...............
00004920: 0000 0000 0000 0000 4007 0000 1000 0000  ........@.......
00004930: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004940: 6507 0000 1000 0000 0000 0000 0000 0000  e...............
00004950: 0000 0000 0000 0000 8a07 0000 1000 0000  ................
00004960: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004970: 9b07 0000 1000 0000 0000 0000 0000 0000  ................
00004980: 0000 0000 0000 0000 af07 0000 1000 0000  ................
00004990: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000049a0: c507 0000 1000 0000 0000 0000 0000 0000  ................
000049b0: 0000 0000 0000 0000 0709 0000 1200 0500  ................
000049c0: 1000 0000 0000 0000 2f00 0000 0000 0000  ......../.......
000049d0: d007 0000 1000 0000 0000 0000 0000 0000  ................
000049e0: 0000 0000 0000 0000 ed07 0000 1000 0000  ................
000049f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004a00: 0708 0000 1000 1b00 0000 0000 0000 0000  ................
00004a10: 0000 0000 0000 0000 1a08 0000 1000 0000  ................
00004a20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004a30: 3d08 0000 1000 0000 0000 0000 0000 0000  =...............
00004a40: 0000 0000 0000 0000 4a08 0000 1000 0000  ........J.......
00004a50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004a60: 5b08 0000 1000 0000 0000 0000 0000 0000  [...............
00004a70: 0000 0000 0000 0000 7408 0000 1000 0000  ........t.......
00004a80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004a90: 8c08 0000 1000 0000 0000 0000 0000 0000  ................
00004aa0: 0000 0000 0000 0000 b608 0000 1000 0000  ................
00004ab0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004ac0: c308 0000 1000 0000 0000 0000 0000 0000  ................
00004ad0: 0000 0000 0000 0000 cd08 0000 1000 0000  ................
00004ae0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004af0: df08 0000 1000 0000 0000 0000 0000 0000  ................
00004b00: 0000 0000 0000 0000 ee08 0000 1000 0000  ................
00004b10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004b20: 0109 0000 1200 0500 0000 0000 0000 0000  ................
00004b30: 1000 0000 0000 0000 1309 0000 1000 0000  ................
00004b40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004b50: 1c09 0000 1000 0000 0000 0000 0000 0000  ................
00004b60: 0000 0000 0000 0000 2809 0000 1000 0000  ........(.......
00004b70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004b80: 3109 0000 1000 0000 0000 0000 0000 0000  1...............
00004b90: 0000 0000 0000 0000 4e09 0000 1000 0000  ........N.......
00004ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004bb0: 6209 0000 1000 0000 0000 0000 0000 0000  b...............
00004bc0: 0000 0000 0000 0000 8109 0000 1000 0000  ................
00004bd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004be0: a509 0000 1000 0000 0000 0000 0000 0000  ................
00004bf0: 0000 0000 0000 0000 bf09 0000 1000 0000  ................
00004c00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004c10: ce09 0000 1000 0000 0000 0000 0000 0000  ................
00004c20: 0000 0000 0000 0000 db09 0000 1200 0700  ................
00004c30: 0000 0000 0000 0000 1000 0000 0000 0000  ................
00004c40: f009 0000 1000 0000 0000 0000 0000 0000  ................
00004c50: 0000 0000 0000 0000 050a 0000 1000 0000  ................
00004c60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004c70: 290a 0000 1000 0000 0000 0000 0000 0000  )...............
00004c80: 0000 0000 0000 0000 3c0a 0000 1000 0000  ........<.......
00004c90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004ca0: 4f0a 0000 1000 0000 0000 0000 0000 0000  O...............
00004cb0: 0000 0000 0000 0000 6c0a 0000 1000 0000  ........l.......
00004cc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004cd0: 7b0a 0000 1000 0000 0000 0000 0000 0000  {...............
00004ce0: 0000 0000 0000 0000 a70a 0000 1000 0000  ................
00004cf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004d00: bd0a 0000 1000 0000 0000 0000 0000 0000  ................
00004d10: 0000 0000 0000 0000 d60a 0000 1000 0000  ................
00004d20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004d30: f30a 0000 1000 0000 0000 0000 0000 0000  ................
00004d40: 0000 0000 0000 0000 010b 0000 1000 0000  ................
00004d50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004d60: 240b 0000 1000 0000 0000 0000 0000 0000  $...............
00004d70: 0000 0000 0000 0000 420b 0000 1000 0000  ........B.......
00004d80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004d90: 530b 0000 1000 0000 0000 0000 0000 0000  S...............
00004da0: 0000 0000 0000 0000 6f0b 0000 1000 0000  ........o.......
00004db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004dc0: 860b 0000 1000 0000 0000 0000 0000 0000  ................
00004dd0: 0000 0000 0000 0000 900b 0000 1000 0000  ................
00004de0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004df0: b80b 0000 1000 0000 0000 0000 0000 0000  ................
00004e00: 0000 0000 0000 0000 d10b 0000 1000 0000  ................
00004e10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004e20: ee0b 0000 1000 0000 0000 0000 0000 0000  ................
00004e30: 0000 0000 0000 0000 0a0c 0000 1000 0000  ................
00004e40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004e50: 2c0c 0000 1000 0000 0000 0000 0000 0000  ,...............
00004e60: 0000 0000 0000 0000 460c 0000 1000 0000  ........F.......
00004e70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004e80: 540c 0000 1000 0000 0000 0000 0000 0000  T...............
00004e90: 0000 0000 0000 0000 6a0c 0000 1000 0000  ........j.......
00004ea0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004eb0: 910c 0000 1000 0000 0000 0000 0000 0000  ................
00004ec0: 0000 0000 0000 0000 b30c 0000 1000 0000  ................
00004ed0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004ee0: d80c 0000 1000 0000 0000 0000 0000 0000  ................
00004ef0: 0000 0000 0000 0000 ff0c 0000 1000 0000  ................
00004f00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004f10: 1e0d 0000 1000 0000 0000 0000 0000 0000  ................
00004f20: 0000 0000 0000 0000 2f0d 0000 1000 0000  ......../.......
00004f30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004f40: 400d 0000 1000 0000 0000 0000 0000 0000  @...............
00004f50: 0000 0000 0000 0000 4f0d 0000 1000 0000  ........O.......
00004f60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00004f70: 006d 6f64 756c 652d 636f 6d6d 6f6e 2e63  .module-common.c
00004f80: 005f 5f55 4e49 5155 455f 4944 5f72 6574  .__UNIQUE_ID_ret
00004f90: 706f 6c69 6e65 3437 3100 5f5f 554e 4951  poline471.__UNIQ
00004fa0: 5545 5f49 445f 7665 726d 6167 6963 3437  UE_ID_vermagic47
00004fb0: 3000 5f6e 6f74 655f 3139 005f 6e6f 7465  0._note_19._note
00004fc0: 5f31 3800 6170 706c 6574 6264 726d 2e63  _18.appletbdrm.c
00004fd0: 0061 7070 6c65 7462 6472 6d5f 7573 625f  .appletbdrm_usb_
00004fe0: 6472 6976 6572 0061 7070 6c65 7462 6472  driver.appletbdr
00004ff0: 6d5f 6472 6d5f 6472 6976 6572 0061 7070  m_drm_driver.app
00005000: 6c65 7462 6472 6d5f 7072 696d 6172 795f  letbdrm_primary_
00005010: 706c 616e 655f 666f 726d 6174 7300 6170  plane_formats.ap
00005020: 706c 6574 6264 726d 5f70 7269 6d61 7279  pletbdrm_primary
00005030: 5f70 6c61 6e65 5f66 756e 6373 0061 7070  _plane_funcs.app
00005040: 6c65 7462 6472 6d5f 7072 696d 6172 795f  letbdrm_primary_
00005050: 706c 616e 655f 6865 6c70 6572 5f66 756e  plane_helper_fun
00005060: 6373 0061 7070 6c65 7462 6472 6d5f 6372  cs.appletbdrm_cr
00005070: 7463 5f66 756e 6373 0061 7070 6c65 7462  tc_funcs.appletb
00005080: 6472 6d5f 6372 7463 5f68 656c 7065 725f  drm_crtc_helper_
00005090: 6675 6e63 7300 6170 706c 6574 6264 726d  funcs.appletbdrm
000050a0: 5f65 6e63 6f64 6572 5f66 756e 6373 0061  _encoder_funcs.a
000050b0: 7070 6c65 7462 6472 6d5f 6d6f 6465 5f63  ppletbdrm_mode_c
000050c0: 6f6e 6669 675f 6675 6e63 7300 6170 706c  onfig_funcs.appl
000050d0: 6574 6264 726d 5f63 6f6e 6e65 6374 6f72  etbdrm_connector
000050e0: 5f66 756e 6373 0061 7070 6c65 7462 6472  _funcs.appletbdr
000050f0: 6d5f 636f 6e6e 6563 746f 725f 6865 6c70  m_connector_help
00005100: 6572 5f66 756e 6373 0061 7070 6c65 7462  er_funcs.appletb
00005110: 6472 6d5f 7072 6f62 652e 636f 6c64 0061  drm_probe.cold.a
00005120: 7070 6c65 7462 6472 6d5f 7072 696d 6172  ppletbdrm_primar
00005130: 795f 706c 616e 655f 6865 6c70 6572 5f61  y_plane_helper_a
00005140: 746f 6d69 635f 6368 6563 6b2e 636f 6c64  tomic_check.cold
00005150: 005f 5f55 4e49 5155 455f 4944 5f6c 6963  .__UNIQUE_ID_lic
00005160: 656e 7365 3536 3000 5f5f 554e 4951 5545  ense560.__UNIQUE
00005170: 5f49 445f 6465 7363 7269 7074 696f 6e35  _ID_description5
00005180: 3539 005f 5f55 4e49 5155 455f 4944 5f61  59.__UNIQUE_ID_a
00005190: 7574 686f 7235 3538 005f 5f55 4e49 5155  uthor558.__UNIQU
000051a0: 455f 4944 5f5f 5f61 6464 7265 7373 6162  E_ID___addressab
000051b0: 6c65 5f63 6c65 616e 7570 5f6d 6f64 756c  le_cleanup_modul
000051c0: 6535 3537 005f 5f55 4e49 5155 455f 4944  e557.__UNIQUE_ID
000051d0: 5f5f 5f61 6464 7265 7373 6162 6c65 5f69  ___addressable_i
000051e0: 6e69 745f 6d6f 6475 6c65 3535 3600 6170  nit_module556.ap
000051f0: 706c 6574 6264 726d 5f64 726d 5f66 6f70  pletbdrm_drm_fop
00005200: 7300 2e4c 4336 005f 5f70 6678 5f61 7070  s..LC6.__pfx_app
00005210: 6c65 7462 6472 6d5f 7368 7574 646f 776e  letbdrm_shutdown
00005220: 005f 5f70 6678 5f61 7070 6c65 7462 6472  .__pfx_appletbdr
00005230: 6d5f 6469 7363 6f6e 6e65 6374 005f 5f70  m_disconnect.__p
00005240: 6678 5f61 7070 6c65 7462 6472 6d5f 6472  fx_appletbdrm_dr
00005250: 6976 6572 5f67 656d 5f70 7269 6d65 5f69  iver_gem_prime_i
00005260: 6d70 6f72 7400 5f5f 7066 785f 6170 706c  mport.__pfx_appl
00005270: 6574 6264 726d 5f73 656e 645f 7265 7175  etbdrm_send_requ
00005280: 6573 7400 5f5f 7066 785f 6170 706c 6574  est.__pfx_applet
00005290: 6264 726d 5f72 6561 645f 7265 7370 6f6e  bdrm_read_respon
000052a0: 7365 005f 5f70 6678 5f61 7070 6c65 7462  se.__pfx_appletb
000052b0: 6472 6d5f 636f 6e6e 6563 746f 725f 6865  drm_connector_he
000052c0: 6c70 6572 5f67 6574 5f6d 6f64 6573 005f  lper_get_modes._
000052d0: 5f70 6678 5f61 7070 6c65 7462 6472 6d5f  _pfx_appletbdrm_
000052e0: 6372 7463 5f68 656c 7065 725f 6d6f 6465  crtc_helper_mode
000052f0: 5f76 616c 6964 005f 5f70 6678 5f61 7070  _valid.__pfx_app
00005300: 6c65 7462 6472 6d5f 7072 696d 6172 795f  letbdrm_primary_
00005310: 706c 616e 655f 6465 7374 726f 795f 7374  plane_destroy_st
00005320: 6174 6500 5f5f 7066 785f 6170 706c 6574  ate.__pfx_applet
00005330: 6264 726d 5f70 7269 6d61 7279 5f70 6c61  bdrm_primary_pla
00005340: 6e65 5f64 7570 6c69 6361 7465 5f73 7461  ne_duplicate_sta
00005350: 7465 005f 5f70 6678 5f61 7070 6c65 7462  te.__pfx_appletb
00005360: 6472 6d5f 7072 696d 6172 795f 706c 616e  drm_primary_plan
00005370: 655f 6865 6c70 6572 5f61 746f 6d69 635f  e_helper_atomic_
00005380: 7570 6461 7465 005f 5f70 6678 5f61 7070  update.__pfx_app
00005390: 6c65 7462 6472 6d5f 7365 6e64 5f6d 7367  letbdrm_send_msg
000053a0: 005f 5f70 6678 5f61 7070 6c65 7462 6472  .__pfx_appletbdr
000053b0: 6d5f 7072 696d 6172 795f 706c 616e 655f  m_primary_plane_
000053c0: 6865 6c70 6572 5f61 746f 6d69 635f 6469  helper_atomic_di
000053d0: 7361 626c 6500 5f5f 7066 785f 6170 706c  sable.__pfx_appl
000053e0: 6574 6264 726d 5f70 7269 6d61 7279 5f70  etbdrm_primary_p
000053f0: 6c61 6e65 5f72 6573 6574 005f 5f70 6678  lane_reset.__pfx
00005400: 5f61 7070 6c65 7462 6472 6d5f 7072 6f62  _appletbdrm_prob
00005410: 6500 5f5f 7066 785f 6170 706c 6574 6264  e.__pfx_appletbd
00005420: 726d 5f70 7269 6d61 7279 5f70 6c61 6e65  rm_primary_plane
00005430: 5f68 656c 7065 725f 6174 6f6d 6963 5f63  _helper_atomic_c
00005440: 6865 636b 005f 5f70 6678 5f61 7070 6c65  heck.__pfx_apple
00005450: 7462 6472 6d5f 7573 625f 6472 6976 6572  tbdrm_usb_driver
00005460: 5f69 6e69 7400 5f5f 7066 785f 6170 706c  _init.__pfx_appl
00005470: 6574 6264 726d 5f75 7362 5f64 7269 7665  etbdrm_usb_drive
00005480: 725f 6578 6974 0061 7070 6c65 7462 6472  r_exit.appletbdr
00005490: 6d2e 6d6f 642e 6300 5f5f 554e 4951 5545  m.mod.c.__UNIQUE
000054a0: 5f49 445f 7372 6376 6572 7369 6f6e 3437  _ID_srcversion47
000054b0: 3300 5f5f 554e 4951 5545 5f49 445f 616c  3.__UNIQUE_ID_al
000054c0: 6961 7334 3732 005f 5f55 4e49 5155 455f  ias472.__UNIQUE_
000054d0: 4944 5f64 6570 656e 6473 3437 3100 5f5f  ID_depends471.__
000054e0: 5f5f 7665 7273 696f 6e73 005f 5f55 4e49  __versions.__UNI
000054f0: 5155 455f 4944 5f6e 616d 6534 3730 0064  QUE_ID_name470.d
00005500: 726d 5f63 6f6e 6e65 6374 6f72 5f73 6574  rm_connector_set
00005510: 5f70 616e 656c 5f6f 7269 656e 7461 7469  _panel_orientati
00005520: 6f6e 0064 726d 5f6f 7065 6e00 6472 6d5f  on.drm_open.drm_
00005530: 706f 6c6c 005f 5f64 726d 5f67 656d 5f72  poll.__drm_gem_r
00005540: 6573 6574 5f73 6861 646f 775f 706c 616e  eset_shadow_plan
00005550: 6500 6472 6d5f 6765 6d5f 6662 5f65 6e64  e.drm_gem_fb_end
00005560: 5f63 7075 5f61 6363 6573 7300 6472 6d5f  _cpu_access.drm_
00005570: 6465 765f 656e 7465 7200 5f5f 6d6f 645f  dev_enter.__mod_
00005580: 6465 7669 6365 5f74 6162 6c65 5f5f 7573  device_table__us
00005590: 625f 5f61 7070 6c65 7462 6472 6d5f 7573  b__appletbdrm_us
000055a0: 625f 6964 5f74 6162 6c65 005f 5f6b 6d61  b_id_table.__kma
000055b0: 6c6c 6f63 5f6e 6f70 726f 6600 6472 6d5f  lloc_noprof.drm_
000055c0: 706c 616e 655f 656e 6162 6c65 5f66 625f  plane_enable_fb_
000055d0: 6461 6d61 6765 5f63 6c69 7073 005f 5f74  damage_clips.__t
000055e0: 6869 735f 6d6f 6475 6c65 0064 726d 5f67  his_module.drm_g
000055f0: 656d 5f73 686d 656d 5f64 756d 625f 6372  em_shmem_dumb_cr
00005600: 6561 7465 0064 726d 5f63 7274 635f 6865  eate.drm_crtc_he
00005610: 6c70 6572 5f6d 6f64 655f 7661 6c69 645f  lper_mode_valid_
00005620: 6669 7865 6400 6472 6d5f 6174 6f6d 6963  fixed.drm_atomic
00005630: 5f68 656c 7065 725f 6469 7361 626c 655f  _helper_disable_
00005640: 706c 616e 6500 6472 6d5f 6174 6f6d 6963  plane.drm_atomic
00005650: 5f68 656c 7065 725f 6461 6d61 6765 5f69  _helper_damage_i
00005660: 7465 725f 6e65 7874 0064 726d 5f61 746f  ter_next.drm_ato
00005670: 6d69 635f 6865 6c70 6572 5f73 6875 7464  mic_helper_shutd
00005680: 6f77 6e00 7573 625f 7265 6769 7374 6572  own.usb_register
00005690: 5f64 7269 7665 7200 5f5f 7374 6f70 5f61  _driver.__stop_a
000056a0: 6c6c 6f63 5f74 6167 7300 6b66 7265 6500  lloc_tags.kfree.
000056b0: 6472 6d5f 636f 6e6e 6563 746f 725f 6865  drm_connector_he
000056c0: 6c70 6572 5f67 6574 5f6d 6f64 6573 5f66  lper_get_modes_f
000056d0: 6978 6564 0064 726d 5f61 746f 6d69 635f  ixed.drm_atomic_
000056e0: 6865 6c70 6572 5f63 7274 635f 6465 7374  helper_crtc_dest
000056f0: 726f 795f 7374 6174 6500 6472 6d5f 6372  roy_state.drm_cr
00005700: 7463 5f63 6c65 616e 7570 0064 726d 5f65  tc_cleanup.drm_e
00005710: 6e63 6f64 6572 5f63 6c65 616e 7570 0064  ncoder_cleanup.d
00005720: 726d 6d5f 6d6f 6465 5f63 6f6e 6669 675f  rmm_mode_config_
00005730: 696e 6974 005f 5f66 656e 7472 795f 5f00  init.__fentry__.
00005740: 6472 6d5f 636f 6e6e 6563 746f 725f 6174  drm_connector_at
00005750: 7461 6368 5f65 6e63 6f64 6572 0075 7362  tach_encoder.usb
00005760: 5f66 696e 645f 636f 6d6d 6f6e 5f65 6e64  _find_common_end
00005770: 706f 696e 7473 005f 5f73 7461 7274 5f61  points.__start_a
00005780: 6c6c 6f63 5f74 6167 7300 6472 6d5f 6174  lloc_tags.drm_at
00005790: 6f6d 6963 5f68 656c 7065 725f 6461 6d61  omic_helper_dama
000057a0: 6765 5f69 7465 725f 696e 6974 0075 7362  ge_iter_init.usb
000057b0: 5f62 756c 6b5f 6d73 6700 5f5f 7374 6163  _bulk_msg.__stac
000057c0: 6b5f 6368 6b5f 6661 696c 0064 726d 5f61  k_chk_fail.drm_a
000057d0: 746f 6d69 635f 6865 6c70 6572 5f63 6f6d  tomic_helper_com
000057e0: 6d69 7400 6472 6d5f 6174 6f6d 6963 5f68  mit.drm_atomic_h
000057f0: 656c 7065 725f 6368 6563 6b00 6472 6d5f  elper_check.drm_
00005800: 6174 6f6d 6963 5f68 656c 7065 725f 636f  atomic_helper_co
00005810: 6e6e 6563 746f 725f 6465 7374 726f 795f  nnector_destroy_
00005820: 7374 6174 6500 6472 6d5f 6765 6d5f 6d6d  state.drm_gem_mm
00005830: 6170 0064 726d 5f69 6f63 746c 0064 726d  ap.drm_ioctl.drm
00005840: 5f70 6c61 6e65 5f63 6c65 616e 7570 0064  _plane_cleanup.d
00005850: 726d 5f64 6576 5f75 6e70 6c75 6700 6472  rm_dev_unplug.dr
00005860: 6d5f 636f 6e6e 6563 746f 725f 696e 6974  m_connector_init
00005870: 005f 5f70 6678 5f69 6e69 745f 6d6f 6475  .__pfx_init_modu
00005880: 6c65 005f 6465 765f 6572 7200 6e6f 6f70  le._dev_err.noop
00005890: 5f6c 6c73 6565 6b00 6472 6d5f 7265 6164  _llseek.drm_read
000058a0: 0064 726d 5f67 656d 5f66 625f 6372 6561  .drm_gem_fb_crea
000058b0: 7465 5f77 6974 685f 6469 7274 7900 7261  te_with_dirty.ra
000058c0: 6e64 6f6d 5f6b 6d61 6c6c 6f63 5f73 6565  ndom_kmalloc_see
000058d0: 6400 6472 6d5f 6765 6d5f 6265 6769 6e5f  d.drm_gem_begin_
000058e0: 7368 6164 6f77 5f66 625f 6163 6365 7373  shadow_fb_access
000058f0: 0064 726d 5f61 746f 6d69 635f 6865 6c70  .drm_atomic_help
00005900: 6572 5f63 6865 636b 5f70 6c61 6e65 5f73  er_check_plane_s
00005910: 7461 7465 0064 726d 5f63 7274 635f 696e  tate.drm_crtc_in
00005920: 6974 5f77 6974 685f 706c 616e 6573 0075  it_with_planes.u
00005930: 7362 5f64 6572 6567 6973 7465 7200 6472  sb_deregister.dr
00005940: 6d5f 6465 765f 6578 6974 005f 5f70 6678  m_dev_exit.__pfx
00005950: 5f63 6c65 616e 7570 5f6d 6f64 756c 6500  _cleanup_module.
00005960: 5f5f 6465 766d 5f64 726d 5f64 6576 5f61  __devm_drm_dev_a
00005970: 6c6c 6f63 0064 726d 5f67 656d 5f73 686d  lloc.drm_gem_shm
00005980: 656d 5f70 7269 6d65 5f69 6d70 6f72 745f  em_prime_import_
00005990: 7367 5f74 6162 6c65 0064 726d 5f72 6563  sg_table.drm_rec
000059a0: 745f 696e 7465 7273 6563 7400 5f5f 7838  t_intersect.__x8
000059b0: 365f 7265 7475 726e 5f74 6875 6e6b 0064  6_return_thunk.d
000059c0: 726d 5f61 746f 6d69 635f 6865 6c70 6572  rm_atomic_helper
000059d0: 5f73 6574 5f63 6f6e 6669 6700 6b6d 656d  _set_config.kmem
000059e0: 6475 705f 6e6f 7072 6f66 0064 726d 5f61  dup_noprof.drm_a
000059f0: 746f 6d69 635f 6865 6c70 6572 5f63 6f6e  tomic_helper_con
00005a00: 6e65 6374 6f72 5f64 7570 6c69 6361 7465  nector_duplicate
00005a10: 5f73 7461 7465 0064 726d 5f63 6f6e 6e65  _state.drm_conne
00005a20: 6374 6f72 5f63 6c65 616e 7570 0064 726d  ctor_cleanup.drm
00005a30: 5f75 6e69 7665 7273 616c 5f70 6c61 6e65  _universal_plane
00005a40: 5f69 6e69 7400 6472 6d5f 6174 6f6d 6963  _init.drm_atomic
00005a50: 5f68 656c 7065 725f 6372 7463 5f72 6573  _helper_crtc_res
00005a60: 6574 0064 726d 5f66 625f 6d65 6d63 7079  et.drm_fb_memcpy
00005a70: 005f 5f75 6273 616e 5f68 616e 646c 655f  .__ubsan_handle_
00005a80: 7368 6966 745f 6f75 745f 6f66 5f62 6f75  shift_out_of_bou
00005a90: 6e64 7300 6472 6d5f 6f62 6a65 6374 5f70  nds.drm_object_p
00005aa0: 726f 7065 7274 795f 7365 745f 7661 6c75  roperty_set_valu
00005ab0: 6500 6472 6d5f 656e 636f 6465 725f 696e  e.drm_encoder_in
00005ac0: 6974 0064 726d 5f67 656d 5f66 625f 6265  it.drm_gem_fb_be
00005ad0: 6769 6e5f 6370 755f 6163 6365 7373 005f  gin_cpu_access._
00005ae0: 5f6b 6d61 6c6c 6f63 5f63 6163 6865 5f6e  _kmalloc_cache_n
00005af0: 6f70 726f 6600 6b74 696d 655f 6765 7400  oprof.ktime_get.
00005b00: 6472 6d5f 6865 6c70 6572 5f70 726f 6265  drm_helper_probe
00005b10: 5f73 696e 676c 655f 636f 6e6e 6563 746f  _single_connecto
00005b20: 725f 6d6f 6465 7300 6472 6d5f 6765 6d5f  r_modes.drm_gem_
00005b30: 7072 696d 655f 696d 706f 7274 5f64 6576  prime_import_dev
00005b40: 0064 726d 5f67 656d 5f65 6e64 5f73 6861  .drm_gem_end_sha
00005b50: 646f 775f 6662 5f61 6363 6573 7300 6472  dow_fb_access.dr
00005b60: 6d5f 6174 6f6d 6963 5f68 656c 7065 725f  m_atomic_helper_
00005b70: 7061 6765 5f66 6c69 7000 6472 6d5f 6174  page_flip.drm_at
00005b80: 6f6d 6963 5f68 656c 7065 725f 636f 6e6e  omic_helper_conn
00005b90: 6563 746f 725f 7265 7365 7400 6472 6d5f  ector_reset.drm_
00005ba0: 6662 5f78 7267 6238 3838 385f 746f 5f62  fb_xrgb8888_to_b
00005bb0: 6772 3838 3800 6465 765f 6572 725f 7072  gr888.dev_err_pr
00005bc0: 6f62 6500 6472 6d5f 6d6f 6465 5f63 6f6e  obe.drm_mode_con
00005bd0: 6669 675f 7265 7365 7400 5f5f 6472 6d5f  fig_reset.__drm_
00005be0: 6765 6d5f 6475 706c 6963 6174 655f 7368  gem_duplicate_sh
00005bf0: 6164 6f77 5f70 6c61 6e65 5f73 7461 7465  adow_plane_state
00005c00: 005f 5f75 6273 616e 5f68 616e 646c 655f  .__ubsan_handle_
00005c10: 6c6f 6164 5f69 6e76 616c 6964 5f76 616c  load_invalid_val
00005c20: 7565 005f 5f64 726d 5f67 656d 5f64 6573  ue.__drm_gem_des
00005c30: 7472 6f79 5f73 6861 646f 775f 706c 616e  troy_shadow_plan
00005c40: 655f 7374 6174 6500 6472 6d5f 6174 6f6d  e_state.drm_atom
00005c50: 6963 5f68 656c 7065 725f 6372 7463 5f64  ic_helper_crtc_d
00005c60: 7570 6c69 6361 7465 5f73 7461 7465 0064  uplicate_state.d
00005c70: 726d 5f61 746f 6d69 635f 6865 6c70 6572  rm_atomic_helper
00005c80: 5f75 7064 6174 655f 706c 616e 6500 6472  _update_plane.dr
00005c90: 6d5f 636f 6d70 6174 5f69 6f63 746c 0064  m_compat_ioctl.d
00005ca0: 726d 5f64 6576 5f72 6567 6973 7465 7200  rm_dev_register.
00005cb0: 6b6d 616c 6c6f 635f 6361 6368 6573 0064  kmalloc_caches.d
00005cc0: 726d 5f72 656c 6561 7365 0000 0000 0000  rm_release......
00005cd0: 1100 0000 0000 0000 0400 0000 7400 0000  ............t...
00005ce0: fcff ffff ffff ffff 2500 0000 0000 0000  ........%.......
00005cf0: 0400 0000 6a00 0000 fcff ffff ffff ffff  ....j...........
00005d00: 2d00 0000 0000 0000 0400 0000 9300 0000  -...............
00005d10: fcff ffff ffff ffff 5100 0000 0000 0000  ........Q.......
00005d20: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00005d30: 6900 0000 0000 0000 0400 0000 8200 0000  i...............
00005d40: fcff ffff ffff ffff 7100 0000 0000 0000  ........q.......
00005d50: 0400 0000 6a00 0000 fcff ffff ffff ffff  ....j...........
00005d60: 7d00 0000 0000 0000 0400 0000 9300 0000  }...............
00005d70: fcff ffff ffff ffff a100 0000 0000 0000  ................
00005d80: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00005d90: b300 0000 0000 0000 0400 0000 a200 0000  ................
00005da0: fcff ffff ffff ffff bf00 0000 0000 0000  ................
00005db0: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00005dc0: d100 0000 0000 0000 0400 0000 9300 0000  ................
00005dd0: fcff ffff ffff ffff f100 0000 0000 0000  ................
00005de0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00005df0: 5b01 0000 0000 0000 0400 0000 7a00 0000  [...........z...
00005e00: fcff ffff ffff ffff 9f01 0000 0000 0000  ................
00005e10: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00005e20: b201 0000 0000 0000 0b00 0000 0900 0000  ................
00005e30: 0000 0000 0000 0000 ba01 0000 0000 0000  ................
00005e40: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00005e50: cf01 0000 0000 0000 0b00 0000 0900 0000  ................
00005e60: 3000 0000 0000 0000 dd01 0000 0000 0000  0...............
00005e70: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00005e80: e401 0000 0000 0000 0400 0000 7b00 0000  ............{...
00005e90: fcff ffff ffff ffff 0102 0000 0000 0000  ................
00005ea0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00005eb0: 8302 0000 0000 0000 0400 0000 7a00 0000  ............z...
00005ec0: fcff ffff ffff ffff ad02 0000 0000 0000  ................
00005ed0: 0b00 0000 0900 0000 a800 0000 0000 0000  ................
00005ee0: b502 0000 0000 0000 0400 0000 8500 0000  ................
00005ef0: fcff ffff ffff ffff ee02 0000 0000 0000  ................
00005f00: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00005f10: 0b03 0000 0000 0000 0b00 0000 0900 0000  ................
00005f20: 7800 0000 0000 0000 1603 0000 0000 0000  x...............
00005f30: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00005f40: 4803 0000 0000 0000 0b00 0000 0900 0000  H...............
00005f50: e000 0000 0000 0000 5003 0000 0000 0000  ........P.......
00005f60: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00005f70: 6e03 0000 0000 0000 0b00 0000 0900 0000  n...............
00005f80: 3000 0000 0000 0000 7303 0000 0000 0000  0.......s.......
00005f90: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00005fa0: 7d03 0000 0000 0000 0400 0000 7b00 0000  }...........{...
00005fb0: fcff ffff ffff ffff a103 0000 0000 0000  ................
00005fc0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00005fd0: b403 0000 0000 0000 0400 0000 6f00 0000  ............o...
00005fe0: fcff ffff ffff ffff be03 0000 0000 0000  ................
00005ff0: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006000: e103 0000 0000 0000 0400 0000 7400 0000  ............t...
00006010: fcff ffff ffff ffff f403 0000 0000 0000  ................
00006020: 0400 0000 6700 0000 fcff ffff ffff ffff  ....g...........
00006030: 0004 0000 0000 0000 0400 0000 9300 0000  ................
00006040: fcff ffff ffff ffff 2104 0000 0000 0000  ........!.......
00006050: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00006060: 3504 0000 0000 0000 0400 0000 6e00 0000  5...........n...
00006070: fcff ffff ffff ffff 4104 0000 0000 0000  ........A.......
00006080: 0400 0000 6e00 0000 fcff ffff ffff ffff  ....n...........
00006090: 4904 0000 0000 0000 0400 0000 ab00 0000  I...............
000060a0: fcff ffff ffff ffff 5104 0000 0000 0000  ........Q.......
000060b0: 0400 0000 6e00 0000 fcff ffff ffff ffff  ....n...........
000060c0: 5f04 0000 0000 0000 0400 0000 9300 0000  _...............
000060d0: fcff ffff ffff ffff 8104 0000 0000 0000  ................
000060e0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
000060f0: a904 0000 0000 0000 0400 0000 9500 0000  ................
00006100: fcff ffff ffff ffff d204 0000 0000 0000  ................
00006110: 0400 0000 a900 0000 fcff ffff ffff ffff  ................
00006120: e404 0000 0000 0000 0400 0000 9300 0000  ................
00006130: fcff ffff ffff ffff f804 0000 0000 0000  ................
00006140: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006150: 1105 0000 0000 0000 0400 0000 7400 0000  ............t...
00006160: fcff ffff ffff ffff 6d05 0000 0000 0000  ........m.......
00006170: 0400 0000 6100 0000 fcff ffff ffff ffff  ....a...........
00006180: ab05 0000 0000 0000 0400 0000 9300 0000  ................
00006190: fcff ffff ffff ffff 0806 0000 0000 0000  ................
000061a0: 0400 0000 a000 0000 fcff ffff ffff ffff  ................
000061b0: 4e06 0000 0000 0000 0400 0000 9e00 0000  N...............
000061c0: fcff ffff ffff ffff 6e06 0000 0000 0000  ........n.......
000061d0: 0b00 0000 0900 0000 3001 0000 0000 0000  ........0.......
000061e0: 7306 0000 0000 0000 0400 0000 8500 0000  s...............
000061f0: fcff ffff ffff ffff 8006 0000 0000 0000  ................
00006200: 0400 0000 6000 0000 fcff ffff ffff ffff  ....`...........
00006210: 8906 0000 0000 0000 0400 0000 8e00 0000  ................
00006220: fcff ffff ffff ffff d506 0000 0000 0000  ................
00006230: 0400 0000 7900 0000 fcff ffff ffff ffff  ....y...........
00006240: e706 0000 0000 0000 0400 0000 6900 0000  ............i...
00006250: fcff ffff ffff ffff 4207 0000 0000 0000  ........B.......
00006260: 0400 0000 9200 0000 fcff ffff ffff ffff  ................
00006270: b907 0000 0000 0000 0400 0000 9a00 0000  ................
00006280: fcff ffff ffff ffff de07 0000 0000 0000  ................
00006290: 0400 0000 a600 0000 fcff ffff ffff ffff  ................
000062a0: 8608 0000 0000 0000 0b00 0000 0900 0000  ................
000062b0: 7001 0000 0000 0000 8b08 0000 0000 0000  p...............
000062c0: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
000062d0: 9508 0000 0000 0000 0400 0000 7b00 0000  ............{...
000062e0: fcff ffff ffff ffff b108 0000 0000 0000  ................
000062f0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00006300: d408 0000 0000 0000 0200 0000 8900 0000  ................
00006310: fcff ffff ffff ffff 0009 0000 0000 0000  ................
00006320: 0b00 0000 b000 0000 2800 0000 0000 0000  ........(.......
00006330: 0509 0000 0000 0000 0400 0000 9f00 0000  ................
00006340: fcff ffff ffff ffff 4009 0000 0000 0000  ........@.......
00006350: 0400 0000 6e00 0000 fcff ffff ffff ffff  ....n...........
00006360: 5409 0000 0000 0000 0400 0000 9300 0000  T...............
00006370: fcff ffff ffff ffff 7109 0000 0000 0000  ........q.......
00006380: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00006390: 9f09 0000 0000 0000 0400 0000 6100 0000  ............a...
000063a0: fcff ffff ffff ffff b909 0000 0000 0000  ................
000063b0: 0400 0000 8e00 0000 fcff ffff ffff ffff  ................
000063c0: d809 0000 0000 0000 0400 0000 9300 0000  ................
000063d0: fcff ffff ffff ffff dd09 0000 0000 0000  ................
000063e0: 0400 0000 7b00 0000 fcff ffff ffff ffff  ....{...........
000063f0: 010a 0000 0000 0000 0400 0000 7400 0000  ............t...
00006400: fcff ffff ffff ffff 1e0a 0000 0000 0000  ................
00006410: 0200 0000 8900 0000 fcff ffff ffff ffff  ................
00006420: 530a 0000 0000 0000 0b00 0000 b000 0000  S...............
00006430: 4800 0000 0000 0000 580a 0000 0000 0000  H.......X.......
00006440: 0400 0000 9f00 0000 fcff ffff ffff ffff  ................
00006450: 680a 0000 0000 0000 0400 0000 5f00 0000  h..........._...
00006460: fcff ffff ffff ffff 7a0a 0000 0000 0000  ........z.......
00006470: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006480: a10a 0000 0000 0000 0400 0000 7400 0000  ............t...
00006490: fcff ffff ffff ffff ee0a 0000 0000 0000  ................
000064a0: 0400 0000 7700 0000 fcff ffff ffff ffff  ....w...........
000064b0: 070b 0000 0000 0000 0b00 0000 0b00 0000  ................
000064c0: 4000 0000 0000 0000 0f0b 0000 0000 0000  @...............
000064d0: 0400 0000 9000 0000 fcff ffff ffff ffff  ................
000064e0: 620b 0000 0000 0000 0200 0000 8900 0000  b...............
000064f0: fcff ffff ffff ffff 880b 0000 0000 0000  ................
00006500: 0b00 0000 b000 0000 0800 0000 0000 0000  ................
00006510: 8d0b 0000 0000 0000 0400 0000 9f00 0000  ................
00006520: fcff ffff ffff ffff b10b 0000 0000 0000  ................
00006530: 0b00 0000 0900 0000 5802 0000 0000 0000  ........X.......
00006540: bb0b 0000 0000 0000 0400 0000 a700 0000  ................
00006550: fcff ffff ffff ffff f20b 0000 0000 0000  ................
00006560: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006570: 430c 0000 0000 0000 0b00 0000 0900 0000  C...............
00006580: e001 0000 0000 0000 480c 0000 0000 0000  ........H.......
00006590: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
000065a0: 500c 0000 0000 0000 0400 0000 6e00 0000  P...........n...
000065b0: fcff ffff ffff ffff 610c 0000 0000 0000  ........a.......
000065c0: 0b00 0000 0900 0000 c001 0000 0000 0000  ................
000065d0: 6b0c 0000 0000 0000 0400 0000 a700 0000  k...............
000065e0: fcff ffff ffff ffff 7b0c 0000 0000 0000  ........{.......
000065f0: 0400 0000 6e00 0000 fcff ffff ffff ffff  ....n...........
00006600: 960c 0000 0000 0000 0400 0000 6e00 0000  ............n...
00006610: fcff ffff ffff ffff b60c 0000 0000 0000  ................
00006620: 0400 0000 7300 0000 fcff ffff ffff ffff  ....s...........
00006630: de0c 0000 0000 0000 0b00 0000 0b00 0000  ................
00006640: c005 0000 0000 0000 e70c 0000 0000 0000  ................
00006650: 0b00 0000 0b00 0000 e004 0000 0000 0000  ................
00006660: ec0c 0000 0000 0000 0400 0000 9800 0000  ................
00006670: fcff ffff ffff ffff 030d 0000 0000 0000  ................
00006680: 0b00 0000 0b00 0000 6005 0000 0000 0000  ........`.......
00006690: 0b0d 0000 0000 0000 0400 0000 6400 0000  ............d...
000066a0: fcff ffff ffff ffff 210d 0000 0000 0000  ........!.......
000066b0: 0b00 0000 0b00 0000 8002 0000 0000 0000  ................
000066c0: 290d 0000 0000 0000 0400 0000 8c00 0000  )...............
000066d0: fcff ffff ffff ffff 4e0d 0000 0000 0000  ........N.......
000066e0: 0b00 0000 0b00 0000 4003 0000 0000 0000  ........@.......
000066f0: 550d 0000 0000 0000 0b00 0000 0b00 0000  U...............
00006700: 4002 0000 0000 0000 5d0d 0000 0000 0000  @.......].......
00006710: 0400 0000 9d00 0000 fcff ffff ffff ffff  ................
00006720: 750d 0000 0000 0000 0200 0000 0600 0000  u...............
00006730: fcff ffff ffff ffff cd0d 0000 0000 0000  ................
00006740: 0b00 0000 0b00 0000 a004 0000 0000 0000  ................
00006750: b00e 0000 0000 0000 0b00 0000 0b00 0000  ................
00006760: 2004 0000 0000 0000 b50e 0000 0000 0000   ...............
00006770: 0400 0000 8300 0000 fcff ffff ffff ffff  ................
00006780: c80e 0000 0000 0000 0b00 0000 0b00 0000  ................
00006790: c003 0000 0000 0000 d60e 0000 0000 0000  ................
000067a0: 0400 0000 5c00 0000 fcff ffff ffff ffff  ....\...........
000067b0: fe0e 0000 0000 0000 0400 0000 9c00 0000  ................
000067c0: fcff ffff ffff ffff 120f 0000 0000 0000  ................
000067d0: 0400 0000 7600 0000 fcff ffff ffff ffff  ....v...........
000067e0: 220f 0000 0000 0000 0400 0000 a800 0000  "...............
000067f0: fcff ffff ffff ffff 2b0f 0000 0000 0000  ........+.......
00006800: 0b00 0000 0700 0000 1800 0000 0000 0000  ................
00006810: 350f 0000 0000 0000 0400 0000 a700 0000  5...............
00006820: fcff ffff ffff ffff 410f 0000 0000 0000  ........A.......
00006830: 0b00 0000 0900 0000 8002 0000 0000 0000  ................
00006840: 4b0f 0000 0000 0000 0400 0000 a700 0000  K...............
00006850: fcff ffff ffff ffff 590f 0000 0000 0000  ........Y.......
00006860: 0400 0000 af00 0000 fcff ffff ffff ffff  ................
00006870: 790f 0000 0000 0000 0b00 0000 0700 0000  y...............
00006880: 6f00 0000 0000 0000 830f 0000 0000 0000  o...............
00006890: 0400 0000 a700 0000 fcff ffff ffff ffff  ................
000068a0: 8f0f 0000 0000 0000 0b00 0000 0700 0000  ................
000068b0: 5200 0000 0000 0000 990f 0000 0000 0000  R...............
000068c0: 0400 0000 a700 0000 fcff ffff ffff ffff  ................
000068d0: a50f 0000 0000 0000 0b00 0000 0900 0000  ................
000068e0: b002 0000 0000 0000 af0f 0000 0000 0000  ................
000068f0: 0400 0000 a700 0000 fcff ffff ffff ffff  ................
00006900: b80f 0000 0000 0000 0b00 0000 0900 0000  ................
00006910: a803 0000 0000 0000 c20f 0000 0000 0000  ................
00006920: 0400 0000 a700 0000 fcff ffff ffff ffff  ................
00006930: de0f 0000 0000 0000 0b00 0000 0900 0000  ................
00006940: 2002 0000 0000 0000 e30f 0000 0000 0000   ...............
00006950: 0400 0000 8500 0000 fcff ffff ffff ffff  ................
00006960: eb0f 0000 0000 0000 0400 0000 6e00 0000  ............n...
00006970: fcff ffff ffff ffff f70f 0000 0000 0000  ................
00006980: 0b00 0000 0700 0000 3400 0000 0000 0000  ........4.......
00006990: 0110 0000 0000 0000 0400 0000 a700 0000  ................
000069a0: fcff ffff ffff ffff 0d10 0000 0000 0000  ................
000069b0: 0b00 0000 0900 0000 e002 0000 0000 0000  ................
000069c0: 1710 0000 0000 0000 0400 0000 a700 0000  ................
000069d0: fcff ffff ffff ffff 2310 0000 0000 0000  ........#.......
000069e0: 0b00 0000 0900 0000 0803 0000 0000 0000  ................
000069f0: 2d10 0000 0000 0000 0400 0000 a700 0000  -...............
00006a00: fcff ffff ffff ffff 3910 0000 0000 0000  ........9.......
00006a10: 0b00 0000 0900 0000 2803 0000 0000 0000  ........(.......
00006a20: 4310 0000 0000 0000 0400 0000 a700 0000  C...............
00006a30: fcff ffff ffff ffff 4f10 0000 0000 0000  ........O.......
00006a40: 0b00 0000 0900 0000 5003 0000 0000 0000  ........P.......
00006a50: 5910 0000 0000 0000 0400 0000 a700 0000  Y...............
00006a60: fcff ffff ffff ffff 6510 0000 0000 0000  ........e.......
00006a70: 0b00 0000 0900 0000 7803 0000 0000 0000  ........x.......
00006a80: 6f10 0000 0000 0000 0400 0000 a700 0000  o...............
00006a90: fcff ffff ffff ffff 7910 0000 0000 0000  ........y.......
00006aa0: 0400 0000 7b00 0000 fcff ffff ffff ffff  ....{...........
00006ab0: a110 0000 0000 0000 0400 0000 7400 0000  ............t...
00006ac0: fcff ffff ffff ffff 5911 0000 0000 0000  ........Y.......
00006ad0: 0400 0000 8b00 0000 fcff ffff ffff ffff  ................
00006ae0: 7211 0000 0000 0000 0200 0000 0600 0000  r...............
00006af0: 1a00 0000 0000 0000 ae11 0000 0000 0000  ................
00006b00: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006b10: c011 0000 0000 0000 0400 0000 7900 0000  ............y...
00006b20: fcff ffff ffff ffff e911 0000 0000 0000  ................
00006b30: 0400 0000 6900 0000 fcff ffff ffff ffff  ....i...........
00006b40: 0a12 0000 0000 0000 0400 0000 6300 0000  ............c...
00006b50: fcff ffff ffff ffff 2112 0000 0000 0000  ........!.......
00006b60: 0200 0000 8900 0000 fcff ffff ffff ffff  ................
00006b70: 5612 0000 0000 0000 0b00 0000 b000 0000  V...............
00006b80: 3000 0000 0000 0000 5b12 0000 0000 0000  0.......[.......
00006b90: 0400 0000 9f00 0000 fcff ffff ffff ffff  ................
00006ba0: 7f12 0000 0000 0000 0400 0000 7b00 0000  ............{...
00006bb0: fcff ffff ffff ffff 1100 0000 0000 0000  ................
00006bc0: 0400 0000 7400 0000 fcff ffff ffff ffff  ....t...........
00006bd0: 1900 0000 0000 0000 0b00 0000 0700 0000  ................
00006be0: 0000 0000 0000 0000 2000 0000 0000 0000  ........ .......
00006bf0: 0b00 0000 6500 0000 0000 0000 0000 0000  ....e...........
00006c00: 2700 0000 0000 0000 0b00 0000 1400 0000  '...............
00006c10: e000 0000 0000 0000 2f00 0000 0000 0000  ......../.......
00006c20: 0400 0000 6b00 0000 fcff ffff ffff ffff  ....k...........
00006c30: 3b00 0000 0000 0000 0400 0000 9300 0000  ;...............
00006c40: fcff ffff ffff ffff 1400 0000 0000 0000  ................
00006c50: 0b00 0000 1400 0000 e000 0000 0000 0000  ................
00006c60: 1c00 0000 0000 0000 0400 0000 8d00 0000  ................
00006c70: fcff ffff ffff ffff 2400 0000 0000 0000  ........$.......
00006c80: 0400 0000 9300 0000 fcff ffff ffff ffff  ................
00006c90: 0a00 0000 0000 0000 0b00 0000 1400 0000  ................
00006ca0: 0002 0000 0000 0000 1200 0000 0000 0000  ................
00006cb0: 0400 0000 9b00 0000 fcff ffff ffff ffff  ................
00006cc0: 1a00 0000 0000 0000 0200 0000 0300 0000  ................
00006cd0: 750d 0000 0000 0000 2500 0000 0000 0000  u.......%.......
00006ce0: 0b00 0000 1400 0000 a000 0000 0000 0000  ................
00006cf0: 2a00 0000 0000 0000 0400 0000 aa00 0000  *...............
00006d00: fcff ffff ffff ffff 2f00 0000 0000 0000  ......../.......
00006d10: 0200 0000 0300 0000 7211 0000 0000 0000  ........r.......
00006d20: 0000 0000 0000 0000 0100 0000 0400 0000  ................
00006d30: 1000 0000 0000 0000 0800 0000 0000 0000  ................
00006d40: 0100 0000 0300 0000 1000 0000 0000 0000  ................
00006d50: 1000 0000 0000 0000 0100 0000 0300 0000  ................
00006d60: 5000 0000 0000 0000 1800 0000 0000 0000  P...............
00006d70: 0100 0000 0300 0000 a000 0000 0000 0000  ................
00006d80: 2000 0000 0000 0000 0100 0000 0300 0000   ...............
00006d90: f000 0000 0000 0000 2800 0000 0000 0000  ........(.......
00006da0: 0100 0000 0300 0000 0002 0000 0000 0000  ................
00006db0: 3000 0000 0000 0000 0100 0000 0300 0000  0...............
00006dc0: a003 0000 0000 0000 3800 0000 0000 0000  ........8.......
00006dd0: 0100 0000 0300 0000 e003 0000 0000 0000  ................
00006de0: 4000 0000 0000 0000 0100 0000 0300 0000  @...............
00006df0: 2004 0000 0000 0000 4800 0000 0000 0000   .......H.......
00006e00: 0100 0000 0300 0000 8004 0000 0000 0000  ................
00006e10: 5000 0000 0000 0000 0100 0000 0300 0000  P...............
00006e20: 1005 0000 0000 0000 5800 0000 0000 0000  ........X.......
00006e30: 0100 0000 0300 0000 b008 0000 0000 0000  ................
00006e40: 6000 0000 0000 0000 0100 0000 0300 0000  `...............
00006e50: 7009 0000 0000 0000 6800 0000 0000 0000  p.......h.......
00006e60: 0100 0000 0300 0000 000a 0000 0000 0000  ................
00006e70: 7000 0000 0000 0000 0100 0000 0300 0000  p...............
00006e80: a00a 0000 0000 0000 7800 0000 0000 0000  ........x.......
00006e90: 0100 0000 0300 0000 a010 0000 0000 0000  ................
00006ea0: 9800 0000 0000 0000 0100 0000 0300 0000  ................
00006eb0: a000 0000 0000 0000 a000 0000 0000 0000  ................
00006ec0: 0100 0000 9100 0000 0000 0000 0000 0000  ................
00006ed0: a800 0000 0000 0000 0100 0000 6600 0000  ............f...
00006ee0: 0000 0000 0000 0000 d800 0000 0000 0000  ................
00006ef0: 0100 0000 0700 0000 0000 0000 0000 0000  ................
00006f00: e000 0000 0000 0000 0100 0000 0700 0000  ................
00006f10: 8800 0000 0000 0000 0801 0000 0000 0000  ................
00006f20: 0100 0000 0b00 0000 2001 0000 0000 0000  ........ .......
00006f30: 2001 0000 0000 0000 0100 0000 6500 0000   ...........e...
00006f40: 0000 0000 0000 0000 3001 0000 0000 0000  ........0.......
00006f50: 0100 0000 8600 0000 0000 0000 0000 0000  ................
00006f60: 3801 0000 0000 0000 0100 0000 8700 0000  8...............
00006f70: 0000 0000 0000 0000 6801 0000 0000 0000  ........h.......
00006f80: 0100 0000 5e00 0000 0000 0000 0000 0000  ....^...........
00006f90: 7001 0000 0000 0000 0100 0000 8000 0000  p...............
00006fa0: 0000 0000 0000 0000 7801 0000 0000 0000  ........x.......
00006fb0: 0100 0000 ae00 0000 0000 0000 0000 0000  ................
00006fc0: 8001 0000 0000 0000 0100 0000 7f00 0000  ................
00006fd0: 0000 0000 0000 0000 8801 0000 0000 0000  ................
00006fe0: 0100 0000 5d00 0000 0000 0000 0000 0000  ....]...........
00006ff0: 9801 0000 0000 0000 0100 0000 b100 0000  ................
00007000: 0000 0000 0000 0000 4802 0000 0000 0000  ........H.......
00007010: 0100 0000 7200 0000 0000 0000 0000 0000  ....r...........
00007020: 8002 0000 0000 0000 0100 0000 9900 0000  ................
00007030: 0000 0000 0000 0000 a802 0000 0000 0000  ................
00007040: 0100 0000 7100 0000 0000 0000 0000 0000  ....q...........
00007050: b002 0000 0000 0000 0100 0000 9400 0000  ................
00007060: 0000 0000 0000 0000 b802 0000 0000 0000  ................
00007070: 0100 0000 a400 0000 0000 0000 0000 0000  ................
00007080: d002 0000 0000 0000 0100 0000 ac00 0000  ................
00007090: 0000 0000 0000 0000 d802 0000 0000 0000  ................
000070a0: 0100 0000 7000 0000 0000 0000 0000 0000  ....p...........
000070b0: 5803 0000 0000 0000 0100 0000 0300 0000  X...............
000070c0: e003 0000 0000 0000 c003 0000 0000 0000  ................
000070d0: 0100 0000 0300 0000 a003 0000 0000 0000  ................
000070e0: 2804 0000 0000 0000 0100 0000 a500 0000  (...............
000070f0: 0000 0000 0000 0000 4004 0000 0000 0000  ........@.......
00007100: 0100 0000 a100 0000 0000 0000 0000 0000  ................
00007110: 6004 0000 0000 0000 0100 0000 9700 0000  `...............
00007120: 0000 0000 0000 0000 6804 0000 0000 0000  ........h.......
00007130: 0100 0000 9600 0000 0000 0000 0000 0000  ................
00007140: 7004 0000 0000 0000 0100 0000 7e00 0000  p...........~...
00007150: 0000 0000 0000 0000 a004 0000 0000 0000  ................
00007160: 0100 0000 8800 0000 0000 0000 0000 0000  ................
00007170: b804 0000 0000 0000 0100 0000 7d00 0000  ............}...
00007180: 0000 0000 0000 0000 c004 0000 0000 0000  ................
00007190: 0100 0000 7c00 0000 0000 0000 0000 0000  ....|...........
000071a0: e004 0000 0000 0000 0100 0000 ad00 0000  ................
000071b0: 0000 0000 0000 0000 e804 0000 0000 0000  ................
000071c0: 0100 0000 6800 0000 0000 0000 0000 0000  ....h...........
000071d0: f004 0000 0000 0000 0100 0000 8100 0000  ................
000071e0: 0000 0000 0000 0000 f804 0000 0000 0000  ................
000071f0: 0100 0000 0300 0000 000a 0000 0000 0000  ................
00007200: 0805 0000 0000 0000 0100 0000 0300 0000  ................
00007210: 8004 0000 0000 0000 1005 0000 0000 0000  ................
00007220: 0100 0000 0300 0000 2004 0000 0000 0000  ........ .......
00007230: 7005 0000 0000 0000 0100 0000 8a00 0000  p...............
00007240: 0000 0000 0000 0000 7805 0000 0000 0000  ........x.......
00007250: 0100 0000 a300 0000 0000 0000 0000 0000  ................
00007260: 8005 0000 0000 0000 0100 0000 0300 0000  ................
00007270: a010 0000 0000 0000 8805 0000 0000 0000  ................
00007280: 0100 0000 0300 0000 1005 0000 0000 0000  ................
00007290: 9805 0000 0000 0000 0100 0000 0300 0000  ................
000072a0: 7009 0000 0000 0000 0000 0000 0000 0000  p...............
000072b0: 0200 0000 0300 0000 2c00 0000 0000 0000  ........,.......
000072c0: 0400 0000 0000 0000 0200 0000 0300 0000  ................
000072d0: 7c00 0000 0000 0000 0800 0000 0000 0000  |...............
000072e0: 0200 0000 0300 0000 be00 0000 0000 0000  ................
000072f0: 0c00 0000 0000 0000 0200 0000 0300 0000  ................
00007300: d000 0000 0000 0000 1000 0000 0000 0000  ................
00007310: 0200 0000 0300 0000 9e01 0000 0000 0000  ................
00007320: 1400 0000 0000 0000 0200 0000 0300 0000  ................
00007330: ed02 0000 0000 0000 1800 0000 0000 0000  ................
00007340: 0200 0000 0300 0000 bd03 0000 0000 0000  ................
00007350: 1c00 0000 0000 0000 0200 0000 0300 0000  ................
00007360: ff03 0000 0000 0000 2000 0000 0000 0000  ........ .......
00007370: 0200 0000 0300 0000 5e04 0000 0000 0000  ........^.......
00007380: 2400 0000 0000 0000 0200 0000 0300 0000  $...............
00007390: e304 0000 0000 0000 2800 0000 0000 0000  ........(.......
000073a0: 0200 0000 0300 0000 f704 0000 0000 0000  ................
000073b0: 2c00 0000 0000 0000 0200 0000 0300 0000  ,...............
000073c0: aa05 0000 0000 0000 3000 0000 0000 0000  ........0.......
000073d0: 0200 0000 0300 0000 5309 0000 0000 0000  ........S.......
000073e0: 3400 0000 0000 0000 0200 0000 0300 0000  4...............
000073f0: d709 0000 0000 0000 3800 0000 0000 0000  ........8.......
00007400: 0200 0000 0300 0000 790a 0000 0000 0000  ........y.......
00007410: 3c00 0000 0000 0000 0200 0000 0300 0000  <...............
00007420: f10b 0000 0000 0000 4000 0000 0000 0000  ........@.......
00007430: 0200 0000 0300 0000 ad11 0000 0000 0000  ................
00007440: 4400 0000 0000 0000 0200 0000 0400 0000  D...............
00007450: 3a00 0000 0000 0000 4800 0000 0000 0000  :.......H.......
00007460: 0200 0000 0500 0000 2300 0000 0000 0000  ........#.......
00007470: 0000 0000 0000 0000 0200 0000 0300 0000  ................
00007480: 1000 0000 0000 0000 0400 0000 0000 0000  ................
00007490: 0200 0000 0300 0000 2400 0000 0000 0000  ........$.......
000074a0: 0800 0000 0000 0000 0200 0000 0300 0000  ................
000074b0: 5000 0000 0000 0000 0c00 0000 0000 0000  P...............
000074c0: 0200 0000 0300 0000 6800 0000 0000 0000  ........h.......
000074d0: 1000 0000 0000 0000 0200 0000 0300 0000  ................
000074e0: 7000 0000 0000 0000 1400 0000 0000 0000  p...............
000074f0: 0200 0000 0300 0000 a000 0000 0000 0000  ................
00007500: 1800 0000 0000 0000 0200 0000 0300 0000  ................
00007510: b200 0000 0000 0000 1c00 0000 0000 0000  ................
00007520: 0200 0000 0300 0000 f000 0000 0000 0000  ................
00007530: 2000 0000 0000 0000 0200 0000 0300 0000   ...............
00007540: 5a01 0000 0000 0000 2400 0000 0000 0000  Z.......$.......
00007550: 0200 0000 0300 0000 b901 0000 0000 0000  ................
00007560: 2800 0000 0000 0000 0200 0000 0300 0000  (...............
00007570: dc01 0000 0000 0000 2c00 0000 0000 0000  ........,.......
00007580: 0200 0000 0300 0000 e301 0000 0000 0000  ................
00007590: 3000 0000 0000 0000 0200 0000 0300 0000  0...............
000075a0: 0002 0000 0000 0000 3400 0000 0000 0000  ........4.......
000075b0: 0200 0000 0300 0000 8202 0000 0000 0000  ................
000075c0: 3800 0000 0000 0000 0200 0000 0300 0000  8...............
000075d0: b402 0000 0000 0000 3c00 0000 0000 0000  ........<.......
000075e0: 0200 0000 0300 0000 1503 0000 0000 0000  ................
000075f0: 4000 0000 0000 0000 0200 0000 0300 0000  @...............
00007600: 4f03 0000 0000 0000 4400 0000 0000 0000  O.......D.......
00007610: 0200 0000 0300 0000 7203 0000 0000 0000  ........r.......
00007620: 4800 0000 0000 0000 0200 0000 0300 0000  H...............
00007630: 7c03 0000 0000 0000 4c00 0000 0000 0000  |.......L.......
00007640: 0200 0000 0300 0000 a003 0000 0000 0000  ................
00007650: 5000 0000 0000 0000 0200 0000 0300 0000  P...............
00007660: b303 0000 0000 0000 5400 0000 0000 0000  ........T.......
00007670: 0200 0000 0300 0000 e003 0000 0000 0000  ................
00007680: 5800 0000 0000 0000 0200 0000 0300 0000  X...............
00007690: f303 0000 0000 0000 5c00 0000 0000 0000  ........\.......
000076a0: 0200 0000 0300 0000 2004 0000 0000 0000  ........ .......
000076b0: 6000 0000 0000 0000 0200 0000 0300 0000  `...............
000076c0: 3404 0000 0000 0000 6400 0000 0000 0000  4.......d.......
000076d0: 0200 0000 0300 0000 4004 0000 0000 0000  ........@.......
000076e0: 6800 0000 0000 0000 0200 0000 0300 0000  h...............
000076f0: 4804 0000 0000 0000 6c00 0000 0000 0000  H.......l.......
00007700: 0200 0000 0300 0000 5004 0000 0000 0000  ........P.......
00007710: 7000 0000 0000 0000 0200 0000 0300 0000  p...............
00007720: 8004 0000 0000 0000 7400 0000 0000 0000  ........t.......
00007730: 0200 0000 0300 0000 a804 0000 0000 0000  ................
00007740: 7800 0000 0000 0000 0200 0000 0300 0000  x...............
00007750: d104 0000 0000 0000 7c00 0000 0000 0000  ........|.......
00007760: 0200 0000 0300 0000 1005 0000 0000 0000  ................
00007770: 8000 0000 0000 0000 0200 0000 0300 0000  ................
00007780: 6c05 0000 0000 0000 8400 0000 0000 0000  l...............
00007790: 0200 0000 0300 0000 0706 0000 0000 0000  ................
000077a0: 8800 0000 0000 0000 0200 0000 0300 0000  ................
000077b0: 4d06 0000 0000 0000 8c00 0000 0000 0000  M...............
000077c0: 0200 0000 0300 0000 7206 0000 0000 0000  ........r.......
000077d0: 9000 0000 0000 0000 0200 0000 0300 0000  ................
000077e0: 7f06 0000 0000 0000 9400 0000 0000 0000  ................
000077f0: 0200 0000 0300 0000 8806 0000 0000 0000  ................
00007800: 9800 0000 0000 0000 0200 0000 0300 0000  ................
00007810: d406 0000 0000 0000 9c00 0000 0000 0000  ................
00007820: 0200 0000 0300 0000 e606 0000 0000 0000  ................
00007830: a000 0000 0000 0000 0200 0000 0300 0000  ................
00007840: 4107 0000 0000 0000 a400 0000 0000 0000  A...............
00007850: 0200 0000 0300 0000 b807 0000 0000 0000  ................
00007860: a800 0000 0000 0000 0200 0000 0300 0000  ................
00007870: dd07 0000 0000 0000 ac00 0000 0000 0000  ................
00007880: 0200 0000 0300 0000 2d08 0000 0000 0000  ........-.......
00007890: b000 0000 0000 0000 0200 0000 0300 0000  ................
000078a0: 4f08 0000 0000 0000 b400 0000 0000 0000  O...............
000078b0: 0200 0000 0300 0000 8a08 0000 0000 0000  ................
000078c0: b800 0000 0000 0000 0200 0000 0300 0000  ................
000078d0: 9408 0000 0000 0000 bc00 0000 0000 0000  ................
000078e0: 0200 0000 0300 0000 b008 0000 0000 0000  ................
000078f0: c000 0000 0000 0000 0200 0000 0300 0000  ................
00007900: 0409 0000 0000 0000 c400 0000 0000 0000  ................
00007910: 0200 0000 0300 0000 3409 0000 0000 0000  ........4.......
00007920: c800 0000 0000 0000 0200 0000 0300 0000  ................
00007930: 3f09 0000 0000 0000 cc00 0000 0000 0000  ?...............
00007940: 0200 0000 0300 0000 7009 0000 0000 0000  ........p.......
00007950: d000 0000 0000 0000 0200 0000 0300 0000  ................
00007960: 9e09 0000 0000 0000 d400 0000 0000 0000  ................
00007970: 0200 0000 0300 0000 b009 0000 0000 0000  ................
00007980: d800 0000 0000 0000 0200 0000 0300 0000  ................
00007990: b809 0000 0000 0000 dc00 0000 0000 0000  ................
000079a0: 0200 0000 0300 0000 dc09 0000 0000 0000  ................
000079b0: e000 0000 0000 0000 0200 0000 0300 0000  ................
000079c0: 000a 0000 0000 0000 e400 0000 0000 0000  ................
000079d0: 0200 0000 0300 0000 570a 0000 0000 0000  ........W.......
000079e0: e800 0000 0000 0000 0200 0000 0300 0000  ................
000079f0: 670a 0000 0000 0000 ec00 0000 0000 0000  g...............
00007a00: 0200 0000 0300 0000 a00a 0000 0000 0000  ................
00007a10: f000 0000 0000 0000 0200 0000 0300 0000  ................
00007a20: ed0a 0000 0000 0000 f400 0000 0000 0000  ................
00007a30: 0200 0000 0300 0000 0e0b 0000 0000 0000  ................
00007a40: f800 0000 0000 0000 0200 0000 0300 0000  ................
00007a50: 8c0b 0000 0000 0000 fc00 0000 0000 0000  ................
00007a60: 0200 0000 0300 0000 a50b 0000 0000 0000  ................
00007a70: 0001 0000 0000 0000 0200 0000 0300 0000  ................
00007a80: ba0b 0000 0000 0000 0401 0000 0000 0000  ................
00007a90: 0200 0000 0300 0000 060c 0000 0000 0000  ................
00007aa0: 0801 0000 0000 0000 0200 0000 0300 0000  ................
00007ab0: 470c 0000 0000 0000 0c01 0000 0000 0000  G...............
00007ac0: 0200 0000 0300 0000 4f0c 0000 0000 0000  ........O.......
00007ad0: 1001 0000 0000 0000 0200 0000 0300 0000  ................
00007ae0: 6a0c 0000 0000 0000 1401 0000 0000 0000  j...............
00007af0: 0200 0000 0300 0000 7a0c 0000 0000 0000  ........z.......
00007b00: 1801 0000 0000 0000 0200 0000 0300 0000  ................
00007b10: 950c 0000 0000 0000 1c01 0000 0000 0000  ................
00007b20: 0200 0000 0300 0000 a20c 0000 0000 0000  ................
00007b30: 2001 0000 0000 0000 0200 0000 0300 0000   ...............
00007b40: b50c 0000 0000 0000 2401 0000 0000 0000  ........$.......
00007b50: 0200 0000 0300 0000 eb0c 0000 0000 0000  ................
00007b60: 2801 0000 0000 0000 0200 0000 0300 0000  (...............
00007b70: 0a0d 0000 0000 0000 2c01 0000 0000 0000  ........,.......
00007b80: 0200 0000 0300 0000 280d 0000 0000 0000  ........(.......
00007b90: 3001 0000 0000 0000 0200 0000 0300 0000  0...............
00007ba0: 5c0d 0000 0000 0000 3401 0000 0000 0000  \.......4.......
00007bb0: 0200 0000 0300 0000 b40e 0000 0000 0000  ................
00007bc0: 3801 0000 0000 0000 0200 0000 0300 0000  8...............
00007bd0: d50e 0000 0000 0000 3c01 0000 0000 0000  ........<.......
00007be0: 0200 0000 0300 0000 fd0e 0000 0000 0000  ................
00007bf0: 4001 0000 0000 0000 0200 0000 0300 0000  @...............
00007c00: 110f 0000 0000 0000 4401 0000 0000 0000  ........D.......
00007c10: 0200 0000 0300 0000 210f 0000 0000 0000  ........!.......
00007c20: 4801 0000 0000 0000 0200 0000 0300 0000  H...............
00007c30: 340f 0000 0000 0000 4c01 0000 0000 0000  4.......L.......
00007c40: 0200 0000 0300 0000 4a0f 0000 0000 0000  ........J.......
00007c50: 5001 0000 0000 0000 0200 0000 0300 0000  P...............
00007c60: 580f 0000 0000 0000 5401 0000 0000 0000  X.......T.......
00007c70: 0200 0000 0300 0000 690f 0000 0000 0000  ........i.......
00007c80: 5801 0000 0000 0000 0200 0000 0300 0000  X...............
00007c90: 820f 0000 0000 0000 5c01 0000 0000 0000  ........\.......
00007ca0: 0200 0000 0300 0000 980f 0000 0000 0000  ................
00007cb0: 6001 0000 0000 0000 0200 0000 0300 0000  `...............
00007cc0: ae0f 0000 0000 0000 6401 0000 0000 0000  ........d.......
00007cd0: 0200 0000 0300 0000 c10f 0000 0000 0000  ................
00007ce0: 6801 0000 0000 0000 0200 0000 0300 0000  h...............
00007cf0: e20f 0000 0000 0000 6c01 0000 0000 0000  ........l.......
00007d00: 0200 0000 0300 0000 ea0f 0000 0000 0000  ................
00007d10: 7001 0000 0000 0000 0200 0000 0300 0000  p...............
00007d20: 0010 0000 0000 0000 7401 0000 0000 0000  ........t.......
00007d30: 0200 0000 0300 0000 1610 0000 0000 0000  ................
00007d40: 7801 0000 0000 0000 0200 0000 0300 0000  x...............
00007d50: 2c10 0000 0000 0000 7c01 0000 0000 0000  ,.......|.......
00007d60: 0200 0000 0300 0000 4210 0000 0000 0000  ........B.......
00007d70: 8001 0000 0000 0000 0200 0000 0300 0000  ................
00007d80: 5810 0000 0000 0000 8401 0000 0000 0000  X...............
00007d90: 0200 0000 0300 0000 6e10 0000 0000 0000  ........n.......
00007da0: 8801 0000 0000 0000 0200 0000 0300 0000  ................
00007db0: 7810 0000 0000 0000 8c01 0000 0000 0000  x...............
00007dc0: 0200 0000 0300 0000 a010 0000 0000 0000  ................
00007dd0: 9001 0000 0000 0000 0200 0000 0300 0000  ................
00007de0: 5811 0000 0000 0000 9401 0000 0000 0000  X...............
00007df0: 0200 0000 0300 0000 bf11 0000 0000 0000  ................
00007e00: 9801 0000 0000 0000 0200 0000 0300 0000  ................
00007e10: e811 0000 0000 0000 9c01 0000 0000 0000  ................
00007e20: 0200 0000 0300 0000 0912 0000 0000 0000  ................
00007e30: a001 0000 0000 0000 0200 0000 0300 0000  ................
00007e40: 5a12 0000 0000 0000 a401 0000 0000 0000  Z...............
00007e50: 0200 0000 0300 0000 7e12 0000 0000 0000  ........~.......
00007e60: a801 0000 0000 0000 0200 0000 0400 0000  ................
00007e70: 1000 0000 0000 0000 ac01 0000 0000 0000  ................
00007e80: 0200 0000 0400 0000 2e00 0000 0000 0000  ................
00007e90: b001 0000 0000 0000 0200 0000 0500 0000  ................
00007ea0: 1b00 0000 0000 0000 b401 0000 0000 0000  ................
00007eb0: 0200 0000 0600 0000 1100 0000 0000 0000  ................
00007ec0: b801 0000 0000 0000 0200 0000 0600 0000  ................
00007ed0: 2900 0000 0000 0000 0000 0000 0000 0000  )...............
00007ee0: 0200 0000 0300 0000 e804 0000 0000 0000  ................
00007ef0: 0400 0000 0000 0000 0200 0000 4400 0000  ............D...
00007f00: 0000 0000 0000 0000 0c00 0000 0000 0000  ................
00007f10: 0200 0000 0300 0000 7e0a 0000 0000 0000  ........~.......
00007f20: 1000 0000 0000 0000 0200 0000 4400 0000  ............D...
00007f30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00007f40: 0100 0000 0400 0000 0000 0000 0000 0000  ................
00007f50: 0800 0000 0000 0000 0100 0000 0300 0000  ................
00007f60: 0000 0000 0000 0000 1000 0000 0000 0000  ................
00007f70: 0100 0000 0300 0000 4000 0000 0000 0000  ........@.......
00007f80: 1800 0000 0000 0000 0100 0000 0300 0000  ................
00007f90: 9000 0000 0000 0000 2000 0000 0000 0000  ........ .......
00007fa0: 0100 0000 0300 0000 e000 0000 0000 0000  ................
00007fb0: 2800 0000 0000 0000 0100 0000 0300 0000  (...............
00007fc0: f001 0000 0000 0000 3000 0000 0000 0000  ........0.......
00007fd0: 0100 0000 0300 0000 9003 0000 0000 0000  ................
00007fe0: 3800 0000 0000 0000 0100 0000 0300 0000  8...............
00007ff0: d003 0000 0000 0000 4000 0000 0000 0000  ........@.......
00008000: 0100 0000 0300 0000 1004 0000 0000 0000  ................
00008010: 4800 0000 0000 0000 0100 0000 0300 0000  H...............
00008020: 7004 0000 0000 0000 5000 0000 0000 0000  p.......P.......
00008030: 0100 0000 0500 0000 0000 0000 0000 0000  ................
00008040: 5800 0000 0000 0000 0100 0000 0300 0000  X...............
00008050: 0005 0000 0000 0000 6000 0000 0000 0000  ........`.......
00008060: 0100 0000 0300 0000 a008 0000 0000 0000  ................
00008070: 6800 0000 0000 0000 0100 0000 0300 0000  h...............
00008080: 6009 0000 0000 0000 7000 0000 0000 0000  `.......p.......
00008090: 0100 0000 0300 0000 f009 0000 0000 0000  ................
000080a0: 7800 0000 0000 0000 0100 0000 0300 0000  x...............
000080b0: 900a 0000 0000 0000 8000 0000 0000 0000  ................
000080c0: 0100 0000 0300 0000 9010 0000 0000 0000  ................
000080d0: 0000 0000 0000 0000 0100 0000 0900 0000  ................
000080e0: c803 0000 0000 0000 1000 0000 0000 0000  ................
000080f0: 0100 0000 1400 0000 8000 0000 0000 0000  ................
00008100: 1800 0000 0000 0000 0100 0000 1400 0000  ................
00008110: 2002 0000 0000 0000 2000 0000 0000 0000   ....... .......
00008120: 0100 0000 0900 0000 c803 0000 0000 0000  ................
00008130: 3000 0000 0000 0000 0100 0000 1400 0000  0...............
00008140: 8000 0000 0000 0000 3800 0000 0000 0000  ........8.......
00008150: 0100 0000 1400 0000 2002 0000 0000 0000  ........ .......
00008160: 4000 0000 0000 0000 0100 0000 0900 0000  @...............
00008170: c803 0000 0000 0000 5000 0000 0000 0000  ........P.......
00008180: 0100 0000 1400 0000 8000 0000 0000 0000  ................
00008190: 5800 0000 0000 0000 0100 0000 1400 0000  X...............
000081a0: 2002 0000 0000 0000 6000 0000 0000 0000   .......`.......
000081b0: 0100 0000 0900 0000 c803 0000 0000 0000  ................
000081c0: 7000 0000 0000 0000 0100 0000 1400 0000  p...............
000081d0: 8000 0000 0000 0000 7800 0000 0000 0000  ........x.......
000081e0: 0100 0000 1400 0000 2002 0000 0000 0000  ........ .......
000081f0: a000 0000 0000 0000 0100 0000 0700 0000  ................
00008200: 0b00 0000 0000 0000 b000 0000 0000 0000  ................
00008210: 0100 0000 1400 0000 b800 0000 0000 0000  ................
00008220: e000 0000 0000 0000 0100 0000 0700 0000  ................
00008230: 0000 0000 0000 0000 e800 0000 0000 0000  ................
00008240: 0100 0000 0300 0000 a00a 0000 0000 0000  ................
00008250: f000 0000 0000 0000 0100 0000 0300 0000  ................
00008260: 5000 0000 0000 0000 2801 0000 0000 0000  P.......(.......
00008270: 0100 0000 0300 0000 1000 0000 0000 0000  ................
00008280: 3001 0000 0000 0000 0100 0000 0b00 0000  0...............
00008290: 0000 0000 0000 0000 0002 0000 0000 0000  ................
000082a0: 0100 0000 0900 0000 0804 0000 0000 0000  ................
000082b0: 1002 0000 0000 0000 0100 0000 1400 0000  ................
000082c0: 3402 0000 0000 0000 1802 0000 0000 0000  4...............
000082d0: 0100 0000 1400 0000 2002 0000 0000 0000  ........ .......
000082e0: 0000 0000 0000 0000 0100 0000 6d00 0000  ............m...
000082f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008300: 0100 0000 7500 0000 0000 0000 0000 0000  ....u...........
00008310: 3801 0000 0000 0000 0100 0000 7500 0000  8...........u...
00008320: 0000 0000 0000 0000 b804 0000 0000 0000  ................
00008330: 0100 0000 6d00 0000 0000 0000 0000 0000  ....m...........
00008340: 002e 7379 6d74 6162 002e 7374 7274 6162  ..symtab..strtab
00008350: 002e 7368 7374 7274 6162 002e 6e6f 7465  ..shstrtab..note
00008360: 2e67 6e75 2e62 7569 6c64 2d69 6400 2e6e  .gnu.build-id..n
00008370: 6f74 652e 4c69 6e75 7800 2e72 656c 612e  ote.Linux..rela.
00008380: 7465 7874 002e 7265 6c61 2e69 6e69 742e  text..rela.init.
00008390: 7465 7874 002e 7265 6c61 2e65 7869 742e  text..rela.exit.
000083a0: 7465 7874 002e 7265 6c61 2e74 6578 742e  text..rela.text.
000083b0: 756e 6c69 6b65 6c79 002e 726f 6461 7461  unlikely..rodata
000083c0: 2e73 7472 312e 3100 2e72 656c 615f 5f6d  .str1.1..rela__m
000083d0: 636f 756e 745f 6c6f 6300 2e72 6f64 6174  count_loc..rodat
000083e0: 612e 7374 7231 2e38 002e 6d6f 6469 6e66  a.str1.8..modinf
000083f0: 6f00 2e72 656c 612e 726f 6461 7461 002e  o..rela.rodata..
00008400: 7265 6c61 2e72 6574 7572 6e5f 7369 7465  rela.return_site
00008410: 7300 2e72 656c 612e 6361 6c6c 5f73 6974  s..rela.call_sit
00008420: 6573 005f 5f76 6572 7369 6f6e 7300 2e72  es.__versions..r
00008430: 656c 615f 5f62 7567 5f74 6162 6c65 002e  ela__bug_table..
00008440: 7265 6c61 5f5f 7061 7463 6861 626c 655f  rela__patchable_
00008450: 6675 6e63 7469 6f6e 5f65 6e74 7269 6573  function_entries
00008460: 002e 636f 6465 7461 672e 616c 6c6f 635f  ..codetag.alloc_
00008470: 7461 6773 002e 636f 6d6d 656e 7400 2e6e  tags..comment..n
00008480: 6f74 652e 474e 552d 7374 6163 6b00 2e72  ote.GNU-stack..r
00008490: 656c 612e 6461 7461 002e 7265 6c61 2e65  ela.data..rela.e
000084a0: 7869 742e 6461 7461 002e 7265 6c61 2e69  xit.data..rela.i
000084b0: 6e69 742e 6461 7461 002e 7265 6c61 2e67  nit.data..rela.g
000084c0: 6e75 2e6c 696e 6b6f 6e63 652e 7468 6973  nu.linkonce.this
000084d0: 5f6d 6f64 756c 6500 2e62 7373 0000 0000  _module..bss....
000084e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000084f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008500: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008510: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008520: 1b00 0000 0700 0000 0200 0000 0000 0000  ................
00008530: 0000 0000 0000 0000 4000 0000 0000 0000  ........@.......
00008540: 2400 0000 0000 0000 0000 0000 0000 0000  $...............
00008550: 0400 0000 0000 0000 0000 0000 0000 0000  ................
00008560: 2e00 0000 0700 0000 0200 0000 0000 0000  ................
00008570: 0000 0000 0000 0000 6400 0000 0000 0000  ........d.......
00008580: 3000 0000 0000 0000 0000 0000 0000 0000  0...............
00008590: 0400 0000 0000 0000 0000 0000 0000 0000  ................
000085a0: 3f00 0000 0100 0000 0600 0000 0000 0000  ?...............
000085b0: 0000 0000 0000 0000 a000 0000 0000 0000  ................
000085c0: 8e12 0000 0000 0000 0000 0000 0000 0000  ................
000085d0: 1000 0000 0000 0000 0000 0000 0000 0000  ................
000085e0: 3a00 0000 0400 0000 4000 0000 0000 0000  :.......@.......
000085f0: 0000 0000 0000 0000 d05c 0000 0000 0000  .........\......
00008600: e80e 0000 0000 0000 2700 0000 0300 0000  ........'.......
00008610: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008620: 4a00 0000 0100 0000 0600 0000 0000 0000  J...............
00008630: 0000 0000 0000 0000 3013 0000 0000 0000  ........0.......
00008640: 3f00 0000 0000 0000 0000 0000 0000 0000  ?...............
00008650: 1000 0000 0000 0000 0000 0000 0000 0000  ................
00008660: 4500 0000 0400 0000 4000 0000 0000 0000  E.......@.......
00008670: 0000 0000 0000 0000 b86b 0000 0000 0000  .........k......
00008680: 9000 0000 0000 0000 2700 0000 0500 0000  ........'.......
00008690: 0800 0000 0000 0000 1800 0000 0000 0000  ................
000086a0: 5a00 0000 0100 0000 0600 0000 0000 0000  Z...............
000086b0: 0000 0000 0000 0000 7013 0000 0000 0000  ........p.......
000086c0: 2800 0000 0000 0000 0000 0000 0000 0000  (...............
000086d0: 1000 0000 0000 0000 0000 0000 0000 0000  ................
000086e0: 5500 0000 0400 0000 4000 0000 0000 0000  U.......@.......
000086f0: 0000 0000 0000 0000 486c 0000 0000 0000  ........Hl......
00008700: 4800 0000 0000 0000 2700 0000 0700 0000  H.......'.......
00008710: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008720: 6a00 0000 0100 0000 0600 0000 0000 0000  j...............
00008730: 0000 0000 0000 0000 9813 0000 0000 0000  ................
00008740: 3300 0000 0000 0000 0000 0000 0000 0000  3...............
00008750: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008760: 6500 0000 0400 0000 4000 0000 0000 0000  e.......@.......
00008770: 0000 0000 0000 0000 906c 0000 0000 0000  .........l......
00008780: 9000 0000 0000 0000 2700 0000 0900 0000  ........'.......
00008790: 0800 0000 0000 0000 1800 0000 0000 0000  ................
000087a0: 7900 0000 0100 0000 3200 0000 0000 0000  y.......2.......
000087b0: 0000 0000 0000 0000 cb13 0000 0000 0000  ................
000087c0: a300 0000 0000 0000 0000 0000 0000 0000  ................
000087d0: 0100 0000 0000 0000 0100 0000 0000 0000  ................
000087e0: 8d00 0000 0100 0000 0200 0000 0000 0000  ................
000087f0: 0000 0000 0000 0000 6e14 0000 0000 0000  ........n.......
00008800: 8000 0000 0000 0000 0000 0000 0000 0000  ................
00008810: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008820: 8800 0000 0400 0000 4000 0000 0000 0000  ........@.......
00008830: 0000 0000 0000 0000 206d 0000 0000 0000  ........ m......
00008840: 8001 0000 0000 0000 2700 0000 0c00 0000  ........'.......
00008850: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008860: 9a00 0000 0100 0000 3200 0000 0000 0000  ........2.......
00008870: 0000 0000 0000 0000 f014 0000 0000 0000  ................
00008880: 4804 0000 0000 0000 0000 0000 0000 0000  H...............
00008890: 0800 0000 0000 0000 0100 0000 0000 0000  ................
000088a0: a900 0000 0100 0000 0200 0000 0000 0000  ................
000088b0: 0000 0000 0000 0000 3819 0000 0000 0000  ........8.......
000088c0: 1101 0000 0000 0000 0000 0000 0000 0000  ................
000088d0: 0100 0000 0000 0000 0000 0000 0000 0000  ................
000088e0: b700 0000 0100 0000 0200 0000 0000 0000  ................
000088f0: 0000 0000 0000 0000 601a 0000 0000 0000  ........`.......
00008900: c805 0000 0000 0000 0000 0000 0000 0000  ................
00008910: 2000 0000 0000 0000 0000 0000 0000 0000   ...............
00008920: b200 0000 0400 0000 4000 0000 0000 0000  ........@.......
00008930: 0000 0000 0000 0000 a06e 0000 0000 0000  .........n......
00008940: 0804 0000 0000 0000 2700 0000 1000 0000  ........'.......
00008950: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008960: c400 0000 0100 0000 0200 0000 0000 0000  ................
00008970: 0000 0000 0000 0000 2820 0000 0000 0000  ........( ......
00008980: 4c00 0000 0000 0000 0000 0000 0000 0000  L...............
00008990: 0100 0000 0000 0000 0000 0000 0000 0000  ................
000089a0: bf00 0000 0400 0000 4000 0000 0000 0000  ........@.......
000089b0: 0000 0000 0000 0000 a872 0000 0000 0000  .........r......
000089c0: c801 0000 0000 0000 2700 0000 1200 0000  ........'.......
000089d0: 0800 0000 0000 0000 1800 0000 0000 0000  ................
000089e0: d700 0000 0100 0000 0200 0000 0000 0000  ................
000089f0: 0000 0000 0000 0000 7420 0000 0000 0000  ........t ......
00008a00: bc01 0000 0000 0000 0000 0000 0000 0000  ................
00008a10: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008a20: d200 0000 0400 0000 4000 0000 0000 0000  ........@.......
00008a30: 0000 0000 0000 0000 7074 0000 0000 0000  ........pt......
00008a40: 680a 0000 0000 0000 2700 0000 1400 0000  h.......'.......
00008a50: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008a60: e300 0000 0100 0000 0200 0000 0000 0000  ................
00008a70: 0000 0000 0000 0000 4022 0000 0000 0000  ........@"......
00008a80: c013 0000 0000 0000 0000 0000 0000 0000  ................
00008a90: 2000 0000 0000 0000 0000 0000 0000 0000   ...............
00008aa0: f300 0000 0100 0000 0300 0000 0000 0000  ................
00008ab0: 0000 0000 0000 0000 0036 0000 0000 0000  .........6......
00008ac0: 1800 0000 0000 0000 0000 0000 0000 0000  ................
00008ad0: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008ae0: ee00 0000 0400 0000 4000 0000 0000 0000  ........@.......
00008af0: 0000 0000 0000 0000 d87e 0000 0000 0000  .........~......
00008b00: 6000 0000 0000 0000 2700 0000 1700 0000  `.......'.......
00008b10: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008b20: 0401 0000 0100 0000 8300 0000 0000 0000  ................
00008b30: 1800 0000 0000 0000 1836 0000 0000 0000  .........6......
00008b40: 8800 0000 0000 0000 0500 0000 0000 0000  ................
00008b50: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008b60: ff00 0000 0400 0000 4000 0000 0000 0000  ........@.......
00008b70: 0000 0000 0000 0000 387f 0000 0000 0000  ........8.......
00008b80: 9801 0000 0000 0000 2700 0000 1900 0000  ........'.......
00008b90: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008ba0: 2101 0000 0100 0000 0100 0000 0000 0000  !...............
00008bb0: 0000 0000 0000 0000 a036 0000 0000 0000  .........6......
00008bc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008bd0: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008be0: 3501 0000 0100 0000 3000 0000 0000 0000  5.......0.......
00008bf0: 0000 0000 0000 0000 a036 0000 0000 0000  .........6......
00008c00: 8400 0000 0000 0000 0000 0000 0000 0000  ................
00008c10: 0100 0000 0000 0000 0100 0000 0000 0000  ................
00008c20: 3e01 0000 0100 0000 0000 0000 0000 0000  >...............
00008c30: 0000 0000 0000 0000 2437 0000 0000 0000  ........$7......
00008c40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008c50: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008c60: 5301 0000 0100 0000 0300 0000 0000 0000  S...............
00008c70: a000 0000 0000 0000 4037 0000 0000 0000  ........@7......
00008c80: 3e02 0000 0000 0000 0000 0000 0000 0000  >...............
00008c90: 2000 0000 0000 0000 0000 0000 0000 0000   ...............
00008ca0: 4e01 0000 0400 0000 4000 0000 0000 0000  N.......@.......
00008cb0: 0000 0000 0000 0000 d080 0000 0000 0000  ................
00008cc0: 1002 0000 0000 0000 2700 0000 1e00 0000  ........'.......
00008cd0: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008ce0: 5e01 0000 0100 0000 0300 0000 0000 0000  ^...............
00008cf0: 0000 0000 0000 0000 8039 0000 0000 0000  .........9......
00008d00: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008d10: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008d20: 5901 0000 0400 0000 4000 0000 0000 0000  Y.......@.......
00008d30: 0000 0000 0000 0000 e082 0000 0000 0000  ................
00008d40: 1800 0000 0000 0000 2700 0000 2000 0000  ........'... ...
00008d50: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008d60: 6e01 0000 0100 0000 0300 0000 0000 0000  n...............
00008d70: 0000 0000 0000 0000 8839 0000 0000 0000  .........9......
00008d80: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008d90: 0800 0000 0000 0000 0000 0000 0000 0000  ................
00008da0: 6901 0000 0400 0000 4000 0000 0000 0000  i.......@.......
00008db0: 0000 0000 0000 0000 f882 0000 0000 0000  ................
00008dc0: 1800 0000 0000 0000 2700 0000 2200 0000  ........'..."...
00008dd0: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008de0: 7e01 0000 0100 0000 0300 0000 0000 0000  ~...............
00008df0: 0000 0000 0000 0000 c039 0000 0000 0000  .........9......
00008e00: 0005 0000 0000 0000 0000 0000 0000 0000  ................
00008e10: 4000 0000 0000 0000 0000 0000 0000 0000  @...............
00008e20: 7901 0000 0400 0000 4000 0000 0000 0000  y.......@.......
00008e30: 0000 0000 0000 0000 1083 0000 0000 0000  ................
00008e40: 3000 0000 0000 0000 2700 0000 2400 0000  0.......'...$...
00008e50: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008e60: 9801 0000 0800 0000 0300 0000 0000 0000  ................
00008e70: 0000 0000 0000 0000 c03e 0000 0000 0000  .........>......
00008e80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008e90: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008ea0: 0100 0000 0200 0000 0000 0000 0000 0000  ................
00008eb0: 0000 0000 0000 0000 c03e 0000 0000 0000  .........>......
00008ec0: b010 0000 0000 0000 2800 0000 5c00 0000  ........(...\...
00008ed0: 0800 0000 0000 0000 1800 0000 0000 0000  ................
00008ee0: 0900 0000 0300 0000 0000 0000 0000 0000  ................
00008ef0: 0000 0000 0000 0000 704f 0000 0000 0000  ........pO......
00008f00: 5b0d 0000 0000 0000 0000 0000 0000 0000  [...............
00008f10: 0100 0000 0000 0000 0000 0000 0000 0000  ................
00008f20: 1100 0000 0300 0000 0000 0000 0000 0000  ................
00008f30: 0000 0000 0000 0000 4083 0000 0000 0000  ........@.......
00008f40: 9d01 0000 0000 0000 0000 0000 0000 0000  ................
00008f50: 0100 0000 0000 0000 0000 0000 0000 0000  ................



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-24 11:20               ` Aditya Garg
@ 2025-02-24 11:42                 ` andriy.shevchenko
  2025-02-24 11:57                   ` Aditya Garg
  0 siblings, 1 reply; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-24 11:42 UTC (permalink / raw)
  To: Aditya Garg
  Cc: Thomas Zimmermann, pmladek@suse.com, Steven Rostedt,
	linux@rasmusvillemoes.dk, senozhatsky@chromium.org,
	Jonathan Corbet, maarten.lankhorst@linux.intel.com,
	mripard@kernel.org, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, Asahi Linux Mailing List, Sven Peter,
	Janne Grunau

On Mon, Feb 24, 2025 at 11:20:12AM +0000, Aditya Garg wrote:
> 
> > 
> > It would be nice to see the difference in the code generation for the all
> > __packed vs. only those that require it.
> > 
> >> At least it's clear then
> >> what happens. And if your hardware requires this, you can't do much anyway.
> > 
> > One aspect (member level alignment) is clear but the other is not
> > (object level alignment). I dunno if it makes sense to be pedantic about this,
> > but would like to see the binary outcome asked for.
> 
> Hex dump of the compiled binary:

Oh, sorry I wasn't clear. We have a script called bloat-o-meter for these
purposes. Please, run it with old and new binaries as parameters and share the
output.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-24 11:42                 ` andriy.shevchenko
@ 2025-02-24 11:57                   ` Aditya Garg
  2025-02-24 12:27                     ` andriy.shevchenko
  0 siblings, 1 reply; 27+ messages in thread
From: Aditya Garg @ 2025-02-24 11:57 UTC (permalink / raw)
  To: andriy.shevchenko@linux.intel.com
  Cc: Thomas Zimmermann, pmladek@suse.com, Steven Rostedt,
	linux@rasmusvillemoes.dk, senozhatsky@chromium.org,
	Jonathan Corbet, maarten.lankhorst@linux.intel.com,
	mripard@kernel.org, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, asahi@lists.linux.dev, Sven Peter,
	Janne Grunau



> On 24 Feb 2025, at 5:13 PM, andriy.shevchenko@linux.intel.com wrote:
> 
> On Mon, Feb 24, 2025 at 11:20:12AM +0000, Aditya Garg wrote:
>> 
>>> 
>>> It would be nice to see the difference in the code generation for the all
>>> __packed vs. only those that require it.
>>> 
>>>> At least it's clear then
>>>> what happens. And if your hardware requires this, you can't do much anyway.
>>> 
>>> One aspect (member level alignment) is clear but the other is not
>>> (object level alignment). I dunno if it makes sense to be pedantic about this,
>>> but would like to see the binary outcome asked for.
>> 
>> Hex dump of the compiled binary:
> 
> Oh, sorry I wasn't clear. We have a script called bloat-o-meter for these
> purposes. Please, run it with old and new binaries as parameters and share the
> output.

aditya@MacBook:~/linux$ ./scripts/bloat-o-meter $PACKED $UNPACKED
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
Function                                     old     new   delta
Total: Before=13286, After=13286, chg +0.00%

aditya@MacBook:~/linux$ ./scripts/bloat-o-meter $PACKED $UNPACKED -c
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
Function                                     old     new   delta
Total: Before=4957, After=4957, chg +0.00%
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
Data                                         old     new   delta
Total: Before=1560, After=1560, chg +0.00%
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
RO Data                                      old     new   delta
Total: Before=6769, After=6769, chg +0.00%

aditya@MacBook:~/linux$ ./scripts/bloat-o-meter $PACKED $UNPACKED -d
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
Data                                         old     new   delta
Total: Before=8329, After=8329, chg +0.00%

aditya@MacBook:~/linux$ ./scripts/bloat-o-meter $PACKED $UNPACKED -t
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
Function                                     old     new   delta
Total: Before=4957, After=4957, chg +0.00%

> 
> --
> With Best Regards,
> Andy Shevchenko
> 
> 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs
  2025-02-24 11:57                   ` Aditya Garg
@ 2025-02-24 12:27                     ` andriy.shevchenko
  0 siblings, 0 replies; 27+ messages in thread
From: andriy.shevchenko @ 2025-02-24 12:27 UTC (permalink / raw)
  To: Aditya Garg
  Cc: Thomas Zimmermann, pmladek@suse.com, Steven Rostedt,
	linux@rasmusvillemoes.dk, senozhatsky@chromium.org,
	Jonathan Corbet, maarten.lankhorst@linux.intel.com,
	mripard@kernel.org, airlied@gmail.com, simona@ffwll.ch,
	Andrew Morton, apw@canonical.com, joe@perches.com,
	dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
	sumit.semwal@linaro.org, christian.koenig@amd.com, Kerem Karabay,
	Aun-Ali Zaidi, Orlando Chamberlain, Atharva Tiwari,
	linux-doc@vger.kernel.org, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	linaro-mm-sig@lists.linaro.org, Hector Martin,
	linux@armlinux.org.uk, asahi@lists.linux.dev, Sven Peter,
	Janne Grunau

On Mon, Feb 24, 2025 at 11:57:47AM +0000, Aditya Garg wrote:
> > On 24 Feb 2025, at 5:13 PM, andriy.shevchenko@linux.intel.com wrote:
> > On Mon, Feb 24, 2025 at 11:20:12AM +0000, Aditya Garg wrote:
> >> 
> >>> It would be nice to see the difference in the code generation for the all
> >>> __packed vs. only those that require it.
> >>> 
> >>>> At least it's clear then
> >>>> what happens. And if your hardware requires this, you can't do much anyway.
> >>> 
> >>> One aspect (member level alignment) is clear but the other is not
> >>> (object level alignment). I dunno if it makes sense to be pedantic about this,
> >>> but would like to see the binary outcome asked for.
> >> 
> >> Hex dump of the compiled binary:
> > 
> > Oh, sorry I wasn't clear. We have a script called bloat-o-meter for these
> > purposes. Please, run it with old and new binaries as parameters and share the
> > output.

> aditya@MacBook:~/linux$ ./scripts/bloat-o-meter $PACKED $UNPACKED
> add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
> Function                                     old     new   delta
> Total: Before=13286, After=13286, chg +0.00%

Thanks! That shows that __packed can be used for all protocol related data
types. Just mention in the commit message that the __packed, even if not
needed, is: a) for the consistency, b) not affecting code generation in
accordance with bloat-o-meter.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2025-02-24 12:27 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-21 11:36 [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888 Aditya Garg
2025-02-21 11:37 ` [PATCH v3 2/3] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc Aditya Garg
2025-02-21 11:54   ` Rasmus Villemoes
2025-02-21 15:29   ` andriy.shevchenko
2025-02-21 19:37     ` Aditya Garg
2025-02-21 20:18       ` andriy.shevchenko
2025-02-21 20:22         ` andriy.shevchenko
2025-02-21 11:37 ` [PATCH v3 3/3] drm/tiny: add driver for Apple Touch Bars in x86 Macs Aditya Garg
2025-02-21 15:48   ` andriy.shevchenko
2025-02-21 19:13     ` Aditya Garg
2025-02-21 20:42       ` andriy.shevchenko
2025-02-22  9:07         ` Aditya Garg
2025-02-22 12:22           ` Aditya Garg
2025-02-23 14:58             ` Aditya Garg
2025-02-24  8:41           ` Thomas Zimmermann
2025-02-24  9:47             ` andriy.shevchenko
2025-02-24 11:20               ` Aditya Garg
2025-02-24 11:42                 ` andriy.shevchenko
2025-02-24 11:57                   ` Aditya Garg
2025-02-24 12:27                     ` andriy.shevchenko
2025-02-24  9:09   ` Thomas Zimmermann
2025-02-24  9:14     ` Aditya Garg
2025-02-21 15:51 ` [PATCH v3 1/3] drm/format-helper: Add conversion from XRGB8888 to BGR888 andriy.shevchenko
2025-02-21 17:21   ` Aditya Garg
2025-02-21 20:25     ` andriy.shevchenko
2025-02-24  9:19   ` Thomas Zimmermann
2025-02-24  9:55     ` andriy.shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).