#include <linux/string_choices.h>
#include <linux/wordpart.h>
#include "abi/guc_actions_sriov_abi.h"
#include "abi/guc_klvs_abi.h"
#include "regs/xe_guc_regs.h"
#include "xe_bo.h"
#include "xe_device.h"
#include "xe_ggtt.h"
#include "xe_gt.h"
#include "xe_gt_sriov_pf_config.h"
#include "xe_gt_sriov_pf_helpers.h"
#include "xe_gt_sriov_pf_policy.h"
#include "xe_gt_sriov_printk.h"
#include "xe_guc.h"
#include "xe_guc_ct.h"
#include "xe_guc_db_mgr.h"
#include "xe_guc_fwif.h"
#include "xe_guc_id_mgr.h"
#include "xe_guc_klv_helpers.h"
#include "xe_guc_klv_thresholds_set.h"
#include "xe_guc_submit.h"
#include "xe_lmtt.h"
#include "xe_map.h"
#include "xe_sriov.h"
#include "xe_ttm_vram_mgr.h"
#include "xe_wopcm.h"
static int guc_action_update_vf_cfg(struct xe_guc *guc, u32 vfid,
u64 addr, u32 size)
{ … }
static int pf_send_vf_cfg_reset(struct xe_gt *gt, u32 vfid)
{ … }
static int pf_send_vf_cfg_klvs(struct xe_gt *gt, u32 vfid, const u32 *klvs, u32 num_dwords)
{ … }
static int pf_push_vf_cfg_klvs(struct xe_gt *gt, unsigned int vfid, u32 num_klvs,
const u32 *klvs, u32 num_dwords)
{ … }
static int pf_push_vf_cfg_u32(struct xe_gt *gt, unsigned int vfid, u16 key, u32 value)
{ … }
static int pf_push_vf_cfg_u64(struct xe_gt *gt, unsigned int vfid, u16 key, u64 value)
{ … }
static int pf_push_vf_cfg_ggtt(struct xe_gt *gt, unsigned int vfid, u64 start, u64 size)
{ … }
static int pf_push_vf_cfg_ctxs(struct xe_gt *gt, unsigned int vfid, u32 begin, u32 num)
{ … }
static int pf_push_vf_cfg_dbs(struct xe_gt *gt, unsigned int vfid, u32 begin, u32 num)
{ … }
static int pf_push_vf_cfg_exec_quantum(struct xe_gt *gt, unsigned int vfid, u32 *exec_quantum)
{ … }
static int pf_push_vf_cfg_preempt_timeout(struct xe_gt *gt, unsigned int vfid, u32 *preempt_timeout)
{ … }
static int pf_push_vf_cfg_lmem(struct xe_gt *gt, unsigned int vfid, u64 size)
{ … }
static int pf_push_vf_cfg_threshold(struct xe_gt *gt, unsigned int vfid,
enum xe_guc_klv_threshold_index index, u32 value)
{ … }
static struct xe_gt_sriov_config *pf_pick_vf_config(struct xe_gt *gt, unsigned int vfid)
{ … }
static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
{ … }
static u32 encode_config(u32 *cfg, const struct xe_gt_sriov_config *config)
{ … }
static int pf_push_full_vf_config(struct xe_gt *gt, unsigned int vfid)
{ … }
static u64 pf_get_ggtt_alignment(struct xe_gt *gt)
{ … }
static u64 pf_get_min_spare_ggtt(struct xe_gt *gt)
{ … }
static u64 pf_get_spare_ggtt(struct xe_gt *gt)
{ … }
static int pf_set_spare_ggtt(struct xe_gt *gt, u64 size)
{ … }
static int pf_distribute_config_ggtt(struct xe_tile *tile, unsigned int vfid, u64 start, u64 size)
{ … }
static void pf_release_ggtt(struct xe_tile *tile, struct drm_mm_node *node)
{ … }
static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{ … }
static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
{ … }
static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
{ … }
u64 xe_gt_sriov_pf_config_get_ggtt(struct xe_gt *gt, unsigned int vfid)
{ … }
static int pf_config_set_u64_done(struct xe_gt *gt, unsigned int vfid, u64 value,
u64 actual, const char *what, int err)
{ … }
int xe_gt_sriov_pf_config_set_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
{ … }
static int pf_config_bulk_set_u64_done(struct xe_gt *gt, unsigned int first, unsigned int num_vfs,
u64 value, u64 (*get)(struct xe_gt*, unsigned int),
const char *what, unsigned int last, int err)
{ … }
int xe_gt_sriov_pf_config_bulk_set_ggtt(struct xe_gt *gt, unsigned int vfid,
unsigned int num_vfs, u64 size)
{ … }
static u64 pf_get_max_ggtt(struct xe_gt *gt)
{ … }
static u64 pf_estimate_fair_ggtt(struct xe_gt *gt, unsigned int num_vfs)
{ … }
int xe_gt_sriov_pf_config_set_fair_ggtt(struct xe_gt *gt, unsigned int vfid,
unsigned int num_vfs)
{ … }
static u32 pf_get_min_spare_ctxs(struct xe_gt *gt)
{ … }
static u32 pf_get_spare_ctxs(struct xe_gt *gt)
{ … }
static int pf_set_spare_ctxs(struct xe_gt *gt, u32 spare)
{ … }
static int pf_reserve_ctxs(struct xe_gt *gt, u32 num)
{ … }
static void pf_release_ctxs(struct xe_gt *gt, u32 start, u32 num)
{ … }
static void pf_release_config_ctxs(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{ … }
static int pf_provision_vf_ctxs(struct xe_gt *gt, unsigned int vfid, u32 num_ctxs)
{ … }
static u32 pf_get_vf_config_ctxs(struct xe_gt *gt, unsigned int vfid)
{ … }
u32 xe_gt_sriov_pf_config_get_ctxs(struct xe_gt *gt, unsigned int vfid)
{ … }
static const char *no_unit(u32 unused)
{ … }
static const char *spare_unit(u32 unused)
{ … }
static int pf_config_set_u32_done(struct xe_gt *gt, unsigned int vfid, u32 value, u32 actual,
const char *what, const char *(*unit)(u32), int err)
{ … }
int xe_gt_sriov_pf_config_set_ctxs(struct xe_gt *gt, unsigned int vfid, u32 num_ctxs)
{ … }
static int pf_config_bulk_set_u32_done(struct xe_gt *gt, unsigned int first, unsigned int num_vfs,
u32 value, u32 (*get)(struct xe_gt*, unsigned int),
const char *what, const char *(*unit)(u32),
unsigned int last, int err)
{ … }
int xe_gt_sriov_pf_config_bulk_set_ctxs(struct xe_gt *gt, unsigned int vfid,
unsigned int num_vfs, u32 num_ctxs)
{ … }
static u32 pf_estimate_fair_ctxs(struct xe_gt *gt, unsigned int num_vfs)
{ … }
int xe_gt_sriov_pf_config_set_fair_ctxs(struct xe_gt *gt, unsigned int vfid,
unsigned int num_vfs)
{ … }
static u32 pf_get_min_spare_dbs(struct xe_gt *gt)
{ … }
static u32 pf_get_spare_dbs(struct xe_gt *gt)
{ … }
static int pf_set_spare_dbs(struct xe_gt *gt, u32 spare)
{ … }
static int pf_reserve_dbs(struct xe_gt *gt, u32 num)
{ … }
static void pf_release_dbs(struct xe_gt *gt, u32 start, u32 num)
{ … }
static void pf_release_config_dbs(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{ … }
static int pf_provision_vf_dbs(struct xe_gt *gt, unsigned int vfid, u32 num_dbs)
{ … }
static u32 pf_get_vf_config_dbs(struct xe_gt *gt, unsigned int vfid)
{ … }
u32 xe_gt_sriov_pf_config_get_dbs(struct xe_gt *gt, unsigned int vfid)
{ … }
int xe_gt_sriov_pf_config_set_dbs(struct xe_gt *gt, unsigned int vfid, u32 num_dbs)
{ … }
int xe_gt_sriov_pf_config_bulk_set_dbs(struct xe_gt *gt, unsigned int vfid,
unsigned int num_vfs, u32 num_dbs)
{ … }
static u32 pf_estimate_fair_dbs(struct xe_gt *gt, unsigned int num_vfs)
{ … }
int xe_gt_sriov_pf_config_set_fair_dbs(struct xe_gt *gt, unsigned int vfid,
unsigned int num_vfs)
{ … }
static u64 pf_get_lmem_alignment(struct xe_gt *gt)
{ … }
static u64 pf_get_min_spare_lmem(struct xe_gt *gt)
{ … }
static u64 pf_get_spare_lmem(struct xe_gt *gt)
{ … }
static int pf_set_spare_lmem(struct xe_gt *gt, u64 size)
{ … }
static u64 pf_get_vf_config_lmem(struct xe_gt *gt, unsigned int vfid)
{ … }
static int pf_distribute_config_lmem(struct xe_gt *gt, unsigned int vfid, u64 size)
{ … }
static void pf_force_lmtt_invalidate(struct xe_device *xe)
{ … }
static void pf_reset_vf_lmtt(struct xe_device *xe, unsigned int vfid)
{ … }
static int pf_update_vf_lmtt(struct xe_device *xe, unsigned int vfid)
{ … }
static void pf_release_vf_config_lmem(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{ … }
static int pf_provision_vf_lmem(struct xe_gt *gt, unsigned int vfid, u64 size)
{ … }
u64 xe_gt_sriov_pf_config_get_lmem(struct xe_gt *gt, unsigned int vfid)
{ … }
int xe_gt_sriov_pf_config_set_lmem(struct xe_gt *gt, unsigned int vfid, u64 size)
{ … }
int xe_gt_sriov_pf_config_bulk_set_lmem(struct xe_gt *gt, unsigned int vfid,
unsigned int num_vfs, u64 size)
{ … }
static u64 pf_query_free_lmem(struct xe_gt *gt)
{ … }
static u64 pf_query_max_lmem(struct xe_gt *gt)
{ … }
#ifdef CONFIG_DRM_XE_DEBUG_SRIOV
#define MAX_FAIR_LMEM …
#else
#define MAX_FAIR_LMEM …
#endif
static u64 pf_estimate_fair_lmem(struct xe_gt *gt, unsigned int num_vfs)
{ … }
int xe_gt_sriov_pf_config_set_fair_lmem(struct xe_gt *gt, unsigned int vfid,
unsigned int num_vfs)
{ … }
int xe_gt_sriov_pf_config_set_fair(struct xe_gt *gt, unsigned int vfid,
unsigned int num_vfs)
{ … }
static const char *exec_quantum_unit(u32 exec_quantum)
{ … }
static int pf_provision_exec_quantum(struct xe_gt *gt, unsigned int vfid,
u32 exec_quantum)
{ … }
static int pf_get_exec_quantum(struct xe_gt *gt, unsigned int vfid)
{ … }
int xe_gt_sriov_pf_config_set_exec_quantum(struct xe_gt *gt, unsigned int vfid,
u32 exec_quantum)
{ … }
u32 xe_gt_sriov_pf_config_get_exec_quantum(struct xe_gt *gt, unsigned int vfid)
{ … }
static const char *preempt_timeout_unit(u32 preempt_timeout)
{ … }
static int pf_provision_preempt_timeout(struct xe_gt *gt, unsigned int vfid,
u32 preempt_timeout)
{ … }
static int pf_get_preempt_timeout(struct xe_gt *gt, unsigned int vfid)
{ … }
int xe_gt_sriov_pf_config_set_preempt_timeout(struct xe_gt *gt, unsigned int vfid,
u32 preempt_timeout)
{ … }
u32 xe_gt_sriov_pf_config_get_preempt_timeout(struct xe_gt *gt, unsigned int vfid)
{ … }
static void pf_reset_config_sched(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{ … }
static int pf_provision_threshold(struct xe_gt *gt, unsigned int vfid,
enum xe_guc_klv_threshold_index index, u32 value)
{ … }
static int pf_get_threshold(struct xe_gt *gt, unsigned int vfid,
enum xe_guc_klv_threshold_index index)
{ … }
static const char *threshold_unit(u32 threshold)
{ … }
int xe_gt_sriov_pf_config_set_threshold(struct xe_gt *gt, unsigned int vfid,
enum xe_guc_klv_threshold_index index, u32 value)
{ … }
u32 xe_gt_sriov_pf_config_get_threshold(struct xe_gt *gt, unsigned int vfid,
enum xe_guc_klv_threshold_index index)
{ … }
static void pf_release_vf_config(struct xe_gt *gt, unsigned int vfid)
{ … }
int xe_gt_sriov_pf_config_release(struct xe_gt *gt, unsigned int vfid, bool force)
{ … }
int xe_gt_sriov_pf_config_push(struct xe_gt *gt, unsigned int vfid, bool refresh)
{ … }
static int pf_validate_vf_config(struct xe_gt *gt, unsigned int vfid)
{ … }
bool xe_gt_sriov_pf_config_is_empty(struct xe_gt *gt, unsigned int vfid)
{ … }
void xe_gt_sriov_pf_config_restart(struct xe_gt *gt)
{ … }
int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
{ … }
int xe_gt_sriov_pf_config_print_ctxs(struct xe_gt *gt, struct drm_printer *p)
{ … }
int xe_gt_sriov_pf_config_print_dbs(struct xe_gt *gt, struct drm_printer *p)
{ … }
int xe_gt_sriov_pf_config_print_available_ggtt(struct xe_gt *gt, struct drm_printer *p)
{ … }