Subversion Repositories Kolibri OS

Rev

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

Rev 1117 Rev 1119
Line 30... Line 30...
30
#include "radeon_drm.h"
30
#include "radeon_drm.h"
31
#include "radeon_reg.h"
31
#include "radeon_reg.h"
32
#include "radeon.h"
32
#include "radeon.h"
33
#include "atom.h"
33
#include "atom.h"
Line -... Line 34...
-
 
34
 
-
 
35
extern void * ring_buffer;
34
 
36
 
35
#if 0
37
#if 0
Line 36... Line 38...
36
int radeon_debugfs_ib_init(struct radeon_device *rdev);
38
int radeon_debugfs_ib_init(struct radeon_device *rdev);
37
 
39
 
Line 285... Line 287...
285
	return r;
287
	return r;
286
}
288
}
Line 287... Line 289...
287
 
289
 
Line 288... Line -...
288
#endif
-
 
289
 
290
#endif
290
 
291
 
291
/*
292
/*
292
 * Ring.
293
 * Ring.
293
 */
294
 */
Line 358... Line 359...
358
	uint32_t scratch;
359
	uint32_t scratch;
359
	uint32_t tmp = 0;
360
	uint32_t tmp = 0;
360
	unsigned i;
361
	unsigned i;
361
	int r;
362
	int r;
Line 362... Line 363...
362
 
363
 
Line 363... Line 364...
363
    dbgprintf("%s\n\r",__FUNCTION__);
364
    dbgprintf("%s\n",__FUNCTION__);
364
 
365
 
365
	r = radeon_scratch_get(rdev, &scratch);
366
	r = radeon_scratch_get(rdev, &scratch);
366
	if (r) {
367
	if (r) {
Line 375... Line 376...
375
		return r;
376
		return r;
376
	}
377
	}
377
	radeon_ring_write(rdev, PACKET0(scratch, 0));
378
	radeon_ring_write(rdev, PACKET0(scratch, 0));
378
	radeon_ring_write(rdev, 0xDEADBEEF);
379
	radeon_ring_write(rdev, 0xDEADBEEF);
379
	radeon_ring_unlock_commit(rdev);
380
	radeon_ring_unlock_commit(rdev);
380
	for (i = 0; i < rdev->usec_timeout; i++) {
381
    for (i = 0; i < 100000; i++) {
381
		tmp = RREG32(scratch);
382
		tmp = RREG32(scratch);
382
		if (tmp == 0xDEADBEEF) {
383
		if (tmp == 0xDEADBEEF) {
383
			break;
384
			break;
384
		}
385
		}
385
		DRM_UDELAY(1);
386
        DRM_UDELAY(1);
386
	}
387
	}
387
	if (i < rdev->usec_timeout) {
388
    if (i < 100000) {
388
		DRM_INFO("ring test succeeded in %d usecs\n", i);
389
		DRM_INFO("ring test succeeded in %d usecs\n", i);
389
	} else {
390
	} else {
390
		DRM_ERROR("radeon: ring test failed (sracth(0x%04X)=0x%08X)\n",
391
		DRM_ERROR("radeon: ring test failed (sracth(0x%04X)=0x%08X)\n",
391
			  scratch, tmp);
392
			  scratch, tmp);
392
		r = -EINVAL;
393
		r = -EINVAL;
393
	}
394
	}
394
	radeon_scratch_free(rdev, scratch);
395
	radeon_scratch_free(rdev, scratch);
-
 
396
 
-
 
397
    dbgprintf("done %s\n",__FUNCTION__);
395
	return r;
398
	return r;
396
}
399
}
Line -... Line 400...
-
 
400
 
-
 
401
 
-
 
402
int radeon_gart_bind(struct radeon_device *rdev, unsigned offset,
-
 
403
             int pages, u32_t *pagelist);
-
 
404
 
-
 
405
#define page_tabs  0xFDC00000
397
 
406
 
398
 
407
 
399
int radeon_ring_init(struct radeon_device *rdev, unsigned ring_size)
408
int radeon_ring_init(struct radeon_device *rdev, unsigned ring_size)
Line 400... Line 409...
400
{
409
{
Line 401... Line 410...
401
	int r;
410
	int r;
Line 402... Line 411...
402
 
411
 
403
    dbgprintf("%s\n\r",__FUNCTION__);
412
    dbgprintf("%s\n",__FUNCTION__);
Line 433... Line 442...
433
			return r;
442
			return r;
434
		}
443
		}
435
	}
444
	}
436
#endif
445
#endif
Line -... Line 446...
-
 
446
 
-
 
447
    dbgprintf("ring size %x\n", ring_size);
-
 
448
 
-
 
449
    dbgprintf("ring buffer %x\n", rdev->cp.ring );
437
 
450
 
-
 
451
    rdev->cp.ring  = ring_buffer; //CreateRingBuffer( ring_size, PG_SW );
-
 
452
 
-
 
453
    dbgprintf("ring buffer %x\n", rdev->cp.ring );
438
    rdev->cp.ring     = CreateRingBuffer( ring_size, PG_SW);
454
 
-
 
455
    rdev->cp.gpu_addr = rdev->mc.gtt_location;
-
 
456
 
-
 
457
    u32_t *pagelist =  &((u32_t*)page_tabs)[(u32_t)rdev->cp.ring >> 12];
-
 
458
 
-
 
459
    dbgprintf("pagelist %x\n", pagelist);
-
 
460
 
-
 
461
    radeon_gart_bind(rdev, 0, ring_size / 4096, pagelist);
439
    rdev->cp.gpu_addr = GetPgAddr(rdev->cp.ring);
462
 
440
	rdev->cp.ptr_mask = (rdev->cp.ring_size / 4) - 1;
463
	rdev->cp.ptr_mask = (rdev->cp.ring_size / 4) - 1;
-
 
464
	rdev->cp.ring_free_dw = rdev->cp.ring_size / 4;
-
 
465
 
-
 
466
    dbgprintf("done %s\n",__FUNCTION__);
441
	rdev->cp.ring_free_dw = rdev->cp.ring_size / 4;
467
 
442
	return 0;
468
	return 0;
Line 443... Line 469...
443
}
469
}
444
 
470