1. 12 4月, 2013 2 次提交
    • D
      drm: add new QXL driver. (v1.4) · f64122c1
      Dave Airlie 提交于
      QXL is a paravirtual graphics device used by the Spice virtual desktop
      interface.
      
      The drivers uses GEM and TTM to manage memory, the qxl hw fencing however
      is quite different than normal TTM expects, we have to keep track of a number
      of non-linear fence ids per bo that we need to have released by the hardware.
      
      The releases are freed from a workqueue that wakes up and processes the
      release ring.
      
      releases are suballocated from a BO, there are 3 release categories, drawables,
      surfaces and cursor cmds. The hw also has 3 rings for commands, cursor and release handling.
      
      The hardware also have a surface id tracking mechnaism and the driver encapsulates it completely inside the kernel, userspace never sees the actual hw surface
      ids.
      
      This requires a newer version of the QXL userspace driver, so shouldn't be
      enabled until that has been placed into your distro of choice.
      
      Authors: Dave Airlie, Alon Levy
      
      v1.1: fixup some issues in the ioctl interface with padding
      v1.2: add module device table
      v1.3: fix nomodeset, fbcon leak, dumb bo create, release ring irq,
            don't try flush release ring (broken hw), fix -modesetting.
      v1.4: fbcon cpu usage reduction + suitable accel flags.
      Signed-off-by: NAlon Levy <alevy@redhat.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      f64122c1
    • D
      ttm: export functions to allow qxl do its own iomapping · afe6804c
      Dave Airlie 提交于
      qxl wants to use io mapping like i915 gem does, for now
      just export the symbols so the driver can implement atomic
      page maps using io mapping.
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      afe6804c
  2. 03 4月, 2013 1 次提交
  3. 29 3月, 2013 2 次提交
    • M
      drm/nouveau: fix NULL ptr dereference from nv50_disp_intr() · e4604d8f
      Maarten Lankhorst 提交于
      Op 23-03-13 12:47, Peter Hurley schreef:
      > On Tue, 2013-03-19 at 11:13 -0400, Peter Hurley wrote:
      >> On vanilla 3.9.0-rc3, I get this 100% repeatable oops after login when
      >> the user X session is coming up:
      > Perhaps I wasn't clear that this happens on every boot and is a
      > regression from 3.8
      >
      > I'd be happy to help resolve this but time is of the essence; it would
      > be a shame to have to revert all of this for 3.9
      
      Well it broke on my system too, so it was easy to fix.
      
      I didn't even need gdm to trigger it!
      
      >8----
      This fixes regression caused by 1d7c71a3 (drm/nouveau/disp: port vblank handling to event interface),
      
      which causes a oops in the following way:
      
      BUG: unable to handle kernel NULL pointer dereference at 0000000000000001
      IP: [<0000000000000001>] 0x0
      PGD 0
      Oops: 0010 [#1] PREEMPT SMP
      Modules linked in: ip6table_filter ip6_tables ebtable_nat ebtables ...<snip>...
      CPU 3
      Pid: 0, comm: swapper/3 Not tainted 3.9.0-rc3-xeon #rc3 Dell Inc. Precision WorkStation T5400  /0RW203
      RIP: 0010:[<0000000000000001>]  [<0000000000000001>] 0x0
      RSP: 0018:ffff8802afcc3d80  EFLAGS: 00010087
      RAX: ffff88029f6e5808 RBX: 0000000000000001 RCX: 0000000000000000
      RDX: 0000000000000096 RSI: 0000000000000001 RDI: ffff88029f6e5808
      RBP: ffff8802afcc3dc8 R08: 0000000000000000 R09: 0000000000000004
      R10: 000000000000002c R11: ffff88029e559a98 R12: ffff8802a376cb78
      R13: ffff88029f6e57e0 R14: ffff88029f6e57f8 R15: ffff88029f6e5808
      FS:  0000000000000000(0000) GS:ffff8802afcc0000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      CR2: 0000000000000001 CR3: 000000029fa67000 CR4: 00000000000007e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      Process swapper/3 (pid: 0, threadinfo ffff8802a355e000, task ffff8802a3535c40)
      Stack:
       ffffffffa0159d8a 0000000000000082 ffff88029f6e5820 0000000000000001
       ffff88029f71aa00 0000000000000000 0000000000000000 0000000004000000
       0000000004000000 ffff8802afcc3e38 ffffffffa01843b5 ffff8802afcc3df8
      Call Trace:
       <IRQ>
       [<ffffffffa0159d8a>] ? nouveau_event_trigger+0xaa/0xe0 [nouveau]
       [<ffffffffa01843b5>] nv50_disp_intr+0xc5/0x200 [nouveau]
       [<ffffffff816fbacc>] ? _raw_spin_unlock_irqrestore+0x2c/0x50
       [<ffffffff816ff98d>] ? notifier_call_chain+0x4d/0x70
       [<ffffffffa017a105>] nouveau_mc_intr+0xb5/0x110 [nouveau]
       [<ffffffffa01d45ff>] nouveau_irq_handler+0x6f/0x80 [nouveau]
       [<ffffffff810eec95>] handle_irq_event_percpu+0x75/0x260
       [<ffffffff810eeec8>] handle_irq_event+0x48/0x70
       [<ffffffff810f205a>] handle_fasteoi_irq+0x5a/0x100
       [<ffffffff810182f2>] handle_irq+0x22/0x40
       [<ffffffff8170561a>] do_IRQ+0x5a/0xd0
       [<ffffffff816fc2ad>] common_interrupt+0x6d/0x6d
       <EOI>
       [<ffffffff810449b6>] ? native_safe_halt+0x6/0x10
       [<ffffffff8101ea1d>] default_idle+0x3d/0x170
       [<ffffffff8101f736>] cpu_idle+0x116/0x130
       [<ffffffff816e2a06>] start_secondary+0x251/0x258
      Code:  Bad RIP value.
      RIP  [<0000000000000001>] 0x0
       RSP <ffff8802afcc3d80>
      CR2: 0000000000000001
      ---[ end trace 907323cb8ce6f301 ]---
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@canonical.com>
      Signed-off-by: NBen Skeggs <bskeggs@redhat.com>
      e4604d8f
    • M
      drm/nouveau: fix handling empty channel list in ioctl's · b43decd2
      Maarten Lankhorst 提交于
      If there are no channels, chan would never end up being NULL,
      and so the null pointer check would fail.
      
      Solve this by initializing chan to NULL, and iterating over temp instead.
      
      Fixes oops when running intel-gpu-tools/tests/kms_flip, which attempts to
      do some intel ioctl's on a nouveau device.
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@canonical.com>
      Cc: stable@vger.kernel.org [3.7+]
      Signed-off-by: NBen Skeggs <bskeggs@redhat.com>
      b43decd2
  4. 28 3月, 2013 1 次提交
  5. 27 3月, 2013 2 次提交
  6. 26 3月, 2013 1 次提交
    • D
      drm/i915: duct-tape locking when eDP init fails · bd173813
      Daniel Vetter 提交于
      Thanks to apple gpu mux fail we detect an eDP output, but can't read
      anything over dp aux. In the resulting failure path we then hit a
      paranoid WARN about potential locking.
      
      Since the WARN is pretty useful for normal operation just paper over
      it in the failure case by grabbing the demanded (but for init/teardown
      not really required) lock.
      
      I've checked our driver unload code and we already don't hold the kms
      lock when calling drm_mode_config_cleanup. So this won't lead to a new
      deadlock when reloading i915.ko.
      
      v2: Make it compile.
      Reported-by: NDave Airlie <airlied@gmail.com>
      Cc: Dave Airlie <airlied@gmail.com>
      Reviewed-by: NJani Nikula <jani.nikula@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      bd173813
  7. 24 3月, 2013 5 次提交
    • D
      Revert "drm/i915: write backlight harder" · b1289371
      Daniel Vetter 提交于
      This reverts commit cf0a6584.
      
      Turns out that cargo-culting breaks systems. Note that we can't revert
      further, since
      
      commit 770c1231
      Author: Takashi Iwai <tiwai@suse.de>
      Date:   Sat Aug 11 08:56:42 2012 +0200
      
          drm/i915: Fix blank panel at reopening lid
      
      fixed a regression in 3.6-rc kernels for which we've never figured out
      the exact root cause. But some further inspection of the backlight
      code reveals that it's seriously lacking locking. And especially the
      asle backlight update is know to get fired (through some smm magic)
      when writing specific backlight control registers. So the possibility
      of suffering from races is rather real.
      
      Until those races are fixed I don't think it makes sense to try
      further hacks. Which sucks a bit, but sometimes that's how it is :(
      
      References: http://www.mail-archive.com/intel-gfx@lists.freedesktop.org/msg18788.html
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=47941Tested-by: NTakashi Iwai <tiwai@suse.de>
      Cc: Jani Nikula <jani.nikula@intel.com>
      Cc: Takashi Iwai <tiwai@suse.de>
      Cc: stable@vger.kernel.org (the reverted commit was cc: stable, too)
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      b1289371
    • P
      drm/i915: don't disable the power well yet · 2124b72e
      Paulo Zanoni 提交于
      We're still not 100% ready to disable the power well, so don't disable
      it for now. When we disable it we break the audio driver (because some
      of the audio registers are on the power well) and machines with eDP on
      port D (because it doesn't use TRANSCODER_EDP).
      
      Also, instead of just reverting the code, add a Kernel option to let
      us disable it if we want. This will allow us to keep developing and
      testing the feature while it's not enabled.
      
      This fixes problems caused by the following commit:
        commit d6dd9eb1
        Author: Daniel Vetter <daniel.vetter@ffwll.ch>
        Date:   Tue Jan 29 16:35:20 2013 -0200
             drm/i915: dynamic Haswell display power well support
      
      References: http://www.mail-archive.com/intel-gfx@lists.freedesktop.org/msg18788.html
      Cc: Takashi Iwai <tiwai@suse.de>
      Cc: Mengdong Lin <mengdong.lin@intel.com>
      Signed-off-by: NPaulo Zanoni <paulo.r.zanoni@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      2124b72e
    • D
      Revert "drm/i915: set TRANSCODER_EDP even earlier" · bba2181c
      Daniel Vetter 提交于
      This reverts commit cc464b2a.
      
      The reason is that Takashi Iwai reported a regression bisected to this
      commit:
      
      http://www.mail-archive.com/intel-gfx@lists.freedesktop.org/msg18788.html
      
      His machine has eDP on port D (usual desktop all-in-on setup), which
      intel_dp.c identifies as an eDP panel, but the hsw ddi code
      mishandles.
      
      Closer inspection of the code reveals that haswell_crtc_mode_set also
      checks intel_encoder_is_pch_edp when setting is_cpu_edp. On haswell
      that doesn't make much sense (since there's no edp on the pch), but
      what this function _really_ checks is whether that edp connector is on
      port A or port D. It's just that on ilk-ivb port D was on the pch ...
      
      So that explains why this seemingly innocent change killed eDP on port
      D. Furthermore it looks like everything else accidentally works, since
      we've never enabled eDP on port D support for hsw intentionally (e.g.
      we still register the HDMI output for port D in that case).
      
      But in retrospective I also don't like that this leaks highly platform
      specific details into common code, and the reason is that the drm
      vblank layer sucks. So instead I think we should:
      - move the cpu_transcoder into the dynamic pipe_config tracking (once
        that's merged).
      - fix up the drm vblank layer to finally deal with kms crtc objects
        instead of int pipes.
      
      v2: Pimp commit message with the better diagnosis as discussed with
      Paulo on irc.
      
      Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
      Cc: Takashi Iwai <tiwai@suse.de>
      Reviewed-by: NPaulo Zanoni <paulo.r.zanoni@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      bba2181c
    • T
      KMS: fix EDID detailed timing frame rate · c19b3b0f
      Torsten Duwe 提交于
      When KMS has parsed an EDID "detailed timing", it leaves the frame rate
      zeroed.  Consecutive (debug-) output of that mode thus yields 0 for
      vsync.  This simple fix also speeds up future invocations of
      drm_mode_vrefresh().
      
      While it is debatable whether this qualifies as a -stable fix I'd apply
      it for consistency's sake; drm_helper_probe_single_connector_modes()
      does the same thing already for all probed modes.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NTorsten Duwe <duwe@lst.de>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      c19b3b0f
    • T
      KMS: fix EDID detailed timing vsync parsing · 16dad1d7
      Torsten Duwe 提交于
      EDID spreads some values across multiple bytes; bit-fiddling is needed
      to retrieve these.  The current code to parse "detailed timings" has a
      cut&paste error that results in a vsync offset of at most 15 lines
      instead of 63.
      
      See
      
         http://en.wikipedia.org/wiki/EDID
      
      and in the "EDID Detailed Timing Descriptor" see bytes 10+11 show why
      that needs to be a left shift.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NTorsten Duwe <duwe@lst.de>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      16dad1d7
  8. 23 3月, 2013 21 次提交
  9. 21 3月, 2013 1 次提交
    • J
      drm/mgag200: Bug fix: Modified pll algorithm for EH project · 260b3f12
      Julia Lemire 提交于
      While testing the mgag200 kms driver on the HP ProLiant Gen8, a
      bug was seen.  Once the bootloader would load the selected kernel,
      the screen would go black.  At first it was assumed that the
      mgag200 kms driver was hanging.  But after setting up the grub
      serial output, it was seen that the driver was being loaded
      properly.  After trying serval monitors, one finaly displayed
      the message "Frequency Out of Range".  By comparing the kms pll
      algorithm with the previous mgag200 xorg driver pll algorithm,
      discrepencies were found.  Once the kms pll algorithm was
      modified, the expected pll values were produced.  This fix was
      tested on several monitors of varying native resolutions.
      Signed-off-by: NJulia Lemire <jlemire@matrox.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      260b3f12
  10. 20 3月, 2013 4 次提交