Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: MIT */
0002 #ifndef __NVKM_PMU_H__
0003 #define __NVKM_PMU_H__
0004 #include <core/subdev.h>
0005 #include <core/falcon.h>
0006 
0007 struct nvkm_pmu {
0008     const struct nvkm_pmu_func *func;
0009     struct nvkm_subdev subdev;
0010     struct nvkm_falcon falcon;
0011 
0012     struct nvkm_falcon_qmgr *qmgr;
0013     struct nvkm_falcon_cmdq *hpq;
0014     struct nvkm_falcon_cmdq *lpq;
0015     struct nvkm_falcon_msgq *msgq;
0016     bool initmsg_received;
0017 
0018     struct completion wpr_ready;
0019 
0020     struct {
0021         struct mutex mutex;
0022         u32 base;
0023         u32 size;
0024     } send;
0025 
0026     struct {
0027         u32 base;
0028         u32 size;
0029 
0030         struct work_struct work;
0031         wait_queue_head_t wait;
0032         u32 process;
0033         u32 message;
0034         u32 data[2];
0035     } recv;
0036 };
0037 
0038 int nvkm_pmu_send(struct nvkm_pmu *, u32 reply[2], u32 process,
0039           u32 message, u32 data0, u32 data1);
0040 void nvkm_pmu_pgob(struct nvkm_pmu *, bool enable);
0041 bool nvkm_pmu_fan_controlled(struct nvkm_device *);
0042 
0043 int gt215_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0044 int gf100_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0045 int gf119_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0046 int gk104_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0047 int gk110_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0048 int gk208_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0049 int gk20a_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0050 int gm107_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0051 int gm200_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0052 int gm20b_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0053 int gp102_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0054 int gp10b_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **);
0055 
0056 /* interface to MEMX process running on PMU */
0057 struct nvkm_memx;
0058 int  nvkm_memx_init(struct nvkm_pmu *, struct nvkm_memx **);
0059 int  nvkm_memx_fini(struct nvkm_memx **, bool exec);
0060 void nvkm_memx_wr32(struct nvkm_memx *, u32 addr, u32 data);
0061 void nvkm_memx_wait(struct nvkm_memx *, u32 addr, u32 mask, u32 data, u32 nsec);
0062 void nvkm_memx_nsec(struct nvkm_memx *, u32 nsec);
0063 void nvkm_memx_wait_vblank(struct nvkm_memx *);
0064 void nvkm_memx_train(struct nvkm_memx *);
0065 int  nvkm_memx_train_result(struct nvkm_pmu *, u32 *, int);
0066 void nvkm_memx_block(struct nvkm_memx *);
0067 void nvkm_memx_unblock(struct nvkm_memx *);
0068 #endif