diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 35 | 
1 files changed, 18 insertions, 17 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index a73206784cba..b6db28a570c2 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -583,9 +583,12 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file  		struct drm_amdgpu_info_vram_gtt vram_gtt;  		vram_gtt.vram_size = adev->gmc.real_vram_size - -			atomic64_read(&adev->vram_pin_size); -		vram_gtt.vram_cpu_accessible_size = adev->gmc.visible_vram_size - -			atomic64_read(&adev->visible_pin_size); +			atomic64_read(&adev->vram_pin_size) - +			AMDGPU_VM_RESERVED_VRAM; +		vram_gtt.vram_cpu_accessible_size = +			min(adev->gmc.visible_vram_size - +			    atomic64_read(&adev->visible_pin_size), +			    vram_gtt.vram_size);  		vram_gtt.gtt_size = adev->mman.bdev.man[TTM_PL_TT].size;  		vram_gtt.gtt_size *= PAGE_SIZE;  		vram_gtt.gtt_size -= atomic64_read(&adev->gart_pin_size); @@ -598,15 +601,18 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file  		memset(&mem, 0, sizeof(mem));  		mem.vram.total_heap_size = adev->gmc.real_vram_size;  		mem.vram.usable_heap_size = adev->gmc.real_vram_size - -			atomic64_read(&adev->vram_pin_size); +			atomic64_read(&adev->vram_pin_size) - +			AMDGPU_VM_RESERVED_VRAM;  		mem.vram.heap_usage =  			amdgpu_vram_mgr_usage(&adev->mman.bdev.man[TTM_PL_VRAM]);  		mem.vram.max_allocation = mem.vram.usable_heap_size * 3 / 4;  		mem.cpu_accessible_vram.total_heap_size =  			adev->gmc.visible_vram_size; -		mem.cpu_accessible_vram.usable_heap_size = adev->gmc.visible_vram_size - -			atomic64_read(&adev->visible_pin_size); +		mem.cpu_accessible_vram.usable_heap_size = +			min(adev->gmc.visible_vram_size - +			    atomic64_read(&adev->visible_pin_size), +			    mem.vram.usable_heap_size);  		mem.cpu_accessible_vram.heap_usage =  			amdgpu_vram_mgr_vis_usage(&adev->mman.bdev.man[TTM_PL_VRAM]);  		mem.cpu_accessible_vram.max_allocation = @@ -732,17 +738,6 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file  		dev_info.vce_harvest_config = adev->vce.harvest_config;  		dev_info.gc_double_offchip_lds_buf =  			adev->gfx.config.double_offchip_lds_buf; - -		if (amdgpu_ngg) { -			dev_info.prim_buf_gpu_addr = adev->gfx.ngg.buf[NGG_PRIM].gpu_addr; -			dev_info.prim_buf_size = adev->gfx.ngg.buf[NGG_PRIM].size; -			dev_info.pos_buf_gpu_addr = adev->gfx.ngg.buf[NGG_POS].gpu_addr; -			dev_info.pos_buf_size = adev->gfx.ngg.buf[NGG_POS].size; -			dev_info.cntl_sb_buf_gpu_addr = adev->gfx.ngg.buf[NGG_CNTL].gpu_addr; -			dev_info.cntl_sb_buf_size = adev->gfx.ngg.buf[NGG_CNTL].size; -			dev_info.param_buf_gpu_addr = adev->gfx.ngg.buf[NGG_PARAM].gpu_addr; -			dev_info.param_buf_size = adev->gfx.ngg.buf[NGG_PARAM].size; -		}  		dev_info.wave_front_size = adev->gfx.cu_info.wave_front_size;  		dev_info.num_shader_visible_vgprs = adev->gfx.config.max_gprs;  		dev_info.num_cu_per_sh = adev->gfx.config.max_cu_per_sh; @@ -971,6 +966,12 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)  	/* Ensure IB tests are run on ring */  	flush_delayed_work(&adev->delayed_init_work); + +	if (amdgpu_ras_intr_triggered()) { +		DRM_ERROR("RAS Intr triggered, device disabled!!"); +		return -EHWPOISON; +	} +  	file_priv->driver_priv = NULL;  	r = pm_runtime_get_sync(dev->dev);  |