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