1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2f262f28cSChanwoo Choi /* 3*91d7f3f8SKrzysztof Kozlowski * exynos_ppmu.h - Exynos PPMU header file 4f262f28cSChanwoo Choi * 5f262f28cSChanwoo Choi * Copyright (c) 2015 Samsung Electronics Co., Ltd. 6f262f28cSChanwoo Choi * Author : Chanwoo Choi <cw00.choi@samsung.com> 7f262f28cSChanwoo Choi */ 8f262f28cSChanwoo Choi 9f262f28cSChanwoo Choi #ifndef __EXYNOS_PPMU_H__ 10f262f28cSChanwoo Choi #define __EXYNOS_PPMU_H__ 11f262f28cSChanwoo Choi 12f262f28cSChanwoo Choi enum ppmu_state { 13f262f28cSChanwoo Choi PPMU_DISABLE = 0, 14f262f28cSChanwoo Choi PPMU_ENABLE, 15f262f28cSChanwoo Choi }; 16f262f28cSChanwoo Choi 17f262f28cSChanwoo Choi enum ppmu_counter { 18f262f28cSChanwoo Choi PPMU_PMNCNT0 = 0, 19f262f28cSChanwoo Choi PPMU_PMNCNT1, 20f262f28cSChanwoo Choi PPMU_PMNCNT2, 21f262f28cSChanwoo Choi PPMU_PMNCNT3, 22f262f28cSChanwoo Choi 23f262f28cSChanwoo Choi PPMU_PMNCNT_MAX, 24f262f28cSChanwoo Choi }; 25f262f28cSChanwoo Choi 263d87b022SChanwoo Choi /*** 273d87b022SChanwoo Choi * PPMUv1.1 Definitions 283d87b022SChanwoo Choi */ 29f262f28cSChanwoo Choi enum ppmu_event_type { 30f262f28cSChanwoo Choi PPMU_RO_BUSY_CYCLE_CNT = 0x0, 31f262f28cSChanwoo Choi PPMU_WO_BUSY_CYCLE_CNT = 0x1, 32f262f28cSChanwoo Choi PPMU_RW_BUSY_CYCLE_CNT = 0x2, 33f262f28cSChanwoo Choi PPMU_RO_REQUEST_CNT = 0x3, 34f262f28cSChanwoo Choi PPMU_WO_REQUEST_CNT = 0x4, 35f262f28cSChanwoo Choi PPMU_RO_DATA_CNT = 0x5, 36f262f28cSChanwoo Choi PPMU_WO_DATA_CNT = 0x6, 37f262f28cSChanwoo Choi PPMU_RO_LATENCY = 0x12, 38f262f28cSChanwoo Choi PPMU_WO_LATENCY = 0x16, 39f262f28cSChanwoo Choi }; 40f262f28cSChanwoo Choi 41f262f28cSChanwoo Choi enum ppmu_reg { 42f262f28cSChanwoo Choi /* PPC control register */ 43f262f28cSChanwoo Choi PPMU_PMNC = 0x00, 44f262f28cSChanwoo Choi PPMU_CNTENS = 0x10, 45f262f28cSChanwoo Choi PPMU_CNTENC = 0x20, 46f262f28cSChanwoo Choi PPMU_INTENS = 0x30, 47f262f28cSChanwoo Choi PPMU_INTENC = 0x40, 48f262f28cSChanwoo Choi PPMU_FLAG = 0x50, 49f262f28cSChanwoo Choi 50f262f28cSChanwoo Choi /* Cycle Counter and Performance Event Counter Register */ 51f262f28cSChanwoo Choi PPMU_CCNT = 0x100, 52f262f28cSChanwoo Choi PPMU_PMCNT0 = 0x110, 53f262f28cSChanwoo Choi PPMU_PMCNT1 = 0x120, 54f262f28cSChanwoo Choi PPMU_PMCNT2 = 0x130, 55f262f28cSChanwoo Choi PPMU_PMCNT3_HIGH = 0x140, 56f262f28cSChanwoo Choi PPMU_PMCNT3_LOW = 0x150, 57f262f28cSChanwoo Choi 58f262f28cSChanwoo Choi /* Bus Event Generator */ 59f262f28cSChanwoo Choi PPMU_BEVT0SEL = 0x1000, 60f262f28cSChanwoo Choi PPMU_BEVT1SEL = 0x1100, 61f262f28cSChanwoo Choi PPMU_BEVT2SEL = 0x1200, 62f262f28cSChanwoo Choi PPMU_BEVT3SEL = 0x1300, 63f262f28cSChanwoo Choi PPMU_COUNTER_RESET = 0x1810, 64f262f28cSChanwoo Choi PPMU_READ_OVERFLOW_CNT = 0x1810, 65f262f28cSChanwoo Choi PPMU_READ_UNDERFLOW_CNT = 0x1814, 66f262f28cSChanwoo Choi PPMU_WRITE_OVERFLOW_CNT = 0x1850, 67f262f28cSChanwoo Choi PPMU_WRITE_UNDERFLOW_CNT = 0x1854, 68f262f28cSChanwoo Choi PPMU_READ_PENDING_CNT = 0x1880, 69f262f28cSChanwoo Choi PPMU_WRITE_PENDING_CNT = 0x1884 70f262f28cSChanwoo Choi }; 71f262f28cSChanwoo Choi 72f262f28cSChanwoo Choi /* PMNC register */ 73f262f28cSChanwoo Choi #define PPMU_PMNC_CC_RESET_SHIFT 2 74f262f28cSChanwoo Choi #define PPMU_PMNC_COUNTER_RESET_SHIFT 1 75f262f28cSChanwoo Choi #define PPMU_PMNC_ENABLE_SHIFT 0 76f262f28cSChanwoo Choi #define PPMU_PMNC_START_MODE_MASK BIT(16) 77f262f28cSChanwoo Choi #define PPMU_PMNC_CC_DIVIDER_MASK BIT(3) 78f262f28cSChanwoo Choi #define PPMU_PMNC_CC_RESET_MASK BIT(2) 79f262f28cSChanwoo Choi #define PPMU_PMNC_COUNTER_RESET_MASK BIT(1) 80f262f28cSChanwoo Choi #define PPMU_PMNC_ENABLE_MASK BIT(0) 81f262f28cSChanwoo Choi 82f262f28cSChanwoo Choi /* CNTENS/CNTENC/INTENS/INTENC/FLAG register */ 83f262f28cSChanwoo Choi #define PPMU_CCNT_MASK BIT(31) 84f262f28cSChanwoo Choi #define PPMU_PMCNT3_MASK BIT(3) 85f262f28cSChanwoo Choi #define PPMU_PMCNT2_MASK BIT(2) 86f262f28cSChanwoo Choi #define PPMU_PMCNT1_MASK BIT(1) 87f262f28cSChanwoo Choi #define PPMU_PMCNT0_MASK BIT(0) 88f262f28cSChanwoo Choi 89f262f28cSChanwoo Choi /* PPMU_PMNCTx/PPMU_BETxSEL registers */ 90f262f28cSChanwoo Choi #define PPMU_PMNCT(x) (PPMU_PMCNT0 + (0x10 * x)) 91f262f28cSChanwoo Choi #define PPMU_BEVTxSEL(x) (PPMU_BEVT0SEL + (0x100 * x)) 92f262f28cSChanwoo Choi 933d87b022SChanwoo Choi /*** 943d87b022SChanwoo Choi * PPMU_V2.0 definitions 953d87b022SChanwoo Choi */ 963d87b022SChanwoo Choi enum ppmu_v2_mode { 973d87b022SChanwoo Choi PPMU_V2_MODE_MANUAL = 0, 983d87b022SChanwoo Choi PPMU_V2_MODE_AUTO = 1, 993d87b022SChanwoo Choi PPMU_V2_MODE_CIG = 2, /* CIG (Conditional Interrupt Generation) */ 1003d87b022SChanwoo Choi }; 1013d87b022SChanwoo Choi 1023d87b022SChanwoo Choi enum ppmu_v2_event_type { 1033d87b022SChanwoo Choi PPMU_V2_RO_DATA_CNT = 0x4, 1043d87b022SChanwoo Choi PPMU_V2_WO_DATA_CNT = 0x5, 1053d87b022SChanwoo Choi 1063d87b022SChanwoo Choi PPMU_V2_EVT3_RW_DATA_CNT = 0x22, /* Only for Event3 */ 1073d87b022SChanwoo Choi }; 1083d87b022SChanwoo Choi 1093d87b022SChanwoo Choi enum ppmu_V2_reg { 1103d87b022SChanwoo Choi /* PPC control register */ 1113d87b022SChanwoo Choi PPMU_V2_PMNC = 0x04, 1123d87b022SChanwoo Choi PPMU_V2_CNTENS = 0x08, 1133d87b022SChanwoo Choi PPMU_V2_CNTENC = 0x0c, 1143d87b022SChanwoo Choi PPMU_V2_INTENS = 0x10, 1153d87b022SChanwoo Choi PPMU_V2_INTENC = 0x14, 1163d87b022SChanwoo Choi PPMU_V2_FLAG = 0x18, 1173d87b022SChanwoo Choi 1183d87b022SChanwoo Choi /* Cycle Counter and Performance Event Counter Register */ 1193d87b022SChanwoo Choi PPMU_V2_CCNT = 0x48, 1203d87b022SChanwoo Choi PPMU_V2_PMCNT0 = 0x34, 1213d87b022SChanwoo Choi PPMU_V2_PMCNT1 = 0x38, 1223d87b022SChanwoo Choi PPMU_V2_PMCNT2 = 0x3c, 1233d87b022SChanwoo Choi PPMU_V2_PMCNT3_LOW = 0x40, 1243d87b022SChanwoo Choi PPMU_V2_PMCNT3_HIGH = 0x44, 1253d87b022SChanwoo Choi 1263d87b022SChanwoo Choi /* Bus Event Generator */ 1273d87b022SChanwoo Choi PPMU_V2_CIG_CFG0 = 0x1c, 1283d87b022SChanwoo Choi PPMU_V2_CIG_CFG1 = 0x20, 1293d87b022SChanwoo Choi PPMU_V2_CIG_CFG2 = 0x24, 1303d87b022SChanwoo Choi PPMU_V2_CIG_RESULT = 0x28, 1313d87b022SChanwoo Choi PPMU_V2_CNT_RESET = 0x2c, 1323d87b022SChanwoo Choi PPMU_V2_CNT_AUTO = 0x30, 1333d87b022SChanwoo Choi PPMU_V2_CH_EV0_TYPE = 0x200, 1343d87b022SChanwoo Choi PPMU_V2_CH_EV1_TYPE = 0x204, 1353d87b022SChanwoo Choi PPMU_V2_CH_EV2_TYPE = 0x208, 1363d87b022SChanwoo Choi PPMU_V2_CH_EV3_TYPE = 0x20c, 1373d87b022SChanwoo Choi PPMU_V2_SM_ID_V = 0x220, 1383d87b022SChanwoo Choi PPMU_V2_SM_ID_A = 0x224, 1393d87b022SChanwoo Choi PPMU_V2_SM_OTHERS_V = 0x228, 1403d87b022SChanwoo Choi PPMU_V2_SM_OTHERS_A = 0x22c, 1413d87b022SChanwoo Choi PPMU_V2_INTERRUPT_RESET = 0x260, 1423d87b022SChanwoo Choi }; 1433d87b022SChanwoo Choi 1443d87b022SChanwoo Choi /* PMNC register */ 1453d87b022SChanwoo Choi #define PPMU_V2_PMNC_START_MODE_SHIFT 20 1463d87b022SChanwoo Choi #define PPMU_V2_PMNC_START_MODE_MASK (0x3 << PPMU_V2_PMNC_START_MODE_SHIFT) 1473d87b022SChanwoo Choi 1483d87b022SChanwoo Choi #define PPMU_PMNC_CC_RESET_SHIFT 2 1493d87b022SChanwoo Choi #define PPMU_PMNC_COUNTER_RESET_SHIFT 1 1503d87b022SChanwoo Choi #define PPMU_PMNC_ENABLE_SHIFT 0 1513d87b022SChanwoo Choi #define PPMU_PMNC_START_MODE_MASK BIT(16) 1523d87b022SChanwoo Choi #define PPMU_PMNC_CC_DIVIDER_MASK BIT(3) 1533d87b022SChanwoo Choi #define PPMU_PMNC_CC_RESET_MASK BIT(2) 1543d87b022SChanwoo Choi #define PPMU_PMNC_COUNTER_RESET_MASK BIT(1) 1553d87b022SChanwoo Choi #define PPMU_PMNC_ENABLE_MASK BIT(0) 1563d87b022SChanwoo Choi 1573d87b022SChanwoo Choi #define PPMU_V2_PMNCT(x) (PPMU_V2_PMCNT0 + (0x4 * x)) 1583d87b022SChanwoo Choi #define PPMU_V2_CH_EVx_TYPE(x) (PPMU_V2_CH_EV0_TYPE + (0x4 * x)) 1593d87b022SChanwoo Choi 160f262f28cSChanwoo Choi #endif /* __EXYNOS_PPMU_H__ */ 161