1 /* 2 * Copyright © 2017 Advanced Micro Devices, Inc. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining 5 * a copy of this software and associated documentation files (the 6 * "Software"), to deal in the Software without restriction, including 7 * without limitation the rights to use, copy, modify, merge, publish, 8 * distribute, sub license, and/or sell copies of the Software, and to 9 * permit persons to whom the Software is furnished to do so, subject to 10 * the following conditions: 11 * 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 13 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 14 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 15 * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS 16 * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 18 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 19 * USE OR OTHER DEALINGS IN THE SOFTWARE. 20 * 21 * The above copyright notice and this permission notice (including the 22 * next paragraph) shall be included in all copies or substantial portions 23 * of the Software. 24 */ 25 26 #ifndef AC_GPU_INFO_H 27 #define AC_GPU_INFO_H 28 29 #include "amd_family.h" 30 31 #include <stdbool.h> 32 #include <stddef.h> 33 #include <stdint.h> 34 #include <stdio.h> 35 36 #ifdef __cplusplus 37 extern "C" { 38 #endif 39 40 struct amdgpu_gpu_info; 41 42 struct radeon_info { 43 /* PCI info: domain:bus:dev:func */ 44 uint32_t pci_domain; 45 uint32_t pci_bus; 46 uint32_t pci_dev; 47 uint32_t pci_func; 48 49 /* Device info. */ 50 const char *name; 51 const char *marketing_name; 52 bool is_pro_graphics; 53 uint32_t pci_id; 54 uint32_t pci_rev_id; 55 enum radeon_family family; 56 enum chip_class chip_class; 57 uint32_t family_id; 58 uint32_t chip_external_rev; 59 uint32_t clock_crystal_freq; 60 61 /* Features. */ 62 bool has_graphics; /* false if the chip is compute-only */ 63 uint32_t num_rings[NUM_RING_TYPES]; 64 uint32_t ib_pad_dw_mask[NUM_RING_TYPES]; 65 bool has_clear_state; 66 bool has_distributed_tess; 67 bool has_dcc_constant_encode; 68 bool has_rbplus; /* if RB+ registers exist */ 69 bool rbplus_allowed; /* if RB+ is allowed */ 70 bool has_load_ctx_reg_pkt; 71 bool has_out_of_order_rast; 72 bool has_packed_math_16bit; 73 bool cpdma_prefetch_writes_memory; 74 bool has_gfx9_scissor_bug; 75 bool has_tc_compat_zrange_bug; 76 bool has_msaa_sample_loc_bug; 77 bool has_ls_vgpr_init_bug; 78 79 /* Display features. */ 80 /* There are 2 display DCC codepaths, because display expects unaligned DCC. */ 81 /* Disable RB and pipe alignment to skip the retile blit. (1 RB chips only) */ 82 bool use_display_dcc_unaligned; 83 /* Allocate both aligned and unaligned DCC and use the retile blit. */ 84 bool use_display_dcc_with_retile_blit; 85 86 /* Memory info. */ 87 uint32_t pte_fragment_size; 88 uint32_t gart_page_size; 89 uint64_t gart_size; 90 uint64_t vram_size; 91 uint64_t vram_vis_size; 92 uint32_t vram_bit_width; 93 uint32_t vram_type; 94 unsigned gds_size; 95 unsigned gds_gfx_partition_size; 96 uint64_t max_alloc_size; 97 uint32_t min_alloc_size; 98 uint32_t address32_hi; 99 bool has_dedicated_vram; 100 bool has_l2_uncached; 101 bool r600_has_virtual_memory; 102 uint32_t num_sdp_interfaces; 103 uint32_t num_tcc_blocks; 104 uint32_t tcc_cache_line_size; 105 bool tcc_harvested; 106 unsigned pc_lines; 107 uint32_t lds_size_per_workgroup; 108 uint32_t lds_granularity; 109 uint32_t max_memory_clock; 110 uint32_t ce_ram_size; 111 uint32_t l1_cache_size; 112 uint32_t l2_cache_size; 113 114 /* CP info. */ 115 bool gfx_ib_pad_with_type2; 116 unsigned ib_alignment; /* both start and size alignment */ 117 uint32_t me_fw_version; 118 uint32_t me_fw_feature; 119 uint32_t pfp_fw_version; 120 uint32_t pfp_fw_feature; 121 uint32_t ce_fw_version; 122 uint32_t ce_fw_feature; 123 124 /* Multimedia info. */ 125 bool has_hw_decode; 126 bool uvd_enc_supported; 127 uint32_t uvd_fw_version; 128 uint32_t vce_fw_version; 129 uint32_t vce_harvest_config; 130 131 /* Kernel & winsys capabilities. */ 132 uint32_t drm_major; /* version */ 133 uint32_t drm_minor; 134 uint32_t drm_patchlevel; 135 bool is_amdgpu; 136 bool has_userptr; 137 bool has_syncobj; 138 bool has_syncobj_wait_for_submit; 139 bool has_timeline_syncobj; 140 bool has_fence_to_handle; 141 bool has_ctx_priority; 142 bool has_local_buffers; 143 bool kernel_flushes_hdp_before_ib; 144 bool htile_cmask_support_1d_tiling; 145 bool si_TA_CS_BC_BASE_ADDR_allowed; 146 bool has_bo_metadata; 147 bool has_gpu_reset_status_query; 148 bool has_eqaa_surface_allocator; 149 bool has_format_bc1_through_bc7; 150 bool kernel_flushes_tc_l2_after_ib; 151 bool has_indirect_compute_dispatch; 152 bool has_unaligned_shader_loads; 153 bool has_sparse_vm_mappings; 154 bool has_2d_tiling; 155 bool has_read_registers_query; 156 bool has_gds_ordered_append; 157 bool has_scheduled_fence_dependency; 158 /* Whether SR-IOV is enabled or amdgpu.mcbp=1 was set on the kernel command line. */ 159 bool mid_command_buffer_preemption_enabled; 160 bool has_tmz_support; 161 162 /* Shader cores. */ 163 uint32_t cu_mask[4][2]; 164 uint32_t r600_max_quad_pipes; /* wave size / 16 */ 165 uint32_t max_shader_clock; 166 uint32_t num_good_compute_units; 167 uint32_t max_good_cu_per_sa; 168 uint32_t min_good_cu_per_sa; /* min != max if SAs have different # of CUs */ 169 uint32_t max_se; /* number of shader engines incl. disabled ones */ 170 uint32_t num_se; /* number of enabled shader engines */ 171 uint32_t max_sh_per_se; /* shader arrays per shader engine */ 172 uint32_t max_wave64_per_simd; 173 uint32_t num_physical_sgprs_per_simd; 174 uint32_t num_physical_wave64_vgprs_per_simd; 175 uint32_t num_simd_per_compute_unit; 176 uint32_t min_sgpr_alloc; 177 uint32_t max_sgpr_alloc; 178 uint32_t sgpr_alloc_granularity; 179 uint32_t min_wave64_vgpr_alloc; 180 uint32_t max_vgpr_alloc; 181 uint32_t wave64_vgpr_alloc_granularity; 182 bool use_late_alloc; /* VS and GS: late pos/param allocation */ 183 184 /* Render backends (color + depth blocks). */ 185 uint32_t r300_num_gb_pipes; 186 uint32_t r300_num_z_pipes; 187 uint32_t r600_gb_backend_map; /* R600 harvest config */ 188 bool r600_gb_backend_map_valid; 189 uint32_t r600_num_banks; 190 uint32_t gb_addr_config; 191 uint32_t pa_sc_tile_steering_override; /* CLEAR_STATE also sets this */ 192 uint32_t num_render_backends; 193 uint32_t num_tile_pipes; /* pipe count from PIPE_CONFIG */ 194 uint32_t pipe_interleave_bytes; 195 uint32_t enabled_rb_mask; /* GCN harvest config */ 196 uint64_t max_alignment; /* from addrlib */ 197 uint32_t pbb_max_alloc_count; 198 199 /* Tile modes. */ 200 uint32_t si_tile_mode_array[32]; 201 uint32_t cik_macrotile_mode_array[16]; 202 }; 203 204 bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info, 205 struct amdgpu_gpu_info *amdinfo); 206 207 void ac_compute_driver_uuid(char *uuid, size_t size); 208 209 void ac_compute_device_uuid(struct radeon_info *info, char *uuid, size_t size); 210 void ac_print_gpu_info(struct radeon_info *info, FILE *f); 211 int ac_get_gs_table_depth(enum chip_class chip_class, enum radeon_family family); 212 void ac_get_raster_config(struct radeon_info *info, uint32_t *raster_config_p, 213 uint32_t *raster_config_1_p, uint32_t *se_tile_repeat_p); 214 void ac_get_harvested_configs(struct radeon_info *info, unsigned raster_config, 215 unsigned *cik_raster_config_1_p, unsigned *raster_config_se); 216 unsigned ac_get_compute_resource_limits(struct radeon_info *info, unsigned waves_per_threadgroup, 217 unsigned max_waves_per_sh, unsigned threadgroups_per_cu); 218 219 #ifdef __cplusplus 220 } 221 #endif 222 223 #endif /* AC_GPU_INFO_H */ 224