diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-07 13:01:56 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-07 13:01:56 -0500 |
commit | 83dbb15e9cd78a3619e3db36777e2f81d09b2914 (patch) | |
tree | 521737fc0829222c2739e4d50bf8546a39d6aa0e /drivers/gpu/drm/radeon/ni.c | |
parent | 6e6bc67982573c221d12cbd123d34395f9f6e22e (diff) | |
parent | 2ac863719e518ae1a8f328849e64ea26a222f079 (diff) |
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: (40 commits)
vmwgfx: Snoop DMA transfers with non-covering sizes
vmwgfx: Move the prefered mode first in the list
vmwgfx: Unreference surface on cursor error path
vmwgfx: Free prefered mode on error path
vmwgfx: Use pointer return error codes
vmwgfx: Fix hw cursor position
vmwgfx: Infrastructure for explicit placement
vmwgfx: Make the preferred autofit mode have a 60Hz vrefresh
vmwgfx: Remove screen object active list
vmwgfx: Screen object cleanups
drm/radeon/kms: consolidate GART code, fix segfault after GPU lockup V2
drm/radeon/kms: don't poll forever if MC GDDR link training fails
drm/radeon/kms: fix DP setup on TRAVIS bridges
drm/radeon/kms: set HPD polarity in hpd_init()
drm/radeon/kms: add MSI module parameter
drm/radeon/kms: Add MSI quirk for Dell RS690
drm/radeon/kms: Add MSI quirk for HP RS690
drm/radeon/kms: split MSI check into a separate function
vmwgfx: Reinstate the update_layout ioctl
drm/radeon/kms: always do extended edid probe
...
Diffstat (limited to 'drivers/gpu/drm/radeon/ni.c')
-rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index fdb93f884575..0e5799857465 100644 --- a/drivers/gpu/drm/radeon/ni.c +++ b/drivers/gpu/drm/radeon/ni.c | |||
@@ -262,8 +262,11 @@ int ni_mc_load_microcode(struct radeon_device *rdev) | |||
262 | WREG32(MC_SEQ_SUP_CNTL, 0x00000001); | 262 | WREG32(MC_SEQ_SUP_CNTL, 0x00000001); |
263 | 263 | ||
264 | /* wait for training to complete */ | 264 | /* wait for training to complete */ |
265 | while (!(RREG32(MC_IO_PAD_CNTL_D0) & MEM_FALL_OUT_CMD)) | 265 | for (i = 0; i < rdev->usec_timeout; i++) { |
266 | udelay(10); | 266 | if (RREG32(MC_IO_PAD_CNTL_D0) & MEM_FALL_OUT_CMD) |
267 | break; | ||
268 | udelay(1); | ||
269 | } | ||
267 | 270 | ||
268 | if (running) | 271 | if (running) |
269 | WREG32(MC_SHARED_BLACKOUT_CNTL, blackout); | 272 | WREG32(MC_SHARED_BLACKOUT_CNTL, blackout); |
@@ -933,7 +936,7 @@ int cayman_pcie_gart_enable(struct radeon_device *rdev) | |||
933 | { | 936 | { |
934 | int r; | 937 | int r; |
935 | 938 | ||
936 | if (rdev->gart.table.vram.robj == NULL) { | 939 | if (rdev->gart.robj == NULL) { |
937 | dev_err(rdev->dev, "No VRAM object for PCIE GART.\n"); | 940 | dev_err(rdev->dev, "No VRAM object for PCIE GART.\n"); |
938 | return -EINVAL; | 941 | return -EINVAL; |
939 | } | 942 | } |
@@ -978,8 +981,6 @@ int cayman_pcie_gart_enable(struct radeon_device *rdev) | |||
978 | 981 | ||
979 | void cayman_pcie_gart_disable(struct radeon_device *rdev) | 982 | void cayman_pcie_gart_disable(struct radeon_device *rdev) |
980 | { | 983 | { |
981 | int r; | ||
982 | |||
983 | /* Disable all tables */ | 984 | /* Disable all tables */ |
984 | WREG32(VM_CONTEXT0_CNTL, 0); | 985 | WREG32(VM_CONTEXT0_CNTL, 0); |
985 | WREG32(VM_CONTEXT1_CNTL, 0); | 986 | WREG32(VM_CONTEXT1_CNTL, 0); |
@@ -995,14 +996,7 @@ void cayman_pcie_gart_disable(struct radeon_device *rdev) | |||
995 | WREG32(VM_L2_CNTL2, 0); | 996 | WREG32(VM_L2_CNTL2, 0); |
996 | WREG32(VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY | | 997 | WREG32(VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY | |
997 | L2_CACHE_BIGK_FRAGMENT_SIZE(6)); | 998 | L2_CACHE_BIGK_FRAGMENT_SIZE(6)); |
998 | if (rdev->gart.table.vram.robj) { | 999 | radeon_gart_table_vram_unpin(rdev); |
999 | r = radeon_bo_reserve(rdev->gart.table.vram.robj, false); | ||
1000 | if (likely(r == 0)) { | ||
1001 | radeon_bo_kunmap(rdev->gart.table.vram.robj); | ||
1002 | radeon_bo_unpin(rdev->gart.table.vram.robj); | ||
1003 | radeon_bo_unreserve(rdev->gart.table.vram.robj); | ||
1004 | } | ||
1005 | } | ||
1006 | } | 1000 | } |
1007 | 1001 | ||
1008 | void cayman_pcie_gart_fini(struct radeon_device *rdev) | 1002 | void cayman_pcie_gart_fini(struct radeon_device *rdev) |
@@ -1362,6 +1356,10 @@ static int cayman_startup(struct radeon_device *rdev) | |||
1362 | return r; | 1356 | return r; |
1363 | } | 1357 | } |
1364 | 1358 | ||
1359 | r = r600_vram_scratch_init(rdev); | ||
1360 | if (r) | ||
1361 | return r; | ||
1362 | |||
1365 | evergreen_mc_program(rdev); | 1363 | evergreen_mc_program(rdev); |
1366 | r = cayman_pcie_gart_enable(rdev); | 1364 | r = cayman_pcie_gart_enable(rdev); |
1367 | if (r) | 1365 | if (r) |
@@ -1557,6 +1555,7 @@ void cayman_fini(struct radeon_device *rdev) | |||
1557 | radeon_ib_pool_fini(rdev); | 1555 | radeon_ib_pool_fini(rdev); |
1558 | radeon_irq_kms_fini(rdev); | 1556 | radeon_irq_kms_fini(rdev); |
1559 | cayman_pcie_gart_fini(rdev); | 1557 | cayman_pcie_gart_fini(rdev); |
1558 | r600_vram_scratch_fini(rdev); | ||
1560 | radeon_gem_fini(rdev); | 1559 | radeon_gem_fini(rdev); |
1561 | radeon_fence_driver_fini(rdev); | 1560 | radeon_fence_driver_fini(rdev); |
1562 | radeon_bo_fini(rdev); | 1561 | radeon_bo_fini(rdev); |