123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #ifndef __NVKM_CLK_H__
- #define __NVKM_CLK_H__
- #include <core/subdev.h>
- #include <core/notify.h>
- #include <subdev/pci.h>
- struct nvbios_pll;
- struct nvkm_pll_vals;
- #define NVKM_CLK_CSTATE_DEFAULT -1 /* POSTed default */
- #define NVKM_CLK_CSTATE_BASE -2 /* pstate base */
- #define NVKM_CLK_CSTATE_HIGHEST -3 /* highest possible */
- enum nv_clk_src {
- nv_clk_src_crystal,
- nv_clk_src_href,
- nv_clk_src_hclk,
- nv_clk_src_hclkm3,
- nv_clk_src_hclkm3d2,
- nv_clk_src_hclkm2d3, /* NVAA */
- nv_clk_src_hclkm4, /* NVAA */
- nv_clk_src_cclk, /* NVAA */
- nv_clk_src_host,
- nv_clk_src_sppll0,
- nv_clk_src_sppll1,
- nv_clk_src_mpllsrcref,
- nv_clk_src_mpllsrc,
- nv_clk_src_mpll,
- nv_clk_src_mdiv,
- nv_clk_src_core,
- nv_clk_src_core_intm,
- nv_clk_src_shader,
- nv_clk_src_mem,
- nv_clk_src_gpc,
- nv_clk_src_rop,
- nv_clk_src_hubk01,
- nv_clk_src_hubk06,
- nv_clk_src_hubk07,
- nv_clk_src_copy,
- nv_clk_src_pmu,
- nv_clk_src_disp,
- nv_clk_src_vdec,
- nv_clk_src_dom6,
- nv_clk_src_max,
- };
- struct nvkm_cstate {
- struct list_head head;
- u8 voltage;
- u32 domain[nv_clk_src_max];
- u8 id;
- };
- struct nvkm_pstate {
- struct list_head head;
- struct list_head list; /* c-states */
- struct nvkm_cstate base;
- u8 pstate;
- u8 fanspeed;
- enum nvkm_pcie_speed pcie_speed;
- u8 pcie_width;
- };
- struct nvkm_domain {
- enum nv_clk_src name;
- u8 bios; /* 0xff for none */
- #define NVKM_CLK_DOM_FLAG_CORE 0x01
- #define NVKM_CLK_DOM_FLAG_VPSTATE 0x02
- u8 flags;
- const char *mname;
- int mdiv;
- };
- struct nvkm_clk {
- const struct nvkm_clk_func *func;
- struct nvkm_subdev subdev;
- const struct nvkm_domain *domains;
- struct nvkm_pstate bstate;
- struct list_head states;
- int state_nr;
- struct work_struct work;
- wait_queue_head_t wait;
- atomic_t waiting;
- struct nvkm_notify pwrsrc_ntfy;
- int pwrsrc;
- int pstate; /* current */
- int ustate_ac; /* user-requested (-1 disabled, -2 perfmon) */
- int ustate_dc; /* user-requested (-1 disabled, -2 perfmon) */
- int astate; /* perfmon adjustment (base) */
- int dstate; /* display adjustment (min+) */
- u8 temp;
- bool allow_reclock;
- #define NVKM_CLK_BOOST_NONE 0x0
- #define NVKM_CLK_BOOST_BIOS 0x1
- #define NVKM_CLK_BOOST_FULL 0x2
- u8 boost_mode;
- u32 base_khz;
- u32 boost_khz;
- /*XXX: die, these are here *only* to support the completely
- * bat-shit insane what-was-nouveau_hw.c code
- */
- int (*pll_calc)(struct nvkm_clk *, struct nvbios_pll *, int clk,
- struct nvkm_pll_vals *pv);
- int (*pll_prog)(struct nvkm_clk *, u32 reg1, struct nvkm_pll_vals *pv);
- };
- int nvkm_clk_read(struct nvkm_clk *, enum nv_clk_src);
- int nvkm_clk_ustate(struct nvkm_clk *, int req, int pwr);
- int nvkm_clk_astate(struct nvkm_clk *, int req, int rel, bool wait);
- int nvkm_clk_dstate(struct nvkm_clk *, int req, int rel);
- int nvkm_clk_tstate(struct nvkm_clk *, u8 temperature);
- int nv04_clk_new(struct nvkm_device *, int, struct nvkm_clk **);
- int nv40_clk_new(struct nvkm_device *, int, struct nvkm_clk **);
- int nv50_clk_new(struct nvkm_device *, int, struct nvkm_clk **);
- int g84_clk_new(struct nvkm_device *, int, struct nvkm_clk **);
- int mcp77_clk_new(struct nvkm_device *, int, struct nvkm_clk **);
- int gt215_clk_new(struct nvkm_device *, int, struct nvkm_clk **);
- int gf100_clk_new(struct nvkm_device *, int, struct nvkm_clk **);
- int gk104_clk_new(struct nvkm_device *, int, struct nvkm_clk **);
- int gk20a_clk_new(struct nvkm_device *, int, struct nvkm_clk **);
- int gm20b_clk_new(struct nvkm_device *, int, struct nvkm_clk **);
- #endif
|