1 1.1 riastrad /* $NetBSD: intel_device_info.h,v 1.2 2021/12/18 23:45:28 riastradh Exp $ */ 2 1.1 riastrad 3 1.1 riastrad /* 4 1.1 riastrad * Copyright 2014-2017 Intel Corporation 5 1.1 riastrad * 6 1.1 riastrad * Permission is hereby granted, free of charge, to any person obtaining a 7 1.1 riastrad * copy of this software and associated documentation files (the "Software"), 8 1.1 riastrad * to deal in the Software without restriction, including without limitation 9 1.1 riastrad * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 1.1 riastrad * and/or sell copies of the Software, and to permit persons to whom the 11 1.1 riastrad * Software is furnished to do so, subject to the following conditions: 12 1.1 riastrad * 13 1.1 riastrad * The above copyright notice and this permission notice (including the next 14 1.1 riastrad * paragraph) shall be included in all copies or substantial portions of the 15 1.1 riastrad * Software. 16 1.1 riastrad * 17 1.1 riastrad * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 1.1 riastrad * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 1.1 riastrad * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 1.1 riastrad * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 1.1 riastrad * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 1.1 riastrad * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23 1.1 riastrad * IN THE SOFTWARE. 24 1.1 riastrad * 25 1.1 riastrad */ 26 1.1 riastrad 27 1.1 riastrad #ifndef _INTEL_DEVICE_INFO_H_ 28 1.1 riastrad #define _INTEL_DEVICE_INFO_H_ 29 1.1 riastrad 30 1.1 riastrad #include <uapi/drm/i915_drm.h> 31 1.1 riastrad 32 1.1 riastrad #include "display/intel_display.h" 33 1.1 riastrad 34 1.1 riastrad #include "gt/intel_engine_types.h" 35 1.1 riastrad #include "gt/intel_context_types.h" 36 1.1 riastrad #include "gt/intel_sseu.h" 37 1.1 riastrad 38 1.1 riastrad struct drm_printer; 39 1.1 riastrad struct drm_i915_private; 40 1.1 riastrad 41 1.1 riastrad /* Keep in gen based order, and chronological order within a gen */ 42 1.1 riastrad enum intel_platform { 43 1.1 riastrad INTEL_PLATFORM_UNINITIALIZED = 0, 44 1.1 riastrad /* gen2 */ 45 1.1 riastrad INTEL_I830, 46 1.1 riastrad INTEL_I845G, 47 1.1 riastrad INTEL_I85X, 48 1.1 riastrad INTEL_I865G, 49 1.1 riastrad /* gen3 */ 50 1.1 riastrad INTEL_I915G, 51 1.1 riastrad INTEL_I915GM, 52 1.1 riastrad INTEL_I945G, 53 1.1 riastrad INTEL_I945GM, 54 1.1 riastrad INTEL_G33, 55 1.1 riastrad INTEL_PINEVIEW, 56 1.1 riastrad /* gen4 */ 57 1.1 riastrad INTEL_I965G, 58 1.1 riastrad INTEL_I965GM, 59 1.1 riastrad INTEL_G45, 60 1.1 riastrad INTEL_GM45, 61 1.1 riastrad /* gen5 */ 62 1.1 riastrad INTEL_IRONLAKE, 63 1.1 riastrad /* gen6 */ 64 1.1 riastrad INTEL_SANDYBRIDGE, 65 1.1 riastrad /* gen7 */ 66 1.1 riastrad INTEL_IVYBRIDGE, 67 1.1 riastrad INTEL_VALLEYVIEW, 68 1.1 riastrad INTEL_HASWELL, 69 1.1 riastrad /* gen8 */ 70 1.1 riastrad INTEL_BROADWELL, 71 1.1 riastrad INTEL_CHERRYVIEW, 72 1.1 riastrad /* gen9 */ 73 1.1 riastrad INTEL_SKYLAKE, 74 1.1 riastrad INTEL_BROXTON, 75 1.1 riastrad INTEL_KABYLAKE, 76 1.1 riastrad INTEL_GEMINILAKE, 77 1.1 riastrad INTEL_COFFEELAKE, 78 1.1 riastrad /* gen10 */ 79 1.1 riastrad INTEL_CANNONLAKE, 80 1.1 riastrad /* gen11 */ 81 1.1 riastrad INTEL_ICELAKE, 82 1.1 riastrad INTEL_ELKHARTLAKE, 83 1.1 riastrad /* gen12 */ 84 1.1 riastrad INTEL_TIGERLAKE, 85 1.1 riastrad INTEL_MAX_PLATFORMS 86 1.1 riastrad }; 87 1.1 riastrad 88 1.1 riastrad /* 89 1.1 riastrad * Subplatform bits share the same namespace per parent platform. In other words 90 1.1 riastrad * it is fine for the same bit to be used on multiple parent platforms. 91 1.1 riastrad */ 92 1.1 riastrad 93 1.1 riastrad #define INTEL_SUBPLATFORM_BITS (3) 94 1.1 riastrad 95 1.1 riastrad /* HSW/BDW/SKL/KBL/CFL */ 96 1.1 riastrad #define INTEL_SUBPLATFORM_ULT (0) 97 1.1 riastrad #define INTEL_SUBPLATFORM_ULX (1) 98 1.1 riastrad 99 1.1 riastrad /* CNL/ICL */ 100 1.1 riastrad #define INTEL_SUBPLATFORM_PORTF (0) 101 1.1 riastrad 102 1.1 riastrad enum intel_ppgtt_type { 103 1.1 riastrad INTEL_PPGTT_NONE = I915_GEM_PPGTT_NONE, 104 1.1 riastrad INTEL_PPGTT_ALIASING = I915_GEM_PPGTT_ALIASING, 105 1.1 riastrad INTEL_PPGTT_FULL = I915_GEM_PPGTT_FULL, 106 1.1 riastrad }; 107 1.1 riastrad 108 1.1 riastrad #define DEV_INFO_FOR_EACH_FLAG(func) \ 109 1.1 riastrad func(is_mobile); \ 110 1.1 riastrad func(is_lp); \ 111 1.1 riastrad func(require_force_probe); \ 112 1.1 riastrad func(is_dgfx); \ 113 1.1 riastrad /* Keep has_* in alphabetical order */ \ 114 1.1 riastrad func(has_64bit_reloc); \ 115 1.1 riastrad func(gpu_reset_clobbers_display); \ 116 1.1 riastrad func(has_reset_engine); \ 117 1.1 riastrad func(has_fpga_dbg); \ 118 1.1 riastrad func(has_global_mocs); \ 119 1.1 riastrad func(has_gt_uc); \ 120 1.1 riastrad func(has_l3_dpf); \ 121 1.1 riastrad func(has_llc); \ 122 1.1 riastrad func(has_logical_ring_contexts); \ 123 1.1 riastrad func(has_logical_ring_elsq); \ 124 1.1 riastrad func(has_logical_ring_preemption); \ 125 1.1 riastrad func(has_pooled_eu); \ 126 1.1 riastrad func(has_rc6); \ 127 1.1 riastrad func(has_rc6p); \ 128 1.1 riastrad func(has_rps); \ 129 1.1 riastrad func(has_runtime_pm); \ 130 1.1 riastrad func(has_snoop); \ 131 1.1 riastrad func(has_coherent_ggtt); \ 132 1.1 riastrad func(unfenced_needs_alignment); \ 133 1.1 riastrad func(hws_needs_physical); 134 1.1 riastrad 135 1.1 riastrad #define DEV_INFO_DISPLAY_FOR_EACH_FLAG(func) \ 136 1.1 riastrad /* Keep in alphabetical order */ \ 137 1.1 riastrad func(cursor_needs_physical); \ 138 1.1 riastrad func(has_csr); \ 139 1.1 riastrad func(has_ddi); \ 140 1.1 riastrad func(has_dp_mst); \ 141 1.1 riastrad func(has_dsb); \ 142 1.1 riastrad func(has_dsc); \ 143 1.1 riastrad func(has_fbc); \ 144 1.1 riastrad func(has_gmch); \ 145 1.1 riastrad func(has_hdcp); \ 146 1.1 riastrad func(has_hotplug); \ 147 1.1 riastrad func(has_ipc); \ 148 1.1 riastrad func(has_modular_fia); \ 149 1.1 riastrad func(has_overlay); \ 150 1.1 riastrad func(has_psr); \ 151 1.1 riastrad func(overlay_needs_physical); \ 152 1.1 riastrad func(supports_tv); 153 1.1 riastrad 154 1.1 riastrad struct intel_device_info { 155 1.1 riastrad u16 gen_mask; 156 1.1 riastrad 157 1.1 riastrad u8 gen; 158 1.1 riastrad u8 gt; /* GT number, 0 if undefined */ 159 1.1 riastrad intel_engine_mask_t engine_mask; /* Engines supported by the HW */ 160 1.1 riastrad 161 1.1 riastrad enum intel_platform platform; 162 1.1 riastrad 163 1.1 riastrad enum intel_ppgtt_type ppgtt_type; 164 1.1 riastrad unsigned int ppgtt_size; /* log2, e.g. 31/32/48 bits */ 165 1.1 riastrad 166 1.1 riastrad unsigned int page_sizes; /* page sizes supported by the HW */ 167 1.1 riastrad 168 1.1 riastrad u32 memory_regions; /* regions supported by the HW */ 169 1.1 riastrad 170 1.1 riastrad u32 display_mmio_offset; 171 1.1 riastrad 172 1.1 riastrad u8 pipe_mask; 173 1.1 riastrad 174 1.1 riastrad #define DEFINE_FLAG(name) u8 name:1 175 1.1 riastrad DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG); 176 1.1 riastrad #undef DEFINE_FLAG 177 1.1 riastrad 178 1.1 riastrad struct { 179 1.1 riastrad #define DEFINE_FLAG(name) u8 name:1 180 1.1 riastrad DEV_INFO_DISPLAY_FOR_EACH_FLAG(DEFINE_FLAG); 181 1.1 riastrad #undef DEFINE_FLAG 182 1.1 riastrad } display; 183 1.1 riastrad 184 1.1 riastrad u16 ddb_size; /* in blocks */ 185 1.1 riastrad 186 1.1 riastrad /* Register offsets for the various display pipes and transcoders */ 187 1.1 riastrad int pipe_offsets[I915_MAX_TRANSCODERS]; 188 1.1 riastrad int trans_offsets[I915_MAX_TRANSCODERS]; 189 1.1 riastrad int cursor_offsets[I915_MAX_PIPES]; 190 1.1 riastrad 191 1.1 riastrad struct color_luts { 192 1.1 riastrad u32 degamma_lut_size; 193 1.1 riastrad u32 gamma_lut_size; 194 1.1 riastrad u32 degamma_lut_tests; 195 1.1 riastrad u32 gamma_lut_tests; 196 1.1 riastrad } color; 197 1.1 riastrad }; 198 1.1 riastrad 199 1.1 riastrad struct intel_runtime_info { 200 1.1 riastrad /* 201 1.1 riastrad * Platform mask is used for optimizing or-ed IS_PLATFORM calls into 202 1.1 riastrad * into single runtime conditionals, and also to provide groundwork 203 1.1 riastrad * for future per platform, or per SKU build optimizations. 204 1.1 riastrad * 205 1.1 riastrad * Array can be extended when necessary if the corresponding 206 1.1 riastrad * BUILD_BUG_ON is hit. 207 1.1 riastrad */ 208 1.1 riastrad u32 platform_mask[2]; 209 1.1 riastrad 210 1.1 riastrad u16 device_id; 211 1.1 riastrad 212 1.1 riastrad u8 num_sprites[I915_MAX_PIPES]; 213 1.1 riastrad u8 num_scalers[I915_MAX_PIPES]; 214 1.1 riastrad 215 1.1 riastrad u8 num_engines; 216 1.1 riastrad 217 1.1 riastrad /* Slice/subslice/EU info */ 218 1.1 riastrad struct sseu_dev_info sseu; 219 1.1 riastrad 220 1.1 riastrad u32 cs_timestamp_frequency_khz; 221 1.1 riastrad 222 1.1 riastrad /* Media engine access to SFC per instance */ 223 1.1 riastrad u8 vdbox_sfc_access; 224 1.1 riastrad }; 225 1.1 riastrad 226 1.1 riastrad struct intel_driver_caps { 227 1.1 riastrad unsigned int scheduler; 228 1.1 riastrad bool has_logical_contexts:1; 229 1.1 riastrad }; 230 1.1 riastrad 231 1.1 riastrad const char *intel_platform_name(enum intel_platform platform); 232 1.1 riastrad 233 1.1 riastrad void intel_device_info_subplatform_init(struct drm_i915_private *dev_priv); 234 1.1 riastrad void intel_device_info_runtime_init(struct drm_i915_private *dev_priv); 235 1.1 riastrad 236 1.1 riastrad void intel_device_info_print_static(const struct intel_device_info *info, 237 1.1 riastrad struct drm_printer *p); 238 1.1 riastrad void intel_device_info_print_runtime(const struct intel_runtime_info *info, 239 1.1 riastrad struct drm_printer *p); 240 1.1 riastrad void intel_device_info_print_topology(const struct sseu_dev_info *sseu, 241 1.1 riastrad struct drm_printer *p); 242 1.1 riastrad 243 1.1 riastrad void intel_device_info_init_mmio(struct drm_i915_private *dev_priv); 244 1.1 riastrad 245 1.1 riastrad void intel_driver_caps_print(const struct intel_driver_caps *caps, 246 1.1 riastrad struct drm_printer *p); 247 1.1 riastrad 248 1.1 riastrad #endif 249