cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

omap4-thermal-data.c (9652B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * OMAP4 thermal driver.
      4 *
      5 * Copyright (C) 2011-2012 Texas Instruments Inc.
      6 * Contact:
      7 *	Eduardo Valentin <eduardo.valentin@ti.com>
      8 */
      9
     10#include "ti-thermal.h"
     11#include "ti-bandgap.h"
     12#include "omap4xxx-bandgap.h"
     13
     14/*
     15 * OMAP4430 has one instance of thermal sensor for MPU
     16 * need to describe the individual bit fields
     17 */
     18static struct temp_sensor_registers
     19omap4430_mpu_temp_sensor_registers = {
     20	.temp_sensor_ctrl = OMAP4430_TEMP_SENSOR_CTRL_OFFSET,
     21	.bgap_tempsoff_mask = OMAP4430_BGAP_TEMPSOFF_MASK,
     22	.bgap_soc_mask = OMAP4430_BGAP_TEMP_SENSOR_SOC_MASK,
     23	.bgap_eocz_mask = OMAP4430_BGAP_TEMP_SENSOR_EOCZ_MASK,
     24	.bgap_dtemp_mask = OMAP4430_BGAP_TEMP_SENSOR_DTEMP_MASK,
     25
     26	.bgap_mode_ctrl = OMAP4430_TEMP_SENSOR_CTRL_OFFSET,
     27	.mode_ctrl_mask = OMAP4430_CONTINUOUS_MODE_MASK,
     28
     29	.bgap_efuse = OMAP4430_FUSE_OPP_BGAP,
     30};
     31
     32/* Thresholds and limits for OMAP4430 MPU temperature sensor */
     33static struct temp_sensor_data omap4430_mpu_temp_sensor_data = {
     34	.min_freq = OMAP4430_MIN_FREQ,
     35	.max_freq = OMAP4430_MAX_FREQ,
     36};
     37
     38/*
     39 * Temperature values in milli degree celsius
     40 * ADC code values from 13 to 107, see TRM
     41 * "18.4.10.2.3 ADC Codes Versus Temperature".
     42 */
     43static const int
     44omap4430_adc_to_temp[OMAP4430_ADC_END_VALUE - OMAP4430_ADC_START_VALUE + 1] = {
     45	-40000, -38000, -35000, -34000, -32000, -30000, -28000, -26000, -24000,
     46	-22000,	-20000, -18500, -17000, -15000, -13500, -12000, -10000, -8000,
     47	-6500, -5000, -3500, -1500, 0, 2000, 3500, 5000, 6500, 8500, 10000,
     48	12000, 13500, 15000, 17000, 19000, 21000, 23000, 25000, 27000, 28500,
     49	30000, 32000, 33500, 35000, 37000, 38500, 40000, 42000, 43500, 45000,
     50	47000, 48500, 50000, 52000, 53500, 55000, 57000, 58500, 60000, 62000,
     51	64000, 66000, 68000, 70000, 71500, 73500, 75000, 77000, 78500, 80000,
     52	82000, 83500, 85000, 87000, 88500, 90000, 92000, 93500, 95000, 97000,
     53	98500, 100000, 102000, 103500, 105000, 107000, 109000, 111000, 113000,
     54	115000, 117000, 118500, 120000, 122000, 123500, 125000,
     55};
     56
     57/* OMAP4430 data */
     58const struct ti_bandgap_data omap4430_data = {
     59	.features = TI_BANDGAP_FEATURE_MODE_CONFIG |
     60			TI_BANDGAP_FEATURE_CLK_CTRL |
     61			TI_BANDGAP_FEATURE_POWER_SWITCH |
     62			TI_BANDGAP_FEATURE_CONT_MODE_ONLY,
     63	.fclock_name = "bandgap_fclk",
     64	.div_ck_name = "bandgap_fclk",
     65	.conv_table = omap4430_adc_to_temp,
     66	.adc_start_val = OMAP4430_ADC_START_VALUE,
     67	.adc_end_val = OMAP4430_ADC_END_VALUE,
     68	.expose_sensor = ti_thermal_expose_sensor,
     69	.remove_sensor = ti_thermal_remove_sensor,
     70	.sensors = {
     71		{
     72		.registers = &omap4430_mpu_temp_sensor_registers,
     73		.ts_data = &omap4430_mpu_temp_sensor_data,
     74		.domain = "cpu",
     75		.slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_4430,
     76		.constant_pcb = OMAP_GRADIENT_CONST_W_PCB_4430,
     77		.register_cooling = ti_thermal_register_cpu_cooling,
     78		.unregister_cooling = ti_thermal_unregister_cpu_cooling,
     79		},
     80	},
     81	.sensor_count = 1,
     82};
     83/*
     84 * OMAP4460 has one instance of thermal sensor for MPU
     85 * need to describe the individual bit fields
     86 */
     87static struct temp_sensor_registers
     88omap4460_mpu_temp_sensor_registers = {
     89	.temp_sensor_ctrl = OMAP4460_TEMP_SENSOR_CTRL_OFFSET,
     90	.bgap_tempsoff_mask = OMAP4460_BGAP_TEMPSOFF_MASK,
     91	.bgap_soc_mask = OMAP4460_BGAP_TEMP_SENSOR_SOC_MASK,
     92	.bgap_eocz_mask = OMAP4460_BGAP_TEMP_SENSOR_EOCZ_MASK,
     93	.bgap_dtemp_mask = OMAP4460_BGAP_TEMP_SENSOR_DTEMP_MASK,
     94
     95	.bgap_mask_ctrl = OMAP4460_BGAP_CTRL_OFFSET,
     96	.mask_hot_mask = OMAP4460_MASK_HOT_MASK,
     97	.mask_cold_mask = OMAP4460_MASK_COLD_MASK,
     98
     99	.bgap_mode_ctrl = OMAP4460_BGAP_CTRL_OFFSET,
    100	.mode_ctrl_mask = OMAP4460_CONTINUOUS_MODE_MASK,
    101
    102	.bgap_counter = OMAP4460_BGAP_COUNTER_OFFSET,
    103	.counter_mask = OMAP4460_COUNTER_MASK,
    104
    105	.bgap_threshold = OMAP4460_BGAP_THRESHOLD_OFFSET,
    106	.threshold_thot_mask = OMAP4460_T_HOT_MASK,
    107	.threshold_tcold_mask = OMAP4460_T_COLD_MASK,
    108
    109	.tshut_threshold = OMAP4460_BGAP_TSHUT_OFFSET,
    110	.tshut_hot_mask = OMAP4460_TSHUT_HOT_MASK,
    111	.tshut_cold_mask = OMAP4460_TSHUT_COLD_MASK,
    112
    113	.bgap_status = OMAP4460_BGAP_STATUS_OFFSET,
    114	.status_hot_mask = OMAP4460_HOT_FLAG_MASK,
    115	.status_cold_mask = OMAP4460_COLD_FLAG_MASK,
    116
    117	.bgap_efuse = OMAP4460_FUSE_OPP_BGAP,
    118};
    119
    120/* Thresholds and limits for OMAP4460 MPU temperature sensor */
    121static struct temp_sensor_data omap4460_mpu_temp_sensor_data = {
    122	.tshut_hot = OMAP4460_TSHUT_HOT,
    123	.tshut_cold = OMAP4460_TSHUT_COLD,
    124	.t_hot = OMAP4460_T_HOT,
    125	.t_cold = OMAP4460_T_COLD,
    126	.min_freq = OMAP4460_MIN_FREQ,
    127	.max_freq = OMAP4460_MAX_FREQ,
    128};
    129
    130/*
    131 * Temperature values in milli degree celsius
    132 * ADC code values from 530 to 923
    133 */
    134static const int
    135omap4460_adc_to_temp[OMAP4460_ADC_END_VALUE - OMAP4460_ADC_START_VALUE + 1] = {
    136	-40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
    137	-37800, -37300, -36800, -36400, -36000, -35600, -35200, -34800,
    138	-34300, -33800, -33400, -33000, -32600, -32200, -31800, -31300,
    139	-30800, -30400, -30000, -29600, -29200, -28700, -28200, -27800,
    140	-27400, -27000, -26600, -26200, -25700, -25200, -24800, -24400,
    141	-24000, -23600, -23200, -22700, -22200, -21800, -21400, -21000,
    142	-20600, -20200, -19700, -19200, -18800, -18400, -18000, -17600,
    143	-17200, -16700, -16200, -15800, -15400, -15000, -14600, -14200,
    144	-13700, -13200, -12800, -12400, -12000, -11600, -11200, -10700,
    145	-10200, -9800, -9400, -9000, -8600, -8200, -7700, -7200, -6800,
    146	-6400, -6000, -5600, -5200, -4800, -4300, -3800, -3400, -3000,
    147	-2600, -2200, -1800, -1300, -800, -400, 0, 400, 800, 1200, 1600,
    148	2100, 2600, 3000, 3400, 3800, 4200, 4600, 5100, 5600, 6000, 6400,
    149	6800, 7200, 7600, 8000, 8500, 9000, 9400, 9800, 10200, 10600, 11000,
    150	11400, 11900, 12400, 12800, 13200, 13600, 14000, 14400, 14800,
    151	15300, 15800, 16200, 16600, 17000, 17400, 17800, 18200, 18700,
    152	19200, 19600, 20000, 20400, 20800, 21200, 21600, 22100, 22600,
    153	23000, 23400, 23800, 24200, 24600, 25000, 25400, 25900, 26400,
    154	26800, 27200, 27600, 28000, 28400, 28800, 29300, 29800, 30200,
    155	30600, 31000, 31400, 31800, 32200, 32600, 33100, 33600, 34000,
    156	34400, 34800, 35200, 35600, 36000, 36400, 36800, 37300, 37800,
    157	38200, 38600, 39000, 39400, 39800, 40200, 40600, 41100, 41600,
    158	42000, 42400, 42800, 43200, 43600, 44000, 44400, 44800, 45300,
    159	45800, 46200, 46600, 47000, 47400, 47800, 48200, 48600, 49000,
    160	49500, 50000, 50400, 50800, 51200, 51600, 52000, 52400, 52800,
    161	53200, 53700, 54200, 54600, 55000, 55400, 55800, 56200, 56600,
    162	57000, 57400, 57800, 58200, 58700, 59200, 59600, 60000, 60400,
    163	60800, 61200, 61600, 62000, 62400, 62800, 63300, 63800, 64200,
    164	64600, 65000, 65400, 65800, 66200, 66600, 67000, 67400, 67800,
    165	68200, 68700, 69200, 69600, 70000, 70400, 70800, 71200, 71600,
    166	72000, 72400, 72800, 73200, 73600, 74100, 74600, 75000, 75400,
    167	75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600, 79000,
    168	79400, 79800, 80300, 80800, 81200, 81600, 82000, 82400, 82800,
    169	83200, 83600, 84000, 84400, 84800, 85200, 85600, 86000, 86400,
    170	86800, 87300, 87800, 88200, 88600, 89000, 89400, 89800, 90200,
    171	90600, 91000, 91400, 91800, 92200, 92600, 93000, 93400, 93800,
    172	94200, 94600, 95000, 95500, 96000, 96400, 96800, 97200, 97600,
    173	98000, 98400, 98800, 99200, 99600, 100000, 100400, 100800, 101200,
    174	101600, 102000, 102400, 102800, 103200, 103600, 104000, 104400,
    175	104800, 105200, 105600, 106100, 106600, 107000, 107400, 107800,
    176	108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
    177	111400, 111800, 112200, 112600, 113000, 113400, 113800, 114200,
    178	114600, 115000, 115400, 115800, 116200, 116600, 117000, 117400,
    179	117800, 118200, 118600, 119000, 119400, 119800, 120200, 120600,
    180	121000, 121400, 121800, 122200, 122600, 123000, 123400, 123800, 124200,
    181	124600, 124900, 125000, 125000, 125000, 125000
    182};
    183
    184/* OMAP4460 data */
    185const struct ti_bandgap_data omap4460_data = {
    186	.features = TI_BANDGAP_FEATURE_TSHUT |
    187			TI_BANDGAP_FEATURE_TSHUT_CONFIG |
    188			TI_BANDGAP_FEATURE_TALERT |
    189			TI_BANDGAP_FEATURE_MODE_CONFIG |
    190			TI_BANDGAP_FEATURE_POWER_SWITCH |
    191			TI_BANDGAP_FEATURE_CLK_CTRL |
    192			TI_BANDGAP_FEATURE_COUNTER,
    193	.fclock_name = "bandgap_ts_fclk",
    194	.div_ck_name = "div_ts_ck",
    195	.conv_table = omap4460_adc_to_temp,
    196	.adc_start_val = OMAP4460_ADC_START_VALUE,
    197	.adc_end_val = OMAP4460_ADC_END_VALUE,
    198	.expose_sensor = ti_thermal_expose_sensor,
    199	.remove_sensor = ti_thermal_remove_sensor,
    200	.report_temperature = ti_thermal_report_sensor_temperature,
    201	.sensors = {
    202		{
    203		.registers = &omap4460_mpu_temp_sensor_registers,
    204		.ts_data = &omap4460_mpu_temp_sensor_data,
    205		.domain = "cpu",
    206		.slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_4460,
    207		.constant_pcb = OMAP_GRADIENT_CONST_W_PCB_4460,
    208		.register_cooling = ti_thermal_register_cpu_cooling,
    209		.unregister_cooling = ti_thermal_unregister_cpu_cooling,
    210		},
    211	},
    212	.sensor_count = 1,
    213};
    214
    215/* OMAP4470 data */
    216const struct ti_bandgap_data omap4470_data = {
    217	.features = TI_BANDGAP_FEATURE_TSHUT |
    218			TI_BANDGAP_FEATURE_TSHUT_CONFIG |
    219			TI_BANDGAP_FEATURE_TALERT |
    220			TI_BANDGAP_FEATURE_MODE_CONFIG |
    221			TI_BANDGAP_FEATURE_POWER_SWITCH |
    222			TI_BANDGAP_FEATURE_CLK_CTRL |
    223			TI_BANDGAP_FEATURE_COUNTER,
    224	.fclock_name = "bandgap_ts_fclk",
    225	.div_ck_name = "div_ts_ck",
    226	.conv_table = omap4460_adc_to_temp,
    227	.adc_start_val = OMAP4460_ADC_START_VALUE,
    228	.adc_end_val = OMAP4460_ADC_END_VALUE,
    229	.expose_sensor = ti_thermal_expose_sensor,
    230	.remove_sensor = ti_thermal_remove_sensor,
    231	.report_temperature = ti_thermal_report_sensor_temperature,
    232	.sensors = {
    233		{
    234		.registers = &omap4460_mpu_temp_sensor_registers,
    235		.ts_data = &omap4460_mpu_temp_sensor_data,
    236		.domain = "cpu",
    237		.slope_pcb = OMAP_GRADIENT_SLOPE_W_PCB_4470,
    238		.constant_pcb = OMAP_GRADIENT_CONST_W_PCB_4470,
    239		.register_cooling = ti_thermal_register_cpu_cooling,
    240		.unregister_cooling = ti_thermal_unregister_cpu_cooling,
    241		},
    242	},
    243	.sensor_count = 1,
    244};