• Home
  • Raw
  • Download

Lines Matching full:info

125 	/** video memory type info*/
279 *info) in amdgpu_query_buffer_size_alignment()
291 struct drm_amdgpu_info_hw_ip *info) in amdgpu_query_hw_ip_info() argument
296 uint32_t flags, struct amdgpu_heap_info *info) in amdgpu_query_heap_info() argument
301 struct amdgpu_gpu_info *info) in amdgpu_query_gpu_info() argument
310 static int amdgpu_query_sw_info(amdgpu_device_handle dev, enum amdgpu_sw_info info, in amdgpu_query_sw_info() argument
367 has_tmz_support(amdgpu_device_handle dev, struct radeon_info *info, uint32_t ids_flags) in has_tmz_support() argument
377 if (info->drm_minor >= 40) in has_tmz_support()
381 if (info->gfx_level < GFX9) in has_tmz_support()
384 if (info->drm_minor < 36) in has_tmz_support()
398 static void set_custom_cu_en_mask(struct radeon_info *info) in set_custom_cu_en_mask() argument
400 info->spi_cu_en = ~0; in set_custom_cu_en_mask()
499 spi_cu_en &= BITFIELD_MASK(info->max_good_cu_per_sa); in set_custom_cu_en_mask()
506 if (info->has_graphics) { in set_custom_cu_en_mask()
507 uint32_t min_full_cu_mask = BITFIELD_MASK(info->min_good_cu_per_sa); in set_custom_cu_en_mask()
520 ac_compute_late_alloc(info, false, false, false, &unused, &cu_mask_ge); in set_custom_cu_en_mask()
538 info->spi_cu_en = spi_cu_en; in set_custom_cu_en_mask()
539 info->spi_cu_en_has_effect = spi_cu_en & BITFIELD_MASK(info->max_good_cu_per_sa); in set_custom_cu_en_mask()
544 static bool ac_query_pci_bus_info(int fd, struct radeon_info *info) in ac_query_pci_bus_info() argument
548 /* Get PCI info. */ in ac_query_pci_bus_info()
552 info->pci.valid = false; in ac_query_pci_bus_info()
555 info->pci.domain = devinfo->businfo.pci->domain; in ac_query_pci_bus_info()
556 info->pci.bus = devinfo->businfo.pci->bus; in ac_query_pci_bus_info()
557 info->pci.dev = devinfo->businfo.pci->dev; in ac_query_pci_bus_info()
558 info->pci.func = devinfo->businfo.pci->func; in ac_query_pci_bus_info()
559 info->pci.valid = true; in ac_query_pci_bus_info()
565 static void handle_env_var_force_family(struct radeon_info *info) in handle_env_var_force_family() argument
575 info->family = i; in handle_env_var_force_family()
576 info->name = "NOOP"; in handle_env_var_force_family()
577 info->gfx_level = ac_get_gfx_level(i); in handle_env_var_force_family()
578 info->family_id = ac_get_family_id(i); in handle_env_var_force_family()
579 info->family_overridden = true; in handle_env_var_force_family()
588 bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info, in ac_query_gpu_info() argument
609 handle_env_var_force_family(info); in ac_query_gpu_info()
611 if (!ac_query_pci_bus_info(fd, info)) { in ac_query_gpu_info()
616 assert(info->drm_major == 3); in ac_query_gpu_info()
617 info->is_amdgpu = true; in ac_query_gpu_info()
619 if (info->drm_minor < 27) { in ac_query_gpu_info()
622 info->drm_major, info->drm_minor, info->drm_patchlevel); in ac_query_gpu_info()
660 if (info->drm_minor >= 48 && ip_info.ip_discovery_version) { in ac_query_gpu_info()
661 info->ip[ip_type].ver_major = (ip_info.ip_discovery_version >> 16) & 0xff; in ac_query_gpu_info()
662 info->ip[ip_type].ver_minor = (ip_info.ip_discovery_version >> 8) & 0xff; in ac_query_gpu_info()
663 info->ip[ip_type].ver_rev = ip_info.ip_discovery_version & 0xff; in ac_query_gpu_info()
665 info->ip[ip_type].ver_major = ip_info.hw_ip_version_major; in ac_query_gpu_info()
666 info->ip[ip_type].ver_minor = ip_info.hw_ip_version_minor; in ac_query_gpu_info()
673 info->ip[AMD_IP_GFX].ver_minor = info->ip[AMD_IP_COMPUTE].ver_minor = 1; in ac_query_gpu_info()
679 info->ip[AMD_IP_GFX].ver_minor = info->ip[AMD_IP_COMPUTE].ver_minor = 3; in ac_query_gpu_info()
681 info->ip[ip_type].num_queues = util_bitcount(ip_info.available_rings); in ac_query_gpu_info()
688 info->ip[ip_type].ib_alignment = MAX3(ip_info.ib_start_alignment, in ac_query_gpu_info()
693 info->ip[AMD_IP_GFX].ib_pad_dw_mask = 0x7; in ac_query_gpu_info()
694 info->ip[AMD_IP_COMPUTE].ib_pad_dw_mask = 0x7; in ac_query_gpu_info()
695 info->ip[AMD_IP_SDMA].ib_pad_dw_mask = 0xf; in ac_query_gpu_info()
696 info->ip[AMD_IP_UVD].ib_pad_dw_mask = 0xf; in ac_query_gpu_info()
697 info->ip[AMD_IP_VCE].ib_pad_dw_mask = 0x3f; in ac_query_gpu_info()
698 info->ip[AMD_IP_UVD_ENC].ib_pad_dw_mask = 0x3f; in ac_query_gpu_info()
699 info->ip[AMD_IP_VCN_DEC].ib_pad_dw_mask = 0xf; in ac_query_gpu_info()
700 info->ip[AMD_IP_VCN_ENC].ib_pad_dw_mask = 0x3f; in ac_query_gpu_info()
701 info->ip[AMD_IP_VCN_JPEG].ib_pad_dw_mask = 0xf; in ac_query_gpu_info()
702 info->ip[AMD_IP_VPE].ib_pad_dw_mask = 0xf; in ac_query_gpu_info()
705 if (!info->ip[AMD_IP_GFX].num_queues && !info->ip[AMD_IP_COMPUTE].num_queues) { in ac_query_gpu_info()
710 r = amdgpu_query_firmware_version(dev, AMDGPU_INFO_FW_GFX_ME, 0, 0, &info->me_fw_version, in ac_query_gpu_info()
711 &info->me_fw_feature); in ac_query_gpu_info()
717 r = amdgpu_query_firmware_version(dev, AMDGPU_INFO_FW_GFX_MEC, 0, 0, &info->mec_fw_version, in ac_query_gpu_info()
718 &info->mec_fw_feature); in ac_query_gpu_info()
724 r = amdgpu_query_firmware_version(dev, AMDGPU_INFO_FW_GFX_PFP, 0, 0, &info->pfp_fw_version, in ac_query_gpu_info()
725 &info->pfp_fw_feature); in ac_query_gpu_info()
743 r = amdgpu_query_sw_info(dev, amdgpu_sw_info_address32_hi, &info->address32_hi); in ac_query_gpu_info()
758 info->gart_size_kb = DIV_ROUND_UP(meminfo.gtt.total_heap_size, 1024); in ac_query_gpu_info()
759 info->vram_size_kb = DIV_ROUND_UP(fix_vram_size(meminfo.vram.total_heap_size), 1024); in ac_query_gpu_info()
760 info->vram_vis_size_kb = DIV_ROUND_UP(meminfo.cpu_accessible_vram.total_heap_size, 1024); in ac_query_gpu_info()
762 if (info->drm_minor >= 41) { in ac_query_gpu_info()
764 sizeof(info->dec_caps), &(info->dec_caps)); in ac_query_gpu_info()
766 sizeof(info->enc_caps), &(info->enc_caps)); in ac_query_gpu_info()
770 info->all_vram_visible = info->vram_size_kb * 0.9 < info->vram_vis_size_kb; in ac_query_gpu_info()
773 info->pci_id = device_info.device_id; in ac_query_gpu_info()
774 info->pci_rev_id = device_info.pci_rev; in ac_query_gpu_info()
775 info->vce_harvest_config = device_info.vce_harvest_config; in ac_query_gpu_info()
779 info->family = CHIP_##chipname; \ in ac_query_gpu_info()
780 info->name = #chipname; \ in ac_query_gpu_info()
784 if (!info->family_overridden) { in ac_query_gpu_info()
864 if (info->ip[AMD_IP_GFX].ver_major == 11 && info->ip[AMD_IP_GFX].ver_minor == 5) in ac_query_gpu_info()
865 info->gfx_level = GFX11_5; in ac_query_gpu_info()
866 else if (info->ip[AMD_IP_GFX].ver_major == 11 && info->ip[AMD_IP_GFX].ver_minor == 0) in ac_query_gpu_info()
867 info->gfx_level = GFX11; in ac_query_gpu_info()
868 else if (info->ip[AMD_IP_GFX].ver_major == 10 && info->ip[AMD_IP_GFX].ver_minor == 3) in ac_query_gpu_info()
869 info->gfx_level = GFX10_3; in ac_query_gpu_info()
870 else if (info->ip[AMD_IP_GFX].ver_major == 10 && info->ip[AMD_IP_GFX].ver_minor == 1) in ac_query_gpu_info()
871 info->gfx_level = GFX10; in ac_query_gpu_info()
872 else if (info->ip[AMD_IP_GFX].ver_major == 9 || info->ip[AMD_IP_COMPUTE].ver_major == 9) in ac_query_gpu_info()
873 info->gfx_level = GFX9; in ac_query_gpu_info()
874 else if (info->ip[AMD_IP_GFX].ver_major == 8) in ac_query_gpu_info()
875 info->gfx_level = GFX8; in ac_query_gpu_info()
876 else if (info->ip[AMD_IP_GFX].ver_major == 7) in ac_query_gpu_info()
877 info->gfx_level = GFX7; in ac_query_gpu_info()
878 else if (info->ip[AMD_IP_GFX].ver_major == 6) in ac_query_gpu_info()
879 info->gfx_level = GFX6; in ac_query_gpu_info()
882 info->ip[AMD_IP_GFX].ver_major, info->ip[AMD_IP_GFX].ver_minor); in ac_query_gpu_info()
886 info->family_id = device_info.family; in ac_query_gpu_info()
887 info->chip_external_rev = device_info.external_rev; in ac_query_gpu_info()
888 info->chip_rev = device_info.chip_rev; in ac_query_gpu_info()
889 info->marketing_name = amdgpu_get_marketing_name(dev); in ac_query_gpu_info()
890 info->is_pro_graphics = info->marketing_name && (strstr(info->marketing_name, "Pro") || in ac_query_gpu_info()
891 strstr(info->marketing_name, "PRO") || in ac_query_gpu_info()
892 strstr(info->marketing_name, "Frontier")); in ac_query_gpu_info()
895 if (!info->name) { in ac_query_gpu_info()
901 memset(info->lowercase_name, 0, sizeof(info->lowercase_name)); in ac_query_gpu_info()
902 for (unsigned i = 0; info->name[i] && i < ARRAY_SIZE(info->lowercase_name) - 1; i++) in ac_query_gpu_info()
903 info->lowercase_name[i] = tolower(info->name[i]); in ac_query_gpu_info()
907 UNUSED int _result = readlink(proc_fd, info->dev_filename, sizeof(info->dev_filename)); in ac_query_gpu_info()
912 if (!info->ip[i].num_queues) in ac_query_gpu_info()
915 switch(VCN_IP_VERSION(info->ip[i].ver_major, in ac_query_gpu_info()
916 info->ip[i].ver_minor, in ac_query_gpu_info()
917 info->ip[i].ver_rev)) { in ac_query_gpu_info()
919 info->vcn_ip_version = VCN_1_0_0; in ac_query_gpu_info()
922 info->vcn_ip_version = VCN_1_0_1; in ac_query_gpu_info()
925 info->vcn_ip_version = VCN_2_0_0; in ac_query_gpu_info()
928 info->vcn_ip_version = VCN_2_0_2; in ac_query_gpu_info()
931 info->vcn_ip_version = VCN_2_0_3; in ac_query_gpu_info()
934 info->vcn_ip_version = VCN_2_2_0; in ac_query_gpu_info()
937 info->vcn_ip_version = VCN_2_5_0; in ac_query_gpu_info()
940 info->vcn_ip_version = VCN_2_6_0; in ac_query_gpu_info()
946 info->vcn_ip_version = (info->family != CHIP_NAVI24) ? VCN_3_0_0 : VCN_3_0_33; in ac_query_gpu_info()
949 info->vcn_ip_version = VCN_3_0_2; in ac_query_gpu_info()
952 info->vcn_ip_version = VCN_3_0_16; in ac_query_gpu_info()
955 info->vcn_ip_version = VCN_3_0_33; in ac_query_gpu_info()
958 info->vcn_ip_version = VCN_3_1_1; in ac_query_gpu_info()
961 info->vcn_ip_version = VCN_3_1_2; in ac_query_gpu_info()
964 info->vcn_ip_version = VCN_4_0_0; in ac_query_gpu_info()
967 info->vcn_ip_version = VCN_4_0_2; in ac_query_gpu_info()
970 info->vcn_ip_version = VCN_4_0_3; in ac_query_gpu_info()
973 info->vcn_ip_version = VCN_4_0_4; in ac_query_gpu_info()
976 info->vcn_ip_version = VCN_4_0_5; in ac_query_gpu_info()
979 info->vcn_ip_version = VCN_UNKNOWN; in ac_query_gpu_info()
985 info->has_dedicated_vram = !(device_info.ids_flags & AMDGPU_IDS_FLAGS_FUSION); in ac_query_gpu_info()
990 if (info->has_dedicated_vram) in ac_query_gpu_info()
991 info->max_heap_size_kb = info->vram_size_kb; in ac_query_gpu_info()
993 info->max_heap_size_kb = info->gart_size_kb; in ac_query_gpu_info()
995 info->vram_type = device_info.vram_type; in ac_query_gpu_info()
996 info->memory_bus_width = device_info.vram_bit_width; in ac_query_gpu_info()
999 info->has_l2_uncached = info->gfx_level >= GFX9; in ac_query_gpu_info()
1003 info->max_gpu_freq_mhz = device_info.max_engine_clock / 1000; in ac_query_gpu_info()
1004 info->memory_freq_mhz_effective = info->memory_freq_mhz = device_info.max_memory_clock / 1000; in ac_query_gpu_info()
1005 info->max_tcc_blocks = device_info.num_tcc_blocks; in ac_query_gpu_info()
1006 info->max_se = device_info.num_shader_engines; in ac_query_gpu_info()
1007 info->max_sa_per_se = device_info.num_shader_arrays_per_engine; in ac_query_gpu_info()
1008 info->num_cu_per_sh = device_info.num_cu_per_sh; in ac_query_gpu_info()
1009 info->uvd_fw_version = info->ip[AMD_IP_UVD].num_queues ? uvd_version : 0; in ac_query_gpu_info()
1010 info->vce_fw_version = info->ip[AMD_IP_VCE].num_queues ? vce_version : 0; in ac_query_gpu_info()
1012 info->memory_freq_mhz_effective *= ac_memory_ops_per_clock(info->vram_type); in ac_query_gpu_info()
1014 info->has_userptr = true; in ac_query_gpu_info()
1015 info->has_timeline_syncobj = has_timeline_syncobj(fd); in ac_query_gpu_info()
1016 info->has_local_buffers = true; in ac_query_gpu_info()
1017 info->has_bo_metadata = true; in ac_query_gpu_info()
1018 info->has_eqaa_surface_allocator = info->gfx_level < GFX11; in ac_query_gpu_info()
1022 info->has_sparse_vm_mappings = info->gfx_level >= GFX7; in ac_query_gpu_info()
1023 info->has_scheduled_fence_dependency = info->drm_minor >= 28; in ac_query_gpu_info()
1024 info->has_gang_submit = info->drm_minor >= 49; in ac_query_gpu_info()
1025 info->has_gpuvm_fault_query = info->drm_minor >= 55; in ac_query_gpu_info()
1026 info->has_tmz_support = has_tmz_support(dev, info, device_info.ids_flags); in ac_query_gpu_info()
1027 info->kernel_has_modifiers = has_modifiers(fd); in ac_query_gpu_info()
1028 info->uses_kernel_cu_mask = false; /* Not implemented in the kernel. */ in ac_query_gpu_info()
1029 info->has_graphics = info->ip[AMD_IP_GFX].num_queues > 0; in ac_query_gpu_info()
1031 info->pa_sc_tile_steering_override = device_info.pa_sc_tile_steering_override; in ac_query_gpu_info()
1032 info->max_render_backends = device_info.num_rb_pipes; in ac_query_gpu_info()
1034 if (info->family == CHIP_KAVERI) in ac_query_gpu_info()
1035 info->max_render_backends = 2; in ac_query_gpu_info()
1037 info->clock_crystal_freq = device_info.gpu_counter_freq; in ac_query_gpu_info()
1038 if (!info->clock_crystal_freq) { in ac_query_gpu_info()
1040 info->clock_crystal_freq = 1; in ac_query_gpu_info()
1042 if (info->gfx_level >= GFX10) { in ac_query_gpu_info()
1043 info->tcc_cache_line_size = 128; in ac_query_gpu_info()
1045 if (info->drm_minor >= 35) { in ac_query_gpu_info()
1046info->num_tcc_blocks = info->max_tcc_blocks - util_bitcount64(device_info.tcc_disabled_mask); in ac_query_gpu_info()
1049 info->num_tcc_blocks = info->vram_size_kb / (512 * 1024); in ac_query_gpu_info()
1050 if (info->num_tcc_blocks > info->max_tcc_blocks) in ac_query_gpu_info()
1051 info->num_tcc_blocks /= 2; in ac_query_gpu_info()
1054 if (!info->has_graphics && info->family >= CHIP_MI200) in ac_query_gpu_info()
1055 info->tcc_cache_line_size = 128; in ac_query_gpu_info()
1057 info->tcc_cache_line_size = 64; in ac_query_gpu_info()
1059 info->num_tcc_blocks = info->max_tcc_blocks; in ac_query_gpu_info()
1062 info->tcc_rb_non_coherent = !util_is_power_of_two_or_zero(info->num_tcc_blocks); in ac_query_gpu_info()
1064 if (info->drm_minor >= 52) { in ac_query_gpu_info()
1065 info->sqc_inst_cache_size = device_info.sqc_inst_cache_size * 1024; in ac_query_gpu_info()
1066 info->sqc_scalar_cache_size = device_info.sqc_data_cache_size * 1024; in ac_query_gpu_info()
1067 info->num_sqc_per_wgp = device_info.num_sqc_per_wgp; in ac_query_gpu_info()
1072 if (info->gfx_level >= GFX11 && info->drm_minor >= 52 && info->family != CHIP_NAVI33) { in ac_query_gpu_info()
1073 info->tcp_cache_size = device_info.tcp_cache_size * 1024; in ac_query_gpu_info()
1074 info->l1_cache_size = device_info.gl1c_cache_size * 1024; in ac_query_gpu_info()
1075 info->l2_cache_size = device_info.gl2c_cache_size * 1024; in ac_query_gpu_info()
1076 info->l3_cache_size_mb = DIV_ROUND_UP(device_info.mall_size, 1024 * 1024); in ac_query_gpu_info()
1078 if (info->gfx_level >= GFX11) { in ac_query_gpu_info()
1079 info->tcp_cache_size = 32768; in ac_query_gpu_info()
1080 info->l1_cache_size = 256 * 1024; in ac_query_gpu_info()
1082 info->tcp_cache_size = 16384; in ac_query_gpu_info()
1083 info->l1_cache_size = 128 * 1024; in ac_query_gpu_info()
1086 if (info->gfx_level >= GFX10_3 && info->has_dedicated_vram) { in ac_query_gpu_info()
1087 info->l3_cache_size_mb = info->num_tcc_blocks * in ac_query_gpu_info()
1088 (info->family == CHIP_NAVI21 || in ac_query_gpu_info()
1089 info->family == CHIP_NAVI22 ? 8 : 4); in ac_query_gpu_info()
1092 switch (info->family) { in ac_query_gpu_info()
1101 info->l2_cache_size = info->num_tcc_blocks * 64 * 1024; in ac_query_gpu_info()
1113 info->l2_cache_size = info->num_tcc_blocks * 128 * 1024; in ac_query_gpu_info()
1116 info->l2_cache_size = info->num_tcc_blocks * 256 * 1024; in ac_query_gpu_info()
1120 info->l2_cache_size = info->num_tcc_blocks * 512 * 1024; in ac_query_gpu_info()
1125 info->mc_arb_ramcfg = amdinfo.mc_arb_ramcfg; in ac_query_gpu_info()
1126 info->gb_addr_config = amdinfo.gb_addr_cfg; in ac_query_gpu_info()
1127 if (info->gfx_level >= GFX9) { in ac_query_gpu_info()
1128 info->num_tile_pipes = 1 << G_0098F8_NUM_PIPES(info->gb_addr_config); in ac_query_gpu_info()
1129 info->pipe_interleave_bytes = 256 << G_0098F8_PIPE_INTERLEAVE_SIZE_GFX9(info->gb_addr_config); in ac_query_gpu_info()
1132 info->num_tile_pipes = ac_pipe_config_to_num_pipes(pipe_config); in ac_query_gpu_info()
1133 info->pipe_interleave_bytes = 256 << G_0098F8_PIPE_INTERLEAVE_SIZE_GFX6(info->gb_addr_config); in ac_query_gpu_info()
1135 info->r600_has_virtual_memory = true; in ac_query_gpu_info()
1144 info->lds_size_per_workgroup = info->gfx_level >= GFX10 ? 128 * 1024 in ac_query_gpu_info()
1145 : info->gfx_level >= GFX7 ? 64 * 1024 in ac_query_gpu_info()
1151 info->lds_encode_granularity = info->gfx_level >= GFX7 ? 128 * 4 : 64 * 4; in ac_query_gpu_info()
1152info->lds_alloc_granularity = info->gfx_level >= GFX10_3 ? 256 * 4 : info->lds_encode_granularity; in ac_query_gpu_info()
1158 info->has_clear_state = info->gfx_level >= GFX7; in ac_query_gpu_info()
1160 info->has_distributed_tess = in ac_query_gpu_info()
1161 info->gfx_level >= GFX10 || (info->gfx_level >= GFX8 && info->max_se >= 2); in ac_query_gpu_info()
1163 info->has_dcc_constant_encode = in ac_query_gpu_info()
1164 info->family == CHIP_RAVEN2 || info->family == CHIP_RENOIR || info->gfx_level >= GFX10; in ac_query_gpu_info()
1166 info->has_rbplus = info->family == CHIP_STONEY || info->gfx_level >= GFX9; in ac_query_gpu_info()
1171 info->rbplus_allowed = in ac_query_gpu_info()
1172 info->has_rbplus && in ac_query_gpu_info()
1173 (info->family == CHIP_STONEY || info->family == CHIP_VEGA12 || info->family == CHIP_RAVEN || in ac_query_gpu_info()
1174 info->family == CHIP_RAVEN2 || info->family == CHIP_RENOIR || info->gfx_level >= GFX10_3); in ac_query_gpu_info()
1176 info->has_out_of_order_rast = in ac_query_gpu_info()
1177 info->gfx_level >= GFX8 && info->gfx_level <= GFX9 && info->max_se >= 2; in ac_query_gpu_info()
1180 info->has_packed_math_16bit = info->gfx_level >= GFX9; in ac_query_gpu_info()
1185 info->has_accelerated_dot_product = in ac_query_gpu_info()
1186 info->family == CHIP_VEGA20 || in ac_query_gpu_info()
1187 (info->family >= CHIP_MI100 && info->family != CHIP_NAVI10); in ac_query_gpu_info()
1190 info->has_load_ctx_reg_pkt = in ac_query_gpu_info()
1191 info->gfx_level >= GFX9 || (info->gfx_level >= GFX8 && info->me_fw_feature >= 41); in ac_query_gpu_info()
1193 info->cpdma_prefetch_writes_memory = info->gfx_level <= GFX8; in ac_query_gpu_info()
1195 info->has_gfx9_scissor_bug = info->family == CHIP_VEGA10 || info->family == CHIP_RAVEN; in ac_query_gpu_info()
1197 info->has_tc_compat_zrange_bug = info->gfx_level >= GFX8 && info->gfx_level <= GFX9; in ac_query_gpu_info()
1199 info->has_small_prim_filter_sample_loc_bug = in ac_query_gpu_info()
1200 (info->family >= CHIP_POLARIS10 && info->family <= CHIP_POLARIS12) || in ac_query_gpu_info()
1201 info->family == CHIP_VEGA10 || info->family == CHIP_RAVEN; in ac_query_gpu_info()
1203 info->has_ls_vgpr_init_bug = info->family == CHIP_VEGA10 || info->family == CHIP_RAVEN; in ac_query_gpu_info()
1208 info->has_pops_missed_overlap_bug = info->family == CHIP_VEGA10 || info->family == CHIP_RAVEN; in ac_query_gpu_info()
1211 info->has_zero_index_buffer_bug = info->gfx_level == GFX10; in ac_query_gpu_info()
1216 info->has_image_load_dcc_bug = info->family == CHIP_NAVI23 || in ac_query_gpu_info()
1217 info->family == CHIP_VANGOGH || in ac_query_gpu_info()
1218 info->family == CHIP_REMBRANDT; in ac_query_gpu_info()
1223 info->has_two_planes_iterate256_bug = info->gfx_level == GFX10; in ac_query_gpu_info()
1226 info->has_vgt_flush_ngg_legacy_bug = info->gfx_level == GFX10 || in ac_query_gpu_info()
1227 info->family == CHIP_NAVI21; in ac_query_gpu_info()
1232 info->has_vrs_ds_export_bug = info->family == CHIP_NAVI21 || in ac_query_gpu_info()
1233 info->family == CHIP_NAVI22 || in ac_query_gpu_info()
1234 info->family == CHIP_VANGOGH; in ac_query_gpu_info()
1244 info->has_cs_regalloc_hang_bug = info->gfx_level == GFX6 || in ac_query_gpu_info()
1245 info->family == CHIP_BONAIRE || in ac_query_gpu_info()
1246 info->family == CHIP_KABINI; in ac_query_gpu_info()
1252 info->has_async_compute_threadgroup_bug = info->family == CHIP_ICELAND || in ac_query_gpu_info()
1253 info->family == CHIP_TONGA; in ac_query_gpu_info()
1258 info->has_async_compute_align32_bug = info->gfx_level == GFX7; in ac_query_gpu_info()
1263 info->has_32bit_predication = (info->gfx_level >= GFX10 && in ac_query_gpu_info()
1264 info->me_fw_feature >= 32) || in ac_query_gpu_info()
1265 (info->gfx_level == GFX9 && in ac_query_gpu_info()
1266 info->me_fw_feature >= 52); in ac_query_gpu_info()
1271 info->has_taskmesh_indirect0_bug = info->gfx_level == GFX10_3 && in ac_query_gpu_info()
1272 info->mec_fw_version < 100; in ac_query_gpu_info()
1274 info->has_export_conflict_bug = info->gfx_level == GFX11; in ac_query_gpu_info()
1277 info->sdma_ip_version = in ac_query_gpu_info()
1278 (enum sdma_version)SDMA_VERSION_VALUE(info->ip[AMD_IP_SDMA].ver_major, in ac_query_gpu_info()
1279 info->ip[AMD_IP_SDMA].ver_minor); in ac_query_gpu_info()
1282 info->sdma_supports_sparse = info->sdma_ip_version >= SDMA_4_0; in ac_query_gpu_info()
1285info->sdma_supports_compression = info->sdma_ip_version >= SDMA_5_0 && info->family != CHIP_NAVI10; in ac_query_gpu_info()
1288 info->num_cu = 0; in ac_query_gpu_info()
1289 for (i = 0; i < info->max_se; i++) { in ac_query_gpu_info()
1290 for (j = 0; j < info->max_sa_per_se; j++) { in ac_query_gpu_info()
1291 if (info->gfx_level >= GFX11) { in ac_query_gpu_info()
1292 assert(info->max_sa_per_se <= 2); in ac_query_gpu_info()
1293 info->cu_mask[i][j] = device_info.cu_bitmap[i % 4][(i / 4) * 2 + j]; in ac_query_gpu_info()
1294 } else if (info->family == CHIP_MI100) { in ac_query_gpu_info()
1295 /* The CU bitmap in amd gpu info structure is in ac_query_gpu_info()
1306 assert(info->max_sa_per_se == 1); in ac_query_gpu_info()
1307 info->cu_mask[i][0] = device_info.cu_bitmap[i % 4][i / 4]; in ac_query_gpu_info()
1309 info->cu_mask[i][j] = device_info.cu_bitmap[i][j]; in ac_query_gpu_info()
1311 info->num_cu += util_bitcount(info->cu_mask[i][j]); in ac_query_gpu_info()
1316 if (info->gfx_level >= GFX10_3 && info->max_se > 1) { in ac_query_gpu_info()
1317 info->num_se = 0; in ac_query_gpu_info()
1319 for (unsigned se = 0; se < info->max_se; se++) { in ac_query_gpu_info()
1320 for (unsigned sa = 0; sa < info->max_sa_per_se; sa++) { in ac_query_gpu_info()
1321 if (info->cu_mask[se][sa]) { in ac_query_gpu_info()
1322 info->num_se++; in ac_query_gpu_info()
1329 info->num_se = info->max_se; in ac_query_gpu_info()
1335 unsigned cu_group = info->gfx_level >= GFX10 ? 2 : 1; in ac_query_gpu_info()
1336 info->max_good_cu_per_sa = in ac_query_gpu_info()
1337 DIV_ROUND_UP(info->num_cu, (info->num_se * info->max_sa_per_se * cu_group)) * in ac_query_gpu_info()
1339 info->min_good_cu_per_sa = in ac_query_gpu_info()
1340 (info->num_cu / (info->num_se * info->max_sa_per_se * cu_group)) * cu_group; in ac_query_gpu_info()
1342 memcpy(info->si_tile_mode_array, amdinfo.gb_tile_mode, sizeof(amdinfo.gb_tile_mode)); in ac_query_gpu_info()
1344 info->enabled_rb_mask = device_info.enabled_rb_pipes_mask; in ac_query_gpu_info()
1345 if (info->drm_minor >= 52) in ac_query_gpu_info()
1346 info->enabled_rb_mask |= (uint64_t)device_info.enabled_rb_pipes_mask_hi << 32; in ac_query_gpu_info()
1348 memcpy(info->cik_macrotile_mode_array, amdinfo.gb_macro_tile_mode, in ac_query_gpu_info()
1351 info->pte_fragment_size = alignment_info.size_local; in ac_query_gpu_info()
1352 info->gart_page_size = alignment_info.size_remote; in ac_query_gpu_info()
1354 if (info->gfx_level == GFX6) in ac_query_gpu_info()
1355 info->gfx_ib_pad_with_type2 = true; in ac_query_gpu_info()
1357 if (info->gfx_level >= GFX11) { in ac_query_gpu_info()
1361 info->use_display_dcc_with_retile_blit = info->num_cu >= 4; in ac_query_gpu_info()
1362 } else if (info->gfx_level == GFX10_3) { in ac_query_gpu_info()
1367 info->use_display_dcc_with_retile_blit = info->num_cu > 4; in ac_query_gpu_info()
1368 } else if (info->gfx_level == GFX9 && !info->has_dedicated_vram && in ac_query_gpu_info()
1369 info->drm_minor >= 31) { in ac_query_gpu_info()
1370 if (info->max_render_backends == 1) { in ac_query_gpu_info()
1371 info->use_display_dcc_unaligned = true; in ac_query_gpu_info()
1374 info->use_display_dcc_with_retile_blit = info->num_cu > 4; in ac_query_gpu_info()
1378 info->has_stable_pstate = info->drm_minor >= 45; in ac_query_gpu_info()
1380 if (info->gfx_level >= GFX11) { in ac_query_gpu_info()
1381 info->pc_lines = 1024; in ac_query_gpu_info()
1382 info->pbb_max_alloc_count = 16; /* minimum is 2, maximum is 256 */ in ac_query_gpu_info()
1383 } else if (info->gfx_level >= GFX9 && info->has_graphics) { in ac_query_gpu_info()
1386 switch (info->family) { in ac_query_gpu_info()
1415 info->pc_lines = pc_lines; in ac_query_gpu_info()
1417 if (info->gfx_level >= GFX10) { in ac_query_gpu_info()
1418 info->pbb_max_alloc_count = pc_lines / 3; in ac_query_gpu_info()
1420 info->pbb_max_alloc_count = MIN2(128, pc_lines / (4 * info->max_se)); in ac_query_gpu_info()
1424 if (info->gfx_level >= GFX10_3) in ac_query_gpu_info()
1425 info->max_waves_per_simd = 16; in ac_query_gpu_info()
1426 else if (info->gfx_level == GFX10) in ac_query_gpu_info()
1427 info->max_waves_per_simd = 20; in ac_query_gpu_info()
1428 else if (info->family >= CHIP_POLARIS10 && info->family <= CHIP_VEGAM) in ac_query_gpu_info()
1429 info->max_waves_per_simd = 8; in ac_query_gpu_info()
1431 info->max_waves_per_simd = 10; in ac_query_gpu_info()
1433 if (info->gfx_level >= GFX10) { in ac_query_gpu_info()
1434 info->num_physical_sgprs_per_simd = 128 * info->max_waves_per_simd; in ac_query_gpu_info()
1435 info->min_sgpr_alloc = 128; in ac_query_gpu_info()
1436 info->sgpr_alloc_granularity = 128; in ac_query_gpu_info()
1437 } else if (info->gfx_level >= GFX8) { in ac_query_gpu_info()
1438 info->num_physical_sgprs_per_simd = 800; in ac_query_gpu_info()
1439 info->min_sgpr_alloc = 16; in ac_query_gpu_info()
1440 info->sgpr_alloc_granularity = 16; in ac_query_gpu_info()
1442 info->num_physical_sgprs_per_simd = 512; in ac_query_gpu_info()
1443 info->min_sgpr_alloc = 8; in ac_query_gpu_info()
1444 info->sgpr_alloc_granularity = 8; in ac_query_gpu_info()
1447 info->has_3d_cube_border_color_mipmap = info->has_graphics || info->family == CHIP_MI100; in ac_query_gpu_info()
1448 info->has_image_opcodes = debug_get_bool_option("AMD_IMAGE_OPCODES", in ac_query_gpu_info()
1449info->has_graphics || info->family < CHIP_GFX940); in ac_query_gpu_info()
1450 info->never_stop_sq_perf_counters = info->gfx_level == GFX10 || in ac_query_gpu_info()
1451 info->gfx_level == GFX10_3; in ac_query_gpu_info()
1452 info->never_send_perfcounter_stop = info->gfx_level == GFX11; in ac_query_gpu_info()
1453 info->has_sqtt_rb_harvest_bug = (info->family == CHIP_NAVI23 || in ac_query_gpu_info()
1454 info->family == CHIP_NAVI24 || in ac_query_gpu_info()
1455 info->family == CHIP_REMBRANDT || in ac_query_gpu_info()
1456 info->family == CHIP_VANGOGH) && in ac_query_gpu_info()
1457 util_bitcount64(info->enabled_rb_mask) != in ac_query_gpu_info()
1458 info->max_render_backends; in ac_query_gpu_info()
1461 info->has_sqtt_auto_flush_mode_bug = info->gfx_level == GFX10_3; in ac_query_gpu_info()
1463 info->max_sgpr_alloc = info->family == CHIP_TONGA || info->family == CHIP_ICELAND ? 96 : 104; in ac_query_gpu_info()
1465 if (!info->has_graphics && info->family >= CHIP_MI200) { in ac_query_gpu_info()
1466 info->min_wave64_vgpr_alloc = 8; in ac_query_gpu_info()
1467 info->max_vgpr_alloc = 512; in ac_query_gpu_info()
1468 info->wave64_vgpr_alloc_granularity = 8; in ac_query_gpu_info()
1470 info->min_wave64_vgpr_alloc = 4; in ac_query_gpu_info()
1471 info->max_vgpr_alloc = 256; in ac_query_gpu_info()
1472 info->wave64_vgpr_alloc_granularity = 4; in ac_query_gpu_info()
1475 /* Some GPU info was broken before DRM 3.45.0. */ in ac_query_gpu_info()
1476 if (info->drm_minor >= 45 && device_info.num_shader_visible_vgprs) { in ac_query_gpu_info()
1480 if (info->gfx_level >= GFX10) in ac_query_gpu_info()
1481 info->num_physical_wave64_vgprs_per_simd = device_info.num_shader_visible_vgprs / 2; in ac_query_gpu_info()
1483 info->num_physical_wave64_vgprs_per_simd = device_info.num_shader_visible_vgprs; in ac_query_gpu_info()
1484 } else if (info->gfx_level >= GFX10) { in ac_query_gpu_info()
1485 info->num_physical_wave64_vgprs_per_simd = 512; in ac_query_gpu_info()
1487 info->num_physical_wave64_vgprs_per_simd = 256; in ac_query_gpu_info()
1490 info->num_simd_per_compute_unit = info->gfx_level >= GFX10 ? 2 : 4; in ac_query_gpu_info()
1495 info->discardable_allows_big_page = info->gfx_level >= GFX10_3 && in ac_query_gpu_info()
1496 info->has_dedicated_vram && in ac_query_gpu_info()
1497 info->drm_minor >= 47; in ac_query_gpu_info()
1505info->max_scratch_waves = MAX2(32 * info->min_good_cu_per_sa * info->max_sa_per_se * info->num_se, in ac_query_gpu_info()
1507 info->num_rb = util_bitcount64(info->enabled_rb_mask); in ac_query_gpu_info()
1508info->max_gflops = (info->gfx_level >= GFX11 ? 256 : 128) * info->num_cu * info->max_gpu_freq_mhz … in ac_query_gpu_info()
1509info->memory_bandwidth_gbps = DIV_ROUND_UP(info->memory_freq_mhz_effective * info->memory_bus_widt… in ac_query_gpu_info()
1510 info->has_pcie_bandwidth_info = info->drm_minor >= 51; in ac_query_gpu_info()
1512 if (info->has_pcie_bandwidth_info) { in ac_query_gpu_info()
1513 info->pcie_gen = device_info.pcie_gen; in ac_query_gpu_info()
1514 info->pcie_num_lanes = device_info.pcie_num_lanes; in ac_query_gpu_info()
1517 switch (info->pcie_gen) { in ac_query_gpu_info()
1519 info->pcie_bandwidth_mbps = info->pcie_num_lanes * 0.25 * 1024; in ac_query_gpu_info()
1522 info->pcie_bandwidth_mbps = info->pcie_num_lanes * 0.5 * 1024; in ac_query_gpu_info()
1525 info->pcie_bandwidth_mbps = info->pcie_num_lanes * 0.985 * 1024; in ac_query_gpu_info()
1528 info->pcie_bandwidth_mbps = info->pcie_num_lanes * 1.969 * 1024; in ac_query_gpu_info()
1531 info->pcie_bandwidth_mbps = info->pcie_num_lanes * 3.938 * 1024; in ac_query_gpu_info()
1534 info->pcie_bandwidth_mbps = info->pcie_num_lanes * 7.563 * 1024; in ac_query_gpu_info()
1537 info->pcie_bandwidth_mbps = info->pcie_num_lanes * 15.125 * 1024; in ac_query_gpu_info()
1548 sizeof(info->max_submitted_ibs), info->max_submitted_ibs); in ac_query_gpu_info()
1554 info->max_submitted_ibs[i] = 50; in ac_query_gpu_info()
1556 info->max_submitted_ibs[AMD_IP_GFX] = info->gfx_level >= GFX7 ? 192 : 144; in ac_query_gpu_info()
1557 info->max_submitted_ibs[AMD_IP_COMPUTE] = 124; in ac_query_gpu_info()
1558 info->max_submitted_ibs[AMD_IP_VCN_JPEG] = 16; in ac_query_gpu_info()
1561 if (!info->ip[i].num_queues) in ac_query_gpu_info()
1562 info->max_submitted_ibs[i] = 0; in ac_query_gpu_info()
1566 if (info->gfx_level >= GFX11) { in ac_query_gpu_info()
1567 if (info->l3_cache_size_mb) { in ac_query_gpu_info()
1568 info->attribute_ring_size_per_se = 1400 * 1024; in ac_query_gpu_info()
1570 assert(info->num_se == 1); in ac_query_gpu_info()
1572 if (info->l2_cache_size >= 2 * 1024 * 1024) in ac_query_gpu_info()
1573 info->attribute_ring_size_per_se = 768 * 1024; in ac_query_gpu_info()
1575 info->attribute_ring_size_per_se = info->l2_cache_size / 2; in ac_query_gpu_info()
1579 info->attribute_ring_size_per_se = align(info->attribute_ring_size_per_se, 64 * 1024); in ac_query_gpu_info()
1580 assert(info->attribute_ring_size_per_se * info->max_se <= 16 * 1024 * 1024); in ac_query_gpu_info()
1582 info->conformant_trunc_coord = in ac_query_gpu_info()
1583 info->drm_minor >= 52 && in ac_query_gpu_info()
1587 if (info->gfx_level >= GFX11 && device_info.shadow_size > 0) { in ac_query_gpu_info()
1588 info->has_fw_based_shadowing = true; in ac_query_gpu_info()
1589 info->fw_based_mcbp.shadow_size = device_info.shadow_size; in ac_query_gpu_info()
1590 info->fw_based_mcbp.shadow_alignment = device_info.shadow_alignment; in ac_query_gpu_info()
1591 info->fw_based_mcbp.csa_size = device_info.csa_size; in ac_query_gpu_info()
1592 info->fw_based_mcbp.csa_alignment = device_info.csa_alignment; in ac_query_gpu_info()
1596 info->register_shadowing_required = device_info.ids_flags & AMDGPU_IDS_FLAGS_PREEMPTION && in ac_query_gpu_info()
1597 info->gfx_level < GFX11; in ac_query_gpu_info()
1599 if (info->gfx_level >= GFX11 && info->has_dedicated_vram) { in ac_query_gpu_info()
1600 info->has_set_context_pairs_packed = true; in ac_query_gpu_info()
1601 info->has_set_sh_pairs_packed = info->register_shadowing_required; in ac_query_gpu_info()
1604 set_custom_cu_en_mask(info); in ac_query_gpu_info()
1622 ac_parse_ib(stdout, ib, size / 4, NULL, 0, "IB", info->gfx_level, info->family, in ac_query_gpu_info()
1641 void ac_compute_device_uuid(const struct radeon_info *info, char *uuid, size_t size) in ac_compute_device_uuid() argument
1648 * Use the device info directly instead of using a sha1. GL/VK UUIDs in ac_compute_device_uuid()
1653 if (!info->pci.valid) { in ac_compute_device_uuid()
1655 "ac_compute_device_uuid's output is based on invalid pci bus info.\n"); in ac_compute_device_uuid()
1657 uint_uuid[0] = info->pci.domain; in ac_compute_device_uuid()
1658 uint_uuid[1] = info->pci.bus; in ac_compute_device_uuid()
1659 uint_uuid[2] = info->pci.dev; in ac_compute_device_uuid()
1660 uint_uuid[3] = info->pci.func; in ac_compute_device_uuid()
1663 void ac_print_gpu_info(const struct radeon_info *info, FILE *f) in ac_print_gpu_info() argument
1665 fprintf(f, "Device info:\n"); in ac_print_gpu_info()
1666 fprintf(f, " name = %s\n", info->name); in ac_print_gpu_info()
1667 fprintf(f, " marketing_name = %s\n", info->marketing_name); in ac_print_gpu_info()
1668 fprintf(f, " dev_filename = %s\n", info->dev_filename); in ac_print_gpu_info()
1669 fprintf(f, " num_se = %i\n", info->num_se); in ac_print_gpu_info()
1670 fprintf(f, " num_rb = %i\n", info->num_rb); in ac_print_gpu_info()
1671 fprintf(f, " num_cu = %i\n", info->num_cu); in ac_print_gpu_info()
1672 fprintf(f, " max_gpu_freq = %i MHz\n", info->max_gpu_freq_mhz); in ac_print_gpu_info()
1673 fprintf(f, " max_gflops = %u GFLOPS\n", info->max_gflops); in ac_print_gpu_info()
1675 if (info->sqc_inst_cache_size) { in ac_print_gpu_info()
1677 DIV_ROUND_UP(info->sqc_inst_cache_size, 1024), info->num_sqc_per_wgp); in ac_print_gpu_info()
1679 if (info->sqc_scalar_cache_size) { in ac_print_gpu_info()
1681 DIV_ROUND_UP(info->sqc_scalar_cache_size, 1024), info->num_sqc_per_wgp); in ac_print_gpu_info()
1684 fprintf(f, " tcp_cache_size = %i KB\n", DIV_ROUND_UP(info->tcp_cache_size, 1024)); in ac_print_gpu_info()
1686 if (info->gfx_level >= GFX10) in ac_print_gpu_info()
1687 fprintf(f, " l1_cache_size = %i KB\n", DIV_ROUND_UP(info->l1_cache_size, 1024)); in ac_print_gpu_info()
1689 fprintf(f, " l2_cache_size = %i KB\n", DIV_ROUND_UP(info->l2_cache_size, 1024)); in ac_print_gpu_info()
1691 if (info->l3_cache_size_mb) in ac_print_gpu_info()
1692 fprintf(f, " l3_cache_size = %i MB\n", info->l3_cache_size_mb); in ac_print_gpu_info()
1694 fprintf(f, " memory_channels = %u (TCC blocks)\n", info->num_tcc_blocks); in ac_print_gpu_info()
1696 DIV_ROUND_UP(info->vram_size_kb, (1024 * 1024)), in ac_print_gpu_info()
1697 DIV_ROUND_UP(info->vram_size_kb, 1024)); in ac_print_gpu_info()
1698 fprintf(f, " memory_freq = %u GHz\n", DIV_ROUND_UP(info->memory_freq_mhz_effective, 1000)); in ac_print_gpu_info()
1699 fprintf(f, " memory_bus_width = %u bits\n", info->memory_bus_width); in ac_print_gpu_info()
1700 fprintf(f, " memory_bandwidth = %u GB/s\n", info->memory_bandwidth_gbps); in ac_print_gpu_info()
1701 fprintf(f, " pcie_gen = %u\n", info->pcie_gen); in ac_print_gpu_info()
1702 fprintf(f, " pcie_num_lanes = %u\n", info->pcie_num_lanes); in ac_print_gpu_info()
1703 fprintf(f, " pcie_bandwidth = %1.1f GB/s\n", info->pcie_bandwidth_mbps / 1024.0); in ac_print_gpu_info()
1704 fprintf(f, " clock_crystal_freq = %i KHz\n", info->clock_crystal_freq); in ac_print_gpu_info()
1714 [AMD_IP_VCN_ENC] = (info->vcn_ip_version >= VCN_4_0_0) ? "VCN" : "VCN_ENC", in ac_print_gpu_info()
1720 if (info->ip[i].num_queues) { in ac_print_gpu_info()
1722 info->ip[i].ver_major, info->ip[i].ver_minor, info->ip[i].num_queues, in ac_print_gpu_info()
1723 info->ip[i].ib_alignment, info->ip[i].ib_pad_dw_mask); in ac_print_gpu_info()
1728 if (info->pci.valid) in ac_print_gpu_info()
1729 … fprintf(f, " pci (domain:bus:dev.func): %04x:%02x:%02x.%x\n", info->pci.domain, info->pci.bus, in ac_print_gpu_info()
1730 info->pci.dev, info->pci.func); in ac_print_gpu_info()
1733 fprintf(f, " pci_id = 0x%x\n", info->pci_id); in ac_print_gpu_info()
1734 fprintf(f, " pci_rev_id = 0x%x\n", info->pci_rev_id); in ac_print_gpu_info()
1735 fprintf(f, " family = %i\n", info->family); in ac_print_gpu_info()
1736 fprintf(f, " gfx_level = %i\n", info->gfx_level); in ac_print_gpu_info()
1737 fprintf(f, " family_id = %i\n", info->family_id); in ac_print_gpu_info()
1738 fprintf(f, " chip_external_rev = %i\n", info->chip_external_rev); in ac_print_gpu_info()
1739 fprintf(f, " chip_rev = %i\n", info->chip_rev); in ac_print_gpu_info()
1742 fprintf(f, " family_overridden = %u\n", info->family_overridden); in ac_print_gpu_info()
1743 fprintf(f, " is_pro_graphics = %u\n", info->is_pro_graphics); in ac_print_gpu_info()
1744 fprintf(f, " has_graphics = %i\n", info->has_graphics); in ac_print_gpu_info()
1745 fprintf(f, " has_clear_state = %u\n", info->has_clear_state); in ac_print_gpu_info()
1746 fprintf(f, " has_distributed_tess = %u\n", info->has_distributed_tess); in ac_print_gpu_info()
1747 fprintf(f, " has_dcc_constant_encode = %u\n", info->has_dcc_constant_encode); in ac_print_gpu_info()
1748 fprintf(f, " has_rbplus = %u\n", info->has_rbplus); in ac_print_gpu_info()
1749 fprintf(f, " rbplus_allowed = %u\n", info->rbplus_allowed); in ac_print_gpu_info()
1750 fprintf(f, " has_load_ctx_reg_pkt = %u\n", info->has_load_ctx_reg_pkt); in ac_print_gpu_info()
1751 fprintf(f, " has_out_of_order_rast = %u\n", info->has_out_of_order_rast); in ac_print_gpu_info()
1752 fprintf(f, " cpdma_prefetch_writes_memory = %u\n", info->cpdma_prefetch_writes_memory); in ac_print_gpu_info()
1753 fprintf(f, " has_gfx9_scissor_bug = %i\n", info->has_gfx9_scissor_bug); in ac_print_gpu_info()
1754 fprintf(f, " has_tc_compat_zrange_bug = %i\n", info->has_tc_compat_zrange_bug); in ac_print_gpu_info()
1755 …fprintf(f, " has_small_prim_filter_sample_loc_bug = %i\n", info->has_small_prim_filter_sample_l… in ac_print_gpu_info()
1756 fprintf(f, " has_ls_vgpr_init_bug = %i\n", info->has_ls_vgpr_init_bug); in ac_print_gpu_info()
1757 fprintf(f, " has_pops_missed_overlap_bug = %i\n", info->has_pops_missed_overlap_bug); in ac_print_gpu_info()
1758 fprintf(f, " has_32bit_predication = %i\n", info->has_32bit_predication); in ac_print_gpu_info()
1759 fprintf(f, " has_3d_cube_border_color_mipmap = %i\n", info->has_3d_cube_border_color_mipmap); in ac_print_gpu_info()
1760 fprintf(f, " has_image_opcodes = %i\n", info->has_image_opcodes); in ac_print_gpu_info()
1761 fprintf(f, " never_stop_sq_perf_counters = %i\n", info->never_stop_sq_perf_counters); in ac_print_gpu_info()
1762 fprintf(f, " has_sqtt_rb_harvest_bug = %i\n", info->has_sqtt_rb_harvest_bug); in ac_print_gpu_info()
1763 fprintf(f, " has_sqtt_auto_flush_mode_bug = %i\n", info->has_sqtt_auto_flush_mode_bug); in ac_print_gpu_info()
1764 fprintf(f, " never_send_perfcounter_stop = %i\n", info->never_send_perfcounter_stop); in ac_print_gpu_info()
1765 fprintf(f, " discardable_allows_big_page = %i\n", info->discardable_allows_big_page); in ac_print_gpu_info()
1766 fprintf(f, " has_taskmesh_indirect0_bug = %i\n", info->has_taskmesh_indirect0_bug); in ac_print_gpu_info()
1767 fprintf(f, " has_set_context_pairs_packed = %i\n", info->has_set_context_pairs_packed); in ac_print_gpu_info()
1768 fprintf(f, " has_set_sh_pairs_packed = %i\n", info->has_set_sh_pairs_packed); in ac_print_gpu_info()
1769 fprintf(f, " conformant_trunc_coord = %i\n", info->conformant_trunc_coord); in ac_print_gpu_info()
1772 fprintf(f, " use_display_dcc_unaligned = %u\n", info->use_display_dcc_unaligned); in ac_print_gpu_info()
1773 … fprintf(f, " use_display_dcc_with_retile_blit = %u\n", info->use_display_dcc_with_retile_blit); in ac_print_gpu_info()
1775 fprintf(f, "Memory info:\n"); in ac_print_gpu_info()
1776 fprintf(f, " pte_fragment_size = %u\n", info->pte_fragment_size); in ac_print_gpu_info()
1777 fprintf(f, " gart_page_size = %u\n", info->gart_page_size); in ac_print_gpu_info()
1778 fprintf(f, " gart_size = %i MB\n", (int)DIV_ROUND_UP(info->gart_size_kb, 1024)); in ac_print_gpu_info()
1779 fprintf(f, " vram_size = %i MB\n", (int)DIV_ROUND_UP(info->vram_size_kb, 1024)); in ac_print_gpu_info()
1780 fprintf(f, " vram_vis_size = %i MB\n", (int)DIV_ROUND_UP(info->vram_vis_size_kb, 1024)); in ac_print_gpu_info()
1781 fprintf(f, " vram_type = %i\n", info->vram_type); in ac_print_gpu_info()
1782 fprintf(f, " max_heap_size_kb = %i MB\n", (int)DIV_ROUND_UP(info->max_heap_size_kb, 1024)); in ac_print_gpu_info()
1783 fprintf(f, " min_alloc_size = %u\n", info->min_alloc_size); in ac_print_gpu_info()
1784 fprintf(f, " address32_hi = 0x%x\n", info->address32_hi); in ac_print_gpu_info()
1785 fprintf(f, " has_dedicated_vram = %u\n", info->has_dedicated_vram); in ac_print_gpu_info()
1786 fprintf(f, " all_vram_visible = %u\n", info->all_vram_visible); in ac_print_gpu_info()
1787 fprintf(f, " max_tcc_blocks = %i\n", info->max_tcc_blocks); in ac_print_gpu_info()
1788 fprintf(f, " tcc_cache_line_size = %u\n", info->tcc_cache_line_size); in ac_print_gpu_info()
1789 fprintf(f, " tcc_rb_non_coherent = %u\n", info->tcc_rb_non_coherent); in ac_print_gpu_info()
1790 fprintf(f, " pc_lines = %u\n", info->pc_lines); in ac_print_gpu_info()
1791 fprintf(f, " lds_size_per_workgroup = %u\n", info->lds_size_per_workgroup); in ac_print_gpu_info()
1792 fprintf(f, " lds_alloc_granularity = %i\n", info->lds_alloc_granularity); in ac_print_gpu_info()
1793 fprintf(f, " lds_encode_granularity = %i\n", info->lds_encode_granularity); in ac_print_gpu_info()
1794 fprintf(f, " max_memory_clock = %i MHz\n", info->memory_freq_mhz); in ac_print_gpu_info()
1796 fprintf(f, "CP info:\n"); in ac_print_gpu_info()
1797 fprintf(f, " gfx_ib_pad_with_type2 = %i\n", info->gfx_ib_pad_with_type2); in ac_print_gpu_info()
1798 fprintf(f, " me_fw_version = %i\n", info->me_fw_version); in ac_print_gpu_info()
1799 fprintf(f, " me_fw_feature = %i\n", info->me_fw_feature); in ac_print_gpu_info()
1800 fprintf(f, " mec_fw_version = %i\n", info->mec_fw_version); in ac_print_gpu_info()
1801 fprintf(f, " mec_fw_feature = %i\n", info->mec_fw_feature); in ac_print_gpu_info()
1802 fprintf(f, " pfp_fw_version = %i\n", info->pfp_fw_version); in ac_print_gpu_info()
1803 fprintf(f, " pfp_fw_feature = %i\n", info->pfp_fw_feature); in ac_print_gpu_info()
1805 fprintf(f, "Multimedia info:\n"); in ac_print_gpu_info()
1806 fprintf(f, " vce_encode = %u\n", info->ip[AMD_IP_VCE].num_queues); in ac_print_gpu_info()
1808 if (info->family >= CHIP_NAVI31 || info->family == CHIP_GFX940) in ac_print_gpu_info()
1809 fprintf(f, " vcn_unified = %u\n", info->ip[AMD_IP_VCN_UNIFIED].num_queues); in ac_print_gpu_info()
1811 fprintf(f, " vcn_decode = %u\n", info->ip[AMD_IP_VCN_DEC].num_queues); in ac_print_gpu_info()
1812 fprintf(f, " vcn_encode = %u\n", info->ip[AMD_IP_VCN_ENC].num_queues); in ac_print_gpu_info()
1815 fprintf(f, " uvd_fw_version = %u\n", info->uvd_fw_version); in ac_print_gpu_info()
1816 fprintf(f, " vce_fw_version = %u\n", info->vce_fw_version); in ac_print_gpu_info()
1817 fprintf(f, " vce_harvest_config = %i\n", info->vce_harvest_config); in ac_print_gpu_info()
1820 fprintf(f, " drm = %i.%i.%i\n", info->drm_major, info->drm_minor, info->drm_patchlevel); in ac_print_gpu_info()
1821 fprintf(f, " has_userptr = %i\n", info->has_userptr); in ac_print_gpu_info()
1822 fprintf(f, " has_timeline_syncobj = %u\n", info->has_timeline_syncobj); in ac_print_gpu_info()
1823 fprintf(f, " has_local_buffers = %u\n", info->has_local_buffers); in ac_print_gpu_info()
1824 fprintf(f, " has_bo_metadata = %u\n", info->has_bo_metadata); in ac_print_gpu_info()
1825 fprintf(f, " has_eqaa_surface_allocator = %u\n", info->has_eqaa_surface_allocator); in ac_print_gpu_info()
1826 fprintf(f, " has_sparse_vm_mappings = %u\n", info->has_sparse_vm_mappings); in ac_print_gpu_info()
1827 fprintf(f, " has_stable_pstate = %u\n", info->has_stable_pstate); in ac_print_gpu_info()
1828 fprintf(f, " has_scheduled_fence_dependency = %u\n", info->has_scheduled_fence_dependency); in ac_print_gpu_info()
1829 fprintf(f, " has_gang_submit = %u\n", info->has_gang_submit); in ac_print_gpu_info()
1830 fprintf(f, " has_gpuvm_fault_query = %u\n", info->has_gpuvm_fault_query); in ac_print_gpu_info()
1831 fprintf(f, " register_shadowing_required = %u\n", info->register_shadowing_required); in ac_print_gpu_info()
1832 fprintf(f, " has_fw_based_shadowing = %u\n", info->has_fw_based_shadowing); in ac_print_gpu_info()
1833 if (info->has_fw_based_shadowing) { in ac_print_gpu_info()
1835 info->fw_based_mcbp.shadow_size, in ac_print_gpu_info()
1836 info->fw_based_mcbp.shadow_alignment); in ac_print_gpu_info()
1838 info->fw_based_mcbp.csa_size, in ac_print_gpu_info()
1839 info->fw_based_mcbp.csa_alignment); in ac_print_gpu_info()
1842 fprintf(f, " has_tmz_support = %u\n", info->has_tmz_support); in ac_print_gpu_info()
1844 if (info->max_submitted_ibs[i]) { in ac_print_gpu_info()
1846 info->max_submitted_ibs[i]); in ac_print_gpu_info()
1849 fprintf(f, " kernel_has_modifiers = %u\n", info->kernel_has_modifiers); in ac_print_gpu_info()
1850 fprintf(f, " uses_kernel_cu_mask = %u\n", info->uses_kernel_cu_mask); in ac_print_gpu_info()
1852 fprintf(f, "Shader core info:\n"); in ac_print_gpu_info()
1853 for (unsigned i = 0; i < info->max_se; i++) { in ac_print_gpu_info()
1854 for (unsigned j = 0; j < info->max_sa_per_se; j++) { in ac_print_gpu_info()
1856 info->cu_mask[i][j], util_bitcount(info->cu_mask[i][j]), in ac_print_gpu_info()
1857 info->spi_cu_en & BITFIELD_MASK(util_bitcount(info->cu_mask[i][j]))); in ac_print_gpu_info()
1860 fprintf(f, " spi_cu_en_has_effect = %i\n", info->spi_cu_en_has_effect); in ac_print_gpu_info()
1861 fprintf(f, " max_good_cu_per_sa = %i\n", info->max_good_cu_per_sa); in ac_print_gpu_info()
1862 fprintf(f, " min_good_cu_per_sa = %i\n", info->min_good_cu_per_sa); in ac_print_gpu_info()
1863 fprintf(f, " max_se = %i\n", info->max_se); in ac_print_gpu_info()
1864 fprintf(f, " max_sa_per_se = %i\n", info->max_sa_per_se); in ac_print_gpu_info()
1865 fprintf(f, " num_cu_per_sh = %i\n", info->num_cu_per_sh); in ac_print_gpu_info()
1866 fprintf(f, " max_waves_per_simd = %i\n", info->max_waves_per_simd); in ac_print_gpu_info()
1867 fprintf(f, " num_physical_sgprs_per_simd = %i\n", info->num_physical_sgprs_per_simd); in ac_print_gpu_info()
1869 info->num_physical_wave64_vgprs_per_simd); in ac_print_gpu_info()
1870 fprintf(f, " num_simd_per_compute_unit = %i\n", info->num_simd_per_compute_unit); in ac_print_gpu_info()
1871 fprintf(f, " min_sgpr_alloc = %i\n", info->min_sgpr_alloc); in ac_print_gpu_info()
1872 fprintf(f, " max_sgpr_alloc = %i\n", info->max_sgpr_alloc); in ac_print_gpu_info()
1873 fprintf(f, " sgpr_alloc_granularity = %i\n", info->sgpr_alloc_granularity); in ac_print_gpu_info()
1874 fprintf(f, " min_wave64_vgpr_alloc = %i\n", info->min_wave64_vgpr_alloc); in ac_print_gpu_info()
1875 fprintf(f, " max_vgpr_alloc = %i\n", info->max_vgpr_alloc); in ac_print_gpu_info()
1876 fprintf(f, " wave64_vgpr_alloc_granularity = %i\n", info->wave64_vgpr_alloc_granularity); in ac_print_gpu_info()
1877 fprintf(f, " max_scratch_waves = %i\n", info->max_scratch_waves); in ac_print_gpu_info()
1878 fprintf(f, " attribute_ring_size_per_se = %u\n", info->attribute_ring_size_per_se); in ac_print_gpu_info()
1880 fprintf(f, "Render backend info:\n"); in ac_print_gpu_info()
1881 fprintf(f, " pa_sc_tile_steering_override = 0x%x\n", info->pa_sc_tile_steering_override); in ac_print_gpu_info()
1882 fprintf(f, " max_render_backends = %i\n", info->max_render_backends); in ac_print_gpu_info()
1883 fprintf(f, " num_tile_pipes = %i\n", info->num_tile_pipes); in ac_print_gpu_info()
1884 fprintf(f, " pipe_interleave_bytes = %i\n", info->pipe_interleave_bytes); in ac_print_gpu_info()
1885 fprintf(f, " enabled_rb_mask = 0x%" PRIx64 "\n", info->enabled_rb_mask); in ac_print_gpu_info()
1886 fprintf(f, " max_alignment = %u\n", (unsigned)info->max_alignment); in ac_print_gpu_info()
1887 fprintf(f, " pbb_max_alloc_count = %u\n", info->pbb_max_alloc_count); in ac_print_gpu_info()
1889 fprintf(f, "GB_ADDR_CONFIG: 0x%08x\n", info->gb_addr_config); in ac_print_gpu_info()
1890 if (info->gfx_level >= GFX10) { in ac_print_gpu_info()
1891 fprintf(f, " num_pipes = %u\n", 1 << G_0098F8_NUM_PIPES(info->gb_addr_config)); in ac_print_gpu_info()
1893 256 << G_0098F8_PIPE_INTERLEAVE_SIZE_GFX9(info->gb_addr_config)); in ac_print_gpu_info()
1895 1 << G_0098F8_MAX_COMPRESSED_FRAGS(info->gb_addr_config)); in ac_print_gpu_info()
1896 if (info->gfx_level >= GFX10_3) in ac_print_gpu_info()
1897 fprintf(f, " num_pkrs = %u\n", 1 << G_0098F8_NUM_PKRS(info->gb_addr_config)); in ac_print_gpu_info()
1898 } else if (info->gfx_level == GFX9) { in ac_print_gpu_info()
1899 fprintf(f, " num_pipes = %u\n", 1 << G_0098F8_NUM_PIPES(info->gb_addr_config)); in ac_print_gpu_info()
1901 256 << G_0098F8_PIPE_INTERLEAVE_SIZE_GFX9(info->gb_addr_config)); in ac_print_gpu_info()
1903 1 << G_0098F8_MAX_COMPRESSED_FRAGS(info->gb_addr_config)); in ac_print_gpu_info()
1905 1 << G_0098F8_BANK_INTERLEAVE_SIZE(info->gb_addr_config)); in ac_print_gpu_info()
1906 fprintf(f, " num_banks = %u\n", 1 << G_0098F8_NUM_BANKS(info->gb_addr_config)); in ac_print_gpu_info()
1908 16 << G_0098F8_SHADER_ENGINE_TILE_SIZE(info->gb_addr_config)); in ac_print_gpu_info()
1910 1 << G_0098F8_NUM_SHADER_ENGINES_GFX9(info->gb_addr_config)); in ac_print_gpu_info()
1911 fprintf(f, " num_gpus = %u (raw)\n", G_0098F8_NUM_GPUS_GFX9(info->gb_addr_config)); in ac_print_gpu_info()
1913 G_0098F8_MULTI_GPU_TILE_SIZE(info->gb_addr_config)); in ac_print_gpu_info()
1914 fprintf(f, " num_rb_per_se = %u\n", 1 << G_0098F8_NUM_RB_PER_SE(info->gb_addr_config)); in ac_print_gpu_info()
1915 fprintf(f, " row_size = %u\n", 1024 << G_0098F8_ROW_SIZE(info->gb_addr_config)); in ac_print_gpu_info()
1916 … fprintf(f, " num_lower_pipes = %u (raw)\n", G_0098F8_NUM_LOWER_PIPES(info->gb_addr_config)); in ac_print_gpu_info()
1917 fprintf(f, " se_enable = %u (raw)\n", G_0098F8_SE_ENABLE(info->gb_addr_config)); in ac_print_gpu_info()
1919 fprintf(f, " num_pipes = %u\n", 1 << G_0098F8_NUM_PIPES(info->gb_addr_config)); in ac_print_gpu_info()
1921 256 << G_0098F8_PIPE_INTERLEAVE_SIZE_GFX6(info->gb_addr_config)); in ac_print_gpu_info()
1923 1 << G_0098F8_BANK_INTERLEAVE_SIZE(info->gb_addr_config)); in ac_print_gpu_info()
1925 1 << G_0098F8_NUM_SHADER_ENGINES_GFX6(info->gb_addr_config)); in ac_print_gpu_info()
1927 16 << G_0098F8_SHADER_ENGINE_TILE_SIZE(info->gb_addr_config)); in ac_print_gpu_info()
1928 fprintf(f, " num_gpus = %u (raw)\n", G_0098F8_NUM_GPUS_GFX6(info->gb_addr_config)); in ac_print_gpu_info()
1930 G_0098F8_MULTI_GPU_TILE_SIZE(info->gb_addr_config)); in ac_print_gpu_info()
1931 fprintf(f, " row_size = %u\n", 1024 << G_0098F8_ROW_SIZE(info->gb_addr_config)); in ac_print_gpu_info()
1932 … fprintf(f, " num_lower_pipes = %u (raw)\n", G_0098F8_NUM_LOWER_PIPES(info->gb_addr_config)); in ac_print_gpu_info()
1967 void ac_get_raster_config(const struct radeon_info *info, uint32_t *raster_config_p, in ac_get_raster_config() argument
1972 switch (info->family) { in ac_get_raster_config()
2033 if (info->family == CHIP_KAVERI && !info->is_amdgpu) in ac_get_raster_config()
2039 if (info->family == CHIP_FIJI && info->cik_macrotile_mode_array[0] == 0x000000e8) { in ac_get_raster_config()
2048 se_tile_repeat = MAX2(se_width, se_height) * info->max_se; in ac_get_raster_config()
2056 void ac_get_harvested_configs(const struct radeon_info *info, unsigned raster_config, in ac_get_harvested_configs() argument
2059 unsigned sh_per_se = MAX2(info->max_sa_per_se, 1); in ac_get_harvested_configs()
2060 unsigned num_se = MAX2(info->max_se, 1); in ac_get_harvested_configs()
2061 unsigned rb_mask = info->enabled_rb_mask; in ac_get_harvested_configs()
2062 unsigned num_rb = MIN2(info->max_render_backends, 16); in ac_get_harvested_configs()
2077 if (info->gfx_level >= GFX7) { in ac_get_harvested_configs()
2155 ac_get_compute_resource_limits(const struct radeon_info *info, unsigned waves_per_threadgroup, in ac_get_compute_resource_limits() argument
2160 if (info->gfx_level >= GFX7) { in ac_get_compute_resource_limits()
2161 unsigned num_cu_per_se = info->num_cu / info->num_se; in ac_get_compute_resource_limits()
2164 if (info->gfx_level == GFX9 && !max_waves_per_sh) { in ac_get_compute_resource_limits()
2165 max_waves_per_sh = info->max_good_cu_per_sa * info->num_simd_per_compute_unit * in ac_get_compute_resource_limits()
2166 info->max_waves_per_simd; in ac_get_compute_resource_limits()
2189 void ac_get_hs_info(const struct radeon_info *info, in ac_get_hs_info() argument
2192 bool double_offchip_buffers = info->gfx_level >= GFX7 && in ac_get_hs_info()
2193 info->family != CHIP_CARRIZO && in ac_get_hs_info()
2194 info->family != CHIP_STONEY; in ac_get_hs_info()
2201 info->family == CHIP_HAWAII ? 4096 : 8192; in ac_get_hs_info()
2215 if (info->gfx_level >= GFX11) { in ac_get_hs_info()
2217 } else if (info->gfx_level >= GFX10) { in ac_get_hs_info()
2219 } else if (info->family == CHIP_VEGA12 || info->family == CHIP_VEGA20) { in ac_get_hs_info()
2226 max_offchip_buffers = max_offchip_buffers_per_se * info->max_se; in ac_get_hs_info()
2232 assert(info->family == CHIP_HAWAII); in ac_get_hs_info()
2239 switch (info->gfx_level) { in ac_get_hs_info()
2256 if (info->gfx_level >= GFX11) { in ac_get_hs_info()
2260 } else if (info->gfx_level >= GFX10_3) { in ac_get_hs_info()
2263 } else if (info->gfx_level >= GFX7) { in ac_get_hs_info()
2264 if (info->gfx_level >= GFX8) in ac_get_hs_info()
2274 hs->tess_factor_ring_size = 48 * 1024 * info->max_se; in ac_get_hs_info()
2304 void ac_get_task_info(const struct radeon_info *info, in ac_get_task_info() argument
2307 const uint16_t num_entries = get_task_num_entries(info->family); in ac_get_task_info()