aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
diff options
context:
space:
mode:
authorKent Russell <kent.russell@amd.com>2017-08-22 12:31:43 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-08-29 15:27:54 -0400
commitdb95e2185523ee9d46a13ceee37bffe8442d2e1c (patch)
treeea7d938a8a312220162983bf1c693a76a036a20a /drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
parent96bec198352799794b0f8937620e811ef8b9fa22 (diff)
drm/amdgpu: Add debugfs file for VBIOS and version
Add 2 debugfs files, one that contains the VBIOS version, and one that contains the VBIOS itself. These won't change after initialization, so we can add the VBIOS version when we parse the atombios information. This ensures that we can find out the VBIOS version, even when the dmesg buffer fills up, and makes it easier to associate which VBIOS version is for which GPU on mGPU configurations. Set the size to 20 characters in case of some weird VBIOS version that exceeds the expected 17 character format (3-8-3\0). The VBIOS dump also allows for easy debugging v2: Move to debugfs, clarify commit message, add VBIOS dump file Signed-off-by: Kent Russell <kent.russell@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.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index e630d918fefc..da0a667a911b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -65,6 +65,8 @@ MODULE_FIRMWARE("amdgpu/raven_gpu_info.bin");
65static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev); 65static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev);
66static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev); 66static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev);
67static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev); 67static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev);
68static int amdgpu_debugfs_vbios_dump_init(struct amdgpu_device *adev);
69static int amdgpu_debugfs_vbios_version_init(struct amdgpu_device *adev);
68 70
69static const char *amdgpu_asic_name[] = { 71static const char *amdgpu_asic_name[] = {
70 "TAHITI", 72 "TAHITI",
@@ -2201,6 +2203,14 @@ int amdgpu_device_init(struct amdgpu_device *adev,
2201 if (r) 2203 if (r)
2202 DRM_ERROR("registering firmware debugfs failed (%d).\n", r); 2204 DRM_ERROR("registering firmware debugfs failed (%d).\n", r);
2203 2205
2206 r = amdgpu_debugfs_vbios_dump_init(adev);
2207 if (r)
2208 DRM_ERROR("Creating vbios dump debugfs failed (%d).\n", r);
2209
2210 r = amdgpu_debugfs_vbios_version_init(adev);
2211 if (r)
2212 DRM_ERROR("Creating vbios version debugfs failed (%d).\n", r);
2213
2204 if ((amdgpu_testing & 1)) { 2214 if ((amdgpu_testing & 1)) {
2205 if (adev->accel_working) 2215 if (adev->accel_working)
2206 amdgpu_test_moves(adev); 2216 amdgpu_test_moves(adev);
@@ -3754,6 +3764,50 @@ int amdgpu_debugfs_init(struct drm_minor *minor)
3754{ 3764{
3755 return 0; 3765 return 0;
3756} 3766}
3767
3768static int amdgpu_debugfs_get_vbios_dump(struct seq_file *m, void *data)
3769{
3770 struct drm_info_node *node = (struct drm_info_node *) m->private;
3771 struct drm_device *dev = node->minor->dev;
3772 struct amdgpu_device *adev = dev->dev_private;
3773
3774 seq_write(m, adev->bios, adev->bios_size);
3775 return 0;
3776}
3777
3778static int amdgpu_debugfs_get_vbios_version(struct seq_file *m, void *data)
3779{
3780 struct drm_info_node *node = (struct drm_info_node *) m->private;
3781 struct drm_device *dev = node->minor->dev;
3782 struct amdgpu_device *adev = dev->dev_private;
3783 struct atom_context *ctx = adev->mode_info.atom_context;
3784
3785 seq_printf(m, "%s\n", ctx->vbios_version);
3786 return 0;
3787}
3788
3789static const struct drm_info_list amdgpu_vbios_dump_list[] = {
3790 {"amdgpu_vbios",
3791 amdgpu_debugfs_get_vbios_dump,
3792 0, NULL},
3793};
3794
3795static const struct drm_info_list amdgpu_vbios_version_list[] = {
3796 {"amdgpu_vbios_version",
3797 amdgpu_debugfs_get_vbios_version,
3798 0, NULL},
3799};
3800
3801static int amdgpu_debugfs_vbios_dump_init(struct amdgpu_device *adev)
3802{
3803 return amdgpu_debugfs_add_files(adev,
3804 amdgpu_vbios_dump_list, 1);
3805}
3806static int amdgpu_debugfs_vbios_version_init(struct amdgpu_device *adev)
3807{
3808 return amdgpu_debugfs_add_files(adev,
3809 amdgpu_vbios_version_list, 1);
3810}
3757#else 3811#else
3758static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev) 3812static int amdgpu_debugfs_test_ib_ring_init(struct amdgpu_device *adev)
3759{ 3813{
@@ -3763,5 +3817,13 @@ static int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)
3763{ 3817{
3764 return 0; 3818 return 0;
3765} 3819}
3820static int amdgpu_debugfs_vbios_dump_init(struct amdgpu_device *adev)
3821{
3822 return 0;
3823}
3824static int amdgpu_debugfs_vbios_version_init(struct amdgpu_device *adev)
3825{
3826 return 0;
3827}
3766static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev) { } 3828static void amdgpu_debugfs_regs_cleanup(struct amdgpu_device *adev) { }
3767#endif 3829#endif