diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/ni.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 14 | 
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index 5a33ca681867..3faee58946dd 100644 --- a/drivers/gpu/drm/radeon/ni.c +++ b/drivers/gpu/drm/radeon/ni.c @@ -1229,7 +1229,6 @@ static int cayman_pcie_gart_enable(struct radeon_device *rdev)  	r = radeon_gart_table_vram_pin(rdev);  	if (r)  		return r; -	radeon_gart_restore(rdev);  	/* Setup TLB control */  	WREG32(MC_VM_MX_L1_TLB_CNTL,  	       (0xA << 7) | @@ -1272,7 +1271,7 @@ static int cayman_pcie_gart_enable(struct radeon_device *rdev)  		WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR + (i << 2), 0);  		WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR + (i << 2), rdev->vm_manager.max_pfn);  		WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2), -			rdev->gart.table_addr >> 12); +		       rdev->vm_manager.saved_table_addr[i]);  	}  	/* enable context1-7 */ @@ -1304,6 +1303,13 @@ static int cayman_pcie_gart_enable(struct radeon_device *rdev)  static void cayman_pcie_gart_disable(struct radeon_device *rdev)  { +	unsigned i; + +	for (i = 1; i < 8; ++i) { +		rdev->vm_manager.saved_table_addr[i] = RREG32( +			VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2)); +	} +  	/* Disable all tables */  	WREG32(VM_CONTEXT0_CNTL, 0);  	WREG32(VM_CONTEXT1_CNTL, 0); @@ -1506,7 +1512,7 @@ static int cayman_cp_start(struct radeon_device *rdev)  	radeon_ring_write(ring, PACKET3_ME_INITIALIZE_DEVICE_ID(1));  	radeon_ring_write(ring, 0);  	radeon_ring_write(ring, 0); -	radeon_ring_unlock_commit(rdev, ring); +	radeon_ring_unlock_commit(rdev, ring, false);  	cayman_cp_enable(rdev, true); @@ -1548,7 +1554,7 @@ static int cayman_cp_start(struct radeon_device *rdev)  	radeon_ring_write(ring, 0x0000000e); /* VGT_VERTEX_REUSE_BLOCK_CNTL */  	radeon_ring_write(ring, 0x00000010); /*  */ -	radeon_ring_unlock_commit(rdev, ring); +	radeon_ring_unlock_commit(rdev, ring, false);  	/* XXX init other rings */  |