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