summaryrefslogtreecommitdiffstats
path: root/src/soc/samsung/common/include/soc/tmu.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/samsung/common/include/soc/tmu.h')
-rw-r--r--src/soc/samsung/common/include/soc/tmu.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/soc/samsung/common/include/soc/tmu.h b/src/soc/samsung/common/include/soc/tmu.h
new file mode 100644
index 000000000000..44996f6fdff0
--- /dev/null
+++ b/src/soc/samsung/common/include/soc/tmu.h
@@ -0,0 +1,118 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+/* EXYNOS - Thermal Management Unit */
+
+#ifndef SOC_SAMSUNG_COMMON_INCLUDE_SOC_TMU_H
+#define SOC_SAMSUNG_COMMON_INCLUDE_SOC_TMU_H
+
+struct tmu_reg {
+ unsigned int triminfo;
+ unsigned int rsvd1;
+ unsigned int rsvd2;
+ unsigned int rsvd3;
+ unsigned int rsvd4;
+ unsigned int triminfo_control;
+ unsigned int rsvd5;
+ unsigned int rsvd6;
+ unsigned int tmu_control;
+ unsigned int rsvd7;
+ unsigned int tmu_status;
+ unsigned int sampling_internal;
+ unsigned int counter_value0;
+ unsigned int counter_value1;
+ unsigned int rsvd8;
+ unsigned int rsvd9;
+ unsigned int current_temp;
+ unsigned int rsvd10;
+ unsigned int rsvd11;
+ unsigned int rsvd12;
+ unsigned int threshold_temp_rise;
+ unsigned int threshold_temp_fall;
+ unsigned int rsvd13;
+ unsigned int rsvd14;
+ unsigned int past_temp3_0;
+ unsigned int past_temp7_4;
+ unsigned int past_temp11_8;
+ unsigned int past_temp15_12;
+ unsigned int inten;
+ unsigned int intstat;
+ unsigned int intclear;
+ unsigned int rsvd15;
+ unsigned int emul_con;
+};
+check_member(tmu_reg, emul_con, 0x80);
+
+enum tmu_status_t {
+ TMU_STATUS_INIT = 0,
+ TMU_STATUS_NORMAL,
+ TMU_STATUS_WARNING,
+ TMU_STATUS_TRIPPED,
+};
+
+/* Temperature threshold values for various thermal events */
+struct temperature_params {
+ /* minimum value in temperature code range */
+ unsigned int min_val;
+ /* maximum value in temperature code range */
+ unsigned int max_val;
+ /* temperature threshold to start warning */
+ unsigned int start_warning;
+ /* temperature threshold CPU tripping */
+ unsigned int start_tripping;
+ /* temperature threshold for HW tripping */
+ unsigned int hardware_tripping;
+};
+
+/* Pre-defined values and thresholds for calibration of current temperature */
+struct tmu_data {
+ /* pre-defined temperature thresholds */
+ struct temperature_params ts;
+ /* pre-defined efuse range minimum value */
+ unsigned int efuse_min_value;
+ /* pre-defined efuse value for temperature calibration */
+ unsigned int efuse_value;
+ /* pre-defined efuse range maximum value */
+ unsigned int efuse_max_value;
+ /* current temperature sensing slope */
+ unsigned int slope;
+};
+
+/* TMU device specific details and status */
+struct tmu_info {
+ /* base Address for the TMU */
+ unsigned int tmu_base;
+ /* mux Address for the TMU */
+ int tmu_mux;
+ /* pre-defined values for calibration and thresholds */
+ struct tmu_data data;
+ /* value required for triminfo_25 calibration */
+ unsigned int te1;
+ /* value required for triminfo_85 calibration */
+ unsigned int te2;
+ /* TMU DC value for threshold calculation */
+ int dc_value;
+ /* enum value indicating status of the TMU */
+ int tmu_state;
+};
+
+extern struct tmu_info *tmu_info;
+
+/*
+ * Monitors status of the TMU device and exynos temperature
+ *
+ * @info pointer to TMU info struct
+ * @temp pointer to the current temperature value
+ * @return enum tmu_status_t value, code indicating event to execute
+ * and -1 on error
+ */
+enum tmu_status_t tmu_monitor(struct tmu_info *info, int *temp);
+
+/*
+ * Initialize TMU device
+ *
+ * @info pointer to TMU info struct
+ * @return int value, 0 for success
+ */
+int tmu_init(struct tmu_info *info);
+
+#endif /* SOC_SAMSUNG_COMMON_INCLUDE_SOC_TMU_H */