xref: /openbmc/linux/drivers/gpu/drm/i915/gt/intel_gt.h (revision 3f04bdce)
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;
14724e9564STvrtko Ursulin 
1588405440SVenkata Sandeep Dhanalakota #define GT_TRACE(gt, fmt, ...) do {					\
1688405440SVenkata Sandeep Dhanalakota 	const struct intel_gt *gt__ __maybe_unused = (gt);		\
1788405440SVenkata Sandeep Dhanalakota 	GEM_TRACE("%s " fmt, dev_name(gt__->i915->drm.dev),		\
18639f2f24SVenkata Sandeep Dhanalakota 		  ##__VA_ARGS__);					\
19639f2f24SVenkata Sandeep Dhanalakota } while (0)
20639f2f24SVenkata Sandeep Dhanalakota 
21ca7b2c1bSDaniele Ceraolo Spurio static inline struct intel_gt *uc_to_gt(struct intel_uc *uc)
22ca7b2c1bSDaniele Ceraolo Spurio {
23ca7b2c1bSDaniele Ceraolo Spurio 	return container_of(uc, struct intel_gt, uc);
24ca7b2c1bSDaniele Ceraolo Spurio }
25ca7b2c1bSDaniele Ceraolo Spurio 
2684b1ca2fSDaniele Ceraolo Spurio static inline struct intel_gt *guc_to_gt(struct intel_guc *guc)
2784b1ca2fSDaniele Ceraolo Spurio {
2884b1ca2fSDaniele Ceraolo Spurio 	return container_of(guc, struct intel_gt, uc.guc);
2984b1ca2fSDaniele Ceraolo Spurio }
3084b1ca2fSDaniele Ceraolo Spurio 
3184b1ca2fSDaniele Ceraolo Spurio static inline struct intel_gt *huc_to_gt(struct intel_huc *huc)
3284b1ca2fSDaniele Ceraolo Spurio {
3384b1ca2fSDaniele Ceraolo Spurio 	return container_of(huc, struct intel_gt, uc.huc);
3484b1ca2fSDaniele Ceraolo Spurio }
3584b1ca2fSDaniele Ceraolo Spurio 
36724e9564STvrtko Ursulin void intel_gt_init_early(struct intel_gt *gt, struct drm_i915_private *i915);
37797a6153SChris Wilson void intel_gt_init_hw_early(struct intel_gt *gt, struct i915_ggtt *ggtt);
3861fa60ffSTvrtko Ursulin int __must_check intel_gt_init_hw(struct intel_gt *gt);
3942014f69SAndi Shyti int intel_gt_init(struct intel_gt *gt);
4042014f69SAndi Shyti void intel_gt_driver_register(struct intel_gt *gt);
4142014f69SAndi Shyti 
4242014f69SAndi Shyti void intel_gt_driver_unregister(struct intel_gt *gt);
4342014f69SAndi Shyti void intel_gt_driver_remove(struct intel_gt *gt);
4442014f69SAndi Shyti void intel_gt_driver_release(struct intel_gt *gt);
4524635c51STvrtko Ursulin 
466cf72db6SDaniele Ceraolo Spurio void intel_gt_driver_late_release(struct intel_gt *gt);
47cb823ed9SChris Wilson 
48eaf522f6STvrtko Ursulin void intel_gt_check_and_clear_faults(struct intel_gt *gt);
49eaf522f6STvrtko Ursulin void intel_gt_clear_error_registers(struct intel_gt *gt,
50eaf522f6STvrtko Ursulin 				    intel_engine_mask_t engine_mask);
51eaf522f6STvrtko Ursulin 
52a1c8a09eSTvrtko Ursulin void intel_gt_flush_ggtt_writes(struct intel_gt *gt);
53baea429dSTvrtko Ursulin void intel_gt_chipset_flush(struct intel_gt *gt);
54a1c8a09eSTvrtko Ursulin 
5546c5847eSLionel Landwerlin static inline u32 intel_gt_scratch_offset(const struct intel_gt *gt,
5646c5847eSLionel Landwerlin 					  enum intel_gt_scratch_field field)
57db56f974STvrtko Ursulin {
5846c5847eSLionel Landwerlin 	return i915_ggtt_offset(gt->scratch) + field;
59db56f974STvrtko Ursulin }
60db56f974STvrtko Ursulin 
613f04bdceSMichał Winiarski static inline bool intel_gt_has_unrecoverable_error(const struct intel_gt *gt)
62cb823ed9SChris Wilson {
633f04bdceSMichał Winiarski 	return test_bit(I915_WEDGED_ON_INIT, &gt->reset.flags) ||
643f04bdceSMichał Winiarski 	       test_bit(I915_WEDGED_ON_FINI, &gt->reset.flags);
65cb823ed9SChris Wilson }
66cb823ed9SChris Wilson 
673f04bdceSMichał Winiarski static inline bool intel_gt_is_wedged(const struct intel_gt *gt)
68b761a7b4SChris Wilson {
693f04bdceSMichał Winiarski 	GEM_BUG_ON(intel_gt_has_unrecoverable_error(gt) &&
703f04bdceSMichał Winiarski 		   !test_bit(I915_WEDGED, &gt->reset.flags));
713f04bdceSMichał Winiarski 
723f04bdceSMichał Winiarski 	return unlikely(test_bit(I915_WEDGED, &gt->reset.flags));
73b761a7b4SChris Wilson }
74b761a7b4SChris Wilson 
7524635c51STvrtko Ursulin #endif /* __INTEL_GT_H__ */
76