Lines Matching refs:guc

80 static u32 guc_ads_regset_size(struct intel_guc *guc)
82 GEM_BUG_ON(!guc->ads_regset_size);
83 return guc->ads_regset_size;
86 static u32 guc_ads_golden_ctxt_size(struct intel_guc *guc)
88 return PAGE_ALIGN(guc->ads_golden_ctxt_size);
91 static u32 guc_ads_capture_size(struct intel_guc *guc)
93 return PAGE_ALIGN(guc->ads_capture_size);
96 static u32 guc_ads_private_data_size(struct intel_guc *guc)
98 return PAGE_ALIGN(guc->fw.private_data_size);
101 static u32 guc_ads_regset_offset(struct intel_guc *guc)
106 static u32 guc_ads_golden_ctxt_offset(struct intel_guc *guc)
110 offset = guc_ads_regset_offset(guc) +
111 guc_ads_regset_size(guc);
116 static u32 guc_ads_capture_offset(struct intel_guc *guc)
120 offset = guc_ads_golden_ctxt_offset(guc) +
121 guc_ads_golden_ctxt_size(guc);
126 static u32 guc_ads_private_data_offset(struct intel_guc *guc)
130 offset = guc_ads_capture_offset(guc) +
131 guc_ads_capture_size(guc);
136 static u32 guc_ads_blob_size(struct intel_guc *guc)
138 return guc_ads_private_data_offset(guc) +
139 guc_ads_private_data_size(guc);
142 static void guc_policies_init(struct intel_guc *guc)
144 struct intel_gt *gt = guc_to_gt(guc);
148 ads_blob_write(guc, policies.dpc_promote_time,
150 ads_blob_write(guc, policies.max_num_work_items,
156 ads_blob_write(guc, policies.global_flags, global_flags);
157 ads_blob_write(guc, policies.is_valid, 1);
160 void intel_guc_ads_print_policy_info(struct intel_guc *guc,
163 if (unlikely(iosys_map_is_null(&guc->ads_map)))
168 ads_blob_read(guc, policies.dpc_promote_time));
170 ads_blob_read(guc, policies.max_num_work_items));
172 ads_blob_read(guc, policies.global_flags));
175 static int guc_action_policies_update(struct intel_guc *guc, u32 policy_offset)
182 return intel_guc_send_busy_loop(guc, action, ARRAY_SIZE(action), 0, true);
185 int intel_guc_global_policies_update(struct intel_guc *guc)
187 struct intel_gt *gt = guc_to_gt(guc);
192 if (iosys_map_is_null(&guc->ads_map))
195 scheduler_policies = ads_blob_read(guc, ads.scheduler_policies);
198 guc_policies_init(guc);
200 if (!intel_guc_is_ready(guc))
204 ret = guc_action_policies_update(guc, scheduler_policies);
414 static long guc_mmio_reg_state_create(struct intel_guc *guc)
416 struct intel_gt *gt = guc_to_gt(guc);
430 guc->ads_regset_count[id] = temp_set.storage_used - used;
431 total += guc->ads_regset_count[id];
434 guc->ads_regset = temp_set.storage;
436 guc_dbg(guc, "Used %zu KB for temporary ADS regset\n",
446 static void guc_mmio_reg_state_init(struct intel_guc *guc)
448 struct intel_gt *gt = guc_to_gt(guc);
453 offset = guc_ads_regset_offset(guc);
454 addr_ggtt = intel_guc_ggtt_offset(guc, guc->ads_vma) + offset;
456 iosys_map_memcpy_to(&guc->ads_map, offset, guc->ads_regset,
457 guc->ads_regset_size);
460 u32 count = guc->ads_regset_count[id];
469 ads_blob_write(guc,
472 ads_blob_write(guc,
478 ads_blob_write(guc,
481 ads_blob_write(guc,
510 static int guc_prep_golden_context(struct intel_guc *guc)
512 struct intel_gt *gt = guc_to_gt(guc);
531 if (!iosys_map_is_null(&guc->ads_map)) {
532 offset = guc_ads_golden_ctxt_offset(guc);
533 addr_ggtt = intel_guc_ggtt_offset(guc, guc->ads_vma) + offset;
534 info_map = IOSYS_MAP_INIT_OFFSET(&guc->ads_map,
552 if (iosys_map_is_null(&guc->ads_map))
566 ads_blob_write(guc, ads.eng_state_size[guc_class],
568 ads_blob_write(guc, ads.golden_context_lrca[guc_class],
575 if (guc->ads_golden_ctxt_size)
576 GEM_BUG_ON(guc->ads_golden_ctxt_size != total_size);
599 static void guc_init_golden_context(struct intel_guc *guc)
602 struct intel_gt *gt = guc_to_gt(guc);
610 GEM_BUG_ON(iosys_map_is_null(&guc->ads_map));
616 offset = guc_ads_golden_ctxt_offset(guc);
617 addr_ggtt = intel_guc_ggtt_offset(guc, guc->ads_vma) + offset;
621 if (!ads_blob_read(guc, system_info.engine_enabled_masks[guc_class]))
630 guc_err(guc, "No engine state recorded for class %d!\n",
632 ads_blob_write(guc, ads.eng_state_size[guc_class], 0);
633 ads_blob_write(guc, ads.golden_context_lrca[guc_class], 0);
637 GEM_BUG_ON(ads_blob_read(guc, ads.eng_state_size[guc_class]) !=
639 GEM_BUG_ON(ads_blob_read(guc, ads.golden_context_lrca[guc_class]) != addr_ggtt);
643 shmem_read_to_iosys_map(engine->default_state, 0, &guc->ads_map,
648 GEM_BUG_ON(guc->ads_golden_ctxt_size != total_size);
685 guc_capture_prep_lists(struct intel_guc *guc)
687 struct intel_gt *gt = guc_to_gt(guc);
696 ads_is_mapped = !iosys_map_is_null(&guc->ads_map);
698 capture_offset = guc_ads_capture_offset(guc);
699 ads_ggtt = intel_guc_ggtt_offset(guc, guc->ads_vma);
700 info_map = IOSYS_MAP_INIT_OFFSET(&guc->ads_map,
711 if (!intel_guc_capture_getnullheader(guc, &ptr, &size))
712 iosys_map_memcpy_to(&guc->ads_map, capture_offset, ptr, size);
724 ads_blob_write(guc, ads.capture_class[i][j], null_ggtt);
725 ads_blob_write(guc, ads.capture_instance[i][j], null_ggtt);
729 if (intel_guc_capture_getlistsize(guc, i,
733 ads_blob_write(guc, ads.capture_class[i][j], null_ggtt);
738 if (total_size > guc->ads_capture_size ||
739 intel_guc_capture_getlist(guc, i,
742 ads_blob_write(guc, ads.capture_class[i][j], null_ggtt);
745 ads_blob_write(guc, ads.capture_class[i][j], ads_ggtt +
747 iosys_map_memcpy_to(&guc->ads_map, capture_offset, ptr, size);
751 if (intel_guc_capture_getlistsize(guc, i,
755 ads_blob_write(guc, ads.capture_instance[i][j], null_ggtt);
760 if (total_size > guc->ads_capture_size ||
761 intel_guc_capture_getlist(guc, i,
764 ads_blob_write(guc, ads.capture_instance[i][j], null_ggtt);
767 ads_blob_write(guc, ads.capture_instance[i][j], ads_ggtt +
769 iosys_map_memcpy_to(&guc->ads_map, capture_offset, ptr, size);
773 if (intel_guc_capture_getlistsize(guc, i, GUC_CAPTURE_LIST_TYPE_GLOBAL, 0, &size)) {
775 ads_blob_write(guc, ads.capture_global[i], null_ggtt);
780 if (total_size > guc->ads_capture_size ||
781 intel_guc_capture_getlist(guc, i, GUC_CAPTURE_LIST_TYPE_GLOBAL, 0,
783 ads_blob_write(guc, ads.capture_global[i], null_ggtt);
786 ads_blob_write(guc, ads.capture_global[i], ads_ggtt + capture_offset);
787 iosys_map_memcpy_to(&guc->ads_map, capture_offset, ptr, size);
792 if (guc->ads_capture_size && guc->ads_capture_size != PAGE_ALIGN(total_size))
793 guc_warn(guc, "ADS capture alloc size changed from %d to %d\n",
794 guc->ads_capture_size, PAGE_ALIGN(total_size));
799 static void __guc_ads_init(struct intel_guc *guc)
801 struct intel_gt *gt = guc_to_gt(guc);
803 struct iosys_map info_map = IOSYS_MAP_INIT_OFFSET(&guc->ads_map,
808 guc_policies_init(guc);
813 ads_blob_write(guc, system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_SLICE_ENABLED],
815 ads_blob_write(guc, system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK],
821 ads_blob_write(guc,
828 guc_prep_golden_context(guc);
830 guc_mapping_table_init(guc_to_gt(guc), &info_map);
832 base = intel_guc_ggtt_offset(guc, guc->ads_vma);
835 guc_capture_prep_lists(guc);
838 ads_blob_write(guc, ads.scheduler_policies, base +
840 ads_blob_write(guc, ads.gt_system_info, base +
844 guc_mmio_reg_state_init(guc);
847 ads_blob_write(guc, ads.private_data, base +
848 guc_ads_private_data_offset(guc));
850 i915_gem_object_flush_map(guc->ads_vma->obj);
855 * @guc: intel_guc struct
860 int intel_guc_ads_create(struct intel_guc *guc)
866 GEM_BUG_ON(guc->ads_vma);
872 ret = guc_mmio_reg_state_create(guc);
875 guc->ads_regset_size = ret;
878 ret = guc_prep_golden_context(guc);
881 guc->ads_golden_ctxt_size = ret;
884 ret = guc_capture_prep_lists(guc);
887 guc->ads_capture_size = ret;
890 size = guc_ads_blob_size(guc);
892 ret = intel_guc_allocate_and_map_vma(guc, size, &guc->ads_vma,
897 if (i915_gem_object_is_lmem(guc->ads_vma->obj))
898 iosys_map_set_vaddr_iomem(&guc->ads_map, (void __iomem *)ads_blob);
900 iosys_map_set_vaddr(&guc->ads_map, ads_blob);
902 __guc_ads_init(guc);
907 void intel_guc_ads_init_late(struct intel_guc *guc)
916 guc_init_golden_context(guc);
919 void intel_guc_ads_destroy(struct intel_guc *guc)
921 i915_vma_unpin_and_release(&guc->ads_vma, I915_VMA_RELEASE_MAP);
922 iosys_map_clear(&guc->ads_map);
923 kfree(guc->ads_regset);
926 static void guc_ads_private_data_reset(struct intel_guc *guc)
930 size = guc_ads_private_data_size(guc);
934 iosys_map_memset(&guc->ads_map, guc_ads_private_data_offset(guc),
940 * @guc: intel_guc struct
946 void intel_guc_ads_reset(struct intel_guc *guc)
948 if (!guc->ads_vma)
951 __guc_ads_init(guc);
953 guc_ads_private_data_reset(guc);
956 u32 intel_guc_engine_usage_offset(struct intel_guc *guc)
958 return intel_guc_ggtt_offset(guc, guc->ads_vma) +
964 struct intel_guc *guc = &engine->gt->uc.guc;
969 return IOSYS_MAP_INIT_OFFSET(&guc->ads_map, offset);