1. 23 Aug, 2013 5 commits
    • Damien Lespiau's avatar
      drm: Remove IS_IRONLAKE_D() · 3abdb334
      Damien Lespiau authored
      This define hasn't been used since:
      
        commit cfdf1fa2
        Author: Kristian Høgsberg <krh@bitplanet.net>
        Date:   Wed Dec 16 15:16:16 2009 -0500
      
            drm/i915: Implement IS_* macros using static tables
      Signed-off-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      3abdb334
    • Damien Lespiau's avatar
      drm/i915: Remove HAS_PIPE_CONTROL() · fdaa930b
      Damien Lespiau authored
      The code using this was removed in:
      
        commit 88f23b8f
        Author: Chris Wilson <chris@chris-wilson.co.uk>
        Date:   Sun Dec 5 15:08:31 2010 +0000
      
            drm/i915: Avoid using PIPE_CONTROL on Ironlake
      Signed-off-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      fdaa930b
    • Damien Lespiau's avatar
      drm/i915: Remove DSPARB_HWCONTROL() · 82548600
      Damien Lespiau authored
      This define hasn't been used since:
      
        commit 652c393a
        Author: Jesse Barnes <jbarnes@virtuousgeek.org>
        Date:   Mon Aug 17 13:31:43 2009 -0700
      
            drm/i915: add dynamic clock frequency control
      Signed-off-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      82548600
    • Jesse Barnes's avatar
      drm/i915: make IVB FDI training match spec v3 · 139ccd3f
      Jesse Barnes authored
      The existing code was trying different vswing and preemphasis settings
      in the wrong place, and wasn't trying them enough.  So add a loop to
      walk through them, properly disabling FDI TX and RX in between if a
      failure is detected.
      
      v2: remove unneeded reg writes, add delays around bit lock checks (Jesse)
      v3: fix TX and RX disable per spec (Paulo)
          fix delays per spec (Paulo)
          make RX symbol lock check match TX bit lock check (Paulo)
      Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
      Reviewed-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=51983Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      139ccd3f
    • Ben Widawsky's avatar
      drm/i915/vma: Correct use after free in eviction · 8637b407
      Ben Widawsky authored
      The vma will [possibly] be destroyed during unbind in eviction.
      Immediately after this, we try to delete the list entry.
      
      Chris and Ville did the debug on this before I woke up, I just get to
      take credit for the fix :p
      
      For future reference the Oops that Mika reported:
      
      [  403.472448] BUG: unable to handle kernel paging request at 6b6b6b6b
      [  403.472473] IP: [<c12c1500>] __list_del_entry+0x20/0xe0
      [  403.472514] *pdpt = 000000002e89c001 *pde = 0000000000000000
      [  403.472556] Oops: 0000 [#1] SMP
      [  403.472582] Modules linked in: mxm_wmi snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi psmouse snd_seq_midi_event snd_seq serio_raw snd_timer snd_seq_device snd soundcore snd_page_alloc wmi bnep rfcomm bluetooth mac_hid parport_pc ppdev lp parport usbhid dm_crypt firewire_ohci firewire_core crc_itu_t i915 drm_kms_helper e1000e ptp drm i2c_algo_bit pps_core xhci_hcd video
      [  403.472895] CPU: 2 PID: 1940 Comm: Xorg Not tainted 3.11.0-rc2+ #827
      [  403.472938] Hardware name:                  /DZ77BH-55K, BIOS BHZ7710H.86A.0070.2012.0416.2117 04/16/2012
      [  403.473002] task: ec866c00 ti: ee6a2000 task.ti: ee6a2000
      [  403.473039] EIP: 0060:[<c12c1500>] EFLAGS: 00013202 CPU: 2
      [  403.473078] EIP is at __list_del_entry+0x20/0xe0
      [  403.473109] EAX: f016d9bc EBX: f016d9bc ECX: 6b6b6b6b EDX: 6b6b6b6b
      [  403.473151] ESI: 00000000 EDI: ee6a3c90 EBP: ee6a3c60 ESP: ee6a3c48
      [  403.473193]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
      [  403.473230] CR0: 80050033 CR2: 6b6b6b6b CR3: 2ec43000 CR4: 001407f0
      [  403.473271] Stack:
      [  403.473285]  f63b2ff0 f61f98c0 f61f8000 f016d9bc 00000000 f016d9bc ee6a3cac f8519a4a
      [  403.473347]  00000000 00000000 10000000 f61f8000 0100a000 10000000 00000001 008ca000
      [  403.473410]  f64ee840 f61f98c0 f016d9bc f016dcec ee6a3c98 ee6a3c98 f61f98c0 dcc58f00
      [  403.473472] Call Trace:
      [  403.473509]  [<f8519a4a>] i915_gem_evict_something+0x17a/0x2d0 [i915]
      [  403.473567]  [<f8516ed1>] i915_gem_object_pin+0x271/0x660 [i915]
      [  403.473622]  [<f851c740>] ? i915_ggtt_clear_range+0x20/0x20 [i915]
      [  403.473676]  [<f8517afa>] i915_gem_object_pin_to_display_plane+0xda/0x190 [i915]
      [  403.473742]  [<f852d9fa>] intel_pin_and_fence_fb_obj+0xba/0x140 [i915]
      [  403.473800]  [<f852db40>] intel_gen7_queue_flip+0x30/0x1c0 [i915]
      [  403.473856]  [<f85337b0>] intel_crtc_page_flip+0x1a0/0x320 [i915]
      [  403.473911]  [<f847b549>] ? drm_framebuffer_reference+0x39/0x80 [drm]
      [  403.473965]  [<f847f9fb>] drm_mode_page_flip_ioctl+0x28b/0x320 [drm]
      [  403.474018]  [<f846fec8>] drm_ioctl+0x4b8/0x560 [drm]
      [  403.474064]  [<f847f770>] ? drm_mode_gamma_get_ioctl+0xd0/0xd0 [drm]
      [  403.474113]  [<c1140f8a>] ? do_sync_read+0x6a/0xa0
      [  403.474154]  [<f846fa10>] ? drm_copy_field+0x80/0x80 [drm]
      [  403.474193]  [<c115134c>] do_vfs_ioctl+0x7c/0x5b0
      [  403.474228]  [<c1141d2f>] ? vfs_read+0xef/0x160
      [  403.474263]  [<c108dcbb>] ? ktime_get_ts+0x4b/0x120
      [  403.474298]  [<c1151917>] SyS_ioctl+0x97/0xa0
      [  403.474330]  [<c1590bc1>] sysenter_do_call+0x12/0x22
      [  403.474364] Code: 55 f4 8b 45 f8 e9 75 ff ff ff 90 55 89 e5 53 83 ec 14 8b 08 8b 50 04 81 f9 00 01 10 00 74 24 81 fa 00 02 20 00 0f 84 8e 00 00 00 <8b> 1a 39 d8 75 62 8b 59 04 39 d8 75 35 89 51 04 89 0a 83 c4 14
      [  403.474566] EIP: [<c12c1500>] __list_del_entry+0x20/0xe0 SS:ESP 0068:ee6a3c48
      [  403.476513] CR2: 000000006b6b6b6b
      
      v2: Missed the drm_object_unreference use after free (Ville)
      Daniel Vetter <daniel@ffwll.ch> writes:
      Reported-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
      Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      [danvet: Add the Oops from Mika to the commit message.]
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      8637b407
  2. 22 Aug, 2013 31 commits
  3. 10 Aug, 2013 4 commits
    • Chris Wilson's avatar
      drm/i915: Allow the GPU to cache stolen memory · d46f1c3f
      Chris Wilson authored
      As a corollary to reviewing the interaction between LLC and our cache
      domains, the GPU PTE bits are independent of the CPU PAT bits. As such
      we can set the cache level on stolen memory based on how we wish the GPU
      to cache accesses to it. So we are free to set the same default cache
      levels as for normal bo, i.e. enable LLC cacheing by default where
      appropriate.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      d46f1c3f
    • Chris Wilson's avatar
      drm/i915: Update rules for writing through the LLC with the cpu · 2c22569b
      Chris Wilson authored
      As mentioned in the previous commit, reads and writes from both the CPU
      and GPU go through the LLC. This gives us coherency between the CPU and
      GPU irrespective of the attribute settings either device sets. We can
      use to avoid having to clflush even uncached memory.
      
      Except for the scanout.
      
      The scanout resides within another functional block that does not use
      the LLC but reads directly from main memory. So in order to maintain
      coherency with the scanout, writes to uncached memory must be flushed.
      In order to optimize writes elsewhere, we start tracking whether an
      framebuffer is attached to an object.
      
      v2: Use pin_display tracking rather than fb_count (to ensure we flush
      cursors as well etc) and only force the clflush along explicit writes to
      the scanout paths (i.e. pin_to_display_plane and pwrite into scanout).
      
      v3: Force the flush after hitting the slowpath in pwrite, as after
      dropping the lock the object's cache domain may be invalidated. (Ville)
      
      Based on a patch by Ville Syrjälä.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      2c22569b
    • Chris Wilson's avatar
      drm/i915: Track when an object is pinned for use by the display engine · cc98b413
      Chris Wilson authored
      The display engine has unique coherency rules such that it requires
      special handling to ensure that all writes to cursors, scanouts and
      sprites are clflushed. This patch introduces the infrastructure to
      simply track when an object is being accessed by the display engine.
      
      v2: Explain the is_pin_display() magic as the sources for obj->pin_count
      and their individual rules is not obvious. (Ville)
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      cc98b413
    • Chris Wilson's avatar
      drm/i915: Update rules for reading cache lines through the LLC · c76ce038
      Chris Wilson authored
      The LLC is a fun device. The cache is a distinct functional block within
      the SA that arbitrates access from both the CPU and GPU cores. As such
      all writes to memory land first in the LLC before further action is
      taken. For example, an uncached write from either the CPU or GPU will
      then proceed to memory and evict the cacheline from the LLC. This means that
      a read from the LLC always returns the correct information even if the PTE
      bit in the GPU differs from the PAT bit in the CPU. For the older
      snooping architecture on non-LLC, the fundamental principle still holds
      except that some coordination is required between the CPU and GPU to
      explicitly perform the snooping (which is handled by our request
      tracking).
      
      The upshot of this is that we know that we can issue a read from either
      LLC devices or snoopable memory and trust the contents of the cache -
      i.e. we can forgo a clflush before a read in these circumstances.
      Writing to memory from the CPU is a little more tricky as we have to
      consider that the scanout does not read from the CPU cache at all, but
      from main memory. So we have to currently treat all requests to write to
      uncached memory as having to be flushed to main memory for coherency
      with all consumers.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      c76ce038