xref: /rk3399_ARM-atf/plat/mediatek/drivers/spm/mt8189/constraints/mt_spm_trace.h (revision af0370f25a6663a0d737bbfb3985df4232eaaa55)
1*083cfadbSKun Lu /*
2*083cfadbSKun Lu  * Copyright (c) 2025, Mediatek Inc. All rights reserved.
3*083cfadbSKun Lu  *
4*083cfadbSKun Lu  * SPDX-License-Identifier: BSD-3-Clause
5*083cfadbSKun Lu  */
6*083cfadbSKun Lu 
7*083cfadbSKun Lu #ifndef MT_SPM_TRACE_H
8*083cfadbSKun Lu #define MT_SPM_TRACE_H
9*083cfadbSKun Lu 
10*083cfadbSKun Lu #include <lib/mmio.h>
11*083cfadbSKun Lu 
12*083cfadbSKun Lu #include <platform_def.h>
13*083cfadbSKun Lu 
14*083cfadbSKun Lu enum mt_spm_sysram_type {
15*083cfadbSKun Lu 	MT_SPM_SYSRAM_COMMON,
16*083cfadbSKun Lu 	MT_SPM_SYSRAM_SUSPEND,
17*083cfadbSKun Lu 	MT_SPM_SYSRAM_LP,
18*083cfadbSKun Lu };
19*083cfadbSKun Lu 
20*083cfadbSKun Lu /* SPM trace common type */
21*083cfadbSKun Lu enum mt_spm_trace_common_type {
22*083cfadbSKun Lu 	MT_SPM_TRACE_COMM_HAED,
23*083cfadbSKun Lu 	MT_SPM_TRACE_COMM_FP,
24*083cfadbSKun Lu 	MT_SPM_TRACE_COMM_RC_LAST_TIME_H,
25*083cfadbSKun Lu 	MT_SPM_TRACE_COMM_RC_LAST_TIME_L,
26*083cfadbSKun Lu 	MT_SPM_TRACE_COMM_RC_INFO,
27*083cfadbSKun Lu 	MT_SPM_TRACE_COMM_RC_FP,
28*083cfadbSKun Lu 	MT_SPM_TRACE_COMM_RC_VALID,
29*083cfadbSKun Lu };
30*083cfadbSKun Lu 
31*083cfadbSKun Lu /* SPM trace suspend type */
32*083cfadbSKun Lu enum mt_spm_trace_suspend_type {
33*083cfadbSKun Lu 	MT_SPM_TRACE_SUSPEND_WAKE_SRC,
34*083cfadbSKun Lu };
35*083cfadbSKun Lu 
36*083cfadbSKun Lu /*
37*083cfadbSKun Lu  * SPM sram usage with mcdi sram
38*083cfadbSKun Lu  * start offset : 0x500
39*083cfadbSKun Lu  */
40*083cfadbSKun Lu #define MT_SPM_SYSRAM_BASE (MTK_LPM_SRAM_BASE + 0x500)
41*083cfadbSKun Lu #define MT_SPM_SYSRAM_COMM_BASE MT_SPM_SYSRAM_BASE
42*083cfadbSKun Lu #define MT_SPM_SYSRAM_COMM_SZ 0x20
43*083cfadbSKun Lu 
44*083cfadbSKun Lu #define MT_SPM_SYSRAM_SUSPEND_BASE (MT_SPM_SYSRAM_BASE + MT_SPM_SYSRAM_COMM_SZ)
45*083cfadbSKun Lu #define MT_SPM_SYSRAM_SUSPEND_SZ 0xe0
46*083cfadbSKun Lu 
47*083cfadbSKun Lu #define MT_SPM_SYSRAM_LP_BASE \
48*083cfadbSKun Lu 	(MT_SPM_SYSRAM_SUSPEND_BASE + MT_SPM_SYSRAM_SUSPEND_SZ)
49*083cfadbSKun Lu 
50*083cfadbSKun Lu #define MT_SPM_SYSRAM_SLOT(slot) ((slot) << 2u)
51*083cfadbSKun Lu 
52*083cfadbSKun Lu #ifndef MTK_PLAT_SPM_TRACE_UNSUPPORT
53*083cfadbSKun Lu 
54*083cfadbSKun Lu #define MT_SPM_SYSRAM_W(_s, type, val, _sz) \
55*083cfadbSKun Lu 	mt_spm_sysram_write(_s, type, val, _sz)
56*083cfadbSKun Lu 
57*083cfadbSKun Lu #define MT_SPM_SYSRAM_R_U32(addr, val)                     \
58*083cfadbSKun Lu 	({                                                 \
59*083cfadbSKun Lu 		unsigned int *r_val = (unsigned int *)val; \
60*083cfadbSKun Lu 		if (r_val)                                 \
61*083cfadbSKun Lu 			*r_val = mmio_read_32(addr);       \
62*083cfadbSKun Lu 	})
63*083cfadbSKun Lu 
64*083cfadbSKun Lu #define MT_SPM_SYSRAM_R(_s, type, val) mt_spm_sysram_read(_s, type, val)
65*083cfadbSKun Lu 
66*083cfadbSKun Lu /* SPM trace common */
67*083cfadbSKun Lu #define MT_SPM_TRACE_INIT(_magic) ({ mt_spm_sysram_init(_magic); })
68*083cfadbSKun Lu 
69*083cfadbSKun Lu #define MT_SPM_TRACE_COMMON_U32_WR(_type, _val)                                \
70*083cfadbSKun Lu 	({                                                                     \
71*083cfadbSKun Lu 		mmio_write_32(                                                 \
72*083cfadbSKun Lu 			(MT_SPM_SYSRAM_COMM_BASE + MT_SPM_SYSRAM_SLOT(_type)), \
73*083cfadbSKun Lu 			_val);                                                 \
74*083cfadbSKun Lu 	})
75*083cfadbSKun Lu 
76*083cfadbSKun Lu #define MT_SPM_TRACE_COMMON_WR(_type, val, _sz)                             \
77*083cfadbSKun Lu 	({                                                                  \
78*083cfadbSKun Lu 		int ret = MT_SPM_SYSRAM_W(MT_SPM_SYSRAM_COMMON, _type, val, \
79*083cfadbSKun Lu 					  _sz);                             \
80*083cfadbSKun Lu 		ret;                                                        \
81*083cfadbSKun Lu 	})
82*083cfadbSKun Lu 
83*083cfadbSKun Lu #define MT_SPM_TRACE_COMMON_U32_RD(_type, _val)                                \
84*083cfadbSKun Lu 	({                                                                     \
85*083cfadbSKun Lu 		MT_SPM_SYSRAM_R_U32(                                           \
86*083cfadbSKun Lu 			(MT_SPM_SYSRAM_COMM_BASE + MT_SPM_SYSRAM_SLOT(_type)), \
87*083cfadbSKun Lu 			_val);                                                 \
88*083cfadbSKun Lu 	})
89*083cfadbSKun Lu 
90*083cfadbSKun Lu #define MT_SPM_TRACE_COMMON_RD(_type, _val)                                   \
91*083cfadbSKun Lu 	({                                                                    \
92*083cfadbSKun Lu 		int ret = MT_SPM_SYSRAM_R(MT_SPM_SYSRAM_COMMON, _type, _val); \
93*083cfadbSKun Lu 		ret;                                                          \
94*083cfadbSKun Lu 	})
95*083cfadbSKun Lu 
96*083cfadbSKun Lu /* SPM trace suspend */
97*083cfadbSKun Lu #define MT_SPM_TRACE_SUSPEND_U32_WR(_type, _val)            \
98*083cfadbSKun Lu 	({                                                  \
99*083cfadbSKun Lu 		mmio_write_32((MT_SPM_SYSRAM_SUSPEND_BASE + \
100*083cfadbSKun Lu 			       MT_SPM_SYSRAM_SLOT(_type)),  \
101*083cfadbSKun Lu 			      _val);                        \
102*083cfadbSKun Lu 	})
103*083cfadbSKun Lu 
104*083cfadbSKun Lu #define MT_SPM_TRACE_SUSPEND_WR(_type, _val, _sz)                             \
105*083cfadbSKun Lu 	({                                                                    \
106*083cfadbSKun Lu 		int ret = MT_SPM_SYSRAM_W(MT_SPM_SYSRAM_SUSPEND, _type, _val, \
107*083cfadbSKun Lu 					  _sz);                               \
108*083cfadbSKun Lu 		ret;                                                          \
109*083cfadbSKun Lu 	})
110*083cfadbSKun Lu 
111*083cfadbSKun Lu #define MT_SPM_TRACE_SUSPEND_U32_RD(_type, _val)                  \
112*083cfadbSKun Lu 	({                                                        \
113*083cfadbSKun Lu 		MT_SPM_SYSRAM_R_U32((MT_SPM_SYSRAM_SUSPEND_BASE + \
114*083cfadbSKun Lu 				     MT_SPM_SYSRAM_SLOT(_type)),  \
115*083cfadbSKun Lu 				    _val);                        \
116*083cfadbSKun Lu 	})
117*083cfadbSKun Lu 
118*083cfadbSKun Lu #define MT_SPM_TRACE_SUSPEND_RD(_type, _val)                                   \
119*083cfadbSKun Lu 	({                                                                     \
120*083cfadbSKun Lu 		int ret = MT_SPM_SYSRAM_R(MT_SPM_SYSRAM_SUSPEND, _type, _val); \
121*083cfadbSKun Lu 		ret;                                                           \
122*083cfadbSKun Lu 	})
123*083cfadbSKun Lu 
124*083cfadbSKun Lu /* SPM trace low power */
125*083cfadbSKun Lu #define MT_SPM_TRACE_LP_U32_WR(_type, _val)                                  \
126*083cfadbSKun Lu 	({                                                                   \
127*083cfadbSKun Lu 		mmio_write_32(                                               \
128*083cfadbSKun Lu 			(MT_SPM_SYSRAM_LP_BASE + MT_SPM_SYSRAM_SLOT(_type)), \
129*083cfadbSKun Lu 			_val);                                               \
130*083cfadbSKun Lu 	})
131*083cfadbSKun Lu 
132*083cfadbSKun Lu #define MT_SPM_TRACE_LP_WR(_type, _val, _sz)                                   \
133*083cfadbSKun Lu 	({                                                                     \
134*083cfadbSKun Lu 		int ret = MT_SPM_SYSRAM_W(MT_SPM_SYSRAM_LP, _type, _val, _sz); \
135*083cfadbSKun Lu 		ret;                                                           \
136*083cfadbSKun Lu 	})
137*083cfadbSKun Lu 
138*083cfadbSKun Lu #define MT_SPM_TRACE_LP_U32_RD(_type, _val)                                  \
139*083cfadbSKun Lu 	({                                                                   \
140*083cfadbSKun Lu 		MT_SPM_SYSRAM_R_U32(                                         \
141*083cfadbSKun Lu 			(MT_SPM_SYSRAM_LP_BASE + MT_SPM_SYSRAM_SLOT(_type)), \
142*083cfadbSKun Lu 			_val);                                               \
143*083cfadbSKun Lu 	})
144*083cfadbSKun Lu 
145*083cfadbSKun Lu #define MT_SPM_TRACE_LP_RD(_type, _val)                                   \
146*083cfadbSKun Lu 	({                                                                \
147*083cfadbSKun Lu 		int ret = MT_SPM_SYSRAM_R(MT_SPM_SYSRAM_LP, _type, _val); \
148*083cfadbSKun Lu 		ret;                                                      \
149*083cfadbSKun Lu 	})
150*083cfadbSKun Lu 
151*083cfadbSKun Lu #define MT_SPM_TRACE_LP_RINGBUF(_pval, _sz)                         \
152*083cfadbSKun Lu 	({                                                          \
153*083cfadbSKun Lu 		int ret = mt_spm_sysram_lp_ringbuf_add(_pval, _sz); \
154*083cfadbSKun Lu 		ret;                                                \
155*083cfadbSKun Lu 	})
156*083cfadbSKun Lu 
157*083cfadbSKun Lu int mt_spm_sysram_lp_ringbuf_add(const void *val, unsigned int sz);
158*083cfadbSKun Lu 
159*083cfadbSKun Lu int mt_spm_sysram_write(int section, int type, const void *val,
160*083cfadbSKun Lu 			unsigned int sz);
161*083cfadbSKun Lu int mt_spm_sysram_read(int section, int type, void *val);
162*083cfadbSKun Lu 
163*083cfadbSKun Lu int mt_spm_sysram_init(unsigned int magic);
164*083cfadbSKun Lu #else
165*083cfadbSKun Lu /* SPM trace common */
166*083cfadbSKun Lu #define MT_SPM_TRACE_INIT(_magic)
167*083cfadbSKun Lu #define MT_SPM_TRACE_COMMON_U32_WR(type, val)
168*083cfadbSKun Lu #define MT_SPM_TRACE_COMMON_WR(val)
169*083cfadbSKun Lu #define MT_SPM_TRACE_COMMON_U32_RD(type, val)
170*083cfadbSKun Lu #define MT_SPM_TRACE_COMMON_RD(val)
171*083cfadbSKun Lu 
172*083cfadbSKun Lu /* SPM trace suspend */
173*083cfadbSKun Lu #define MT_SPM_TRACE_SUSPEND_U32_WR(type, val)
174*083cfadbSKun Lu #define MT_SPM_TRACE_SUSPEND_WR(val)
175*083cfadbSKun Lu #define MT_SPM_TRACE_SUSPEND_U32_RD(type, val)
176*083cfadbSKun Lu #define MT_SPM_TRACE_SUSPEND_RD(val)
177*083cfadbSKun Lu 
178*083cfadbSKun Lu /* SPM trace low power */
179*083cfadbSKun Lu #define MT_SPM_TRACE_LP_U32_WR(type, val)
180*083cfadbSKun Lu #define MT_SPM_TRACE_LP_WR(val)
181*083cfadbSKun Lu #define MT_SPM_TRACE_LP_U32_RD(type, val)
182*083cfadbSKun Lu #define MT_SPM_TRACE_LP_RD(val)
183*083cfadbSKun Lu #define MT_SPM_TRACE_LP_RINGBUF(pval, sz)
184*083cfadbSKun Lu 
185*083cfadbSKun Lu #define mt_spm_sysram_lp_ringbuf_add(_val, _sz)
186*083cfadbSKun Lu #define mt_spm_sysram_write(_s, _type, _val, _sz)
187*083cfadbSKun Lu #define mt_spm_sysram_read(_s, _type, _val)
188*083cfadbSKun Lu #define mt_spm_sysram_init(_magic)
189*083cfadbSKun Lu #endif
190*083cfadbSKun Lu 
191*083cfadbSKun Lu #endif /* MT_SPM_TRACE_H */
192