1 // SPDX-License-Identifier: MIT
3 * Copyright © 2019 Intel Corporation
6 #include "debugfs_gt.h"
8 #include "intel_context.h"
10 #include "intel_gt_buffer_pool.h"
11 #include "intel_gt_clock_utils.h"
12 #include "intel_gt_pm.h"
13 #include "intel_gt_requests.h"
14 #include "intel_mocs.h"
15 #include "intel_rc6.h"
16 #include "intel_renderstate.h"
17 #include "intel_rps.h"
18 #include "intel_uncore.h"
20 #include "shmem_utils.h"
22 void intel_gt_init_early(struct intel_gt
*gt
, struct drm_i915_private
*i915
)
25 gt
->uncore
= &i915
->uncore
;
27 spin_lock_init(>
->irq_lock
);
29 INIT_LIST_HEAD(>
->closed_vma
);
30 spin_lock_init(>
->closed_lock
);
32 intel_gt_init_buffer_pool(gt
);
33 intel_gt_init_reset(gt
);
34 intel_gt_init_requests(gt
);
35 intel_gt_init_timelines(gt
);
36 intel_gt_pm_init_early(gt
);
38 intel_rps_init_early(>
->rps
);
39 intel_uc_init_early(>
->uc
);
42 void intel_gt_init_hw_early(struct intel_gt
*gt
, struct i915_ggtt
*ggtt
)
47 int intel_gt_init_mmio(struct intel_gt
*gt
)
49 intel_uc_init_mmio(>
->uc
);
50 intel_sseu_info_init(gt
);
52 return intel_engines_init_mmio(gt
);
55 static void init_unused_ring(struct intel_gt
*gt
, u32 base
)
57 struct intel_uncore
*uncore
= gt
->uncore
;
59 intel_uncore_write(uncore
, RING_CTL(base
), 0);
60 intel_uncore_write(uncore
, RING_HEAD(base
), 0);
61 intel_uncore_write(uncore
, RING_TAIL(base
), 0);
62 intel_uncore_write(uncore
, RING_START(base
), 0);
65 static void init_unused_rings(struct intel_gt
*gt
)
67 struct drm_i915_private
*i915
= gt
->i915
;
70 init_unused_ring(gt
, PRB1_BASE
);
71 init_unused_ring(gt
, SRB0_BASE
);
72 init_unused_ring(gt
, SRB1_BASE
);
73 init_unused_ring(gt
, SRB2_BASE
);
74 init_unused_ring(gt
, SRB3_BASE
);
75 } else if (IS_GEN(i915
, 2)) {
76 init_unused_ring(gt
, SRB0_BASE
);
77 init_unused_ring(gt
, SRB1_BASE
);
78 } else if (IS_GEN(i915
, 3)) {
79 init_unused_ring(gt
, PRB1_BASE
);
80 init_unused_ring(gt
, PRB2_BASE
);
84 int intel_gt_init_hw(struct intel_gt
*gt
)
86 struct drm_i915_private
*i915
= gt
->i915
;
87 struct intel_uncore
*uncore
= gt
->uncore
;
90 gt
->last_init_time
= ktime_get();
92 /* Double layer security blanket, see i915_gem_init() */
93 intel_uncore_forcewake_get(uncore
, FORCEWAKE_ALL
);
95 if (HAS_EDRAM(i915
) && INTEL_GEN(i915
) < 9)
96 intel_uncore_rmw(uncore
, HSW_IDICR
, 0, IDIHASHMSK(0xf));
99 intel_uncore_write(uncore
,
100 MI_PREDICATE_RESULT_2
,
102 LOWER_SLICE_ENABLED
: LOWER_SLICE_DISABLED
);
104 /* Apply the GT workarounds... */
105 intel_gt_apply_workarounds(gt
);
106 /* ...and determine whether they are sticking. */
107 intel_gt_verify_workarounds(gt
, "init");
109 intel_gt_init_swizzling(gt
);
112 * At least 830 can leave some of the unused rings
113 * "active" (ie. head != tail) after resume which
114 * will prevent c3 entry. Makes sure all unused rings
117 init_unused_rings(gt
);
119 ret
= i915_ppgtt_init_hw(gt
);
121 DRM_ERROR("Enabling PPGTT failed (%d)\n", ret
);
125 /* We can't enable contexts until all firmware is loaded */
126 ret
= intel_uc_init_hw(>
->uc
);
128 i915_probe_error(i915
, "Enabling uc failed (%d)\n", ret
);
135 intel_uncore_forcewake_put(uncore
, FORCEWAKE_ALL
);
139 static void rmw_set(struct intel_uncore
*uncore
, i915_reg_t reg
, u32 set
)
141 intel_uncore_rmw(uncore
, reg
, 0, set
);
144 static void rmw_clear(struct intel_uncore
*uncore
, i915_reg_t reg
, u32 clr
)
146 intel_uncore_rmw(uncore
, reg
, clr
, 0);
149 static void clear_register(struct intel_uncore
*uncore
, i915_reg_t reg
)
151 intel_uncore_rmw(uncore
, reg
, 0, 0);
154 static void gen8_clear_engine_error_register(struct intel_engine_cs
*engine
)
156 GEN6_RING_FAULT_REG_RMW(engine
, RING_FAULT_VALID
, 0);
157 GEN6_RING_FAULT_REG_POSTING_READ(engine
);
161 intel_gt_clear_error_registers(struct intel_gt
*gt
,
162 intel_engine_mask_t engine_mask
)
164 struct drm_i915_private
*i915
= gt
->i915
;
165 struct intel_uncore
*uncore
= gt
->uncore
;
168 if (!IS_GEN(i915
, 2))
169 clear_register(uncore
, PGTBL_ER
);
171 if (INTEL_GEN(i915
) < 4)
172 clear_register(uncore
, IPEIR(RENDER_RING_BASE
));
174 clear_register(uncore
, IPEIR_I965
);
176 clear_register(uncore
, EIR
);
177 eir
= intel_uncore_read(uncore
, EIR
);
180 * some errors might have become stuck,
183 DRM_DEBUG_DRIVER("EIR stuck: 0x%08x, masking\n", eir
);
184 rmw_set(uncore
, EMR
, eir
);
185 intel_uncore_write(uncore
, GEN2_IIR
,
186 I915_MASTER_ERROR_INTERRUPT
);
189 if (INTEL_GEN(i915
) >= 12) {
190 rmw_clear(uncore
, GEN12_RING_FAULT_REG
, RING_FAULT_VALID
);
191 intel_uncore_posting_read(uncore
, GEN12_RING_FAULT_REG
);
192 } else if (INTEL_GEN(i915
) >= 8) {
193 rmw_clear(uncore
, GEN8_RING_FAULT_REG
, RING_FAULT_VALID
);
194 intel_uncore_posting_read(uncore
, GEN8_RING_FAULT_REG
);
195 } else if (INTEL_GEN(i915
) >= 6) {
196 struct intel_engine_cs
*engine
;
197 enum intel_engine_id id
;
199 for_each_engine_masked(engine
, gt
, engine_mask
, id
)
200 gen8_clear_engine_error_register(engine
);
204 static void gen6_check_faults(struct intel_gt
*gt
)
206 struct intel_engine_cs
*engine
;
207 enum intel_engine_id id
;
210 for_each_engine(engine
, gt
, id
) {
211 fault
= GEN6_RING_FAULT_REG_READ(engine
);
212 if (fault
& RING_FAULT_VALID
) {
213 drm_dbg(&engine
->i915
->drm
, "Unexpected fault\n"
215 "\tAddress space: %s\n"
219 fault
& RING_FAULT_GTTSEL_MASK
?
221 RING_FAULT_SRCID(fault
),
222 RING_FAULT_FAULT_TYPE(fault
));
227 static void gen8_check_faults(struct intel_gt
*gt
)
229 struct intel_uncore
*uncore
= gt
->uncore
;
230 i915_reg_t fault_reg
, fault_data0_reg
, fault_data1_reg
;
233 if (INTEL_GEN(gt
->i915
) >= 12) {
234 fault_reg
= GEN12_RING_FAULT_REG
;
235 fault_data0_reg
= GEN12_FAULT_TLB_DATA0
;
236 fault_data1_reg
= GEN12_FAULT_TLB_DATA1
;
238 fault_reg
= GEN8_RING_FAULT_REG
;
239 fault_data0_reg
= GEN8_FAULT_TLB_DATA0
;
240 fault_data1_reg
= GEN8_FAULT_TLB_DATA1
;
243 fault
= intel_uncore_read(uncore
, fault_reg
);
244 if (fault
& RING_FAULT_VALID
) {
245 u32 fault_data0
, fault_data1
;
248 fault_data0
= intel_uncore_read(uncore
, fault_data0_reg
);
249 fault_data1
= intel_uncore_read(uncore
, fault_data1_reg
);
251 fault_addr
= ((u64
)(fault_data1
& FAULT_VA_HIGH_BITS
) << 44) |
252 ((u64
)fault_data0
<< 12);
254 drm_dbg(&uncore
->i915
->drm
, "Unexpected fault\n"
255 "\tAddr: 0x%08x_%08x\n"
256 "\tAddress space: %s\n"
260 upper_32_bits(fault_addr
), lower_32_bits(fault_addr
),
261 fault_data1
& FAULT_GTT_SEL
? "GGTT" : "PPGTT",
262 GEN8_RING_FAULT_ENGINE_ID(fault
),
263 RING_FAULT_SRCID(fault
),
264 RING_FAULT_FAULT_TYPE(fault
));
268 void intel_gt_check_and_clear_faults(struct intel_gt
*gt
)
270 struct drm_i915_private
*i915
= gt
->i915
;
272 /* From GEN8 onwards we only have one 'All Engine Fault Register' */
273 if (INTEL_GEN(i915
) >= 8)
274 gen8_check_faults(gt
);
275 else if (INTEL_GEN(i915
) >= 6)
276 gen6_check_faults(gt
);
280 intel_gt_clear_error_registers(gt
, ALL_ENGINES
);
283 void intel_gt_flush_ggtt_writes(struct intel_gt
*gt
)
285 struct intel_uncore
*uncore
= gt
->uncore
;
286 intel_wakeref_t wakeref
;
289 * No actual flushing is required for the GTT write domain for reads
290 * from the GTT domain. Writes to it "immediately" go to main memory
291 * as far as we know, so there's no chipset flush. It also doesn't
292 * land in the GPU render cache.
294 * However, we do have to enforce the order so that all writes through
295 * the GTT land before any writes to the device, such as updates to
298 * We also have to wait a bit for the writes to land from the GTT.
299 * An uncached read (i.e. mmio) seems to be ideal for the round-trip
300 * timing. This issue has only been observed when switching quickly
301 * between GTT writes and CPU reads from inside the kernel on recent hw,
302 * and it appears to only affect discrete GTT blocks (i.e. on LLC
303 * system agents we cannot reproduce this behaviour, until Cannonlake
309 if (INTEL_INFO(gt
->i915
)->has_coherent_ggtt
)
312 intel_gt_chipset_flush(gt
);
314 with_intel_runtime_pm_if_in_use(uncore
->rpm
, wakeref
) {
317 spin_lock_irqsave(&uncore
->lock
, flags
);
318 intel_uncore_posting_read_fw(uncore
,
319 RING_HEAD(RENDER_RING_BASE
));
320 spin_unlock_irqrestore(&uncore
->lock
, flags
);
324 void intel_gt_chipset_flush(struct intel_gt
*gt
)
327 if (INTEL_GEN(gt
->i915
) < 6)
328 intel_gtt_chipset_flush();
331 void intel_gt_driver_register(struct intel_gt
*gt
)
333 intel_rps_driver_register(>
->rps
);
335 debugfs_gt_register(gt
);
338 static int intel_gt_init_scratch(struct intel_gt
*gt
, unsigned int size
)
340 struct drm_i915_private
*i915
= gt
->i915
;
341 struct drm_i915_gem_object
*obj
;
342 struct i915_vma
*vma
;
345 obj
= i915_gem_object_create_stolen(i915
, size
);
347 obj
= i915_gem_object_create_internal(i915
, size
);
349 DRM_ERROR("Failed to allocate scratch page\n");
353 vma
= i915_vma_instance(obj
, >
->ggtt
->vm
, NULL
);
359 ret
= i915_ggtt_pin(vma
, NULL
, 0, PIN_HIGH
);
363 gt
->scratch
= i915_vma_make_unshrinkable(vma
);
368 i915_gem_object_put(obj
);
372 static void intel_gt_fini_scratch(struct intel_gt
*gt
)
374 i915_vma_unpin_and_release(>
->scratch
, 0);
377 static struct i915_address_space
*kernel_vm(struct intel_gt
*gt
)
379 if (INTEL_PPGTT(gt
->i915
) > INTEL_PPGTT_ALIASING
)
380 return &i915_ppgtt_create(gt
)->vm
;
382 return i915_vm_get(>
->ggtt
->vm
);
385 static int __engines_record_defaults(struct intel_gt
*gt
)
387 struct i915_request
*requests
[I915_NUM_ENGINES
] = {};
388 struct intel_engine_cs
*engine
;
389 enum intel_engine_id id
;
393 * As we reset the gpu during very early sanitisation, the current
394 * register state on the GPU should reflect its defaults values.
395 * We load a context onto the hw (with restore-inhibit), then switch
396 * over to a second context to save that default register state. We
397 * can then prime every new context with that state so they all start
398 * from the same default HW values.
401 for_each_engine(engine
, gt
, id
) {
402 struct intel_renderstate so
;
403 struct intel_context
*ce
;
404 struct i915_request
*rq
;
406 /* We must be able to switch to something! */
407 GEM_BUG_ON(!engine
->kernel_context
);
409 ce
= intel_context_create(engine
);
415 err
= intel_renderstate_init(&so
, ce
);
419 rq
= i915_request_create(ce
);
425 err
= intel_engine_emit_ctx_wa(rq
);
429 err
= intel_renderstate_emit(&so
, rq
);
434 requests
[id
] = i915_request_get(rq
);
435 i915_request_add(rq
);
437 intel_renderstate_fini(&so
, ce
);
440 intel_context_put(ce
);
445 /* Flush the default context image to memory, and enable powersaving. */
446 if (intel_gt_wait_for_idle(gt
, I915_GEM_IDLE_TIMEOUT
) == -ETIME
) {
451 for (id
= 0; id
< ARRAY_SIZE(requests
); id
++) {
452 struct i915_request
*rq
;
459 if (rq
->fence
.error
) {
464 GEM_BUG_ON(!test_bit(CONTEXT_ALLOC_BIT
, &rq
->context
->flags
));
465 if (!rq
->context
->state
)
468 /* Keep a copy of the state's backing pages; free the obj */
469 state
= shmem_create_from_object(rq
->context
->state
->obj
);
471 err
= PTR_ERR(state
);
474 rq
->engine
->default_state
= state
;
479 * If we have to abandon now, we expect the engines to be idle
480 * and ready to be torn-down. The quickest way we can accomplish
481 * this is by declaring ourselves wedged.
484 intel_gt_set_wedged(gt
);
486 for (id
= 0; id
< ARRAY_SIZE(requests
); id
++) {
487 struct intel_context
*ce
;
488 struct i915_request
*rq
;
495 i915_request_put(rq
);
496 intel_context_put(ce
);
501 static int __engines_verify_workarounds(struct intel_gt
*gt
)
503 struct intel_engine_cs
*engine
;
504 enum intel_engine_id id
;
507 if (!IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM
))
510 for_each_engine(engine
, gt
, id
) {
511 if (intel_engine_verify_workarounds(engine
, "load"))
515 /* Flush and restore the kernel context for safety */
516 if (intel_gt_wait_for_idle(gt
, I915_GEM_IDLE_TIMEOUT
) == -ETIME
)
522 static void __intel_gt_disable(struct intel_gt
*gt
)
524 intel_gt_set_wedged_on_fini(gt
);
526 intel_gt_suspend_prepare(gt
);
527 intel_gt_suspend_late(gt
);
529 GEM_BUG_ON(intel_gt_pm_is_awake(gt
));
532 int intel_gt_init(struct intel_gt
*gt
)
536 err
= i915_inject_probe_error(gt
->i915
, -ENODEV
);
541 * This is just a security blanket to placate dragons.
542 * On some systems, we very sporadically observe that the first TLBs
543 * used by the CS may be stale, despite us poking the TLB reset. If
544 * we hold the forcewake during initialisation these problems
545 * just magically go away.
547 intel_uncore_forcewake_get(gt
->uncore
, FORCEWAKE_ALL
);
549 intel_gt_init_clock_frequency(gt
);
551 err
= intel_gt_init_scratch(gt
, IS_GEN(gt
->i915
, 2) ? SZ_256K
: SZ_4K
);
555 intel_gt_pm_init(gt
);
557 gt
->vm
= kernel_vm(gt
);
563 err
= intel_engines_init(gt
);
567 err
= intel_uc_init(>
->uc
);
571 err
= intel_gt_resume(gt
);
575 err
= __engines_record_defaults(gt
);
579 err
= __engines_verify_workarounds(gt
);
583 err
= i915_inject_probe_error(gt
->i915
, -EIO
);
589 __intel_gt_disable(gt
);
590 intel_uc_fini_hw(>
->uc
);
592 intel_uc_fini(>
->uc
);
594 intel_engines_release(gt
);
595 i915_vm_put(fetch_and_zero(>
->vm
));
597 intel_gt_pm_fini(gt
);
598 intel_gt_fini_scratch(gt
);
601 intel_gt_set_wedged_on_init(gt
);
602 intel_uncore_forcewake_put(gt
->uncore
, FORCEWAKE_ALL
);
606 void intel_gt_driver_remove(struct intel_gt
*gt
)
608 __intel_gt_disable(gt
);
610 intel_uc_driver_remove(>
->uc
);
612 intel_engines_release(gt
);
615 void intel_gt_driver_unregister(struct intel_gt
*gt
)
617 intel_wakeref_t wakeref
;
619 intel_rps_driver_unregister(>
->rps
);
622 * Upon unregistering the device to prevent any new users, cancel
623 * all in-flight requests so that we can quickly unbind the active
626 intel_gt_set_wedged(gt
);
628 /* Scrub all HW state upon release */
629 with_intel_runtime_pm(gt
->uncore
->rpm
, wakeref
)
630 __intel_gt_reset(gt
, ALL_ENGINES
);
633 void intel_gt_driver_release(struct intel_gt
*gt
)
635 struct i915_address_space
*vm
;
637 vm
= fetch_and_zero(>
->vm
);
638 if (vm
) /* FIXME being called twice on error paths :( */
641 intel_gt_pm_fini(gt
);
642 intel_gt_fini_scratch(gt
);
643 intel_gt_fini_buffer_pool(gt
);
646 void intel_gt_driver_late_release(struct intel_gt
*gt
)
648 /* We need to wait for inflight RCU frees to release their grip */
651 intel_uc_driver_late_release(>
->uc
);
652 intel_gt_fini_requests(gt
);
653 intel_gt_fini_reset(gt
);
654 intel_gt_fini_timelines(gt
);
655 intel_engines_free(gt
);
658 void intel_gt_info_print(const struct intel_gt_info
*info
,
659 struct drm_printer
*p
)
661 drm_printf(p
, "available engines: %x\n", info
->engine_mask
);
663 intel_sseu_dump(&info
->sseu
, p
);