diff options
author | Huang Rui <ray.huang@amd.com> | 2016-06-12 03:51:09 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-07-07 14:51:33 -0400 |
commit | 50ab2533d2e280b2e8c0e8ce00f616e3b50692a2 (patch) | |
tree | 52c91bd4bf9efc973a91ef19538ed1265af7ba3b /drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | |
parent | 000cab9a61ea9e8dc42144e39a6eb8333a402b86 (diff) |
drm/amdgpu: introduce a firmware debugfs to dump all current firmware versions
This patch implements the debugfs to dump all currect firmware
version:
root@jenkins-All-Series:/home/jenkins# cat /sys/kernel/debug/dri/0/amdgpu_firmware_info
VCE feature version: 0, firmware version: 0x34040300
UVD feature version: 0, firmware version: 0x01451000
MC feature version: 0, firmware version: 0x00000000
ME feature version: 37, firmware version: 0x00000093
PFP feature version: 37, firmware version: 0x000000da
CE feature version: 37, firmware version: 0x00000080
RLC feature version: 1, firmware version: 0x0000010e
MEC feature version: 37, firmware version: 0x0000029e
MEC2 feature version: 37, firmware version: 0x0000029e
SMC feature version: 0, firmware version: 0x013353e6
SDMA0 feature version: 31, firmware version: 0x00000036
SDMA1 feature version: 0, firmware version: 0x00000036
Suggested-by: Alex Deucher <Alexander.Deucher@amd.com>
Signed-off-by: Huang Rui <ray.huang@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_kms.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index 56c857f6e7ca..f6c89fa63ea7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | |||
@@ -768,3 +768,130 @@ const struct drm_ioctl_desc amdgpu_ioctls_kms[] = { | |||
768 | DRM_IOCTL_DEF_DRV(AMDGPU_GEM_USERPTR, amdgpu_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), | 768 | DRM_IOCTL_DEF_DRV(AMDGPU_GEM_USERPTR, amdgpu_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), |
769 | }; | 769 | }; |
770 | const int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms); | 770 | const int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms); |
771 | |||
772 | /* | ||
773 | * Debugfs info | ||
774 | */ | ||
775 | #if defined(CONFIG_DEBUG_FS) | ||
776 | |||
777 | static int amdgpu_debugfs_firmware_info(struct seq_file *m, void *data) | ||
778 | { | ||
779 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
780 | struct drm_device *dev = node->minor->dev; | ||
781 | struct amdgpu_device *adev = dev->dev_private; | ||
782 | struct drm_amdgpu_info_firmware fw_info; | ||
783 | struct drm_amdgpu_query_fw query_fw; | ||
784 | int ret, i; | ||
785 | |||
786 | /* VCE */ | ||
787 | query_fw.fw_type = AMDGPU_INFO_FW_VCE; | ||
788 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
789 | if (ret) | ||
790 | return ret; | ||
791 | seq_printf(m, "VCE feature version: %u, firmware version: 0x%08x\n", | ||
792 | fw_info.feature, fw_info.ver); | ||
793 | |||
794 | /* UVD */ | ||
795 | query_fw.fw_type = AMDGPU_INFO_FW_UVD; | ||
796 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
797 | if (ret) | ||
798 | return ret; | ||
799 | seq_printf(m, "UVD feature version: %u, firmware version: 0x%08x\n", | ||
800 | fw_info.feature, fw_info.ver); | ||
801 | |||
802 | /* GMC */ | ||
803 | query_fw.fw_type = AMDGPU_INFO_FW_GMC; | ||
804 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
805 | if (ret) | ||
806 | return ret; | ||
807 | seq_printf(m, "MC feature version: %u, firmware version: 0x%08x\n", | ||
808 | fw_info.feature, fw_info.ver); | ||
809 | |||
810 | /* ME */ | ||
811 | query_fw.fw_type = AMDGPU_INFO_FW_GFX_ME; | ||
812 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
813 | if (ret) | ||
814 | return ret; | ||
815 | seq_printf(m, "ME feature version: %u, firmware version: 0x%08x\n", | ||
816 | fw_info.feature, fw_info.ver); | ||
817 | |||
818 | /* PFP */ | ||
819 | query_fw.fw_type = AMDGPU_INFO_FW_GFX_PFP; | ||
820 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
821 | if (ret) | ||
822 | return ret; | ||
823 | seq_printf(m, "PFP feature version: %u, firmware version: 0x%08x\n", | ||
824 | fw_info.feature, fw_info.ver); | ||
825 | |||
826 | /* CE */ | ||
827 | query_fw.fw_type = AMDGPU_INFO_FW_GFX_CE; | ||
828 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
829 | if (ret) | ||
830 | return ret; | ||
831 | seq_printf(m, "CE feature version: %u, firmware version: 0x%08x\n", | ||
832 | fw_info.feature, fw_info.ver); | ||
833 | |||
834 | /* RLC */ | ||
835 | query_fw.fw_type = AMDGPU_INFO_FW_GFX_RLC; | ||
836 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
837 | if (ret) | ||
838 | return ret; | ||
839 | seq_printf(m, "RLC feature version: %u, firmware version: 0x%08x\n", | ||
840 | fw_info.feature, fw_info.ver); | ||
841 | |||
842 | /* MEC */ | ||
843 | query_fw.fw_type = AMDGPU_INFO_FW_GFX_MEC; | ||
844 | query_fw.index = 0; | ||
845 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
846 | if (ret) | ||
847 | return ret; | ||
848 | seq_printf(m, "MEC feature version: %u, firmware version: 0x%08x\n", | ||
849 | fw_info.feature, fw_info.ver); | ||
850 | |||
851 | /* MEC2 */ | ||
852 | if (adev->asic_type == CHIP_KAVERI || | ||
853 | (adev->asic_type > CHIP_TOPAZ && adev->asic_type != CHIP_STONEY)) { | ||
854 | query_fw.index = 1; | ||
855 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
856 | if (ret) | ||
857 | return ret; | ||
858 | seq_printf(m, "MEC2 feature version: %u, firmware version: 0x%08x\n", | ||
859 | fw_info.feature, fw_info.ver); | ||
860 | } | ||
861 | |||
862 | /* SMC */ | ||
863 | query_fw.fw_type = AMDGPU_INFO_FW_SMC; | ||
864 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
865 | if (ret) | ||
866 | return ret; | ||
867 | seq_printf(m, "SMC feature version: %u, firmware version: 0x%08x\n", | ||
868 | fw_info.feature, fw_info.ver); | ||
869 | |||
870 | /* SDMA */ | ||
871 | query_fw.fw_type = AMDGPU_INFO_FW_SDMA; | ||
872 | for (i = 0; i < adev->sdma.num_instances; i++) { | ||
873 | query_fw.index = i; | ||
874 | ret = amdgpu_firmware_info(&fw_info, &query_fw, adev); | ||
875 | if (ret) | ||
876 | return ret; | ||
877 | seq_printf(m, "SDMA%d feature version: %u, firmware version: 0x%08x\n", | ||
878 | i, fw_info.feature, fw_info.ver); | ||
879 | } | ||
880 | |||
881 | return 0; | ||
882 | } | ||
883 | |||
884 | static const struct drm_info_list amdgpu_firmware_info_list[] = { | ||
885 | {"amdgpu_firmware_info", amdgpu_debugfs_firmware_info, 0, NULL}, | ||
886 | }; | ||
887 | #endif | ||
888 | |||
889 | int amdgpu_debugfs_firmware_init(struct amdgpu_device *adev) | ||
890 | { | ||
891 | #if defined(CONFIG_DEBUG_FS) | ||
892 | return amdgpu_debugfs_add_files(adev, amdgpu_firmware_info_list, | ||
893 | ARRAY_SIZE(amdgpu_firmware_info_list)); | ||
894 | #else | ||
895 | return 0; | ||
896 | #endif | ||
897 | } | ||