1. 10 Sep, 2022 1 commit
  2. 09 Sep, 2022 10 commits
  3. 08 Sep, 2022 4 commits
    • Imre Deak's avatar
      drm/dp_mst: Avoid deleting payloads for connectors staying enabled · 5d832b66
      Imre Deak authored
      When an MST connector stays enabled during a commit the connector's MST
      state needs to be added to the atomic state, but the corresponding MST
      payload allocation shouldn't be set for deletion; fix such modesets by
      ensuring the above even if the connector was already enabled before the
      modeset.
      
      The issue led to the following:
      [  761.992923] i915 0000:00:02.0: drm_WARN_ON(payload->delete)
      [  761.992949] WARNING: CPU: 6 PID: 1401 at drivers/gpu/drm/display/drm_dp_mst_topology.c:4221 drm_dp_atomic_find_time_slots+0x236/0x280 [drm_display_helper]
      [  761.992955] Modules linked in: snd_hda_intel i915 drm_buddy drm_display_helper drm_kms_helper ttm drm snd_hda_codec_hdmi snd_intel_dspcfg snd_hda_codec snd_hwdep snd_hda_core snd_pcm prime_numbers i2c_algo_bit syscopyarea sysfillrect sysimgblt fb_sys_fops x86_pkg_temp_thermal cdc_ether coretemp crct10dif_pclmul usbnet crc32_pclmul mii ghash_clmulni_intel e1000e mei_me ptp i2c_i801 pps_core mei i2c_smbus intel_lpss_pci fuse [last unloaded: drm]
      [  761.992986] CPU: 6 PID: 1401 Comm: testdisplay Tainted: G     U             6.0.0-rc4-imre+ #565
      [  761.992989] Hardware name: Intel Corporation Alder Lake Client Platform/AlderLake-P DDR5 RVP, BIOS ADLPFWI1.R00.3135.A00.2203251419 03/25/2022
      [  761.992990] RIP: 0010:drm_dp_atomic_find_time_slots+0x236/0x280 [drm_display_helper]
      [  761.992994] Code: 4c 8b 67 50 4d 85 e4 75 03 4c 8b 27 e8 03 28 4e e1 48 c7 c1 8b 26 2c a0 4c 89 e2 48 c7 c7 a8 26 2c a0 48 89 c6 e8 31 d5 88 e1 <0f> 0b 49 8b 85 d0 00 00 00 4c 89 fa 48 c7 c6 a0 41 2c a0 48 8b 78
      [  761.992995] RSP: 0018:ffffc9000177ba60 EFLAGS: 00010286
      [  761.992998] RAX: 0000000000000000 RBX: ffff88810d2f1540 RCX: 0000000000000000
      [  761.992999] RDX: 0000000000000001 RSI: ffffffff82368a25 RDI: 00000000ffffffff
      [  761.993000] RBP: ffff888142299d80 R08: ffff8884adbfdfe8 R09: 00000000ffefffff
      [  761.993001] R10: ffff8884a6bfe000 R11: ffff8884ac443c30 R12: ffff888102972f90
      [  761.993002] R13: ffff8881163e2cf0 R14: 00000000000003ac R15: ffff88810c501000
      [  761.993003] FS:  00007f81e4c459c0(0000) GS:ffff888496500000(0000) knlGS:0000000000000000
      [  761.993004] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  761.993005] CR2: 0000555dac962a98 CR3: 0000000123a34006 CR4: 0000000000770ee0
      [  761.993006] PKRU: 55555554
      [  761.993007] Call Trace:
      [  761.993009]  <TASK>
      [  761.993012]  intel_dp_mst_compute_config+0x19a/0x350 [i915]
      [  761.993090]  intel_atomic_check+0xf37/0x3180 [i915]
      [  761.993168]  drm_atomic_check_only+0x5d3/0xa60 [drm]
      [  761.993182]  drm_atomic_commit+0x56/0xc0 [drm]
      [  761.993192]  ? drm_plane_get_damage_clips.cold+0x1c/0x1c [drm]
      [  761.993204]  drm_atomic_helper_set_config+0x78/0xc0 [drm_kms_helper]
      [  761.993214]  drm_mode_setcrtc+0x1ed/0x750 [drm]
      [  761.993232]  ? drm_mode_getcrtc+0x180/0x180 [drm]
      [  761.993241]  drm_ioctl_kernel+0xb5/0x150 [drm]
      [  761.993252]  drm_ioctl+0x203/0x3d0 [drm]
      [  761.993261]  ? drm_mode_getcrtc+0x180/0x180 [drm]
      [  761.993276]  __x64_sys_ioctl+0x8a/0xb0
      [  761.993281]  do_syscall_64+0x38/0x90
      [  761.993285]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
      [  761.993287] RIP: 0033:0x7f81e551aaff
      [  761.993288] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <41> 89 c0 3d 00 f0 ff ff 77 1f 48 8b 44 24 18 64 48 2b 04 25 28 00
      [  761.993290] RSP: 002b:00007fff4304af10 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      [  761.993292] RAX: ffffffffffffffda RBX: 00007fff4304afa0 RCX: 00007f81e551aaff
      [  761.993293] RDX: 00007fff4304afa0 RSI: 00000000c06864a2 RDI: 0000000000000004
      [  761.993294] RBP: 00000000c06864a2 R08: 0000000000000000 R09: 0000555dac8a9c68
      [  761.993294] R10: 0000000000000000 R11: 0000000000000246 R12: 00000000000008c4
      [  761.993295] R13: 0000000000000004 R14: 0000555dac8a9c68 R15: 00007fff4304b098
      [  761.993301]  </TASK>
      
      Fixes: 083351e9 ("drm/display/dp_mst: Fix modeset tracking in drm_dp_atomic_release_vcpi_slots()")
      Testcase: igt@testdisplay
      Cc: Lyude Paul <lyude@redhat.com>
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220907142542.1681994-1-imre.deak@intel.com
      5d832b66
    • Chen-Yu Tsai's avatar
      drm/panel-edp: Add Innolux N120ACA-EA1 panel entry · 758d7b34
      Chen-Yu Tsai authored
      This panel has the same delay timing as N116BCA-EA1 from the same
      company, which is also the same as delay_200_500_e80_d50.
      
      Add an entry for it.
      Signed-off-by: default avatarChen-Yu Tsai <wenst@chromium.org>
      Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
      Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220908085454.1024167-2-wenst@chromium.org
      758d7b34
    • Maxime Ripard's avatar
      drm/sun4i: tv: Merge mode_set into atomic_enable · ec491291
      Maxime Ripard authored
      Our mode_set implementation can be merged into our atomic_enable
      implementation to simplify things, so let's do this.
      Acked-by: default avatarJernej Skrabec <jernej.skrabec@gmail.com>
      Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220728-rpi-analog-tv-properties-v2-36-459522d653a7@cerno.tech
      ec491291
    • Javier Martinez Canillas's avatar
      drm/ssd130x: Replace simple display helpers with the atomic helpers · 622113b9
      Javier Martinez Canillas authored
      The simple display pipeline is a set of helpers that can be used by DRM
      drivers to avoid dealing with all the needed components and just define
      a few functions to operate a simple display device with one full-screen
      scanout buffer feeding a single output.
      
      But it is arguable that this provides the correct level of abstraction
      for simple drivers, and recently some have been ported from using these
      simple display helpers to use the regular atomic helpers instead.
      
      The rationale for this is that the simple display pipeline helpers don't
      hide that much of the DRM complexity, while adding an indirection layer
      that conflates the concepts of CRTCs and planes. This makes the helpers
      less flexible and harder to be reused among different graphics drivers.
      
      Also, for simple drivers, using the full atomic helpers doesn't require
      a lot of additional code. So adding a simple display pipeline layer may
      not be worth it.
      
      For these reasons, let's follow that trend and make ssd130x a plain DRM
      driver that creates its own primary plane, CRTC, enconder and connector.
      Suggested-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Signed-off-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
      Acked-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220905222759.2597186-1-javierm@redhat.com
      622113b9
  4. 07 Sep, 2022 17 commits
  5. 06 Sep, 2022 3 commits
  6. 05 Sep, 2022 5 commits
    • Igor Torrente's avatar
      drm: vkms: Add support to the RGB565 format · 396369d6
      Igor Torrente authored
      This commit also adds new helper macros to deal with fixed-point
      arithmetic.
      
      It was done to improve the precision of the conversion to ARGB16161616
      since the "conversion ratio" is not an integer.
      
      V3: Adapt the handlers to the new format introduced in patch 7 V3.
      V5: Minor improvements
      V6: Minor improvements (Pekka Paalanen)
      Reviewed-by: default avatarMelissa Wen <mwen@igalia.com>
      Signed-off-by: default avatarIgor Torrente <igormtorrente@gmail.com>
      Signed-off-by: default avatarMelissa Wen <melissa.srw@gmail.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220905190811.25024-10-igormtorrente@gmail.com
      396369d6
    • Igor Torrente's avatar
      drm: vkms: Adds XRGB_16161616 and ARGB_1616161616 formats · 3675d8a1
      Igor Torrente authored
      This will be useful to write tests that depends on these formats.
      
      ARGB and XRGB follows the a similar implementation of the former formats.
      Just adjusting for 16 bits per channel.
      
      V3: Adapt the handlers to the new format introduced in patch 7 V3.
      V5: Minor improvements
          Added le16_to_cpu/cpu_to_le16 to the 16 bits color read/writes.
      Reviewed-by: default avatarMelissa Wen <mwen@igalia.com>
      Signed-off-by: default avatarIgor Torrente <igormtorrente@gmail.com>
      Signed-off-by: default avatarMelissa Wen <melissa.srw@gmail.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220905190811.25024-9-igormtorrente@gmail.com
      3675d8a1
    • Igor Torrente's avatar
      drm: vkms: Supports to the case where primary plane doesn't match the CRTC · bc0d7fde
      Igor Torrente authored
      We will remove the current assumption that the primary plane has the
      same size and position as CRTC and that the primary plane is the
      bottom-most in zpos order, or is even enabled. At least as far
      as the blending machinery is concerned.
      
      For that we will add CRTC dimension information to `vkms_crtc_state`
      and add a opaque black backgound color.
      
      Because now we need to fill the background, we had a loss in
      performance with this change. Results running the IGT[1] test
      `igt@kms_cursor_crc@pipe-a-cursor-512x512-onscreen` ten times:
      
      |                  Frametime                   |
      |:--------------------------------------------:|
      |  Implementation |  Previous |   This commit  |
      |:---------------:|:---------:|:--------------:|
      | frametime range |  5~18 ms  |     10~22 ms   |
      |     Average     |  8.47 ms  |     12.32 ms   |
      
      [1] IGT commit id: bc3f6833a12221a46659535dac06ebb312490eb4
      
      V6: Improve the commit description (Pekka Paalanen).
          Update some comments (Pekka Paalanen).
          Remove some fields from `vkms_crtc_state` and move where
          some variables are set (Pekka Paalanen).
      Reviewed-by: default avatarMelissa Wen <mwen@igalia.com>
      Signed-off-by: default avatarIgor Torrente <igormtorrente@gmail.com>
      Signed-off-by: default avatarMelissa Wen <melissa.srw@gmail.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220905190811.25024-8-igormtorrente@gmail.com
      bc0d7fde
    • Igor Torrente's avatar
      drm: vkms: Refactor the plane composer to accept new formats · 8ba16485
      Igor Torrente authored
      Currently the blend function only accepts XRGB_8888 and ARGB_8888
      as a color input.
      
      This patch refactors all the functions related to the plane composition
      to overcome this limitation.
      
      The pixels blend is done using the new internal format. And new handlers
      are being added to convert a specific format to/from this internal format.
      
      So the blend operation depends on these handlers to convert to this common
      format. The blended result, if necessary, is converted to the writeback
      buffer format.
      
      This patch introduces three major differences to the blend function.
      1 - All the planes are blended at once.
      2 - The blend calculus is done as per line instead of per pixel.
      3 - It is responsible to calculates the CRC and writing the writeback
      buffer(if necessary).
      
      These changes allow us to allocate way less memory in the intermediate
      buffer to compute these operations. Because now we don't need to
      have the entire intermediate image lines at once, just one line is
      enough.
      
      | Memory consumption (output dimensions) |
      |:--------------------------------------:|
      |       Current      |     This patch    |
      |:------------------:|:-----------------:|
      |   Width * Heigth   |     2 * Width     |
      
      Beyond memory, we also have a minor performance benefit from all
      these changes. Results running the IGT[1] test
      `igt@kms_cursor_crc@pipe-a-cursor-512x512-onscreen` ten times:
      
      |                 Frametime                  |
      |:------------------------------------------:|
      |  Implementation |  Current  |  This commit |
      |:---------------:|:---------:|:------------:|
      | frametime range |  9~22 ms  |    5~17 ms   |
      |     Average     |  11.4 ms  |    7.8 ms    |
      
      [1] IGT commit id: bc3f6833a12221a46659535dac06ebb312490eb4
      
      V2: Improves the performance drastically, by performing the operations
          per-line and not per-pixel(Pekka Paalanen).
          Minor improvements(Pekka Paalanen).
      V3: Changes the code to blend the planes all at once. This improves
          performance, memory consumption, and removes much of the weirdness
          of the V2(Pekka Paalanen and me).
          Minor improvements(Pekka Paalanen and me).
      V4: Rebase the code and adapt it to the new NUM_OVERLAY_PLANES constant.
      V5: Minor checkpatch fixes and the removal of TO-DO item(Melissa Wen).
          Several security/robustness improvents(Pekka Paalanen).
          Removes check_planes_x_bounds function and allows partial
          partly off-screen(Pekka Paalanen).
      V6: Fix a mismatch of some variable sizes (Pekka Paalanen).
          Several minor improvements (Pekka Paalanen).
      Reviewed-by: default avatarMelissa Wen <mwen@igalia.com>
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarIgor Torrente <igormtorrente@gmail.com>
      Signed-off-by: default avatarMelissa Wen <melissa.srw@gmail.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220905190811.25024-7-igormtorrente@gmail.com
      8ba16485
    • Igor Torrente's avatar
      drm: vkms: Add fb information to `vkms_writeback_job` · bbdf7b2a
      Igor Torrente authored
      This commit is the groundwork to introduce new formats to the planes and
      writeback buffer. As part of it, a new buffer metadata field is added to
      `vkms_writeback_job`, this metadata is represented by the `vkms_frame_info`
      struct.
      
      Also adds two new function pointers (`line_to_frame_func` and
      `frame_to_line_func`) are defined to handle format conversion
      from/to internal format.
      
      A new internal format(`struct pixel_argb_u16`) is introduced to deal with
      all possible inputs. It consists of 16 bits fields that represent each of
      the channels.
      
      These things will allow us, in the future, to have different compositing
      and wb format types.
      
      V2: Change the code to get the drm_framebuffer reference and not copy its
          contents (Thomas Zimmermann).
      V3: Drop the refcount in the wb code (Thomas Zimmermann).
      V5: Add {wb,plane}_format_transform_func to vkms_writeback_job
          and vkms_plane_state (Pekka Paalanen)
      V6: Improvements to some struct/struct members names (Pekka Paalanen).
          Splits this patch in two (Pekka Paalanen).
      V7: Replace line_to_frame_func and frame_to_line_func typedefs
         with the function signature and void* (Melissa Wen).
      Reviewed-by: default avatarMelissa Wen <mwen@igalia.com>
      Signed-off-by: default avatarIgor Torrente <igormtorrente@gmail.com>
      Signed-off-by: default avatarMelissa Wen <melissa.srw@gmail.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220905190811.25024-6-igormtorrente@gmail.com
      bbdf7b2a