Skip to content

Commit 32e0fa9

Browse files
author
Lucas De Marchi
committed
drm/xe/xe3p_xpc: Add support for compute walker for non-MSIx
Current implementation of compute walker has dependency on GPU/SW Stack which requires SW/UMD to wait for event from KMD to indicate PIPE_CONTROL interrupt was done. This created latency on SW stack. This feature adds support to generate completion interrupt from GPGPU walker which does not support MSIx and avoid software using Pipe control drain/idle latency. The only thing needed for the kernel driver to do here is to wakeup the thread waiting on the ufence, which is already handled by the irq handler. Before waiting on this event, the userspace side can opt-in to this interrupt being generated by the HW by selecting the flag in the POST_SYNC_DATA_2 substructure's dw0[3] of COMPUTE_WALKER_2 instruction. Bspec: 62346, 74334 Suggested-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Signed-off-by: S A Muqthyar Ahmed <syed.abdul.muqthyar.ahmed@intel.com> Reviewed-by: Matt Roper <matthew.d.roper@intel.com> Link: https://lore.kernel.org/r/20251016-xe3p-v3-21-3dd173a3097a@intel.com Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
1 parent 22b7117 commit 32e0fa9

2 files changed

Lines changed: 7 additions & 0 deletions

File tree

drivers/gpu/drm/xe/regs/xe_irq_regs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
#define GSC_ER_COMPLETE REG_BIT(5)
8686
#define GT_FLUSH_COMPLETE_INTERRUPT REG_BIT(4)
8787
#define GT_CS_MASTER_ERROR_INTERRUPT REG_BIT(3)
88+
#define GT_COMPUTE_WALKER_INTERRUPT REG_BIT(2)
8889
#define GT_MI_USER_INTERRUPT REG_BIT(0)
8990

9091
/* irqs for OTHER_KCR_INSTANCE */

drivers/gpu/drm/xe/xe_irq.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ void xe_irq_enable_hwe(struct xe_gt *gt)
149149
if (xe_device_uc_enabled(xe)) {
150150
common_mask = GT_MI_USER_INTERRUPT |
151151
GT_FLUSH_COMPLETE_INTERRUPT;
152+
153+
/* Enable Compute Walker Interrupt for non-MSIX platforms */
154+
if (GRAPHICS_VERx100(xe) >= 3511 && !xe_device_has_msix(xe)) {
155+
rcs_mask |= GT_COMPUTE_WALKER_INTERRUPT;
156+
ccs_mask |= GT_COMPUTE_WALKER_INTERRUPT;
157+
}
152158
} else {
153159
common_mask = GT_MI_USER_INTERRUPT |
154160
GT_CS_MASTER_ERROR_INTERRUPT |

0 commit comments

Comments
 (0)