0001
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
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