Lines Matching defs:guc

84 static u32 guc_ads_regset_size(struct intel_guc *guc)
86 GEM_BUG_ON(!guc->ads_regset_size);
87 return guc->ads_regset_size;
90 static u32 guc_ads_golden_ctxt_size(struct intel_guc *guc)
92 return PAGE_ALIGN(guc->ads_golden_ctxt_size);
95 static u32 guc_ads_waklv_size(struct intel_guc *guc)
97 return PAGE_ALIGN(guc->ads_waklv_size);
100 static u32 guc_ads_capture_size(struct intel_guc *guc)
102 return PAGE_ALIGN(guc->ads_capture_size);
105 static u32 guc_ads_private_data_size(struct intel_guc *guc)
107 return PAGE_ALIGN(guc->fw.private_data_size);
110 static u32 guc_ads_regset_offset(struct intel_guc *guc)
115 static u32 guc_ads_golden_ctxt_offset(struct intel_guc *guc)
119 offset = guc_ads_regset_offset(guc) +
120 guc_ads_regset_size(guc);
125 static u32 guc_ads_waklv_offset(struct intel_guc *guc)
129 offset = guc_ads_golden_ctxt_offset(guc) +
130 guc_ads_golden_ctxt_size(guc);
135 static u32 guc_ads_capture_offset(struct intel_guc *guc)
139 offset = guc_ads_waklv_offset(guc) +
140 guc_ads_waklv_size(guc);
145 static u32 guc_ads_private_data_offset(struct intel_guc *guc)
149 offset = guc_ads_capture_offset(guc) +
150 guc_ads_capture_size(guc);
155 static u32 guc_ads_blob_size(struct intel_guc *guc)
157 return guc_ads_private_data_offset(guc) +
158 guc_ads_private_data_size(guc);
161 static void guc_policies_init(struct intel_guc *guc)
163 struct intel_gt *gt = guc_to_gt(guc);
167 ads_blob_write(guc, policies.dpc_promote_time,
169 ads_blob_write(guc, policies.max_num_work_items,
175 ads_blob_write(guc, policies.global_flags, global_flags);
176 ads_blob_write(guc, policies.is_valid, 1);
179 void intel_guc_ads_print_policy_info(struct intel_guc *guc,
182 if (unlikely(iosys_map_is_null(&guc->ads_map)))
187 ads_blob_read(guc, policies.dpc_promote_time));
189 ads_blob_read(guc, policies.max_num_work_items));
191 ads_blob_read(guc, policies.global_flags));
194 static int guc_action_policies_update(struct intel_guc *guc, u32 policy_offset)
201 return intel_guc_send_busy_loop(guc, action, ARRAY_SIZE(action), 0, true);
204 int intel_guc_global_policies_update(struct intel_guc *guc)
206 struct intel_gt *gt = guc_to_gt(guc);
211 if (iosys_map_is_null(&guc->ads_map))
214 scheduler_policies = ads_blob_read(guc, ads.scheduler_policies);
217 guc_policies_init(guc);
219 if (!intel_guc_is_ready(guc))
223 ret = guc_action_policies_update(guc, scheduler_policies);
433 static long guc_mmio_reg_state_create(struct intel_guc *guc)
435 struct intel_gt *gt = guc_to_gt(guc);
449 guc->ads_regset_count[id] = temp_set.storage_used - used;
450 total += guc->ads_regset_count[id];
453 guc->ads_regset = temp_set.storage;
455 guc_dbg(guc, "Used %zu KB for temporary ADS regset\n",
465 static void guc_mmio_reg_state_init(struct intel_guc *guc)
467 struct intel_gt *gt = guc_to_gt(guc);
472 offset = guc_ads_regset_offset(guc);
473 addr_ggtt = intel_guc_ggtt_offset(guc, guc->ads_vma) + offset;
475 iosys_map_memcpy_to(&guc->ads_map, offset, guc->ads_regset,
476 guc->ads_regset_size);
479 u32 count = guc->ads_regset_count[id];
488 ads_blob_write(guc,
491 ads_blob_write(guc,
497 ads_blob_write(guc,
500 ads_blob_write(guc,
529 static int guc_prep_golden_context(struct intel_guc *guc)
531 struct intel_gt *gt = guc_to_gt(guc);
550 if (!iosys_map_is_null(&guc->ads_map)) {
551 offset = guc_ads_golden_ctxt_offset(guc);
552 addr_ggtt = intel_guc_ggtt_offset(guc, guc->ads_vma) + offset;
553 info_map = IOSYS_MAP_INIT_OFFSET(&guc->ads_map,
571 if (iosys_map_is_null(&guc->ads_map))
585 ads_blob_write(guc, ads.eng_state_size[guc_class],
587 ads_blob_write(guc, ads.golden_context_lrca[guc_class],
594 if (guc->ads_golden_ctxt_size)
595 GEM_BUG_ON(guc->ads_golden_ctxt_size != total_size);
618 static void guc_init_golden_context(struct intel_guc *guc)
621 struct intel_gt *gt = guc_to_gt(guc);
629 GEM_BUG_ON(iosys_map_is_null(&guc->ads_map));
635 offset = guc_ads_golden_ctxt_offset(guc);
636 addr_ggtt = intel_guc_ggtt_offset(guc, guc->ads_vma) + offset;
640 if (!ads_blob_read(guc, system_info.engine_enabled_masks[guc_class]))
649 guc_err(guc, "No engine state recorded for class %d!\n",
651 ads_blob_write(guc, ads.eng_state_size[guc_class], 0);
652 ads_blob_write(guc, ads.golden_context_lrca[guc_class], 0);
656 GEM_BUG_ON(ads_blob_read(guc, ads.eng_state_size[guc_class]) !=
658 GEM_BUG_ON(ads_blob_read(guc, ads.golden_context_lrca[guc_class]) != addr_ggtt);
662 shmem_read_to_iosys_map(engine->default_state, 0, &guc->ads_map,
667 GEM_BUG_ON(guc->ads_golden_ctxt_size != total_size);
704 guc_capture_prep_lists(struct intel_guc *guc)
706 struct intel_gt *gt = guc_to_gt(guc);
715 ads_is_mapped = !iosys_map_is_null(&guc->ads_map);
717 capture_offset = guc_ads_capture_offset(guc);
718 ads_ggtt = intel_guc_ggtt_offset(guc, guc->ads_vma);
719 info_map = IOSYS_MAP_INIT_OFFSET(&guc->ads_map,
730 if (!intel_guc_capture_getnullheader(guc, &ptr, &size))
731 iosys_map_memcpy_to(&guc->ads_map, capture_offset, ptr, size);
743 ads_blob_write(guc, ads.capture_class[i][j], null_ggtt);
744 ads_blob_write(guc, ads.capture_instance[i][j], null_ggtt);
748 if (intel_guc_capture_getlistsize(guc, i,
752 ads_blob_write(guc, ads.capture_class[i][j], null_ggtt);
757 if (total_size > guc->ads_capture_size ||
758 intel_guc_capture_getlist(guc, i,
761 ads_blob_write(guc, ads.capture_class[i][j], null_ggtt);
764 ads_blob_write(guc, ads.capture_class[i][j], ads_ggtt +
766 iosys_map_memcpy_to(&guc->ads_map, capture_offset, ptr, size);
770 if (intel_guc_capture_getlistsize(guc, i,
774 ads_blob_write(guc, ads.capture_instance[i][j], null_ggtt);
779 if (total_size > guc->ads_capture_size ||
780 intel_guc_capture_getlist(guc, i,
783 ads_blob_write(guc, ads.capture_instance[i][j], null_ggtt);
786 ads_blob_write(guc, ads.capture_instance[i][j], ads_ggtt +
788 iosys_map_memcpy_to(&guc->ads_map, capture_offset, ptr, size);
792 if (intel_guc_capture_getlistsize(guc, i, GUC_CAPTURE_LIST_TYPE_GLOBAL, 0, &size)) {
794 ads_blob_write(guc, ads.capture_global[i], null_ggtt);
799 if (total_size > guc->ads_capture_size ||
800 intel_guc_capture_getlist(guc, i, GUC_CAPTURE_LIST_TYPE_GLOBAL, 0,
802 ads_blob_write(guc, ads.capture_global[i], null_ggtt);
805 ads_blob_write(guc, ads.capture_global[i], ads_ggtt + capture_offset);
806 iosys_map_memcpy_to(&guc->ads_map, capture_offset, ptr, size);
811 if (guc->ads_capture_size && guc->ads_capture_size != PAGE_ALIGN(total_size))
812 guc_warn(guc, "ADS capture alloc size changed from %d to %d\n",
813 guc->ads_capture_size, PAGE_ALIGN(total_size));
819 static u32 guc_waklv_ra_mode(struct intel_guc *guc, u32 offset, u32 remain)
832 iosys_map_memcpy_to(&guc->ads_map, offset, klv_entry, size);
837 static void guc_waklv_init(struct intel_guc *guc)
839 struct intel_gt *gt = guc_to_gt(guc);
845 if (GUC_FIRMWARE_VER(guc) < MAKE_GUC_VER(70, 10, 0))
848 GEM_BUG_ON(iosys_map_is_null(&guc->ads_map));
849 offset = guc_ads_waklv_offset(guc);
850 remain = guc_ads_waklv_size(guc);
854 size = guc_waklv_ra_mode(guc, offset, remain);
859 size = guc_ads_waklv_size(guc) - remain;
863 offset = guc_ads_waklv_offset(guc);
864 addr_ggtt = intel_guc_ggtt_offset(guc, guc->ads_vma) + offset;
866 ads_blob_write(guc, ads.wa_klv_addr_lo, addr_ggtt);
867 ads_blob_write(guc, ads.wa_klv_addr_hi, 0);
868 ads_blob_write(guc, ads.wa_klv_size, size);
871 static int guc_prep_waklv(struct intel_guc *guc)
877 static void __guc_ads_init(struct intel_guc *guc)
879 struct intel_gt *gt = guc_to_gt(guc);
881 struct iosys_map info_map = IOSYS_MAP_INIT_OFFSET(&guc->ads_map,
886 guc_policies_init(guc);
891 ads_blob_write(guc, system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_SLICE_ENABLED],
893 ads_blob_write(guc, system_info.generic_gt_sysinfo[GUC_GENERIC_GT_SYSINFO_VDBOX_SFC_SUPPORT_MASK],
899 ads_blob_write(guc,
906 guc_prep_golden_context(guc);
908 guc_mapping_table_init(guc_to_gt(guc), &info_map);
910 base = intel_guc_ggtt_offset(guc, guc->ads_vma);
913 guc_capture_prep_lists(guc);
916 ads_blob_write(guc, ads.scheduler_policies, base +
918 ads_blob_write(guc, ads.gt_system_info, base +
922 guc_mmio_reg_state_init(guc);
925 guc_waklv_init(guc);
928 ads_blob_write(guc, ads.private_data, base +
929 guc_ads_private_data_offset(guc));
931 i915_gem_object_flush_map(guc->ads_vma->obj);
936 * @guc: intel_guc struct
941 int intel_guc_ads_create(struct intel_guc *guc)
947 GEM_BUG_ON(guc->ads_vma);
953 ret = guc_mmio_reg_state_create(guc);
956 guc->ads_regset_size = ret;
959 ret = guc_prep_golden_context(guc);
962 guc->ads_golden_ctxt_size = ret;
965 ret = guc_capture_prep_lists(guc);
968 guc->ads_capture_size = ret;
971 ret = guc_prep_waklv(guc);
974 guc->ads_waklv_size = ret;
977 size = guc_ads_blob_size(guc);
979 ret = intel_guc_allocate_and_map_vma(guc, size, &guc->ads_vma,
984 if (i915_gem_object_is_lmem(guc->ads_vma->obj))
985 iosys_map_set_vaddr_iomem(&guc->ads_map, (void __iomem *)ads_blob);
987 iosys_map_set_vaddr(&guc->ads_map, ads_blob);
989 __guc_ads_init(guc);
994 void intel_guc_ads_init_late(struct intel_guc *guc)
1003 guc_init_golden_context(guc);
1006 void intel_guc_ads_destroy(struct intel_guc *guc)
1008 i915_vma_unpin_and_release(&guc->ads_vma, I915_VMA_RELEASE_MAP);
1009 iosys_map_clear(&guc->ads_map);
1010 kfree(guc->ads_regset);
1013 static void guc_ads_private_data_reset(struct intel_guc *guc)
1017 size = guc_ads_private_data_size(guc);
1021 iosys_map_memset(&guc->ads_map, guc_ads_private_data_offset(guc),
1027 * @guc: intel_guc struct
1033 void intel_guc_ads_reset(struct intel_guc *guc)
1035 if (!guc->ads_vma)
1038 __guc_ads_init(guc);
1040 guc_ads_private_data_reset(guc);
1043 u32 intel_guc_engine_usage_offset(struct intel_guc *guc)
1045 return intel_guc_ggtt_offset(guc, guc->ads_vma) +
1051 struct intel_guc *guc = gt_to_guc(engine->gt);
1056 return IOSYS_MAP_INIT_OFFSET(&guc->ads_map, offset);