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