blob: b76b5120ddfa7d9454dcf310e6ccd201cbf76565 [file]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* eem-dbg-v1.h - eem data structure
*
* Copyright (c) 2020 MediaTek Inc.
* chienwei Chang <chienwei.chang@mediatek.com>
*/
#define EEM_TAG "[CPU][EEM]"
static char *cpu_name[3] = {
"L",
"BIG",
"CCI"
};
#define MAX_NR_FREQ 32
#define NR_PI_VF 6
#define MIN_SIZE_SN_DUMP_CPE (7)
#define NUM_SN_CPU (8)
#define SIZE_SN_MCUSYS_REG (10)
#define SIZE_SN_DUMP_SENSOR (64)
#define IDX_HW_RES_SN (18) /* start index of Sensor Network efuse */
#define LOW_TEMP_OFF (8)
#define HIGH_TEMP_OFF (3)
#define EEMSN_V_BASE (60000)
#define EEMSN_STEP (625)
/* CPU */
#define CPU_PMIC_BASE (60000)
#define CPU_PMIC_BASE_B (0)
#define CPU_PMIC_STEP (625) /* 1.231/1024=0.001202v=120(10uv)*/
#define VMIN_PREDICT_ENABLE (0)
#define UPDATE_TO_UPOWER (0)
#define SN_ENABLE (0)
#define ENABLE_SRAM_IPI (1)
#define ENABLE_COUNT_SNTEMP (0)
#define SET_PMIC_VOLT_TO_DVFS (0)
extern void __iomem *eem_csram_base;
extern void __iomem *sn_base;
#define EEMSN_CSRAM_BASE 0x0011BC00 /* EB View:0x0011BC00 */
#define EEMSN_CSRAM_SIZE 0x1000
#define SN_BASEADDR 0x0C560000
#define SN_BASESIZE 0x1000
#define EEM_LOG_BASE 0x0010E000
#define EEM_LOG_SIZE 0x400
#define EEM_TEMPSPARE0 (eem_base + 0x8F0)
#define OFFS_SN_VOLT_S_4B (0x0011BC00 + 0x0250) /* 148 */
#define OFFS_SN_VOLT_E_4B (0x0011BC00 + 0x029C) /* 167 */
#define SN_CPEMONCTL (SN_BASEADDR + 0xB00)
#define SN_CPEEN (SN_BASEADDR + 0xB04)
#define SN_COMPAREDVOP (SN_BASEADDR + 0xB08)
#define SN_CPEVMIN1T0 (SN_BASEADDR + 0xB0C)
#define SN_CPEVMIN3T2 (SN_BASEADDR + 0xB10)
#define SN_CPEVMIN5T4 (SN_BASEADDR + 0xB14)
#define SN_CPEVMIN7T6 (SN_BASEADDR + 0xB18)
#define SN_CPEIRQSTS (SN_BASEADDR + 0xB1C)
#define SN_BCPUVMAXVMINOPP0 (SN_BASEADDR + 0xB20)
#define SN_LCPUVMAXVMINOPP0 (SN_BASEADDR + 0xB24)
#define SN_CPEINTSTS (SN_BASEADDR + 0xB2C)
#define SN_CPEINTEN (SN_BASEADDR + 0xB30)
#define SN_CPEINTSTSRAW (SN_BASEADDR + 0xB34)
#define SN_CPECALSTS (SN_BASEADDR + 0xB38)
#define SN_CPECALFSMSTSCORE01 (SN_BASEADDR + 0xB3C)
#define SN_CPECALFSMSTSCORE23 (SN_BASEADDR + 0xB40)
#define SN_CPECALFSMSTSCORE45 (SN_BASEADDR + 0xB44)
#define SN_CPECALFSMSTSCORE67 (SN_BASEADDR + 0xB48)
#define SN_C0ASENSORDATA (SN_BASEADDR + 0xC00)
#define SN_C0TSENSORDATA (SN_BASEADDR + 0xC04)
#define SN_C0VSENSORMINDATA0 (SN_BASEADDR + 0xC08)
#define SN_C0VSENSORMINDATA1 (SN_BASEADDR + 0xC0C)
#define SN_C0VSENSORMAXDATA0 (SN_BASEADDR + 0xC10)
#define SN_C0VSENSORMAXDATA1 (SN_BASEADDR + 0xC14)
#define SN_C0PSESNORDATA0 (SN_BASEADDR + 0xC18)
#define SN_C0PSESNORDATA1 (SN_BASEADDR + 0xC1C)
#define SN_C1ASENSORDATA (SN_BASEADDR + 0xC20)
#define SN_C1TSENSORDATA (SN_BASEADDR + 0xC24)
#define SN_C1VSENSORMINDATA0 (SN_BASEADDR + 0xC28)
#define SN_C1VSENSORMINDATA1 (SN_BASEADDR + 0xC2C)
#define SN_C1VSENSORMAXDATA0 (SN_BASEADDR + 0xC30)
#define SN_C1VSENSORMAXDATA1 (SN_BASEADDR + 0xC34)
#define SN_C1PSESNORDATA0 (SN_BASEADDR + 0xC38)
#define SN_C1PSESNORDATA1 (SN_BASEADDR + 0xC3C)
#define SN_C2ASENSORDATA (SN_BASEADDR + 0xC40)
#define SN_C2TSENSORDATA (SN_BASEADDR + 0xC44)
#define SN_C2VSENSORMINDATA0 (SN_BASEADDR + 0xC48)
#define SN_C2VSENSORMINDATA1 (SN_BASEADDR + 0xC4C)
#define SN_C2VSENSORMAXDATA0 (SN_BASEADDR + 0xC50)
#define SN_C2VSENSORMAXDATA1 (SN_BASEADDR + 0xC54)
#define SN_C2PSESNORDATA0 (SN_BASEADDR + 0xC58)
#define SN_C2PSESNORDATA1 (SN_BASEADDR + 0xC5C)
#define SN_C3ASENSORDATA (SN_BASEADDR + 0xC60)
#define SN_C3TSENSORDATA (SN_BASEADDR + 0xC64)
#define SN_C3VSENSORMINDATA0 (SN_BASEADDR + 0xC68)
#define SN_C3VSENSORMINDATA1 (SN_BASEADDR + 0xC6C)
#define SN_C3VSENSORMAXDATA0 (SN_BASEADDR + 0xC70)
#define SN_C3VSENSORMAXDATA1 (SN_BASEADDR + 0xC74)
#define SN_C3PSESNORDATA0 (SN_BASEADDR + 0xC78)
#define SN_C3PSESNORDATA1 (SN_BASEADDR + 0xC7C)
#define SN_C4ASENSORDATA (SN_BASEADDR + 0xC80)
#define SN_C4TSENSORDATA (SN_BASEADDR + 0xC84)
#define SN_C4VSENSORMINDATA0 (SN_BASEADDR + 0xC88)
#define SN_C4VSENSORMINDATA1 (SN_BASEADDR + 0xC8C)
#define SN_C4VSENSORMAXDATA0 (SN_BASEADDR + 0xC90)
#define SN_C4VSENSORMAXDATA1 (SN_BASEADDR + 0xC94)
#define SN_C4PSESNORDATA0 (SN_BASEADDR + 0xC98)
#define SN_C4PSESNORDATA1 (SN_BASEADDR + 0xC9C)
#define SN_C5ASENSORDATA (SN_BASEADDR + 0xCA0)
#define SN_C5TSENSORDATA (SN_BASEADDR + 0xCA4)
#define SN_C5VSENSORMINDATA0 (SN_BASEADDR + 0xCA8)
#define SN_C5VSENSORMINDATA1 (SN_BASEADDR + 0xCAC)
#define SN_C5VSENSORMAXDATA0 (SN_BASEADDR + 0xCB0)
#define SN_C5VSENSORMAXDATA1 (SN_BASEADDR + 0xCB4)
#define SN_C5PSESNORDATA0 (SN_BASEADDR + 0xCB8)
#define SN_C5PSESNORDATA1 (SN_BASEADDR + 0xCBC)
#define SN_C6ASENSORDATA (SN_BASEADDR + 0xCC0)
#define SN_C6TSENSORDATA (SN_BASEADDR + 0xCC4)
#define SN_C6VSENSORMINDATA0 (SN_BASEADDR + 0xCC8)
#define SN_C6VSENSORMINDATA1 (SN_BASEADDR + 0xCCC)
#define SN_C6VSENSORMAXDATA0 (SN_BASEADDR + 0xCD0)
#define SN_C6VSENSORMAXDATA1 (SN_BASEADDR + 0xCD4)
#define SN_C6PSESNORDATA0 (SN_BASEADDR + 0xCD8)
#define SN_C6PSESNORDATA1 (SN_BASEADDR + 0xCDC)
#define SN_C7ASENSORDATA (SN_BASEADDR + 0xCE0)
#define SN_C7TSENSORDATA (SN_BASEADDR + 0xCE4)
#define SN_C7VSENSORMINDATA0 (SN_BASEADDR + 0xCE8)
#define SN_C7VSENSORMINDATA1 (SN_BASEADDR + 0xCEC)
#define SN_C7VSENSORMAXDATA0 (SN_BASEADDR + 0xCF0)
#define SN_C7VSENSORMAXDATA1 (SN_BASEADDR + 0xCF4)
#define SN_C7PSESNORDATA0 (SN_BASEADDR + 0xCF8)
#define SN_C7PSESNORDATA1 (SN_BASEADDR + 0xCFC)
#define SN_LCPUAGINGCOEF0 (SN_BASEADDR + 0xD00)
#define SN_LCPUAGINGCOEF1 (SN_BASEADDR + 0xD04)
#define SN_LCPUAGINGCOEF2 (SN_BASEADDR + 0xD08)
#define SN_LCPUTEMPCOEF0 (SN_BASEADDR + 0xD0C)
#define SN_LCPUTEMPCOEF1 (SN_BASEADDR + 0xD10)
#define SN_LCPUTEMPCOEF2 (SN_BASEADDR + 0xD14)
#define SN_LCPUVOLTCOEF0 (SN_BASEADDR + 0xD18)
#define SN_LCPUVOLTCOEF1 (SN_BASEADDR + 0xD1C)
#define SN_LCPUVOLTCOEF2 (SN_BASEADDR + 0xD20)
#define SN_LCPUVOLTCOEF3 (SN_BASEADDR + 0xD24)
#define SN_LCPUVOLTCOEF4 (SN_BASEADDR + 0xD28)
#define SN_LCPUVOLTCOEF5 (SN_BASEADDR + 0xD2C)
#define SN_LCPUVOLTCOEF6 (SN_BASEADDR + 0xD30)
#define SN_LCPUVOLTCOEF7 (SN_BASEADDR + 0xD34)
#define SN_LCPUPROCESSCOEF0 (SN_BASEADDR + 0xD38)
#define SN_LCPUPROCESSCOEF1 (SN_BASEADDR + 0xD3C)
#define SN_LCPUPROCESSCOEF2 (SN_BASEADDR + 0xD40)
#define SN_LCPUPROCESSCOEF3 (SN_BASEADDR + 0xD44)
#define SN_LCPUPROCESSCOEF4 (SN_BASEADDR + 0xD48)
#define SN_LCPUPROCESSCOEF5 (SN_BASEADDR + 0xD4C)
#define SN_LCPUPROCESSCOEF6 (SN_BASEADDR + 0xD50)
#define SN_LCPUPROCESSCOEF7 (SN_BASEADDR + 0xD54)
#define SN_LCPUPROCESSCOEF8 (SN_BASEADDR + 0xD58)
#define SN_LCPUPROCESSCOEF9 (SN_BASEADDR + 0xD5C)
#define SN_LCPUPROCESSCOEF10 (SN_BASEADDR + 0xD60)
#define SN_LCPUPROCESSCOEF11 (SN_BASEADDR + 0xD64)
#define SN_LCPUPROCESSCOEF12 (SN_BASEADDR + 0xD68)
#define SN_LCPUPROCESSCOEF13 (SN_BASEADDR + 0xD6C)
#define SN_LCPUPROCESSCOEF14 (SN_BASEADDR + 0xD70)
#define SN_LCPUPROCESSCOEF15 (SN_BASEADDR + 0xD74)
#define SN_LCPUPROCESSCOEF16 (SN_BASEADDR + 0xD78)
#define SN_LCPUPROCESSCOEF17 (SN_BASEADDR + 0xD7C)
#define SN_LCPUPROCESSCOEF18 (SN_BASEADDR + 0xD80)
#define SN_LCPUPROCESSCOEF19 (SN_BASEADDR + 0xD84)
#define SN_LCPUPROCESSCOEF20 (SN_BASEADDR + 0xD88)
#define SN_LCPUPROCESSCOEF21 (SN_BASEADDR + 0xD8C)
#define SN_LCPUPROCESSCOEF22 (SN_BASEADDR + 0xD90)
#define SN_LCPUPROCESSCOEF23 (SN_BASEADDR + 0xD94)
#define SN_LCPUPROCESSCOEF24 (SN_BASEADDR + 0xD98)
#define SN_LCPUPROCESSCOEF25 (SN_BASEADDR + 0xD9C)
#define SN_LCPUPROCESSCOEF26 (SN_BASEADDR + 0xDA0)
#define SN_LCPUPROCESSCOEF27 (SN_BASEADDR + 0xDA4)
#define SN_LCPUPROCESSCOEF28 (SN_BASEADDR + 0xDA8)
#define SN_LCPUPROCESSCOEF29 (SN_BASEADDR + 0xDAC)
#define SN_LCPUPROCESSCOEF30 (SN_BASEADDR + 0xDB0)
#define SN_LCPUPROCESSCOEF31 (SN_BASEADDR + 0xDB4)
#define SN_LCPUPROCESSCOEF32 (SN_BASEADDR + 0xDB8)
#define SN_LCPUPROCESSCOEF33 (SN_BASEADDR + 0xDBC)
#define SN_LCPUPROCESSCOEF34 (SN_BASEADDR + 0xDC0)
#define SN_LCPUPROCESSCOEF35 (SN_BASEADDR + 0xDC4)
#define SN_LCPUPROCESSCOEF36 (SN_BASEADDR + 0xDC8)
#define SN_LCPUINTERCEPTION0 (SN_BASEADDR + 0xDCC)
#define SN_LCPUINTERCEPTION1 (SN_BASEADDR + 0xDD0)
/* SN_LCPUINTERCEPTION1 = LCPUINTERCEPTION1WLCPUVOLTCOEF */
#define SN_BCPUAGINGCOEF0 (SN_BASEADDR + 0xE00)
#define SN_BCPUAGINGCOEF1 (SN_BASEADDR + 0xE04)
#define SN_BCPUAGINGCOEF2 (SN_BASEADDR + 0xE08)
#define SN_BCPUTEMPCOEF0 (SN_BASEADDR + 0xE0C)
#define SN_BCPUTEMPCOEF1 (SN_BASEADDR + 0xE10)
#define SN_BCPUTEMPCOEF2 (SN_BASEADDR + 0xE14)
#define SN_BCPUVOLTCOEF0 (SN_BASEADDR + 0xE18)
#define SN_BCPUVOLTCOEF1 (SN_BASEADDR + 0xE1C)
#define SN_BCPUVOLTCOEF2 (SN_BASEADDR + 0xE20)
#define SN_BCPUVOLTCOEF3 (SN_BASEADDR + 0xE24)
#define SN_BCPUVOLTCOEF4 (SN_BASEADDR + 0xE28)
#define SN_BCPUVOLTCOEF5 (SN_BASEADDR + 0xE2C)
#define SN_BCPUVOLTCOEF6 (SN_BASEADDR + 0xE30)
#define SN_BCPUVOLTCOEF7 (SN_BASEADDR + 0xE34)
#define SN_BCPUPROCESSCOEF0 (SN_BASEADDR + 0xE38)
#define SN_BCPUPROCESSCOEF1 (SN_BASEADDR + 0xE3C)
#define SN_BCPUPROCESSCOEF2 (SN_BASEADDR + 0xE40)
#define SN_BCPUPROCESSCOEF3 (SN_BASEADDR + 0xE44)
#define SN_BCPUPROCESSCOEF4 (SN_BASEADDR + 0xE48)
#define SN_BCPUPROCESSCOEF5 (SN_BASEADDR + 0xE4C)
#define SN_BCPUPROCESSCOEF6 (SN_BASEADDR + 0xE50)
#define SN_BCPUPROCESSCOEF7 (SN_BASEADDR + 0xE54)
#define SN_BCPUPROCESSCOEF8 (SN_BASEADDR + 0xE58)
#define SN_BCPUPROCESSCOEF9 (SN_BASEADDR + 0xE5C)
#define SN_BCPUPROCESSCOEF10 (SN_BASEADDR + 0xE60)
#define SN_BCPUPROCESSCOEF11 (SN_BASEADDR + 0xE64)
#define SN_BCPUPROCESSCOEF12 (SN_BASEADDR + 0xE68)
#define SN_BCPUPROCESSCOEF13 (SN_BASEADDR + 0xE6C)
#define SN_BCPUPROCESSCOEF14 (SN_BASEADDR + 0xE70)
#define SN_BCPUPROCESSCOEF15 (SN_BASEADDR + 0xE74)
#define SN_BCPUPROCESSCOEF16 (SN_BASEADDR + 0xE78)
#define SN_BCPUPROCESSCOEF17 (SN_BASEADDR + 0xE7C)
#define SN_BCPUPROCESSCOEF18 (SN_BASEADDR + 0xE80)
#define SN_BCPUPROCESSCOEF19 (SN_BASEADDR + 0xE84)
#define SN_BCPUPROCESSCOEF20 (SN_BASEADDR + 0xE88)
#define SN_BCPUPROCESSCOEF21 (SN_BASEADDR + 0xE8C)
#define SN_BCPUPROCESSCOEF22 (SN_BASEADDR + 0xE90)
#define SN_BCPUPROCESSCOEF23 (SN_BASEADDR + 0xE94)
#define SN_BCPUPROCESSCOEF24 (SN_BASEADDR + 0xE98)
#define SN_BCPUPROCESSCOEF25 (SN_BASEADDR + 0xE9C)
#define SN_BCPUPROCESSCOEF26 (SN_BASEADDR + 0xEA0)
#define SN_BCPUPROCESSCOEF27 (SN_BASEADDR + 0xEA4)
#define SN_BCPUPROCESSCOEF28 (SN_BASEADDR + 0xEA8)
#define SN_BCPUPROCESSCOEF29 (SN_BASEADDR + 0xEAC)
#define SN_BCPUPROCESSCOEF30 (SN_BASEADDR + 0xEB0)
#define SN_BCPUPROCESSCOEF31 (SN_BASEADDR + 0xEB4)
#define SN_BCPUPROCESSCOEF32 (SN_BASEADDR + 0xEB8)
#define SN_BCPUPROCESSCOEF33 (SN_BASEADDR + 0xEBC)
#define SN_BCPUPROCESSCOEF34 (SN_BASEADDR + 0xEC0)
#define SN_BCPUPROCESSCOEF35 (SN_BASEADDR + 0xEC4)
#define SN_BCPUPROCESSCOEF36 (SN_BASEADDR + 0xEC8)
#define SN_BCPUINTERCEPTION0 (SN_BASEADDR + 0xECC)
#define SN_BCPUINTERCEPTION1 (SN_BASEADDR + 0xED0)
#define MCUSYS_CPU0_BASEADDR 0x0C530000
#define MCUSYS_CPU1_BASEADDR 0x0C530800
#define MCUSYS_CPU2_BASEADDR 0x0C531000
#define MCUSYS_CPU3_BASEADDR 0x0C531800
#define MCUSYS_CPU4_BASEADDR 0x0C532000
#define MCUSYS_CPU5_BASEADDR 0x0C532800
#define MCUSYS_CPU6_BASEADDR 0x0C533000
#define MCUSYS_CPU7_BASEADDR 0x0C533800
#define L_FREQ_BASE 2000000
#define B_FREQ_BASE 2600000
#define CCI_FREQ_BASE 1470000
#define B_M_FREQ_BASE 1800000
struct eemsn_devinfo {
/* M_HW_RES0 0x11c1_0580 */
unsigned int FT_PGM:8;
unsigned int FT_BIN:4;
unsigned int RSV0_1:20;
/* M_HW_RES1 */
unsigned int CPU_B_MTDES:8;
unsigned int CPU_B_INITEN:1;
unsigned int CPU_B_MONEN:1;
unsigned int CPU_B_DVFS_LOW:3;
unsigned int CPU_B_SPEC:3;
unsigned int CPU_B_BDES:8;
unsigned int CPU_B_MDES:8;
/* M_HW_RES2 */
unsigned int CPU_B_HI_MTDES:8;
unsigned int CPU_B_HI_INITEN:1;
unsigned int CPU_B_HI_MONEN:1;
unsigned int CPU_B_HI_DVFS_LOW:3;
unsigned int CPU_B_HI_SPEC:3;
unsigned int CPU_B_HI_BDES:8;
unsigned int CPU_B_HI_MDES:8;
/* M_HW_RES3 */
unsigned int CPU_B_LO_MTDES:8;
unsigned int CPU_B_LO_INITEN:1;
unsigned int CPU_B_LO_MONEN:1;
unsigned int CPU_B_LO_DVFS_LOW:3;
unsigned int CPU_B_LO_SPEC:3;
unsigned int CPU_B_LO_BDES:8;
unsigned int CPU_B_LO_MDES:8;
/* M_HW_RES4 */
unsigned int CPU_L_MTDES:8;
unsigned int CPU_L_INITEN:1;
unsigned int CPU_L_MONEN:1;
unsigned int CPU_L_DVFS_LOW:3;
unsigned int CPU_L_SPEC:3;
unsigned int CPU_L_BDES:8;
unsigned int CPU_L_MDES:8;
/* M_HW_RES5 */
unsigned int CPU_L_HI_MTDES:8;
unsigned int CPU_L_HI_INITEN:1;
unsigned int CPU_L_HI__MONEN:1;
unsigned int CPU_L_HI_DVFS_LOW:3;
unsigned int CPU_L_HI_SPEC:3;
unsigned int CPU_L_HI_BDES:8;
unsigned int CPU_L_HI_MDES:8;
/* M_HW_RES6 */
unsigned int CPU_L_LO_MTDES:8;
unsigned int CPU_L_LO_INITEN:1;
unsigned int CPU_L_LO_MONEN:1;
unsigned int CPU_L_LO_DVFS_LOW:3;
unsigned int CPU_L_LO_SPEC:3;
unsigned int CPU_L_LO_BDES:8;
unsigned int CPU_L_LO_MDES:8;
/* M_HW_RES7 */
unsigned int CCI_MTDES:8;
unsigned int CCI_INITEN:1;
unsigned int CCI_MONEN:1;
unsigned int CCI_DVFS_LOW:3;
unsigned int CCI_SPEC:3;
unsigned int CCI_BDES:8;
unsigned int CCI_MDES:8;
/* M_HW_RES8 */
unsigned int GPU_MTDES:8;
unsigned int GPU_INITEN:1;
unsigned int GPU_MONEN:1;
unsigned int GPU_DVFS_LOW:3;
unsigned int GPU_SPEC:3;
unsigned int GPU_BDES:8;
unsigned int GPU_MDES:8;
/* M_HW_RES9 */
unsigned int GPU_HI_MTDES:8;
unsigned int GPU_HI_INITEN:1;
unsigned int GPU_HI_MONEN:1;
unsigned int GPU_HI_DVFS_LOW:3;
unsigned int GPU_HI_SPEC:3;
unsigned int GPU_HI_BDES:8;
unsigned int GPU_HI_MDES:8;
/* M_HW_RES10 */
unsigned int GPU_LO_MTDES:8;
unsigned int GPU_LO_INITEN:1;
unsigned int GPU_LO_MONEN:1;
unsigned int GPU_LO_DVFS_LOW:3;
unsigned int GPU_LO_SPEC:3;
unsigned int GPU_LO_BDES:8;
unsigned int GPU_LO_MDES:8;
/* M_HW_RES11 */
unsigned int MD_VMODEM:32;
/* M_HW_RES12 */
unsigned int MD_VNR:32;
/* M_HW_RES13 */
unsigned int CPU_B_HI_DCBDET:8;
unsigned int CPU_B_HI_DCMDET:8;
unsigned int CPU_B_DCBDET:8;
unsigned int CPU_B_DCMDET:8;
/* M_HW_RES14 */
unsigned int CPU_L_DCBDET:8;
unsigned int CPU_L_DCMDET:8;
unsigned int CPU_B_LO_DCBDET:8;
unsigned int CPU_B_LO_DCMDET:8;
/* M_HW_RES15 */
unsigned int CPU_L_LO_DCBDET:8;
unsigned int CPU_L_LO_DCMDET:8;
unsigned int CPU_L_HI_DCBDET:8;
unsigned int CPU_L_HI_DCMDET:8;
/* M_HW_RES16 */
unsigned int GPU_DCBDET:8;
unsigned int GPU_DCMDET:8;
unsigned int CCI_DCBDET:8;
unsigned int CCI_DCMDET:8;
/* M_HW_RES17 */
unsigned int GPU_LO_DCBDET:8;
unsigned int GPU_LO_DCMDET:8;
unsigned int GPU_HI_DCBDET:8;
unsigned int GPU_HI_DCMDET:8;
/* M_HW_RES21 */
unsigned int BCPU_A_T0_SVT:8;
unsigned int BCPU_A_T0_LVT:8;
unsigned int BCPU_A_T0_ULVT:8;
unsigned int LCPU_A_T0_SVT:8;
/* M_HW_RES22 */
unsigned int LCPU_A_T0_LVT:8;
unsigned int LCPU_A_T0_ULVT:8;
unsigned int DELTA_VC_BCPU:4;
unsigned int DELTA_VC_LCPU:4;
unsigned int DELTA_VC_RT_BCPU:4;
unsigned int DELTA_VC_RT_LCPU:4;
/* M_HW_RES23 */
unsigned int DELTA_VDPPM_BCPU:5;
unsigned int DELTA_VDPPM_LCPU:5;
unsigned int ATE_TEMP:3;
unsigned int SN_PATTERN:3;
unsigned int A_T0_SVT_BCPU_0P95V:8;
unsigned int A_T0_SVT_LCPU_0P95V:8;
/* M_HW_RES24 */
unsigned int T_SVT_HV_BCPU:8;
unsigned int T_SVT_LV_BCPU:8;
unsigned int T_SVT_HV_LCPU:8;
unsigned int T_SVT_LV_LCPU:8;
/* M_HW_RES25 */
unsigned int T_SVT_HV_BCPU_RT:8;
unsigned int T_SVT_LV_BCPU_RT:8;
unsigned int T_SVT_HV_LCPU_RT:8;
unsigned int T_SVT_LV_LCPU_RT:8;
/* id23:M_HW_RES */
unsigned int rsv23;
};
enum sn_det_id {
SN_DET_L = 0,
#ifdef TRI_CLUSTER_SUPPORT
SN_DET_BL,
#endif
#ifdef SUPPORT_BANK_BCPU
SN_DET_B,
#endif
NR_SN_DET,
};
enum eemsn_det_id {
EEMSN_DET_L,
#ifdef TRI_CLUSTER_SUPPORT
EEMSN_DET_BL,
#endif
#ifdef SUPPORT_BANK_BCPU
EEMSN_DET_B,
#endif
EEMSN_DET_CCI,
NR_EEMSN_DET,
};
enum mt_cpu_dvfs_id {
MT_CPU_DVFS_LL,
MT_CPU_DVFS_L,
#ifdef CFG_3_GEAR
MT_CPU_DVFS_B,
#endif
MT_CPU_DVFS_CCI,
NR_MT_CPU_DVFS,
};
enum eem_phase {
EEM_PHASE_INIT01,
EEM_PHASE_INIT02,
EEM_PHASE_MON,
EEM_PHASE_SEN,
NR_EEM_PHASE,
};
enum eem_features {
FEA_INIT01 = BIT(EEM_PHASE_INIT01),
FEA_INIT02 = BIT(EEM_PHASE_INIT02),
FEA_MON = BIT(EEM_PHASE_MON),
FEA_SEN = BIT(EEM_PHASE_SEN),
};
enum {
IPI_EEMSN_SHARERAM_INIT,
IPI_EEMSN_INIT,
IPI_EEMSN_PROBE,
IPI_EEMSN_INIT01,
IPI_EEMSN_GET_EEM_VOLT,
IPI_EEMSN_INIT02,
IPI_EEMSN_DEBUG_PROC_WRITE,
IPI_EEMSN_SEND_UPOWER_TBL_REF,
IPI_EEMSN_CUR_VOLT_PROC_SHOW,
IPI_EEMSN_DUMP_PROC_SHOW,
IPI_EEMSN_AGING_DUMP_PROC_SHOW,
IPI_EEMSN_OFFSET_PROC_WRITE,
IPI_EEMSN_SETCLAMP_PROC_WRITE,
IPI_EEMSN_SNAGING_PROC_WRITE,
IPI_EEMSN_LOGEN_PROC_SHOW,
IPI_EEMSN_LOGEN_PROC_WRITE,
IPI_EEMSN_EN_PROC_SHOW,
IPI_EEMSN_EN_PROC_WRITE,
IPI_EEMSN_SNEN_PROC_SHOW,
IPI_EEMSN_SNEN_PROC_WRITE,
// IPI_EEMSN_VCORE_GET_VOLT,
// IPI_EEMSN_GPU_DVFS_GET_STATUS,
IPI_EEMSN_FAKE_SN_INIT_ISR,
IPI_EEMSN_FORCE_SN_SENSING,
IPI_EEMSN_PULL_DATA,
IPI_EEMSN_FAKE_SN_SENSING_ISR,
NR_EEMSN_IPI,
};
struct A_Tused_VT {
unsigned int A_Tused_SVT:8;
unsigned int A_Tused_LVT:8;
unsigned int A_Tused_ULVT:8;
unsigned int A_Tused_RSV0:8;
};
struct dvfs_vf_tbl {
unsigned short pi_freq_tbl[NR_PI_VF];
unsigned char pi_volt_tbl[NR_PI_VF];
unsigned char pi_vf_num;
};
struct sensing_stru {
#if VMIN_PREDICT_ENABLE
uint64_t CPE_Vmin_HW;
#endif
unsigned int SN_Vmin;
int CPE_Vmin;
unsigned int cur_volt;
#if !VMIN_PREDICT_ENABLE
/* unsigned int count_cur_volt_HT; */
int Sensor_Volt_HT;
int Sensor_Volt_RT;
int8_t CPE_temp;
int8_t SN_temp;
unsigned char T_SVT_current;
#endif
unsigned short cur_temp;
unsigned char cur_oppidx;
unsigned char dst_volt_pmic;
};
struct sn_log_data {
unsigned long long timestamp;
unsigned int reg_dump_cpe[MIN_SIZE_SN_DUMP_CPE];
unsigned int reg_dump_sndata[SIZE_SN_DUMP_SENSOR];
unsigned int reg_dump_sn_cpu[NUM_SN_CPU][SIZE_SN_MCUSYS_REG];
struct sensing_stru sd[NR_SN_DET];
unsigned int footprint[NR_SN_DET];
unsigned int allfp;
#if VMIN_PREDICT_ENABLE
unsigned int sn_cpe_vop;
#endif
};
struct sn_log_cal_data {
/* struct sn_param sn_cpu_param; */
int64_t cpe_init_aging;
struct A_Tused_VT atvt;
int TEMP_CAL;
int volt_cross;
short CPE_Aging;
int8_t sn_aging;
int8_t delta_vc;
uint8_t T_SVT_HV_RT;
uint8_t T_SVT_LV_RT;
};
struct sn_param {
/* for SN aging*/
int Param_A_Tused_SVT;
int Param_A_Tused_LVT;
int Param_A_Tused_ULVT;
int Param_A_T0_SVT;
int Param_A_T0_LVT;
int Param_A_T0_ULVT;
int Param_ATE_temp;
int Param_temp;
int Param_INTERCEPTION;
int8_t A_GB;
int8_t sn_temp_threshold;
int8_t Default_Aging;
int8_t threshold_H;
int8_t threshold_L;
unsigned char T_GB;
/* Formula for CPE_Vmin (Vmin prediction) */
unsigned char CPE_GB;
unsigned char MSSV_GB;
};
struct eemsn_det;
struct eemsn_det_ops {
int (*get_volt)(struct eemsn_det *det);
int (*get_temp)(struct eemsn_det *det);
void (*get_freq_table)(struct eemsn_det *det);
void (*get_orig_volt_table)(struct eemsn_det *det);
/* interface to PMIC */
int (*volt_2_pmic)(struct eemsn_det *det, int volt);
int (*volt_2_eem)(struct eemsn_det *det, int volt);
int (*pmic_2_volt)(struct eemsn_det *det, int pmic_val);
int (*eem_2_pmic)(struct eemsn_det *det, int eev_val);
};
struct eemsn_det {
int64_t cpe_init_aging;
int temp; /* det temperature */
/* dvfs */
unsigned int max_freq_khz;
unsigned int mid_freq_khz;
unsigned int turn_freq;
unsigned int cur_volt;
unsigned int *p_sn_cpu_coef;
struct sn_param *p_sn_cpu_param;
struct eemsn_det_ops *ops;
enum eemsn_det_id det_id;
unsigned int volt_tbl_pmic[MAX_NR_FREQ]; /* pmic value */
/* for PMIC */
unsigned short eemsn_v_base;
unsigned short eemsn_step;
unsigned short pmic_base;
unsigned short pmic_step;
short cpe_volt_total_mar;
/* dvfs */
unsigned short freq_tbl[MAX_NR_FREQ];
//unsigned char volt_tbl[NR_FREQ]; /* eem value */
unsigned char volt_tbl_init2[MAX_NR_FREQ]; /* eem value */
unsigned char volt_tbl_orig[MAX_NR_FREQ]; /* pmic value */
unsigned char dst_volt_pmic;
unsigned char volt_tbl0_min; /* pmic value */
unsigned char features; /* enum eemsn_features */
unsigned char cur_phase;
unsigned char cur_oppidx;
const char *name;
unsigned char disabled; /* Disabled by error or sysfs */
unsigned char num_freq_tbl;
unsigned char turn_pt;
unsigned char vmin_high;
unsigned char vmin_mid;
int8_t delta_vc;
int8_t sn_aging;
int8_t volt_offset;
int8_t volt_clamp;
/* int volt_offset:8; */
unsigned int delta_ir:4;
unsigned int delta_vdppm:5;
#if UPDATE_TO_UPOWER
/* only when init2, eemsn need to set volt to upower */
unsigned int set_volt_to_upower:1;
#endif
};
struct eemsn_log_det {
unsigned char mc50flag;
unsigned char features;
int8_t volt_clamp;
int8_t volt_offset;
};
struct eemsn_vlog_det {
unsigned int temp;
unsigned short freq_tbl[MAX_NR_FREQ];
unsigned short volt_tbl_pmic[MAX_NR_FREQ];
unsigned char volt_tbl_orig[MAX_NR_FREQ];
unsigned char volt_tbl_init2[MAX_NR_FREQ];
/* unsigned char volt_tbl[NR_FREQ]; */
unsigned char num_freq_tbl;
unsigned char lock;
unsigned char turn_pt;
enum eemsn_det_id det_id;
};
struct eem_ipi_data {
unsigned int cmd;
union {
struct {
unsigned int arg[3];
} data;
} u;
};
struct eemsn_dbg_log {
struct dvfs_vf_tbl vf_tbl_det[NR_EEMSN_DET];
unsigned char eemsn_disable;
unsigned char sn_disable;
unsigned char ctrl_aging_Enable;
struct eemsn_log_det det_log[NR_EEMSN_DET];
struct eemsn_vlog_det det_vlog[NR_EEMSN_DET];
#if SN_ENABLE
struct sn_log_data sn_log;
struct sn_log_cal_data sn_cal_data[NR_SN_DET];
struct sn_param sn_cpu_param[NR_SN_DET];
#endif
struct eemsn_devinfo efuse_devinfo;
unsigned int efuse_sv;
unsigned int efuse_sv2;
unsigned int picachu_sn_mem_base_phys;
unsigned char init2_v_ready;
unsigned char init_vboot_done;
unsigned char segCode;
unsigned char lock;
#if ENABLE_SRAM_IPI
struct eem_ipi_data ipi_data;
#endif
#if ENABLE_COUNT_SNTEMP
unsigned int sn_temp_cnt[NR_SN_DET][5];
#endif
};
#define det_to_id(det) ((det) - &eemsn_detectors[0])
extern struct eemsn_det eemsn_detectors[NR_EEMSN_DET];
unsigned int detid_to_dvfsid(struct eemsn_det *det);
int mtk_eem_init(void);