| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (c) 2020 MediaTek Inc. |
| */ |
| |
| #ifndef __THERMAL_INTERFACE_H__ |
| #define __THERMAL_INTERFACE_H__ |
| |
| #define CPU_TEMP_OFFSET (0) |
| #define CPU_HEADROOM_OFFSET (0x20) |
| #define CPU_HEADROOM_RATIO_OFFSET (0x40) |
| #define CPU_PREDICT_TEMP_OFFSET (0x60) |
| #define AP_NTC_HEADROOM_OFFSET (0x80) |
| #define TPCB_OFFSET (0x84) |
| #define TARGET_TPCB_OFFSET (0x88) |
| #define SPORTS_MODE_ENABLE (0x90) |
| #define TTJ_OFFSET (0x100) |
| #define POWER_BUDGET_OFFSET (0x110) |
| #define CPU_MIN_OPP_HINT_OFFSET (0x120) |
| #define CPU_ACTIVE_BITMASK_OFFSET (0x130) |
| #define CPU_JATM_SUSPEND_OFFSET (0x140) |
| #define GPU_JATM_SUSPEND_OFFSET (0x144) |
| #define MIN_THROTTLE_FREQ_OFFSET (0x14C) |
| #define GPU_TEMP_OFFSET (0x180) |
| #define APU_TEMP_OFFSET (0x190) |
| #define EMUL_TEMP_OFFSET (0x1B0) |
| #define CPU_LIMIT_FREQ_OFFSET (0x200) |
| #define CPU_CUR_FREQ_OFFSET (0x210) |
| #define CPU_MAX_TEMP_OFFSET (0x220) |
| #define CPU_LIMIT_OPP_OFFSET (0x260) |
| #define CPU_ATC_OFFSET (0x280) |
| #define GPU_ATC_OFFSET (0x2C8) |
| #define APU_ATC_OFFSET (0x2D4) |
| #define CPU_ATC_NUM (17) |
| #define GPU_ATC_NUM (3) |
| #define APU_ATC_NUM (1) |
| #define UTC_COUNT_OFFSET (0x27C) |
| #define INFOB_OFFSET (0x2C4) |
| #define GPU_COOLER_BASE (0x3A0) |
| |
| #define APU_MBOX_TTJ_OFFSET (0x700) |
| #define APU_MBOX_PB_OFFSET (0x704) |
| #define APU_MBOX_TEMP_OFFSET (0x708) |
| #define APU_MBOX_LIMIT_OPP_OFFSET (0x70C) |
| #define APU_MBOX_CUR_OPP_OFFSET (0x710) |
| #define APU_MBOX_EMUL_TEMP_OFFSET (0x714) |
| #define APU_MBOX_ATC_MAX_TTJ_ADDR (0x718) |
| |
| struct headroom_info { |
| int temp; |
| int predict_temp; |
| int headroom; |
| int ratio; |
| }; |
| enum headroom_id { |
| /* SoC Tj */ |
| SOC_CPU0, |
| SOC_CPU1, |
| SOC_CPU2, |
| SOC_CPU3, |
| SOC_CPU4, |
| SOC_CPU5, |
| SOC_CPU6, |
| SOC_CPU7, |
| /* PCB */ |
| PCB_AP, |
| |
| NR_HEADROOM_ID |
| }; |
| |
| enum ttj_user { |
| JATM_OFF = -1, |
| CATM, |
| JATM_ON, |
| NR_TTJ_USER |
| }; |
| |
| struct ttj_info { |
| int jatm_on; |
| unsigned int catm_cpu_ttj; |
| unsigned int catm_gpu_ttj; |
| unsigned int catm_apu_ttj; |
| unsigned int cpu_max_ttj; |
| unsigned int gpu_max_ttj; |
| unsigned int apu_max_ttj; |
| unsigned int min_ttj; |
| }; |
| |
| struct frs_info { |
| int enable; |
| int activated; |
| int pid; |
| int target_fps; |
| int diff; |
| int tpcb; |
| int tpcb_slope; |
| int ap_headroom; |
| int n_sec_to_ttpcb; |
| int frs_target_fps; |
| int real_fps; |
| int target_tpcb; |
| int ptime; |
| }; |
| |
| #define MAX_MD_NAME_LENGTH (20) |
| |
| struct md_thermal_sensor_t { |
| int id; |
| char sensor_name[MAX_MD_NAME_LENGTH]; |
| int cur_temp; |
| }; |
| |
| struct md_thermal_actuator_t { |
| int id; |
| char actuator_name[MAX_MD_NAME_LENGTH]; |
| int cur_status; |
| int max_status; |
| }; |
| |
| struct md_info { |
| int sensor_num; |
| struct md_thermal_sensor_t *sensor_info; |
| int md_autonomous_ctrl; |
| int actuator_num; |
| struct md_thermal_actuator_t *actuator_info; |
| }; |
| |
| extern void update_ap_ntc_headroom(int temp, int polling_interval); |
| extern int get_thermal_headroom(enum headroom_id id); |
| extern int set_cpu_min_opp(int gear, int opp); |
| extern int set_cpu_active_bitmask(int mask); |
| extern int get_cpu_temp(int cpu_id); |
| extern void set_ttj(int user); |
| extern void write_jatm_suspend(int jatm_suspend); |
| extern int get_jatm_suspend(void); |
| extern int get_catm_ttj(void); |
| extern int get_catm_min_ttj(void); |
| |
| #if IS_ENABLED(CONFIG_MTK_THERMAL_INTERFACE) |
| extern void __iomem *thermal_csram_base; |
| extern void __iomem *thermal_apu_mbox_base; |
| extern struct frs_info frs_data; |
| #else |
| void __iomem *thermal_csram_base; |
| void __iomem *thermal_apu_mbox_base; |
| struct frs_info frs_data; |
| #endif |
| #endif |