Path: blob/master/drivers/accel/amdxdna/amdxdna_pci_drv.h
29278 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 <linux/workqueue.h>9#include <linux/xarray.h>1011#define XDNA_INFO(xdna, fmt, args...) drm_info(&(xdna)->ddev, fmt, ##args)12#define XDNA_WARN(xdna, fmt, args...) drm_warn(&(xdna)->ddev, "%s: "fmt, __func__, ##args)13#define XDNA_ERR(xdna, fmt, args...) drm_err(&(xdna)->ddev, "%s: "fmt, __func__, ##args)14#define XDNA_DBG(xdna, fmt, args...) drm_dbg(&(xdna)->ddev, fmt, ##args)15#define XDNA_INFO_ONCE(xdna, fmt, args...) drm_info_once(&(xdna)->ddev, fmt, ##args)1617#define XDNA_MBZ_DBG(xdna, ptr, sz) \18({ \19int __i; \20int __ret = 0; \21u8 *__ptr = (u8 *)(ptr); \22for (__i = 0; __i < (sz); __i++) { \23if (__ptr[__i]) { \24XDNA_DBG(xdna, "MBZ check failed"); \25__ret = -EINVAL; \26break; \27} \28} \29__ret; \30})3132#define to_xdna_dev(drm_dev) \33((struct amdxdna_dev *)container_of(drm_dev, struct amdxdna_dev, ddev))3435extern const struct drm_driver amdxdna_drm_drv;3637struct amdxdna_client;38struct amdxdna_dev;39struct amdxdna_drm_get_info;40struct amdxdna_drm_set_state;41struct amdxdna_gem_obj;42struct amdxdna_hwctx;43struct amdxdna_sched_job;4445/*46* struct amdxdna_dev_ops - Device hardware operation callbacks47*/48struct amdxdna_dev_ops {49int (*init)(struct amdxdna_dev *xdna);50void (*fini)(struct amdxdna_dev *xdna);51int (*resume)(struct amdxdna_dev *xdna);52int (*suspend)(struct amdxdna_dev *xdna);53int (*hwctx_init)(struct amdxdna_hwctx *hwctx);54void (*hwctx_fini)(struct amdxdna_hwctx *hwctx);55int (*hwctx_config)(struct amdxdna_hwctx *hwctx, u32 type, u64 value, void *buf, u32 size);56void (*hmm_invalidate)(struct amdxdna_gem_obj *abo, unsigned long cur_seq);57int (*cmd_submit)(struct amdxdna_hwctx *hwctx, struct amdxdna_sched_job *job, u64 *seq);58int (*get_aie_info)(struct amdxdna_client *client, struct amdxdna_drm_get_info *args);59int (*set_aie_state)(struct amdxdna_client *client, struct amdxdna_drm_set_state *args);60int (*get_array)(struct amdxdna_client *client, struct amdxdna_drm_get_array *args);61};6263/*64* struct amdxdna_dev_info - Device hardware information65* Record device static information, like reg, mbox, PSP, SMU bar index66*/67struct amdxdna_dev_info {68int reg_bar;69int mbox_bar;70int sram_bar;71int psp_bar;72int smu_bar;73int device_type;74int first_col;75u32 dev_mem_buf_shift;76u64 dev_mem_base;77size_t dev_mem_size;78char *vbnv;79const struct amdxdna_dev_priv *dev_priv;80const struct amdxdna_dev_ops *ops;81};8283struct amdxdna_fw_ver {84u32 major;85u32 minor;86u32 sub;87u32 build;88};8990struct amdxdna_dev {91struct drm_device ddev;92struct amdxdna_dev_hdl *dev_handle;93const struct amdxdna_dev_info *dev_info;94void *xrs_hdl;9596struct mutex dev_lock; /* per device lock */97struct list_head client_list;98struct amdxdna_fw_ver fw_ver;99struct rw_semaphore notifier_lock; /* for mmu notifier*/100struct workqueue_struct *notifier_wq;101};102103/*104* struct amdxdna_device_id - PCI device info105*/106struct amdxdna_device_id {107unsigned short device;108u8 revision;109const struct amdxdna_dev_info *dev_info;110};111112/*113* struct amdxdna_client - amdxdna client114* A per fd data structure for managing context and other user process stuffs.115*/116struct amdxdna_client {117struct list_head node;118pid_t pid;119struct srcu_struct hwctx_srcu;120struct xarray hwctx_xa;121u32 next_hwctxid;122struct amdxdna_dev *xdna;123struct drm_file *filp;124125struct mutex mm_lock; /* protect memory related */126struct amdxdna_gem_obj *dev_heap;127128struct iommu_sva *sva;129int pasid;130};131132#define amdxdna_for_each_hwctx(client, hwctx_id, entry) \133xa_for_each(&(client)->hwctx_xa, hwctx_id, entry)134135/* Add device info below */136extern const struct amdxdna_dev_info dev_npu1_info;137extern const struct amdxdna_dev_info dev_npu2_info;138extern const struct amdxdna_dev_info dev_npu4_info;139extern const struct amdxdna_dev_info dev_npu5_info;140extern const struct amdxdna_dev_info dev_npu6_info;141142int amdxdna_sysfs_init(struct amdxdna_dev *xdna);143void amdxdna_sysfs_fini(struct amdxdna_dev *xdna);144145#endif /* _AMDXDNA_PCI_DRV_H_ */146147148