Subversion Repositories Kolibri OS

Rev

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

Rev 1321 Rev 1404
Line 138... Line 138...
138
}
138
}
Line 139... Line 139...
139
 
139
 
140
 
140
 
141
bool radeon_fence_signaled(struct radeon_fence *fence)
-
 
142
{
141
bool radeon_fence_signaled(struct radeon_fence *fence)
143
	struct radeon_device *rdev = fence->rdev;
142
{
Line 144... Line 143...
144
	unsigned long irq_flags;
143
	unsigned long irq_flags;
145
	bool signaled = false;
144
	bool signaled = false;
146
 
145
 
147
	if (rdev->gpu_lockup) {
146
	if (!fence)
148
		return true;
147
		return true;
149
	}
148
 
150
	if (fence == NULL) {
149
	if (fence->rdev->gpu_lockup)
151
		return true;
150
		return true;
152
	}
151
 
153
	write_lock_irqsave(&fence->rdev->fence_drv.lock, irq_flags);
152
	write_lock_irqsave(&fence->rdev->fence_drv.lock, irq_flags);
154
	signaled = fence->signaled;
153
	signaled = fence->signaled;
Line 322... Line 321...
322
	int r;
321
	int r;
Line 323... Line 322...
323
 
322
 
324
	write_lock_irqsave(&rdev->fence_drv.lock, irq_flags);
323
	write_lock_irqsave(&rdev->fence_drv.lock, irq_flags);
325
	r = radeon_scratch_get(rdev, &rdev->fence_drv.scratch_reg);
324
	r = radeon_scratch_get(rdev, &rdev->fence_drv.scratch_reg);
326
	if (r) {
325
	if (r) {
327
		DRM_ERROR("Fence failed to get a scratch register.");
326
		dev_err(rdev->dev, "fence failed to get scratch register\n");
328
		write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags);
327
		write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags);
329
		return r;
328
		return r;
330
	}
329
	}
331
	WREG32(rdev->fence_drv.scratch_reg, 0);
330
	WREG32(rdev->fence_drv.scratch_reg, 0);
332
	atomic_set(&rdev->fence_drv.seq, 0);
331
	atomic_set(&rdev->fence_drv.seq, 0);
333
	INIT_LIST_HEAD(&rdev->fence_drv.created);
332
	INIT_LIST_HEAD(&rdev->fence_drv.created);
334
	INIT_LIST_HEAD(&rdev->fence_drv.emited);
333
	INIT_LIST_HEAD(&rdev->fence_drv.emited);
335
	INIT_LIST_HEAD(&rdev->fence_drv.signaled);
334
	INIT_LIST_HEAD(&rdev->fence_drv.signaled);
336
	rdev->fence_drv.count_timeout = 0;
335
	rdev->fence_drv.count_timeout = 0;
-
 
336
	init_waitqueue_head(&rdev->fence_drv.queue);
337
	init_waitqueue_head(&rdev->fence_drv.queue);
337
	rdev->fence_drv.initialized = true;
338
	write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags);
338
	write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags);
339
	if (radeon_debugfs_fence_init(rdev)) {
339
	if (radeon_debugfs_fence_init(rdev)) {
340
		DRM_ERROR("Failed to register debugfs file for fence !\n");
340
		dev_err(rdev->dev, "fence debugfs file creation failed\n");
341
	}
341
	}
342
	return 0;
342
	return 0;
Line 343... Line 343...
343
}
343
}
344
 
344
 
345
void radeon_fence_driver_fini(struct radeon_device *rdev)
345
void radeon_fence_driver_fini(struct radeon_device *rdev)
Line -... Line 346...
-
 
346
{
-
 
347
	unsigned long irq_flags;
346
{
348
 
347
	unsigned long irq_flags;
349
	if (!rdev->fence_drv.initialized)
348
 
350
		return;
349
	wake_up_all(&rdev->fence_drv.queue);
351
	wake_up_all(&rdev->fence_drv.queue);
350
	write_lock_irqsave(&rdev->fence_drv.lock, irq_flags);
352
	write_lock_irqsave(&rdev->fence_drv.lock, irq_flags);
351
	radeon_scratch_free(rdev, rdev->fence_drv.scratch_reg);
353
	radeon_scratch_free(rdev, rdev->fence_drv.scratch_reg);
Line 352... Line 354...
352
	write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags);
354
	write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags);
353
	DRM_INFO("radeon: fence finalized\n");
355
	rdev->fence_drv.initialized = false;