1. 14 Aug, 2020 8 commits
  2. 11 Aug, 2020 1 commit
  3. 10 Aug, 2020 22 commits
  4. 07 Aug, 2020 5 commits
  5. 06 Aug, 2020 4 commits
    • Nicholas Kazlauskas's avatar
      drm/amd/display: Drop dm_determine_update_type_for_commit · f6d7c7fa
      Nicholas Kazlauskas authored
      [Why]
      This was added in the past to solve the issue of not knowing when
      to stall for medium and full updates in DM.
      
      Since DC is ultimately decides what requires bandwidth changes we
      wanted to make use of it directly to determine this.
      
      The problem is that we can't actually pass any of the stream or surface
      updates into DC global validation, so we don't actually check if the new
      configuration is valid - we just validate the old existing config
      instead and stall for outstanding commits to finish.
      
      There's also the problem of grabbing the DRM private object for
      pageflips which can lead to page faults in the case where commits
      execute out of order and free a DRM private object state that was
      still required for commit tail.
      
      [How]
      Now that we reset the plane in DM with the same conditions DC checks
      we can have planes go through DC validation and we know when we need
      to check and stall based on whether the stream or planes changed.
      
      We mark lock_and_validation_needed whenever we've done this, so just
      go back to using that instead of dm_determine_update_type_for_commit.
      
      Since we'll skip resetting the plane for a pageflip we will no longer
      grab the DRM private object for pageflips as well, avoiding the
      page fault issued caused by pageflipping under load with commits
      executing out of order.
      Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
      Reviewed-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      f6d7c7fa
    • Nicholas Kazlauskas's avatar
      drm/amd/display: Reset plane for anything that's not a FAST update · dc4cb30d
      Nicholas Kazlauskas authored
      [Why]
      MEDIUM or FULL updates can require global validation or affect
      bandwidth. By treating these all simply as surface updates we aren't
      actually passing this through DC global validation.
      
      [How]
      There's currently no way to pass surface updates through DC global
      validation, nor do I think it's a good idea to change the interface
      to accept these.
      
      DC global validation itself is currently stateless, and we can move
      our update type checking to be stateless as well by duplicating DC
      surface checks in DM based on DRM properties.
      
      We wanted to rely on DC automatically determining this since DC knows
      best, but DM is ultimately what fills in everything into DC plane
      state so it does need to know as well.
      
      There are basically only three paths that we exercise in DM today:
      
      1) Cursor (async update)
      2) Pageflip (fast update)
      3) Full pipe programming (medium/full updates)
      
      Which means that anything that's more than a pageflip really needs to
      go down path #3.
      
      So this change duplicates all the surface update checks based on DRM
      state instead inside of should_reset_plane().
      
      Next step is dropping dm_determine_update_type_for_commit and we no
      longer require the old DC state at all for global validation.
      
      Optimization can come later so we don't reset DC planes at all for
      MEDIUM udpates and avoid validation, but we might require some extra
      checks in DM to achieve this.
      Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
      Reviewed-by: default avatarHersen Wu <hersenxs.wu@amd.com>
      Reviewed-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      dc4cb30d
    • Nicholas Kazlauskas's avatar
      drm/amd/display: Use validated tiling_flags and tmz_surface in commit_tail · 8ce5d842
      Nicholas Kazlauskas authored
      [Why]
      So we're not racing with userspace or deadlocking DM.
      
      [How]
      These flags are now stored on dm_plane_state itself and acquried and
      validated during commit_check, so just use those instead.
      Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
      Reviewed-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      8ce5d842
    • Nicholas Kazlauskas's avatar
      drm/amd/display: Avoid using unvalidated tiling_flags and tmz_surface in prepare_planes · cf322b49
      Nicholas Kazlauskas authored
      [Why]
      We're racing with userspace as the flags could potentially change
      from when we acquired and validated them in commit_check.
      
      [How]
      We unfortunately can't drop this function in its entirety from
      prepare_planes since we don't know the afb->address at commit_check
      time yet.
      
      So instead of querying new tiling_flags and tmz_surface use the ones
      from the plane_state directly.
      
      While we're at it, also update the force_disable_dcc option based
      on the state from atomic check.
      Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
      Reviewed-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      cf322b49