diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 12 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 | 
4 files changed, 26 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 8c704c86597b..700c56baf2de 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -426,6 +426,8 @@ struct amdgpu_mman {  	/* custom LRU management */  	struct amdgpu_mman_lru			log2_size[AMDGPU_TTM_LRU_SIZE]; +	/* guard for log2_size array, don't add anything in between */ +	struct amdgpu_mman_lru			guard;  };  int amdgpu_copy_buffer(struct amdgpu_ring *ring, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c index 983175363b06..fe872b82e619 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c @@ -321,6 +321,19 @@ bool amdgpu_atombios_get_connector_info_from_object_table(struct amdgpu_device *  			    (le16_to_cpu(path->usConnObjectId) &  			     OBJECT_TYPE_MASK) >> OBJECT_TYPE_SHIFT; +			/* Skip TV/CV support */ +			if ((le16_to_cpu(path->usDeviceTag) == +			     ATOM_DEVICE_TV1_SUPPORT) || +			    (le16_to_cpu(path->usDeviceTag) == +			     ATOM_DEVICE_CV_SUPPORT)) +				continue; + +			if (con_obj_id >= ARRAY_SIZE(object_connector_convert)) { +				DRM_ERROR("invalid con_obj_id %d for device tag 0x%04x\n", +					  con_obj_id, le16_to_cpu(path->usDeviceTag)); +				continue; +			} +  			connector_type =  				object_connector_convert[con_obj_id];  			connector_object_id = con_obj_id; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index 9b61c8ba7aaf..716f2afeb6a9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c @@ -251,8 +251,8 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,  	adev = amdgpu_get_adev(bo->bdev);  	ring = adev->mman.buffer_funcs_ring; -	old_start = old_mem->start << PAGE_SHIFT; -	new_start = new_mem->start << PAGE_SHIFT; +	old_start = (u64)old_mem->start << PAGE_SHIFT; +	new_start = (u64)new_mem->start << PAGE_SHIFT;  	switch (old_mem->mem_type) {  	case TTM_PL_VRAM: @@ -950,6 +950,8 @@ static struct list_head *amdgpu_ttm_lru_tail(struct ttm_buffer_object *tbo)  	struct list_head *res = lru->lru[tbo->mem.mem_type];  	lru->lru[tbo->mem.mem_type] = &tbo->lru; +	while ((++lru)->lru[tbo->mem.mem_type] == res) +		lru->lru[tbo->mem.mem_type] = &tbo->lru;  	return res;  } @@ -960,6 +962,8 @@ static struct list_head *amdgpu_ttm_swap_lru_tail(struct ttm_buffer_object *tbo)  	struct list_head *res = lru->swap_lru;  	lru->swap_lru = &tbo->swap; +	while ((++lru)->swap_lru == res) +		lru->swap_lru = &tbo->swap;  	return res;  } @@ -1011,6 +1015,10 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)  		lru->swap_lru = &adev->mman.bdev.glob->swap_lru;  	} +	for (j = 0; j < TTM_NUM_MEM_TYPES; ++j) +		adev->mman.guard.lru[j] = NULL; +	adev->mman.guard.swap_lru = NULL; +  	adev->mman.initialized = true;  	r = ttm_bo_init_mm(&adev->mman.bdev, TTM_PL_VRAM,  				adev->mc.real_vram_size >> PAGE_SHIFT); diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c index 1351c7e834a2..a64715d90503 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c @@ -714,7 +714,7 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring, long timeout)  		DRM_ERROR("amdgpu: IB test timed out\n");  		r = -ETIMEDOUT;  		goto err1; -	} else if (r) { +	} else if (r < 0) {  		DRM_ERROR("amdgpu: fence wait failed (%ld).\n", r);  		goto err1;  	}  | 
