diff options
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 10 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_device.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_test.c | 34 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_ttm.c | 23 | ||||
| -rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo.c | 14 | ||||
| -rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo_util.c | 2 | 
6 files changed, 70 insertions, 15 deletions
| diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 7f65940f918f..4f0c1ecac72e 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -466,6 +466,16 @@ static bool radeon_connector_needs_extended_probe(struct radeon_device *dev,  		    (supported_device == ATOM_DEVICE_DFP2_SUPPORT))  			return true;  	} +	/* TOSHIBA Satellite L300D with ATI Mobility Radeon x1100 +	 * (RS690M) sends data to i2c bus for a HDMI connector that +	 * is not implemented */ +	if ((dev->pdev->device == 0x791f) && +	    (dev->pdev->subsystem_vendor == 0x1179) && +	    (dev->pdev->subsystem_device == 0xff68)) { +		if ((connector_type == DRM_MODE_CONNECTOR_HDMIA) && +		    (supported_device == ATOM_DEVICE_DFP2_SUPPORT)) +			return true; +	}  	/* Default: no EDID header probe required for DDC probing */  	return false; diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index a3b011b49465..b51e15725c6e 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -301,6 +301,8 @@ void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *mc, u64  		mc->mc_vram_size = mc->aper_size;  	}  	mc->vram_end = mc->vram_start + mc->mc_vram_size - 1; +	if (radeon_vram_limit && radeon_vram_limit < mc->real_vram_size) +		mc->real_vram_size = radeon_vram_limit;  	dev_info(rdev->dev, "VRAM: %lluM 0x%016llX - 0x%016llX (%lluM used)\n",  			mc->mc_vram_size >> 20, mc->vram_start,  			mc->vram_end, mc->real_vram_size >> 20); diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c index dee4a0c1b4b2..602fa3541c45 100644 --- a/drivers/gpu/drm/radeon/radeon_test.c +++ b/drivers/gpu/drm/radeon/radeon_test.c @@ -40,10 +40,14 @@ void radeon_test_moves(struct radeon_device *rdev)  	size = 1024 * 1024;  	/* Number of tests = -	 * (Total GTT - IB pool - writeback page - ring buffer) / test size +	 * (Total GTT - IB pool - writeback page - ring buffers) / test size  	 */ -	n = ((u32)(rdev->mc.gtt_size - RADEON_IB_POOL_SIZE*64*1024 - RADEON_GPU_PAGE_SIZE - -	     rdev->cp.ring_size)) / size; +	n = rdev->mc.gtt_size - RADEON_IB_POOL_SIZE*64*1024 - rdev->cp.ring_size; +	if (rdev->wb.wb_obj) +		n -= RADEON_GPU_PAGE_SIZE; +	if (rdev->ih.ring_obj) +		n -= rdev->ih.ring_size; +	n /= size;  	gtt_obj = kzalloc(n * sizeof(*gtt_obj), GFP_KERNEL);  	if (!gtt_obj) { @@ -132,9 +136,15 @@ void radeon_test_moves(struct radeon_device *rdev)  		     gtt_start++, vram_start++) {  			if (*vram_start != gtt_start) {  				DRM_ERROR("Incorrect GTT->VRAM copy %d: Got 0x%p, " -					  "expected 0x%p (GTT map 0x%p-0x%p)\n", -					  i, *vram_start, gtt_start, gtt_map, -					  gtt_end); +					  "expected 0x%p (GTT/VRAM offset " +					  "0x%16llx/0x%16llx)\n", +					  i, *vram_start, gtt_start, +					  (unsigned long long) +					  (gtt_addr - rdev->mc.gtt_start + +					   (void*)gtt_start - gtt_map), +					  (unsigned long long) +					  (vram_addr - rdev->mc.vram_start + +					   (void*)gtt_start - gtt_map));  				radeon_bo_kunmap(vram_obj);  				goto out_cleanup;  			} @@ -175,9 +185,15 @@ void radeon_test_moves(struct radeon_device *rdev)  		     gtt_start++, vram_start++) {  			if (*gtt_start != vram_start) {  				DRM_ERROR("Incorrect VRAM->GTT copy %d: Got 0x%p, " -					  "expected 0x%p (VRAM map 0x%p-0x%p)\n", -					  i, *gtt_start, vram_start, vram_map, -					  vram_end); +					  "expected 0x%p (VRAM/GTT offset " +					  "0x%16llx/0x%16llx)\n", +					  i, *gtt_start, vram_start, +					  (unsigned long long) +					  (vram_addr - rdev->mc.vram_start + +					   (void*)vram_start - vram_map), +					  (unsigned long long) +					  (gtt_addr - rdev->mc.gtt_start + +					   (void*)vram_start - vram_map));  				radeon_bo_kunmap(gtt_obj[i]);  				goto out_cleanup;  			} diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index 60125ddba1e9..9b86fb0e4122 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c @@ -450,6 +450,29 @@ static int radeon_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_  			return -EINVAL;  		mem->bus.base = rdev->mc.aper_base;  		mem->bus.is_iomem = true; +#ifdef __alpha__ +		/* +		 * Alpha: use bus.addr to hold the ioremap() return, +		 * so we can modify bus.base below. +		 */ +		if (mem->placement & TTM_PL_FLAG_WC) +			mem->bus.addr = +				ioremap_wc(mem->bus.base + mem->bus.offset, +					   mem->bus.size); +		else +			mem->bus.addr = +				ioremap_nocache(mem->bus.base + mem->bus.offset, +						mem->bus.size); + +		/* +		 * Alpha: Use just the bus offset plus +		 * the hose/domain memory base for bus.base. +		 * It then can be used to build PTEs for VRAM +		 * access, as done in ttm_bo_vm_fault(). +		 */ +		mem->bus.base = (mem->bus.base & 0x0ffffffffUL) + +			rdev->ddev->hose->dense_mem_base; +#endif  		break;  	default:  		return -EINVAL; diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 56619f64b6bf..a4d38d85909a 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -353,8 +353,10 @@ static int ttm_bo_add_ttm(struct ttm_buffer_object *bo, bool zero_alloc)  		ret = ttm_tt_set_user(bo->ttm, current,  				      bo->buffer_start, bo->num_pages); -		if (unlikely(ret != 0)) +		if (unlikely(ret != 0)) {  			ttm_tt_destroy(bo->ttm); +			bo->ttm = NULL; +		}  		break;  	default:  		printk(KERN_ERR TTM_PFX "Illegal buffer object type\n"); @@ -390,10 +392,12 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,  	 * Create and bind a ttm if required.  	 */ -	if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED) && (bo->ttm == NULL)) { -		ret = ttm_bo_add_ttm(bo, false); -		if (ret) -			goto out_err; +	if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) { +		if (bo->ttm == NULL) { +			ret = ttm_bo_add_ttm(bo, false); +			if (ret) +				goto out_err; +		}  		ret = ttm_tt_set_placement_caching(bo->ttm, mem->placement);  		if (ret) diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c index 77dbf408c0d0..ae3c6f5dd2b7 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c @@ -635,13 +635,13 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,  		if (ret)  			return ret; -		ttm_bo_free_old_node(bo);  		if ((man->flags & TTM_MEMTYPE_FLAG_FIXED) &&  		    (bo->ttm != NULL)) {  			ttm_tt_unbind(bo->ttm);  			ttm_tt_destroy(bo->ttm);  			bo->ttm = NULL;  		} +		ttm_bo_free_old_node(bo);  	} else {  		/**  		 * This should help pipeline ordinary buffer moves. | 
