diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/ni.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 48 | 
1 files changed, 10 insertions, 38 deletions
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index 44c4750f451..8c79ca97753 100644 --- a/drivers/gpu/drm/radeon/ni.c +++ b/drivers/gpu/drm/radeon/ni.c @@ -39,6 +39,7 @@ extern int evergreen_mc_wait_for_idle(struct radeon_device *rdev);  extern void evergreen_mc_program(struct radeon_device *rdev);  extern void evergreen_irq_suspend(struct radeon_device *rdev);  extern int evergreen_mc_init(struct radeon_device *rdev); +extern void evergreen_fix_pci_max_read_req_size(struct radeon_device *rdev);  #define EVERGREEN_PFP_UCODE_SIZE 1120  #define EVERGREEN_PM4_UCODE_SIZE 1376 @@ -568,36 +569,6 @@ static u32 cayman_get_tile_pipe_to_backend_map(struct radeon_device *rdev,  	return backend_map;  } -static void cayman_program_channel_remap(struct radeon_device *rdev) -{ -	u32 tcp_chan_steer_lo, tcp_chan_steer_hi, mc_shared_chremap, tmp; - -	tmp = RREG32(MC_SHARED_CHMAP); -	switch ((tmp & NOOFCHAN_MASK) >> NOOFCHAN_SHIFT) { -	case 0: -	case 1: -	case 2: -	case 3: -	default: -		/* default mapping */ -		mc_shared_chremap = 0x00fac688; -		break; -	} - -	switch (rdev->family) { -	case CHIP_CAYMAN: -	default: -		//tcp_chan_steer_lo = 0x54763210 -		tcp_chan_steer_lo = 0x76543210; -		tcp_chan_steer_hi = 0x0000ba98; -		break; -	} - -	WREG32(TCP_CHAN_STEER_LO, tcp_chan_steer_lo); -	WREG32(TCP_CHAN_STEER_HI, tcp_chan_steer_hi); -	WREG32(MC_SHARED_CHREMAP, mc_shared_chremap); -} -  static u32 cayman_get_disable_mask_per_asic(struct radeon_device *rdev,  					    u32 disable_mask_per_se,  					    u32 max_disable_mask_per_se, @@ -669,6 +640,8 @@ static void cayman_gpu_init(struct radeon_device *rdev)  	WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff)); +	evergreen_fix_pci_max_read_req_size(rdev); +  	mc_shared_chmap = RREG32(MC_SHARED_CHMAP);  	mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG); @@ -839,8 +812,6 @@ static void cayman_gpu_init(struct radeon_device *rdev)  	WREG32(DMIF_ADDR_CONFIG, gb_addr_config);  	WREG32(HDP_ADDR_CONFIG, gb_addr_config); -	cayman_program_channel_remap(rdev); -  	/* primary versions */  	WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable);  	WREG32(CC_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable); @@ -1159,6 +1130,7 @@ int cayman_cp_resume(struct radeon_device *rdev)  				 SOFT_RESET_PA |  				 SOFT_RESET_SH |  				 SOFT_RESET_VGT | +				 SOFT_RESET_SPI |  				 SOFT_RESET_SX));  	RREG32(GRBM_SOFT_RESET);  	mdelay(15); @@ -1183,7 +1155,8 @@ int cayman_cp_resume(struct radeon_device *rdev)  	/* Initialize the ring buffer's read and write pointers */  	WREG32(CP_RB0_CNTL, tmp | RB_RPTR_WR_ENA); -	WREG32(CP_RB0_WPTR, 0); +	rdev->cp.wptr = 0; +	WREG32(CP_RB0_WPTR, rdev->cp.wptr);  	/* set the wb address wether it's enabled or not */  	WREG32(CP_RB0_RPTR_ADDR, (rdev->wb.gpu_addr + RADEON_WB_CP_RPTR_OFFSET) & 0xFFFFFFFC); @@ -1203,7 +1176,6 @@ int cayman_cp_resume(struct radeon_device *rdev)  	WREG32(CP_RB0_BASE, rdev->cp.gpu_addr >> 8);  	rdev->cp.rptr = RREG32(CP_RB0_RPTR); -	rdev->cp.wptr = RREG32(CP_RB0_WPTR);  	/* ring1  - compute only */  	/* Set ring buffer size */ @@ -1216,7 +1188,8 @@ int cayman_cp_resume(struct radeon_device *rdev)  	/* Initialize the ring buffer's read and write pointers */  	WREG32(CP_RB1_CNTL, tmp | RB_RPTR_WR_ENA); -	WREG32(CP_RB1_WPTR, 0); +	rdev->cp1.wptr = 0; +	WREG32(CP_RB1_WPTR, rdev->cp1.wptr);  	/* set the wb address wether it's enabled or not */  	WREG32(CP_RB1_RPTR_ADDR, (rdev->wb.gpu_addr + RADEON_WB_CP1_RPTR_OFFSET) & 0xFFFFFFFC); @@ -1228,7 +1201,6 @@ int cayman_cp_resume(struct radeon_device *rdev)  	WREG32(CP_RB1_BASE, rdev->cp1.gpu_addr >> 8);  	rdev->cp1.rptr = RREG32(CP_RB1_RPTR); -	rdev->cp1.wptr = RREG32(CP_RB1_WPTR);  	/* ring2 - compute only */  	/* Set ring buffer size */ @@ -1241,7 +1213,8 @@ int cayman_cp_resume(struct radeon_device *rdev)  	/* Initialize the ring buffer's read and write pointers */  	WREG32(CP_RB2_CNTL, tmp | RB_RPTR_WR_ENA); -	WREG32(CP_RB2_WPTR, 0); +	rdev->cp2.wptr = 0; +	WREG32(CP_RB2_WPTR, rdev->cp2.wptr);  	/* set the wb address wether it's enabled or not */  	WREG32(CP_RB2_RPTR_ADDR, (rdev->wb.gpu_addr + RADEON_WB_CP2_RPTR_OFFSET) & 0xFFFFFFFC); @@ -1253,7 +1226,6 @@ int cayman_cp_resume(struct radeon_device *rdev)  	WREG32(CP_RB2_BASE, rdev->cp2.gpu_addr >> 8);  	rdev->cp2.rptr = RREG32(CP_RB2_RPTR); -	rdev->cp2.wptr = RREG32(CP_RB2_WPTR);  	/* start the rings */  	cayman_cp_start(rdev);  |