1. 19 Nov, 2019 6 commits
  2. 18 Nov, 2019 2 commits
  3. 15 Nov, 2019 4 commits
  4. 14 Nov, 2019 14 commits
  5. 13 Nov, 2019 3 commits
  6. 12 Nov, 2019 7 commits
  7. 09 Nov, 2019 4 commits
    • Stephan Gerhold's avatar
      drm/mcde: Handle pending vblank while disabling display · 97de8636
      Stephan Gerhold authored
      Disabling the display using MCDE currently results in a warning
      together with a delay caused by some timeouts:
      
          mcde a0350000.mcde: MCDE display is disabled
          ------------[ cut here ]------------
          WARNING: CPU: 0 PID: 20 at drivers/gpu/drm/drm_atomic_helper.c:2258 drm_atomic_helper_commit_hw_done+0xe0/0xe4
          Hardware name: ST-Ericsson Ux5x0 platform (Device Tree Support)
          Workqueue: events drm_mode_rmfb_work_fn
          [<c010f468>] (unwind_backtrace) from [<c010b54c>] (show_stack+0x10/0x14)
          [<c010b54c>] (show_stack) from [<c079dd90>] (dump_stack+0x84/0x98)
          [<c079dd90>] (dump_stack) from [<c011d1b0>] (__warn+0xb8/0xd4)
          [<c011d1b0>] (__warn) from [<c011d230>] (warn_slowpath_fmt+0x64/0xc4)
          [<c011d230>] (warn_slowpath_fmt) from [<c0413048>] (drm_atomic_helper_commit_hw_done+0xe0/0xe4)
          [<c0413048>] (drm_atomic_helper_commit_hw_done) from [<c04159cc>] (drm_atomic_helper_commit_tail_rpm+0x44/0x6c)
          [<c04159cc>] (drm_atomic_helper_commit_tail_rpm) from [<c0415f5c>] (commit_tail+0x50/0x10c)
          [<c0415f5c>] (commit_tail) from [<c04160dc>] (drm_atomic_helper_commit+0xbc/0x128)
          [<c04160dc>] (drm_atomic_helper_commit) from [<c0430790>] (drm_framebuffer_remove+0x390/0x428)
          [<c0430790>] (drm_framebuffer_remove) from [<c0430860>] (drm_mode_rmfb_work_fn+0x38/0x48)
          [<c0430860>] (drm_mode_rmfb_work_fn) from [<c01368a8>] (process_one_work+0x1f0/0x43c)
          [<c01368a8>] (process_one_work) from [<c0136d48>] (worker_thread+0x254/0x55c)
          [<c0136d48>] (worker_thread) from [<c013c014>] (kthread+0x124/0x150)
          [<c013c014>] (kthread) from [<c01010e8>] (ret_from_fork+0x14/0x2c)
          Exception stack(0xeb14dfb0 to 0xeb14dff8)
          dfa0:                                     00000000 00000000 00000000 00000000
          dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
          dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
          ---[ end trace 314909bcd4c7d50c ]---
          [drm:drm_atomic_helper_wait_for_dependencies] *ERROR* [CRTC:32:crtc-0] flip_done timed out
          [drm:drm_atomic_helper_wait_for_dependencies] *ERROR* [CONNECTOR:34:DSI-1] flip_done timed out
          [drm:drm_atomic_helper_wait_for_dependencies] *ERROR* [PLANE:31:plane-0] flip_done timed out
      
      The reason for this is that there is a vblank event pending, but we
      never handle it after disabling the vblank interrupts.
      
      Check if there is an vblank event pending when disabling the display,
      and clear it by sending a fake vblank event in that case.
      Signed-off-by: default avatarStephan Gerhold <stephan@gerhold.net>
      Tested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191106165835.2863-8-stephan@gerhold.net
      97de8636
    • Stephan Gerhold's avatar
      drm/mcde: dsi: Enable clocks in pre_enable() instead of mode_set() · 3c5824bd
      Stephan Gerhold authored
      The DSI initialization sequence incorrectly assumes that the mode_set()
      function of the DRM bridge is always called when (re-)enabling the display.
      This is not necessarily the case.
      
      Keeping the device idle in the framebuffer console for a while results
      in the display being turned off using the disable() function. However,
      as soon as any key is pressed only (pre_)enable() are called.
      mode_set() is skipped because the mode has not been changed.
      
      In this case, the DSI HS/LP clocks are never turned back on,
      preventing the display from working.
      
      Fix this by moving a part of the initialization sequence from
      mode_set() to pre_enable(). Keep most of the video mode setup in
      mode_set() since most of the registers are only dependent on the mode
      that is set for the panel - there is no need to write them again each
      time we re-enable the display.
      Signed-off-by: default avatarStephan Gerhold <stephan@gerhold.net>
      Tested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191106165835.2863-7-stephan@gerhold.net
      3c5824bd
    • Stephan Gerhold's avatar
      drm/mcde: dsi: Fix duplicated DSI connector · 1f79c60e
      Stephan Gerhold authored
      Using a (single) DSI display with MCDE currently results in
      two "connected" connectors:
      
        Connector: DSI-1
                id             : 34
                encoder id     : 0
                conn           : connected
                size           : 0x0 (mm)
                count_modes    : 0
                count_props    : 5
                props          : 1 2 5 6 4
                count_encoders : 1
                encoders       : 33
        Connector: DSI-2
                id             : 35
                encoder id     : 33
                conn           : connected
                size           : 53x89 (mm)
                count_modes    : 1
                count_props    : 5
                props          : 1 2 5 6 4
                count_encoders : 1
                encoders       : 33
          Mode: "480x800" 480x800 60
      
      Although both show up as connected, the first one does not have
      any size and no available modes. This confuses userspace tools
      (e.g. kmscube) who look for available modes for the first connector.
      
      The reason for the duplicated connector is that mcde_dsi.c and the
      DRM panel bridge helper both set up a DSI connector, with more or less
      the same code. The connector set up by the DRM panel bridge is the
      one that is correctly set up in the example above.
      
      Therefore we can just remove the connector setup from mcde_dsi.c
      and let the DRM core handle all the hard work.
      Signed-off-by: default avatarStephan Gerhold <stephan@gerhold.net>
      Tested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191106165835.2863-6-stephan@gerhold.net
      1f79c60e
    • Stephan Gerhold's avatar
      drm/mcde: dsi: Delay start of video stream generator · 6ddfb00d
      Stephan Gerhold authored
      The initialization order for DSI video mode is important - if we
      enable the video stream generator (VSG) before the MCDE DSI formatter
      starts sending pixel data, it will immediately run into an error and
      disable itself again.
      
      Avoid this problem by delaying the activation of the VSG
      until the MCDE DSI formatter is properly set up and running
      (i.e. when mcde_dsi_bridge_enable() is called).
      Signed-off-by: default avatarStephan Gerhold <stephan@gerhold.net>
      Tested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191106165835.2863-5-stephan@gerhold.net
      6ddfb00d