46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: MIT */
 | |
| #ifndef __NVKM_VOLT_H__
 | |
| #define __NVKM_VOLT_H__
 | |
| #include <core/subdev.h>
 | |
| 
 | |
| struct nvkm_volt {
 | |
| 	const struct nvkm_volt_func *func;
 | |
| 	struct nvkm_subdev subdev;
 | |
| 
 | |
| 	u8 vid_mask;
 | |
| 	u8 vid_nr;
 | |
| 	struct {
 | |
| 		u32 uv;
 | |
| 		u8 vid;
 | |
| 	} vid[256];
 | |
| 
 | |
| 	u32 max_uv;
 | |
| 	u32 min_uv;
 | |
| 
 | |
| 	/*
 | |
| 	 * These are fully functional map entries creating a sw ceiling for
 | |
| 	 * the voltage. These all can describe different kind of curves, so
 | |
| 	 * that for any given temperature a different one can return the lowest
 | |
| 	 * value of all three.
 | |
| 	 */
 | |
| 	u8 max0_id;
 | |
| 	u8 max1_id;
 | |
| 	u8 max2_id;
 | |
| 
 | |
| 	int speedo;
 | |
| };
 | |
| 
 | |
| int nvkm_volt_map(struct nvkm_volt *volt, u8 id, u8 temperature);
 | |
| int nvkm_volt_map_min(struct nvkm_volt *volt, u8 id);
 | |
| int nvkm_volt_get(struct nvkm_volt *);
 | |
| int nvkm_volt_set_id(struct nvkm_volt *, u8 id, u8 min_id, u8 temp,
 | |
| 		     int condition);
 | |
| 
 | |
| int nv40_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **);
 | |
| int gf100_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **);
 | |
| int gf117_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **);
 | |
| int gk104_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **);
 | |
| int gk20a_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **);
 | |
| int gm20b_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **);
 | |
| #endif
 |