1. 04 Nov, 2021 6 commits
    • Ville Syrjälä's avatar
      drm/i915: Split pre-skl primary plane update into noarm+arm pair · 4d0d77de
      Ville Syrjälä authored
      Chop i9xx_plane_update() into two halves. Fist half becomes
      the _noarm() variant, second part the _arm() variant.
      
      Fortunately I have already previously grouped the register
      writes into roughtly the correct order, so the split looks
      surprisingly clean.
      
      One slightly surprising fact was that the CHV pipe B PRIMPOS/SIZE
      registers are self arming unlike their pre-ctg DSPPOS/SIZE
      counterparts. In fact all the new CHV pipe B registers are
      self arming.
      
      Also we must remind ourselves that i830/i845 are a bit borked
      in that all of their plane registers are self-arming.
      
      I didn't do any i915_update_info measurements for this one
      alone. I'll get total numbers with the corrsponding sprite
      plane changes.
      
      v2: Don't break my precious i830/i845
      
      Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211020212757.13517-1-ville.syrjala@linux.intel.comReviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      4d0d77de
    • Ville Syrjälä's avatar
      drm/i915: Split skl+ plane update into noarm+arm pair · 890b6ec4
      Ville Syrjälä authored
      Chop skl_program_plane() into two halves. Fist half becomes
      the _noarm() variant, second part the _arm() variant.
      
      Fortunately I have already previously grouped the register
      writes into roughtly the correct order, so the split looks
      surprisingly clean.
      
      A few notable oddities I did not realize were self arming
      are AUX_DIST and COLOR_CTL.
      
      i915_update_info doesn't look too terrible on my cfl running
      kms_atomic_transition --r plane-all-transition --extended:
      w/o patch                           w/ patch
      Updates: 2178                       Updates: 2018
             |                                   |
         1us |                               1us |
             |                                   |
         4us |                               4us |*****
             |*********                          |**********
        16us |**********                    16us |*******
             |***                                |
        66us |                              66us |
             |                                   |
       262us |                             262us |
             |                                   |
         1ms |                               1ms |
             |                                   |
         4ms |                               4ms |
             |                                   |
        17ms |                              17ms |
             |                                   |
      Min update: 8332ns                  Min update: 6164ns
      Max update: 48758ns                 Max update: 31808ns
      Average update: 19959ns             Average update: 13159ns
      Overruns > 100us: 0                 Overruns > 100us: 0
      
      And with lockdep enabled:
      w/o patch                           w/ patch
      Updates: 2177			    Updates: 2172
             |			    	   |
         1us |			       1us |
             |			    	   |
         4us |			       4us |
             |*******			    	   |*********
        16us |**********		      16us |**********
             |*******			    	   |*
        66us |			      66us |
             |			    	   |
       262us |			     262us |
             |			    	   |
         1ms |			       1ms |
             |			    	   |
         4ms |			       4ms |
             |			    	   |
        17ms |			      17ms |
             |			    	   |
      Min update: 12645ns		    Min update: 9980ns
      Max update: 50153ns		    Max update: 33533ns
      Average update: 25337ns		    Average update: 18245ns
      Overruns > 250us: 0		    Overruns > 250us: 0
      
      TODO: On icl+ everything seems to be armed by PLANE_SURF, so we
            can optimize this even further on modern platforms. But I
            think there's a bit of refactoring to be done first to
            figure out the best way to go about it (eg. just reusing
            the current skl+ functions, or doing a lower level split).
      
      TODO: Split scaler programming as well, but IIRC the scaler
            has some oddball double buffering behaviour on some
            platforms, so needs proper reverse engineering
      
      Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211018115030.3547-6-ville.syrjala@linux.intel.comReviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      890b6ec4
    • Ville Syrjälä's avatar
      drm/i915: Split update_plane() into update_noarm() + update_arm() · 8ac80733
      Ville Syrjälä authored
      The amount of plane registers we have to write has been steadily
      increasing, putting more pressure on the vblank evasion mechanism
      and forcing us to increase its time budget. Let's try to take some
      of the pressure off by splitting plane updates into two parts:
      1) write all non-self arming plane registers, ie. the registers
         where the write actually does nothing until a separate arming
         register is also written which will cause the hardware to latch
         the new register values at the next start of vblank
      2) write all self arming plane registers, ie. registers which always
         just latch at the next start of vblank, and registers which also
         arm other registers to do so
      
      Here we just provide the mechanism, but don't actually implement
      the split on any platform yet. so everything stays now in the _arm()
      hooks. Subsequently we can move a whole bunch of stuff into the
      _noarm() part, especially in more modern platforms where the number
      of registers we have to write is also the greatest. On older
      platforms this is less beneficial probably, but no real reason
      to deviate from a common behaviour.
      
      And let's sprinkle some TODOs around the areas that will need
      adapting.
      
      Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211018115030.3547-5-ville.syrjala@linux.intel.comReviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      8ac80733
    • Ville Syrjälä's avatar
      drm/i915: Fix up the sprite namespacing · e56b80d9
      Ville Syrjälä authored
      Give all sprite exclusive functions/etc. a proper namespace.
      
      Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211018115030.3547-4-ville.syrjala@linux.intel.comReviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      e56b80d9
    • Ville Syrjälä's avatar
      drm/i915: Fix async flip with decryption and/or DPT · 50faf7a1
      Ville Syrjälä authored
      We're currently forgetting to set the PLANE_SURF_DECRYPT
      flag in the async flip path. So if the hardware were to
      latch that bit despite this being an async flip we'd start
      scanning out garbage. And if it doesn't latch it then I
      guess we'd just end up with a weird register value that
      doesn't actually match the hardware state, which isn't
      great for anyone staring at register dumps.
      
      Similarly the async flip path also forgets to call
      skl_surf_address() which means the DPT address space to
      GGTT address space downshift is not being applied to
      the offset. Which means we are pointing PLANE_SURF
      at some random location in GGTT instead of the correct
      DPT page.
      
      So let's fix two birds with one stone and extract the
      PLANE_SURF calculation from skl_program_plane() into
      a small helper and use it in the async flip path as well.
      
      Cc: Anshuman Gupta <anshuman.gupta@intel.com>
      Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
      Cc: Juston Li <juston.li@intel.com>
      Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
      Cc: Uma Shankar <uma.shankar@intel.com>
      Cc: Karthik B S <karthik.b.s@intel.com>
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211018115030.3547-3-ville.syrjala@linux.intel.comReviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      50faf7a1
    • Ville Syrjälä's avatar
      drm/i915: Reject planar formats when doing async flips · aaec72ee
      Ville Syrjälä authored
      Async flips are only capable of changing PLANE_SURF, hence we
      they can't easily be used with planar formats.
      
      Older platforms could require updating AUX_DIST as well, which
      is not possible. We'd have to make sure AUX_DIST doesn't change
      before allowing the async flip through. If we could get async
      flips with CCS then that might be interesting, but since the hw
      doesn't allow async flips with CCS I don't see much point in
      allowing this for planar formats either. No one renders their
      game content in YUV anyway.
      
      icl+ could in theory do this I suppose since each color plane
      has its own PLANE_SURF register, but I don't know if there is
      some magic to guarantee that both the Y and UV plane would
      async flip synchronously if you will. Ie. beyond just a clean
      tear we'd potentially get some kind of weird tear with some
      random mix of luma and chroma from the old and new frames.
      
      So let's just say no to async flips when scanning out planar
      formats.
      
      Cc: Karthik B S <karthik.b.s@intel.com>
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211018115030.3547-2-ville.syrjala@linux.intel.comReviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      aaec72ee
  2. 03 Nov, 2021 12 commits
  3. 02 Nov, 2021 8 commits
  4. 01 Nov, 2021 4 commits
  5. 29 Oct, 2021 7 commits
  6. 28 Oct, 2021 3 commits