diff options
author | Huang Rui <ray.huang@amd.com> | 2017-05-10 11:04:06 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-06-15 11:50:25 -0400 |
commit | 4f0955fcc052b556446f6f041ad8c83d70c3b253 (patch) | |
tree | 090ba1f35e4080b58d899cebf5ccd3373fe9ab2a /drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |
parent | 17d176a5ccb9a834a77310dcf9e654cf30b395a8 (diff) |
drm/amdgpu: export test ib debugfs interface
As Christian and David's suggestion, submit the test ib ring debug interfaces.
It's useful for debugging with the command submission without VM case.
Signed-off-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 5d6175ede20b..f5c4e2e5c4ad 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |||
@@ -61,6 +61,7 @@ MODULE_FIRMWARE("amdgpu/raven_gpu_info.bin"); | |||
61 | 61 | ||
62 | static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev); | 62 | static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev); |
63 | static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev); | 63 | static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev); |
64 | static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev); | ||
64 | 65 | ||
65 | static const char *amdgpu_asic_name[] = { | 66 | static const char *amdgpu_asic_name[] = { |
66 | "TAHITI", | 67 | "TAHITI", |
@@ -2227,6 +2228,10 @@ int amdgpu_device_init(struct amdgpu_device *adev, | |||
2227 | if (r) | 2228 | if (r) |
2228 | DRM_ERROR("registering register debugfs failed (%d).\n", r); | 2229 | DRM_ERROR("registering register debugfs failed (%d).\n", r); |
2229 | 2230 | ||
2231 | r = amdgpu_debugfs_test_ib_ring_init(adev); | ||
2232 | if (r) | ||
2233 | DRM_ERROR("registering register test ib ring debugfs failed (%d).\n", r); | ||
2234 | |||
2230 | r = amdgpu_debugfs_firmware_init(adev); | 2235 | r = amdgpu_debugfs_firmware_init(adev); |
2231 | if (r) | 2236 | if (r) |
2232 | DRM_ERROR("registering firmware debugfs failed (%d).\n", r); | 2237 | DRM_ERROR("registering firmware debugfs failed (%d).\n", r); |
@@ -3743,11 +3748,60 @@ static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev) | |||
3743 | } | 3748 | } |
3744 | } | 3749 | } |
3745 | 3750 | ||
3751 | static int amdgpu_debugfs_test_ib(struct seq_file *m, void *data) | ||
3752 | { | ||
3753 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
3754 | struct drm_device *dev = node->minor->dev; | ||
3755 | struct amdgpu_device *adev = dev->dev_private; | ||
3756 | int r = 0, i; | ||
3757 | |||
3758 | /* hold on the scheduler */ | ||
3759 | for (i = 0; i < AMDGPU_MAX_RINGS; i++) { | ||
3760 | struct amdgpu_ring *ring = adev->rings[i]; | ||
3761 | |||
3762 | if (!ring || !ring->sched.thread) | ||
3763 | continue; | ||
3764 | kthread_park(ring->sched.thread); | ||
3765 | } | ||
3766 | |||
3767 | seq_printf(m, "run ib test:\n"); | ||
3768 | r = amdgpu_ib_ring_tests(adev); | ||
3769 | if (r) | ||
3770 | seq_printf(m, "ib ring tests failed (%d).\n", r); | ||
3771 | else | ||
3772 | seq_printf(m, "ib ring tests passed.\n"); | ||
3773 | |||
3774 | /* go on the scheduler */ | ||
3775 | for (i = 0; i < AMDGPU_MAX_RINGS; i++) { | ||
3776 | struct amdgpu_ring *ring = adev->rings[i]; | ||
3777 | |||
3778 | if (!ring || !ring->sched.thread) | ||
3779 | continue; | ||
3780 | kthread_unpark(ring->sched.thread); | ||
3781 | } | ||
3782 | |||
3783 | return 0; | ||
3784 | } | ||
3785 | |||
3786 | static const struct drm_info_list amdgpu_debugfs_test_ib_ring_list[] = { | ||
3787 | {"amdgpu_test_ib", &amdgpu_debugfs_test_ib} | ||
3788 | }; | ||
3789 | |||
3790 | static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev) | ||
3791 | { | ||
3792 | return amdgpu_debugfs_add_files(adev, | ||
3793 | amdgpu_debugfs_test_ib_ring_list, 1); | ||
3794 | } | ||
3795 | |||
3746 | int amdgpu_debugfs_init(struct drm_minor *minor) | 3796 | int amdgpu_debugfs_init(struct drm_minor *minor) |
3747 | { | 3797 | { |
3748 | return 0; | 3798 | return 0; |
3749 | } | 3799 | } |
3750 | #else | 3800 | #else |
3801 | static int amdgpu_debugfs_test_ib_init(struct amdgpu_device *adev) | ||
3802 | { | ||
3803 | return 0; | ||
3804 | } | ||
3751 | static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev) | 3805 | static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev) |
3752 | { | 3806 | { |
3753 | return 0; | 3807 | return 0; |