diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/ni.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 33 | 
1 files changed, 27 insertions, 6 deletions
| diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index d4c633e1286..27769e724b6 100644 --- a/drivers/gpu/drm/radeon/ni.c +++ b/drivers/gpu/drm/radeon/ni.c @@ -468,13 +468,19 @@ static void cayman_gpu_init(struct radeon_device *rdev)  		    (rdev->pdev->device == 0x9907) ||  		    (rdev->pdev->device == 0x9908) ||  		    (rdev->pdev->device == 0x9909) || +		    (rdev->pdev->device == 0x990B) || +		    (rdev->pdev->device == 0x990C) || +		    (rdev->pdev->device == 0x990F) ||  		    (rdev->pdev->device == 0x9910) || -		    (rdev->pdev->device == 0x9917)) { +		    (rdev->pdev->device == 0x9917) || +		    (rdev->pdev->device == 0x9999)) {  			rdev->config.cayman.max_simds_per_se = 6;  			rdev->config.cayman.max_backends_per_se = 2;  		} else if ((rdev->pdev->device == 0x9903) ||  			   (rdev->pdev->device == 0x9904) ||  			   (rdev->pdev->device == 0x990A) || +			   (rdev->pdev->device == 0x990D) || +			   (rdev->pdev->device == 0x990E) ||  			   (rdev->pdev->device == 0x9913) ||  			   (rdev->pdev->device == 0x9918)) {  			rdev->config.cayman.max_simds_per_se = 4; @@ -483,6 +489,9 @@ static void cayman_gpu_init(struct radeon_device *rdev)  			   (rdev->pdev->device == 0x9990) ||  			   (rdev->pdev->device == 0x9991) ||  			   (rdev->pdev->device == 0x9994) || +			   (rdev->pdev->device == 0x9995) || +			   (rdev->pdev->device == 0x9996) || +			   (rdev->pdev->device == 0x999A) ||  			   (rdev->pdev->device == 0x99A0)) {  			rdev->config.cayman.max_simds_per_se = 3;  			rdev->config.cayman.max_backends_per_se = 1; @@ -616,11 +625,22 @@ static void cayman_gpu_init(struct radeon_device *rdev)  	WREG32(DMA_TILING_CONFIG + DMA0_REGISTER_OFFSET, gb_addr_config);  	WREG32(DMA_TILING_CONFIG + DMA1_REGISTER_OFFSET, gb_addr_config); -	tmp = gb_addr_config & NUM_PIPES_MASK; -	tmp = r6xx_remap_render_backend(rdev, tmp, -					rdev->config.cayman.max_backends_per_se * -					rdev->config.cayman.max_shader_engines, -					CAYMAN_MAX_BACKENDS, disabled_rb_mask); +	if ((rdev->config.cayman.max_backends_per_se == 1) && +	    (rdev->flags & RADEON_IS_IGP)) { +		if ((disabled_rb_mask & 3) == 1) { +			/* RB0 disabled, RB1 enabled */ +			tmp = 0x11111111; +		} else { +			/* RB1 disabled, RB0 enabled */ +			tmp = 0x00000000; +		} +	} else { +		tmp = gb_addr_config & NUM_PIPES_MASK; +		tmp = r6xx_remap_render_backend(rdev, tmp, +						rdev->config.cayman.max_backends_per_se * +						rdev->config.cayman.max_shader_engines, +						CAYMAN_MAX_BACKENDS, disabled_rb_mask); +	}  	WREG32(GB_BACKEND_MAP, tmp);  	cgts_tcc_disable = 0xffff0000; @@ -1771,6 +1791,7 @@ int cayman_resume(struct radeon_device *rdev)  int cayman_suspend(struct radeon_device *rdev)  {  	r600_audio_fini(rdev); +	radeon_vm_manager_fini(rdev);  	cayman_cp_enable(rdev, false);  	cayman_dma_stop(rdev);  	evergreen_irq_suspend(rdev); |