Lines Matching +full:rpm +full:- +full:requests

1 // SPDX-License-Identifier: MIT
7 #include <drm/intel/intel-gtt.h>
42 spin_lock_init(gt->irq_lock); in intel_gt_common_init_early()
44 INIT_LIST_HEAD(&gt->closed_vma); in intel_gt_common_init_early()
45 spin_lock_init(&gt->closed_lock); in intel_gt_common_init_early()
47 init_llist_head(&gt->watchdog.list); in intel_gt_common_init_early()
48 INIT_WORK(&gt->watchdog.work, intel_gt_watchdog_work); in intel_gt_common_init_early()
57 intel_wopcm_init_early(&gt->wopcm); in intel_gt_common_init_early()
58 intel_uc_init_early(&gt->uc); in intel_gt_common_init_early()
59 intel_rps_init_early(&gt->rps); in intel_gt_common_init_early()
67 gt = drmm_kzalloc(&i915->drm, sizeof(*gt), GFP_KERNEL); in intel_root_gt_init_early()
69 return -ENOMEM; in intel_root_gt_init_early()
71 i915->gt[0] = gt; in intel_root_gt_init_early()
73 gt->i915 = i915; in intel_root_gt_init_early()
74 gt->uncore = &i915->uncore; in intel_root_gt_init_early()
75 gt->irq_lock = drmm_kzalloc(&i915->drm, sizeof(*gt->irq_lock), GFP_KERNEL); in intel_root_gt_init_early()
76 if (!gt->irq_lock) in intel_root_gt_init_early()
77 return -ENOMEM; in intel_root_gt_init_early()
86 struct drm_i915_private *i915 = gt->i915; in intel_gt_probe_lmem()
87 unsigned int instance = gt->info.id; in intel_gt_probe_lmem()
95 if (err == -ENODEV) in intel_gt_probe_lmem()
103 mem->id = id; in intel_gt_probe_lmem()
104 mem->instance = instance; in intel_gt_probe_lmem()
106 intel_memory_region_set_name(mem, "local%u", mem->instance); in intel_gt_probe_lmem()
109 GEM_BUG_ON(i915->mm.regions[id]); in intel_gt_probe_lmem()
110 i915->mm.regions[id] = mem; in intel_gt_probe_lmem()
118 if (gt->type == GT_MEDIA) { in intel_gt_assign_ggtt()
119 gt->ggtt = to_gt(gt->i915)->ggtt; in intel_gt_assign_ggtt()
121 gt->ggtt = i915_ggtt_create(gt->i915); in intel_gt_assign_ggtt()
122 if (IS_ERR(gt->ggtt)) in intel_gt_assign_ggtt()
123 return PTR_ERR(gt->ggtt); in intel_gt_assign_ggtt()
126 list_add_tail(&gt->ggtt_link, &gt->ggtt->gt_list); in intel_gt_assign_ggtt()
135 intel_uc_init_mmio(&gt->uc); in intel_gt_init_mmio()
144 struct intel_uncore *uncore = gt->uncore; in init_unused_ring()
154 struct drm_i915_private *i915 = gt->i915; in init_unused_rings()
173 struct drm_i915_private *i915 = gt->i915; in intel_gt_init_hw()
174 struct intel_uncore *uncore = gt->uncore; in intel_gt_init_hw()
177 gt->last_init_time = ktime_get(); in intel_gt_init_hw()
188 INTEL_INFO(i915)->gt == 3 ? in intel_gt_init_hw()
213 ret = intel_uc_init_hw(&gt->uc); in intel_gt_init_hw()
235 if (GRAPHICS_VER(gt->i915) < 11) in intel_gt_perf_limit_reasons_reg()
238 return gt->type == GT_MEDIA ? in intel_gt_perf_limit_reasons_reg()
246 struct drm_i915_private *i915 = gt->i915; in intel_gt_clear_error_registers()
247 struct intel_uncore *uncore = gt->uncore; in intel_gt_clear_error_registers()
275 if (MEDIA_VER(i915) >= 13 && gt->type == GT_MEDIA) { in intel_gt_clear_error_registers()
367 struct intel_uncore *uncore = gt->uncore; in gen8_check_faults()
371 if (GRAPHICS_VER(gt->i915) >= 12) { in gen8_check_faults()
390 struct drm_i915_private *i915 = gt->i915; in intel_gt_check_and_clear_faults()
407 struct intel_uncore *uncore = gt->uncore; in intel_gt_flush_ggtt_writes()
421 * An uncached read (i.e. mmio) seems to be ideal for the round-trip in intel_gt_flush_ggtt_writes()
431 if (INTEL_INFO(gt->i915)->has_coherent_ggtt) in intel_gt_flush_ggtt_writes()
436 with_intel_runtime_pm_if_in_use(uncore->rpm, wakeref) { in intel_gt_flush_ggtt_writes()
439 spin_lock_irqsave(&uncore->lock, flags); in intel_gt_flush_ggtt_writes()
442 spin_unlock_irqrestore(&uncore->lock, flags); in intel_gt_flush_ggtt_writes()
449 if (GRAPHICS_VER(gt->i915) < 6) in intel_gt_chipset_flush()
455 intel_gsc_init(&gt->gsc, gt->i915); in intel_gt_driver_register()
457 intel_rps_driver_register(&gt->rps); in intel_gt_driver_register()
465 struct drm_i915_private *i915 = gt->i915; in intel_gt_init_scratch()
482 vma = i915_vma_instance(obj, &gt->ggtt->vm, NULL); in intel_gt_init_scratch()
492 gt->scratch = i915_vma_make_unshrinkable(vma); in intel_gt_init_scratch()
503 i915_vma_unpin_and_release(&gt->scratch, 0); in intel_gt_fini_scratch()
508 if (INTEL_PPGTT(gt->i915) > INTEL_PPGTT_ALIASING) in kernel_vm()
509 return &i915_ppgtt_create(gt, I915_BO_ALLOC_PM_EARLY)->vm; in kernel_vm()
511 return i915_vm_get(&gt->ggtt->vm); in kernel_vm()
516 struct i915_request *requests[I915_NUM_ENGINES] = {}; in __engines_record_defaults() local
524 * We load a context onto the hw (with restore-inhibit), then switch in __engines_record_defaults()
536 GEM_BUG_ON(!engine->kernel_context); in __engines_record_defaults()
563 requests[id] = i915_request_get(rq); in __engines_record_defaults()
575 if (intel_gt_wait_for_idle(gt, I915_GEM_IDLE_TIMEOUT) == -ETIME) { in __engines_record_defaults()
576 err = -EIO; in __engines_record_defaults()
580 for (id = 0; id < ARRAY_SIZE(requests); id++) { in __engines_record_defaults()
584 rq = requests[id]; in __engines_record_defaults()
588 if (rq->fence.error) { in __engines_record_defaults()
589 err = -EIO; in __engines_record_defaults()
593 GEM_BUG_ON(!test_bit(CONTEXT_ALLOC_BIT, &rq->context->flags)); in __engines_record_defaults()
594 if (!rq->context->state) in __engines_record_defaults()
598 state = shmem_create_from_object(rq->context->state->obj); in __engines_record_defaults()
603 rq->engine->default_state = state; in __engines_record_defaults()
609 * and ready to be torn-down. The quickest way we can accomplish in __engines_record_defaults()
615 for (id = 0; id < ARRAY_SIZE(requests); id++) { in __engines_record_defaults()
619 rq = requests[id]; in __engines_record_defaults()
623 ce = rq->context; in __engines_record_defaults()
641 err = -EIO; in __engines_verify_workarounds()
645 if (intel_gt_wait_for_idle(gt, I915_GEM_IDLE_TIMEOUT) == -ETIME) in __engines_verify_workarounds()
646 err = -EIO; in __engines_verify_workarounds()
665 /* If the device is asleep, we have no requests outstanding */ in intel_gt_wait_for_idle()
673 return -EINTR; in intel_gt_wait_for_idle()
682 return intel_uc_wait_for_idle(&gt->uc, remaining_timeout); in intel_gt_wait_for_idle()
689 err = i915_inject_probe_error(gt->i915, -ENODEV); in intel_gt_init()
702 intel_uncore_forcewake_get(gt->uncore, FORCEWAKE_ALL); in intel_gt_init()
705 GRAPHICS_VER(gt->i915) == 2 ? SZ_256K : SZ_4K); in intel_gt_init()
711 gt->vm = kernel_vm(gt); in intel_gt_init()
712 if (!gt->vm) { in intel_gt_init()
713 err = -ENOMEM; in intel_gt_init()
723 err = intel_uc_init(&gt->uc); in intel_gt_init()
743 err = i915_inject_probe_error(gt->i915, -EIO); in intel_gt_init()
747 intel_uc_init_late(&gt->uc); in intel_gt_init()
749 intel_migrate_init(&gt->migrate, gt); in intel_gt_init()
754 intel_uc_fini_hw(&gt->uc); in intel_gt_init()
756 intel_uc_fini(&gt->uc); in intel_gt_init()
759 i915_vm_put(fetch_and_zero(&gt->vm)); in intel_gt_init()
766 intel_uncore_forcewake_put(gt->uncore, FORCEWAKE_ALL); in intel_gt_init()
774 intel_migrate_fini(&gt->migrate); in intel_gt_driver_remove()
775 intel_uc_driver_remove(&gt->uc); in intel_gt_driver_remove()
787 intel_rps_driver_unregister(&gt->rps); in intel_gt_driver_unregister()
788 intel_gsc_fini(&gt->gsc); in intel_gt_driver_unregister()
800 * - We do want the error on runtime wedging, because there are in intel_gt_driver_unregister()
803 * - The worker is responsible for multiple submissions (GSC FW load, in intel_gt_driver_unregister()
808 * will likely already be idle in the great majority of non-selftest in intel_gt_driver_unregister()
811 intel_gsc_uc_flush_work(&gt->uc.gsc); in intel_gt_driver_unregister()
815 * all in-flight requests so that we can quickly unbind the active in intel_gt_driver_unregister()
821 with_intel_runtime_pm(gt->uncore->rpm, wakeref) in intel_gt_driver_unregister()
829 vm = fetch_and_zero(&gt->vm); in intel_gt_driver_release()
833 intel_wa_list_free(&gt->wa_list); in intel_gt_driver_release()
849 intel_uc_driver_late_release(&gt->uc); in intel_gt_driver_late_release_all()
866 uncore = drmm_kzalloc(&gt->i915->drm, sizeof(*uncore), GFP_KERNEL); in intel_gt_tile_setup()
868 return -ENOMEM; in intel_gt_tile_setup()
870 irq_lock = drmm_kzalloc(&gt->i915->drm, sizeof(*irq_lock), GFP_KERNEL); in intel_gt_tile_setup()
872 return -ENOMEM; in intel_gt_tile_setup()
874 gt->uncore = uncore; in intel_gt_tile_setup()
875 gt->irq_lock = irq_lock; in intel_gt_tile_setup()
880 intel_uncore_init_early(gt->uncore, gt); in intel_gt_tile_setup()
882 ret = intel_uncore_setup_mmio(gt->uncore, phys_addr); in intel_gt_tile_setup()
886 gt->phys_addr = phys_addr; in intel_gt_tile_setup()
893 struct pci_dev *pdev = to_pci_dev(i915->drm.dev); in intel_gt_probe_all()
909 gt->i915 = i915; in intel_gt_probe_all()
910 gt->name = "Primary GT"; in intel_gt_probe_all()
911 gt->info.engine_mask = INTEL_INFO(i915)->platform_engine_mask; in intel_gt_probe_all()
913 gt_dbg(gt, "Setting up %s\n", gt->name); in intel_gt_probe_all()
921 for (i = 1, gtdef = &INTEL_INFO(i915)->extra_gt_list[i - 1]; in intel_gt_probe_all()
922 gtdef->name != NULL; in intel_gt_probe_all()
923 i++, gtdef = &INTEL_INFO(i915)->extra_gt_list[i - 1]) { in intel_gt_probe_all()
924 gt = drmm_kzalloc(&i915->drm, sizeof(*gt), GFP_KERNEL); in intel_gt_probe_all()
926 ret = -ENOMEM; in intel_gt_probe_all()
930 gt->i915 = i915; in intel_gt_probe_all()
931 gt->name = gtdef->name; in intel_gt_probe_all()
932 gt->type = gtdef->type; in intel_gt_probe_all()
933 gt->info.engine_mask = gtdef->engine_mask; in intel_gt_probe_all()
934 gt->info.id = i; in intel_gt_probe_all()
936 gt_dbg(gt, "Setting up %s\n", gt->name); in intel_gt_probe_all()
938 gtdef->mapping_base, in intel_gt_probe_all()
941 ret = -ENODEV; in intel_gt_probe_all()
945 switch (gtdef->type) { in intel_gt_probe_all()
947 ret = intel_gt_tile_setup(gt, phys_addr + gtdef->mapping_base); in intel_gt_probe_all()
951 ret = intel_sa_mediagt_setup(gt, phys_addr + gtdef->mapping_base, in intel_gt_probe_all()
952 gtdef->gsi_offset); in intel_gt_probe_all()
958 MISSING_CASE(gtdef->type); in intel_gt_probe_all()
959 ret = -ENODEV; in intel_gt_probe_all()
965 i915->gt[i] = gt; in intel_gt_probe_all()
971 i915_probe_error(i915, "Failed to initialize %s! (%d)\n", gtdef->name, ret); in intel_gt_probe_all()
993 drm_printf(p, "available engines: %x\n", info->engine_mask); in intel_gt_info_print()
995 intel_sseu_dump(&info->sseu, p); in intel_gt_info_print()
1008 if (HAS_LLC(gt->i915) || always_coherent) in intel_gt_coherent_map_type()
1022 return MEDIA_VER_FULL(gt->i915) == IP_VER(13, 0) && gt->type == GT_MEDIA; in intel_gt_needs_wa_22016122933()
1027 struct intel_engine_cs *engine = gt->engine[BCS0]; in __intel_gt_bind_context_set_ready()
1029 if (engine && engine->bind_context) in __intel_gt_bind_context_set_ready()
1030 engine->bind_context_ready = ready; in __intel_gt_bind_context_set_ready()
1034 * intel_gt_bind_context_set_ready - Set the context binding as ready
1046 * intel_gt_bind_context_set_unready - Set the context binding as ready
1058 * intel_gt_is_bind_context_ready - Check if context binding is ready
1066 struct intel_engine_cs *engine = gt->engine[BCS0]; in intel_gt_is_bind_context_ready()
1069 return engine->bind_context_ready; in intel_gt_is_bind_context_ready()