xref: /openbmc/linux/drivers/gpu/drm/i915/gt/intel_gt.h (revision 03d2c54d)
124635c51STvrtko Ursulin /* SPDX-License-Identifier: MIT */
224635c51STvrtko Ursulin /*
324635c51STvrtko Ursulin  * Copyright © 2019 Intel Corporation
424635c51STvrtko Ursulin  */
524635c51STvrtko Ursulin 
624635c51STvrtko Ursulin #ifndef __INTEL_GT__
724635c51STvrtko Ursulin #define __INTEL_GT__
824635c51STvrtko Ursulin 
9eaf522f6STvrtko Ursulin #include "intel_engine_types.h"
1024635c51STvrtko Ursulin #include "intel_gt_types.h"
11cb823ed9SChris Wilson #include "intel_reset.h"
1224635c51STvrtko Ursulin 
13724e9564STvrtko Ursulin struct drm_i915_private;
14792592e7SDaniele Ceraolo Spurio struct drm_printer;
15724e9564STvrtko Ursulin 
1688405440SVenkata Sandeep Dhanalakota #define GT_TRACE(gt, fmt, ...) do {					\
1788405440SVenkata Sandeep Dhanalakota 	const struct intel_gt *gt__ __maybe_unused = (gt);		\
1888405440SVenkata Sandeep Dhanalakota 	GEM_TRACE("%s " fmt, dev_name(gt__->i915->drm.dev),		\
19639f2f24SVenkata Sandeep Dhanalakota 		  ##__VA_ARGS__);					\
20639f2f24SVenkata Sandeep Dhanalakota } while (0)
21639f2f24SVenkata Sandeep Dhanalakota 
22b9741faaSAndi Shyti static inline bool gt_is_root(struct intel_gt *gt)
23b9741faaSAndi Shyti {
24b9741faaSAndi Shyti 	return !gt->info.id;
25b9741faaSAndi Shyti }
26b9741faaSAndi Shyti 
27ca7b2c1bSDaniele Ceraolo Spurio static inline struct intel_gt *uc_to_gt(struct intel_uc *uc)
28ca7b2c1bSDaniele Ceraolo Spurio {
29ca7b2c1bSDaniele Ceraolo Spurio 	return container_of(uc, struct intel_gt, uc);
30ca7b2c1bSDaniele Ceraolo Spurio }
31ca7b2c1bSDaniele Ceraolo Spurio 
3284b1ca2fSDaniele Ceraolo Spurio static inline struct intel_gt *guc_to_gt(struct intel_guc *guc)
3384b1ca2fSDaniele Ceraolo Spurio {
3484b1ca2fSDaniele Ceraolo Spurio 	return container_of(guc, struct intel_gt, uc.guc);
3584b1ca2fSDaniele Ceraolo Spurio }
3684b1ca2fSDaniele Ceraolo Spurio 
3784b1ca2fSDaniele Ceraolo Spurio static inline struct intel_gt *huc_to_gt(struct intel_huc *huc)
3884b1ca2fSDaniele Ceraolo Spurio {
3984b1ca2fSDaniele Ceraolo Spurio 	return container_of(huc, struct intel_gt, uc.huc);
4084b1ca2fSDaniele Ceraolo Spurio }
4184b1ca2fSDaniele Ceraolo Spurio 
421e3dc1d8STomas Winkler static inline struct intel_gt *gsc_to_gt(struct intel_gsc *gsc)
431e3dc1d8STomas Winkler {
441e3dc1d8STomas Winkler 	return container_of(gsc, struct intel_gt, gsc);
451e3dc1d8STomas Winkler }
461e3dc1d8STomas Winkler 
474ecd56fdSMatt Roper void intel_gt_common_init_early(struct intel_gt *gt);
48*03d2c54dSMatt Roper int intel_root_gt_init_early(struct drm_i915_private *i915);
49cdeea858SAndi Shyti int intel_gt_assign_ggtt(struct intel_gt *gt);
50d0eb6866SDaniele Ceraolo Spurio int intel_gt_init_mmio(struct intel_gt *gt);
5161fa60ffSTvrtko Ursulin int __must_check intel_gt_init_hw(struct intel_gt *gt);
5242014f69SAndi Shyti int intel_gt_init(struct intel_gt *gt);
5342014f69SAndi Shyti void intel_gt_driver_register(struct intel_gt *gt);
5442014f69SAndi Shyti 
5542014f69SAndi Shyti void intel_gt_driver_unregister(struct intel_gt *gt);
5642014f69SAndi Shyti void intel_gt_driver_remove(struct intel_gt *gt);
5742014f69SAndi Shyti void intel_gt_driver_release(struct intel_gt *gt);
58bec68cc9STvrtko Ursulin void intel_gt_driver_late_release_all(struct drm_i915_private *i915);
59cb823ed9SChris Wilson 
60b97060a9SMatthew Brost int intel_gt_wait_for_idle(struct intel_gt *gt, long timeout);
61b97060a9SMatthew Brost 
62eaf522f6STvrtko Ursulin void intel_gt_check_and_clear_faults(struct intel_gt *gt);
63eaf522f6STvrtko Ursulin void intel_gt_clear_error_registers(struct intel_gt *gt,
64eaf522f6STvrtko Ursulin 				    intel_engine_mask_t engine_mask);
65eaf522f6STvrtko Ursulin 
66a1c8a09eSTvrtko Ursulin void intel_gt_flush_ggtt_writes(struct intel_gt *gt);
67baea429dSTvrtko Ursulin void intel_gt_chipset_flush(struct intel_gt *gt);
68a1c8a09eSTvrtko Ursulin 
6946c5847eSLionel Landwerlin static inline u32 intel_gt_scratch_offset(const struct intel_gt *gt,
7046c5847eSLionel Landwerlin 					  enum intel_gt_scratch_field field)
71db56f974STvrtko Ursulin {
7246c5847eSLionel Landwerlin 	return i915_ggtt_offset(gt->scratch) + field;
73db56f974STvrtko Ursulin }
74db56f974STvrtko Ursulin 
753f04bdceSMichał Winiarski static inline bool intel_gt_has_unrecoverable_error(const struct intel_gt *gt)
76cb823ed9SChris Wilson {
773f04bdceSMichał Winiarski 	return test_bit(I915_WEDGED_ON_INIT, &gt->reset.flags) ||
783f04bdceSMichał Winiarski 	       test_bit(I915_WEDGED_ON_FINI, &gt->reset.flags);
79cb823ed9SChris Wilson }
80cb823ed9SChris Wilson 
813f04bdceSMichał Winiarski static inline bool intel_gt_is_wedged(const struct intel_gt *gt)
82b761a7b4SChris Wilson {
833f04bdceSMichał Winiarski 	GEM_BUG_ON(intel_gt_has_unrecoverable_error(gt) &&
843f04bdceSMichał Winiarski 		   !test_bit(I915_WEDGED, &gt->reset.flags));
853f04bdceSMichał Winiarski 
863f04bdceSMichał Winiarski 	return unlikely(test_bit(I915_WEDGED, &gt->reset.flags));
87b761a7b4SChris Wilson }
88b761a7b4SChris Wilson 
89bec68cc9STvrtko Ursulin int intel_gt_probe_all(struct drm_i915_private *i915);
90bec68cc9STvrtko Ursulin int intel_gt_tiles_init(struct drm_i915_private *i915);
91bec68cc9STvrtko Ursulin void intel_gt_release_all(struct drm_i915_private *i915);
92bec68cc9STvrtko Ursulin 
93bec68cc9STvrtko Ursulin #define for_each_gt(gt__, i915__, id__) \
94bec68cc9STvrtko Ursulin 	for ((id__) = 0; \
95bec68cc9STvrtko Ursulin 	     (id__) < I915_MAX_GT; \
96bec68cc9STvrtko Ursulin 	     (id__)++) \
97bec68cc9STvrtko Ursulin 		for_each_if(((gt__) = (i915__)->gt[(id__)]))
98bec68cc9STvrtko Ursulin 
99792592e7SDaniele Ceraolo Spurio void intel_gt_info_print(const struct intel_gt_info *info,
100792592e7SDaniele Ceraolo Spurio 			 struct drm_printer *p);
101792592e7SDaniele Ceraolo Spurio 
1029b4d0598STvrtko Ursulin void intel_gt_watchdog_work(struct work_struct *work);
1039b4d0598STvrtko Ursulin 
1045d36acb7SChris Wilson static inline u32 intel_gt_tlb_seqno(const struct intel_gt *gt)
1055d36acb7SChris Wilson {
1065d36acb7SChris Wilson 	return seqprop_sequence(&gt->tlb.seqno);
1075d36acb7SChris Wilson }
1085d36acb7SChris Wilson 
1095d36acb7SChris Wilson static inline u32 intel_gt_next_invalidate_tlb_full(const struct intel_gt *gt)
1105d36acb7SChris Wilson {
1115d36acb7SChris Wilson 	return intel_gt_tlb_seqno(gt) | 1;
1125d36acb7SChris Wilson }
1135d36acb7SChris Wilson 
1145d36acb7SChris Wilson void intel_gt_invalidate_tlb(struct intel_gt *gt, u32 seqno);
1157938d615STvrtko Ursulin 
11624635c51STvrtko Ursulin #endif /* __INTEL_GT_H__ */
117