mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-25 00:52:45 -04:00
VFs don't have access to the GDRST(0x941c) register that driver uses to reset a GT. Attempt to trigger a reset using debugfs: $ cat /sys/kernel/debug/dri/0000:00:02.1/gt0/force_reset or due to a hang condition detected by the driver leads to: [ ] xe 0000:00:02.1: [drm] GT0: trying reset from force_reset [xe] [ ] xe 0000:00:02.1: [drm] GT0: reset queued [ ] xe 0000:00:02.1: [drm] GT0: reset started [ ] ------------[ cut here ]------------ [ ] xe 0000:00:02.1: [drm] GT0: VF is trying to write 0x1 to an inaccessible register 0x941c+0x0 [ ] WARNING: CPU: 3 PID: 3069 at drivers/gpu/drm/xe/xe_gt_sriov_vf.c:996 xe_gt_sriov_vf_write32+0xc6/0x580 [xe] [ ] RIP: 0010:xe_gt_sriov_vf_write32+0xc6/0x580 [xe] [ ] Call Trace: [ ] <TASK> [ ] ? show_regs+0x6c/0x80 [ ] ? __warn+0x93/0x1c0 [ ] ? xe_gt_sriov_vf_write32+0xc6/0x580 [xe] [ ] ? report_bug+0x182/0x1b0 [ ] ? handle_bug+0x6e/0xb0 [ ] ? exc_invalid_op+0x18/0x80 [ ] ? asm_exc_invalid_op+0x1b/0x20 [ ] ? xe_gt_sriov_vf_write32+0xc6/0x580 [xe] [ ] ? xe_gt_sriov_vf_write32+0xc6/0x580 [xe] [ ] ? xe_gt_tlb_invalidation_reset+0xef/0x110 [xe] [ ] ? __mutex_unlock_slowpath+0x41/0x2e0 [ ] xe_mmio_write32+0x64/0x150 [xe] [ ] do_gt_reset+0x2f/0xa0 [xe] [ ] gt_reset_worker+0x14e/0x1e0 [xe] [ ] process_one_work+0x21c/0x740 [ ] worker_thread+0x1db/0x3c0 Fix that by sending H2G VF_RESET(0x5507) action instead. Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/4078 Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250131182502.852-1-michal.wajdeczko@intel.com
35 lines
1.1 KiB
C
35 lines
1.1 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2023-2024 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _XE_GT_SRIOV_VF_H_
|
|
#define _XE_GT_SRIOV_VF_H_
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct drm_printer;
|
|
struct xe_gt;
|
|
struct xe_reg;
|
|
|
|
int xe_gt_sriov_vf_reset(struct xe_gt *gt);
|
|
int xe_gt_sriov_vf_bootstrap(struct xe_gt *gt);
|
|
int xe_gt_sriov_vf_query_config(struct xe_gt *gt);
|
|
int xe_gt_sriov_vf_connect(struct xe_gt *gt);
|
|
int xe_gt_sriov_vf_query_runtime(struct xe_gt *gt);
|
|
int xe_gt_sriov_vf_prepare_ggtt(struct xe_gt *gt);
|
|
int xe_gt_sriov_vf_notify_resfix_done(struct xe_gt *gt);
|
|
void xe_gt_sriov_vf_migrated_event_handler(struct xe_gt *gt);
|
|
|
|
u32 xe_gt_sriov_vf_gmdid(struct xe_gt *gt);
|
|
u16 xe_gt_sriov_vf_guc_ids(struct xe_gt *gt);
|
|
u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt);
|
|
u32 xe_gt_sriov_vf_read32(struct xe_gt *gt, struct xe_reg reg);
|
|
void xe_gt_sriov_vf_write32(struct xe_gt *gt, struct xe_reg reg, u32 val);
|
|
|
|
void xe_gt_sriov_vf_print_config(struct xe_gt *gt, struct drm_printer *p);
|
|
void xe_gt_sriov_vf_print_runtime(struct xe_gt *gt, struct drm_printer *p);
|
|
void xe_gt_sriov_vf_print_version(struct xe_gt *gt, struct drm_printer *p);
|
|
|
|
#endif
|