1. 27 9月, 2012 8 次提交
    • D
      drm/radeon: add 2-level VM pagetables support v9 · fa87e62d
      Dmitry Cherkasov 提交于
      PDE/PTE update code uses CP ring for memory writes.
      All page table entries are preallocated for now in alloc_pt().
      
      It is made as whole because it's hard to divide it to several patches
      that compile and doesn't break anything being applied separately.
      
      Tested on cayman card.
      
      v2: rebased on top of "refactor set_page chipset interface v3",
          code cleanups
      
      v3: switched offsets calc macros to inline funcs where possible,
          remove pd_addr from radeon_vm, switched RADEON_BLOCK_SIZE define,
          to 9 (and PTE_COUNT to 1 << BLOCK_SIZE)
      
      v4 (ck): move "incr" documentation to previous patch, cleanup and
               document RADEON_VM_* constants, change commit message to
               our usual format, simplify patch allot by removing
               everything current not necessary, disable SI workaround.
      
      v5: (agd5f): Fix typo in tables_size calculation in
                   radeon_vm_alloc_pt().  Second line should have been
                   '+=' rather than '='.
      
      v6: fix npdes calculation. In scenario when pfns to be mapped overlap
      two PDE spans:
      
         +-----------+-------------+
         | PDE span  | PDE span    |
         +-----------+----+--------+
                |         |
                +---------+
                | pfns    |
                +---------+
      
      the following npdes calculation gives incorrect result:
      
      npdes = (nptes >> RADEON_VM_BLOCK_SIZE) + 1;
      
      For the case above picture it should give npdes = 2, but gives one.
      
      This patch corrects it by rounding last pfn up to 512 border,
      first - down to 512 border and then subtracting and dividing by 512.
      
      v7: Make npde calculation clearer, fix ndw calculation.
      
      v8: (agd5f): reserve enough for 2 full VM PTs, add some
                   additional comments.
      
      v9: fix typo in npde calculation
      Signed-off-by: NDmitry Cherkasov <Dmitrii.Cherkasov@amd.com>
      Signed-off-by: NChristian König <deathsimple@vodafone.de>
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      fa87e62d
    • C
      drm/radeon: refactor set_page chipset interface v5 · dce34bfd
      Christian König 提交于
      Cleanup the interface in preparation for hierarchical page tables.
      
      v2: add incr parameter to set_page for simple scattered PTs uptates
          added PDE-specific flags to r600_flags and radeon_drm.h
          removed superfluous value masking with 0xffffffff
      
      v3: removed superfluous bo_va->valid checking
          changed R600_PTE_VALID to R600_ENTRY_VALID to handle PDE too
      
      v4 (ck): fix indention style, rework and fix typos in commit message,
               add documentation for incr parameter, also use incr
               parameter for system pages
      
      v5 (agd5f): use upper_32_bits() and minor white space fixes
      Signed-off-by: NChristian König <deathsimple@vodafone.de>
      Signed-off-by: NDmitry Cherkassov <Dmitrii.Cherkasov@amd.com>
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      dce34bfd
    • M
      drm/radeon: Fix scratch register leak in IB test. · af026c5b
      Michel Dänzer 提交于
      Restructure the code to jump out via labels instead of directly returning
      early. Also make error reporting consistent across all hardware generations.
      Signed-off-by: NMichel Dänzer <michel.daenzer@amd.com>
      Reviewed-by: NSimon Kitching <skitching@vonos.net>
      Reviewed-by: NChristian König <christian.koenig@amd.com>
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      af026c5b
    • A
      drm/radeon: restore backlight level on resume · bced76f2
      Alex Deucher 提交于
      Restore the backlight level on resume.  Some systems
      need to explicitly restore the backlight level on
      resume.
      
      Fixes panel resume on my Trinity laptop and may fix the
      following bugs:
      https://bugs.freedesktop.org/show_bug.cgi?id=43829
      https://bugzilla.kernel.org/show_bug.cgi?id=46241Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      bced76f2
    • A
      drm/radeon: add get_backlight_level callback · 6d92f81d
      Alex Deucher 提交于
      Read back the backlight level from the hw.
      Needed for proper backlight restoration on resume.
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      6d92f81d
    • A
      drm/radeon: only adjust default clocks on NI GPUs · 2e3b3b10
      Alex Deucher 提交于
      SI asics store voltage information differently so we
      don't have a way to deal with it properly yet.
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      2e3b3b10
    • A
      drm/radeon: validate PPLL in crtc fixup · c0fd0834
      Alex Deucher 提交于
      This allows us to bail if we can't support the requested
      setup from a PPLL perspective.  Prevents broken setups
      from being attempted.
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      c0fd0834
    • A
      drm/radeon: work around KMS modeset limitations in PLL allocation (v2) · 57b35e29
      Alex Deucher 提交于
      Since the current KMS API sets the mode independantly on
      each crtc, we may end up with resource conflicts.  The PLL
      allocation is one of those cases.  In the following example
      we have 3 crtcs in use driving 2 DVI connectors and 1 DP
      connector.  On the initial kernel modeset for fbdev, the
      display topology ends up as follows:
      
      crtc0 -> DP-0
      crtc1 -> DVI-0
      crtc2 -> DVI-1
      
      Because this is the first modeset, all of the PLLs are
      available as none have been assigned.  So we end up with
      the following:
      
      crtc0 uses DCPLL
      crtc1 uses PPLL2
      crtc2 uses PPLL1
      
      When X starts, it assigns a different topology:
      
      crtc0 -> DVI-0
      crtc1 -> DP-0
      crtc2 -> DVI-1
      
      However, since the KMS API is per crtc, we set the mode on each
      crtc independantly.  When it comes time to set the mode on crtc0,
      the topology for crtc1 and crtc2 are still intact.  crtc1 and
      crtc2 are already assigned PPLL2 and PPLL1 so when it comes time
      to set the mode on crtc0, crtc1 and crtc2 have not been torn down
      yet, so there appears to be no PLLs available.  In reality, we
      are reconfiguring the entire display topology, however, since
      each crtc is handled independantly, we don't know that in the
      driver at each crtc mode set time.
      
      This patch checks to see if the same connector is being driven by
      another crtc, and if so, uses the PLL already associated with it.
      
      v2: store connector in the radeon crtc struct, simplify checking.
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      57b35e29
  2. 21 9月, 2012 32 次提交