1. 21 Oct, 2019 3 commits
  2. 02 Oct, 2019 12 commits
  3. 30 Sep, 2019 1 commit
    • Ondrej Jirman's avatar
      drm: sun8i-ui/vi: Fix layer zpos change/atomic modesetting · 86a63c38
      Ondrej Jirman authored
      A problem was found where identical configuration of planes leads
      to different register settings at the HW layer when using a X server
      with modesetting driver and one plane marked as a cursor.
      
      On first run of the X server, only the black screen and the layer
      containing the cursor is visible. Switching to console and back
      corrects the situation.
      
      I have dumped registers, and found out this:
      
      1) First Xorg run:
      
        0x01101000 : 00000201
        0x01101080 : 00000030
      
        BLD_FILL_COLOR_CTL: (aka SUN8I_MIXER_BLEND_PIPE_CTL)
          P1_EN
      
        BLD_CH_RTCTL: (aka SUN8I_MIXER_BLEND_ROUTE)
          P0_RTCTL channel0
          P1_RTCTL channel3
      
      2) After switch to console and back to Xorg:
      
      0x01101000 : 00000301
      0x01101080 : 00000031
      
        BLD_FILL_COLOR_CTL:
          P1_EN and P0_EN
      
        BLD_CH_RTCTL:
          P0_RTCTL channel1
          P1_RTCTL channel3
      
      What happens is that sun8i_ui_layer_enable() function may disable
      blending pipes even if it is no longer assigned to its layer, because
      of incorrect state/zpos tracking in the driver.
      
      In particular, layer 1 is configured to zpos 0 and thus uses pipe 0.
      When layer 3 is enabledb y X server, sun8i_ui_layer_enable() will get
      called with old_zpos=0 zpos=1, which will lead to disabling of pipe 0.
      
      In general this issue can happen to any layer during enable or zpos
      changes on multiple layers at once.
      
      To correct this we now pass previous enabled/disabled state of the
      layer, and pass real previous zpos of the layer to
      sun8i_ui_layer_enable() and rework the sun8i_ui_layer_enable() function
      to take react to the state changes correctly. In order to not complicate
      the atomic_disable callback with all of the above changes, we simply
      remove it and implement all the chanes as part of atomic_update, which
      also reduces the code duplication.
      
      To make this all work, initial zpos positions of all layers need to be
      restored to initial values on reset.
      Signed-off-by: default avatarOndrej Jirman <megous@megous.com>
      86a63c38
  4. 28 Sep, 2019 1 commit
  5. 25 Sep, 2019 1 commit
  6. 16 Sep, 2019 22 commits