Subversion Repositories Kolibri OS

Rev

Rev 1990 | Rev 2005 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1990 Rev 2004
Line 195... Line 195...
195
			return;
195
			return;
196
		}
196
		}
197
	}
197
	}
198
}
198
}
Line -... Line 199...
-
 
199
 
-
 
200
void radeon_wb_disable(struct radeon_device *rdev)
-
 
201
{
-
 
202
	int r;
-
 
203
 
-
 
204
	if (rdev->wb.wb_obj) {
-
 
205
		r = radeon_bo_reserve(rdev->wb.wb_obj, false);
-
 
206
		if (unlikely(r != 0))
-
 
207
			return;
-
 
208
		radeon_bo_kunmap(rdev->wb.wb_obj);
-
 
209
		radeon_bo_unpin(rdev->wb.wb_obj);
-
 
210
		radeon_bo_unreserve(rdev->wb.wb_obj);
-
 
211
	}
-
 
212
	rdev->wb.enabled = false;
-
 
213
}
-
 
214
 
-
 
215
void radeon_wb_fini(struct radeon_device *rdev)
-
 
216
{
-
 
217
	radeon_wb_disable(rdev);
-
 
218
	if (rdev->wb.wb_obj) {
-
 
219
		radeon_bo_unref(&rdev->wb.wb_obj);
-
 
220
		rdev->wb.wb = NULL;
-
 
221
		rdev->wb.wb_obj = NULL;
-
 
222
	}
-
 
223
}
-
 
224
 
-
 
225
int radeon_wb_init(struct radeon_device *rdev)
-
 
226
{
-
 
227
	int r;
-
 
228
 
-
 
229
	if (rdev->wb.wb_obj == NULL) {
-
 
230
		r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE, PAGE_SIZE, true,
-
 
231
				RADEON_GEM_DOMAIN_GTT, &rdev->wb.wb_obj);
-
 
232
		if (r) {
-
 
233
			dev_warn(rdev->dev, "(%d) create WB bo failed\n", r);
-
 
234
			return r;
-
 
235
		}
-
 
236
	}
-
 
237
	r = radeon_bo_reserve(rdev->wb.wb_obj, false);
-
 
238
	if (unlikely(r != 0)) {
-
 
239
		radeon_wb_fini(rdev);
-
 
240
		return r;
-
 
241
	}
-
 
242
	r = radeon_bo_pin(rdev->wb.wb_obj, RADEON_GEM_DOMAIN_GTT,
-
 
243
			  &rdev->wb.gpu_addr);
-
 
244
	if (r) {
-
 
245
		radeon_bo_unreserve(rdev->wb.wb_obj);
-
 
246
		dev_warn(rdev->dev, "(%d) pin WB bo failed\n", r);
-
 
247
		radeon_wb_fini(rdev);
-
 
248
		return r;
-
 
249
	}
-
 
250
	r = radeon_bo_kmap(rdev->wb.wb_obj, (void **)&rdev->wb.wb);
-
 
251
	radeon_bo_unreserve(rdev->wb.wb_obj);
-
 
252
	if (r) {
-
 
253
		dev_warn(rdev->dev, "(%d) map WB bo failed\n", r);
-
 
254
		radeon_wb_fini(rdev);
-
 
255
		return r;
-
 
256
	}
-
 
257
 
-
 
258
	/* clear wb memory */
-
 
259
	memset((char *)rdev->wb.wb, 0, RADEON_GPU_PAGE_SIZE);
-
 
260
	/* disable event_write fences */
-
 
261
	rdev->wb.use_event = false;
-
 
262
	/* disabled via module param */
-
 
263
	if (radeon_no_wb == 1)
-
 
264
		rdev->wb.enabled = false;
-
 
265
	else {
-
 
266
		/* often unreliable on AGP */
-
 
267
//		if (rdev->flags & RADEON_IS_AGP) {
-
 
268
//			rdev->wb.enabled = false;
-
 
269
//		} else {
-
 
270
			rdev->wb.enabled = true;
-
 
271
			/* event_write fences are only available on r600+ */
-
 
272
			if (rdev->family >= CHIP_R600)
-
 
273
				rdev->wb.use_event = true;
-
 
274
//		}
-
 
275
	}
-
 
276
	/* always use writeback/events on NI */
-
 
277
	if (ASIC_IS_DCE5(rdev)) {
-
 
278
		rdev->wb.enabled = true;
-
 
279
		rdev->wb.use_event = true;
-
 
280
	}
-
 
281
 
-
 
282
	dev_info(rdev->dev, "WB %sabled\n", rdev->wb.enabled ? "en" : "dis");
-
 
283
 
-
 
284
	return 0;
-
 
285
}
199
 
286
 
200
/**
287
/**
201
 * radeon_vram_location - try to find VRAM location
288
 * radeon_vram_location - try to find VRAM location
202
 * @rdev: radeon device structure holding all necessary informations
289
 * @rdev: radeon device structure holding all necessary informations
203
 * @mc: memory controller structure holding memory informations
290
 * @mc: memory controller structure holding memory informations