1. 18 Nov, 2021 1 commit
    • Hans de Goede's avatar
      drm/i915/vlv_dsi: Double pixelclock on read-back for dual-link panels · 41211134
      Hans de Goede authored
      In intel_dsi_get_config() double the pclk returned by foo_dsi_get_pclk()
      for dual-link panels. This fixes the following WARN triggering:
      
       i915 0000:00:02.0: [drm] *ERROR* [CRTC:51:pipe A] mismatch in pixel_rate (expected 235710, found 118056)
       i915 0000:00:02.0: [drm] *ERROR* [CRTC:51:pipe A] mismatch in hw.pipe_mode.crtc_clock (expected 235710, found 118056)
       i915 0000:00:02.0: [drm] *ERROR* [CRTC:51:pipe A] mismatch in hw.adjusted_mode.crtc_clock (expected 235710, found 118056)
       i915 0000:00:02.0: [drm] *ERROR* [CRTC:51:pipe A] mismatch in port_clock (expected 235710, found 118056)
       ------------[ cut here ]------------
       pipe state doesn't match!
       WARNING: CPU: 3 PID: 136 at drivers/gpu/drm/i915/display/intel_display.c:9125 intel_display_finish_reset+0x1bd3/0x2050 [i915]
       ...
      
      This has been tested on a Xiaomi Mi Pad 2 (with CHT x5-Z8500 SoC) tablet,
      with a 1536x2048 dual-link DSI panel.
      
      Note this fix was taken from icl_dsi.c which does the same in
      its get_config().
      
      Cc: Tsuchiya Yuto <kitakar@gmail.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Acked-by: default avatarJani Nikula <jani.nikula@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211024155020.126328-1-hdegoede@redhat.com
      41211134
  2. 17 Nov, 2021 5 commits
  3. 16 Nov, 2021 1 commit
  4. 15 Nov, 2021 7 commits
  5. 12 Nov, 2021 1 commit
  6. 11 Nov, 2021 21 commits
  7. 10 Nov, 2021 1 commit
  8. 09 Nov, 2021 3 commits
    • Dan Carpenter's avatar
      drm/i915: pin: delete duplicate check in intel_pin_and_fence_fb_obj() · 6cff894e
      Dan Carpenter authored
      The "ret" variable is checked on the previous line so we know it's
      zero.  No need to check again.
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211109114850.GB16587@kili
      6cff894e
    • Ville Syrjälä's avatar
      drm/i915: Call intel_update_active_dpll() for both bigjoiner pipes · c68dac96
      Ville Syrjälä authored
      Currently we're only calling intel_update_active_dpll() for the
      bigjoiner master pipe but not for the slave. With TC ports this
      leads to the two pipes end up trying to use different PLLs
      (TC vs. TBT). What's worse we're enabling the PLL that didn't get
      intel_update_active_dpll() called on it at the spot where we
      need the clocks turned on. So we turn on the wrong PLL and the
      DDI is now trying to source its clock from the other PLL which is
      still disabled. Naturally that doesn't end so well and the DDI
      fails to start up.
      
      The state checker also gets a bit unhappy (which is a good thing)
      when it notices that one of the pipes was using the wrong PLL.
      
      Let's fix this by remembering to call intel_update_active_dpll()
      for both pipes. That should get the correct PLL turned on when
      we need it, and the state checker should also be happy.
      
      Cc: Imre Deak <imre.deak@intel.com>
      Cc: Manasi Navare <manasi.d.navare@intel.com>
      Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/4434
      Fixes: e12d6218 ("drm/i915: Reduce bigjoiner special casing")
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211105212156.5697-1-ville.syrjala@linux.intel.comReviewed-by: default avatarImre Deak <imre.deak@intel.com>
      c68dac96
    • Ville Syrjälä's avatar
      drm/i915: Use unlocked register accesses for LUT loads · 115e0f68
      Ville Syrjälä authored
      We have to bash in a lot of registers to load the higher
      precision LUT modes. The locking overhead is significant, especially
      as we have to get this done as quickly as possible during vblank.
      So let's switch to unlocked accesses for these. Fortunately the LUT
      registers are mostly spread around such that two pipes do not have
      any registers on the same cacheline. So as long as commits on the
      same pipe are serialized (which they are) we should get away with
      this without angering the hardware.
      
      The only exceptions are the PREC_PIPEGCMAX registers on ilk/snb which
      we don't use atm as they are only used in the 12bit gamma mode. If/when
      we add support for that we may need to remember to still serialize
      those registers, though I'm not sure ilk/snb are actually affected
      by the same cacheline issue. I think ivb/hsw at least were, but they
      use a different set of registers for the precision LUT.
      
      I have a test case which is updating the LUTs on two pipes from a
      single atomic commit. Running that in a loop for a minute I get the
      following worst case with the locks in place:
       intel_crtc_vblank_work_start: pipe B, frame=10037, scanline=1081
       intel_crtc_vblank_work_start: pipe A, frame=12274, scanline=769
       intel_crtc_vblank_work_end: pipe A, frame=12274, scanline=58
       intel_crtc_vblank_work_end: pipe B, frame=10037, scanline=74
      
      And here's the worst case with the locks removed:
       intel_crtc_vblank_work_start: pipe B, frame=5869, scanline=1081
       intel_crtc_vblank_work_start: pipe A, frame=7616, scanline=769
       intel_crtc_vblank_work_end: pipe B, frame=5869, scanline=1096
       intel_crtc_vblank_work_end: pipe A, frame=7616, scanline=777
      
      The test was done on a snb using the 10bit 1024 entry LUT mode.
      The vtotals for the two displays are 793 and 1125. So we can
      see that with the locks ripped out the LUT updates are pretty
      nicely confined within the vblank, whereas with the locks in
      place we're routinely blasting past the vblank end which causes
      visual artifacts near the top of the screen.
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211020223339.669-5-ville.syrjala@linux.intel.comReviewed-by: default avatarUma Shankar <uma.shankar@intel.com>
      115e0f68