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