1. 17 Oct, 2022 18 commits
  2. 16 Oct, 2022 11 commits
  3. 15 Oct, 2022 4 commits
  4. 14 Oct, 2022 5 commits
  5. 13 Oct, 2022 2 commits
    • Abhinav Kumar's avatar
      drm/bridge: adv7533: remove dynamic lane switching from adv7533 bridge · 9a0cdcd6
      Abhinav Kumar authored
      adv7533 bridge tries to dynamically switch lanes based on the
      mode by detaching and attaching the mipi dsi device.
      
      This approach is incorrect because this method of dynamic switch of
      detaching and attaching the mipi dsi device also results in removing
      and adding the component which is not necessary.
      
      This approach is also prone to deadlocks. So for example, on the
      db410c whenever this path is executed with lockdep enabled,
      this results in a deadlock due to below ordering of locks.
      
      -> #1 (crtc_ww_class_acquire){+.+.}-{0:0}:
              lock_acquire+0x6c/0x90
              drm_modeset_acquire_init+0xf4/0x150
              drmm_mode_config_init+0x220/0x770
              msm_drm_bind+0x13c/0x654
              try_to_bring_up_aggregate_device+0x164/0x1d0
              __component_add+0xa8/0x174
              component_add+0x18/0x2c
              dsi_dev_attach+0x24/0x30
              dsi_host_attach+0x98/0x14c
              devm_mipi_dsi_attach+0x38/0xb0
              adv7533_attach_dsi+0x8c/0x110
              adv7511_probe+0x5a0/0x930
              i2c_device_probe+0x30c/0x350
              really_probe.part.0+0x9c/0x2b0
              __driver_probe_device+0x98/0x144
              driver_probe_device+0xac/0x14c
              __device_attach_driver+0xbc/0x124
              bus_for_each_drv+0x78/0xd0
              __device_attach+0xa8/0x1c0
              device_initial_probe+0x18/0x24
              bus_probe_device+0xa0/0xac
              deferred_probe_work_func+0x90/0xd0
              process_one_work+0x28c/0x6b0
              worker_thread+0x240/0x444
              kthread+0x110/0x114
              ret_from_fork+0x10/0x20
      
      -> #0 (component_mutex){+.+.}-{3:3}:
              __lock_acquire+0x1280/0x20ac
              lock_acquire.part.0+0xe0/0x230
              lock_acquire+0x6c/0x90
              __mutex_lock+0x84/0x400
              mutex_lock_nested+0x3c/0x70
              component_del+0x34/0x170
              dsi_dev_detach+0x24/0x30
              dsi_host_detach+0x20/0x64
              mipi_dsi_detach+0x2c/0x40
              adv7533_mode_set+0x64/0x90
              adv7511_bridge_mode_set+0x210/0x214
              drm_bridge_chain_mode_set+0x5c/0x84
              crtc_set_mode+0x18c/0x1dc
              drm_atomic_helper_commit_modeset_disables+0x40/0x50
              msm_atomic_commit_tail+0x1d0/0x6e0
              commit_tail+0xa4/0x180
              drm_atomic_helper_commit+0x178/0x3b0
              drm_atomic_commit+0xa4/0xe0
              drm_client_modeset_commit_atomic+0x228/0x284
              drm_client_modeset_commit_locked+0x64/0x1d0
              drm_client_modeset_commit+0x34/0x60
              drm_fb_helper_lastclose+0x74/0xcc
              drm_lastclose+0x3c/0x80
              drm_release+0xfc/0x114
              __fput+0x70/0x224
              ____fput+0x14/0x20
              task_work_run+0x88/0x1a0
              do_exit+0x350/0xa50
              do_group_exit+0x38/0xa4
              __wake_up_parent+0x0/0x34
              invoke_syscall+0x48/0x114
              el0_svc_common.constprop.0+0x60/0x11c
              do_el0_svc+0x30/0xc0
              el0_svc+0x58/0x100
              el0t_64_sync_handler+0x1b0/0x1bc
              el0t_64_sync+0x18c/0x190
      
      Due to above reasons, remove the dynamic lane switching
      code from adv7533 bridge chip and filter out the modes
      which would need different number of lanes as compared
      to the initialization time using the mode_valid callback.
      
      This can be potentially re-introduced by using the pre_enable()
      callback but this needs to be evaluated first whether such an
      approach will work so this will be done with a separate change.
      
      changes since RFC:
      	- Fix commit text and add TODO comment
      
      changes in v2:
      	- Fix checkpatch formatting errors
      
      Fixes: 62b2f026 ("drm/bridge: adv7533: Change number of DSI lanes dynamically")
      Closes: https://gitlab.freedesktop.org/drm/msm/-/issues/16Suggested-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Signed-off-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
      Reviewed-by: default avatarRobert Foss <robert.foss@linaro.org>
      Link: https://lore.kernel.org/r/1661797363-7564-1-git-send-email-quic_abhinavk@quicinc.comSigned-off-by: default avatarRobert Foss <robert.foss@linaro.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/1665522649-3423-1-git-send-email-quic_abhinavk@quicinc.com
      9a0cdcd6
    • Javier Martinez Canillas's avatar
      drm/crtc-helper: Add a drm_crtc_helper_atomic_check() helper · 7fed7fa3
      Javier Martinez Canillas authored
      Provides a default CRTC state check handler for CRTCs that only have one
      primary plane attached.
      
      There are some drivers that duplicate this logic in their helpers, such as
      simpledrm and ssd130x. Factor out this common code into a CRTC helper and
      make drivers use it.
      Signed-off-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
      Reviewed-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Link: https://patchwork.freedesktop.org/patch/msgid/20221011165136.469750-5-javierm@redhat.com
      7fed7fa3