cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

therm.h (3492B)


      1/* SPDX-License-Identifier: MIT */
      2#ifndef __NVKM_THERM_H__
      3#define __NVKM_THERM_H__
      4#include <core/subdev.h>
      5
      6#include <subdev/bios.h>
      7#include <subdev/bios/therm.h>
      8#include <subdev/timer.h>
      9
     10enum nvkm_therm_thrs_direction {
     11	NVKM_THERM_THRS_FALLING = 0,
     12	NVKM_THERM_THRS_RISING = 1
     13};
     14
     15enum nvkm_therm_thrs_state {
     16	NVKM_THERM_THRS_LOWER = 0,
     17	NVKM_THERM_THRS_HIGHER = 1
     18};
     19
     20enum nvkm_therm_thrs {
     21	NVKM_THERM_THRS_FANBOOST = 0,
     22	NVKM_THERM_THRS_DOWNCLOCK = 1,
     23	NVKM_THERM_THRS_CRITICAL = 2,
     24	NVKM_THERM_THRS_SHUTDOWN = 3,
     25	NVKM_THERM_THRS_NR
     26};
     27
     28enum nvkm_therm_fan_mode {
     29	NVKM_THERM_CTRL_NONE = 0,
     30	NVKM_THERM_CTRL_MANUAL = 1,
     31	NVKM_THERM_CTRL_AUTO = 2,
     32};
     33
     34enum nvkm_therm_attr_type {
     35	NVKM_THERM_ATTR_FAN_MIN_DUTY = 0,
     36	NVKM_THERM_ATTR_FAN_MAX_DUTY = 1,
     37	NVKM_THERM_ATTR_FAN_MODE = 2,
     38
     39	NVKM_THERM_ATTR_THRS_FAN_BOOST = 10,
     40	NVKM_THERM_ATTR_THRS_FAN_BOOST_HYST = 11,
     41	NVKM_THERM_ATTR_THRS_DOWN_CLK = 12,
     42	NVKM_THERM_ATTR_THRS_DOWN_CLK_HYST = 13,
     43	NVKM_THERM_ATTR_THRS_CRITICAL = 14,
     44	NVKM_THERM_ATTR_THRS_CRITICAL_HYST = 15,
     45	NVKM_THERM_ATTR_THRS_SHUTDOWN = 16,
     46	NVKM_THERM_ATTR_THRS_SHUTDOWN_HYST = 17,
     47};
     48
     49struct nvkm_therm_clkgate_init {
     50	u32 addr;
     51	u8  count;
     52	u32 data;
     53};
     54
     55struct nvkm_therm_clkgate_pack {
     56	const struct nvkm_therm_clkgate_init *init;
     57};
     58
     59struct nvkm_therm {
     60	const struct nvkm_therm_func *func;
     61	struct nvkm_subdev subdev;
     62
     63	/* automatic thermal management */
     64	struct nvkm_alarm alarm;
     65	spinlock_t lock;
     66	struct nvbios_therm_trip_point *last_trip;
     67	int mode;
     68	int cstate;
     69	int suspend;
     70
     71	/* bios */
     72	struct nvbios_therm_sensor bios_sensor;
     73
     74	/* fan priv */
     75	struct nvkm_fan *fan;
     76
     77	/* alarms priv */
     78	struct {
     79		spinlock_t alarm_program_lock;
     80		struct nvkm_alarm therm_poll_alarm;
     81		enum nvkm_therm_thrs_state alarm_state[NVKM_THERM_THRS_NR];
     82	} sensor;
     83
     84	/* what should be done if the card overheats */
     85	struct {
     86		void (*downclock)(struct nvkm_therm *, bool active);
     87		void (*pause)(struct nvkm_therm *, bool active);
     88	} emergency;
     89
     90	/* ic */
     91	struct i2c_client *ic;
     92
     93	int (*fan_get)(struct nvkm_therm *);
     94	int (*fan_set)(struct nvkm_therm *, int);
     95
     96	int (*attr_get)(struct nvkm_therm *, enum nvkm_therm_attr_type);
     97	int (*attr_set)(struct nvkm_therm *, enum nvkm_therm_attr_type, int);
     98
     99	bool clkgating_enabled;
    100};
    101
    102int nvkm_therm_temp_get(struct nvkm_therm *);
    103int nvkm_therm_fan_sense(struct nvkm_therm *);
    104int nvkm_therm_cstate(struct nvkm_therm *, int, int);
    105void nvkm_therm_clkgate_init(struct nvkm_therm *,
    106			     const struct nvkm_therm_clkgate_pack *);
    107void nvkm_therm_clkgate_enable(struct nvkm_therm *);
    108void nvkm_therm_clkgate_fini(struct nvkm_therm *, bool);
    109
    110int nv40_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);
    111int nv50_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);
    112int g84_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);
    113int gt215_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);
    114int gf119_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);
    115int gk104_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);
    116int gm107_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);
    117int gm200_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);
    118int gp100_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **);
    119#endif