xref: /arm-trusted-firmware/plat/nvidia/tegra/soc/t194/drivers/include/t194_nvg.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2019-2020, NVIDIA CORPORATION. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef T194_NVG_H
8*91f16700Schasinglulu #define T194_NVG_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <lib/utils_def.h>
11*91f16700Schasinglulu 
12*91f16700Schasinglulu /**
13*91f16700Schasinglulu  * t194_nvg.h - Header for the NVIDIA Generic interface (NVG).
14*91f16700Schasinglulu  * Official documentation for this interface is included as part
15*91f16700Schasinglulu  * of the T194 TRM.
16*91f16700Schasinglulu  */
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /**
19*91f16700Schasinglulu  * Current version - Major version increments may break backwards
20*91f16700Schasinglulu  * compatibility and binary compatibility. Minor version increments
21*91f16700Schasinglulu  * occur when there is only new functionality.
22*91f16700Schasinglulu  */
23*91f16700Schasinglulu enum {
24*91f16700Schasinglulu 	TEGRA_NVG_VERSION_MAJOR = U(6),
25*91f16700Schasinglulu 	TEGRA_NVG_VERSION_MINOR = U(7)
26*91f16700Schasinglulu };
27*91f16700Schasinglulu 
28*91f16700Schasinglulu typedef enum {
29*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_VERSION				= U(0),
30*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_POWER_PERF				= U(1),
31*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_POWER_MODES				= U(2),
32*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_WAKE_TIME				= U(3),
33*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_CSTATE_INFO				= U(4),
34*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_CROSSOVER_C6_LOWER_BOUND		= U(5),
35*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_CROSSOVER_CC6_LOWER_BOUND		= U(6),
36*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_CROSSOVER_CG7_LOWER_BOUND		= U(8),
37*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_CSTATE_STAT_QUERY_REQUEST		= U(10),
38*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_CSTATE_STAT_QUERY_VALUE		= U(11),
39*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_NUM_CORES				= U(20),
40*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UNIQUE_LOGICAL_ID			= U(21),
41*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_LOGICAL_TO_PHYSICAL_MAPPING		= U(22),
42*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_LOGICAL_TO_MPIDR			= U(23),
43*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_SHUTDOWN				= U(42),
44*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_IS_SC7_ALLOWED			= U(43),
45*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_ONLINE_CORE				= U(44),
46*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_CC3_CTRL				= U(45),
47*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_CCPLEX_CACHE_CONTROL			= U(49),
48*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_CCPLEX_GSC			= U(50),
49*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_HSM_ERROR_CTRL			= U(53),
50*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_SECURITY_CONFIG			= U(54),
51*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DEBUG_CONFIG				= U(55),
52*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_SNOC_MCF				= U(56),
53*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_MCF_ORD1				= U(57),
54*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_MCF_ORD2				= U(58),
55*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_MCF_ORD3				= U(59),
56*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_MCF_ISO				= U(60),
57*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_MCF_SISO				= U(61),
58*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_MCF_NISO				= U(62),
59*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_MCF_NISO_REMOTE			= U(63),
60*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_ISO			= U(64),
61*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_SISO			= U(65),
62*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_NISO			= U(66),
63*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_NISO_REMOTE		= U(67),
64*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_L3FILL			= U(68),
65*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_L3WR			= U(69),
66*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_RSP_L3RD_DMA		= U(70),
67*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_RSP_MCFRD_DMA		= U(71),
68*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_GLOBAL			= U(72),
69*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_LL				= U(73),
70*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_L3D			= U(74),
71*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_FCM_RD			= U(75),
72*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_L3CTRL_FCM_WR			= U(76),
73*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_SNOC_GLOBAL_CTRL			= U(77),
74*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_SNOC_CLIENT_REQ_CTRL		= U(78),
75*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_DDA_SNOC_CLIENT_REPLENTISH_CTRL	= U(79),
76*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_RT_SAFE_MASK				= U(80),
77*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_RT_WINDOW_US				= U(81),
78*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_RT_FWD_PROGRESS_US			= U(82),
79*91f16700Schasinglulu 
80*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_LAST_INDEX
81*91f16700Schasinglulu } tegra_nvg_channel_id_t;
82*91f16700Schasinglulu 
83*91f16700Schasinglulu typedef enum {
84*91f16700Schasinglulu 	NVG_STAT_QUERY_SC7_ENTRIES				= U(1),
85*91f16700Schasinglulu 	NVG_STAT_QUERY_CC6_ENTRIES				= U(6),
86*91f16700Schasinglulu 	NVG_STAT_QUERY_CG7_ENTRIES				= U(7),
87*91f16700Schasinglulu 	NVG_STAT_QUERY_C6_ENTRIES				= U(10),
88*91f16700Schasinglulu 	NVG_STAT_QUERY_C7_ENTRIES				= U(14),
89*91f16700Schasinglulu 	NVG_STAT_QUERY_SC7_RESIDENCY_SUM			= U(32),
90*91f16700Schasinglulu 	NVG_STAT_QUERY_CC6_RESIDENCY_SUM			= U(41),
91*91f16700Schasinglulu 	NVG_STAT_QUERY_CG7_RESIDENCY_SUM			= U(46),
92*91f16700Schasinglulu 	NVG_STAT_QUERY_C6_RESIDENCY_SUM				= U(51),
93*91f16700Schasinglulu 	NVG_STAT_QUERY_C7_RESIDENCY_SUM				= U(56),
94*91f16700Schasinglulu 	NVG_STAT_QUERY_SC7_ENTRY_TIME_SUM			= U(60),
95*91f16700Schasinglulu 	NVG_STAT_QUERY_CC6_ENTRY_TIME_SUM			= U(61),
96*91f16700Schasinglulu 	NVG_STAT_QUERY_CG7_ENTRY_TIME_SUM			= U(62),
97*91f16700Schasinglulu 	NVG_STAT_QUERY_C6_ENTRY_TIME_SUM			= U(63),
98*91f16700Schasinglulu 	NVG_STAT_QUERY_C7_ENTRY_TIME_SUM			= U(64),
99*91f16700Schasinglulu 	NVG_STAT_QUERY_SC7_EXIT_TIME_SUM			= U(70),
100*91f16700Schasinglulu 	NVG_STAT_QUERY_CC6_EXIT_TIME_SUM			= U(71),
101*91f16700Schasinglulu 	NVG_STAT_QUERY_CG7_EXIT_TIME_SUM			= U(72),
102*91f16700Schasinglulu 	NVG_STAT_QUERY_C6_EXIT_TIME_SUM				= U(73),
103*91f16700Schasinglulu 	NVG_STAT_QUERY_C7_EXIT_TIME_SUM				= U(74),
104*91f16700Schasinglulu 	NVG_STAT_QUERY_SC7_ENTRY_LAST				= U(80),
105*91f16700Schasinglulu 	NVG_STAT_QUERY_CC6_ENTRY_LAST				= U(81),
106*91f16700Schasinglulu 	NVG_STAT_QUERY_CG7_ENTRY_LAST				= U(82),
107*91f16700Schasinglulu 	NVG_STAT_QUERY_C6_ENTRY_LAST				= U(83),
108*91f16700Schasinglulu 	NVG_STAT_QUERY_C7_ENTRY_LAST				= U(84),
109*91f16700Schasinglulu 	NVG_STAT_QUERY_SC7_EXIT_LAST				= U(90),
110*91f16700Schasinglulu 	NVG_STAT_QUERY_CC6_EXIT_LAST				= U(91),
111*91f16700Schasinglulu 	NVG_STAT_QUERY_CG7_EXIT_LAST				= U(92),
112*91f16700Schasinglulu 	NVG_STAT_QUERY_C6_EXIT_LAST				= U(93),
113*91f16700Schasinglulu 	NVG_STAT_QUERY_C7_EXIT_LAST				= U(94)
114*91f16700Schasinglulu 
115*91f16700Schasinglulu } tegra_nvg_stat_query_t;
116*91f16700Schasinglulu 
117*91f16700Schasinglulu typedef enum {
118*91f16700Schasinglulu 	TEGRA_NVG_CORE_C0 = U(0),
119*91f16700Schasinglulu 	TEGRA_NVG_CORE_C1 = U(1),
120*91f16700Schasinglulu 	TEGRA_NVG_CORE_C6 = U(6),
121*91f16700Schasinglulu 	TEGRA_NVG_CORE_C7 = U(7),
122*91f16700Schasinglulu 	TEGRA_NVG_CORE_WARMRSTREQ = U(8)
123*91f16700Schasinglulu } tegra_nvg_core_sleep_state_t;
124*91f16700Schasinglulu 
125*91f16700Schasinglulu typedef enum {
126*91f16700Schasinglulu 	TEGRA_NVG_SHUTDOWN = U(0),
127*91f16700Schasinglulu 	TEGRA_NVG_REBOOT = U(1)
128*91f16700Schasinglulu } tegra_nvg_shutdown_reboot_state_t;
129*91f16700Schasinglulu 
130*91f16700Schasinglulu typedef enum {
131*91f16700Schasinglulu 	TEGRA_NVG_CLUSTER_CC0		= U(0),
132*91f16700Schasinglulu 	TEGRA_NVG_CLUSTER_AUTO_CC1	= U(1),
133*91f16700Schasinglulu 	TEGRA_NVG_CLUSTER_CC6		= U(6)
134*91f16700Schasinglulu } tegra_nvg_cluster_sleep_state_t;
135*91f16700Schasinglulu 
136*91f16700Schasinglulu typedef enum {
137*91f16700Schasinglulu 	TEGRA_NVG_CG_CG0 = U(0),
138*91f16700Schasinglulu 	TEGRA_NVG_CG_CG7 = U(7)
139*91f16700Schasinglulu } tegra_nvg_cluster_group_sleep_state_t;
140*91f16700Schasinglulu 
141*91f16700Schasinglulu typedef enum {
142*91f16700Schasinglulu 	TEGRA_NVG_SYSTEM_SC0 = U(0),
143*91f16700Schasinglulu 	TEGRA_NVG_SYSTEM_SC7 = U(7),
144*91f16700Schasinglulu 	TEGRA_NVG_SYSTEM_SC8 = U(8)
145*91f16700Schasinglulu } tegra_nvg_system_sleep_state_t;
146*91f16700Schasinglulu 
147*91f16700Schasinglulu // ---------------------------------------------------------------------------
148*91f16700Schasinglulu // NVG Data subformats
149*91f16700Schasinglulu // ---------------------------------------------------------------------------
150*91f16700Schasinglulu 
151*91f16700Schasinglulu typedef union {
152*91f16700Schasinglulu 	uint64_t flat;
153*91f16700Schasinglulu 	struct nvg_version_channel_t {
154*91f16700Schasinglulu 		uint32_t minor_version : U(32);
155*91f16700Schasinglulu 		uint32_t major_version : U(32);
156*91f16700Schasinglulu 	} bits;
157*91f16700Schasinglulu } nvg_version_data_t;
158*91f16700Schasinglulu 
159*91f16700Schasinglulu typedef union {
160*91f16700Schasinglulu 	uint64_t flat;
161*91f16700Schasinglulu 	struct {
162*91f16700Schasinglulu 		uint32_t perf_per_watt	: U(1);
163*91f16700Schasinglulu 		uint32_t reserved_31_1	: U(31);
164*91f16700Schasinglulu 		uint32_t reserved_63_32	: U(32);
165*91f16700Schasinglulu 	} bits;
166*91f16700Schasinglulu } nvg_power_perf_channel_t;
167*91f16700Schasinglulu 
168*91f16700Schasinglulu typedef union {
169*91f16700Schasinglulu 	uint64_t flat;
170*91f16700Schasinglulu 	struct {
171*91f16700Schasinglulu 		uint32_t low_battery	: U(1);
172*91f16700Schasinglulu 		uint32_t reserved_1_1	: U(1);
173*91f16700Schasinglulu 		uint32_t battery_save	: U(1);
174*91f16700Schasinglulu 		uint32_t reserved_31_3	: U(29);
175*91f16700Schasinglulu 		uint32_t reserved_63_32	: U(32);
176*91f16700Schasinglulu 	} bits;
177*91f16700Schasinglulu } nvg_power_modes_channel_t;
178*91f16700Schasinglulu 
179*91f16700Schasinglulu typedef union nvg_channel_1_data_u {
180*91f16700Schasinglulu 	uint64_t flat;
181*91f16700Schasinglulu 	struct nvg_channel_1_data_s {
182*91f16700Schasinglulu 		uint32_t perf_per_watt_mode	: U(1);
183*91f16700Schasinglulu 		uint32_t reserved_31_1		: U(31);
184*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
185*91f16700Schasinglulu 	} bits;
186*91f16700Schasinglulu } nvg_channel_1_data_t;
187*91f16700Schasinglulu 
188*91f16700Schasinglulu typedef union {
189*91f16700Schasinglulu 	uint64_t flat;
190*91f16700Schasinglulu 	struct {
191*91f16700Schasinglulu 		uint32_t gpu_ways	: U(5);
192*91f16700Schasinglulu 		uint32_t reserved_7_5	: U(3);
193*91f16700Schasinglulu 		uint32_t gpu_only_ways	: U(5);
194*91f16700Schasinglulu 		uint32_t reserved_31_13 : U(19);
195*91f16700Schasinglulu 		uint32_t reserved_63_32 : U(32);
196*91f16700Schasinglulu 	} bits;
197*91f16700Schasinglulu } nvg_ccplex_cache_control_channel_t;
198*91f16700Schasinglulu 
199*91f16700Schasinglulu typedef union nvg_channel_2_data_u {
200*91f16700Schasinglulu 	uint64_t flat;
201*91f16700Schasinglulu 	struct nvg_channel_2_data_s {
202*91f16700Schasinglulu 		uint32_t reserved_1_0		: U(2);
203*91f16700Schasinglulu 		uint32_t battery_saver_mode	: U(1);
204*91f16700Schasinglulu 		uint32_t reserved_31_3		: U(29);
205*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
206*91f16700Schasinglulu 	} bits;
207*91f16700Schasinglulu } nvg_channel_2_data_t;
208*91f16700Schasinglulu 
209*91f16700Schasinglulu typedef union {
210*91f16700Schasinglulu 	uint64_t flat;
211*91f16700Schasinglulu 	struct {
212*91f16700Schasinglulu 		uint32_t wake_time		: U(32);
213*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
214*91f16700Schasinglulu 	} bits;
215*91f16700Schasinglulu } nvg_wake_time_channel_t;
216*91f16700Schasinglulu 
217*91f16700Schasinglulu typedef union {
218*91f16700Schasinglulu 	uint64_t flat;
219*91f16700Schasinglulu 	struct {
220*91f16700Schasinglulu 		uint32_t cluster_state			: U(3);
221*91f16700Schasinglulu 		uint32_t reserved_6_3			: U(4);
222*91f16700Schasinglulu 		uint32_t update_cluster			: U(1);
223*91f16700Schasinglulu 		uint32_t cg_cstate			: U(3);
224*91f16700Schasinglulu 		uint32_t reserved_14_11			: U(4);
225*91f16700Schasinglulu 		uint32_t update_cg			: U(1);
226*91f16700Schasinglulu 		uint32_t system_cstate			: U(4);
227*91f16700Schasinglulu 		uint32_t reserved_22_20			: U(3);
228*91f16700Schasinglulu 		uint32_t update_system			: U(1);
229*91f16700Schasinglulu 		uint32_t reserved_30_24			: U(7);
230*91f16700Schasinglulu 		uint32_t update_wake_mask		: U(1);
231*91f16700Schasinglulu 		union {
232*91f16700Schasinglulu 			uint32_t flat			: U(32);
233*91f16700Schasinglulu 			struct {
234*91f16700Schasinglulu 				uint32_t vfiq		: U(1);
235*91f16700Schasinglulu 				uint32_t virq		: U(1);
236*91f16700Schasinglulu 				uint32_t fiq		: U(1);
237*91f16700Schasinglulu 				uint32_t irq		: U(1);
238*91f16700Schasinglulu 				uint32_t serror		: U(1);
239*91f16700Schasinglulu 				uint32_t reserved_10_5	: U(6);
240*91f16700Schasinglulu 				uint32_t fiqout		: U(1);
241*91f16700Schasinglulu 				uint32_t irqout		: U(1);
242*91f16700Schasinglulu 				uint32_t reserved_31_13	: U(19);
243*91f16700Schasinglulu 			} carmel;
244*91f16700Schasinglulu 		} wake_mask;
245*91f16700Schasinglulu 	} bits;
246*91f16700Schasinglulu } nvg_cstate_info_channel_t;
247*91f16700Schasinglulu 
248*91f16700Schasinglulu typedef union {
249*91f16700Schasinglulu 	uint64_t flat;
250*91f16700Schasinglulu 	struct {
251*91f16700Schasinglulu 		uint32_t crossover_value	: U(32);
252*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
253*91f16700Schasinglulu 	} bits;
254*91f16700Schasinglulu } nvg_lower_bound_channel_t;
255*91f16700Schasinglulu 
256*91f16700Schasinglulu typedef union {
257*91f16700Schasinglulu 	uint64_t flat;
258*91f16700Schasinglulu 	struct {
259*91f16700Schasinglulu 		uint32_t unit_id		: U(4);
260*91f16700Schasinglulu 		uint32_t reserved_15_4		: U(12);
261*91f16700Schasinglulu 		uint32_t stat_id		: U(16);
262*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
263*91f16700Schasinglulu 	} bits;
264*91f16700Schasinglulu } nvg_cstate_stat_query_channel_t;
265*91f16700Schasinglulu 
266*91f16700Schasinglulu typedef union {
267*91f16700Schasinglulu 	uint64_t flat;
268*91f16700Schasinglulu 	struct {
269*91f16700Schasinglulu 		uint32_t num_cores		: U(4);
270*91f16700Schasinglulu 		uint32_t reserved_31_4		: U(28);
271*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
272*91f16700Schasinglulu 	} bits;
273*91f16700Schasinglulu } nvg_num_cores_channel_t;
274*91f16700Schasinglulu 
275*91f16700Schasinglulu typedef union {
276*91f16700Schasinglulu 	uint64_t flat;
277*91f16700Schasinglulu 	struct {
278*91f16700Schasinglulu 		uint32_t unique_core_id		: U(3);
279*91f16700Schasinglulu 		uint32_t reserved_31_3		: U(29);
280*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
281*91f16700Schasinglulu 	} bits;
282*91f16700Schasinglulu } nvg_unique_logical_id_channel_t;
283*91f16700Schasinglulu 
284*91f16700Schasinglulu typedef union {
285*91f16700Schasinglulu 	uint64_t flat;
286*91f16700Schasinglulu 	struct {
287*91f16700Schasinglulu 		uint32_t lcore0_pcore_id	: U(4);
288*91f16700Schasinglulu 		uint32_t lcore1_pcore_id	: U(4);
289*91f16700Schasinglulu 		uint32_t lcore2_pcore_id	: U(4);
290*91f16700Schasinglulu 		uint32_t lcore3_pcore_id	: U(4);
291*91f16700Schasinglulu 		uint32_t lcore4_pcore_id	: U(4);
292*91f16700Schasinglulu 		uint32_t lcore5_pcore_id	: U(4);
293*91f16700Schasinglulu 		uint32_t lcore6_pcore_id	: U(4);
294*91f16700Schasinglulu 		uint32_t lcore7_pcore_id	: U(4);
295*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
296*91f16700Schasinglulu 	} bits;
297*91f16700Schasinglulu } nvg_logical_to_physical_mappings_channel_t;
298*91f16700Schasinglulu 
299*91f16700Schasinglulu typedef union {
300*91f16700Schasinglulu 	uint64_t flat;
301*91f16700Schasinglulu 	struct nvg_logical_to_mpidr_channel_write_t {
302*91f16700Schasinglulu 		uint32_t lcore_id		: U(3);
303*91f16700Schasinglulu 		uint32_t reserved_31_3		: U(29);
304*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
305*91f16700Schasinglulu 	} write;
306*91f16700Schasinglulu 	struct nvg_logical_to_mpidr_channel_read_t {
307*91f16700Schasinglulu 		uint32_t mpidr			: U(32);
308*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
309*91f16700Schasinglulu 	} read;
310*91f16700Schasinglulu } nvg_logical_to_mpidr_channel_t;
311*91f16700Schasinglulu 
312*91f16700Schasinglulu typedef union {
313*91f16700Schasinglulu 	uint64_t flat;
314*91f16700Schasinglulu 	struct {
315*91f16700Schasinglulu 		uint32_t is_sc7_allowed		: U(1);
316*91f16700Schasinglulu 		uint32_t reserved_31_1		: U(31);
317*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
318*91f16700Schasinglulu 	} bits;
319*91f16700Schasinglulu } nvg_is_sc7_allowed_channel_t;
320*91f16700Schasinglulu 
321*91f16700Schasinglulu typedef union {
322*91f16700Schasinglulu 	uint64_t flat;
323*91f16700Schasinglulu 	struct {
324*91f16700Schasinglulu 		uint32_t core_id		: U(4);
325*91f16700Schasinglulu 		uint32_t reserved_31_4		: U(28);
326*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
327*91f16700Schasinglulu 	} bits;
328*91f16700Schasinglulu } nvg_core_online_channel_t;
329*91f16700Schasinglulu 
330*91f16700Schasinglulu typedef union {
331*91f16700Schasinglulu 	uint64_t flat;
332*91f16700Schasinglulu 	struct {
333*91f16700Schasinglulu 		uint32_t freq_req		: U(9);
334*91f16700Schasinglulu 		uint32_t reserved_30_9		: U(22);
335*91f16700Schasinglulu 		uint32_t enable			: U(1);
336*91f16700Schasinglulu 		uint32_t reserved_63_32		: U(32);
337*91f16700Schasinglulu 	} bits;
338*91f16700Schasinglulu } nvg_cc3_control_channel_t;
339*91f16700Schasinglulu 
340*91f16700Schasinglulu typedef enum {
341*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_ALL		=	U(0),
342*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_NVDEC		=	U(1),
343*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_WPR1		=	U(2),
344*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_WPR2		=	U(3),
345*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_TSECA		=	U(4),
346*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_TSECB		=	U(5),
347*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_BPMP		=	U(6),
348*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_APE		=	U(7),
349*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_SPE		=	U(8),
350*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_SCE		=	U(9),
351*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_APR		=	U(10),
352*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_TZRAM		=	U(11),
353*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_IPC_SE_TSEC	=	U(12),
354*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_BPMP_TO_RCE	=	U(13),
355*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_BPMP_TO_MCE	=	U(14),
356*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_SE_SC7		=	U(15),
357*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_BPMP_TO_SPE	=	U(16),
358*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_RCE		=	U(17),
359*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_CPU_TZ_TO_BPMP	=	U(18),
360*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_VM_ENCR1		=	U(19),
361*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_CPU_NS_TO_BPMP	=	U(20),
362*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_OEM_SC7		=	U(21),
363*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_IPC_SE_SPE_SCE_BPMP =	U(22),
364*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_SC7_RESUME_FW	=	U(23),
365*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_CAMERA_TASKLIST	=	U(24),
366*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_XUSB		=	U(25),
367*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_CV			=	U(26),
368*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_VM_ENCR2		=	U(27),
369*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_HYPERVISOR_SW	=	U(28),
370*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_SMMU_PAGETABLES	=	U(29),
371*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_30			=	U(30),
372*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_31			=	U(31),
373*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_TZ_DRAM		=	U(32),
374*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_NVLINK		=	U(33),
375*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_SBS		=	U(34),
376*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_VPR		=	U(35),
377*91f16700Schasinglulu 	TEGRA_NVG_CHANNEL_UPDATE_GSC_LAST_INDEX
378*91f16700Schasinglulu } tegra_nvg_channel_update_gsc_gsc_enum_t;
379*91f16700Schasinglulu 
380*91f16700Schasinglulu typedef union {
381*91f16700Schasinglulu 	uint64_t flat;
382*91f16700Schasinglulu 	struct {
383*91f16700Schasinglulu 		uint32_t gsc_enum	: U(16);
384*91f16700Schasinglulu 		uint32_t reserved_31_16 : U(16);
385*91f16700Schasinglulu 		uint32_t reserved_63_32 : U(32);
386*91f16700Schasinglulu 	} bits;
387*91f16700Schasinglulu } nvg_update_ccplex_gsc_channel_t;
388*91f16700Schasinglulu 
389*91f16700Schasinglulu typedef union {
390*91f16700Schasinglulu 	uint64_t flat;
391*91f16700Schasinglulu 	struct nvg_security_config_channel_t {
392*91f16700Schasinglulu 		uint32_t strict_checking_enabled	: U(1);
393*91f16700Schasinglulu 		uint32_t strict_checking_locked		: U(1);
394*91f16700Schasinglulu 		uint32_t reserved_31_2			: U(30);
395*91f16700Schasinglulu 		uint32_t reserved_63_32			: U(32);
396*91f16700Schasinglulu 	} bits;
397*91f16700Schasinglulu } nvg_security_config_t;
398*91f16700Schasinglulu 
399*91f16700Schasinglulu typedef union {
400*91f16700Schasinglulu 	uint64_t flat;
401*91f16700Schasinglulu 	struct nvg_shutdown_channel_t {
402*91f16700Schasinglulu 		uint32_t reboot				: U(1);
403*91f16700Schasinglulu 		uint32_t reserved_31_1			: U(31);
404*91f16700Schasinglulu 		uint32_t reserved_63_32			: U(32);
405*91f16700Schasinglulu 	} bits;
406*91f16700Schasinglulu } nvg_shutdown_t;
407*91f16700Schasinglulu 
408*91f16700Schasinglulu typedef union {
409*91f16700Schasinglulu 	uint64_t flat;
410*91f16700Schasinglulu 	struct nvg_debug_config_channel_t {
411*91f16700Schasinglulu 		uint32_t enter_debug_state_on_mca	: U(1);
412*91f16700Schasinglulu 		uint32_t reserved_31_1			: U(31);
413*91f16700Schasinglulu 		uint32_t reserved_63_32			: U(32);
414*91f16700Schasinglulu 	} bits;
415*91f16700Schasinglulu } nvg_debug_config_t;
416*91f16700Schasinglulu 
417*91f16700Schasinglulu typedef union {
418*91f16700Schasinglulu 	uint64_t flat;
419*91f16700Schasinglulu 	struct {
420*91f16700Schasinglulu 		uint32_t uncorr				: U(1);
421*91f16700Schasinglulu 		uint32_t corr				: U(1);
422*91f16700Schasinglulu 		uint32_t reserved_31_2			: U(30);
423*91f16700Schasinglulu 		uint32_t reserved_63_32			: U(32);
424*91f16700Schasinglulu 	} bits;
425*91f16700Schasinglulu } nvg_hsm_error_ctrl_channel_t;
426*91f16700Schasinglulu 
427*91f16700Schasinglulu extern nvg_debug_config_t nvg_debug_config;
428*91f16700Schasinglulu 
429*91f16700Schasinglulu #endif /* T194_NVG_H */
430