1. 20 1月, 2014 16 次提交
    • V
      drm/i915: Add a kludge for DSL incrementing too late and ISR not working · 095163ba
      Ville Syrjälä 提交于
      On pre-PCH platforms ISR doesn't seem to be an actual ISR, at least as
      far as display interrupts are concerned. Instead it sort of looks like
      some ISR bits just directly reflect the corresponding bit from PIPESTAT.
      The bit appears in the ISR only if the PIPESTAT interrupt is enabled. So
      in that sense it sort of looks a bit like the south interrupt scheme on
      PCH platforms. So it goes something a bit like this:
      PIPESTAT.status & PIPESTAT.enable -> ISR -> IMR -> IIR -> IER -> actual
      interrupt
      
      In any case that means the intel_pipe_in_vblank_locked() doesn't actually
      work for pre-PCH platforms. As a last resort, add a similar kludge as radeon
      has that fixes things up if we got called from the vblank interrupt,
      but the scanline counter value indicates that we're not quite there yet.
      We know that the scanline counter increments at hsync but is otherwise
      accurate, so we can limit the kludge to the line just prior to vblank
      start, instead of the relative distance that radeon uses.
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      095163ba
    • V
      drm/radeon: Move the early vblank IRQ fixup to radeon_get_crtc_scanoutpos() · 8072bfa6
      Ville Syrjälä 提交于
      i915 doesn't need this kludge for most platforms. Although we do
      appear to need something similar on certain platforms, but we can
      be more accurate when we apply the adjustment since we know exactly
      why the scanline counter doesn't always quite match the vblank
      status.
      
      Also the current code doesn't handle interlaced modes correctly,
      and we already deal with interlaced modes in i915 code.
      
      So let's just move the current code to radeon_get_crtc_scanoutpos()
      since that's why it was added. For i915 we'll add a more finely
      targeted variant.
      
      v2: Fix vpos vs. *vpos bug (Mario)
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      8072bfa6
    • V
      drm: Pass 'flags' from the caller to .get_scanout_position() · abca9e45
      Ville Syrjälä 提交于
      Preparation for moving the early vblank IRQ logic into
      radeon_get_crtc_scanoutpos().
      
      v2: Fix radeon_drv.c compile warning (Mario)
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      abca9e45
    • V
      drm: Fix vblank timestamping constants for interlaced modes · c0ae24c1
      Ville Syrjälä 提交于
      We're currently miscalculating the line and pixel durations for
      interlaced modes. crtc_htotal and crtc_vtotal are the full frame
      timings, and so is crtc_clock, so we can compute the line
      and pixel durations from those w/o any extra adjustments. But
      we actually want framedur_ns to be the field, not frame, duration,
      so we must divide it by two.
      
      This should make the scanout based vblank timestamp corrections
      work correctly with interlaced modes, at least for i915. It all
      depends whether we keep the field or frame timings in the display
      mode crtc_ timings.
      
      v2: Preserve halve->half typo fix that happened in the meantine
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      c0ae24c1
    • V
      drm/i915: Fix scanoutpos calculations for interlaced modes · d31faf65
      Ville Syrjälä 提交于
      The scanline counter counts lines in the current field, not the entire
      frame. But the crtc_ timings are the values for the entire frame. Divide
      the vertical timings by 2 to make them match the scanline counter.
      
      The rounding was carefully chosen to make it do the right thing wrt. the
      observed scanline counter and ISR vblank bit behaviour.
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      d31faf65
    • V
      drm: Change {pixel,line,frame}dur_ns from s64 to int · 3c184f69
      Ville Syrjälä 提交于
      Using s64 for the timestamping constants is wasteful. Signed 32bit
      integers get us a range of over +-2 seconds. Presuming that no-one
      wants to a vrefresh rate less than 0.5, we can switch to using int
      for the timestamping constants. We save a few bytes in drm_crtc and
      avoid a bunch of 64bit math.
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      3c184f69
    • V
      drm: Use crtc_clock in drm_calc_timestamping_constants() · 77666b72
      Ville Syrjälä 提交于
      drm_calc_timestamping_constants() computes the pixel/line/frame
      durations based on the crtc_ timing values. The corresponding pixel
      clock is in mode->crtc_clock, so we need to use that instead of
      mode->clock.
      
      This should fix drm_calc_timestamping_constants() for frame packing
      stereo modes.
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      77666b72
    • V
      drm/radeon: Populate crtc_clock in radeon_atom_get_tv_timings() · 265d09aa
      Ville Syrjälä 提交于
      crtc_clock is now supposed to be the actual pixel clock corresponding to
      the other crtc_ timing values. Populate crtc_clock appropriately in
      radeon_atom_get_tv_timings().
      
      This was the only obvious place where we frob with the crtc_ timigns
      directly instead of calling drm_mode_set_crtcinfo() which would also
      update crtc_clock.
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      265d09aa
    • V
      drm: Simplify the math in drm_calc_timestamping_constants() · 0dae35a3
      Ville Syrjälä 提交于
      drm_calc_timestamping_constants() makes the math more complex
      than necessary.
      - multipying the dotclock by 1000 is pointless, just makes all the
        numbers bigger
      - div64_u64() is also pointless, div_u64 is enough
      - pixeldur_ns doesn't need any 64bit math
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      0dae35a3
    • V
      drm: Improve drm_calc_timestamping_constants() documentation · 21b21560
      Ville Syrjälä 提交于
      Move the long blurp to into the body of the comment, leaving only
      a short summary line at the top.
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      21b21560
    • V
      drm/i915: Call drm_calc_timestamping_constants() earlier · c326c0a9
      Ville Syrjälä 提交于
      Update the pixel/line/frame duration information when we switch to the
      new pipe config. This will keep the timestamping constants in better
      sync with the real hardware state.
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      c326c0a9
    • V
      drm/i915: Kill hwmode save/restore · 4b4b9238
      Ville Syrjälä 提交于
      drm core no longer uses crtc->hwmode, and neither does i915, so we can totally ignore it
      in i915.
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      4b4b9238
    • V
      drm: Pass the display mode to drm_calc_vbltimestamp_from_scanoutpos() · 7da903ef
      Ville Syrjälä 提交于
      Rather than using crtc->hwmode, just pass the relevant mode to
      drm_calc_vbltimestamp_from_scanoutpos(). This removes the last hwmode
      usage from core drm.
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      7da903ef
    • V
      drm: Pass the display mode to drm_calc_timestamping_constants() · 545cdd55
      Ville Syrjälä 提交于
      We don't really use hwmode anymore in i915, so eliminating its use
      from the core code seems prudent. Just pass the appropriate mode
      to drm_calc_timestamping_constants().
      
      Reviewed-by: mario.kleiner.de@gmail.com
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      545cdd55
    • D
      Merge branch 'drm-intel-next' of git://people.freedesktop.org/~danvet/drm-intel into drm-next · cfd72a4c
      Dave Airlie 提交于
      drm-intel-next-2014-01-10:
      - final bits for runtime D3 on Haswell from Paul (now enabled fully)
      - parse the backlight modulation freq information in the VBT from Jani
        (but not yet used)
      - more watermark improvements from Ville for ilk-ivb and bdw
      - bugfixes for fastboot from Jesse
      - watermark fix for i830M (but not yet everything)
      - vlv vga hotplug w/a (Imre)
      - piles of other small improvements, cleanups and fixes all over
      
      Note that the pull request includes a backmerge of the last drm-fixes
      pulled into Linus' tree - things where getting a bit too messy. So the
      shortlog also contains a bunch of patches from Linus tree. Please yell if
      you want me to frob it for you a bit.
      
      * 'drm-intel-next' of git://people.freedesktop.org/~danvet/drm-intel: (609 commits)
        drm/i915/bdw: make sure south port interrupts are enabled properly v2
        drm/i915: Include more information in disabled hotplug interrupt warning
        drm/i915: Only complain about a rogue hotplug IRQ after disabling
        drm/i915: Only WARN about a stuck hotplug irq ONCE
        drm/i915: s/hotplugt_status_gen4/hotplug_status_g4x/
      cfd72a4c
    • D
      Merge tag 'vmwgfx-next-2014-01-17' of git://people.freedesktop.org/~thomash/linux into drm-next · 9354eafd
      Dave Airlie 提交于
      Pull request of 2014-01-17
      
      Pull request for 3.14. One not so urgent fix, One huge device update.
      
      The pull request corresponds to the patches sent out on dri-devel, except:
      [PATCH 02/33], review tag typo pointed out by Matt Turner.
      [PATCH 04/33], dropped. The new surface formats are never used.
      
      The upcoming vmware svga2 hardware version 11 will introduce the concept
      of "guest backed objects" or -resources. The device will in principle
      get all
      of its memory from the guest, which has big advantages from the device
      point of view.
      
      This means that vmwgfx contexts, shaders and surfaces need to be backed
      by guest memory in the form of buffer objects called MOBs, presumably
      short for MemoryOBjects, which are bound to the device in a special way.
      
      This patch series introduces guest backed object support. Some new IOCTLs
      are added to allocate these new guest backed object, and to optionally
      provide
      them with a backing MOB.
      
      There is an update to the gallium driver that comes with this update, and
      it will be pushed in the near timeframe presumably to a separate mesa branch
      before merged to master.
      
      * tag 'vmwgfx-next-2014-01-17' of git://people.freedesktop.org/~thomash/linux: (33 commits)
        drm/vmwgfx: Invalidate surface on non-readback unbind
        drm/vmwgfx: Silence the device command verifier
        drm/vmwgfx: Implement 64-bit Otable- and MOB binding v2
        drm/vmwgfx: Fix surface framebuffer check for guest-backed surfaces
        drm/vmwgfx: Update otable definitions
        drm/vmwgfx: Use the linux DMA api also for MOBs
        drm/vmwgfx: Ditch the vmw_dummy_query_bo_prepare function
        drm/vmwgfx: Persistent tracking of context bindings
        drm/vmwgfx: Track context bindings and scrub them upon exiting execbuf
        drm/vmwgfx: Block the BIND_SHADERCONSTS command
        drm/vmwgfx: Add a parameter to get max MOB memory size
        drm/vmwgfx: Implement a buffer object synccpu ioctl.
        drm/vmwgfx: Make sure that the multisampling is off
        drm/vmwgfx: Extend the command verifier to handle guest-backed on / off
        drm/vmwgfx: Fix up the vmwgfx_drv.h header for new files
        drm/vmwgfx: Enable 3D for new hardware version
        drm/vmwgfx: Add new unused (by user-space) commands to the verifier
        drm/vmwgfx: Validate guest-backed shader const commands
        drm/vmwgfx: Add guest-backed shaders
        drm/vmwgfx: Hook up guest-backed surfaces
        ...
      9354eafd
  2. 17 1月, 2014 24 次提交