Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: refine ras codes for GC utc of aldebaran

The bank number of both VML2 and ATCL2 are changed to 8, so refine
related codes to avoid defining long name arrays.

Signed-off-by: Dennis Li <Dennis.Li@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Dennis Li and committed by
Alex Deucher
4abc2567 22616eb5

+97 -174
+96 -173
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_2.c
··· 40 40 ATC_L2_CACHE_4K 41 41 }; 42 42 43 - struct gfx_v9_4_2_utc_reg { 43 + struct gfx_v9_4_2_utc_block { 44 44 enum gfx_v9_4_2_utc_type type; 45 + uint32_t num_banks; 46 + uint32_t num_ways; 47 + uint32_t num_mem_blocks; 45 48 struct soc15_reg idx_reg; 46 49 struct soc15_reg data_reg; 47 50 uint32_t sec_count_mask; ··· 52 49 uint32_t ded_count_mask; 53 50 uint32_t ded_count_shift; 54 51 uint32_t clear; 55 - }; 56 - 57 - struct gfx_v9_4_2_utc_info_map { 58 - enum gfx_v9_4_2_utc_type type; 59 - const char *name; 60 - uint32_t index; 61 52 }; 62 53 63 54 static const struct soc15_reg_golden golden_settings_gc_9_4_2_alde_die_0[] = { ··· 753 756 SOC15_REG_FIELD(GCEA_EDC_CNT3, MAM_AFMEM_DED_COUNT) }, 754 757 }; 755 758 756 - static struct gfx_v9_4_2_utc_reg gfx_v9_4_2_utc_regs[] = { 757 - { VML2_MEM, 759 + static const char * const vml2_walker_mems[] = { 760 + "UTC_VML2_CACHE_PDE0_MEM0", 761 + "UTC_VML2_CACHE_PDE0_MEM1", 762 + "UTC_VML2_CACHE_PDE1_MEM0", 763 + "UTC_VML2_CACHE_PDE1_MEM1", 764 + "UTC_VML2_CACHE_PDE2_MEM0", 765 + "UTC_VML2_CACHE_PDE2_MEM1", 766 + "UTC_VML2_RDIF_ARADDRS", 767 + "UTC_VML2_RDIF_LOG_FIFO", 768 + "UTC_VML2_QUEUE_REQ", 769 + "UTC_VML2_QUEUE_RET", 770 + }; 771 + 772 + static struct gfx_v9_4_2_utc_block gfx_v9_4_2_utc_blocks[] = { 773 + { VML2_MEM, 8, 2, 2, 758 774 { SOC15_REG_ENTRY(GC, 0, regVML2_MEM_ECC_INDEX) }, 759 775 { SOC15_REG_ENTRY(GC, 0, regVML2_MEM_ECC_CNTL) }, 760 776 SOC15_REG_FIELD(VML2_MEM_ECC_CNTL, SEC_COUNT), 761 777 SOC15_REG_FIELD(VML2_MEM_ECC_CNTL, DED_COUNT), 762 778 REG_SET_FIELD(0, VML2_MEM_ECC_CNTL, WRITE_COUNTERS, 1) }, 763 - { VML2_WALKER_MEM, 779 + { VML2_WALKER_MEM, ARRAY_SIZE(vml2_walker_mems), 1, 1, 764 780 { SOC15_REG_ENTRY(GC, 0, regVML2_WALKER_MEM_ECC_INDEX) }, 765 781 { SOC15_REG_ENTRY(GC, 0, regVML2_WALKER_MEM_ECC_CNTL) }, 766 782 SOC15_REG_FIELD(VML2_WALKER_MEM_ECC_CNTL, SEC_COUNT), 767 783 SOC15_REG_FIELD(VML2_WALKER_MEM_ECC_CNTL, DED_COUNT), 768 784 REG_SET_FIELD(0, VML2_WALKER_MEM_ECC_CNTL, WRITE_COUNTERS, 1) }, 769 - { UTCL2_MEM, 785 + { UTCL2_MEM, 18, 1, 2, 770 786 { SOC15_REG_ENTRY(GC, 0, regUTCL2_MEM_ECC_INDEX) }, 771 787 { SOC15_REG_ENTRY(GC, 0, regUTCL2_MEM_ECC_CNTL) }, 772 788 SOC15_REG_FIELD(UTCL2_MEM_ECC_CNTL, SEC_COUNT), 773 789 SOC15_REG_FIELD(UTCL2_MEM_ECC_CNTL, DED_COUNT), 774 790 REG_SET_FIELD(0, UTCL2_MEM_ECC_CNTL, WRITE_COUNTERS, 1) }, 775 - { ATC_L2_CACHE_2M, 791 + { ATC_L2_CACHE_2M, 8, 2, 1, 776 792 { SOC15_REG_ENTRY(GC, 0, regATC_L2_CACHE_2M_DSM_INDEX) }, 777 793 { SOC15_REG_ENTRY(GC, 0, regATC_L2_CACHE_2M_DSM_CNTL) }, 778 794 SOC15_REG_FIELD(ATC_L2_CACHE_2M_DSM_CNTL, SEC_COUNT), 779 795 SOC15_REG_FIELD(ATC_L2_CACHE_2M_DSM_CNTL, DED_COUNT), 780 796 REG_SET_FIELD(0, ATC_L2_CACHE_2M_DSM_CNTL, WRITE_COUNTERS, 1) }, 781 - { ATC_L2_CACHE_32K, 797 + { ATC_L2_CACHE_32K, 8, 2, 2, 782 798 { SOC15_REG_ENTRY(GC, 0, regATC_L2_CACHE_32K_DSM_INDEX) }, 783 799 { SOC15_REG_ENTRY(GC, 0, regATC_L2_CACHE_32K_DSM_CNTL) }, 784 800 SOC15_REG_FIELD(ATC_L2_CACHE_32K_DSM_CNTL, SEC_COUNT), 785 801 SOC15_REG_FIELD(ATC_L2_CACHE_32K_DSM_CNTL, DED_COUNT), 786 802 REG_SET_FIELD(0, ATC_L2_CACHE_32K_DSM_CNTL, WRITE_COUNTERS, 1) }, 787 - { ATC_L2_CACHE_4K, 803 + { ATC_L2_CACHE_4K, 8, 2, 8, 788 804 { SOC15_REG_ENTRY(GC, 0, regATC_L2_CACHE_4K_DSM_INDEX) }, 789 805 { SOC15_REG_ENTRY(GC, 0, regATC_L2_CACHE_4K_DSM_CNTL) }, 790 806 SOC15_REG_FIELD(ATC_L2_CACHE_4K_DSM_CNTL, SEC_COUNT), 791 807 SOC15_REG_FIELD(ATC_L2_CACHE_4K_DSM_CNTL, DED_COUNT), 792 808 REG_SET_FIELD(0, ATC_L2_CACHE_4K_DSM_CNTL, WRITE_COUNTERS, 1) }, 793 - }; 794 - 795 - static const struct gfx_v9_4_2_utc_info_map gfx_v9_4_2_utc_map[] = { 796 - /* GPU VM */ 797 - { VML2_MEM, "UTC_VML2_BANK_CACHE_0_BIGK_MEM0", 0 }, 798 - { VML2_MEM, "UTC_VML2_BANK_CACHE_0_BIGK_MEM1", 1 }, 799 - { VML2_MEM, "UTC_VML2_BANK_CACHE_0_4K_MEM0", 2 }, 800 - { VML2_MEM, "UTC_VML2_BANK_CACHE_0_4K_MEM1", 3 }, 801 - { VML2_MEM, "UTC_VML2_BANK_CACHE_1_BIGK_MEM0", 4 }, 802 - { VML2_MEM, "UTC_VML2_BANK_CACHE_1_BIGK_MEM1", 5 }, 803 - { VML2_MEM, "UTC_VML2_BANK_CACHE_1_4K_MEM0", 6 }, 804 - { VML2_MEM, "UTC_VML2_BANK_CACHE_1_4K_MEM1", 7 }, 805 - { VML2_MEM, "UTC_VML2_BANK_CACHE_2_BIGK_MEM0", 8 }, 806 - { VML2_MEM, "UTC_VML2_BANK_CACHE_2_BIGK_MEM1", 9 }, 807 - { VML2_MEM, "UTC_VML2_BANK_CACHE_2_4K_MEM0", 10 }, 808 - { VML2_MEM, "UTC_VML2_BANK_CACHE_2_4K_MEM1", 11 }, 809 - { VML2_MEM, "UTC_VML2_BANK_CACHE_3_BIGK_MEM0", 12 }, 810 - { VML2_MEM, "UTC_VML2_BANK_CACHE_3_BIGK_MEM1", 13 }, 811 - { VML2_MEM, "UTC_VML2_BANK_CACHE_3_4K_MEM0", 14 }, 812 - { VML2_MEM, "UTC_VML2_BANK_CACHE_3_4K_MEM1", 15 }, 813 - { VML2_MEM, "UTC_VML2_BANK_CACHE_4_BIGK_MEM0", 16 }, 814 - { VML2_MEM, "UTC_VML2_BANK_CACHE_4_BIGK_MEM1", 17 }, 815 - { VML2_MEM, "UTC_VML2_BANK_CACHE_4_4K_MEM0", 18 }, 816 - { VML2_MEM, "UTC_VML2_BANK_CACHE_4_4K_MEM1", 19 }, 817 - { VML2_MEM, "UTC_VML2_BANK_CACHE_5_BIGK_MEM0", 20 }, 818 - { VML2_MEM, "UTC_VML2_BANK_CACHE_5_BIGK_MEM1", 21 }, 819 - { VML2_MEM, "UTC_VML2_BANK_CACHE_5_4K_MEM0", 22 }, 820 - { VML2_MEM, "UTC_VML2_BANK_CACHE_5_4K_MEM1", 23 }, 821 - { VML2_MEM, "UTC_VML2_BANK_CACHE_6_BIGK_MEM0", 24 }, 822 - { VML2_MEM, "UTC_VML2_BANK_CACHE_6_BIGK_MEM1", 25 }, 823 - { VML2_MEM, "UTC_VML2_BANK_CACHE_6_4K_MEM0", 26 }, 824 - { VML2_MEM, "UTC_VML2_BANK_CACHE_6_4K_MEM1", 27 }, 825 - { VML2_MEM, "UTC_VML2_BANK_CACHE_7_BIGK_MEM0", 28 }, 826 - { VML2_MEM, "UTC_VML2_BANK_CACHE_7_BIGK_MEM1", 29 }, 827 - { VML2_MEM, "UTC_VML2_BANK_CACHE_7_4K_MEM0", 30 }, 828 - { VML2_MEM, "UTC_VML2_BANK_CACHE_7_4K_MEM1", 31 }, 829 - 830 - /* WALER */ 831 - { VML2_WALKER_MEM, "UTC_VML2_CACHE_PDE0_MEM0", 0 }, 832 - { VML2_WALKER_MEM, "UTC_VML2_CACHE_PDE0_MEM1", 1 }, 833 - { VML2_WALKER_MEM, "UTC_VML2_CACHE_PDE1_MEM0", 2 }, 834 - { VML2_WALKER_MEM, "UTC_VML2_CACHE_PDE1_MEM1", 3 }, 835 - { VML2_WALKER_MEM, "UTC_VML2_CACHE_PDE2_MEM0", 4 }, 836 - { VML2_WALKER_MEM, "UTC_VML2_CACHE_PDE2_MEM1", 5 }, 837 - { VML2_WALKER_MEM, "UTC_VML2_RDIF_ARADDRS", 6 }, 838 - { VML2_WALKER_MEM, "UTC_VML2_RDIF_LOG_FIFO", 7 }, 839 - { VML2_WALKER_MEM, "UTC_VML2_QUEUE_REQ", 8 }, 840 - { VML2_WALKER_MEM, "UTC_VML2_QUEUE_RET", 9 }, 841 - 842 - /* SRAM_BLOCK_ROUTER */ 843 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP0_VMC", 0 }, 844 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP0_APT", 1 }, 845 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP1_VMC", 2 }, 846 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP1_APT", 3 }, 847 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP2_VMC", 4 }, 848 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP2_APT", 5 }, 849 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP3_VMC", 6 }, 850 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP3_APT", 7 }, 851 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP4_VMC", 8 }, 852 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP4_APT", 9 }, 853 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP5_VMC", 10 }, 854 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP5_APT", 11 }, 855 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP6_VMC", 12 }, 856 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP6_APT", 13 }, 857 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP7_VMC", 14 }, 858 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP7_APT", 15 }, 859 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP8_VMC", 16 }, 860 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP8_APT", 17 }, 861 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP9_VMC", 18 }, 862 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP9_APT", 19 }, 863 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP10_VMC", 20 }, 864 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP10_APT", 21 }, 865 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP11_VMC", 22 }, 866 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP11_APT", 23 }, 867 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP12_VMC", 24 }, 868 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP12_APT", 25 }, 869 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP13_VMC", 26 }, 870 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP13_APT", 27 }, 871 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP14_VMC", 28 }, 872 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP14_APT", 29 }, 873 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP15_VMC", 30 }, 874 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP15_APT", 31 }, 875 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP16_VMC", 32 }, 876 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP16_APT", 33 }, 877 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP17_VMC", 34 }, 878 - { UTCL2_MEM, "UTCL2_ROUTER_IFIFO_GROUP17_APT", 35 }, 879 - 880 - /* ATCL2-2m */ 881 - { ATC_L2_CACHE_2M, "UTC_ATCL2_CACHE_2M_BANK0_WAY0_MEM", 0 }, 882 - { ATC_L2_CACHE_2M, "UTC_ATCL2_CACHE_2M_BANK0_WAY1_MEM", 1 }, 883 - { ATC_L2_CACHE_2M, "UTC_ATCL2_CACHE_2M_BANK1_WAY0_MEM", 2 }, 884 - { ATC_L2_CACHE_2M, "UTC_ATCL2_CACHE_2M_BANK1_WAY1_MEM", 3 }, 885 - 886 - /* ATCL2-4k */ 887 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY0_MEM0", 0 }, 888 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY0_MEM1", 1 }, 889 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY0_MEM2", 2 }, 890 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY0_MEM3", 3 }, 891 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY0_MEM4", 4 }, 892 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY0_MEM5", 5 }, 893 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY0_MEM6", 6 }, 894 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY0_MEM7", 7 }, 895 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY1_MEM0", 8 }, 896 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY1_MEM1", 9 }, 897 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY1_MEM2", 10 }, 898 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY1_MEM3", 11 }, 899 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY1_MEM4", 12 }, 900 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY1_MEM5", 13 }, 901 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY1_MEM6", 14 }, 902 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK0_WAY1_MEM7", 15 }, 903 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY0_MEM0", 16 }, 904 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY0_MEM1", 17 }, 905 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY0_MEM2", 18 }, 906 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY0_MEM3", 19 }, 907 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY0_MEM4", 20 }, 908 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY0_MEM5", 21 }, 909 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY0_MEM6", 22 }, 910 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY0_MEM7", 23 }, 911 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY1_MEM0", 24 }, 912 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY1_MEM1", 25 }, 913 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY1_MEM2", 26 }, 914 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY1_MEM3", 27 }, 915 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY1_MEM4", 28 }, 916 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY1_MEM5", 29 }, 917 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY1_MEM6", 30 }, 918 - { ATC_L2_CACHE_4K, "UTC_ATCL2_CACHE_4K_BANK1_WAY1_MEM7", 31 }, 919 809 }; 920 810 921 811 static const struct soc15_reg_entry gfx_v9_4_2_rdrsp_status_regs = ··· 901 1017 return 0; 902 1018 } 903 1019 1020 + static void gfx_v9_4_2_log_utc_edc_count(struct amdgpu_device *adev, 1021 + struct gfx_v9_4_2_utc_block *blk, 1022 + uint32_t instance, uint32_t sec_cnt, 1023 + uint32_t ded_cnt) 1024 + { 1025 + uint32_t bank, way, mem; 1026 + static const char *vml2_way_str[] = { "BIGK", "4K" }; 1027 + static const char *utcl2_rounter_str[] = { "VMC", "APT" }; 1028 + 1029 + mem = instance % blk->num_mem_blocks; 1030 + way = (instance / blk->num_mem_blocks) % blk->num_ways; 1031 + bank = instance / (blk->num_mem_blocks * blk->num_ways); 1032 + 1033 + switch (blk->type) { 1034 + case VML2_MEM: 1035 + dev_info( 1036 + adev->dev, 1037 + "GFX SubBlock UTC_VML2_BANK_CACHE_%d_%s_MEM%d, SED %d, DED %d\n", 1038 + bank, vml2_way_str[way], mem, sec_cnt, ded_cnt); 1039 + break; 1040 + case VML2_WALKER_MEM: 1041 + dev_info(adev->dev, "GFX SubBlock %s, SED %d, DED %d\n", 1042 + vml2_walker_mems[bank], sec_cnt, ded_cnt); 1043 + break; 1044 + case UTCL2_MEM: 1045 + dev_info( 1046 + adev->dev, 1047 + "GFX SubBlock UTCL2_ROUTER_IFIF%d_GROUP0_%s, SED %d, DED %d\n", 1048 + bank, utcl2_rounter_str[mem], sec_cnt, ded_cnt); 1049 + break; 1050 + case ATC_L2_CACHE_2M: 1051 + dev_info( 1052 + adev->dev, 1053 + "GFX SubBlock UTC_ATCL2_CACHE_2M_BANK%d_WAY%d_MEM, SED %d, DED %d\n", 1054 + bank, way, sec_cnt, ded_cnt); 1055 + break; 1056 + case ATC_L2_CACHE_32K: 1057 + dev_info( 1058 + adev->dev, 1059 + "GFX SubBlock UTC_ATCL2_CACHE_32K_BANK%d_WAY%d_MEM%d, SED %d, DED %d\n", 1060 + bank, way, mem, sec_cnt, ded_cnt); 1061 + break; 1062 + case ATC_L2_CACHE_4K: 1063 + dev_info( 1064 + adev->dev, 1065 + "GFX SubBlock UTC_ATCL2_CACHE_4K_BANK%d_WAY%d_MEM%d, SED %d, DED %d\n", 1066 + bank, way, mem, sec_cnt, ded_cnt); 1067 + break; 1068 + } 1069 + } 1070 + 904 1071 static int gfx_v9_4_2_query_utc_edc_count(struct amdgpu_device *adev, 905 1072 uint32_t *sec_count, 906 1073 uint32_t *ded_count) 907 1074 { 908 1075 uint32_t i, j, data; 909 1076 uint32_t sec_cnt, ded_cnt; 1077 + uint32_t num_instances; 1078 + struct gfx_v9_4_2_utc_block *blk; 910 1079 911 1080 if (sec_count && ded_count) { 912 1081 *sec_count = 0; 913 1082 *ded_count = 0; 914 1083 } 915 1084 916 - for (i = 0; i < ARRAY_SIZE(gfx_v9_4_2_utc_regs); i++) { 917 - for (j = 0; j < ARRAY_SIZE(gfx_v9_4_2_utc_map); j++) { 918 - if (gfx_v9_4_2_utc_regs[i].type != 919 - gfx_v9_4_2_utc_map[j].type) 920 - continue; 921 - 922 - WREG32(SOC15_REG_ENTRY_OFFSET( 923 - gfx_v9_4_2_utc_regs[i].idx_reg), 924 - gfx_v9_4_2_utc_map[j].index); 1085 + for (i = 0; i < ARRAY_SIZE(gfx_v9_4_2_utc_blocks); i++) { 1086 + blk = &gfx_v9_4_2_utc_blocks[i]; 1087 + num_instances = 1088 + blk->num_banks * blk->num_ways * blk->num_mem_blocks; 1089 + for (j = 0; j < num_instances; j++) { 1090 + WREG32(SOC15_REG_ENTRY_OFFSET(blk->idx_reg), j); 925 1091 926 1092 /* if sec/ded_count is NULL, just clear counter */ 927 1093 if (!sec_count || !ded_count) { 928 - WREG32(SOC15_REG_ENTRY_OFFSET( 929 - gfx_v9_4_2_utc_regs[i].data_reg), 930 - gfx_v9_4_2_utc_regs[i].clear); 1094 + WREG32(SOC15_REG_ENTRY_OFFSET(blk->data_reg), 1095 + blk->clear); 931 1096 continue; 932 1097 } 933 1098 934 - data = RREG32(SOC15_REG_ENTRY_OFFSET( 935 - gfx_v9_4_2_utc_regs[i].data_reg)); 936 - 1099 + data = RREG32(SOC15_REG_ENTRY_OFFSET(blk->data_reg)); 937 1100 if (!data) 938 1101 continue; 939 1102 940 - sec_cnt = SOC15_RAS_REG_FIELD_VAL( 941 - data, gfx_v9_4_2_utc_regs[i], sec); 942 - if (sec_cnt) { 943 - dev_info(adev->dev, "GFX SubBlock %s, SEC %d\n", 944 - gfx_v9_4_2_utc_map[j].name, sec_cnt); 945 - *sec_count += sec_cnt; 946 - } 947 - 948 - ded_cnt = SOC15_RAS_REG_FIELD_VAL( 949 - data, gfx_v9_4_2_utc_regs[i], ded); 950 - if (ded_cnt) { 951 - dev_info(adev->dev, "GFX SubBlock %s, DED %d\n", 952 - gfx_v9_4_2_utc_map[j].name, ded_cnt); 953 - *ded_count += ded_cnt; 954 - } 1103 + sec_cnt = SOC15_RAS_REG_FIELD_VAL(data, *blk, sec); 1104 + *sec_count += sec_cnt; 1105 + ded_cnt = SOC15_RAS_REG_FIELD_VAL(data, *blk, ded); 1106 + *ded_count += ded_cnt; 955 1107 956 1108 /* clear counter after read */ 957 - WREG32(SOC15_REG_ENTRY_OFFSET( 958 - gfx_v9_4_2_utc_regs[i].data_reg), 959 - gfx_v9_4_2_utc_regs[i].clear); 1109 + WREG32(SOC15_REG_ENTRY_OFFSET(blk->data_reg), 1110 + blk->clear); 1111 + 1112 + /* print the edc count */ 1113 + gfx_v9_4_2_log_utc_edc_count(adev, blk, j, sec_cnt, 1114 + ded_cnt); 960 1115 } 961 1116 } 962 1117
+1 -1
drivers/gpu/drm/amd/amdgpu/soc15.h
··· 97 97 98 98 #define SOC15_REG_FIELD_VAL(val, mask, shift) (((val) & mask) >> shift) 99 99 100 - #define SOC15_RAS_REG_FIELD_VAL(val, entry, field) SOC15_REG_FIELD_VAL(val, entry.field##_count_mask, entry.field##_count_shift) 100 + #define SOC15_RAS_REG_FIELD_VAL(val, entry, field) SOC15_REG_FIELD_VAL((val), (entry).field##_count_mask, (entry).field##_count_shift) 101 101 102 102 void soc15_grbm_select(struct amdgpu_device *adev, 103 103 u32 me, u32 pipe, u32 queue, u32 vmid);