Path: blob/master/drivers/accel/amdxdna/amdxdna_pci_drv.h
53295 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* Copyright (C) 2022-2024, Advanced Micro Devices, Inc.3*/45#ifndef _AMDXDNA_PCI_DRV_H_6#define _AMDXDNA_PCI_DRV_H_78#include <drm/drm_print.h>9#include <linux/workqueue.h>10#include <linux/xarray.h>1112#define XDNA_INFO(xdna, fmt, args...) drm_info(&(xdna)->ddev, fmt, ##args)13#define XDNA_WARN(xdna, fmt, args...) drm_warn(&(xdna)->ddev, "%s: "fmt, __func__, ##args)14#define XDNA_ERR(xdna, fmt, args...) drm_err(&(xdna)->ddev, "%s: "fmt, __func__, ##args)15#define XDNA_DBG(xdna, fmt, args...) drm_dbg(&(xdna)->ddev, fmt, ##args)16#define XDNA_INFO_ONCE(xdna, fmt, args...) drm_info_once(&(xdna)->ddev, fmt, ##args)1718#define XDNA_MBZ_DBG(xdna, ptr, sz) \19({ \20int __i; \21int __ret = 0; \22u8 *__ptr = (u8 *)(ptr); \23for (__i = 0; __i < (sz); __i++) { \24if (__ptr[__i]) { \25XDNA_DBG(xdna, "MBZ check failed"); \26__ret = -EINVAL; \27break; \28} \29} \30__ret; \31})3233#define to_xdna_dev(drm_dev) \34((struct amdxdna_dev *)container_of(drm_dev, struct amdxdna_dev, ddev))3536extern const struct drm_driver amdxdna_drm_drv;3738struct amdxdna_client;39struct amdxdna_dev;40struct amdxdna_drm_get_info;41struct amdxdna_drm_set_state;42struct amdxdna_gem_obj;43struct amdxdna_hwctx;44struct amdxdna_sched_job;4546/*47* struct amdxdna_dev_ops - Device hardware operation callbacks48*/49struct amdxdna_dev_ops {50int (*init)(struct amdxdna_dev *xdna);51void (*fini)(struct amdxdna_dev *xdna);52int (*resume)(struct amdxdna_dev *xdna);53int (*suspend)(struct amdxdna_dev *xdna);54int (*hwctx_init)(struct amdxdna_hwctx *hwctx);55void (*hwctx_fini)(struct amdxdna_hwctx *hwctx);56int (*hwctx_config)(struct amdxdna_hwctx *hwctx, u32 type, u64 value, void *buf, u32 size);57int (*hwctx_sync_debug_bo)(struct amdxdna_hwctx *hwctx, u32 debug_bo_hdl);58void (*hmm_invalidate)(struct amdxdna_gem_obj *abo, unsigned long cur_seq);59int (*cmd_submit)(struct amdxdna_hwctx *hwctx, struct amdxdna_sched_job *job, u64 *seq);60int (*get_aie_info)(struct amdxdna_client *client, struct amdxdna_drm_get_info *args);61int (*set_aie_state)(struct amdxdna_client *client, struct amdxdna_drm_set_state *args);62int (*get_array)(struct amdxdna_client *client, struct amdxdna_drm_get_array *args);63};6465/*66* struct amdxdna_dev_info - Device hardware information67* Record device static information, like reg, mbox, PSP, SMU bar index68*/69struct amdxdna_dev_info {70int reg_bar;71int mbox_bar;72int sram_bar;73int psp_bar;74int smu_bar;75int device_type;76int first_col;77u32 dev_mem_buf_shift;78u64 dev_mem_base;79size_t dev_mem_size;80char *vbnv;81const struct amdxdna_dev_priv *dev_priv;82const struct amdxdna_dev_ops *ops;83};8485struct amdxdna_fw_ver {86u32 major;87u32 minor;88u32 sub;89u32 build;90};9192struct amdxdna_dev {93struct drm_device ddev;94struct amdxdna_dev_hdl *dev_handle;95const struct amdxdna_dev_info *dev_info;96void *xrs_hdl;9798struct mutex dev_lock; /* per device lock */99struct list_head client_list;100struct amdxdna_fw_ver fw_ver;101struct rw_semaphore notifier_lock; /* for mmu notifier*/102struct workqueue_struct *notifier_wq;103};104105/*106* struct amdxdna_device_id - PCI device info107*/108struct amdxdna_device_id {109unsigned short device;110u8 revision;111const struct amdxdna_dev_info *dev_info;112};113114/*115* struct amdxdna_client - amdxdna client116* A per fd data structure for managing context and other user process stuffs.117*/118struct amdxdna_client {119struct list_head node;120pid_t pid;121struct srcu_struct hwctx_srcu;122struct xarray hwctx_xa;123u32 next_hwctxid;124struct amdxdna_dev *xdna;125struct drm_file *filp;126127struct mutex mm_lock; /* protect memory related */128struct amdxdna_gem_obj *dev_heap;129130struct iommu_sva *sva;131int pasid;132struct mm_struct *mm;133};134135#define amdxdna_for_each_hwctx(client, hwctx_id, entry) \136xa_for_each(&(client)->hwctx_xa, hwctx_id, entry)137138/* Add device info below */139extern const struct amdxdna_dev_info dev_npu1_info;140extern const struct amdxdna_dev_info dev_npu4_info;141extern const struct amdxdna_dev_info dev_npu5_info;142extern const struct amdxdna_dev_info dev_npu6_info;143144int amdxdna_sysfs_init(struct amdxdna_dev *xdna);145void amdxdna_sysfs_fini(struct amdxdna_dev *xdna);146147#endif /* _AMDXDNA_PCI_DRV_H_ */148149150