|  | /* | 
|  | * Copyright (c) 2014-2016, NVIDIA CORPORATION.  All rights reserved. | 
|  | * | 
|  | * This software is licensed under the terms of the GNU General Public | 
|  | * License version 2, as published by the Free Software Foundation, and | 
|  | * may be copied, distributed, and modified under those terms. | 
|  | * | 
|  | * This program is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | * GNU General Public License for more details. | 
|  | * | 
|  | */ | 
|  |  | 
|  | #ifndef __DRIVERS_THERMAL_TEGRA_SOCTHERM_H | 
|  | #define __DRIVERS_THERMAL_TEGRA_SOCTHERM_H | 
|  |  | 
|  | #define THERMCTL_LEVEL0_GROUP_CPU               0x0 | 
|  | #define THERMCTL_LEVEL0_GROUP_GPU		0x4 | 
|  | #define THERMCTL_LEVEL0_GROUP_MEM		0x8 | 
|  | #define THERMCTL_LEVEL0_GROUP_TSENSE		0xc | 
|  |  | 
|  | #define SENSOR_CONFIG2                          8 | 
|  | #define SENSOR_CONFIG2_THERMA_MASK		(0xffff << 16) | 
|  | #define SENSOR_CONFIG2_THERMA_SHIFT		16 | 
|  | #define SENSOR_CONFIG2_THERMB_MASK		0xffff | 
|  | #define SENSOR_CONFIG2_THERMB_SHIFT		0 | 
|  |  | 
|  | #define THERMCTL_THERMTRIP_CTL			0x80 | 
|  | /* BITs are defined in device file */ | 
|  |  | 
|  | #define SENSOR_PDIV				0x1c0 | 
|  | #define SENSOR_PDIV_CPU_MASK			(0xf << 12) | 
|  | #define SENSOR_PDIV_GPU_MASK			(0xf << 8) | 
|  | #define SENSOR_PDIV_MEM_MASK			(0xf << 4) | 
|  | #define SENSOR_PDIV_PLLX_MASK			(0xf << 0) | 
|  |  | 
|  | #define SENSOR_HOTSPOT_OFF			0x1c4 | 
|  | #define SENSOR_HOTSPOT_CPU_MASK			(0xff << 16) | 
|  | #define SENSOR_HOTSPOT_GPU_MASK			(0xff << 8) | 
|  | #define SENSOR_HOTSPOT_MEM_MASK			(0xff << 0) | 
|  |  | 
|  | #define SENSOR_TEMP1				0x1c8 | 
|  | #define SENSOR_TEMP1_CPU_TEMP_MASK		(0xffff << 16) | 
|  | #define SENSOR_TEMP1_GPU_TEMP_MASK		0xffff | 
|  | #define SENSOR_TEMP2				0x1cc | 
|  | #define SENSOR_TEMP2_MEM_TEMP_MASK		(0xffff << 16) | 
|  | #define SENSOR_TEMP2_PLLX_TEMP_MASK		0xffff | 
|  |  | 
|  | /** | 
|  | * struct tegra_tsensor_group - SOC_THERM sensor group data | 
|  | * @name: short name of the temperature sensor group | 
|  | * @id: numeric ID of the temperature sensor group | 
|  | * @sensor_temp_offset: offset of the SENSOR_TEMP* register | 
|  | * @sensor_temp_mask: bit mask for this sensor group in SENSOR_TEMP* register | 
|  | * @pdiv: the sensor count post-divider to use during runtime | 
|  | * @pdiv_ate: the sensor count post-divider used during automated test | 
|  | * @pdiv_mask: register bitfield mask for the PDIV field for this sensor | 
|  | * @pllx_hotspot_diff: hotspot offset from the PLLX sensor, must be 0 for | 
|  | PLLX sensor group | 
|  | * @pllx_hotspot_mask: register bitfield mask for the HOTSPOT field | 
|  | */ | 
|  | struct tegra_tsensor_group { | 
|  | const char *name; | 
|  | u8 id; | 
|  | u16 sensor_temp_offset; | 
|  | u32 sensor_temp_mask; | 
|  | u32 pdiv, pdiv_ate, pdiv_mask; | 
|  | u32 pllx_hotspot_diff, pllx_hotspot_mask; | 
|  | u32 thermtrip_enable_mask; | 
|  | u32 thermtrip_any_en_mask; | 
|  | u32 thermtrip_threshold_mask; | 
|  | u16 thermctl_lvl0_offset; | 
|  | u32 thermctl_lvl0_up_thresh_mask; | 
|  | u32 thermctl_lvl0_dn_thresh_mask; | 
|  | }; | 
|  |  | 
|  | struct tegra_tsensor_configuration { | 
|  | u32 tall, tiddq_en, ten_count, pdiv, pdiv_ate, tsample, tsample_ate; | 
|  | }; | 
|  |  | 
|  | struct tegra_tsensor { | 
|  | const char *name; | 
|  | const u32 base; | 
|  | const struct tegra_tsensor_configuration *config; | 
|  | const u32 calib_fuse_offset; | 
|  | /* | 
|  | * Correction values used to modify values read from | 
|  | * calibration fuses | 
|  | */ | 
|  | const s32 fuse_corr_alpha, fuse_corr_beta; | 
|  | const struct tegra_tsensor_group *group; | 
|  | }; | 
|  |  | 
|  | struct tegra_soctherm_fuse { | 
|  | u32 fuse_base_cp_mask, fuse_base_cp_shift; | 
|  | u32 fuse_base_ft_mask, fuse_base_ft_shift; | 
|  | u32 fuse_shift_ft_mask, fuse_shift_ft_shift; | 
|  | u32 fuse_spare_realignment; | 
|  | }; | 
|  |  | 
|  | struct tsensor_shared_calib { | 
|  | u32 base_cp, base_ft; | 
|  | u32 actual_temp_cp, actual_temp_ft; | 
|  | }; | 
|  |  | 
|  | struct tegra_soctherm_soc { | 
|  | const struct tegra_tsensor *tsensors; | 
|  | const unsigned int num_tsensors; | 
|  | const struct tegra_tsensor_group **ttgs; | 
|  | const unsigned int num_ttgs; | 
|  | const struct tegra_soctherm_fuse *tfuse; | 
|  | const int thresh_grain; | 
|  | const unsigned int bptt; | 
|  | const bool use_ccroc; | 
|  | }; | 
|  |  | 
|  | int tegra_calc_shared_calib(const struct tegra_soctherm_fuse *tfuse, | 
|  | struct tsensor_shared_calib *shared); | 
|  | int tegra_calc_tsensor_calib(const struct tegra_tsensor *sensor, | 
|  | const struct tsensor_shared_calib *shared, | 
|  | u32 *calib); | 
|  |  | 
|  | #ifdef CONFIG_ARCH_TEGRA_124_SOC | 
|  | extern const struct tegra_soctherm_soc tegra124_soctherm; | 
|  | #endif | 
|  |  | 
|  | #ifdef CONFIG_ARCH_TEGRA_132_SOC | 
|  | extern const struct tegra_soctherm_soc tegra132_soctherm; | 
|  | #endif | 
|  |  | 
|  | #ifdef CONFIG_ARCH_TEGRA_210_SOC | 
|  | extern const struct tegra_soctherm_soc tegra210_soctherm; | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  |