| /* |
| * 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 |
| |