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(>->closed_vma); in intel_gt_common_init_early()
45 spin_lock_init(>->closed_lock); in intel_gt_common_init_early()
47 init_llist_head(>->watchdog.list); in intel_gt_common_init_early()
48 INIT_WORK(>->watchdog.work, intel_gt_watchdog_work); in intel_gt_common_init_early()
57 intel_wopcm_init_early(>->wopcm); in intel_gt_common_init_early()
58 intel_uc_init_early(>->uc); in intel_gt_common_init_early()
59 intel_rps_init_early(>->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(>->ggtt_link, >->ggtt->gt_list); in intel_gt_assign_ggtt()
135 intel_uc_init_mmio(>->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(>->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()
362 struct intel_uncore *uncore = gt->uncore; in gen8_check_faults()
366 if (GRAPHICS_VER(gt->i915) >= 12) { in gen8_check_faults()
403 struct drm_i915_private *i915 = gt->i915; in intel_gt_check_and_clear_faults()
420 struct intel_uncore *uncore = gt->uncore; in intel_gt_flush_ggtt_writes()
434 * An uncached read (i.e. mmio) seems to be ideal for the round-trip in intel_gt_flush_ggtt_writes()
444 if (INTEL_INFO(gt->i915)->has_coherent_ggtt) in intel_gt_flush_ggtt_writes()
449 with_intel_runtime_pm_if_in_use(uncore->rpm, wakeref) { in intel_gt_flush_ggtt_writes()
452 spin_lock_irqsave(&uncore->lock, flags); in intel_gt_flush_ggtt_writes()
455 spin_unlock_irqrestore(&uncore->lock, flags); in intel_gt_flush_ggtt_writes()
462 if (GRAPHICS_VER(gt->i915) < 6) in intel_gt_chipset_flush()
468 intel_gsc_init(>->gsc, gt->i915); in intel_gt_driver_register()
470 intel_rps_driver_register(>->rps); in intel_gt_driver_register()
478 struct drm_i915_private *i915 = gt->i915; in intel_gt_init_scratch()
495 vma = i915_vma_instance(obj, >->ggtt->vm, NULL); in intel_gt_init_scratch()
505 gt->scratch = i915_vma_make_unshrinkable(vma); in intel_gt_init_scratch()
516 i915_vma_unpin_and_release(>->scratch, 0); in intel_gt_fini_scratch()
521 if (INTEL_PPGTT(gt->i915) > INTEL_PPGTT_ALIASING) in kernel_vm()
522 return &i915_ppgtt_create(gt, I915_BO_ALLOC_PM_EARLY)->vm; in kernel_vm()
524 return i915_vm_get(>->ggtt->vm); in kernel_vm()
529 struct i915_request *requests[I915_NUM_ENGINES] = {}; in __engines_record_defaults() local
537 * We load a context onto the hw (with restore-inhibit), then switch in __engines_record_defaults()
549 GEM_BUG_ON(!engine->kernel_context); in __engines_record_defaults()
576 requests[id] = i915_request_get(rq); in __engines_record_defaults()
588 if (intel_gt_wait_for_idle(gt, I915_GEM_IDLE_TIMEOUT) == -ETIME) { in __engines_record_defaults()
589 err = -EIO; in __engines_record_defaults()
593 for (id = 0; id < ARRAY_SIZE(requests); id++) { in __engines_record_defaults()
597 rq = requests[id]; in __engines_record_defaults()
601 if (rq->fence.error) { in __engines_record_defaults()
602 err = -EIO; in __engines_record_defaults()
606 GEM_BUG_ON(!test_bit(CONTEXT_ALLOC_BIT, &rq->context->flags)); in __engines_record_defaults()
607 if (!rq->context->state) in __engines_record_defaults()
611 state = shmem_create_from_object(rq->context->state->obj); in __engines_record_defaults()
616 rq->engine->default_state = state; in __engines_record_defaults()
622 * and ready to be torn-down. The quickest way we can accomplish in __engines_record_defaults()
628 for (id = 0; id < ARRAY_SIZE(requests); id++) { in __engines_record_defaults()
632 rq = requests[id]; in __engines_record_defaults()
636 ce = rq->context; in __engines_record_defaults()
654 err = -EIO; in __engines_verify_workarounds()
658 if (intel_gt_wait_for_idle(gt, I915_GEM_IDLE_TIMEOUT) == -ETIME) in __engines_verify_workarounds()
659 err = -EIO; in __engines_verify_workarounds()
678 /* If the device is asleep, we have no requests outstanding */ in intel_gt_wait_for_idle()
686 return -EINTR; in intel_gt_wait_for_idle()
695 return intel_uc_wait_for_idle(>->uc, remaining_timeout); in intel_gt_wait_for_idle()
702 err = i915_inject_probe_error(gt->i915, -ENODEV); in intel_gt_init()
715 intel_uncore_forcewake_get(gt->uncore, FORCEWAKE_ALL); in intel_gt_init()
718 GRAPHICS_VER(gt->i915) == 2 ? SZ_256K : SZ_4K); in intel_gt_init()
724 gt->vm = kernel_vm(gt); in intel_gt_init()
725 if (!gt->vm) { in intel_gt_init()
726 err = -ENOMEM; in intel_gt_init()
736 err = intel_uc_init(>->uc); in intel_gt_init()
756 err = i915_inject_probe_error(gt->i915, -EIO); in intel_gt_init()
760 intel_uc_init_late(>->uc); in intel_gt_init()
762 intel_migrate_init(>->migrate, gt); in intel_gt_init()
767 intel_uc_fini_hw(>->uc); in intel_gt_init()
769 intel_uc_fini(>->uc); in intel_gt_init()
772 i915_vm_put(fetch_and_zero(>->vm)); in intel_gt_init()
779 intel_uncore_forcewake_put(gt->uncore, FORCEWAKE_ALL); in intel_gt_init()
787 intel_migrate_fini(>->migrate); in intel_gt_driver_remove()
788 intel_uc_driver_remove(>->uc); in intel_gt_driver_remove()
800 intel_rps_driver_unregister(>->rps); in intel_gt_driver_unregister()
801 intel_gsc_fini(>->gsc); in intel_gt_driver_unregister()
813 * - We do want the error on runtime wedging, because there are in intel_gt_driver_unregister()
816 * - The worker is responsible for multiple submissions (GSC FW load, in intel_gt_driver_unregister()
821 * will likely already be idle in the great majority of non-selftest in intel_gt_driver_unregister()
824 intel_gsc_uc_flush_work(>->uc.gsc); in intel_gt_driver_unregister()
828 * all in-flight requests so that we can quickly unbind the active in intel_gt_driver_unregister()
834 with_intel_runtime_pm(gt->uncore->rpm, wakeref) in intel_gt_driver_unregister()
842 vm = fetch_and_zero(>->vm); in intel_gt_driver_release()
846 intel_wa_list_free(>->wa_list); in intel_gt_driver_release()
862 intel_uc_driver_late_release(>->uc); in intel_gt_driver_late_release_all()
879 uncore = drmm_kzalloc(>->i915->drm, sizeof(*uncore), GFP_KERNEL); in intel_gt_tile_setup()
881 return -ENOMEM; in intel_gt_tile_setup()
883 irq_lock = drmm_kzalloc(>->i915->drm, sizeof(*irq_lock), GFP_KERNEL); in intel_gt_tile_setup()
885 return -ENOMEM; in intel_gt_tile_setup()
887 gt->uncore = uncore; in intel_gt_tile_setup()
888 gt->irq_lock = irq_lock; in intel_gt_tile_setup()
893 intel_uncore_init_early(gt->uncore, gt); in intel_gt_tile_setup()
895 ret = intel_uncore_setup_mmio(gt->uncore, phys_addr); in intel_gt_tile_setup()
899 gt->phys_addr = phys_addr; in intel_gt_tile_setup()
906 struct pci_dev *pdev = to_pci_dev(i915->drm.dev); in intel_gt_probe_all()
922 gt->i915 = i915; in intel_gt_probe_all()
923 gt->name = "Primary GT"; in intel_gt_probe_all()
924 gt->info.engine_mask = INTEL_INFO(i915)->platform_engine_mask; in intel_gt_probe_all()
926 gt_dbg(gt, "Setting up %s\n", gt->name); in intel_gt_probe_all()
934 for (i = 1, gtdef = &INTEL_INFO(i915)->extra_gt_list[i - 1]; in intel_gt_probe_all()
935 gtdef->name != NULL; in intel_gt_probe_all()
936 i++, gtdef = &INTEL_INFO(i915)->extra_gt_list[i - 1]) { in intel_gt_probe_all()
937 gt = drmm_kzalloc(&i915->drm, sizeof(*gt), GFP_KERNEL); in intel_gt_probe_all()
939 ret = -ENOMEM; in intel_gt_probe_all()
943 gt->i915 = i915; in intel_gt_probe_all()
944 gt->name = gtdef->name; in intel_gt_probe_all()
945 gt->type = gtdef->type; in intel_gt_probe_all()
946 gt->info.engine_mask = gtdef->engine_mask; in intel_gt_probe_all()
947 gt->info.id = i; in intel_gt_probe_all()
949 gt_dbg(gt, "Setting up %s\n", gt->name); in intel_gt_probe_all()
951 gtdef->mapping_base, in intel_gt_probe_all()
954 ret = -ENODEV; in intel_gt_probe_all()
958 switch (gtdef->type) { in intel_gt_probe_all()
960 ret = intel_gt_tile_setup(gt, phys_addr + gtdef->mapping_base); in intel_gt_probe_all()
964 ret = intel_sa_mediagt_setup(gt, phys_addr + gtdef->mapping_base, in intel_gt_probe_all()
965 gtdef->gsi_offset); in intel_gt_probe_all()
971 MISSING_CASE(gtdef->type); in intel_gt_probe_all()
972 ret = -ENODEV; in intel_gt_probe_all()
978 i915->gt[i] = gt; in intel_gt_probe_all()
984 i915_probe_error(i915, "Failed to initialize %s! (%d)\n", gtdef->name, ret); in intel_gt_probe_all()
1006 drm_printf(p, "available engines: %x\n", info->engine_mask); in intel_gt_info_print()
1008 intel_sseu_dump(&info->sseu, p); in intel_gt_info_print()
1021 if (HAS_LLC(gt->i915) || always_coherent) in intel_gt_coherent_map_type()
1035 return MEDIA_VER_FULL(gt->i915) == IP_VER(13, 0) && gt->type == GT_MEDIA; in intel_gt_needs_wa_22016122933()
1040 struct intel_engine_cs *engine = gt->engine[BCS0]; in __intel_gt_bind_context_set_ready()
1042 if (engine && engine->bind_context) in __intel_gt_bind_context_set_ready()
1043 engine->bind_context_ready = ready; in __intel_gt_bind_context_set_ready()
1047 * intel_gt_bind_context_set_ready - Set the context binding as ready
1059 * intel_gt_bind_context_set_unready - Set the context binding as ready
1071 * intel_gt_is_bind_context_ready - Check if context binding is ready
1079 struct intel_engine_cs *engine = gt->engine[BCS0]; in intel_gt_is_bind_context_ready()
1082 return engine->bind_context_ready; in intel_gt_is_bind_context_ready()