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

omap3-thermal-data.c (5165B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * OMAP3 thermal driver.
      4 *
      5 * Copyright (C) 2011-2012 Texas Instruments Inc.
      6 * Copyright (C) 2014 Pavel Machek <pavel@ucw.cz>
      7 *
      8 * Note
      9 * http://www.ti.com/lit/er/sprz278f/sprz278f.pdf "Advisory
     10 * 3.1.1.186 MMC OCP Clock Not Gated When Thermal Sensor Is Used"
     11 *
     12 * Also TI says:
     13 * Just be careful when you try to make thermal policy like decisions
     14 * based on this sensor. Placement of the sensor w.r.t the actual logic
     15 * generating heat has to be a factor as well. If you are just looking
     16 * for an approximation temperature (thermometerish kind), you might be
     17 * ok with this. I am not sure we'd find any TI data around this.. just a
     18 * heads up.
     19 */
     20
     21#include "ti-thermal.h"
     22#include "ti-bandgap.h"
     23
     24/*
     25 * OMAP34XX has one instance of thermal sensor for MPU
     26 * need to describe the individual bit fields
     27 */
     28static struct temp_sensor_registers
     29omap34xx_mpu_temp_sensor_registers = {
     30	.temp_sensor_ctrl = 0,
     31	.bgap_soc_mask = BIT(8),
     32	.bgap_eocz_mask = BIT(7),
     33	.bgap_dtemp_mask = 0x7f,
     34
     35	.bgap_mode_ctrl = 0,
     36	.mode_ctrl_mask = BIT(9),
     37};
     38
     39/* Thresholds and limits for OMAP34XX MPU temperature sensor */
     40static struct temp_sensor_data omap34xx_mpu_temp_sensor_data = {
     41	.min_freq = 32768,
     42	.max_freq = 32768,
     43};
     44
     45/*
     46 * Temperature values in milli degree celsius
     47 */
     48static const int
     49omap34xx_adc_to_temp[128] = {
     50	-40000, -40000, -40000, -40000, -40000, -39000, -38000, -36000,
     51	-34000, -32000, -31000,	-29000, -28000, -26000, -25000, -24000,
     52	-22000, -21000, -19000, -18000, -17000, -15000,	-14000, -12000,
     53	-11000, -9000, -8000, -7000, -5000, -4000, -2000, -1000, 0000,
     54	1000, 3000, 4000, 5000, 7000, 8000, 10000, 11000, 13000, 14000,
     55	15000, 17000, 18000, 20000, 21000, 22000, 24000, 25000, 27000,
     56	28000, 30000, 31000, 32000, 34000, 35000, 37000, 38000, 39000,
     57	41000, 42000, 44000, 45000, 47000, 48000, 49000, 51000, 52000,
     58	53000, 55000, 56000, 58000, 59000, 60000, 62000, 63000, 65000,
     59	66000, 67000, 69000, 70000, 72000, 73000, 74000, 76000, 77000,
     60	79000, 80000, 81000, 83000, 84000, 85000, 87000, 88000, 89000,
     61	91000, 92000, 94000, 95000, 96000, 98000, 99000, 100000,
     62	102000, 103000, 105000, 106000, 107000, 109000, 110000, 111000,
     63	113000, 114000, 116000, 117000, 118000, 120000, 121000, 122000,
     64	124000, 124000, 125000, 125000, 125000, 125000,	125000
     65};
     66
     67/* OMAP34XX data */
     68const struct ti_bandgap_data omap34xx_data = {
     69	.features = TI_BANDGAP_FEATURE_CLK_CTRL | TI_BANDGAP_FEATURE_UNRELIABLE,
     70	.fclock_name = "ts_fck",
     71	.div_ck_name = "ts_fck",
     72	.conv_table = omap34xx_adc_to_temp,
     73	.adc_start_val = 0,
     74	.adc_end_val = 127,
     75	.expose_sensor = ti_thermal_expose_sensor,
     76	.remove_sensor = ti_thermal_remove_sensor,
     77
     78	.sensors = {
     79		{
     80		.registers = &omap34xx_mpu_temp_sensor_registers,
     81		.ts_data = &omap34xx_mpu_temp_sensor_data,
     82		.domain = "cpu",
     83		.slope_pcb = 0,
     84		.constant_pcb = 20000,
     85		.register_cooling = NULL,
     86		.unregister_cooling = NULL,
     87		},
     88	},
     89	.sensor_count = 1,
     90};
     91
     92/*
     93 * OMAP36XX has one instance of thermal sensor for MPU
     94 * need to describe the individual bit fields
     95 */
     96static struct temp_sensor_registers
     97omap36xx_mpu_temp_sensor_registers = {
     98	.temp_sensor_ctrl = 0,
     99	.bgap_soc_mask = BIT(9),
    100	.bgap_eocz_mask = BIT(8),
    101	.bgap_dtemp_mask = 0xFF,
    102
    103	.bgap_mode_ctrl = 0,
    104	.mode_ctrl_mask = BIT(10),
    105};
    106
    107/* Thresholds and limits for OMAP36XX MPU temperature sensor */
    108static struct temp_sensor_data omap36xx_mpu_temp_sensor_data = {
    109	.min_freq = 32768,
    110	.max_freq = 32768,
    111};
    112
    113/*
    114 * Temperature values in milli degree celsius
    115 */
    116static const int
    117omap36xx_adc_to_temp[128] = {
    118	-40000, -40000, -40000, -40000, -40000, -40000, -40000, -40000,
    119	-40000, -40000, -40000,	-40000, -40000, -38000, -35000, -34000,
    120	-32000, -30000, -28000, -26000, -24000, -22000,	-20000, -18500,
    121	-17000, -15000, -13500, -12000, -10000, -8000, -6500, -5000, -3500,
    122	-1500, 0, 2000, 3500, 5000, 6500, 8500, 10000, 12000, 13500,
    123	15000, 17000, 19000, 21000, 23000, 25000, 27000, 28500, 30000,
    124	32000, 33500, 35000, 37000, 38500, 40000, 42000, 43500, 45000,
    125	47000, 48500, 50000, 52000, 53500, 55000, 57000, 58500, 60000,
    126	62000, 64000, 66000, 68000, 70000, 71500, 73500, 75000, 77000,
    127	78500, 80000, 82000, 83500, 85000, 87000, 88500, 90000, 92000,
    128	93500, 95000, 97000, 98500, 100000, 102000, 103500, 105000, 107000,
    129	109000, 111000, 113000, 115000, 117000, 118500, 120000, 122000,
    130	123500, 125000, 125000, 125000, 125000, 125000, 125000, 125000,
    131	125000, 125000, 125000, 125000, 125000, 125000, 125000, 125000,
    132	125000, 125000, 125000, 125000, 125000, 125000,	125000
    133};
    134
    135/* OMAP36XX data */
    136const struct ti_bandgap_data omap36xx_data = {
    137	.features = TI_BANDGAP_FEATURE_CLK_CTRL | TI_BANDGAP_FEATURE_UNRELIABLE,
    138	.fclock_name = "ts_fck",
    139	.div_ck_name = "ts_fck",
    140	.conv_table = omap36xx_adc_to_temp,
    141	.adc_start_val = 0,
    142	.adc_end_val = 127,
    143	.expose_sensor = ti_thermal_expose_sensor,
    144	.remove_sensor = ti_thermal_remove_sensor,
    145
    146	.sensors = {
    147		{
    148		.registers = &omap36xx_mpu_temp_sensor_registers,
    149		.ts_data = &omap36xx_mpu_temp_sensor_data,
    150		.domain = "cpu",
    151		.slope_pcb = 0,
    152		.constant_pcb = 20000,
    153		.register_cooling = NULL,
    154		.unregister_cooling = NULL,
    155		},
    156	},
    157	.sensor_count = 1,
    158};