aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_ring.c
diff options
context:
space:
mode:
authorChristian König <deathsimple@vodafone.de>2011-10-24 11:08:44 -0400
committerDave Airlie <airlied@redhat.com>2011-12-20 14:51:04 -0500
commitaf9720f4907e0a4a4341a015efe08026b3d3eb2e (patch)
tree35cc66ea58389e26c2a4ef198b2d23d43fe042f3 /drivers/gpu/drm/radeon/radeon_ring.c
parente32eb50dbe43862606a51caa94368ec6bd019434 (diff)
drm/radeon: move ring debugfs into radeon_ring.c
Those debugfs files aren't r600 specific, so they shouldn't be in r600.c. Move them to radeon_ring.c and also add functionality to dump CP1 & CP2 ring informations. Signed-off-by: Christian König <deathsimple@vodafone.de> Reviewed-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_ring.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_ring.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
index 52dd22f2596e..b39a1d9306e5 100644
--- a/drivers/gpu/drm/radeon/radeon_ring.c
+++ b/drivers/gpu/drm/radeon/radeon_ring.c
@@ -34,6 +34,7 @@
34#include "atom.h" 34#include "atom.h"
35 35
36int radeon_debugfs_ib_init(struct radeon_device *rdev); 36int radeon_debugfs_ib_init(struct radeon_device *rdev);
37int radeon_debugfs_ring_init(struct radeon_device *rdev);
37 38
38u32 radeon_get_ib_value(struct radeon_cs_parser *p, int idx) 39u32 radeon_get_ib_value(struct radeon_cs_parser *p, int idx)
39{ 40{
@@ -252,6 +253,9 @@ int radeon_ib_pool_init(struct radeon_device *rdev)
252 if (radeon_debugfs_ib_init(rdev)) { 253 if (radeon_debugfs_ib_init(rdev)) {
253 DRM_ERROR("Failed to register debugfs file for IB !\n"); 254 DRM_ERROR("Failed to register debugfs file for IB !\n");
254 } 255 }
256 if (radeon_debugfs_ring_init(rdev)) {
257 DRM_ERROR("Failed to register debugfs file for rings !\n");
258 }
255 return r; 259 return r;
256} 260}
257 261
@@ -444,6 +448,42 @@ void radeon_ring_fini(struct radeon_device *rdev, struct radeon_ring *ring)
444 * Debugfs info 448 * Debugfs info
445 */ 449 */
446#if defined(CONFIG_DEBUG_FS) 450#if defined(CONFIG_DEBUG_FS)
451
452static int radeon_debugfs_ring_info(struct seq_file *m, void *data)
453{
454 struct drm_info_node *node = (struct drm_info_node *) m->private;
455 struct drm_device *dev = node->minor->dev;
456 struct radeon_device *rdev = dev->dev_private;
457 int ridx = *(int*)node->info_ent->data;
458 struct radeon_ring *ring = &rdev->ring[ridx];
459 unsigned count, i, j;
460
461 radeon_ring_free_size(rdev, ring);
462 count = (ring->ring_size / 4) - ring->ring_free_dw;
463 seq_printf(m, "wptr(0x%04x): 0x%08x\n", ring->wptr_reg, RREG32(ring->wptr_reg));
464 seq_printf(m, "rptr(0x%04x): 0x%08x\n", ring->rptr_reg, RREG32(ring->rptr_reg));
465 seq_printf(m, "driver's copy of the wptr: 0x%08x\n", ring->wptr);
466 seq_printf(m, "driver's copy of the rptr: 0x%08x\n", ring->rptr);
467 seq_printf(m, "%u free dwords in ring\n", ring->ring_free_dw);
468 seq_printf(m, "%u dwords in ring\n", count);
469 i = ring->rptr;
470 for (j = 0; j <= count; j++) {
471 seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]);
472 i = (i + 1) & ring->ptr_mask;
473 }
474 return 0;
475}
476
477static int radeon_ring_type_gfx_index = RADEON_RING_TYPE_GFX_INDEX;
478static int cayman_ring_type_cp1_index = CAYMAN_RING_TYPE_CP1_INDEX;
479static int cayman_ring_type_cp2_index = CAYMAN_RING_TYPE_CP2_INDEX;
480
481static struct drm_info_list radeon_debugfs_ring_info_list[] = {
482 {"radeon_ring_gfx", radeon_debugfs_ring_info, 0, &radeon_ring_type_gfx_index},
483 {"radeon_ring_cp1", radeon_debugfs_ring_info, 0, &cayman_ring_type_cp1_index},
484 {"radeon_ring_cp2", radeon_debugfs_ring_info, 0, &cayman_ring_type_cp2_index},
485};
486
447static int radeon_debugfs_ib_info(struct seq_file *m, void *data) 487static int radeon_debugfs_ib_info(struct seq_file *m, void *data)
448{ 488{
449 struct drm_info_node *node = (struct drm_info_node *) m->private; 489 struct drm_info_node *node = (struct drm_info_node *) m->private;
@@ -495,6 +535,16 @@ static struct drm_info_list radeon_debugfs_ib_bogus_info_list[] = {
495}; 535};
496#endif 536#endif
497 537
538int radeon_debugfs_ring_init(struct radeon_device *rdev)
539{
540#if defined(CONFIG_DEBUG_FS)
541 return radeon_debugfs_add_files(rdev, radeon_debugfs_ring_info_list,
542 ARRAY_SIZE(radeon_debugfs_ring_info_list));
543#else
544 return 0;
545#endif
546}
547
498int radeon_debugfs_ib_init(struct radeon_device *rdev) 548int radeon_debugfs_ib_init(struct radeon_device *rdev)
499{ 549{
500#if defined(CONFIG_DEBUG_FS) 550#if defined(CONFIG_DEBUG_FS)