162306a36Sopenharmony_ci/* SPDX-License-Identifier: MIT */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright © 2019 Intel Corporation 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef __INTEL_GT__ 762306a36Sopenharmony_ci#define __INTEL_GT__ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "i915_drv.h" 1062306a36Sopenharmony_ci#include "intel_engine_types.h" 1162306a36Sopenharmony_ci#include "intel_gt_types.h" 1262306a36Sopenharmony_ci#include "intel_reset.h" 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct drm_i915_private; 1562306a36Sopenharmony_cistruct drm_printer; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define GT_TRACE(gt, fmt, ...) do { \ 1862306a36Sopenharmony_ci const struct intel_gt *gt__ __maybe_unused = (gt); \ 1962306a36Sopenharmony_ci GEM_TRACE("%s " fmt, dev_name(gt__->i915->drm.dev), \ 2062306a36Sopenharmony_ci ##__VA_ARGS__); \ 2162306a36Sopenharmony_ci} while (0) 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistatic inline bool gt_is_root(struct intel_gt *gt) 2462306a36Sopenharmony_ci{ 2562306a36Sopenharmony_ci return !gt->info.id; 2662306a36Sopenharmony_ci} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistatic inline bool intel_gt_needs_wa_22016122933(struct intel_gt *gt) 2962306a36Sopenharmony_ci{ 3062306a36Sopenharmony_ci return MEDIA_VER_FULL(gt->i915) == IP_VER(13, 0) && gt->type == GT_MEDIA; 3162306a36Sopenharmony_ci} 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistatic inline struct intel_gt *uc_to_gt(struct intel_uc *uc) 3462306a36Sopenharmony_ci{ 3562306a36Sopenharmony_ci return container_of(uc, struct intel_gt, uc); 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistatic inline struct intel_gt *guc_to_gt(struct intel_guc *guc) 3962306a36Sopenharmony_ci{ 4062306a36Sopenharmony_ci return container_of(guc, struct intel_gt, uc.guc); 4162306a36Sopenharmony_ci} 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistatic inline struct intel_gt *huc_to_gt(struct intel_huc *huc) 4462306a36Sopenharmony_ci{ 4562306a36Sopenharmony_ci return container_of(huc, struct intel_gt, uc.huc); 4662306a36Sopenharmony_ci} 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cistatic inline struct intel_gt *gsc_uc_to_gt(struct intel_gsc_uc *gsc_uc) 4962306a36Sopenharmony_ci{ 5062306a36Sopenharmony_ci return container_of(gsc_uc, struct intel_gt, uc.gsc); 5162306a36Sopenharmony_ci} 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cistatic inline struct intel_gt *gsc_to_gt(struct intel_gsc *gsc) 5462306a36Sopenharmony_ci{ 5562306a36Sopenharmony_ci return container_of(gsc, struct intel_gt, gsc); 5662306a36Sopenharmony_ci} 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_civoid intel_gt_common_init_early(struct intel_gt *gt); 5962306a36Sopenharmony_ciint intel_root_gt_init_early(struct drm_i915_private *i915); 6062306a36Sopenharmony_ciint intel_gt_assign_ggtt(struct intel_gt *gt); 6162306a36Sopenharmony_ciint intel_gt_init_mmio(struct intel_gt *gt); 6262306a36Sopenharmony_ciint __must_check intel_gt_init_hw(struct intel_gt *gt); 6362306a36Sopenharmony_ciint intel_gt_init(struct intel_gt *gt); 6462306a36Sopenharmony_civoid intel_gt_driver_register(struct intel_gt *gt); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_civoid intel_gt_driver_unregister(struct intel_gt *gt); 6762306a36Sopenharmony_civoid intel_gt_driver_remove(struct intel_gt *gt); 6862306a36Sopenharmony_civoid intel_gt_driver_release(struct intel_gt *gt); 6962306a36Sopenharmony_civoid intel_gt_driver_late_release_all(struct drm_i915_private *i915); 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ciint intel_gt_wait_for_idle(struct intel_gt *gt, long timeout); 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_civoid intel_gt_check_and_clear_faults(struct intel_gt *gt); 7462306a36Sopenharmony_cii915_reg_t intel_gt_perf_limit_reasons_reg(struct intel_gt *gt); 7562306a36Sopenharmony_civoid intel_gt_clear_error_registers(struct intel_gt *gt, 7662306a36Sopenharmony_ci intel_engine_mask_t engine_mask); 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_civoid intel_gt_flush_ggtt_writes(struct intel_gt *gt); 7962306a36Sopenharmony_civoid intel_gt_chipset_flush(struct intel_gt *gt); 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_cistatic inline u32 intel_gt_scratch_offset(const struct intel_gt *gt, 8262306a36Sopenharmony_ci enum intel_gt_scratch_field field) 8362306a36Sopenharmony_ci{ 8462306a36Sopenharmony_ci return i915_ggtt_offset(gt->scratch) + field; 8562306a36Sopenharmony_ci} 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_cistatic inline bool intel_gt_has_unrecoverable_error(const struct intel_gt *gt) 8862306a36Sopenharmony_ci{ 8962306a36Sopenharmony_ci return test_bit(I915_WEDGED_ON_INIT, >->reset.flags) || 9062306a36Sopenharmony_ci test_bit(I915_WEDGED_ON_FINI, >->reset.flags); 9162306a36Sopenharmony_ci} 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_cistatic inline bool intel_gt_is_wedged(const struct intel_gt *gt) 9462306a36Sopenharmony_ci{ 9562306a36Sopenharmony_ci GEM_BUG_ON(intel_gt_has_unrecoverable_error(gt) && 9662306a36Sopenharmony_ci !test_bit(I915_WEDGED, >->reset.flags)); 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci return unlikely(test_bit(I915_WEDGED, >->reset.flags)); 9962306a36Sopenharmony_ci} 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ciint intel_gt_probe_all(struct drm_i915_private *i915); 10262306a36Sopenharmony_ciint intel_gt_tiles_init(struct drm_i915_private *i915); 10362306a36Sopenharmony_civoid intel_gt_release_all(struct drm_i915_private *i915); 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci#define for_each_gt(gt__, i915__, id__) \ 10662306a36Sopenharmony_ci for ((id__) = 0; \ 10762306a36Sopenharmony_ci (id__) < I915_MAX_GT; \ 10862306a36Sopenharmony_ci (id__)++) \ 10962306a36Sopenharmony_ci for_each_if(((gt__) = (i915__)->gt[(id__)])) 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_civoid intel_gt_info_print(const struct intel_gt_info *info, 11262306a36Sopenharmony_ci struct drm_printer *p); 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_civoid intel_gt_watchdog_work(struct work_struct *work); 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_cienum i915_map_type intel_gt_coherent_map_type(struct intel_gt *gt, 11762306a36Sopenharmony_ci struct drm_i915_gem_object *obj, 11862306a36Sopenharmony_ci bool always_coherent); 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci#endif /* __INTEL_GT_H__ */ 121