| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042 |
- /*
- * Copyright © 2016 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- */
- #include <drm/drm_color_mgmt.h>
- #include <drm/drm_drv.h>
- #include <drm/intel/pciids.h>
- #include "display/intel_display_driver.h"
- #include "gt/intel_gt_regs.h"
- #include "gt/intel_sa_media.h"
- #include "gem/i915_gem_object_types.h"
- #include "i915_driver.h"
- #include "i915_drv.h"
- #include "i915_pci.h"
- #include "i915_reg.h"
- #include "intel_pci_config.h"
- __diag_push();
- __diag_ignore_all("-Woverride-init", "Allow field initialization overrides for device info");
- #define PLATFORM(x) .platform = (x)
- #define GEN(x) \
- .__runtime.graphics.ip.ver = (x), \
- .__runtime.media.ip.ver = (x)
- #define LEGACY_CACHELEVEL \
- .cachelevel_to_pat = { \
- [I915_CACHE_NONE] = 0, \
- [I915_CACHE_LLC] = 1, \
- [I915_CACHE_L3_LLC] = 2, \
- [I915_CACHE_WT] = 3, \
- }
- #define TGL_CACHELEVEL \
- .cachelevel_to_pat = { \
- [I915_CACHE_NONE] = 3, \
- [I915_CACHE_LLC] = 0, \
- [I915_CACHE_L3_LLC] = 0, \
- [I915_CACHE_WT] = 2, \
- }
- #define MTL_CACHELEVEL \
- .cachelevel_to_pat = { \
- [I915_CACHE_NONE] = 2, \
- [I915_CACHE_LLC] = 3, \
- [I915_CACHE_L3_LLC] = 3, \
- [I915_CACHE_WT] = 1, \
- }
- /* Keep in gen based order, and chronological order within a gen */
- #define GEN_DEFAULT_PAGE_SIZES \
- .__runtime.page_sizes = I915_GTT_PAGE_SIZE_4K
- #define GEN_DEFAULT_REGIONS \
- .memory_regions = BIT(INTEL_REGION_SMEM) | BIT(INTEL_REGION_STOLEN_SMEM)
- #define I830_FEATURES \
- GEN(2), \
- .is_mobile = 1, \
- .gpu_reset_clobbers_display = true, \
- .has_3d_pipeline = 1, \
- .hws_needs_physical = 1, \
- .unfenced_needs_alignment = 1, \
- .platform_engine_mask = BIT(RCS0), \
- .has_snoop = true, \
- .has_coherent_ggtt = false, \
- .dma_mask_size = 32, \
- .max_pat_index = 3, \
- GEN_DEFAULT_PAGE_SIZES, \
- GEN_DEFAULT_REGIONS, \
- LEGACY_CACHELEVEL
- #define I845_FEATURES \
- GEN(2), \
- .has_3d_pipeline = 1, \
- .gpu_reset_clobbers_display = true, \
- .hws_needs_physical = 1, \
- .unfenced_needs_alignment = 1, \
- .platform_engine_mask = BIT(RCS0), \
- .has_snoop = true, \
- .has_coherent_ggtt = false, \
- .dma_mask_size = 32, \
- .max_pat_index = 3, \
- GEN_DEFAULT_PAGE_SIZES, \
- GEN_DEFAULT_REGIONS, \
- LEGACY_CACHELEVEL
- static const struct intel_device_info i830_info = {
- I830_FEATURES,
- PLATFORM(INTEL_I830),
- };
- static const struct intel_device_info i845g_info = {
- I845_FEATURES,
- PLATFORM(INTEL_I845G),
- };
- static const struct intel_device_info i85x_info = {
- I830_FEATURES,
- PLATFORM(INTEL_I85X),
- };
- static const struct intel_device_info i865g_info = {
- I845_FEATURES,
- PLATFORM(INTEL_I865G),
- };
- #define GEN3_FEATURES \
- GEN(3), \
- .gpu_reset_clobbers_display = true, \
- .platform_engine_mask = BIT(RCS0), \
- .has_3d_pipeline = 1, \
- .has_snoop = true, \
- .has_coherent_ggtt = true, \
- .dma_mask_size = 32, \
- .max_pat_index = 3, \
- GEN_DEFAULT_PAGE_SIZES, \
- GEN_DEFAULT_REGIONS, \
- LEGACY_CACHELEVEL
- static const struct intel_device_info i915g_info = {
- GEN3_FEATURES,
- PLATFORM(INTEL_I915G),
- .has_coherent_ggtt = false,
- .hws_needs_physical = 1,
- .unfenced_needs_alignment = 1,
- };
- static const struct intel_device_info i915gm_info = {
- GEN3_FEATURES,
- PLATFORM(INTEL_I915GM),
- .is_mobile = 1,
- .hws_needs_physical = 1,
- .unfenced_needs_alignment = 1,
- };
- static const struct intel_device_info i945g_info = {
- GEN3_FEATURES,
- PLATFORM(INTEL_I945G),
- .hws_needs_physical = 1,
- .unfenced_needs_alignment = 1,
- };
- static const struct intel_device_info i945gm_info = {
- GEN3_FEATURES,
- PLATFORM(INTEL_I945GM),
- .is_mobile = 1,
- .hws_needs_physical = 1,
- .unfenced_needs_alignment = 1,
- };
- static const struct intel_device_info g33_info = {
- GEN3_FEATURES,
- PLATFORM(INTEL_G33),
- .dma_mask_size = 36,
- };
- static const struct intel_device_info pnv_g_info = {
- GEN3_FEATURES,
- PLATFORM(INTEL_PINEVIEW),
- .dma_mask_size = 36,
- };
- static const struct intel_device_info pnv_m_info = {
- GEN3_FEATURES,
- PLATFORM(INTEL_PINEVIEW),
- .is_mobile = 1,
- .dma_mask_size = 36,
- };
- #define GEN4_FEATURES \
- GEN(4), \
- .gpu_reset_clobbers_display = true, \
- .platform_engine_mask = BIT(RCS0), \
- .has_3d_pipeline = 1, \
- .has_snoop = true, \
- .has_coherent_ggtt = true, \
- .dma_mask_size = 36, \
- .max_pat_index = 3, \
- GEN_DEFAULT_PAGE_SIZES, \
- GEN_DEFAULT_REGIONS, \
- LEGACY_CACHELEVEL
- static const struct intel_device_info i965g_info = {
- GEN4_FEATURES,
- PLATFORM(INTEL_I965G),
- .hws_needs_physical = 1,
- .has_snoop = false,
- };
- static const struct intel_device_info i965gm_info = {
- GEN4_FEATURES,
- PLATFORM(INTEL_I965GM),
- .is_mobile = 1,
- .hws_needs_physical = 1,
- .has_snoop = false,
- };
- static const struct intel_device_info g45_info = {
- GEN4_FEATURES,
- PLATFORM(INTEL_G45),
- .platform_engine_mask = BIT(RCS0) | BIT(VCS0),
- .gpu_reset_clobbers_display = false,
- };
- static const struct intel_device_info gm45_info = {
- GEN4_FEATURES,
- PLATFORM(INTEL_GM45),
- .is_mobile = 1,
- .platform_engine_mask = BIT(RCS0) | BIT(VCS0),
- .gpu_reset_clobbers_display = false,
- };
- #define GEN5_FEATURES \
- GEN(5), \
- .platform_engine_mask = BIT(RCS0) | BIT(VCS0), \
- .has_3d_pipeline = 1, \
- .has_snoop = true, \
- .has_coherent_ggtt = true, \
- /* ilk does support rc6, but we do not implement [power] contexts */ \
- .has_rc6 = 0, \
- .dma_mask_size = 36, \
- .max_pat_index = 3, \
- GEN_DEFAULT_PAGE_SIZES, \
- GEN_DEFAULT_REGIONS, \
- LEGACY_CACHELEVEL
- static const struct intel_device_info ilk_d_info = {
- GEN5_FEATURES,
- PLATFORM(INTEL_IRONLAKE),
- };
- static const struct intel_device_info ilk_m_info = {
- GEN5_FEATURES,
- PLATFORM(INTEL_IRONLAKE),
- .is_mobile = 1,
- .has_rps = true,
- };
- #define GEN6_FEATURES \
- GEN(6), \
- .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \
- .has_3d_pipeline = 1, \
- .has_coherent_ggtt = true, \
- .has_llc = 1, \
- .has_rc6 = 1, \
- /* snb does support rc6p, but enabling it causes various issues */ \
- .has_rc6p = 0, \
- .has_rps = true, \
- .dma_mask_size = 40, \
- .max_pat_index = 3, \
- .__runtime.ppgtt_type = INTEL_PPGTT_ALIASING, \
- .__runtime.ppgtt_size = 31, \
- GEN_DEFAULT_PAGE_SIZES, \
- GEN_DEFAULT_REGIONS, \
- LEGACY_CACHELEVEL
- #define SNB_D_PLATFORM \
- GEN6_FEATURES, \
- PLATFORM(INTEL_SANDYBRIDGE)
- static const struct intel_device_info snb_d_gt1_info = {
- SNB_D_PLATFORM,
- .gt = 1,
- };
- static const struct intel_device_info snb_d_gt2_info = {
- SNB_D_PLATFORM,
- .gt = 2,
- };
- #define SNB_M_PLATFORM \
- GEN6_FEATURES, \
- PLATFORM(INTEL_SANDYBRIDGE), \
- .is_mobile = 1
- static const struct intel_device_info snb_m_gt1_info = {
- SNB_M_PLATFORM,
- .gt = 1,
- };
- static const struct intel_device_info snb_m_gt2_info = {
- SNB_M_PLATFORM,
- .gt = 2,
- };
- #define GEN7_FEATURES \
- GEN(7), \
- .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \
- .has_3d_pipeline = 1, \
- .has_coherent_ggtt = true, \
- .has_llc = 1, \
- .has_rc6 = 1, \
- .has_rc6p = 1, \
- .has_reset_engine = true, \
- .has_rps = true, \
- .dma_mask_size = 40, \
- .max_pat_index = 3, \
- .__runtime.ppgtt_type = INTEL_PPGTT_ALIASING, \
- .__runtime.ppgtt_size = 31, \
- GEN_DEFAULT_PAGE_SIZES, \
- GEN_DEFAULT_REGIONS, \
- LEGACY_CACHELEVEL
- #define IVB_D_PLATFORM \
- GEN7_FEATURES, \
- PLATFORM(INTEL_IVYBRIDGE), \
- .has_l3_dpf = 1
- static const struct intel_device_info ivb_d_gt1_info = {
- IVB_D_PLATFORM,
- .gt = 1,
- };
- static const struct intel_device_info ivb_d_gt2_info = {
- IVB_D_PLATFORM,
- .gt = 2,
- };
- #define IVB_M_PLATFORM \
- GEN7_FEATURES, \
- PLATFORM(INTEL_IVYBRIDGE), \
- .is_mobile = 1, \
- .has_l3_dpf = 1
- static const struct intel_device_info ivb_m_gt1_info = {
- IVB_M_PLATFORM,
- .gt = 1,
- };
- static const struct intel_device_info ivb_m_gt2_info = {
- IVB_M_PLATFORM,
- .gt = 2,
- };
- static const struct intel_device_info ivb_q_info = {
- GEN7_FEATURES,
- PLATFORM(INTEL_IVYBRIDGE),
- .gt = 2,
- .has_l3_dpf = 1,
- };
- static const struct intel_device_info vlv_info = {
- PLATFORM(INTEL_VALLEYVIEW),
- GEN(7),
- .has_runtime_pm = 1,
- .has_rc6 = 1,
- .has_reset_engine = true,
- .has_rps = true,
- .dma_mask_size = 40,
- .max_pat_index = 3,
- .__runtime.ppgtt_type = INTEL_PPGTT_ALIASING,
- .__runtime.ppgtt_size = 31,
- .has_snoop = true,
- .has_coherent_ggtt = false,
- .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0),
- GEN_DEFAULT_PAGE_SIZES,
- GEN_DEFAULT_REGIONS,
- LEGACY_CACHELEVEL,
- };
- #define G75_FEATURES \
- GEN7_FEATURES, \
- .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
- .has_rc6p = 0 /* RC6p removed-by HSW */, \
- .has_runtime_pm = 1
- #define HSW_PLATFORM \
- G75_FEATURES, \
- PLATFORM(INTEL_HASWELL), \
- .has_l3_dpf = 1
- static const struct intel_device_info hsw_gt1_info = {
- HSW_PLATFORM,
- .gt = 1,
- };
- static const struct intel_device_info hsw_gt2_info = {
- HSW_PLATFORM,
- .gt = 2,
- };
- static const struct intel_device_info hsw_gt3_info = {
- HSW_PLATFORM,
- .gt = 3,
- };
- #define GEN8_FEATURES \
- G75_FEATURES, \
- GEN(8), \
- .has_logical_ring_contexts = 1, \
- .dma_mask_size = 39, \
- .__runtime.ppgtt_type = INTEL_PPGTT_FULL, \
- .__runtime.ppgtt_size = 48, \
- .has_64bit_reloc = 1
- #define BDW_PLATFORM \
- GEN8_FEATURES, \
- PLATFORM(INTEL_BROADWELL)
- static const struct intel_device_info bdw_gt1_info = {
- BDW_PLATFORM,
- .gt = 1,
- };
- static const struct intel_device_info bdw_gt2_info = {
- BDW_PLATFORM,
- .gt = 2,
- };
- static const struct intel_device_info bdw_rsvd_info = {
- BDW_PLATFORM,
- .gt = 3,
- /* According to the device ID those devices are GT3, they were
- * previously treated as not GT3, keep it like that.
- */
- };
- static const struct intel_device_info bdw_gt3_info = {
- BDW_PLATFORM,
- .gt = 3,
- .platform_engine_mask =
- BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
- };
- static const struct intel_device_info chv_info = {
- PLATFORM(INTEL_CHERRYVIEW),
- GEN(8),
- .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0),
- .has_64bit_reloc = 1,
- .has_runtime_pm = 1,
- .has_rc6 = 1,
- .has_rps = true,
- .has_logical_ring_contexts = 1,
- .dma_mask_size = 39,
- .max_pat_index = 3,
- .__runtime.ppgtt_type = INTEL_PPGTT_FULL,
- .__runtime.ppgtt_size = 32,
- .has_reset_engine = 1,
- .has_snoop = true,
- .has_coherent_ggtt = false,
- GEN_DEFAULT_PAGE_SIZES,
- GEN_DEFAULT_REGIONS,
- LEGACY_CACHELEVEL,
- };
- #define GEN9_DEFAULT_PAGE_SIZES \
- .__runtime.page_sizes = I915_GTT_PAGE_SIZE_4K | \
- I915_GTT_PAGE_SIZE_64K
- #define GEN9_FEATURES \
- GEN8_FEATURES, \
- GEN(9), \
- GEN9_DEFAULT_PAGE_SIZES, \
- .has_gt_uc = 1
- #define SKL_PLATFORM \
- GEN9_FEATURES, \
- PLATFORM(INTEL_SKYLAKE)
- static const struct intel_device_info skl_gt1_info = {
- SKL_PLATFORM,
- .gt = 1,
- };
- static const struct intel_device_info skl_gt2_info = {
- SKL_PLATFORM,
- .gt = 2,
- };
- #define SKL_GT3_PLUS_PLATFORM \
- SKL_PLATFORM, \
- .platform_engine_mask = \
- BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1)
- static const struct intel_device_info skl_gt3_info = {
- SKL_GT3_PLUS_PLATFORM,
- .gt = 3,
- };
- static const struct intel_device_info skl_gt4_info = {
- SKL_GT3_PLUS_PLATFORM,
- .gt = 4,
- };
- #define GEN9_LP_FEATURES \
- GEN(9), \
- .platform_engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
- .has_3d_pipeline = 1, \
- .has_64bit_reloc = 1, \
- .has_runtime_pm = 1, \
- .has_rc6 = 1, \
- .has_rps = true, \
- .has_logical_ring_contexts = 1, \
- .has_gt_uc = 1, \
- .dma_mask_size = 39, \
- .__runtime.ppgtt_type = INTEL_PPGTT_FULL, \
- .__runtime.ppgtt_size = 48, \
- .has_reset_engine = 1, \
- .has_snoop = true, \
- .has_coherent_ggtt = false, \
- .max_pat_index = 3, \
- GEN9_DEFAULT_PAGE_SIZES, \
- GEN_DEFAULT_REGIONS, \
- LEGACY_CACHELEVEL
- static const struct intel_device_info bxt_info = {
- GEN9_LP_FEATURES,
- PLATFORM(INTEL_BROXTON),
- };
- static const struct intel_device_info glk_info = {
- GEN9_LP_FEATURES,
- PLATFORM(INTEL_GEMINILAKE),
- };
- #define KBL_PLATFORM \
- GEN9_FEATURES, \
- PLATFORM(INTEL_KABYLAKE)
- static const struct intel_device_info kbl_gt1_info = {
- KBL_PLATFORM,
- .gt = 1,
- };
- static const struct intel_device_info kbl_gt2_info = {
- KBL_PLATFORM,
- .gt = 2,
- };
- static const struct intel_device_info kbl_gt3_info = {
- KBL_PLATFORM,
- .gt = 3,
- .platform_engine_mask =
- BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
- };
- #define CFL_PLATFORM \
- GEN9_FEATURES, \
- PLATFORM(INTEL_COFFEELAKE)
- static const struct intel_device_info cfl_gt1_info = {
- CFL_PLATFORM,
- .gt = 1,
- };
- static const struct intel_device_info cfl_gt2_info = {
- CFL_PLATFORM,
- .gt = 2,
- };
- static const struct intel_device_info cfl_gt3_info = {
- CFL_PLATFORM,
- .gt = 3,
- .platform_engine_mask =
- BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
- };
- #define CML_PLATFORM \
- GEN9_FEATURES, \
- PLATFORM(INTEL_COMETLAKE)
- static const struct intel_device_info cml_gt1_info = {
- CML_PLATFORM,
- .gt = 1,
- };
- static const struct intel_device_info cml_gt2_info = {
- CML_PLATFORM,
- .gt = 2,
- };
- #define GEN11_DEFAULT_PAGE_SIZES \
- .__runtime.page_sizes = I915_GTT_PAGE_SIZE_4K | \
- I915_GTT_PAGE_SIZE_64K | \
- I915_GTT_PAGE_SIZE_2M
- #define GEN11_FEATURES \
- GEN9_FEATURES, \
- GEN11_DEFAULT_PAGE_SIZES, \
- GEN(11), \
- .has_coherent_ggtt = false, \
- .has_logical_ring_elsq = 1
- static const struct intel_device_info icl_info = {
- GEN11_FEATURES,
- PLATFORM(INTEL_ICELAKE),
- .platform_engine_mask =
- BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
- };
- static const struct intel_device_info ehl_info = {
- GEN11_FEATURES,
- PLATFORM(INTEL_ELKHARTLAKE),
- .platform_engine_mask = BIT(RCS0) | BIT(BCS0) | BIT(VCS0) | BIT(VECS0),
- .__runtime.ppgtt_size = 36,
- };
- static const struct intel_device_info jsl_info = {
- GEN11_FEATURES,
- PLATFORM(INTEL_JASPERLAKE),
- .platform_engine_mask = BIT(RCS0) | BIT(BCS0) | BIT(VCS0) | BIT(VECS0),
- .__runtime.ppgtt_size = 36,
- };
- #define GEN12_FEATURES \
- GEN11_FEATURES, \
- GEN(12), \
- TGL_CACHELEVEL, \
- .has_global_mocs = 1, \
- .has_pxp = 1, \
- .max_pat_index = 3
- static const struct intel_device_info tgl_info = {
- GEN12_FEATURES,
- PLATFORM(INTEL_TIGERLAKE),
- .platform_engine_mask =
- BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
- };
- static const struct intel_device_info rkl_info = {
- GEN12_FEATURES,
- PLATFORM(INTEL_ROCKETLAKE),
- .platform_engine_mask =
- BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0),
- };
- #define DGFX_FEATURES \
- .memory_regions = BIT(INTEL_REGION_SMEM) | BIT(INTEL_REGION_LMEM_0) | BIT(INTEL_REGION_STOLEN_LMEM), \
- .has_llc = 0, \
- .has_pxp = 0, \
- .has_snoop = 1, \
- .is_dgfx = 1, \
- .has_heci_gscfi = 1
- static const struct intel_device_info dg1_info = {
- GEN12_FEATURES,
- DGFX_FEATURES,
- .__runtime.graphics.ip.rel = 10,
- PLATFORM(INTEL_DG1),
- .platform_engine_mask =
- BIT(RCS0) | BIT(BCS0) | BIT(VECS0) |
- BIT(VCS0) | BIT(VCS2),
- /* Wa_16011227922 */
- .__runtime.ppgtt_size = 47,
- };
- static const struct intel_device_info adl_s_info = {
- GEN12_FEATURES,
- PLATFORM(INTEL_ALDERLAKE_S),
- .platform_engine_mask =
- BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
- .dma_mask_size = 39,
- };
- static const struct intel_device_info adl_p_info = {
- GEN12_FEATURES,
- PLATFORM(INTEL_ALDERLAKE_P),
- .platform_engine_mask =
- BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
- .__runtime.ppgtt_size = 48,
- .dma_mask_size = 39,
- };
- #undef GEN
- #define XE_HP_PAGE_SIZES \
- .__runtime.page_sizes = I915_GTT_PAGE_SIZE_4K | \
- I915_GTT_PAGE_SIZE_64K | \
- I915_GTT_PAGE_SIZE_2M
- #define XE_HP_FEATURES \
- XE_HP_PAGE_SIZES, \
- TGL_CACHELEVEL, \
- .dma_mask_size = 46, \
- .has_3d_pipeline = 1, \
- .has_64bit_reloc = 1, \
- .has_flat_ccs = 1, \
- .has_global_mocs = 1, \
- .has_gt_uc = 1, \
- .has_llc = 1, \
- .has_logical_ring_contexts = 1, \
- .has_logical_ring_elsq = 1, \
- .has_mslice_steering = 1, \
- .has_oa_bpc_reporting = 1, \
- .has_oa_slice_contrib_limits = 1, \
- .has_oam = 1, \
- .has_rc6 = 1, \
- .has_reset_engine = 1, \
- .has_rps = 1, \
- .has_runtime_pm = 1, \
- .max_pat_index = 3, \
- .__runtime.ppgtt_size = 48, \
- .__runtime.ppgtt_type = INTEL_PPGTT_FULL
- #define DG2_FEATURES \
- XE_HP_FEATURES, \
- DGFX_FEATURES, \
- .__runtime.graphics.ip.ver = 12, \
- .__runtime.graphics.ip.rel = 55, \
- .__runtime.media.ip.ver = 12, \
- .__runtime.media.ip.rel = 55, \
- PLATFORM(INTEL_DG2), \
- .has_64k_pages = 1, \
- .has_guc_deprivilege = 1, \
- .has_heci_pxp = 1, \
- .has_media_ratio_mode = 1, \
- .platform_engine_mask = \
- BIT(RCS0) | BIT(BCS0) | \
- BIT(VECS0) | BIT(VECS1) | \
- BIT(VCS0) | BIT(VCS2) | \
- BIT(CCS0) | BIT(CCS1) | BIT(CCS2) | BIT(CCS3)
- static const struct intel_device_info dg2_info = {
- DG2_FEATURES,
- };
- static const struct intel_device_info ats_m_info = {
- DG2_FEATURES,
- .require_force_probe = 1,
- .tuning_thread_rr_after_dep = 1,
- };
- static const struct intel_gt_definition xelpmp_extra_gt[] = {
- {
- .type = GT_MEDIA,
- .name = "Standalone Media GT",
- .gsi_offset = MTL_MEDIA_GSI_BASE,
- .engine_mask = BIT(VECS0) | BIT(VCS0) | BIT(VCS2) | BIT(GSC0),
- },
- {}
- };
- static const struct intel_device_info mtl_info = {
- XE_HP_FEATURES,
- /*
- * Real graphics IP version will be obtained from hardware GMD_ID
- * register. Value provided here is just for sanity checking.
- */
- .__runtime.graphics.ip.ver = 12,
- .__runtime.graphics.ip.rel = 70,
- .__runtime.media.ip.ver = 13,
- PLATFORM(INTEL_METEORLAKE),
- .extra_gt_list = xelpmp_extra_gt,
- .has_flat_ccs = 0,
- .has_gmd_id = 1,
- .has_guc_deprivilege = 1,
- .has_guc_tlb_invalidation = 1,
- .has_llc = 0,
- .has_mslice_steering = 0,
- .has_snoop = 1,
- .max_pat_index = 4,
- .has_pxp = 1,
- .memory_regions = BIT(INTEL_REGION_SMEM) | BIT(INTEL_REGION_STOLEN_LMEM),
- .platform_engine_mask = BIT(RCS0) | BIT(BCS0) | BIT(CCS0),
- MTL_CACHELEVEL,
- };
- #undef PLATFORM
- __diag_pop();
- /*
- * Make sure any device matches here are from most specific to most
- * general. For example, since the Quanta match is based on the subsystem
- * and subvendor IDs, we need it to come before the more general IVB
- * PCI ID matches, otherwise we'll use the wrong info struct above.
- */
- static const struct pci_device_id pciidlist[] = {
- INTEL_I830_IDS(INTEL_VGA_DEVICE, &i830_info),
- INTEL_I845G_IDS(INTEL_VGA_DEVICE, &i845g_info),
- INTEL_I85X_IDS(INTEL_VGA_DEVICE, &i85x_info),
- INTEL_I865G_IDS(INTEL_VGA_DEVICE, &i865g_info),
- INTEL_I915G_IDS(INTEL_VGA_DEVICE, &i915g_info),
- INTEL_I915GM_IDS(INTEL_VGA_DEVICE, &i915gm_info),
- INTEL_I945G_IDS(INTEL_VGA_DEVICE, &i945g_info),
- INTEL_I945GM_IDS(INTEL_VGA_DEVICE, &i945gm_info),
- INTEL_I965G_IDS(INTEL_VGA_DEVICE, &i965g_info),
- INTEL_G33_IDS(INTEL_VGA_DEVICE, &g33_info),
- INTEL_I965GM_IDS(INTEL_VGA_DEVICE, &i965gm_info),
- INTEL_GM45_IDS(INTEL_VGA_DEVICE, &gm45_info),
- INTEL_G45_IDS(INTEL_VGA_DEVICE, &g45_info),
- INTEL_PNV_G_IDS(INTEL_VGA_DEVICE, &pnv_g_info),
- INTEL_PNV_M_IDS(INTEL_VGA_DEVICE, &pnv_m_info),
- INTEL_ILK_D_IDS(INTEL_VGA_DEVICE, &ilk_d_info),
- INTEL_ILK_M_IDS(INTEL_VGA_DEVICE, &ilk_m_info),
- INTEL_SNB_D_GT1_IDS(INTEL_VGA_DEVICE, &snb_d_gt1_info),
- INTEL_SNB_D_GT2_IDS(INTEL_VGA_DEVICE, &snb_d_gt2_info),
- INTEL_SNB_M_GT1_IDS(INTEL_VGA_DEVICE, &snb_m_gt1_info),
- INTEL_SNB_M_GT2_IDS(INTEL_VGA_DEVICE, &snb_m_gt2_info),
- INTEL_IVB_Q_IDS(INTEL_VGA_DEVICE, &ivb_q_info), /* must be first IVB */
- INTEL_IVB_M_GT1_IDS(INTEL_VGA_DEVICE, &ivb_m_gt1_info),
- INTEL_IVB_M_GT2_IDS(INTEL_VGA_DEVICE, &ivb_m_gt2_info),
- INTEL_IVB_D_GT1_IDS(INTEL_VGA_DEVICE, &ivb_d_gt1_info),
- INTEL_IVB_D_GT2_IDS(INTEL_VGA_DEVICE, &ivb_d_gt2_info),
- INTEL_HSW_GT1_IDS(INTEL_VGA_DEVICE, &hsw_gt1_info),
- INTEL_HSW_GT2_IDS(INTEL_VGA_DEVICE, &hsw_gt2_info),
- INTEL_HSW_GT3_IDS(INTEL_VGA_DEVICE, &hsw_gt3_info),
- INTEL_VLV_IDS(INTEL_VGA_DEVICE, &vlv_info),
- INTEL_BDW_GT1_IDS(INTEL_VGA_DEVICE, &bdw_gt1_info),
- INTEL_BDW_GT2_IDS(INTEL_VGA_DEVICE, &bdw_gt2_info),
- INTEL_BDW_GT3_IDS(INTEL_VGA_DEVICE, &bdw_gt3_info),
- INTEL_BDW_RSVD_IDS(INTEL_VGA_DEVICE, &bdw_rsvd_info),
- INTEL_CHV_IDS(INTEL_VGA_DEVICE, &chv_info),
- INTEL_SKL_GT1_IDS(INTEL_VGA_DEVICE, &skl_gt1_info),
- INTEL_SKL_GT2_IDS(INTEL_VGA_DEVICE, &skl_gt2_info),
- INTEL_SKL_GT3_IDS(INTEL_VGA_DEVICE, &skl_gt3_info),
- INTEL_SKL_GT4_IDS(INTEL_VGA_DEVICE, &skl_gt4_info),
- INTEL_BXT_IDS(INTEL_VGA_DEVICE, &bxt_info),
- INTEL_GLK_IDS(INTEL_VGA_DEVICE, &glk_info),
- INTEL_KBL_GT1_IDS(INTEL_VGA_DEVICE, &kbl_gt1_info),
- INTEL_KBL_GT2_IDS(INTEL_VGA_DEVICE, &kbl_gt2_info),
- INTEL_KBL_GT3_IDS(INTEL_VGA_DEVICE, &kbl_gt3_info),
- INTEL_KBL_GT4_IDS(INTEL_VGA_DEVICE, &kbl_gt3_info),
- INTEL_AML_KBL_GT2_IDS(INTEL_VGA_DEVICE, &kbl_gt2_info),
- INTEL_CFL_S_GT1_IDS(INTEL_VGA_DEVICE, &cfl_gt1_info),
- INTEL_CFL_S_GT2_IDS(INTEL_VGA_DEVICE, &cfl_gt2_info),
- INTEL_CFL_H_GT1_IDS(INTEL_VGA_DEVICE, &cfl_gt1_info),
- INTEL_CFL_H_GT2_IDS(INTEL_VGA_DEVICE, &cfl_gt2_info),
- INTEL_CFL_U_GT2_IDS(INTEL_VGA_DEVICE, &cfl_gt2_info),
- INTEL_CFL_U_GT3_IDS(INTEL_VGA_DEVICE, &cfl_gt3_info),
- INTEL_WHL_U_GT1_IDS(INTEL_VGA_DEVICE, &cfl_gt1_info),
- INTEL_WHL_U_GT2_IDS(INTEL_VGA_DEVICE, &cfl_gt2_info),
- INTEL_AML_CFL_GT2_IDS(INTEL_VGA_DEVICE, &cfl_gt2_info),
- INTEL_WHL_U_GT3_IDS(INTEL_VGA_DEVICE, &cfl_gt3_info),
- INTEL_CML_GT1_IDS(INTEL_VGA_DEVICE, &cml_gt1_info),
- INTEL_CML_GT2_IDS(INTEL_VGA_DEVICE, &cml_gt2_info),
- INTEL_CML_U_GT1_IDS(INTEL_VGA_DEVICE, &cml_gt1_info),
- INTEL_CML_U_GT2_IDS(INTEL_VGA_DEVICE, &cml_gt2_info),
- INTEL_ICL_IDS(INTEL_VGA_DEVICE, &icl_info),
- INTEL_EHL_IDS(INTEL_VGA_DEVICE, &ehl_info),
- INTEL_JSL_IDS(INTEL_VGA_DEVICE, &jsl_info),
- INTEL_TGL_IDS(INTEL_VGA_DEVICE, &tgl_info),
- INTEL_RKL_IDS(INTEL_VGA_DEVICE, &rkl_info),
- INTEL_ADLS_IDS(INTEL_VGA_DEVICE, &adl_s_info),
- INTEL_ADLP_IDS(INTEL_VGA_DEVICE, &adl_p_info),
- INTEL_ADLN_IDS(INTEL_VGA_DEVICE, &adl_p_info),
- INTEL_DG1_IDS(INTEL_VGA_DEVICE, &dg1_info),
- INTEL_RPLS_IDS(INTEL_VGA_DEVICE, &adl_s_info),
- INTEL_RPLU_IDS(INTEL_VGA_DEVICE, &adl_p_info),
- INTEL_RPLP_IDS(INTEL_VGA_DEVICE, &adl_p_info),
- INTEL_DG2_IDS(INTEL_VGA_DEVICE, &dg2_info),
- INTEL_ATS_M_IDS(INTEL_VGA_DEVICE, &ats_m_info),
- INTEL_ARL_IDS(INTEL_VGA_DEVICE, &mtl_info),
- INTEL_MTL_IDS(INTEL_VGA_DEVICE, &mtl_info),
- {}
- };
- MODULE_DEVICE_TABLE(pci, pciidlist);
- static void i915_pci_remove(struct pci_dev *pdev)
- {
- struct drm_i915_private *i915;
- i915 = pdev_to_i915(pdev);
- if (!i915) /* driver load aborted, nothing to cleanup */
- return;
- i915_driver_remove(i915);
- pci_set_drvdata(pdev, NULL);
- }
- /* is device_id present in comma separated list of ids */
- static bool device_id_in_list(u16 device_id, const char *devices, bool negative)
- {
- char *s, *p, *tok;
- bool ret;
- if (!devices || !*devices)
- return false;
- /* match everything */
- if (negative && strcmp(devices, "!*") == 0)
- return true;
- if (!negative && strcmp(devices, "*") == 0)
- return true;
- s = kstrdup(devices, GFP_KERNEL);
- if (!s)
- return false;
- for (p = s, ret = false; (tok = strsep(&p, ",")) != NULL; ) {
- u16 val;
- if (negative && tok[0] == '!')
- tok++;
- else if ((negative && tok[0] != '!') ||
- (!negative && tok[0] == '!'))
- continue;
- if (kstrtou16(tok, 16, &val) == 0 && val == device_id) {
- ret = true;
- break;
- }
- }
- kfree(s);
- return ret;
- }
- static bool id_forced(u16 device_id)
- {
- return device_id_in_list(device_id, i915_modparams.force_probe, false);
- }
- static bool id_blocked(u16 device_id)
- {
- return device_id_in_list(device_id, i915_modparams.force_probe, true);
- }
- bool i915_pci_resource_valid(struct pci_dev *pdev, int bar)
- {
- if (!pci_resource_flags(pdev, bar))
- return false;
- if (pci_resource_flags(pdev, bar) & IORESOURCE_UNSET)
- return false;
- if (!pci_resource_len(pdev, bar))
- return false;
- return true;
- }
- static bool intel_mmio_bar_valid(struct pci_dev *pdev, struct intel_device_info *intel_info)
- {
- return i915_pci_resource_valid(pdev, intel_mmio_bar(intel_info->__runtime.graphics.ip.ver));
- }
- static int i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
- {
- struct intel_device_info *intel_info =
- (struct intel_device_info *) ent->driver_data;
- int err;
- if (intel_info->require_force_probe && !id_forced(pdev->device)) {
- dev_info(&pdev->dev,
- "Your graphics device %04x is not properly supported by i915 in this\n"
- "kernel version. To force driver probe anyway, use i915.force_probe=%04x\n"
- "module parameter or CONFIG_DRM_I915_FORCE_PROBE=%04x configuration option,\n"
- "or (recommended) check for kernel updates.\n",
- pdev->device, pdev->device, pdev->device);
- return -ENODEV;
- }
- if (id_blocked(pdev->device)) {
- dev_info(&pdev->dev, "I915 probe blocked for Device ID %04x.\n",
- pdev->device);
- return -ENODEV;
- }
- if (intel_info->require_force_probe) {
- dev_info(&pdev->dev, "Force probing unsupported Device ID %04x, tainting kernel\n",
- pdev->device);
- add_taint(TAINT_USER, LOCKDEP_STILL_OK);
- }
- /* Only bind to function 0 of the device. Early generations
- * used function 1 as a placeholder for multi-head. This causes
- * us confusion instead, especially on the systems where both
- * functions have the same PCI-ID!
- */
- if (PCI_FUNC(pdev->devfn))
- return -ENODEV;
- if (!intel_mmio_bar_valid(pdev, intel_info))
- return -ENXIO;
- /* Detect if we need to wait for other drivers early on */
- if (intel_display_driver_probe_defer(pdev))
- return -EPROBE_DEFER;
- err = i915_driver_probe(pdev, ent);
- if (err)
- return err;
- err = i915_live_selftests(pdev);
- if (err) {
- i915_pci_remove(pdev);
- return err > 0 ? -ENOTTY : err;
- }
- err = i915_perf_selftests(pdev);
- if (err) {
- i915_pci_remove(pdev);
- return err > 0 ? -ENOTTY : err;
- }
- return 0;
- }
- ALLOW_ERROR_INJECTION(i915_pci_probe, ERRNO);
- static void i915_pci_shutdown(struct pci_dev *pdev)
- {
- struct drm_i915_private *i915 = pdev_to_i915(pdev);
- i915_driver_shutdown(i915);
- }
- static struct pci_driver i915_pci_driver = {
- .name = DRIVER_NAME,
- .id_table = pciidlist,
- .probe = i915_pci_probe,
- .remove = i915_pci_remove,
- .shutdown = i915_pci_shutdown,
- .driver.pm = &i915_pm_ops,
- };
- int i915_pci_register_driver(void)
- {
- return pci_register_driver(&i915_pci_driver);
- }
- void i915_pci_unregister_driver(void)
- {
- pci_unregister_driver(&i915_pci_driver);
- }
|