Lines Matching full:i915
40 int i915_gem_stolen_insert_node_in_range(struct drm_i915_private *i915, in i915_gem_stolen_insert_node_in_range() argument
46 if (!drm_mm_initialized(&i915->mm.stolen)) in i915_gem_stolen_insert_node_in_range()
50 if (GRAPHICS_VER(i915) >= 8 && start < 4096) in i915_gem_stolen_insert_node_in_range()
53 mutex_lock(&i915->mm.stolen_lock); in i915_gem_stolen_insert_node_in_range()
54 ret = drm_mm_insert_node_in_range(&i915->mm.stolen, node, in i915_gem_stolen_insert_node_in_range()
57 mutex_unlock(&i915->mm.stolen_lock); in i915_gem_stolen_insert_node_in_range()
62 int i915_gem_stolen_insert_node(struct drm_i915_private *i915, in i915_gem_stolen_insert_node() argument
66 return i915_gem_stolen_insert_node_in_range(i915, node, in i915_gem_stolen_insert_node()
72 void i915_gem_stolen_remove_node(struct drm_i915_private *i915, in i915_gem_stolen_remove_node() argument
75 mutex_lock(&i915->mm.stolen_lock); in i915_gem_stolen_remove_node()
77 mutex_unlock(&i915->mm.stolen_lock); in i915_gem_stolen_remove_node()
80 static bool valid_stolen_size(struct drm_i915_private *i915, struct resource *dsm) in valid_stolen_size() argument
82 return (dsm->start != 0 || HAS_LMEMBAR_SMEM_STOLEN(i915)) && dsm->end > dsm->start; in valid_stolen_size()
85 static int adjust_stolen(struct drm_i915_private *i915, in adjust_stolen() argument
88 struct i915_ggtt *ggtt = to_gt(i915)->ggtt; in adjust_stolen()
91 if (!valid_stolen_size(i915, dsm)) in adjust_stolen()
100 if (GRAPHICS_VER(i915) <= 4 && in adjust_stolen()
101 !IS_G33(i915) && !IS_PINEVIEW(i915) && !IS_G4X(i915)) { in adjust_stolen()
107 if (GRAPHICS_VER(i915) == 4) in adjust_stolen()
128 drm_dbg(&i915->drm, in adjust_stolen()
131 drm_dbg(&i915->drm, "Stolen memory adjusted to %pR\n", in adjust_stolen()
136 if (!valid_stolen_size(i915, dsm)) in adjust_stolen()
142 static int request_smem_stolen(struct drm_i915_private *i915, in request_smem_stolen() argument
154 if (HAS_LMEM(i915) || HAS_LMEMBAR_SMEM_STOLEN(i915)) in request_smem_stolen()
163 r = devm_request_mem_region(i915->drm.dev, dsm->start, in request_smem_stolen()
176 r = devm_request_mem_region(i915->drm.dev, dsm->start + 1, in request_smem_stolen()
183 if (!r && GRAPHICS_VER(i915) != 3) { in request_smem_stolen()
184 drm_err(&i915->drm, in request_smem_stolen()
195 static void i915_gem_cleanup_stolen(struct drm_i915_private *i915) in i915_gem_cleanup_stolen() argument
197 if (!drm_mm_initialized(&i915->mm.stolen)) in i915_gem_cleanup_stolen()
200 drm_mm_takedown(&i915->mm.stolen); in i915_gem_cleanup_stolen()
203 static void g4x_get_stolen_reserved(struct drm_i915_private *i915, in g4x_get_stolen_reserved() argument
209 IS_GM45(i915) ? in g4x_get_stolen_reserved()
212 resource_size_t stolen_top = i915->dsm.stolen.end + 1; in g4x_get_stolen_reserved()
214 drm_dbg(&i915->drm, "%s_STOLEN_RESERVED = %08x\n", in g4x_get_stolen_reserved()
215 IS_GM45(i915) ? "CTG" : "ELK", reg_val); in g4x_get_stolen_reserved()
224 drm_WARN(&i915->drm, GRAPHICS_VER(i915) == 5, in g4x_get_stolen_reserved()
232 drm_WARN_ON(&i915->drm, in g4x_get_stolen_reserved()
238 static void gen6_get_stolen_reserved(struct drm_i915_private *i915, in gen6_get_stolen_reserved() argument
245 drm_dbg(&i915->drm, "GEN6_STOLEN_RESERVED = %08x\n", reg_val); in gen6_get_stolen_reserved()
271 static void vlv_get_stolen_reserved(struct drm_i915_private *i915, in vlv_get_stolen_reserved() argument
277 resource_size_t stolen_top = i915->dsm.stolen.end + 1; in vlv_get_stolen_reserved()
279 drm_dbg(&i915->drm, "GEN6_STOLEN_RESERVED = %08x\n", reg_val); in vlv_get_stolen_reserved()
300 static void gen7_get_stolen_reserved(struct drm_i915_private *i915, in gen7_get_stolen_reserved() argument
307 drm_dbg(&i915->drm, "GEN6_STOLEN_RESERVED = %08x\n", reg_val); in gen7_get_stolen_reserved()
327 static void chv_get_stolen_reserved(struct drm_i915_private *i915, in chv_get_stolen_reserved() argument
334 drm_dbg(&i915->drm, "GEN6_STOLEN_RESERVED = %08x\n", reg_val); in chv_get_stolen_reserved()
360 static void bdw_get_stolen_reserved(struct drm_i915_private *i915, in bdw_get_stolen_reserved() argument
366 resource_size_t stolen_top = i915->dsm.stolen.end + 1; in bdw_get_stolen_reserved()
368 drm_dbg(&i915->drm, "GEN6_STOLEN_RESERVED = %08x\n", reg_val); in bdw_get_stolen_reserved()
380 static void icl_get_stolen_reserved(struct drm_i915_private *i915, in icl_get_stolen_reserved() argument
387 drm_dbg(&i915->drm, "GEN6_STOLEN_RESERVED = 0x%016llx\n", reg_val); in icl_get_stolen_reserved()
390 if (MEDIA_VER_FULL(i915) == IP_VER(13, 0)) { in icl_get_stolen_reserved()
402 if (gscpsmi_base >= i915->dsm.stolen.start && in icl_get_stolen_reserved()
403 gscpsmi_base < i915->dsm.stolen.end) { in icl_get_stolen_reserved()
405 *size = i915->dsm.stolen.end - gscpsmi_base; in icl_get_stolen_reserved()
428 if (HAS_LMEMBAR_SMEM_STOLEN(i915)) in icl_get_stolen_reserved()
436 * Initialize i915->dsm.reserved to contain the reserved space within the Data
445 static int init_reserved_stolen(struct drm_i915_private *i915) in init_reserved_stolen() argument
447 struct intel_uncore *uncore = &i915->uncore; in init_reserved_stolen()
452 stolen_top = i915->dsm.stolen.end + 1; in init_reserved_stolen()
456 if (GRAPHICS_VER(i915) >= 11) { in init_reserved_stolen()
457 icl_get_stolen_reserved(i915, uncore, in init_reserved_stolen()
459 } else if (GRAPHICS_VER(i915) >= 8) { in init_reserved_stolen()
460 if (IS_CHERRYVIEW(i915) || IS_BROXTON(i915) || IS_GEMINILAKE(i915)) in init_reserved_stolen()
461 chv_get_stolen_reserved(i915, uncore, in init_reserved_stolen()
464 bdw_get_stolen_reserved(i915, uncore, in init_reserved_stolen()
466 } else if (GRAPHICS_VER(i915) >= 7) { in init_reserved_stolen()
467 if (IS_VALLEYVIEW(i915)) in init_reserved_stolen()
468 vlv_get_stolen_reserved(i915, uncore, in init_reserved_stolen()
471 gen7_get_stolen_reserved(i915, uncore, in init_reserved_stolen()
473 } else if (GRAPHICS_VER(i915) >= 6) { in init_reserved_stolen()
474 gen6_get_stolen_reserved(i915, uncore, in init_reserved_stolen()
476 } else if (GRAPHICS_VER(i915) >= 5 || IS_G4X(i915)) { in init_reserved_stolen()
477 g4x_get_stolen_reserved(i915, uncore, in init_reserved_stolen()
486 drm_err(&i915->drm, in init_reserved_stolen()
493 i915->dsm.reserved = DEFINE_RES_MEM(reserved_base, reserved_size); in init_reserved_stolen()
495 if (!resource_contains(&i915->dsm.stolen, &i915->dsm.reserved)) { in init_reserved_stolen()
496 drm_err(&i915->drm, in init_reserved_stolen()
498 &i915->dsm.reserved, &i915->dsm.stolen); in init_reserved_stolen()
506 i915->dsm.reserved = DEFINE_RES_MEM(reserved_base, 0); in init_reserved_stolen()
513 struct drm_i915_private *i915 = mem->i915; in i915_gem_init_stolen() local
515 mutex_init(&i915->mm.stolen_lock); in i915_gem_init_stolen()
517 if (intel_vgpu_active(i915)) { in i915_gem_init_stolen()
518 drm_notice(&i915->drm, in i915_gem_init_stolen()
524 if (i915_vtd_active(i915) && GRAPHICS_VER(i915) < 8) { in i915_gem_init_stolen()
525 drm_notice(&i915->drm, in i915_gem_init_stolen()
531 if (adjust_stolen(i915, &mem->region)) in i915_gem_init_stolen()
534 if (request_smem_stolen(i915, &mem->region)) in i915_gem_init_stolen()
537 i915->dsm.stolen = mem->region; in i915_gem_init_stolen()
539 if (init_reserved_stolen(i915)) in i915_gem_init_stolen()
543 mem->region.end = i915->dsm.reserved.start - 1; in i915_gem_init_stolen()
548 i915->dsm.usable_size = resource_size(&mem->region); in i915_gem_init_stolen()
550 drm_dbg(&i915->drm, in i915_gem_init_stolen()
552 (u64)resource_size(&i915->dsm.stolen) >> 10, in i915_gem_init_stolen()
553 (u64)i915->dsm.usable_size >> 10); in i915_gem_init_stolen()
555 if (i915->dsm.usable_size == 0) in i915_gem_init_stolen()
559 drm_mm_init(&i915->mm.stolen, 0, i915->dsm.usable_size); in i915_gem_init_stolen()
566 if (IS_METEORLAKE(i915) && INTEL_REVID(i915) == 0x0) in i915_gem_init_stolen()
567 i915->dsm.usable_size = 0; in i915_gem_init_stolen()
591 i915_gem_get_pat_index(ggtt->vm.i915, in dbg_poison()
615 struct drm_i915_private *i915 = to_i915(dev); in i915_pages_create_for_stolen() local
619 GEM_BUG_ON(range_overflows(offset, size, resource_size(&i915->dsm.stolen))); in i915_pages_create_for_stolen()
639 sg_dma_address(sg) = (dma_addr_t)i915->dsm.stolen.start + offset; in i915_pages_create_for_stolen()
647 struct drm_i915_private *i915 = to_i915(obj->base.dev); in i915_gem_object_get_pages_stolen() local
655 dbg_poison(to_gt(i915)->ggtt, in i915_gem_object_get_pages_stolen()
668 struct drm_i915_private *i915 = to_i915(obj->base.dev); in i915_gem_object_put_pages_stolen() local
671 dbg_poison(to_gt(i915)->ggtt, in i915_gem_object_put_pages_stolen()
683 struct drm_i915_private *i915 = to_i915(obj->base.dev); in i915_gem_object_release_stolen() local
687 i915_gem_stolen_remove_node(i915, stolen); in i915_gem_object_release_stolen()
715 drm_gem_private_object_init(&mem->i915->drm, &obj->base, stolen->size); in __i915_gem_object_create_stolen()
720 cache_level = HAS_LLC(mem->i915) ? I915_CACHE_LLC : I915_CACHE_NONE; in __i915_gem_object_create_stolen()
743 struct drm_i915_private *i915 = mem->i915; in _i915_gem_object_stolen_init() local
747 if (!drm_mm_initialized(&i915->mm.stolen)) in _i915_gem_object_stolen_init()
766 drm_dbg(&i915->drm, in _i915_gem_object_stolen_init()
772 mutex_lock(&i915->mm.stolen_lock); in _i915_gem_object_stolen_init()
773 ret = drm_mm_reserve_node(&i915->mm.stolen, stolen); in _i915_gem_object_stolen_init()
774 mutex_unlock(&i915->mm.stolen_lock); in _i915_gem_object_stolen_init()
776 ret = i915_gem_stolen_insert_node(i915, stolen, size, in _i915_gem_object_stolen_init()
789 i915_gem_stolen_remove_node(i915, stolen); in _i915_gem_object_stolen_init()
796 i915_gem_object_create_stolen(struct drm_i915_private *i915, in i915_gem_object_create_stolen() argument
799 return i915_gem_object_create_region(i915->mm.stolen_region, size, 0, 0); in i915_gem_object_create_stolen()
812 drm_dbg(&mem->i915->drm, "Skip stolen region: failed to setup\n"); in init_stolen_smem()
819 i915_gem_cleanup_stolen(mem->i915); in release_stolen_smem()
838 drm_dbg(&mem->i915->drm, "Skip stolen region: failed to setup\n"); in init_stolen_lmem()
849 i915_gem_cleanup_stolen(mem->i915); in init_stolen_lmem()
857 i915_gem_cleanup_stolen(mem->i915); in release_stolen_lmem()
891 i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type, in i915_gem_stolen_lmem_setup() argument
894 struct intel_uncore *uncore = &i915->uncore; in i915_gem_stolen_lmem_setup()
895 struct pci_dev *pdev = to_pci_dev(i915->drm.dev); in i915_gem_stolen_lmem_setup()
908 if (HAS_LMEMBAR_SMEM_STOLEN(i915) || IS_DG1(i915)) { in i915_gem_stolen_lmem_setup()
913 lmem_range = intel_gt_mcr_read_any(to_gt(i915), XEHP_TILE0_ADDR_RANGE) & 0xFFFF; in i915_gem_stolen_lmem_setup()
918 if (HAS_LMEMBAR_SMEM_STOLEN(i915)) { in i915_gem_stolen_lmem_setup()
921 * Also MTL uses offset to GSMBASE in ptes, so i915 in i915_gem_stolen_lmem_setup()
927 drm_err(&i915->drm, "invalid MTL GGC register setting\n"); in i915_gem_stolen_lmem_setup()
940 drm_dbg(&i915->drm, in i915_gem_stolen_lmem_setup()
948 if (i915_direct_stolen_access(i915)) { in i915_gem_stolen_lmem_setup()
949 drm_dbg(&i915->drm, "Using direct DSM access\n"); in i915_gem_stolen_lmem_setup()
960 min_page_size = HAS_64K_PAGES(i915) ? I915_GTT_PAGE_SIZE_64K : in i915_gem_stolen_lmem_setup()
963 mem = intel_memory_region_create(i915, dsm_base, dsm_size, in i915_gem_stolen_lmem_setup()
979 i915_gem_stolen_smem_setup(struct drm_i915_private *i915, u16 type, in i915_gem_stolen_smem_setup() argument
984 mem = intel_memory_region_create(i915, in i915_gem_stolen_smem_setup()
1004 bool i915_gem_stolen_initialized(const struct drm_i915_private *i915) in i915_gem_stolen_initialized() argument
1006 return drm_mm_initialized(&i915->mm.stolen); in i915_gem_stolen_initialized()
1009 u64 i915_gem_stolen_area_address(const struct drm_i915_private *i915) in i915_gem_stolen_area_address() argument
1011 return i915->dsm.stolen.start; in i915_gem_stolen_area_address()
1014 u64 i915_gem_stolen_area_size(const struct drm_i915_private *i915) in i915_gem_stolen_area_size() argument
1016 return resource_size(&i915->dsm.stolen); in i915_gem_stolen_area_size()
1019 u64 i915_gem_stolen_node_address(const struct drm_i915_private *i915, in i915_gem_stolen_node_address() argument
1022 return i915->dsm.stolen.start + i915_gem_stolen_node_offset(node); in i915_gem_stolen_node_address()