1. 10 8月, 2013 21 次提交
  2. 26 7月, 2013 5 次提交
  3. 25 7月, 2013 1 次提交
  4. 24 7月, 2013 3 次提交
    • D
      qxl: convert qxl driver to proper use for reservations · 8002db63
      Dave Airlie 提交于
      The recent addition of lockdep support to reservations and their subsequent
      use by TTM showed up a number of potential problems with the way qxl was using
      TTM objects.
      
      a) it was allocating objects, and reserving them later without validating
      underneath the reservation, which meant in extreme conditions the objects could
      be evicted before the reservation ever used them.
      
      b) it was reserving objects straight after allocating them, but with no
      ability to back off should the reservations fail. It now allocates the necessary
      objects then does a complete reservation pass on them to avoid deadlocks.
      
      c) it had two lists per release tracking objects, unnecessary complicating
      the reservation process.
      
      This patch removes the dual object tracking, adds reservations ticket support
      to the release and fence object handling. It then ports the internal fb
      drawing code and the userspace facing ioctl to use the new interfaces properly,
      along with cleanup up the error path handling in some codepaths.
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      8002db63
    • D
      qxl: allow creation of pre-pinned objects and use for releases. · 4f49ec92
      Dave Airlie 提交于
      In order to fix an issue with reservations we need to create the releases
      as pre-pinned objects, this changes the placement interface and bo creation
      interface to allow creating pinned objects to save nested reservations later.
      
      This is just a stepping stone to main fix which follows to actually fix how
      qxl deals with reservations.
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      4f49ec92
    • D
      drm/qxl: add delayed fb operations · 0665f9f8
      Dave Airlie 提交于
      Due to the nature of qxl hw we cannot queue operations while in an irq
      context, so we queue these operations as best we can until atomic allocations
      fail, and dequeue them later in a work queue.
      
      Daniel looked over the locking on the list and agrees it should be sufficent.
      
      The atomic allocs use no warn, as the last thing we want if we haven't memory
      to allocate space for a printk in an irq context is more printks.
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      0665f9f8
  5. 23 7月, 2013 7 次提交
    • D
      drm/i915: fix hdmi portclock limits · 7d148ef5
      Daniel Vetter 提交于
      In
      
      commit 325b9d04
      Author: Daniel Vetter <daniel.vetter@ffwll.ch>
      Date:   Fri Apr 19 11:24:33 2013 +0200
      
          drm/i915: fixup 12bpc hdmi dotclock handling
      
      I've errornously claimed that we don't yet support the hdmi 1.4
      dotclocks > 225 MHz on Haswell. But a bug report and a closer look at
      the wrpll table showed that we've supported port clocks up to 300MHz.
      
      With the new code to dynamically compute wrpll limits we should have
      no issues going up to the full 340 MHz range of hdmi 1.4, so let's
      just use that to fix this regression. That'll allow 4k over hdmi for
      free!
      
      v2: Drop the random hunk that somehow slipped in.
      
      v3: Cantiga has the original HDMI dotclock limit of 165MHz. And also
      patch up the mode filtering. To do so extract the dotclock limits into
      a little helper function.
      
      v4: Use 300MHz (from Bspec) instead of 340MHz (upper limit for hdmi
      1.3), apparently hw is not required to be able to drive the highest
      dotclocks. Suggested by Damien.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67048
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67030
      Tested-by: Andreas Reis <andreas.reis@gmail.com> (v2)
      Cc: Damien Lespiau <damien.lespiau@intel.com>
      Reviewed-by: NDamien Lespiau <damien.lespiau@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      7d148ef5
    • M
      drm/radeon: fix combios tables on older cards · cef1d00c
      Mark Kettenis 提交于
      Noticed that my old Radeon 7500 hung after printing
      
         drm: GPU not posted. posting now...
      
      when it wasn't selected as the primary card the BIOS.  Some digging
      revealed that it was hanging in combios_parse_mmio_table() while
      parsing the ASIC INIT 3 table.  Looking at the BIOS ROM for the card,
      it becomes obvious that there is no ASIC INIT 3 table in the BIOS.
      The code is just processing random garbage.  No surprise it hangs!
      
      Why do I say that there is no ASIC INIT 3 table is the BIOS?  This
      table is found through the MISC INFO table.  The MISC INFO table can
      be found at offset 0x5e in the COMBIOS header.  But the header is
      smaller than that.  The COMBIOS header starts at offset 0x126.  The
      standard PCI Data Structure (the bit that starts with 'PCIR') lives at
      offset 0x180.  That means that the COMBIOS header can not be larger
      than 0x5a bytes and therefore cannot contain a MISC INFO table.
      
      I looked at a dozen or so BIOS images, some my own, some downloaded from:
      
          <http://www.techpowerup.com/vgabios/index.php?manufacturer=ATI&page=1>
      
      It is fairly obvious that the size of the COMBIOS header can be found
      at offset 0x6 of the header.  Not sure if it is a 16-bit number or
      just an 8-bit number, but that doesn't really matter since the tables
      seems to be always smaller than 256 bytes.
      
      So I think combios_get_table_offset() should check if the requested
      table is present.  This can be done by checking the offset against the
      size of the header.  See the diff below.  The diff is against the WIP
      OpenBSD codebase that roughly corresponds to Linux 3.8.13 at this
      point.  But I don't think this bit of the code changed much since
      then.
      
      For what it is worth:
      Signed-off-by: NMark Kettenis <kettenis@openbsd.org>
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      cef1d00c
    • A
      drm/radeon: improve dac adjust heuristics for legacy pdac · 03ed8cf9
      Alex Deucher 提交于
      Hopefully avoid more quirks in the future due to bogus
      vbios dac data.
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      03ed8cf9
    • O
      drm/radeon: Another card with wrong primary dac adj · f7929f34
      Ondrej Zary 提交于
      Hello,
      got another card with "too bright" problem:
      Sapphire Radeon VE 7000 DDR (VGA+S-Video)
      
      lspci -vnn:
      01:00.0 VGA compatible controller [0300]: Advanced Micro Devices [AMD] nee ATI RV100 QY [Radeon 7000/VE] [1002:5159] (prog-if 00 [VGA controller])
              Subsystem: PC Partner Limited Sapphire Radeon VE 7000 DDR [174b:7c28]
      
      The patch below fixes the problem for this card.
      But I don't like the blacklist, couldn't some heuristic be used instead?
      The interesting thing is that the manufacturer is the same as the other card
      needing the same quirk. I wonder how many different types are broken this way.
      
      The "wrong" ps2_pdac_adj value that comes from BIOS on this card is 0x300.
      
      ====================
      drm/radeon: Add primary dac adj quirk for Sapphire Radeon VE 7000 DDR
      
      Values from BIOS are wrong, causing too bright colors.
      Use default values instead.
      Signed-off-by: NOndrej Zary <linux@rainbow-software.org>
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      f7929f34
    • A
      drm/radeon: fix endian issues with DP handling (v3) · 34be8c9a
      Alex Deucher 提交于
      The atom interpreter expects data in LE format, so
      swap the message buffer as apprioriate.
      
      v2: properly handle non-dw aligned byte counts.
      v3: properly handle remainder
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      Cc: Dong He <hedonghust@gmail.com>
      Cc: stable@vger.kernel.org
      34be8c9a
    • A
      drm/radeon/vm: only align the pt base to 32k · 3e3e53f8
      Alex Deucher 提交于
      fixes:
      https://bugs.freedesktop.org/show_bug.cgi?id=67016Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      3e3e53f8
    • A
      drm/radeon: wait for 3D idle before using CP DMA · 745a39a9
      Alex Deucher 提交于
      Make sure the 3D engine is idle before using CP DMA for
      bo copies.
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      Cc: Marek Olšák <maraeo@gmail.com>
      745a39a9
  6. 22 7月, 2013 1 次提交
    • D
      drm/crtc-helper: explicit DPMS on after modeset · 25f397a4
      Daniel Vetter 提交于
      Atm the crtc helper implementation of set_config has really
      inconsisten semantics: If just an fb update is good enough, dpms state
      will be left as-is, but if we do a full modeset we force everything to
      dpms on.
      
      This change has already been applied to the i915 modeset code in
      
      commit e3de42b6
      Author: Imre Deak <imre.deak@intel.com>
      Date:   Fri May 3 19:44:07 2013 +0200
      
          drm/i915: force full modeset if the connector is in DPMS OFF mode
      
      which according to Greg KH seems to aim for a new record in most
      Bugzilla: links in a commit message.
      
      The history of this dpms forcing is pretty interesting. This patch
      here is an almost-revert of
      
      commit 811aaa55
      Author: Keith Packard <keithp@keithp.com>
      Date:   Thu Feb 3 16:57:28 2011 -0800
      
          drm: Only set DPMS ON when actually configuring a mode
      
      which fixed the bug of trying to dpms on disabled outputs, but
      introduced the new discrepancy between an fb update only and full
      modesets. The actual introduction of this goes back to
      
      commit bf9dc102
      Author: Keith Packard <keithp@keithp.com>
      Date:   Fri Nov 26 10:45:58 2010 -0800
      
          drm: Set connector DPMS status to ON in drm_crtc_helper_set_config
      
      And if you'd dig around in the i915 driver code there's even more fun
      around forcing dpms on and losing our heads and temper of the
      resulting inconsistencies. Especially the DP re-training code had tons
      of funny stuff in it.
      
      v2: So v1 totally blew up on resume on my radeon system here. After
      much head-scraching I've figured out that the radeon resume functions
      resumes the console system _before_ it actually restores all the
      modeset state. And resuming the console systems means that fbdev doeas
      an immediate ->set_par call.
      
      Now up to this patch that ->set_par did absolutely nothing: All the
      old sw state from pre-suspend was still around (since the modeset
      reset wasn't done yet), which means that the set_config calls done as
      a result of the ->set_par where all treated as no-ops (despite that
      the real hw state was obviously something completely different).
      
      Since v1 of this patch just added a bunch of ->dpms calls if the crtc
      was enabled, those set_config calls suddenly stopped being no-ops. But
      because the hw state wasn't restored the ->dpms callbacks resulted in
      decent amounts of hilarity and eventual full hangs.
      
      Since I can't review all kms drivers for such tricky ordering
      constraints v2 opts for a different approach and forces a full modeset
      if the connector dpms state isnt' DPMS_ON. Since the ->dpms callbacks
      implemented by the modeset helpers update the connector->dpms property
      we have the same effect of ensuring that the pipe is ultimately turned
      on, even if we just end up updating the fb. This is the same approac
      we ended up using in the intel driver.
      
      Note that besides i915.ko only all other drivers eventually call
      drm_helper_connector_dpms with the exception of vmwgfx, which does not
      support dmps at all.
      
      v3: Dave Airlie merged the broken first version of this patch, so
      squash in the revert of
      
      commit 372835a8
      Author: Daniel Vetter <daniel.vetter@ffwll.ch>
      Date:   Sat Jun 15 00:13:13 2013 +0200
      
          drm/crtc-helper: explicit DPMS on after modeset
      
      Also fix up the spelling fail a bit in the commit message while at it.
      
      Cc: Dave Airlie <airlied@redhat.com>
      Reviewed-by: NAlex Deucher <alexdeucher@gmail.com>
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67043Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      25f397a4
  7. 21 7月, 2013 1 次提交
    • D
      drm/i915: fix up gt init sequence fallout · 181d1b9e
      Daniel Vetter 提交于
      The regression fix for gen6+ rps fallout
      
      commit 7dcd2677
      Author: Konstantin Khlebnikov <khlebnikov@openvz.org>
      Date:   Wed Jul 17 10:22:58 2013 +0400
      
          drm/i915: fix long-standing SNB regression in power consumption after resume
      
      unintentionally also changed the init sequence ordering between
      gt_init and gt_reset - we need to reset BIOS damage like leftover
      forcewake references before we run our own code. Otherwise we can get
      nasty dmesg noise like
      
      [drm:__gen6_gt_force_wake_mt_get] *ERROR* Timed out waiting for forcewake old ack to clear.
      
      again. Since _reset suggests that we first need to have stuff
      initialized (which isn't the case here) call it sanitze instead.
      
      While at it also block out the rps disable introduced by the above
      commit on ilk: We don't have any knowledge of ilk rps being broken in
      similar ways. And the disable functions uses the default hw state
      which is only read out when we're enabling rps. So essentially we've
      been writing random grabage into that register.
      Reported-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Konstantin Khlebnikov <khlebnikov@openvz.org>
      Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
      Cc: stable@vger.kernel.org
      Tested-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      181d1b9e
  8. 20 7月, 2013 1 次提交
    • C
      drm/i915: Serialize almost all register access · a7cd1b8f
      Chris Wilson 提交于
      In theory, the different register blocks were meant to be only ever
      touched when holding either the struct_mutex, mode_config.lock or even a
      specific localised lock. This does not seem to be the case, and the
      hardware reacts extremely badly if we attempt to concurrently access two
      registers within the same cacheline.
      
      The HSD suggests that we only need to do this workaround for display
      range registers. However, upon review we need to serialize the multiple
      stages in our register write functions - if only for preemption
      protection.
      
      Irrespective of the hardware requirements, the current io functions are
      a little too loose with respect to the combination of pre- and
      post-condition testing that we do in conjunction with the actual io. As
      a result, we may be pre-empted and generate both false-postive and
      false-negative errors.
      
      Note well that this is a "90%" solution, there remains a few direct
      users of ioread/iowrite which will be fixed up in the next few patches.
      Since they are more invasive and that this simple change will prevent
      almost all lockups on Haswell, we kept this patch simple to facilitate
      backporting to stable.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=63914Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: stable@vger.kernel.org
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      a7cd1b8f