xref: /linux/tools/testing/selftests/vfio/lib/drivers/nv_falcon/hw.h (revision a625b2a387628df94e385faf5c81bf252f304ed9)
1*27fffdfbSRubin Du /* SPDX-License-Identifier: GPL-2.0-only */
2*27fffdfbSRubin Du /*
3*27fffdfbSRubin Du  * Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES.  All rights reserved.
4*27fffdfbSRubin Du  */
5*27fffdfbSRubin Du #ifndef _NV_FALCON_HW_H_
6*27fffdfbSRubin Du #define _NV_FALCON_HW_H_
7*27fffdfbSRubin Du 
8*27fffdfbSRubin Du #include <linux/types.h>
9*27fffdfbSRubin Du 
10*27fffdfbSRubin Du /* PMC (Power Management Controller) Registers */
11*27fffdfbSRubin Du #define NV_PMC_BOOT_0					0x00000000
12*27fffdfbSRubin Du #define NV_PMC_ENABLE					0x00000200
13*27fffdfbSRubin Du #define NV_PMC_ENABLE_PWR				0x00002000
14*27fffdfbSRubin Du #define NV_PMC_ENABLE_HUB				0x20000000
15*27fffdfbSRubin Du 
16*27fffdfbSRubin Du /* Falcon Base Pages for Different Engines */
17*27fffdfbSRubin Du #define NV_PPWR_FALCON_BASE				0x10a000
18*27fffdfbSRubin Du #define NV_PGSP_FALCON_BASE				0x110000
19*27fffdfbSRubin Du 
20*27fffdfbSRubin Du /* Falcon Common Register Offsets (relative to base_page) */
21*27fffdfbSRubin Du #define NV_FALCON_DMACTL_OFFSET				0x010c
22*27fffdfbSRubin Du #define NV_FALCON_ENGINE_RESET_OFFSET			0x03c0
23*27fffdfbSRubin Du 
24*27fffdfbSRubin Du /* DMEM Control Register Flags */
25*27fffdfbSRubin Du #define NV_PPWR_FALCON_DMEMC_AINCR_TRUE			0x01000000
26*27fffdfbSRubin Du #define NV_PPWR_FALCON_DMEMC_AINCW_TRUE			0x02000000
27*27fffdfbSRubin Du 
28*27fffdfbSRubin Du /* Falcon DMEM port offsets (for port 0) */
29*27fffdfbSRubin Du #define NV_FALCON_DMEMC_OFFSET				0x1c0
30*27fffdfbSRubin Du #define NV_FALCON_DMEMD_OFFSET				0x1c4
31*27fffdfbSRubin Du 
32*27fffdfbSRubin Du /* DMA Register Offsets (relative to base_page) */
33*27fffdfbSRubin Du #define NV_FALCON_DMA_ADDR_LOW_OFFSET			0x110
34*27fffdfbSRubin Du #define NV_FALCON_DMA_MEM_OFFSET			0x114
35*27fffdfbSRubin Du #define NV_FALCON_DMA_CMD_OFFSET			0x118
36*27fffdfbSRubin Du #define NV_FALCON_DMA_BLOCK_OFFSET			0x11c
37*27fffdfbSRubin Du #define NV_FALCON_DMA_ADDR_HIGH_OFFSET			0x128
38*27fffdfbSRubin Du 
39*27fffdfbSRubin Du /* DMA Global Address Top Bits Register */
40*27fffdfbSRubin Du #define NV_GPU_DMA_ADDR_TOP_BITS_REG			0x100f04
41*27fffdfbSRubin Du 
42*27fffdfbSRubin Du /* DMA Command Register Bit Definitions */
43*27fffdfbSRubin Du #define NV_FALCON_DMA_CMD_WRITE_BIT			0x20
44*27fffdfbSRubin Du #define NV_FALCON_DMA_CMD_SIZE_SHIFT			8
45*27fffdfbSRubin Du #define NV_FALCON_DMA_CMD_DONE_BIT			0x2
46*27fffdfbSRubin Du 
47*27fffdfbSRubin Du /*
48*27fffdfbSRubin Du  * Falcon DMA is synchronous, so a transfer size and count larger than
49*27fffdfbSRubin Du  * its per-operation maximum adds no value.
50*27fffdfbSRubin Du  */
51*27fffdfbSRubin Du 
52*27fffdfbSRubin Du /* DMA block size and alignment */
53*27fffdfbSRubin Du #define NV_FALCON_DMA_MIN_TRANSFER_SIZE			4
54*27fffdfbSRubin Du #define NV_FALCON_DMA_MAX_TRANSFER_SIZE			256
55*27fffdfbSRubin Du #define NV_FALCON_DMA_BLOCK_SIZE			256
56*27fffdfbSRubin Du #define NV_FALCON_DMA_MAX_TRANSFER_COUNT		1
57*27fffdfbSRubin Du 
58*27fffdfbSRubin Du /* DMACTL register bits */
59*27fffdfbSRubin Du #define NV_FALCON_DMACTL_DMEM_SCRUBBING			0x1
60*27fffdfbSRubin Du #define NV_FALCON_DMACTL_READY_MASK			0x6
61*27fffdfbSRubin Du 
62*27fffdfbSRubin Du /* Falcon Core Selection Register */
63*27fffdfbSRubin Du #define NV_FALCON_CORE_SELECT_OFFSET			0x1668
64*27fffdfbSRubin Du #define NV_FALCON_CORE_SELECT_MASK			0x30
65*27fffdfbSRubin Du 
66*27fffdfbSRubin Du /* Falcon mailbox register (for Ada+ reset check) */
67*27fffdfbSRubin Du #define NV_FALCON_MAILBOX_TEST_OFFSET			0x40c
68*27fffdfbSRubin Du #define NV_FALCON_MAILBOX_RESET_MAGIC			0xbadf5620
69*27fffdfbSRubin Du 
70*27fffdfbSRubin Du /* Falcon Message Queue Register Offsets (relative to base_page) */
71*27fffdfbSRubin Du #define NV_FALCON_QUEUE_HEAD_BASE_OFFSET		0x2c00
72*27fffdfbSRubin Du #define NV_FALCON_QUEUE_TAIL_BASE_OFFSET		0x2c04
73*27fffdfbSRubin Du #define NV_FALCON_QUEUE_STRIDE				0x8
74*27fffdfbSRubin Du #define NV_FALCON_MSG_QUEUE_HEAD_BASE_OFFSET		0x2c80
75*27fffdfbSRubin Du #define NV_FALCON_MSG_QUEUE_TAIL_BASE_OFFSET		0x2c84
76*27fffdfbSRubin Du 
77*27fffdfbSRubin Du /* FSP Falcon Base Pages */
78*27fffdfbSRubin Du #define NV_FSP_FALCON_BASE				0x8f0100
79*27fffdfbSRubin Du /* base_page = cpuctl & ~0xfff */
80*27fffdfbSRubin Du #define NV_FSP_FALCON_BASE_PAGE				0x8f0000
81*27fffdfbSRubin Du #define NV_FSP_EMEM_BASE				0x8f2000
82*27fffdfbSRubin Du 
83*27fffdfbSRubin Du /* FSP EMEM Port Offsets (relative to FSP EMEM base) */
84*27fffdfbSRubin Du #define NV_FSP_EMEMC_OFFSET				0xac0
85*27fffdfbSRubin Du #define NV_FSP_EMEMD_OFFSET				0xac4
86*27fffdfbSRubin Du #define NV_FSP_EMEM_PORT_STRIDE				0x8
87*27fffdfbSRubin Du 
88*27fffdfbSRubin Du /* EMEM Control Register Flags (same as DMEM) */
89*27fffdfbSRubin Du #define NV_FALCON_EMEMC_AINCR				0x01000000
90*27fffdfbSRubin Du #define NV_FALCON_EMEMC_AINCW				0x02000000
91*27fffdfbSRubin Du 
92*27fffdfbSRubin Du /* FSP RPC channel configuration */
93*27fffdfbSRubin Du #define NV_FSP_RPC_CHANNEL_SIZE				1024
94*27fffdfbSRubin Du #define NV_FSP_RPC_MAX_PACKET_SIZE			1024
95*27fffdfbSRubin Du #define NV_FSP_RPC_CHANNEL_HOPPER			2
96*27fffdfbSRubin Du #define NV_FSP_RPC_EMEM_BASE					\
97*27fffdfbSRubin Du 	(NV_FSP_RPC_CHANNEL_HOPPER * NV_FSP_RPC_CHANNEL_SIZE)
98*27fffdfbSRubin Du 
99*27fffdfbSRubin Du /* FSP EMEM port 2 registers (pre-computed for Hopper channel 2) */
100*27fffdfbSRubin Du #define NV_FSP_EMEM_PORT2_CTRL		(NV_FSP_EMEM_BASE + NV_FSP_EMEMC_OFFSET + \
101*27fffdfbSRubin Du 					 NV_FSP_RPC_CHANNEL_HOPPER * NV_FSP_EMEM_PORT_STRIDE)
102*27fffdfbSRubin Du #define NV_FSP_EMEM_PORT2_DATA		(NV_FSP_EMEM_BASE + NV_FSP_EMEMD_OFFSET + \
103*27fffdfbSRubin Du 					 NV_FSP_RPC_CHANNEL_HOPPER * NV_FSP_EMEM_PORT_STRIDE)
104*27fffdfbSRubin Du 
105*27fffdfbSRubin Du /* FSP queue register offsets (pre-computed for Hopper channel 2) */
106*27fffdfbSRubin Du #define NV_FSP_QUEUE_HEAD	\
107*27fffdfbSRubin Du 	(NV_FSP_FALCON_BASE_PAGE + NV_FALCON_QUEUE_HEAD_BASE_OFFSET + \
108*27fffdfbSRubin Du 	 NV_FSP_RPC_CHANNEL_HOPPER * NV_FALCON_QUEUE_STRIDE)
109*27fffdfbSRubin Du #define NV_FSP_QUEUE_TAIL	\
110*27fffdfbSRubin Du 	(NV_FSP_FALCON_BASE_PAGE + NV_FALCON_QUEUE_TAIL_BASE_OFFSET + \
111*27fffdfbSRubin Du 	 NV_FSP_RPC_CHANNEL_HOPPER * NV_FALCON_QUEUE_STRIDE)
112*27fffdfbSRubin Du #define NV_FSP_MSG_QUEUE_HEAD	\
113*27fffdfbSRubin Du 	(NV_FSP_FALCON_BASE_PAGE + NV_FALCON_MSG_QUEUE_HEAD_BASE_OFFSET + \
114*27fffdfbSRubin Du 	 NV_FSP_RPC_CHANNEL_HOPPER * NV_FALCON_QUEUE_STRIDE)
115*27fffdfbSRubin Du #define NV_FSP_MSG_QUEUE_TAIL	\
116*27fffdfbSRubin Du 	(NV_FSP_FALCON_BASE_PAGE + NV_FALCON_MSG_QUEUE_TAIL_BASE_OFFSET + \
117*27fffdfbSRubin Du 	 NV_FSP_RPC_CHANNEL_HOPPER * NV_FALCON_QUEUE_STRIDE)
118*27fffdfbSRubin Du 
119*27fffdfbSRubin Du /* MCTP Header */
120*27fffdfbSRubin Du #define NV_MCTP_HDR_SEID_SHIFT				16
121*27fffdfbSRubin Du #define NV_MCTP_HDR_SEID_MASK				0xff
122*27fffdfbSRubin Du #define NV_MCTP_HDR_SEQ_SHIFT				28
123*27fffdfbSRubin Du #define NV_MCTP_HDR_SEQ_MASK				0x3
124*27fffdfbSRubin Du #define NV_MCTP_HDR_EOM_BIT				0x40000000
125*27fffdfbSRubin Du #define NV_MCTP_HDR_SOM_BIT				0x80000000
126*27fffdfbSRubin Du 
127*27fffdfbSRubin Du /* MCTP Message Header */
128*27fffdfbSRubin Du #define NV_MCTP_MSG_TYPE_SHIFT				0
129*27fffdfbSRubin Du #define NV_MCTP_MSG_TYPE_MASK				0x7f
130*27fffdfbSRubin Du #define NV_MCTP_MSG_TYPE_VENDOR_DEFINED			0x7e
131*27fffdfbSRubin Du #define NV_MCTP_MSG_VENDOR_ID_SHIFT			8
132*27fffdfbSRubin Du #define NV_MCTP_MSG_VENDOR_ID_MASK			0xffff
133*27fffdfbSRubin Du #define NV_MCTP_MSG_VENDOR_ID_NVIDIA			0x10de
134*27fffdfbSRubin Du #define NV_MCTP_MSG_NVDM_TYPE_SHIFT			24
135*27fffdfbSRubin Du #define NV_MCTP_MSG_NVDM_TYPE_MASK			0xff
136*27fffdfbSRubin Du 
137*27fffdfbSRubin Du /* NVDM response type */
138*27fffdfbSRubin Du #define NV_NVDM_TYPE_RESPONSE				0x15
139*27fffdfbSRubin Du 
140*27fffdfbSRubin Du /* Minimum response size: mctp_hdr + msg_hdr + status_hdr + type + status */
141*27fffdfbSRubin Du #define NV_FSP_RPC_MIN_RESPONSE_WORDS			5
142*27fffdfbSRubin Du 
143*27fffdfbSRubin Du /* FBIF (Frame Buffer Interface) Registers */
144*27fffdfbSRubin Du /* Legacy PMU FBIF offsets (Kepler, Maxwell Gen1) */
145*27fffdfbSRubin Du #define NV_PMU_LEGACY_FBIF_CTL_OFFSET			0x624
146*27fffdfbSRubin Du #define NV_PMU_LEGACY_FBIF_TRANSCFG_OFFSET		0x600
147*27fffdfbSRubin Du 
148*27fffdfbSRubin Du /* PMU FBIF offsets */
149*27fffdfbSRubin Du #define NV_PMU_FBIF_CTL_OFFSET				0xe24
150*27fffdfbSRubin Du #define NV_PMU_FBIF_TRANSCFG_OFFSET			0xe00
151*27fffdfbSRubin Du 
152*27fffdfbSRubin Du /* GSP FBIF offsets */
153*27fffdfbSRubin Du #define NV_GSP_FBIF_CTL_OFFSET				0x624
154*27fffdfbSRubin Du #define NV_GSP_FBIF_TRANSCFG_OFFSET			0x600
155*27fffdfbSRubin Du 
156*27fffdfbSRubin Du /* OFA Falcon Base Page and FBIF offsets (used for Hopper+ DMA) */
157*27fffdfbSRubin Du #define NV_OFA_FALCON_BASE				0x844000
158*27fffdfbSRubin Du #define NV_OFA_FBIF_CTL_OFFSET				0x424
159*27fffdfbSRubin Du #define NV_OFA_FBIF_TRANSCFG_OFFSET			0x400
160*27fffdfbSRubin Du 
161*27fffdfbSRubin Du /* OFA DMA support check register (Hopper+) */
162*27fffdfbSRubin Du #define NV_OFA_DMA_SUPPORT_CHECK_REG			0x8443c0
163*27fffdfbSRubin Du 
164*27fffdfbSRubin Du /* FSP NVDM command types */
165*27fffdfbSRubin Du #define NV_NVDM_TYPE_FBDMA				0x22
166*27fffdfbSRubin Du #define NV_FBDMA_SUBCMD_ENABLE				0x1
167*27fffdfbSRubin Du 
168*27fffdfbSRubin Du /* FBIF CTL2 offset (relative to fbif_ctl) */
169*27fffdfbSRubin Du #define NV_FBIF_CTL2_OFFSET				0x60
170*27fffdfbSRubin Du 
171*27fffdfbSRubin Du /* FBIF TRANSCFG register bits */
172*27fffdfbSRubin Du #define NV_FBIF_TRANSCFG_TARGET_MASK			0x3
173*27fffdfbSRubin Du #define NV_FBIF_TRANSCFG_SYSMEM_DEFAULT			0x5
174*27fffdfbSRubin Du 
175*27fffdfbSRubin Du /* FBIF CTL register bits */
176*27fffdfbSRubin Du #define NV_FBIF_CTL_ALLOW_PHYS_MODE			0x10
177*27fffdfbSRubin Du #define NV_FBIF_CTL_ALLOW_FULL_PHYS_MODE		0x80
178*27fffdfbSRubin Du 
179*27fffdfbSRubin Du /* Memory clear register offsets */
180*27fffdfbSRubin Du #define NV_MEM_CLEAR_OFFSET				0x100b20
181*27fffdfbSRubin Du #define NV_BOOT_COMPLETE_OFFSET				0x118234
182*27fffdfbSRubin Du #define NV_BOOT_COMPLETE_SUCCESS			0x3ff
183*27fffdfbSRubin Du 
184*27fffdfbSRubin Du /* FSP boot complete register (Hopper+) */
185*27fffdfbSRubin Du #define NV_FSP_BOOT_COMPLETE_OFFSET			0x200bc
186*27fffdfbSRubin Du #define NV_FSP_BOOT_COMPLETE_SUCCESS			0xff
187*27fffdfbSRubin Du 
188*27fffdfbSRubin Du enum gpu_arch {
189*27fffdfbSRubin Du 	GPU_ARCH_UNKNOWN = -1,
190*27fffdfbSRubin Du 	GPU_ARCH_KEPLER = 0,
191*27fffdfbSRubin Du 	GPU_ARCH_MAXWELL_GEN1,
192*27fffdfbSRubin Du 	GPU_ARCH_MAXWELL_GEN2,
193*27fffdfbSRubin Du 	GPU_ARCH_PASCAL,
194*27fffdfbSRubin Du 	GPU_ARCH_PASCAL_10X,
195*27fffdfbSRubin Du 	GPU_ARCH_VOLTA,
196*27fffdfbSRubin Du 	GPU_ARCH_TURING,
197*27fffdfbSRubin Du 	GPU_ARCH_AMPERE,
198*27fffdfbSRubin Du 	GPU_ARCH_ADA,
199*27fffdfbSRubin Du 	GPU_ARCH_HOPPER,
200*27fffdfbSRubin Du };
201*27fffdfbSRubin Du 
202*27fffdfbSRubin Du enum falcon_type {
203*27fffdfbSRubin Du 	FALCON_TYPE_PMU_LEGACY = 0,
204*27fffdfbSRubin Du 	FALCON_TYPE_PMU,
205*27fffdfbSRubin Du 	FALCON_TYPE_GSP,
206*27fffdfbSRubin Du 	FALCON_TYPE_OFA,
207*27fffdfbSRubin Du };
208*27fffdfbSRubin Du 
209*27fffdfbSRubin Du struct falcon {
210*27fffdfbSRubin Du 	u32 base_page;
211*27fffdfbSRubin Du 	u32 dmactl;
212*27fffdfbSRubin Du 	u32 engine_reset;
213*27fffdfbSRubin Du 	u32 fbif_ctl;
214*27fffdfbSRubin Du 	u32 fbif_ctl2;
215*27fffdfbSRubin Du 	u32 fbif_transcfg;
216*27fffdfbSRubin Du 	u32 dmem_control_reg;
217*27fffdfbSRubin Du 	u32 dmem_data_reg;
218*27fffdfbSRubin Du 	bool no_outside_reset;
219*27fffdfbSRubin Du };
220*27fffdfbSRubin Du 
221*27fffdfbSRubin Du struct gpu_properties {
222*27fffdfbSRubin Du 	u32 pmc_enable_mask;
223*27fffdfbSRubin Du 	bool memory_clear_supported;
224*27fffdfbSRubin Du 	enum falcon_type falcon_type;
225*27fffdfbSRubin Du };
226*27fffdfbSRubin Du 
227*27fffdfbSRubin Du static const u32 verified_gpu_map[] = {
228*27fffdfbSRubin Du 	0x0e40a0a2,	/* K520 */
229*27fffdfbSRubin Du 	0x0e6000a1,	/* GTX660 */
230*27fffdfbSRubin Du 	0x0e63a0a1,	/* K4000 */
231*27fffdfbSRubin Du 	0x0f22d0a1,	/* K80 */
232*27fffdfbSRubin Du 	0x108000a1,	/* GT635 */
233*27fffdfbSRubin Du 	0x117010a2,	/* GTX750 */
234*27fffdfbSRubin Du 	0x117020a2,	/* GTX745 */
235*27fffdfbSRubin Du 	0x124320a1,	/* M60 */
236*27fffdfbSRubin Du 	0x130000a1,	/* P100 */
237*27fffdfbSRubin Du 	0x134000a1,	/* P4 */
238*27fffdfbSRubin Du 	0x132000a1,	/* P40 */
239*27fffdfbSRubin Du 	0x140000a1,	/* V100 */
240*27fffdfbSRubin Du 	0x164000a1,	/* T4 */
241*27fffdfbSRubin Du 	0xb77000a1,	/* A16 */
242*27fffdfbSRubin Du 	0x170000a1,	/* A100 */
243*27fffdfbSRubin Du 	0xb72000a1,	/* A10 */
244*27fffdfbSRubin Du 	0x180000a1,	/* H100 */
245*27fffdfbSRubin Du 	0x194000a1,	/* L4 */
246*27fffdfbSRubin Du 	0x192000a1,	/* L40S */
247*27fffdfbSRubin Du };
248*27fffdfbSRubin Du 
249*27fffdfbSRubin Du #define VERIFIED_GPU_MAP_SIZE ARRAY_SIZE(verified_gpu_map)
250*27fffdfbSRubin Du 
251*27fffdfbSRubin Du static const struct gpu_properties gpu_properties_map[] = {
252*27fffdfbSRubin Du 	[GPU_ARCH_KEPLER] = {
253*27fffdfbSRubin Du 		.pmc_enable_mask = NV_PMC_ENABLE_PWR | NV_PMC_ENABLE_HUB,
254*27fffdfbSRubin Du 		.memory_clear_supported = false,
255*27fffdfbSRubin Du 		.falcon_type = FALCON_TYPE_PMU_LEGACY,
256*27fffdfbSRubin Du 	},
257*27fffdfbSRubin Du 	[GPU_ARCH_MAXWELL_GEN1] = {
258*27fffdfbSRubin Du 		.pmc_enable_mask = NV_PMC_ENABLE_PWR | NV_PMC_ENABLE_HUB,
259*27fffdfbSRubin Du 		.memory_clear_supported = false,
260*27fffdfbSRubin Du 		.falcon_type = FALCON_TYPE_PMU_LEGACY,
261*27fffdfbSRubin Du 	},
262*27fffdfbSRubin Du 	[GPU_ARCH_MAXWELL_GEN2] = {
263*27fffdfbSRubin Du 		.pmc_enable_mask = NV_PMC_ENABLE_PWR,
264*27fffdfbSRubin Du 		.memory_clear_supported = false,
265*27fffdfbSRubin Du 		.falcon_type = FALCON_TYPE_PMU,
266*27fffdfbSRubin Du 	},
267*27fffdfbSRubin Du 	[GPU_ARCH_PASCAL] = {
268*27fffdfbSRubin Du 		.pmc_enable_mask = NV_PMC_ENABLE_PWR,
269*27fffdfbSRubin Du 		.memory_clear_supported = false,
270*27fffdfbSRubin Du 		.falcon_type = FALCON_TYPE_PMU,
271*27fffdfbSRubin Du 	},
272*27fffdfbSRubin Du 	[GPU_ARCH_PASCAL_10X] = {
273*27fffdfbSRubin Du 		.pmc_enable_mask = 0,
274*27fffdfbSRubin Du 		.memory_clear_supported = false,
275*27fffdfbSRubin Du 		.falcon_type = FALCON_TYPE_PMU,
276*27fffdfbSRubin Du 	},
277*27fffdfbSRubin Du 	[GPU_ARCH_VOLTA] = {
278*27fffdfbSRubin Du 		.pmc_enable_mask = 0,
279*27fffdfbSRubin Du 		.memory_clear_supported = false,
280*27fffdfbSRubin Du 		.falcon_type = FALCON_TYPE_GSP,
281*27fffdfbSRubin Du 	},
282*27fffdfbSRubin Du 	[GPU_ARCH_TURING] = {
283*27fffdfbSRubin Du 		.pmc_enable_mask = 0,
284*27fffdfbSRubin Du 		.memory_clear_supported = true,
285*27fffdfbSRubin Du 		.falcon_type = FALCON_TYPE_GSP,
286*27fffdfbSRubin Du 	},
287*27fffdfbSRubin Du 	[GPU_ARCH_AMPERE] = {
288*27fffdfbSRubin Du 		.pmc_enable_mask = 0,
289*27fffdfbSRubin Du 		.memory_clear_supported = true,
290*27fffdfbSRubin Du 		.falcon_type = FALCON_TYPE_GSP,
291*27fffdfbSRubin Du 	},
292*27fffdfbSRubin Du 	[GPU_ARCH_ADA] = {
293*27fffdfbSRubin Du 		.pmc_enable_mask = 0,
294*27fffdfbSRubin Du 		.memory_clear_supported = true,
295*27fffdfbSRubin Du 		.falcon_type = FALCON_TYPE_PMU,
296*27fffdfbSRubin Du 	},
297*27fffdfbSRubin Du 	[GPU_ARCH_HOPPER] = {
298*27fffdfbSRubin Du 		.pmc_enable_mask = 0,
299*27fffdfbSRubin Du 		.memory_clear_supported = true,
300*27fffdfbSRubin Du 		.falcon_type = FALCON_TYPE_OFA,
301*27fffdfbSRubin Du 	},
302*27fffdfbSRubin Du };
303*27fffdfbSRubin Du 
304*27fffdfbSRubin Du static const struct falcon falcon_map[] = {
305*27fffdfbSRubin Du 	[FALCON_TYPE_PMU_LEGACY] = {
306*27fffdfbSRubin Du 		.base_page = NV_PPWR_FALCON_BASE,
307*27fffdfbSRubin Du 		.dmactl = NV_PPWR_FALCON_BASE + NV_FALCON_DMACTL_OFFSET,
308*27fffdfbSRubin Du 		.engine_reset = NV_PPWR_FALCON_BASE + NV_FALCON_ENGINE_RESET_OFFSET,
309*27fffdfbSRubin Du 		.fbif_ctl = NV_PPWR_FALCON_BASE + NV_PMU_LEGACY_FBIF_CTL_OFFSET,
310*27fffdfbSRubin Du 		.fbif_ctl2 = NV_PPWR_FALCON_BASE +
311*27fffdfbSRubin Du 			     NV_PMU_LEGACY_FBIF_CTL_OFFSET + NV_FBIF_CTL2_OFFSET,
312*27fffdfbSRubin Du 		.fbif_transcfg = NV_PPWR_FALCON_BASE + NV_PMU_LEGACY_FBIF_TRANSCFG_OFFSET,
313*27fffdfbSRubin Du 		.dmem_control_reg = NV_PPWR_FALCON_BASE + NV_FALCON_DMEMC_OFFSET,
314*27fffdfbSRubin Du 		.dmem_data_reg = NV_PPWR_FALCON_BASE + NV_FALCON_DMEMD_OFFSET,
315*27fffdfbSRubin Du 		.no_outside_reset = false,
316*27fffdfbSRubin Du 	},
317*27fffdfbSRubin Du 	[FALCON_TYPE_PMU] = {
318*27fffdfbSRubin Du 		.base_page = NV_PPWR_FALCON_BASE,
319*27fffdfbSRubin Du 		.dmactl = NV_PPWR_FALCON_BASE + NV_FALCON_DMACTL_OFFSET,
320*27fffdfbSRubin Du 		.engine_reset = NV_PPWR_FALCON_BASE + NV_FALCON_ENGINE_RESET_OFFSET,
321*27fffdfbSRubin Du 		.fbif_ctl = NV_PPWR_FALCON_BASE + NV_PMU_FBIF_CTL_OFFSET,
322*27fffdfbSRubin Du 		.fbif_ctl2 = NV_PPWR_FALCON_BASE + NV_PMU_FBIF_CTL_OFFSET + NV_FBIF_CTL2_OFFSET,
323*27fffdfbSRubin Du 		.fbif_transcfg = NV_PPWR_FALCON_BASE + NV_PMU_FBIF_TRANSCFG_OFFSET,
324*27fffdfbSRubin Du 		.dmem_control_reg = NV_PPWR_FALCON_BASE + NV_FALCON_DMEMC_OFFSET,
325*27fffdfbSRubin Du 		.dmem_data_reg = NV_PPWR_FALCON_BASE + NV_FALCON_DMEMD_OFFSET,
326*27fffdfbSRubin Du 		.no_outside_reset = false,
327*27fffdfbSRubin Du 	},
328*27fffdfbSRubin Du 	[FALCON_TYPE_GSP] = {
329*27fffdfbSRubin Du 		.base_page = NV_PGSP_FALCON_BASE,
330*27fffdfbSRubin Du 		.dmactl = NV_PGSP_FALCON_BASE + NV_FALCON_DMACTL_OFFSET,
331*27fffdfbSRubin Du 		.engine_reset = NV_PGSP_FALCON_BASE + NV_FALCON_ENGINE_RESET_OFFSET,
332*27fffdfbSRubin Du 		.fbif_ctl = NV_PGSP_FALCON_BASE + NV_GSP_FBIF_CTL_OFFSET,
333*27fffdfbSRubin Du 		.fbif_ctl2 = NV_PGSP_FALCON_BASE + NV_GSP_FBIF_CTL_OFFSET + NV_FBIF_CTL2_OFFSET,
334*27fffdfbSRubin Du 		.fbif_transcfg = NV_PGSP_FALCON_BASE + NV_GSP_FBIF_TRANSCFG_OFFSET,
335*27fffdfbSRubin Du 		.dmem_control_reg = NV_PGSP_FALCON_BASE + NV_FALCON_DMEMC_OFFSET,
336*27fffdfbSRubin Du 		.dmem_data_reg = NV_PGSP_FALCON_BASE + NV_FALCON_DMEMD_OFFSET,
337*27fffdfbSRubin Du 		.no_outside_reset = false,
338*27fffdfbSRubin Du 	},
339*27fffdfbSRubin Du 	[FALCON_TYPE_OFA] = {
340*27fffdfbSRubin Du 		.base_page = NV_OFA_FALCON_BASE,
341*27fffdfbSRubin Du 		.dmactl = NV_OFA_FALCON_BASE + NV_FALCON_DMACTL_OFFSET,
342*27fffdfbSRubin Du 		.engine_reset = NV_OFA_FALCON_BASE + NV_FALCON_ENGINE_RESET_OFFSET,
343*27fffdfbSRubin Du 		.fbif_ctl = NV_OFA_FALCON_BASE + NV_OFA_FBIF_CTL_OFFSET,
344*27fffdfbSRubin Du 		.fbif_ctl2 = NV_OFA_FALCON_BASE + NV_OFA_FBIF_CTL_OFFSET + NV_FBIF_CTL2_OFFSET,
345*27fffdfbSRubin Du 		.fbif_transcfg = NV_OFA_FALCON_BASE + NV_OFA_FBIF_TRANSCFG_OFFSET,
346*27fffdfbSRubin Du 		.dmem_control_reg = NV_OFA_FALCON_BASE + NV_FALCON_DMEMC_OFFSET,
347*27fffdfbSRubin Du 		.dmem_data_reg = NV_OFA_FALCON_BASE + NV_FALCON_DMEMD_OFFSET,
348*27fffdfbSRubin Du 		.no_outside_reset = true,
349*27fffdfbSRubin Du 	},
350*27fffdfbSRubin Du };
351*27fffdfbSRubin Du 
352*27fffdfbSRubin Du #endif /* _NV_FALCON_HW_H_ */
353