1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (C) 2018 Marvell International Ltd. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * https://spdx.org/licenses 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #ifndef PLAT_PM_TRACE_H 9*91f16700Schasinglulu #define PLAT_PM_TRACE_H 10*91f16700Schasinglulu 11*91f16700Schasinglulu /* 12*91f16700Schasinglulu * PM Trace is for Debug purpose only!!! 13*91f16700Schasinglulu * It should not be enabled during System Run time 14*91f16700Schasinglulu */ 15*91f16700Schasinglulu #undef PM_TRACE_ENABLE 16*91f16700Schasinglulu 17*91f16700Schasinglulu 18*91f16700Schasinglulu /* trace entry time */ 19*91f16700Schasinglulu struct pm_trace_entry { 20*91f16700Schasinglulu /* trace entry time stamp */ 21*91f16700Schasinglulu unsigned int timestamp; 22*91f16700Schasinglulu 23*91f16700Schasinglulu /* trace info 24*91f16700Schasinglulu * [16-31] - API Trace Id 25*91f16700Schasinglulu * [00-15] - API Step Id 26*91f16700Schasinglulu */ 27*91f16700Schasinglulu unsigned int trace_info; 28*91f16700Schasinglulu }; 29*91f16700Schasinglulu 30*91f16700Schasinglulu struct pm_trace_ctrl { 31*91f16700Schasinglulu /* trace pointer - points to next free entry in trace cyclic queue */ 32*91f16700Schasinglulu unsigned int trace_pointer; 33*91f16700Schasinglulu 34*91f16700Schasinglulu /* trace count - number of entries in the queue, clear upon read */ 35*91f16700Schasinglulu unsigned int trace_count; 36*91f16700Schasinglulu }; 37*91f16700Schasinglulu 38*91f16700Schasinglulu /* trace size definition */ 39*91f16700Schasinglulu #define AP_MSS_ATF_CORE_INFO_SIZE (256) 40*91f16700Schasinglulu #define AP_MSS_ATF_CORE_ENTRY_SIZE (8) 41*91f16700Schasinglulu #define AP_MSS_ATF_TRACE_SIZE_MASK (0xFF) 42*91f16700Schasinglulu 43*91f16700Schasinglulu /* trace address definition */ 44*91f16700Schasinglulu #define AP_MSS_TIMER_BASE (MVEBU_REGS_BASE_MASK + 0x580110) 45*91f16700Schasinglulu 46*91f16700Schasinglulu #define AP_MSS_ATF_CORE_0_CTRL_BASE (MVEBU_REGS_BASE_MASK + 0x520140) 47*91f16700Schasinglulu #define AP_MSS_ATF_CORE_1_CTRL_BASE (MVEBU_REGS_BASE_MASK + 0x520150) 48*91f16700Schasinglulu #define AP_MSS_ATF_CORE_2_CTRL_BASE (MVEBU_REGS_BASE_MASK + 0x520160) 49*91f16700Schasinglulu #define AP_MSS_ATF_CORE_3_CTRL_BASE (MVEBU_REGS_BASE_MASK + 0x520170) 50*91f16700Schasinglulu #define AP_MSS_ATF_CORE_CTRL_BASE (AP_MSS_ATF_CORE_0_CTRL_BASE) 51*91f16700Schasinglulu 52*91f16700Schasinglulu #define AP_MSS_ATF_CORE_0_INFO_BASE (MVEBU_REGS_BASE_MASK + 0x5201C0) 53*91f16700Schasinglulu #define AP_MSS_ATF_CORE_0_INFO_TRACE (MVEBU_REGS_BASE_MASK + 0x5201C4) 54*91f16700Schasinglulu #define AP_MSS_ATF_CORE_1_INFO_BASE (MVEBU_REGS_BASE_MASK + 0x5209C0) 55*91f16700Schasinglulu #define AP_MSS_ATF_CORE_1_INFO_TRACE (MVEBU_REGS_BASE_MASK + 0x5209C4) 56*91f16700Schasinglulu #define AP_MSS_ATF_CORE_2_INFO_BASE (MVEBU_REGS_BASE_MASK + 0x5211C0) 57*91f16700Schasinglulu #define AP_MSS_ATF_CORE_2_INFO_TRACE (MVEBU_REGS_BASE_MASK + 0x5211C4) 58*91f16700Schasinglulu #define AP_MSS_ATF_CORE_3_INFO_BASE (MVEBU_REGS_BASE_MASK + 0x5219C0) 59*91f16700Schasinglulu #define AP_MSS_ATF_CORE_3_INFO_TRACE (MVEBU_REGS_BASE_MASK + 0x5219C4) 60*91f16700Schasinglulu #define AP_MSS_ATF_CORE_INFO_BASE (AP_MSS_ATF_CORE_0_INFO_BASE) 61*91f16700Schasinglulu 62*91f16700Schasinglulu /* trace info definition */ 63*91f16700Schasinglulu #define TRACE_PWR_DOMAIN_OFF (0x10000) 64*91f16700Schasinglulu #define TRACE_PWR_DOMAIN_SUSPEND (0x20000) 65*91f16700Schasinglulu #define TRACE_PWR_DOMAIN_SUSPEND_FINISH (0x30000) 66*91f16700Schasinglulu #define TRACE_PWR_DOMAIN_ON (0x40000) 67*91f16700Schasinglulu #define TRACE_PWR_DOMAIN_ON_FINISH (0x50000) 68*91f16700Schasinglulu 69*91f16700Schasinglulu #define TRACE_PWR_DOMAIN_ON_MASK (0xFF) 70*91f16700Schasinglulu 71*91f16700Schasinglulu #ifdef PM_TRACE_ENABLE 72*91f16700Schasinglulu 73*91f16700Schasinglulu /* trace API definition */ 74*91f16700Schasinglulu void pm_core_0_trace(unsigned int trace); 75*91f16700Schasinglulu void pm_core_1_trace(unsigned int trace); 76*91f16700Schasinglulu void pm_core_2_trace(unsigned int trace); 77*91f16700Schasinglulu void pm_core_3_trace(unsigned int trace); 78*91f16700Schasinglulu 79*91f16700Schasinglulu typedef void (*core_trace_func)(unsigned int); 80*91f16700Schasinglulu 81*91f16700Schasinglulu extern core_trace_func funcTbl[PLATFORM_CORE_COUNT]; 82*91f16700Schasinglulu 83*91f16700Schasinglulu #define PM_TRACE(trace) funcTbl[plat_my_core_pos()](trace) 84*91f16700Schasinglulu 85*91f16700Schasinglulu #else 86*91f16700Schasinglulu 87*91f16700Schasinglulu #define PM_TRACE(trace) 88*91f16700Schasinglulu 89*91f16700Schasinglulu #endif 90*91f16700Schasinglulu 91*91f16700Schasinglulu /******************************************************************************* 92*91f16700Schasinglulu * pm_trace_add 93*91f16700Schasinglulu * 94*91f16700Schasinglulu * DESCRIPTION: Add PM trace 95*91f16700Schasinglulu ****************************************************************************** 96*91f16700Schasinglulu */ 97*91f16700Schasinglulu void pm_trace_add(unsigned int trace, unsigned int core); 98*91f16700Schasinglulu 99*91f16700Schasinglulu #endif /* PLAT_PM_TRACE_H */ 100