1. 14 Aug, 2020 10 commits
  2. 11 Aug, 2020 1 commit
  3. 10 Aug, 2020 22 commits
  4. 07 Aug, 2020 5 commits
  5. 06 Aug, 2020 2 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