Merge tag 'drm-misc-next-2023-01-12' of git://anongit.freedesktop.org/drm/drm-misc...
authorDave Airlie <airlied@redhat.com>
Mon, 16 Jan 2023 05:33:22 +0000 (15:33 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 16 Jan 2023 05:33:28 +0000 (15:33 +1000)
drm-misc-next for v6.3:

UAPI Changes:

 * fourcc: Document Open Source user waiver

Cross-subsystem Changes:

 * firmware: fix color-format selection for system framebuffers

Core Changes:

 * format-helper: Add conversion from XRGB8888 to various sysfb formats;
   Make XRGB8888 the only driver-emulated legacy format

 * fb-helper: Avoid blank consoles from selecting an incorrect color format

 * probe-helper: Enable/disable HPD on connectors plus driver updates

 * Use drm_dbg_ helpers in several places

 * docs: Document defaults for CRTC backgrounds; Document use of drm_minor

Driver Changes:

 * arm/hdlcd: Use new debugfs helpers

 * gud: Use new debugfs helpers

 * panel: Support Visionox VTDR6130 AMOLED DSI; Support Himax HX8394; Convert
   many drivers to common generic DSI write-sequence helper

 * v3d: Do not opencode drm_gem_object_lookup()

 * vc4: Various HVS an CRTC fixes

 * vkms: Fix SEGFAULT from incorrect GEM-buffer mapping

 * Convert various drivers to i2c probe_new()

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/Y8ADeSzZDj+tpibF@linux-uq9g
1  2 
Documentation/userspace-api/ioctl/ioctl-number.rst
MAINTAINERS
drivers/gpu/drm/drm_file.c
drivers/gpu/drm/drm_gem_shmem_helper.c
drivers/gpu/drm/i2c/tda998x_drv.c
drivers/gpu/drm/msm/hdmi/hdmi.c
drivers/gpu/drm/tests/drm_format_helper_test.c
include/drm/drm_device.h

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -375,12 -560,108 +560,108 @@@ static void drm_test_fb_xrgb8888_to_rgb
        iosys_map_set_vaddr(&src, xrgb8888);
  
        drm_fb_xrgb8888_to_rgb565(&dst, &result->dst_pitch, &src, &fb, &params->clip, false);
 -      KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0);
+       buf = le16buf_to_cpu(test, (__force const __le16 *)buf, dst_size / sizeof(__le16));
 +      KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);
  
+       buf = dst.vaddr; /* restore original value of buf */
        drm_fb_xrgb8888_to_rgb565(&dst, &result->dst_pitch, &src, &fb, &params->clip, true);
 -      KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected_swab, dst_size), 0);
+       buf = le16buf_to_cpu(test, (__force const __le16 *)buf, dst_size / sizeof(__le16));
 +      KUNIT_EXPECT_MEMEQ(test, buf, result->expected_swab, dst_size);
  }
  
+ static void drm_test_fb_xrgb8888_to_xrgb1555(struct kunit *test)
+ {
+       const struct convert_xrgb8888_case *params = test->param_value;
+       const struct convert_to_xrgb1555_result *result = &params->xrgb1555_result;
+       size_t dst_size;
+       u16 *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_XRGB1555, result->dst_pitch,
+                                      &params->clip);
+       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);
+       drm_fb_xrgb8888_to_xrgb1555(&dst, &result->dst_pitch, &src, &fb, &params->clip);
+       buf = le16buf_to_cpu(test, (__force const __le16 *)buf, dst_size / sizeof(__le16));
+       KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0);
+ }
+ static void drm_test_fb_xrgb8888_to_argb1555(struct kunit *test)
+ {
+       const struct convert_xrgb8888_case *params = test->param_value;
+       const struct convert_to_argb1555_result *result = &params->argb1555_result;
+       size_t dst_size;
+       u16 *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_ARGB1555, result->dst_pitch,
+                                      &params->clip);
+       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);
+       drm_fb_xrgb8888_to_argb1555(&dst, &result->dst_pitch, &src, &fb, &params->clip);
+       buf = le16buf_to_cpu(test, (__force const __le16 *)buf, dst_size / sizeof(__le16));
+       KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0);
+ }
+ static void drm_test_fb_xrgb8888_to_rgba5551(struct kunit *test)
+ {
+       const struct convert_xrgb8888_case *params = test->param_value;
+       const struct convert_to_rgba5551_result *result = &params->rgba5551_result;
+       size_t dst_size;
+       u16 *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_RGBA5551, result->dst_pitch,
+                                      &params->clip);
+       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);
+       drm_fb_xrgb8888_to_rgba5551(&dst, &result->dst_pitch, &src, &fb, &params->clip);
+       buf = le16buf_to_cpu(test, (__force const __le16 *)buf, dst_size / sizeof(__le16));
+       KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0);
+ }
  static void drm_test_fb_xrgb8888_to_rgb888(struct kunit *test)
  {
        const struct convert_xrgb8888_case *params = test->param_value;
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888);
        iosys_map_set_vaddr(&src, xrgb8888);
  
+       /*
+        * RGB888 expected results are already in little-endian
+        * order, so there's no need to convert the test output.
+        */
        drm_fb_xrgb8888_to_rgb888(&dst, &result->dst_pitch, &src, &fb, &params->clip);
 -      KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0);
 +      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;
+       const struct convert_to_argb8888_result *result = &params->argb8888_result;
+       size_t dst_size;
+       u32 *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_ARGB8888,
+                                      result->dst_pitch, &params->clip);
+       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);
+       drm_fb_xrgb8888_to_argb8888(&dst, &result->dst_pitch, &src, &fb, &params->clip);
+       buf = le32buf_to_cpu(test, (__force const __le32 *)buf, dst_size / sizeof(u32));
+       KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0);
+ }
  static void drm_test_fb_xrgb8888_to_xrgb2101010(struct kunit *test)
  {
        const struct convert_xrgb8888_case *params = test->param_value;
        iosys_map_set_vaddr(&src, xrgb8888);
  
        drm_fb_xrgb8888_to_xrgb2101010(&dst, &result->dst_pitch, &src, &fb, &params->clip);
 -      buf = le32buf_to_cpu(test, (__force const __le32 *)buf, dst_size / sizeof(u32));
 -      KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0);
 +      buf = le32buf_to_cpu(test, buf, dst_size / sizeof(u32));
 +      KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);
  }
  
+ static void drm_test_fb_xrgb8888_to_argb2101010(struct kunit *test)
+ {
+       const struct convert_xrgb8888_case *params = test->param_value;
+       const struct convert_to_argb2101010_result *result = &params->argb2101010_result;
+       size_t dst_size;
+       u32 *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_ARGB2101010,
+                                      result->dst_pitch, &params->clip);
+       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);
+       drm_fb_xrgb8888_to_argb2101010(&dst, &result->dst_pitch, &src, &fb, &params->clip);
+       buf = le32buf_to_cpu(test, (__force const __le32 *)buf, dst_size / sizeof(u32));
+       KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0);
+ }
  static struct kunit_case drm_format_helper_test_cases[] = {
        KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_gray8, convert_xrgb8888_gen_params),
        KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb332, convert_xrgb8888_gen_params),
@@@ -87,15 -87,25 +87,28 @@@ struct drm_device 
         */
        void *dev_private;
  
-       /** @primary: Primary node */
+       /**
+        * @primary:
+        *
+        * Primary node. Drivers should not interact with this
+        * directly. debugfs interfaces can be registered with
+        * drm_debugfs_add_file(), and sysfs should be directly added on the
+        * hardware (and not character device node) struct device @dev.
+        */
        struct drm_minor *primary;
  
-       /** @render: Render node */
+       /**
+        * @render:
+        *
+        * Render node. Drivers should not interact with this directly ever.
+        * Drivers should not expose any additional interfaces in debugfs or
+        * sysfs on this node.
+        */
        struct drm_minor *render;
  
 +      /** @accel: Compute Acceleration node */
 +      struct drm_minor *accel;
 +
        /**
         * @registered:
         *