2023-03-30 17:31:57 -04:00
/* SPDX-License-Identifier: MIT */
/*
* Copyright © 2022 Intel Corporation
*/
# ifndef _XE_GT_H_
# define _XE_GT_H_
# include <drm/drm_util.h>
# include "xe_device_types.h"
# include "xe_hw_engine.h"
# define for_each_hw_engine(hwe__, gt__, id__) \
for ( ( id__ ) = 0 ; ( id__ ) < ARRAY_SIZE ( ( gt__ ) - > hw_engines ) ; ( id__ ) + + ) \
2023-07-17 16:53:55 +02:00
for_each_if ( ( ( hwe__ ) = ( gt__ ) - > hw_engines + ( id__ ) ) & & \
2023-03-30 17:31:57 -04:00
xe_hw_engine_is_valid ( ( hwe__ ) ) )
2023-10-09 13:10:27 -07:00
# define CCS_MASK(gt) (((gt)->info.engine_mask & XE_HW_ENGINE_CCS_MASK) >> XE_HW_ENGINE_CCS0)
2023-07-27 04:56:50 +05:30
# ifdef CONFIG_FAULT_INJECTION
2023-12-18 08:47:02 -05:00
# include <linux/fault-inject.h> /* XXX: fault-inject.h is broken */
2023-07-27 04:56:50 +05:30
extern struct fault_attr gt_reset_failure ;
static inline bool xe_fault_inject_gt_reset ( void )
{
return should_fail ( & gt_reset_failure , 1 ) ;
}
# else
static inline bool xe_fault_inject_gt_reset ( void )
{
return false ;
}
# endif
2023-06-01 14:52:31 -07:00
struct xe_gt * xe_gt_alloc ( struct xe_tile * tile ) ;
2023-03-30 17:31:57 -04:00
int xe_gt_init_early ( struct xe_gt * gt ) ;
int xe_gt_init ( struct xe_gt * gt ) ;
int xe_gt_record_default_lrcs ( struct xe_gt * gt ) ;
void xe_gt_suspend_prepare ( struct xe_gt * gt ) ;
int xe_gt_suspend ( struct xe_gt * gt ) ;
int xe_gt_resume ( struct xe_gt * gt ) ;
void xe_gt_reset_async ( struct xe_gt * gt ) ;
2023-01-30 10:55:35 -08:00
void xe_gt_sanitize ( struct xe_gt * gt ) ;
2023-03-30 17:31:57 -04:00
/**
* xe_gt_any_hw_engine_by_reset_domain - scan the list of engines and return the
* first that matches the same reset domain as @ class
* @ gt : GT structure
* @ class : hw engine class to lookup
*/
struct xe_hw_engine *
xe_gt_any_hw_engine_by_reset_domain ( struct xe_gt * gt , enum xe_engine_class class ) ;
struct xe_hw_engine * xe_gt_hw_engine ( struct xe_gt * gt ,
enum xe_engine_class class ,
u16 instance ,
bool logical ) ;
static inline bool xe_gt_is_media_type ( struct xe_gt * gt )
{
return gt - > info . type = = XE_GT_TYPE_MEDIA ;
}
static inline bool xe_gt_is_usm_hwe ( struct xe_gt * gt , struct xe_hw_engine * hwe )
{
struct xe_device * xe = gt_to_xe ( gt ) ;
2023-12-05 06:52:35 -08:00
return xe - > info . has_usm & & hwe - > class = = XE_ENGINE_CLASS_COPY & &
2023-03-30 17:31:57 -04:00
hwe - > instance = = gt - > usm . reserved_bcs_instance ;
}
# endif