aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/ni.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-11-07 13:01:56 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-11-07 13:01:56 -0500
commit83dbb15e9cd78a3619e3db36777e2f81d09b2914 (patch)
tree521737fc0829222c2739e4d50bf8546a39d6aa0e /drivers/gpu/drm/radeon/ni.c
parent6e6bc67982573c221d12cbd123d34395f9f6e22e (diff)
parent2ac863719e518ae1a8f328849e64ea26a222f079 (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.c25
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
979void cayman_pcie_gart_disable(struct radeon_device *rdev) 982void 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
1008void cayman_pcie_gart_fini(struct radeon_device *rdev) 1002void 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);