summaryrefslogtreecommitdiffstats
path: root/userspace/sdks/nv570/nvalloc/common
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-13 18:36:21 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-13 18:36:21 -0400
commit00e54c13c7c9030c4d5f7151467f2d85a3730e29 (patch)
tree17a45239df8d2e4912ff3697ed06e85a10b969de /userspace/sdks/nv570/nvalloc/common
downloadopen-iov-00e54c13c7c9030c4d5f7151467f2d85a3730e29.tar.gz
open-iov-00e54c13c7c9030c4d5f7151467f2d85a3730e29.zip
Initial commit: Open-IOV vGPU-IO complete stack
- Firmware decompilation: GSP 570.144W (28.5MB ELF, RV64IMAC), 132 decompiled C files - Kernel modules: nvidia.ko (34MB, OpenRM), open-iov-vfio.ko (2.8MB, VFIO mdev), gsp-vgpu.ko (1.8MB, guest driver) - Userspace: libiov.so/libvgpu.so (76KB), example_vgpu (28KB), rpc_emulator.c - PCI config space emulation (256B with PM, MSI, MSI-X, PCIe caps) - 12 RPC types fully mapped from firmware decompilation - BAR trap, WPR, scheduling, notification, migration emulation - Helper scripts: load_vgpu_stack, create_mdev, launch_qemu_vgpu, test_vgpu_stack, setup_guest_driver, unload_vgpu_stack - Architecture documentation - Wiki: 10 technical documents - Git LFS for large binaries (.ko, .bin, .iso, .img, .o, ghidra repos) - nvidia-open-gpu-kernel-modules as submodule
Diffstat (limited to 'userspace/sdks/nv570/nvalloc/common')
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/conf_compute/cc_keyrotation.h34
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/conf_compute/cc_keystore.h487
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/dev_ctrl_defines.h87
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/flcnifcmn.h141
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/flcnretval.h305
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_caps_query_rpc.h51
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_clock_boost_rpc.h44
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_emem_channels.h39
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_tnvl_rpc.h137
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/fsp/nvdm_payload_cmd_response.h44
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fmc_error_code_formatting.h79
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fw_sr_meta.h74
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fw_wpr_meta.h242
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_proxy_reg.h83
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/gsp/gspifpub.h181
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrdem.h43
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrecc.h119
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrnvl.h1561
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrstruct.h110
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/inforom/omsdef.h116
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/inforom/types.h79
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/mctp_format.h120
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/nv-firmware-chip-family-select.h230
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/nv-firmware.h145
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/nvcst.h460
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/nvdm_format.h63
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/nvpcie.h545
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/nvrangetypes.h162
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi.h2925
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi_impl.h45
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi_priv.h59
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/rmRiscvUcode.h95
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/rm_state_monitor.h72
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/rmflcnbl.h147
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/rmgspseq.h66
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/rmifrif.h123
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/rmlsfm.h579
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/rmpbicmdif.h140
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/sec2/nvdm_payload_cmd_response.h44
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/sec2/sec2_emem_channels.h39
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmrsakeys.h160
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmtransport.h97
-rw-r--r--userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmvendordef.h161
43 files changed, 10533 insertions, 0 deletions
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/conf_compute/cc_keyrotation.h b/userspace/sdks/nv570/nvalloc/common/inc/conf_compute/cc_keyrotation.h
new file mode 100644
index 0000000..473f294
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/conf_compute/cc_keyrotation.h
@@ -0,0 +1,34 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef CC_KEYROTATION_H
+#define CC_KEYROTATION_H
+
+//
+// Default threshold value derived from SECURITY_POLICY_ATTACKER_ADVANTAGE_DEFAULT
+// Minimum threshold defined based on minimum in confComputeSetKeyRotation.
+//
+#define KEY_ROTATION_MINIMUM_INTERNAL_THRESHOLD (134217727u)
+#define KEY_ROTATION_DEFAULT_INTERNAL_THRESHOLD (24296003999ull)
+
+#endif // CC_KEYROTATION_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/conf_compute/cc_keystore.h b/userspace/sdks/nv570/nvalloc/common/inc/conf_compute/cc_keystore.h
new file mode 100644
index 0000000..c629050
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/conf_compute/cc_keystore.h
@@ -0,0 +1,487 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef CC_KEYSTORE_H
+#define CC_KEYSTORE_H
+
+//
+// Keys are typically grouped in two's so that the first key is used for CPU-to-GPU encryption
+// and the second key is used for GPU-to-CPU encryption.
+//
+
+// Keyspace identifiers.
+enum
+{
+ CC_KEYSPACE_GSP,
+ CC_KEYSPACE_SEC2,
+ CC_KEYSPACE_LCE0,
+ CC_KEYSPACE_LCE1,
+ CC_KEYSPACE_LCE2,
+ CC_KEYSPACE_LCE3,
+ CC_KEYSPACE_LCE4,
+ CC_KEYSPACE_LCE5,
+ CC_KEYSPACE_LCE6,
+ CC_KEYSPACE_LCE7,
+ CC_KEYSPACE_LCE10,
+ CC_KEYSPACE_LCE11,
+ CC_KEYSPACE_LCE12,
+ CC_KEYSPACE_LCE13,
+ CC_KEYSPACE_LCE14,
+ CC_KEYSPACE_LCE15,
+ CC_KEYSPACE_LCE16,
+ CC_KEYSPACE_LCE17,
+ CC_KEYSPACE_SIZE // This is always the last element.
+};
+
+#define CC_KEYSPACE_SIZE_GH100 (CC_KEYSPACE_LCE7 + 1)
+
+enum
+{
+ CC_LKEYID_CPU_GSP_LOCKED_RPC,
+ CC_LKEYID_GSP_CPU_LOCKED_RPC,
+ CC_LKEYID_CPU_GSP_DMA,
+ CC_LKEYID_GSP_CPU_DMA,
+ CC_LKEYID_CPU_GSP_RESERVED1,
+ CC_LKEYID_GSP_CPU_REPLAYABLE_FAULT,
+ CC_LKEYID_CPU_GSP_RESERVED2,
+ CC_LKEYID_GSP_CPU_NON_REPLAYABLE_FAULT,
+ CC_LKEYID_SEC2_GSP_LOCKED_RPC,
+ CC_LKEYID_GSP_SEC2_LOCKED_RPC,
+ CC_LKEYID_CPU_GSP_NVLE_P2P_WRAPPING,
+ CC_LKEYID_GSP_CPU_RESERVED_1,
+ CC_KEYSPACE_GSP_SIZE // This is always the last element.
+};
+// The fault buffers only support GPU-to-CPU encryption, so the CPU-to-GPU encryption slot
+// is left reserved.
+
+#define CC_LKEYID_GSP_CPU_LOCKED_RPC_STR "gsp_cpu_locked_rpc"
+#define CC_LKEYID_CPU_GSP_LOCKED_RPC_STR "cpu_gsp_locked_rpc"
+#define CC_LKEYID_GSP_CPU_DMA_STR "gsp_cpu_dma"
+#define CC_LKEYID_CPU_GSP_DMA_STR "cpu_gsp_dma"
+#define CC_LKEYID_GSP_CPU_REPLAYABLE_FAULT_STR "gsp_cpu_replayable_fault"
+#define CC_LKEYID_GSP_CPU_NON_REPLAYABLE_FAULT_STR "gsp_cpu_non_replayable_fault"
+#define CC_LKEYID_CPU_GSP_NVLE_P2P_WRAPPING_STR "cpu_gsp_nvle_p2p_wrapping"
+
+enum
+{
+ CC_LKEYID_CPU_SEC2_DATA_USER,
+ CC_LKEYID_CPU_SEC2_HMAC_USER,
+ CC_LKEYID_CPU_SEC2_DATA_KERN,
+ CC_LKEYID_CPU_SEC2_HMAC_KERN,
+ CC_LKEYID_CPU_SEC2_DATA_SCRUBBER,
+ CC_LKEYID_CPU_SEC2_HMAC_SCRUBBER,
+ CC_KEYSPACE_SEC2_SIZE // This is always the last element.
+};
+
+#define CC_LKEYID_CPU_SEC2_DATA_USER_STR "cpu_sec2_data_user"
+#define CC_LKEYID_CPU_SEC2_HMAC_USER_STR "cpu_sec2_hmac_user"
+#define CC_LKEYID_CPU_SEC2_DATA_KERN_STR "cpu_sec2_data_kernel"
+#define CC_LKEYID_CPU_SEC2_HMAC_KERN_STR "cpu_sec2_hmac_kernel"
+#define CC_LKEYID_CPU_SEC2_DATA_SCRUBBER_STR "cpu_sec2_data_scrubber"
+#define CC_LKEYID_CPU_SEC2_HMAC_SCRUBBER_STR "cpu_sec2_hmac_scrubber"
+
+enum
+{
+ CC_LKEYID_LCE_H2D_USER,
+ CC_LKEYID_LCE_D2H_USER,
+ CC_LKEYID_LCE_H2D_KERN,
+ CC_LKEYID_LCE_D2H_KERN,
+ CC_LKEYID_LCE_H2D_P2P,
+ CC_LKEYID_LCE_D2H_P2P,
+ CC_KEYSPACE_LCE_SIZE // This is always the last element.
+};
+
+
+#define CC_KEYSPACE_TOTAL_SIZE (CC_KEYSPACE_GSP_SIZE + CC_KEYSPACE_SEC2_SIZE + (16 * CC_KEYSPACE_LCE_SIZE))
+#define CC_LKEYID_LCE0_H2D_USER_STR "Lce00_h2d_user"
+#define CC_LKEYID_LCE0_D2H_USER_STR "Lce00_d2h_user"
+#define CC_LKEYID_LCE0_H2D_KERN_STR "Lce00_h2d_kernel"
+#define CC_LKEYID_LCE0_D2H_KERN_STR "Lce00_d2h_kernel"
+#define CC_LKEYID_LCE0_H2D_P2P_STR "Lce00_h2d_p2p"
+#define CC_LKEYID_LCE0_D2H_P2P_STR "Lce00_d2h_p2p"
+
+#define CC_LKEYID_LCE1_H2D_USER_STR "Lce01_h2d_user"
+#define CC_LKEYID_LCE1_D2H_USER_STR "Lce01_d2h_user"
+#define CC_LKEYID_LCE1_H2D_KERN_STR "Lce01_h2d_kernel"
+#define CC_LKEYID_LCE1_D2H_KERN_STR "Lce01_d2h_kernel"
+#define CC_LKEYID_LCE1_H2D_P2P_STR "Lce01_h2d_p2p"
+#define CC_LKEYID_LCE1_D2H_P2P_STR "Lce01_d2h_p2p"
+
+#define CC_LKEYID_LCE2_H2D_USER_STR "Lce02_h2d_user"
+#define CC_LKEYID_LCE2_D2H_USER_STR "Lce02_d2h_user"
+#define CC_LKEYID_LCE2_H2D_KERN_STR "Lce02_h2d_kernel"
+#define CC_LKEYID_LCE2_D2H_KERN_STR "Lce02_d2h_kernel"
+#define CC_LKEYID_LCE2_H2D_P2P_STR "Lce02_h2d_p2p"
+#define CC_LKEYID_LCE2_D2H_P2P_STR "Lce02_d2h_p2p"
+
+#define CC_LKEYID_LCE3_H2D_USER_STR "Lce03_h2d_user"
+#define CC_LKEYID_LCE3_D2H_USER_STR "Lce03_d2h_user"
+#define CC_LKEYID_LCE3_H2D_KERN_STR "Lce03_h2d_kernel"
+#define CC_LKEYID_LCE3_D2H_KERN_STR "Lce03_d2h_kernel"
+#define CC_LKEYID_LCE3_H2D_P2P_STR "Lce03_h2d_p2p"
+#define CC_LKEYID_LCE3_D2H_P2P_STR "Lce03_d2h_p2p"
+
+#define CC_LKEYID_LCE4_H2D_USER_STR "Lce04_h2d_user"
+#define CC_LKEYID_LCE4_D2H_USER_STR "Lce04_d2h_user"
+#define CC_LKEYID_LCE4_H2D_KERN_STR "Lce04_h2d_kernel"
+#define CC_LKEYID_LCE4_D2H_KERN_STR "Lce04_d2h_kernel"
+#define CC_LKEYID_LCE4_H2D_P2P_STR "Lce04_h2d_p2p"
+#define CC_LKEYID_LCE4_D2H_P2P_STR "Lce04_d2h_p2p"
+
+#define CC_LKEYID_LCE5_H2D_USER_STR "Lce05_h2d_user"
+#define CC_LKEYID_LCE5_D2H_USER_STR "Lce05_d2h_user"
+#define CC_LKEYID_LCE5_H2D_KERN_STR "Lce05_h2d_kernel"
+#define CC_LKEYID_LCE5_D2H_KERN_STR "Lce05_d2h_kernel"
+#define CC_LKEYID_LCE5_H2D_P2P_STR "Lce05_h2d_p2p"
+#define CC_LKEYID_LCE5_D2H_P2P_STR "Lce05_d2h_p2p"
+
+#define CC_LKEYID_LCE6_H2D_USER_STR "Lce06_h2d_user"
+#define CC_LKEYID_LCE6_D2H_USER_STR "Lce06_d2h_user"
+#define CC_LKEYID_LCE6_H2D_KERN_STR "Lce06_h2d_kernel"
+#define CC_LKEYID_LCE6_D2H_KERN_STR "Lce06_d2h_kernel"
+#define CC_LKEYID_LCE6_H2D_P2P_STR "Lce06_h2d_p2p"
+#define CC_LKEYID_LCE6_D2H_P2P_STR "Lce06_d2h_p2p"
+
+#define CC_LKEYID_LCE7_H2D_USER_STR "Lce07_h2d_user"
+#define CC_LKEYID_LCE7_D2H_USER_STR "Lce07_d2h_user"
+#define CC_LKEYID_LCE7_H2D_KERN_STR "Lce07_h2d_kernel"
+#define CC_LKEYID_LCE7_D2H_KERN_STR "Lce07_d2h_kernel"
+#define CC_LKEYID_LCE7_H2D_P2P_STR "Lce07_h2d_p2p"
+#define CC_LKEYID_LCE7_D2H_P2P_STR "Lce07_d2h_p2p"
+
+#define CC_LKEYID_LCE10_H2D_USER_STR "Lce10_h2d_user"
+#define CC_LKEYID_LCE10_D2H_USER_STR "Lce10_d2h_user"
+#define CC_LKEYID_LCE10_H2D_KERN_STR "Lce10_h2d_kernel"
+#define CC_LKEYID_LCE10_D2H_KERN_STR "Lce10_d2h_kernel"
+#define CC_LKEYID_LCE10_H2D_P2P_STR "Lce10_h2d_p2p"
+#define CC_LKEYID_LCE10_D2H_P2P_STR "Lce10_d2h_p2p"
+
+#define CC_LKEYID_LCE11_H2D_USER_STR "Lce11_h2d_user"
+#define CC_LKEYID_LCE11_D2H_USER_STR "Lce11_d2h_user"
+#define CC_LKEYID_LCE11_H2D_KERN_STR "Lce11_h2d_kernel"
+#define CC_LKEYID_LCE11_D2H_KERN_STR "Lce11_d2h_kernel"
+#define CC_LKEYID_LCE11_H2D_P2P_STR "Lce11_h2d_p2p"
+#define CC_LKEYID_LCE11_D2H_P2P_STR "Lce11_d2h_p2p"
+
+#define CC_LKEYID_LCE12_H2D_USER_STR "Lce12_h2d_user"
+#define CC_LKEYID_LCE12_D2H_USER_STR "Lce12_d2h_user"
+#define CC_LKEYID_LCE12_H2D_KERN_STR "Lce12_h2d_kernel"
+#define CC_LKEYID_LCE12_D2H_KERN_STR "Lce12_d2h_kernel"
+#define CC_LKEYID_LCE12_H2D_P2P_STR "Lce12_h2d_p2p"
+#define CC_LKEYID_LCE12_D2H_P2P_STR "Lce12_d2h_p2p"
+
+#define CC_LKEYID_LCE13_H2D_USER_STR "Lce13_h2d_user"
+#define CC_LKEYID_LCE13_D2H_USER_STR "Lce13_d2h_user"
+#define CC_LKEYID_LCE13_H2D_KERN_STR "Lce13_h2d_kernel"
+#define CC_LKEYID_LCE13_D2H_KERN_STR "Lce13_d2h_kernel"
+#define CC_LKEYID_LCE13_H2D_P2P_STR "Lce13_h2d_p2p"
+#define CC_LKEYID_LCE13_D2H_P2P_STR "Lce13_d2h_p2p"
+
+#define CC_LKEYID_LCE14_H2D_USER_STR "Lce14_h2d_user"
+#define CC_LKEYID_LCE14_D2H_USER_STR "Lce14_d2h_user"
+#define CC_LKEYID_LCE14_H2D_KERN_STR "Lce14_h2d_kernel"
+#define CC_LKEYID_LCE14_D2H_KERN_STR "Lce14_d2h_kernel"
+#define CC_LKEYID_LCE14_H2D_P2P_STR "Lce14_h2d_p2p"
+#define CC_LKEYID_LCE14_D2H_P2P_STR "Lce14_d2h_p2p"
+
+#define CC_LKEYID_LCE15_H2D_USER_STR "Lce15_h2d_user"
+#define CC_LKEYID_LCE15_D2H_USER_STR "Lce15_d2h_user"
+#define CC_LKEYID_LCE15_H2D_KERN_STR "Lce15_h2d_kernel"
+#define CC_LKEYID_LCE15_D2H_KERN_STR "Lce15_d2h_kernel"
+#define CC_LKEYID_LCE15_H2D_P2P_STR "Lce15_h2d_p2p"
+#define CC_LKEYID_LCE15_D2H_P2P_STR "Lce15_d2h_p2p"
+
+#define CC_LKEYID_LCE16_H2D_USER_STR "Lce16_h2d_user"
+#define CC_LKEYID_LCE16_D2H_USER_STR "Lce16_d2h_user"
+#define CC_LKEYID_LCE16_H2D_KERN_STR "Lce16_h2d_kernel"
+#define CC_LKEYID_LCE16_D2H_KERN_STR "Lce16_d2h_kernel"
+#define CC_LKEYID_LCE16_H2D_P2P_STR "Lce16_h2d_p2p"
+#define CC_LKEYID_LCE16_D2H_P2P_STR "Lce16_d2h_p2p"
+
+#define CC_LKEYID_LCE17_H2D_USER_STR "Lce17_h2d_user"
+#define CC_LKEYID_LCE17_D2H_USER_STR "Lce17_d2h_user"
+#define CC_LKEYID_LCE17_H2D_KERN_STR "Lce17_h2d_kernel"
+#define CC_LKEYID_LCE17_D2H_KERN_STR "Lce17_d2h_kernel"
+#define CC_LKEYID_LCE17_H2D_P2P_STR "Lce17_h2d_p2p"
+#define CC_LKEYID_LCE17_D2H_P2P_STR "Lce17_d2h_p2p"
+
+// Generate a global key ID from a keyspace (a) and local key ID (b).
+#define CC_GKEYID_GEN(a, b) (NvU32)(((a) << 16) | (b))
+
+// Get the keyspace component from a global key ID.
+#define CC_GKEYID_GET_KEYSPACE(a) (NvU16)((a) >> 16)
+
+// Get the local key ID from a global key ID.
+#define CC_GKEYID_GET_LKEYID(a) (NvU16)((a) & 0xffff)
+
+// Decrement/increment the local key ID portion of a global key ID.
+#define CC_GKEYID_DEC_LKEYID(a) CC_GKEYID_GEN(CC_GKEYID_GET_KEYSPACE((a)), CC_GKEYID_GET_LKEYID((a)) - 1)
+#define CC_GKEYID_INC_LKEYID(a) CC_GKEYID_GEN(CC_GKEYID_GET_KEYSPACE((a)), CC_GKEYID_GET_LKEYID((a)) + 1)
+
+// Get the unqiue string from a global key ID.
+#define CC_GKEYID_GET_STR(a) \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_GSP) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_GSP_CPU_LOCKED_RPC) ? \
+ CC_LKEYID_GSP_CPU_LOCKED_RPC_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_CPU_GSP_LOCKED_RPC) ? \
+ CC_LKEYID_CPU_GSP_LOCKED_RPC_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_GSP_CPU_DMA) ? \
+ CC_LKEYID_GSP_CPU_DMA_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_CPU_GSP_DMA) ? \
+ CC_LKEYID_CPU_GSP_DMA_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_GSP_CPU_REPLAYABLE_FAULT) ? \
+ CC_LKEYID_GSP_CPU_REPLAYABLE_FAULT_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_GSP_CPU_NON_REPLAYABLE_FAULT) ? \
+ CC_LKEYID_GSP_CPU_NON_REPLAYABLE_FAULT_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_CPU_GSP_NVLE_P2P_WRAPPING) ? \
+ CC_LKEYID_CPU_GSP_NVLE_P2P_WRAPPING_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_SEC2) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_CPU_SEC2_DATA_USER) ? \
+ CC_LKEYID_CPU_SEC2_DATA_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_CPU_SEC2_HMAC_USER) ? \
+ CC_LKEYID_CPU_SEC2_HMAC_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_CPU_SEC2_DATA_KERN) ? \
+ CC_LKEYID_CPU_SEC2_DATA_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_CPU_SEC2_HMAC_KERN) ? \
+ CC_LKEYID_CPU_SEC2_HMAC_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_CPU_SEC2_DATA_SCRUBBER) ? \
+ CC_LKEYID_CPU_SEC2_DATA_SCRUBBER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_CPU_SEC2_HMAC_SCRUBBER) ? \
+ CC_LKEYID_CPU_SEC2_HMAC_SCRUBBER_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE0) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE0_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE0_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE0_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE0_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE0_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE0_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE1) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE1_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE1_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE1_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE1_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE1_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE1_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE2) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE2_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE2_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE2_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE2_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE2_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE2_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE3) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE3_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE3_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE3_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE3_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE3_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE3_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE4) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE4_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE4_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE4_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE4_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE4_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE4_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE5) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE5_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE5_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE5_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE5_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE5_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE5_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE6) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE6_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE6_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE6_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE6_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE6_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE6_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE7) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE7_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE7_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE7_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE7_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE7_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE7_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE10) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE10_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE10_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE10_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE10_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE10_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE10_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE11) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE11_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE11_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE11_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE11_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE11_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE11_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE12) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE12_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE12_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE12_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE12_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE12_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE12_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE13) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE13_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE13_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE13_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE13_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE13_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE13_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE14) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE14_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE14_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE14_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE14_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE14_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE14_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE15) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE15_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE15_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE15_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE15_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE15_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE15_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE16) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE16_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE16_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE16_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE16_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE16_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE16_D2H_P2P_STR : NULL : \
+ (CC_GKEYID_GET_KEYSPACE(a) == CC_KEYSPACE_LCE17) ? \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_USER) ? \
+ CC_LKEYID_LCE17_H2D_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_USER) ? \
+ CC_LKEYID_LCE17_D2H_USER_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_KERN) ? \
+ CC_LKEYID_LCE17_H2D_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_KERN) ? \
+ CC_LKEYID_LCE17_D2H_KERN_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_H2D_P2P) ? \
+ CC_LKEYID_LCE17_H2D_P2P_STR : \
+ (CC_GKEYID_GET_LKEYID(a) == CC_LKEYID_LCE_D2H_P2P) ? \
+ CC_LKEYID_LCE17_D2H_P2P_STR : NULL : NULL
+
+#define CC_EXPORT_MASTER_KEY_SIZE_BYTES 32
+
+#define CC_KEYID_PERCHANNEL_INITIAL_KEYSEED "ce_channel"
+#define CC_KEYID_PERCHANNEL_UPDATE_KEYSEED "update_keyseeed"
+#define CC_KEYID_PERCHANNEL_CPU_GPU_UPDATE_KEY "update_key1"
+#define CC_KEYID_PERCHANNEL_GPU_CPU_UPDATE_KEY "update_key2"
+
+#endif // CC_KEYSTORE_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/dev_ctrl_defines.h b/userspace/sdks/nv570/nvalloc/common/inc/dev_ctrl_defines.h
new file mode 100644
index 0000000..fa06bcf
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/dev_ctrl_defines.h
@@ -0,0 +1,87 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*!
+ * @brief Defines for simplifying SW accesses to the dev_ctrl interrupt tree.
+ * These are generic defines ued in addition to architecure-specific
+ * defines in dev_vm_addendum.h
+ *
+ */
+
+//
+// Notes on the terms used below:
+// Subtree: The HW tree is a 64-way tree that consists of 2 TOP level interrupt
+// registers, 32 bits each. Each of these 64 is referred to as a subtree.
+// Leaf: Each of these 64 subtrees are associated with a pair of LEAF registers
+// giving us a total of 128 LEAF registers.
+// GPU vector: The 128 LEAF registers give us a total of (128*32) GPU vectors
+// giving us a total of 4096 GPU vectors
+//
+
+//
+// Given a subtree index, the below macros give us the index of the TOP level
+// register and the bit within the TOP level register to program for that
+// subtree.
+//
+#define NV_CTRL_INTR_SUBTREE_TO_TOP_IDX(i) (((NvU32)(i)) / 32)
+#define NV_CTRL_INTR_SUBTREE_TO_TOP_BIT(i) (((NvU32)(i)) % 32)
+
+//
+// Given a subtree index, the below macros give us the two LEAF register indices
+// that correspond to that subtree.
+//
+#define NV_CTRL_INTR_SUBTREE_TO_LEAF_IDX_START(i) (((NvU32)(i)) * 2)
+#define NV_CTRL_INTR_SUBTREE_TO_LEAF_IDX_END(i) ((((NvU32)(i)) * 2) + 1)
+
+#define NV_CTRL_INTR_LEAF_IDX_TO_SUBTREE(i) (((NvU32)(i)) / 2)
+
+//
+// Given a LEAF register index, the below macros give us the range of GPU
+// interrupt vectors that correspond to those leafs.
+//
+#define NV_CTRL_INTR_LEAF_IDX_TO_GPU_VECTOR_START(i) (((NvU32)(i)) * 32)
+#define NV_CTRL_INTR_LEAF_IDX_TO_GPU_VECTOR_END(i) ((((NvU32)(i)) * 32) + 31)
+
+//
+// Given a GPU interrupt vector, the below macros give us the index of the
+// LEAF register and the bit within the LEAF register to program for that
+// GPU interrupt vector.
+//
+#define NV_CTRL_INTR_GPU_VECTOR_TO_LEAF_REG(i) (((NvU32)(i)) / 32)
+#define NV_CTRL_INTR_GPU_VECTOR_TO_LEAF_BIT(i) (((NvU32)(i)) % 32)
+
+//
+// Given a GPU interrupt vector, the below macro gives us the subtree in which
+// it belongs.
+//
+#define NV_CTRL_INTR_GPU_VECTOR_TO_SUBTREE(i) \
+ ((NV_CTRL_INTR_GPU_VECTOR_TO_LEAF_REG(i)) / 2)
+
+// First index of doorbell which is controlled by VF
+#define NV_CTRL_INTR_GPU_DOORBELL_INDEX_VF_START 2048
+
+// The max number of leaf registers we expect
+#define NV_MAX_INTR_LEAVES 16
+
+// In SW, this specifies an invalid interrupt vector
+#define NV_INTR_VECTOR_INVALID (NV_U32_MAX)
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/flcnifcmn.h b/userspace/sdks/nv570/nvalloc/common/inc/flcnifcmn.h
new file mode 100644
index 0000000..df4ba6c
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/flcnifcmn.h
@@ -0,0 +1,141 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2014-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*!
+ * flcn Command/Message Interfaces - Common
+ */
+
+#ifndef FLCNIFCMN_H
+#define FLCNIFCMN_H
+
+#include "nvtypes.h"
+#include "flcnretval.h"
+
+/*!
+ * @ref NvU64_ALIGN32 , NvU64_ALIGN32_PACK, NvU64_ALIGN32_UNPACK
+ * TODO: Use NV types directly
+ */
+typedef NvU64_ALIGN32 RM_FLCN_U64;
+typedef NvU64_ALIGN32 *PRM_FLCN_U64;
+
+#define RM_FLCN_U64_IS_ZERO NvU64_ALIGN32_IS_ZERO
+#define RM_FLCN_U64_PACK NvU64_ALIGN32_PACK
+#define RM_FLCN_U64_UNPACK NvU64_ALIGN32_UNPACK
+
+/*!
+ * @brief Header preceding each CMD/MSG exchanged through falcon's queues.
+ *
+ * @note Data package sent to falcon are referred as CMDs (commands).
+ * Data package sent by falcon are referred as MSGs (messages).
+ */
+typedef struct
+{
+ /*!
+ * Unit ID identifies falcon's task/unit receiving/issuing this message.
+ */
+ NvU8 unitId;
+ /*!
+ * Total CMD/MSG size (including header).
+ */
+ NvU8 size;
+ /*!
+ * Flags identifying state of CMD/MSG.
+ */
+ NvU8 ctrlFlags;
+ /*!
+ * Sequence # ID to track each request sent to falcon (where applicable).
+ */
+ NvU8 seqNumId;
+} RM_FLCN_QUEUE_HDR,
+*PRM_FLCN_QUEUE_HDR;
+
+/*!
+ * Convenience macro for determining the size of the falcon's queue header:
+ */
+#define RM_FLCN_QUEUE_HDR_SIZE sizeof(RM_FLCN_QUEUE_HDR)
+
+/*!
+ * Generic Falcon rewind unit ID.
+ */
+#define RM_FLCN_UNIT_ID_REWIND (0x00U)
+
+/*!
+ * Generic CMD structure to hold the header.
+ */
+typedef struct
+{
+ RM_FLCN_QUEUE_HDR hdr;
+ NvU32 cmd;
+} RM_FLCN_CMD_GEN;
+
+/*!
+ * Generic MSG structure to hold the header.
+ */
+typedef struct
+{
+ RM_FLCN_QUEUE_HDR hdr;
+ NvU32 msg;
+} RM_FLCN_MSG_GEN;
+
+/*!
+ * Convenience macros for determining the size of body for a command or message:
+ */
+#define RM_FLCN_CMD_BODY_SIZE(u,t) sizeof(RM_FLCN_##u##_CMD_##t)
+#define RM_FLCN_MSG_BODY_SIZE(u,t) sizeof(RM_FLCN_##u##_MSG_##t)
+
+/*!
+ * Convenience macros for determining the size of a command or message:
+ */
+#define RM_FLCN_CMD_SIZE(u,t) \
+ (RM_FLCN_QUEUE_HDR_SIZE + RM_FLCN_CMD_BODY_SIZE(u,t))
+
+#define RM_FLCN_MSG_SIZE(u,t) \
+ (RM_FLCN_QUEUE_HDR_SIZE + RM_FLCN_MSG_BODY_SIZE(u,t))
+
+/*!
+ * Convenience macros for determining the type of a command or message
+ * (intended to be used symmetrically with the CMD and MSG _SIZE macros):
+ */
+#define RM_FLCN_CMD_TYPE(u,t) RM_FLCN_##u##_CMD_ID_##t
+#define RM_FLCN_MSG_TYPE(u,t) RM_FLCN_##u##_MSG_ID_##t
+
+/*!
+ * @brief Falcons' queue header flags (@ref RM_FLCN_QUEUE_HDR::ctrlFlags).
+ *
+ * RM_FLCN_QUEUE_FLAGS_STATUS
+ * Set by command's sender to request back message confirming the completion of
+ * command's execution. In RM->FLCN communication response is required to free
+ * command related data tracked within RM (***_SEQ_INFO).
+ *
+ * RM_FLCN_QUEUE_HDR_FLAGS_EVENT
+ * Set by the falcon to distinguish messages sent to RM from command responses.
+ *
+ * RM_FLCN_QUEUE_HDR_FLAGS_UNIT_ACK
+ * Used internally within the falcon to track completed commands when updating
+ * get (tail) command queue pointers.
+ */
+#define RM_FLCN_QUEUE_HDR_FLAGS_STATUS NVBIT(0)
+#define RM_FLCN_QUEUE_HDR_FLAGS_EVENT NVBIT(2)
+#define RM_FLCN_QUEUE_HDR_FLAGS_UNIT_ACK NVBIT(5)
+
+#endif // FLCNIFCMN_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/flcnretval.h b/userspace/sdks/nv570/nvalloc/common/inc/flcnretval.h
new file mode 100644
index 0000000..0e1efe5
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/flcnretval.h
@@ -0,0 +1,305 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2008-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*!
+ * @file flcnretval.h
+ * @brief Defines various status codes that are convenient to relay status
+ * information in functions.
+ */
+
+#ifndef FLCNRETVAL_H
+#define FLCNRETVAL_H
+
+#include "nvtypes.h"
+/*!
+ * Defines a generic type that may be used to convey status information. This
+ * is very similar to the RM_STATUS type but smaller in width to save DMEM and
+ * stack space.
+ */
+typedef NvU8 FLCN_STATUS;
+
+#define FLCN_OK (0x00U)
+#define FLCN_ERR_BINARY_NOT_STARTED (0xFEU)
+#define FLCN_ERROR (0xFFU)
+
+#define FLCN_ERR_NOT_SUPPORTED (0x01U)
+#define FLCN_ERR_INVALID_ARGUMENT (0x02U)
+#define FLCN_ERR_ILLEGAL_OPERATION (0x03U)
+#define FLCN_ERR_TIMEOUT (0x04U)
+#define FLCN_ERR_NO_FREE_MEM (0x05U)
+#define FLCN_ERR_HDCP_INVALID_SRM (0x06U)
+#define FLCN_ERR_HDCP_RECV_REVOKED (0x07U)
+#define FLCN_ERR_RPC_INVALID_INPUT (0x08U)
+#define FLCN_ERR_DMA_SUSPENDED (0x09U)
+#define FLCN_ERR_MUTEX_ACQUIRED (0x10U)
+#define FLCN_ERR_MUTEX_ID_NOT_AVAILABLE (0x11U)
+#define FLCN_ERR_OBJECT_NOT_FOUND (0x12U)
+#define FLCN_ERR_MSGBOX_TIMEOUT (0x13U)
+#define FLCN_ERR_INVALID_INDEX (0x14U)
+#define FLCN_ERR_INVALID_FUNCTION (0x15U)
+#define FLCN_ERR_INSUFFICIENT_PMB_PLM_PROTECTION (0x16U)
+#define FLCN_ERR_DMA_NACK (0x17U)
+#define FLCN_ERR_CHIP_NOT_SUPPORTED_FOR_PR (0x18U)
+#define FLCN_ERR_BAR0_PRIV_READ_ERROR (0x19U)
+#define FLCN_ERR_BAR0_PRIV_WRITE_ERROR (0x1AU)
+#define FLCN_ERR_HDCP22_ABORT_AUTHENTICATION (0x1BU)
+#define FLCN_ERR_DPU_IS_BUSY (0x1CU)
+#define FLCN_ERR_DPU_TIMEOUT_FOR_HDCP_TYPE1_LOCK_REQUEST (0x1DU)
+#define FLCN_ERR_HDCP_TYPE1_LOCK_FAILED (0x1EU)
+#define FLCN_ERR_HDCP_TYPE1_LOCK_UNKNOWN (0x1FU)
+#define FLCN_ERR_WAIT_FOR_BAR0_IDLE_FAILED (0x20U)
+#define FLCN_ERR_CSB_PRIV_READ_ERROR (0x21U)
+#define FLCN_ERR_CSB_PRIV_WRITE_ERROR (0x22U)
+#define FLCN_ERR_DMA_UNEXPECTED_DMAIDX (0x23U)
+#define FLCN_ERR_PRIV_SEC_VIOLATION (0x24U)
+#define FLCN_ERR_INVALID_VERSION (0x25U)
+#define FLCN_ERR_PR_SHARED_STRUCT_INIT_FAILED (0x26U)
+#define FLCN_ERR_GPU_IN_DEBUG_MODE (0x27U)
+#define FLCN_ERR_HPD_UNPLUG (0x28U)
+#define FLCN_ERR_HDCP22_DELAY_ABORT_AUTHENTICATION (0x29U)
+#define FLCN_ERR_SECUREBUS_REGISTER_READ_ERROR (0x2AU)
+#define FLCN_ERR_SECUREBUS_REGISTER_WRITE_ERROR (0x2BU)
+#define FLCN_ERR_HDCP22_FLUSH_TYPE_LOCK_ACTIVE (0x2CU)
+#define FLCN_ERR_HDCP22_FLUSH_TYPE_IN_PROGRESS (0x2DU)
+#define FLCN_ERR_FEATURE_NOT_ENABLED (0x2EU)
+#define FLCN_ERR_OUT_OF_RANGE (0x2FU)
+
+// I2C Errors
+#define FLCN_ERR_I2C_BUSY (0x30U)
+#define FLCN_ERR_I2C_NACK_ADDRESS (0x31U)
+#define FLCN_ERR_I2C_NACK_BYTE (0x32U)
+#define FLCN_ERR_I2C_SIZE (0x33U)
+#define FLCN_ERR_I2C_BUS_INVALID (0x34U)
+
+#define FLCN_ERR_INVALID_STATE (0x35U)
+#define FLCN_ERR_RECURSION_LIMIT_EXCEEDED (0x36U)
+#define FLCN_ERR_INVALID_CAST (0x37U)
+
+// AUX Errors
+#define FLCN_ERR_AUX_ERROR (0x3AU)
+#define FLCN_ERR_AUX_SEMA_ACQUIRED (0x3BU)
+#define FLCN_ERR_AUX_SEMA_INVALID_RELEASE (0x3CU)
+#define FLCN_ERR_AUX_DEFER_TIMEOUT (0x3DU)
+#define FLCN_ERR_MORE_PROCESSING_REQUIRED (0x3EU)
+#define FLCN_ERR_DMA_ALIGN (0x3FU)
+
+// Power-Device Errors
+#define FLCN_ERR_PWR_DEVICE_TAMPERED (0x40U)
+
+#define FLCN_ERR_ITERATION_END (0x41U)
+
+// Perf change sequence Errors
+#define FLCN_ERR_LOCK_NOT_AVAILABLE (0x42U)
+
+#define FLCN_ERR_STATE_RESET_NEEDED (0x43U)
+#define FLCN_ERR_DMA_GENERIC (0x44U)
+#define FLCN_ERR_LS_CHK_UCODE_REVOKED (0x45U)
+#define FLCN_ERR_ACC_SEQ_MISMATCH (0x46U)
+#define FLCN_ERR_SSP_STACK_CHECK_FAILED (0x47U)
+#define FLCN_ERR_SE_TRNG_FAILED (0x48U)
+#define FLCN_ERR_PROD_MODE_NOT_YET_SUPPORTED (0x49U)
+
+// SHA HW errors
+#define FLCN_ERR_SHA_HW_CHECK_INT_STATUS (0x4AU)
+#define FLCN_ERR_SHA_HW_SOFTRESET_REQUIRED (0x4BU)
+#define FLCN_ERR_SHA_HW_SOFTRESET_FAILED (0x4CU)
+#define FLCN_ERR_SHA_HW_BUSY (0x4DU)
+
+//
+// Add new generic error codes here, do not changes values of exiting error codes,
+// because that will affect other binaries and their signatures
+//
+#define FLCN_ERR_CTXSW_ERROR (0x4EU)
+#define FLCN_ERR_SE_SNPKA_HW_CRYPTO_OPERATION_FAILED (0x4FU)
+
+// VPR SEC2 task errors
+#define FLCN_ERR_VPR_APP_INVALID_REQUEST_END_ADDR (0x51U)
+#define FLCN_ERR_VPR_APP_INVALID_REQUEST_START_ADDR (0x52U)
+#define FLCN_ERR_VPR_APP_SCRUB_VERIF_FAILED (0x53U)
+#define FLCN_ERR_VPR_APP_MEMLOCK_ALREADY_SET (0x54U)
+#define FLCN_ERR_VPR_APP_INVALID_INDEX (0x55U)
+#define FLCN_ERR_VPR_APP_UNEXPECTED_VPR_HANDOFF_FROM_SCRUBBER (0x56U)
+#define FLCN_ERR_VPR_APP_CBC_RANGE_CLASH (0x57U)
+#define FLCN_ERR_VPR_APP_NOT_SUPPORTED_BY_HW (0x58U)
+#define FLCN_ERR_VPR_APP_NOT_SUPPORTED_BY_SW (0x59U)
+#define FLCN_ERR_VPR_APP_DISPLAY_VERSION_NOT_SUPPORTED (0x5AU)
+#define FLCN_ERR_VPR_APP_VPR_WPR_WRITE_FAILED (0x5BU)
+#define FLCN_ERR_VPR_APP_NOTHING_TO_DO (0x5CU)
+#define FLCN_ERR_VPR_APP_DISPLAY_NOT_PRESENT (0x5DU)
+#define FLCN_ERR_VPR_APP_PREVIOUS_CMD_FAILED_AS_MAX_VPR_IS_0 (0x5EU)
+#define FLCN_ERR_VPR_APP_PLM_PROTECTION_NOT_RAISED (0x5FU)
+#define FLCN_ERR_VPR_APP_PLM_PROTECTION_ALREADY_RAISED (0x60U)
+#define FLCN_ERR_VPR_APP_DISP_FALCON_IS_NOT_IN_LS_MODE (0x61U)
+#define FLCN_ERR_VPR_APP_VPR_IS_ALREADY_ENABLED (0x62U)
+#define FLCN_ERR_VPR_APP_UNEXPECTEDLY_RUNNING_ON_RISCV (0x63U)
+#define FLCN_ERR_INVALID_SR_CONFIGURATION (0x64U)
+#define FLCN_ERR_VPR_CMD_NOT_SUPPORTED (0x65U)
+
+// Clocks Errors
+#define FLCN_ERR_CYCLE_DETECTED (0x70U)
+#define FLCN_ERR_INVALID_PATH (0x71U)
+#define FLCN_ERR_MISMATCHED_TARGET (0x72U)
+#define FLCN_ERR_FREQ_NOT_SUPPORTED (0x73U)
+#define FLCN_ERR_INVALID_SOURCE (0x74U)
+#define FLCN_ERR_NOT_INITIALIZED (0x75U)
+#define FLCN_ERR_CLOCK_NOT_SETTLED (0x76U)
+
+// HDCP2.2 Errors
+#define FLCN_ERR_HDCP22_GETDKEY_FAILED (0x80U)
+#define FLCN_ERR_HDCP22_H_PRIME (0x81U)
+#define FLCN_ERR_HDCP22_CERT_RX (0x82U)
+#define FLCN_ERR_HDCP22_PAIRING (0x83U)
+#define FLCN_ERR_HDCP22_L_PRIME (0x84U)
+#define FLCN_ERR_HDCP22_V_PRIME (0x85U)
+#define FLCN_ERR_HDCP22_INVALID_RXIDLIST (0x86U)
+#define FLCN_ERR_HDCP22_M_PRIME (0x87U)
+#define FLCN_ERR_HDCP22_SEQ_ROLLOVER (0x88U)
+#define FLCN_ERR_HDCP22_RSA_HW (0x89U)
+#define FLCN_ERR_HDCP22_ECF_TIMESLOT_MISMATCH (0x90U)
+
+// LibCCC Errors
+#define FLCN_ERR_INIT_CRYPTO_DEVICE_FAILED (0x91U)
+#define FLCN_ERR_NVPKA_SELECT_ENGINE_FAILED (0x92U)
+#define FLCN_ERR_NVPKA_ACQUIRE_MUTEX_FAILED (0x93U)
+#define FLCN_ERR_NVPKA_MODULAR_EXP_LOCK_FAILED (0x94U)
+#define FLCN_ERR_NVRNG_INIT_CRYPTO_DEVICE_FAILED (0x95U)
+#define FLCN_ERR_NVRNG_SELECT_ENGINE_FAILED (0x96U)
+#define FLCN_ERR_NVRNG_GENERATE_FAILED (0x97U)
+#define FLCN_ERR_NVPKA_ECDSA_INIT_FAILED (0x98U)
+#define FLCN_ERR_NVPKA_ECDSA_SIGN_FAILED (0x99U)
+#define FLCN_ERR_NVPKA_GET_ECC_KEY_PAIR_FAILED (0x9AU)
+
+// Heavy Secure Errors
+#define FLCN_ERR_HS_CHK_INVALID_INPUT (0xA0U)
+#define FLCN_ERR_HS_CHK_CHIP_NOT_SUPPORTED (0xA1U)
+#define FLCN_ERR_HS_CHK_UCODE_REVOKED (0xA2U)
+#define FLCN_ERR_HS_CHK_NOT_IN_LSMODE (0xA3U)
+#define FLCN_ERR_HS_CHK_INVALID_LS_PRIV_LEVEL (0xA4U)
+#define FLCN_ERR_HS_CHK_INVALID_REGIONCFG (0xA5U)
+#define FLCN_ERR_HS_CHK_PRIV_SEC_DISABLED_ON_PROD (0xA6U)
+#define FLCN_ERR_HS_CHK_SW_FUSING_ALLOWED_ON_PROD (0xA7U)
+#define FLCN_ERR_HS_CHK_INTERNAL_SKU_ON_PROD (0xA8U)
+#define FLCN_ERR_HS_CHK_DEVID_OVERRIDE_ENABLED_ON_PROD (0xA9U)
+#define FLCN_ERR_HS_CHK_INCONSISTENT_PROD_MODES (0xAAU)
+#define FLCN_ERR_HS_CHK_HUB_ENCRPTION_DISABLED (0xABU)
+#define FLCN_ERR_HS_PR_ILLEGAL_LASSAHS_STATE_AT_HS_ENTRY (0xACU)
+#define FLCN_ERR_HS_PR_ILLEGAL_LASSAHS_STATE_AT_MPK_DECRYPT (0xADU)
+#define FLCN_ERR_HS_PR_ILLEGAL_LASSAHS_STATE_AT_HS_EXIT (0xAEU)
+#define FLCN_ERR_HS_PROD_MODE_NOT_YET_SUPPORTED (0xAFU)
+#define FLCN_ERR_HS_DEV_VERSION_ON_PROD (0xB0U)
+#define FLCN_ERR_HS_PR_LASSAHS_LS_SIG_GRP_MISMATCH (0xB1U)
+#define FLCN_ERR_HS_PR_LASSAHS_LS_SIG_GRP_OVERLAYS_CNT (0xB2U)
+#define FLCN_ERR_HS_PR_LASSAHS_LS_SIG_GRP_INVALID_VA (0xB3U)
+#define FLCN_ERR_HS_MUTEX_ACQUIRE_FAILED (0xB4U)
+#define FLCN_ERR_HS_MUTEX_RELEASE_FAILED (0xB5U)
+#define FLCN_ERR_HS_PR_MPK_DEC_NEEDS_NEWER_ACR_UDE_SCRUBBER (0xB6U)
+#define FLCN_ERR_HS_CHK_ENGID_MISMATCH (0xB7U)
+#define FLCN_ERR_HS_OPT_INTERNAL_SKU_CHECK_FAILED (0xB8U)
+#define FLCN_ERR_HS_CHK_BOARD_MISMATCH (0xB9U)
+#define FLCN_ERR_HS_CHK_DISP_ENG_DISABLED (0xBAU)
+#define FLCN_ERR_HS_GEN_RANDOM (0xBBU)
+#define FLCN_ERR_HS_CHK_IMPROPERLY_FUSED_BOARD (0xBCU)
+#define FLCN_ERR_HS_CHK_HDCP_DISABLED (0xBDU)
+#define FLCN_ERR_HS_CHK_HDCP_BLACKLISTED_SKU (0XBEU)
+#define FLCN_ERR_HS_SECURE_ACTION_ARG_CHECK_FAILED (0xBFU)
+#define FLCN_ERR_HS_CHK_RETURN_PC_AT_HS_ENTRY_IS_OF_HS (0xC0U)
+#define FLCN_ERR_HS_CHK_HS_LIB_ENTRY_CALLED_BY_NON_HS (0xC1U)
+#define FLCN_ERR_HS_DECODE_TRAP_ALREADY_IN_USE (0xC2U)
+#define FLCN_ERR_HS_REGISTER_READ_WRITE_ERROR (0xC3U)
+#define FLCN_ERR_HS_CHK_CPUCTL_ALIAS_FALSE (0xC4U)
+#define FLCN_ERR_HS_UPDATE_RESET_PLM_ERROR (0xC5U)
+#define FLCN_ERR_HS_RNG_CONFIG_ERROR (0xC6U)
+#define FLCN_ERR_HS_CHK_NOT_IN_HSMODE (0xC7U)
+#define FLCN_ERR_HS_CHK_GFW_CHAIN_OF_TRUST_BROKEN (0xC8U)
+#define FLCN_ERR_HS_HDCP22_WRONG_SEQUENCE (0xC9U)
+#define FLCN_ERR_HS_HDCP22_INTEGRITY_ERROR (0xCAU)
+#define FLCN_ERR_HS_HDCP22_WRONG_TYPE (0xCBU)
+#define FLCN_ERR_HS_APM_NOT_ENABLED (0xCCU)
+#define FLCN_ERR_HS_APM_SMC_ENABLED (0xCDU)
+#define FLCN_ERR_HS_APM_FECS_NOT_HALTED (0xCEU)
+#define FLCN_ERR_HS_APM_SCRATCH_PLM_INVALID (0xCFU)
+#define FLCN_ERR_HS_APM_SCRATCH_INIT_INVALID (0xD0U)
+#define FLCN_ERR_HS_INVALID_KEY (0xD1U)
+#define FLCN_ERR_HS_SWKG_INVALID_SIGNATURE (0xD2U)
+#define FLCN_ERR_HS_SCP_LIB_DMHASH_FAILED (0xD3U)
+#define FLCN_ERR_HS_SCP_LIB_AESKDF_FAILED (0xD4U)
+#define FLCN_ERR_INSUFFICIENT_NOPS (0xD5U)
+
+//
+// BAR0/CSB Priv Read/Write Error Handling Defines
+// These need to be defined by HW - NV Bug 200198584
+//
+#define FLCN_BAR0_PRIV_PRI_ERROR_MASK 0xFFF00000U
+#define FLCN_BAR0_PRIV_PRI_ERROR_CODE 0xBAD00000U
+#define FLCN_BAR0_PRIV_PRI_RETURN_VAL 0x00BADBADU
+
+#define FLCN_CSB_PRIV_PRI_ERROR_MASK 0xFFFF0000U
+#define FLCN_CSB_PRIV_PRI_ERROR_CODE 0xBADF0000U
+
+//
+// Macro to check FALCON return status
+//
+#define CHECK_FLCN_STATUS(expr) do { \
+ flcnStatus = (expr); \
+ if (flcnStatus != FLCN_OK) \
+ { \
+ goto ErrorExit; \
+ } \
+ } while (NV_FALSE)
+
+// Warnings.
+#define FLCN_WARN_NOTHING_TO_DO (0xD0U)
+#define FLCN_WARN_NOT_QUERIED (0xD1U)
+#define FLCN_WARN_DATA_NOT_AVAILABLE (0xD2U)
+
+// Queue handling Errors
+#define FLCN_ERR_QUEUE_MGMT_INVALID_UNIT_ID (0xE0U)
+#define FLCN_ERR_QUEUE_MGMT_HEAP_MIRROR_ERR (0xE1U)
+#define FLCN_ERR_QUEUE_TASK_INVALID_EVENT_TYPE (0xE2U)
+#define FLCN_ERR_QUEUE_TASK_INVALID_UNIT_ID (0xE3U)
+#define FLCN_ERR_QUEUE_TASK_INVALID_CMD_TYPE (0xE4U)
+#define FLCN_ERR_QUEUE_TASK_SLOT_NOT_AVAILABLE (0xE5U)
+
+// Posted write errors
+#define FLCN_ERR_POSTED_WRITE_FAILURE (0xF0U)
+#define FLCN_ERR_POSTED_WRITE_INTERRUPTS_ENABLED (0xF1U)
+#define FLCN_ERR_POSTED_WRITE_PRI_CLUSTER_COUNT_MISMATCH (0xF2U)
+#define FLCN_ERR_POSTED_WRITE_INCORRECT_PARAMS (0xF3U)
+
+// Lane Margining errors
+#define FLCN_ERR_LM_INVALID_RECEIVER_NUMBER (0xF5U)
+
+// APM errors
+#define FLCN_ERR_APM_NOT_FUSED_FOR_EK (0xF6U)
+#define FLCN_ERR_APM_BROM_SIGN_FAIL (0xF7U)
+// Booter Reload on SEC2-RTOS errors
+#define FLCN_ERR_AUTH_GSP_RM_HANDOFF_FAILED (0xF8U)
+#define FLCN_ERR_INVALID_WPRMETA_MAGIC_OR_REVISION (0xF9U)
+
+// Arithmetic errors
+#define FLCN_ERR_ARITHMETIC_OVERFLOW (0xFAU)
+
+// Pri errros
+#define FLCN_ERR_OUTSTANDING_PRI_ERROR (0xFBU)
+
+#endif // FLCNRETVAL_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_caps_query_rpc.h b/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_caps_query_rpc.h
new file mode 100644
index 0000000..dc4f887
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_caps_query_rpc.h
@@ -0,0 +1,51 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef FSP_CAPS_QUERY_RPC_H
+#define FSP_CAPS_QUERY_RPC_H
+
+#include "fsp/nvdm_payload_cmd_response.h"
+
+#pragma pack(1)
+
+ /*!
+ * @biief Capability query payload command to FSP
+ */
+typedef struct
+{
+ NvU8 subMessageId;
+} FSP_CAPS_QUERY_RPC_PAYLOAD_PARAMS;
+
+/*!
+ * @brief Capability query response payload for FSP capability query
+ */
+typedef struct
+{
+ NvU8 nvdmType;
+ NVDM_PAYLOAD_COMMAND_RESPONSE cmdResponse;
+ NvU8 rspPayload[4];
+} FSP_CAPS_QUERY_RESPONSE_PAYLOAD_PARAMS;
+
+#pragma pack()
+
+#endif // FSP_CAPS_QUERY_RPC_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_clock_boost_rpc.h b/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_clock_boost_rpc.h
new file mode 100644
index 0000000..7564fb6
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_clock_boost_rpc.h
@@ -0,0 +1,44 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef FSP_CLOCK_BOOST_RPC_H
+#define FSP_CLOCK_BOOST_RPC_H
+
+
+#define FSP_CLOCK_BOOST_FEATURE_DISABLE_SUBMESSAGE_ID 0x0
+#define FSP_CLOCK_BOOST_FEATURE_ENABLE_SUBMESSAGE_ID 0x1
+#define FSP_CLOCK_BOOST_TRIGGER_RESTORE_SUBMESSAGE_ID 0x2
+
+#pragma pack(1)
+
+ /*!
+ * @brief Clock Boost payload command to FSP
+ */
+typedef struct
+{
+ NvU8 subMessageId;
+} FSP_CLOCK_BOOST_RPC_PAYLOAD_PARAMS;
+
+#pragma pack()
+
+#endif // FSP_CLOCK_BOOST_RPC_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_emem_channels.h b/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_emem_channels.h
new file mode 100644
index 0000000..912eeae
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_emem_channels.h
@@ -0,0 +1,39 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _FSP_EMEM_CHANNELS_H_
+#define _FSP_EMEM_CHANNELS_H_
+
+//
+// NVDM (NVIDIA Data Model) overlayed on MCTP (Management Component Transport
+// Protocol) and sent over EMEM is the communication mechanism used between FSP
+// management partition and CPU-RM/other uprocs.
+//
+
+// RM uses channel 0 for FSP EMEM.
+#define FSP_EMEM_CHANNEL_RM 0x0
+
+// EMEM channel 0 (RM) is allocated 1K bytes.
+#define FSP_EMEM_CHANNEL_RM_SIZE 1024
+
+#endif // _FSP_EMEM_CHANNELS_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_tnvl_rpc.h b/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_tnvl_rpc.h
new file mode 100644
index 0000000..73e3034
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/fsp/fsp_tnvl_rpc.h
@@ -0,0 +1,137 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _FSP_TNVL_RPC_H_
+#define _FSP_TNVL_RPC_H_
+
+#define TNVL_CAPS_SUBMESSAGE_ID 0xFF
+#define TNVL_GET_ATT_CERTS_SUBMESSAGE_ID 0x0
+#define TNVL_GET_ATT_REPORT_SUBMESSAGE_ID 0x1
+#define TNVL_LOCK_CONFIG_SUBMESSAGE_ID 0x2
+
+#define NVSWITCH_IK_HASH_LENGTH (48)
+#define NVSWITCH_ATT_CERT_SIZE_FIELD_LENGTH (2)
+#define NVSWITCH_ATT_RSVD1_FIELD_LENGTH (2)
+
+#pragma pack(1)
+
+ /*!
+ * @brief TNVL payload to query FSP capabilities
+ */
+typedef struct
+{
+ NvU8 subMessageId;
+} TNVL_RPC_CAPS_PAYLOAD;
+
+/*!
+ * @brief TNVL response payload for FSP capability query
+ */
+typedef struct
+{
+ NvU8 nvdmType;
+ NVDM_PAYLOAD_COMMAND_RESPONSE cmdResponse;
+ NvU8 rspPayload[40];
+} TNVL_RPC_CAPS_RSP_PAYLOAD;
+
+ /*!
+ * @brief TNVL payload to query attestation cert chain
+ */
+typedef struct
+{
+ NvU8 subMessageId;
+ NvU8 rsvd;
+ NvU8 minorVersion;
+ NvU8 majorVersion;
+} TNVL_GET_ATT_CERTS_CMD_PAYLOAD;
+
+/*!
+ * @brief TNVL response payload for attestation cert chain
+ */
+typedef struct
+{
+ NvU8 nvdmType;
+ NVDM_PAYLOAD_COMMAND_RESPONSE cmdResponse;
+ NvU8 subMessageId;
+ NvU8 rsvd0;
+ NvU8 minorVersion;
+ NvU8 majorVersion;
+ NvU16 certChainLength;
+ NvU16 rsvd1;
+ NvU8 devIkHash[NVSWITCH_IK_HASH_LENGTH];
+ NvU8 certChain[NVSWITCH_ATTESTATION_CERT_CHAIN_MAX_SIZE];
+} TNVL_GET_ATT_CERTS_RSP_PAYLOAD;
+
+ /*!
+ * @brief TNVL payload to query attestation report
+ */
+typedef struct
+{
+ NvU8 subMessageId;
+ NvU8 rsvd;
+ NvU8 minorVersion;
+ NvU8 majorVersion;
+ NvU8 nonce[NVSWITCH_NONCE_SIZE];
+} TNVL_GET_ATT_REPORT_CMD_PAYLOAD;
+
+/*!
+ * @brief TNVL response payload for attestation report
+ */
+typedef struct
+{
+ NvU8 nvdmType;
+ NVDM_PAYLOAD_COMMAND_RESPONSE cmdResponse;
+ NvU8 subMessageId;
+ NvU8 rsvd0;
+ NvU8 minorVersion;
+ NvU8 majorVersion;
+ NvU32 measurementSize;
+ NvU8 measurementBuffer[NVSWITCH_ATTESTATION_REPORT_MAX_SIZE];
+} TNVL_GET_ATT_REPORT_RSP_PAYLOAD;
+
+/*!
+ * @brief TNVL payload to send lock config
+ */
+typedef struct
+{
+ NvU8 subMessageId;
+ NvU8 rsvd;
+ NvU8 minorVersion;
+ NvU8 majorVersion;
+} TNVL_LOCK_CONFIG_CMD_PAYLOAD;
+
+/*!
+ * @brief TNVL response payload for lock config
+ */
+typedef struct
+{
+ NvU8 nvdmType;
+ NVDM_PAYLOAD_COMMAND_RESPONSE cmdResponse;
+ NvU8 subMessageId;
+ NvU8 rsvd0;
+ NvU8 minorVersion;
+ NvU8 majorVersion;
+} TNVL_LOCK_CONFIG_RSP_PAYLOAD;
+
+#pragma pack()
+
+#endif // _FSP_TNVL_RPC_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/fsp/nvdm_payload_cmd_response.h b/userspace/sdks/nv570/nvalloc/common/inc/fsp/nvdm_payload_cmd_response.h
new file mode 100644
index 0000000..fa117aa
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/fsp/nvdm_payload_cmd_response.h
@@ -0,0 +1,44 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * @file nvdm_payload_cmd_response.h
+ * @brief Header file containing the definition for the
+ * NVDM_PAYLOAD_COMMAND_RESPONSE structure, which
+ * is required for SMBPBI-specific payloads and needs
+ * to be visible by bothe the PMU and the driver sides.
+ */
+
+#ifndef _NVDM_PAYLOAD_CMD_RESPONSE_H
+#define _NVDM_PAYLOAD_CMD_RESPONSE_H
+
+#pragma pack(1)
+typedef struct
+{
+ NvU32 taskId;
+ NvU32 commandNvdmType;
+ NvU32 errorCode;
+} NVDM_PAYLOAD_COMMAND_RESPONSE;
+#pragma pack()
+
+#endif // _NVDM_PAYLOAD_CMD_RESPONSE_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fmc_error_code_formatting.h b/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fmc_error_code_formatting.h
new file mode 100644
index 0000000..2f0a51b
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fmc_error_code_formatting.h
@@ -0,0 +1,79 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef GSP_FMC_ERROR_CODES_FORMATTING_H
+#define GSP_FMC_ERROR_CODES_FORMATTING_H
+
+//================================================================================
+// DRF Field Definitions for NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR
+// These define the bit ranges for the register fields.
+//================================================================================
+
+// Error code layout
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_VARIANT 31:28
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_PARTITION 27:24
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_PAYLOAD 23:0
+
+// Fields within the PAYLOAD for Variant 0 (SK)
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_SK_ERROR 15:8
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_SK_PHASE 7:0
+
+// Fields within the PAYLOAD for Variant 1 (Generic)
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_GENERIC_ADDITIONAL_INFO 23:16
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_GENERIC_ERROR_CODE 15:0
+
+// Error code layout for safety
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_VARIANT_XMSB 31
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_VARIANT_XLSB 28
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_PARTITION_XMSB 27
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_PARTITION_XLSB 24
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_PAYLOAD_XMSB 23
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_PAYLOAD_XLSB 0
+
+// Fields within the PAYLOAD for Variant 0 (SK) for safety
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_SK_ERROR_XMSB 15
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_SK_ERROR_XLSB 8
+
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_SK_PHASE_XMSB 7
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_SK_PHASE_XLSB 0
+
+// Fields within the PAYLOAD for Variant 1 (Generic) for safety
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_GENERIC_ADDITIONAL_INFO_XMSB 23
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_GENERIC_ADDITIONAL_INFO_XLSB 16
+
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_GENERIC_ERROR_CODE_XMSB 15
+#define NV_PBUS_SW_SCRATCH_GSP_FMC_ERROR_GENERIC_ERROR_CODE_XLSB 0
+
+//================================================================================
+// Constant Values
+//================================================================================
+
+// Partition ID Encoding Logic
+#define GSP_FMC_PARTITION_ID_MASK 0xFU
+#define GSP_FMC_PARTITION_ID_OFFSET 1U
+
+// Error Variants / Versions
+#define GSP_FMC_ERROR_VARIANT_SK 0U
+#define GSP_FMC_ERROR_VARIANT_GENERIC 1U
+
+#endif /* GSP_FMC_ERROR_CODES_FORMATTING_H */
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fw_sr_meta.h b/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fw_sr_meta.h
new file mode 100644
index 0000000..22a0ef7
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fw_sr_meta.h
@@ -0,0 +1,74 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+#ifndef GSP_FW_SR_META_H_
+#define GSP_FW_SR_META_H_
+
+#define GSP_FW_SR_META_MAGIC 0x8a3bb9e6c6c39d93ULL
+#define GSP_FW_SR_META_REVISION 2
+
+#define GSP_FW_SR_META_INTERNAL_SIZE 128
+
+/*!
+ * GSP firmware SR metadata
+ *
+ * Initialized by CPU-RM and kept in Sysmem.
+ * Consumed by secure ucode (Booter or ACR_RISCV).
+ */
+typedef struct
+{
+ // Magic for verification by secure ucode
+ NvU64 magic; // = GSP_FW_SR_META_MAGIC;
+
+ //
+ // Revision number
+ // Bumped up when we change this interface so it is not backward compatible.
+ //
+ NvU64 revision; // = GSP_FW_SR_META_MAGIC_REVISION;
+
+ // Members regarding data in SYSMEM
+ NvU64 sysmemAddrOfSuspendResumeData;
+ NvU64 sizeOfSuspendResumeData;
+
+ //
+ // Internal members for use by secure ucode
+ // Must be exactly GSP_FW_SR_META_INTERNAL_SIZE bytes.
+ //
+ NvU32 internal[32];
+
+ // Same as flags of GspFwWprMeta
+ NvU32 flags;
+
+ // Subrevision number used by secure ucode
+ NvU32 subrevision;
+
+ //
+ // Pad structure to exactly 256 bytes (1 DMA chunk).
+ // Padding initialized to zero.
+ //
+ NvU32 padding[22];
+} GspFwSRMeta;
+
+#endif // GSP_FW_SR_META_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fw_wpr_meta.h b/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fw_wpr_meta.h
new file mode 100644
index 0000000..35293d1
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_fw_wpr_meta.h
@@ -0,0 +1,242 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+#ifndef GSP_FW_WPR_META_H_
+#define GSP_FW_WPR_META_H_
+
+/*!
+ * GSP firmware WPR metadata
+ *
+ * Initialized by CPU-RM and DMA'd to FB, at the end of what will be WPR2.
+ * Verified, and locked in WPR2 by Booter.
+ *
+ * Firmware scrubs the last 256mb of FB, no memory outside of this region
+ * may be used until the FW RM has scrubbed the remainder of memory.
+ *
+ * ---------------------------- <- fbSize (end of FB, 1M aligned)
+ * | VGA WORKSPACE |
+ * ---------------------------- <- vbiosReservedOffset (64K? aligned)
+ * | (potential align. gap) |
+ * ---------------------------- <- gspFwWprEnd + frtsSize + pmuReservedSize
+ * | PMU mem reservation |
+ * ---------------------------- <- gspFwWprEnd (128K aligned) + frtsSize
+ * | FRTS data | (frtsSize is 0 on GA100)
+ * | ------------------------ | <- frtsOffset
+ * | BOOT BIN (e.g. SK + BL) |
+ * ---------------------------- <- bootBinOffset
+ * | GSP FW ELF |
+ * ---------------------------- <- gspFwOffset
+ * | GSP FW (WPR) HEAP |
+ * ---------------------------- <- gspFwHeapOffset
+ * | Booter-placed metadata |
+ * | (struct GspFwWprMeta) |
+ * ---------------------------- <- gspFwWprStart (128K aligned)
+ * | GSP FW (non-WPR) HEAP |
+ * ---------------------------- <- nonWprHeapOffset, gspFwRsvdStart
+ * (GSP_CARVEOUT_SIZE bytes from end of FB)
+ */
+typedef struct
+{
+ // Magic
+ // BL to use for verification (i.e. Booter locked it in WPR2)
+ NvU64 magic; // = 0xdc3aae21371a60b3;
+
+ // Revision number of Booter-BL-Sequencer handoff interface
+ // Bumped up when we change this interface so it is not backward compatible.
+ // Bumped up when we revoke GSP-RM ucode
+ NvU64 revision; // = 1;
+
+ // ---- Members regarding data in SYSMEM ----------------------------
+ // Consumed by Booter for DMA
+
+ NvU64 sysmemAddrOfRadix3Elf;
+ NvU64 sizeOfRadix3Elf;
+
+ NvU64 sysmemAddrOfBootloader;
+ NvU64 sizeOfBootloader;
+
+ // Offsets inside bootloader image needed by Booter
+ NvU64 bootloaderCodeOffset;
+ NvU64 bootloaderDataOffset;
+ NvU64 bootloaderManifestOffset;
+
+ union
+ {
+ // Used only at initial boot
+ struct
+ {
+ NvU64 sysmemAddrOfSignature;
+ NvU64 sizeOfSignature;
+ };
+
+ //
+ // Used at suspend/resume to read GspFwHeapFreeList
+ // Offset relative to GspFwWprMeta FBMEM PA (gspFwWprStart)
+ //
+ struct
+ {
+ NvU32 gspFwHeapFreeListWprOffset;
+ NvU32 unused0;
+ NvU64 unused1;
+ };
+ };
+
+ // ---- Members describing FB layout --------------------------------
+ NvU64 gspFwRsvdStart;
+
+ NvU64 nonWprHeapOffset;
+ NvU64 nonWprHeapSize;
+
+ NvU64 gspFwWprStart;
+
+ // GSP-RM to use to setup heap.
+ NvU64 gspFwHeapOffset;
+ NvU64 gspFwHeapSize;
+
+ // BL to use to find ELF for jump
+ NvU64 gspFwOffset;
+ // Size is sizeOfRadix3Elf above.
+
+ NvU64 bootBinOffset;
+ // Size is sizeOfBootloader above.
+
+ NvU64 frtsOffset;
+ NvU64 frtsSize;
+
+ NvU64 gspFwWprEnd;
+
+ // GSP-RM to use for fbRegionInfo?
+ NvU64 fbSize;
+
+ // ---- Other members -----------------------------------------------
+
+ // GSP-RM to use for fbRegionInfo?
+ NvU64 vgaWorkspaceOffset;
+ NvU64 vgaWorkspaceSize;
+
+ // Boot count. Used to determine whether to load the firmware image.
+ NvU64 bootCount;
+
+ // This union is organized the way it is to start at an 8-byte boundary and achieve natural
+ // packing of the internal struct fields.
+ union
+ {
+ struct
+ {
+ // TODO: the partitionRpc* fields below do not really belong in this
+ // structure. The values are patched in by the partition bootstrapper
+ // when GSP-RM is booted in a partition, and this structure was a
+ // convenient place for the bootstrapper to access them. These should
+ // be moved to a different comm. mechanism between the bootstrapper
+ // and the GSP-RM tasks.
+
+ // Shared partition RPC memory (physical address)
+ NvU64 partitionRpcAddr;
+
+ // Offsets relative to partitionRpcAddr
+ NvU16 partitionRpcRequestOffset;
+ NvU16 partitionRpcReplyOffset;
+
+ // Code section and dataSection offset and size.
+ NvU32 elfCodeOffset;
+ NvU32 elfDataOffset;
+ NvU32 elfCodeSize;
+ NvU32 elfDataSize;
+
+ // Used during GSP-RM resume to check for revocation
+ NvU32 lsUcodeVersion;
+ };
+
+ struct
+ {
+ // Pad for the partitionRpc* fields, plus 4 bytes
+ NvU32 partitionRpcPadding[4];
+
+ // CrashCat (contiguous) buffer size/location - occupies same bytes as the
+ // elf(Code|Data)(Offset|Size) fields above.
+ // TODO: move to GSP_FMC_INIT_PARAMS
+ NvU64 sysmemAddrOfCrashReportQueue;
+ NvU32 sizeOfCrashReportQueue;
+
+ // Pad for the lsUcodeVersion field
+ NvU32 lsUcodeVersionPadding[1];
+ };
+ };
+
+ // Number of VF partitions allocating sub-heaps from the WPR heap
+ // Used during boot to ensure the heap is adequately sized
+ NvU8 gspFwHeapVfPartitionCount;
+
+ // Flags to help decide GSP-FW flow.
+ NvU8 flags;
+
+ // Pad structure to exactly 256 bytes. Can replace padding with additional
+ // fields without incrementing revision. Padding initialized to 0.
+ NvU8 padding[2];
+
+ //
+ // Starts at gspFwWprEnd+frtsSize b/c FRTS is positioned
+ // to end where this allocation starts (when RM requests FSP to create
+ // FRTS).
+ //
+ NvU32 pmuReservedSize;
+
+ // BL to use for verification (i.e. Booter says OK to boot)
+ NvU64 verified; // 0x0 -> unverified, 0xa0a0a0a0a0a0a0a0 -> verified
+} GspFwWprMeta;
+
+#define GSP_FW_WPR_META_VERIFIED 0xa0a0a0a0a0a0a0a0ULL
+#define GSP_FW_WPR_META_REVISION 1
+#define GSP_FW_WPR_META_MAGIC 0xdc3aae21371a60b3ULL
+
+#define GSP_FW_WPR_HEAP_FREE_REGION_COUNT 128
+
+typedef struct
+{
+ //
+ // offset relative to GspFwWprMeta FBMEM PA
+ // describes a region at [offs, offs + length)
+ //
+ NvU32 offs; // start, inclusive
+ NvU32 length;
+} GspFwHeapFreeRegion;
+
+typedef struct
+{
+ NvU64 magic;
+ NvU32 nregions;
+ GspFwHeapFreeRegion regions[GSP_FW_WPR_HEAP_FREE_REGION_COUNT];
+} GspFwHeapFreeList;
+
+#define GSP_FW_HEAP_FREE_LIST_MAGIC 0x4845415046524545ULL
+
+#define GSP_FW_FLAGS 8:0
+#define GSP_FW_FLAGS_CLOCK_BOOST NVBIT(0)
+#define GSP_FW_FLAGS_RECOVERY_MARGIN_PRESENT NVBIT(1)
+#define GSP_FW_FLAGS_PPCIE_ENABLED NVBIT(2)
+#define GSP_FW_FLAGS_MULTI_GPU_NVLE_ENABLED NVBIT(3)
+#define GSP_FW_FLAGS_SCAN_RECOVERY_MARGIN NVBIT(4)
+
+#endif // GSP_FW_WPR_META_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_proxy_reg.h b/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_proxy_reg.h
new file mode 100644
index 0000000..28aad84
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/gsp/gsp_proxy_reg.h
@@ -0,0 +1,83 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef NVGSP_PROXY_REG_H
+#define NVGSP_PROXY_REG_H
+
+#if !defined(NVRISCV_LIBFSP_BUILD) || !NVRISCV_LIBFSP_BUILD
+
+#define NVGSP_PROXY_REG_CONFIDENTIAL_COMPUTE 0:0
+#define NVGSP_PROXY_REG_CONFIDENTIAL_COMPUTE_DISABLE 0x00000000
+#define NVGSP_PROXY_REG_CONFIDENTIAL_COMPUTE_ENABLE 0x00000001
+
+#define NVGSP_PROXY_REG_CONF_COMPUTE_EARLY_INIT 1:1
+#define NVGSP_PROXY_REG_CONF_COMPUTE_EARLY_INIT_DISABLE 0x00000000
+#define NVGSP_PROXY_REG_CONF_COMPUTE_EARLY_INIT_ENABLE 0x00000001
+
+#define NVGSP_PROXY_REG_CONF_COMPUTE_DEV_MODE 2:2
+#define NVGSP_PROXY_REG_CONF_COMPUTE_DEV_MODE_DISABLE 0x00000000
+#define NVGSP_PROXY_REG_CONF_COMPUTE_DEV_MODE_ENABLE 0x00000001
+
+#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE 5:3
+#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE_NONE 0x00000000
+#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE_PROTECTED_PCIE 0x00000001
+#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE_NVLE 0x00000002
+
+#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION 6:6
+#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION_DISABLE 0x00000000
+#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION_ENABLE 0x00000001
+
+#else
+#define NVGSP_PROXY_REG_CONFIDENTIAL_COMPUTE 0U:0U
+#define NVGSP_PROXY_REG_CONFIDENTIAL_COMPUTE_XLSB 0U
+#define NVGSP_PROXY_REG_CONFIDENTIAL_COMPUTE_XMSB 0U
+#define NVGSP_PROXY_REG_CONFIDENTIAL_COMPUTE_DISABLE 0x00000000U
+#define NVGSP_PROXY_REG_CONFIDENTIAL_COMPUTE_ENABLE 0x00000001U
+
+#define NVGSP_PROXY_REG_CONF_COMPUTE_EARLY_INIT 1U:1U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_EARLY_INIT_XLSB 1U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_EARLY_INIT_XMSB 1U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_EARLY_INIT_DISABLE 0x00000000U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_EARLY_INIT_ENABLE 0x00000001U
+
+#define NVGSP_PROXY_REG_CONF_COMPUTE_DEV_MODE 2U:2U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_DEV_MODE_XLSB 2U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_DEV_MODE_XMSB 2U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_DEV_MODE_DISABLE 0x00000000U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_DEV_MODE_ENABLE 0x00000001U
+
+#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE 5U:3U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE_XLSB 3U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE_XMSB 5U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE_NONE 0x00000000U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE_PROTECTED_PCIE 0x00000001U
+#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE_NVLE 0x00000002U
+
+#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION 6U:6U
+#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION_XLSB 6U
+#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION_XMSB 6U
+#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION_DISABLE 0x00000000U
+#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION_ENABLE 0x00000001U
+
+#endif // !defined(NVRISCV_LIBFSP_BUILD) || !NVRISCV_LIBFSP_BUILD
+#endif // NVGSP_PROXY_REG_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/gsp/gspifpub.h b/userspace/sdks/nv570/nvalloc/common/inc/gsp/gspifpub.h
new file mode 100644
index 0000000..b366a9d
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/gsp/gspifpub.h
@@ -0,0 +1,181 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef GSPIFPUB_H
+#define GSPIFPUB_H
+
+#include <nvtypes.h>
+
+/*!
+ * @file gspifpub.h
+ * @brief GSP Command/Message Interfaces - Published
+ */
+
+/*!
+ * Target physical memory apertures supported for DMA
+ */
+typedef enum {
+ GSP_DMA_TARGET_LOCAL_FB,
+ GSP_DMA_TARGET_COHERENT_SYSTEM,
+ GSP_DMA_TARGET_NONCOHERENT_SYSTEM,
+ GSP_DMA_TARGET_COUNT
+} GSP_DMA_TARGET;
+
+/*!
+ * @brief GSP-CC Microcode Initialization Parameters
+ */
+typedef struct GSP_FMC_INIT_PARAMS
+{
+ // CC initialization "registry keys"
+ NvU32 regkeys;
+} GSP_FMC_INIT_PARAMS;
+
+/*!
+ * @brief GSP-ACR BOOT_GSP_RM Command Parameters
+ *
+ * The wprCarveout fields have no effect in environments where the WPR can be allocated
+ * implicitly by ACR.
+ */
+typedef struct GSP_ACR_BOOT_GSP_RM_PARAMS
+{
+ // Physical memory aperture through which gspRmDescPa is accessed
+ GSP_DMA_TARGET target;
+ // Size in bytes of the GSP-RM descriptor structure
+ NvU32 gspRmDescSize;
+ // Physical offset in the target aperture of the GSP-RM descriptor structure
+ NvU64 gspRmDescOffset;
+ // Physical offset in FB to set the start of the WPR containing GSP-RM
+ NvU64 wprCarveoutOffset;
+ // Size in bytes of the WPR containing GSP-RM
+ NvU32 wprCarveoutSize;
+ // Whether to boot GSP-RM or GSP-Proxy through ACR
+ NvBool bIsGspRmBoot;
+ // Whether inst-in-sys mode is enabled or not
+ NvBool bInstInSysMode;
+} GSP_ACR_BOOT_GSP_RM_PARAMS;
+
+/*!
+ * @brief GSP-RM Parameters
+ */
+typedef struct GSP_RM_PARAMS
+{
+ // Physical memory aperture through which bootArgsOffset is accessed
+ GSP_DMA_TARGET target;
+ // Physical offset in the memory aperture that will be passed to GSP-RM
+ NvU64 bootArgsOffset;
+} GSP_RM_PARAMS;
+
+/*!
+ * @brief GSP-SPDM Parameters
+ *
+ * Parameters required to set up a communication mechanism between Kernel-RM
+ * and SPDM partition inside GSP.
+ */
+typedef struct GSP_SPDM_PARAMS
+{
+ // Physical Memory Aperture through which all addresses are accessed
+ GSP_DMA_TARGET target;
+
+ // Physical offset in the memory aperture where SPDM payload is stored
+ NvU64 payloadBufferOffset;
+
+ // Size of the above payload buffer
+ NvU32 payloadBufferSize;
+} GSP_SPDM_PARAMS;
+
+typedef struct GSP_RM_MEM_PARAMS
+{
+ NvU32 flushSysmemAddrValLo;
+ NvU32 flushSysmemAddrValHi;
+} GSP_RM_MEM_PARAMS;
+
+/*!
+ * @brief GSP-CC Microcode Parameters for Boot Partitions
+ */
+typedef struct GSP_FMC_BOOT_PARAMS
+{
+ GSP_FMC_INIT_PARAMS initParams;
+ GSP_ACR_BOOT_GSP_RM_PARAMS bootGspRmParams;
+ GSP_RM_PARAMS gspRmParams;
+ GSP_SPDM_PARAMS gspSpdmParams;
+ GSP_RM_MEM_PARAMS gspRmMemParams;
+} GSP_FMC_BOOT_PARAMS;
+
+/*!
+ * @brief Inform KeyMgr about which slots needs to be refreshed
+ */
+typedef enum {
+ //
+ // KeyMgr will program the received rotated session key in spare (the once which is not being used for
+ // current crypto flow) Rx key slot of all ports
+ //
+ refreshRxKeySlot,
+ //
+ // KeyMgr will program the received rotated session key in Tx key slot of all ports and flip the epoch
+ // to start using new session key for crypto flow
+ //
+ refreshTxKeySlot
+} sessionKeyRefreshStage;
+
+/*!
+ * @brief Definitions for messages to GSP which will convey NVLE programming keys
+ */
+#define RM_GSP_NVLE_CMD_ID_UPDATE_SESSION_KEYS (0x80)
+#define RM_GSP_NVLE_CMD_ID_REFRESH_SESSION_KEYS (0x81)
+#define RM_GSP_NVLE_SESSION_KEY_ENTRY_SET_COUNT (1)
+#define RM_GSP_NVLE_AES_256_GCM_KEY_SIZE_BYTES (32)
+#define RM_GSP_NVLE_AES_256_GCM_KEY_SIZE_DWORDS (RM_GSP_NVLE_AES_256_GCM_KEY_SIZE_BYTES / sizeof(NvU32))
+#define RM_GSP_NVLE_CMD_TAG_SIZE_BYTES (16)
+#define RM_GSP_NVLE_CMD_TAG_SIZE_DWORDS (RM_GSP_NVLE_CMD_TAG_SIZE_BYTES / sizeof(NvU32))
+
+typedef struct
+{
+ NvU32 remoteGpuClid;
+ NvU32 remoteGpuAlid;
+ NvU32 key[RM_GSP_NVLE_AES_256_GCM_KEY_SIZE_DWORDS];
+ //
+ // Epoch will inform which keyslot<0,1> is spare in case of refreshRxKeySlot stage and the epoch to which
+ // the Tx key slot needs to switch to in case of refreshTxKeySlot stage. Epoch is provided only when
+ // keyslot needs to be refreshed and keymgr will implicitly use epoch = 0 during setup stage
+ //
+ NvU8 epoch;
+ NvBool bValid;
+} RM_GSP_NVLE_SESSION_KEY_ENTRY;
+
+typedef struct
+{
+ NvU32 cmdId;
+ NvBool bForKeyRotation; // To be deprecated
+ RM_GSP_NVLE_SESSION_KEY_ENTRY wrappedKeyEntries[RM_GSP_NVLE_SESSION_KEY_ENTRY_SET_COUNT];
+ NvU32 keyEntriesTag[RM_GSP_NVLE_CMD_TAG_SIZE_DWORDS];
+} RM_GSP_NVLE_UPDATE_SESSION_KEYS;
+
+typedef struct
+{
+ NvU32 cmdId;
+ sessionKeyRefreshStage stage; // Inform KeyMgr about which slots needs to be programmmed
+ RM_GSP_NVLE_SESSION_KEY_ENTRY wrappedKeyEntries[RM_GSP_NVLE_SESSION_KEY_ENTRY_SET_COUNT];
+ NvU32 keyEntriesTag[RM_GSP_NVLE_CMD_TAG_SIZE_DWORDS];
+} RM_GSP_NVLE_REFRESH_SESSION_KEYS;
+
+#endif // GSPIFPUB_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrdem.h b/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrdem.h
new file mode 100644
index 0000000..26395e8
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrdem.h
@@ -0,0 +1,43 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) <year> NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _IFR_DEM_H_
+#define _IFR_DEM_H_
+
+#define INFOROM_DEM_OBJECT_V1_00_PACKED_SIZE 4144
+#define INFOROM_DEM_OBJECT_V1_00_FIFO_SIZE 4096
+
+struct INFOROM_DEM_OBJECT_V1_00
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ inforom_U032 seqNumber;
+ inforom_U016 writeOffset;
+ inforom_U016 readOffset;
+ inforom_X008 fifoBuffer[INFOROM_DEM_OBJECT_V1_00_FIFO_SIZE];
+ inforom_U032 reserved[8];
+};
+
+#define INFOROM_DEM_OBJECT_V1_00_FMT INFOROM_OBJECT_HEADER_V1_00_FMT "d2w4096x8d"
+typedef struct INFOROM_DEM_OBJECT_V1_00 INFOROM_DEM_OBJECT_V1_00;
+
+#endif // _IFR_DEM_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrecc.h b/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrecc.h
new file mode 100644
index 0000000..309b47a
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrecc.h
@@ -0,0 +1,119 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2017-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _IFRECC_H_
+#define _IFRECC_H_
+
+#include "nvtypes.h"
+#include "inforom/types.h"
+
+// NVSwitch ECC v6 object definition
+#define INFOROM_ECC_OBJECT_V6_S0_PACKED_SIZE 3808
+
+//Used to determine if the entry is empty or not
+#define NV_INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_HEADER_VALID 0:0
+#define NV_INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_HEADER_VALID_FALSE 0
+#define NV_INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_HEADER_VALID_TRUE 1
+#define NV_INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_HEADER_CORRUPT_TIMEDATA 1:1
+#define NV_INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_HEADER_CORRUPT_TIMEDATA_FALSE 0
+#define NV_INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_HEADER_CORRUPT_TIMEDATA_TRUE 1
+#define NV_INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_HEADER_ADDR_VALID 2:2
+#define NV_INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_HEADER_ADDR_VALID_FALSE 0
+#define NV_INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_HEADER_ADDR_VALID_TRUE 1
+
+#define NV_INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_LOCATION_LINK_ID 7:0
+
+typedef struct INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER
+{
+ inforom_U008 header;
+ inforom_U032 errId;
+ inforom_U032 lastErrorTimestamp;
+ inforom_U032 averageEventDelta;
+ inforom_U016 location;
+ inforom_U016 sublocation;
+ inforom_U032 correctedCount;
+ inforom_U032 uncorrectedCount;
+ inforom_U032 address;
+
+} INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER;
+
+#define INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_MAX_COUNT 128
+
+typedef struct INFOROM_ECC_OBJECT_V6_S0
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+
+ NvU64_ALIGN32 uncorrectedTotal;
+ NvU64_ALIGN32 correctedTotal;
+ inforom_U032 lastClearedTimestamp;
+
+ INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER errorEntries[INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_MAX_COUNT];
+
+ inforom_U008 padding[68];
+} INFOROM_ECC_OBJECT_V6_S0;
+
+#define INFOROM_ECC_OBJECT_V6_S0_HEADER_FMT INFOROM_OBJECT_HEADER_V1_00_FMT
+
+#define INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_FMT "b3d2w3d"
+
+#define INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_ARRAY_FMT \
+ INFOROM_FMT_REP128(INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_FMT)
+
+#define INFOROM_ECC_OBJECT_V6_S0_PADDING_FMT "68b"
+
+#define INFOROM_ECC_OBJECT_V6_S0_FMT INFOROM_ECC_OBJECT_V6_S0_HEADER_FMT "qqd" \
+ INFOROM_ECC_OBJECT_V6_S0_ERROR_COUNTER_ARRAY_FMT \
+ INFOROM_ECC_OBJECT_V6_S0_PADDING_FMT
+
+// Error event structure for NVSwitch ECC errors
+typedef struct
+{
+ NvU32 sxid;
+ NvU32 linkId;
+ NvBool bAddressValid;
+ NvU32 address;
+
+ // The timestamp is filled in by the inforom ECC error logging API
+ NvU32 timestamp;
+
+ NvBool bUncErr;
+ NvU32 errorCount;
+} INFOROM_NVS_ECC_ERROR_EVENT;
+
+typedef union
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ INFOROM_ECC_OBJECT_V6_S0 v6s;
+} INFOROM_ECC_OBJECT;
+
+typedef struct
+{
+ const char *pFmt;
+ NvU8 *pPackedObject;
+ INFOROM_ECC_OBJECT *pEcc;
+
+ // Signals if there are pending updates to be flushed to InfoROM
+ NvBool bDirty;
+} INFOROM_ECC_STATE, *PINFOROM_ECC_STATE;
+
+#endif // _IFRECC_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrnvl.h b/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrnvl.h
new file mode 100644
index 0000000..f09740d
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrnvl.h
@@ -0,0 +1,1561 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2017-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _IFRNVL_H_
+#define _IFRNVL_H_
+
+//
+// NVL - NVLINK Configuration and Error Data
+//
+
+// Link Remote Endpoint Type
+typedef enum
+{
+ INFOROM_NVLINK_REMOTE_TYPE_UNSUPPORTED = -1,
+ INFOROM_NVLINK_REMOTE_TYPE_NONE = 0,
+ INFOROM_NVLINK_REMOTE_TYPE_PEER = 1,
+ INFOROM_NVLINK_REMOTE_TYPE_SYSTEM = 2,
+ INFOROM_NVLINK_REMOTE_TYPE_SWITCH = 3,
+ INFOROM_NVLINK_REMOTE_TYPE_MAX = 3,
+ INFOROM_NVLINK_NUM_REMOTE_TYPES = 4
+} INFOROM_NVLINK_REMOTE_TYPE;
+
+// Fatal Errors
+typedef enum
+{
+ INFOROM_NVLINK_FATAL_ERR_TYPE_UNSUPPORTED = -1,
+
+ //
+ // NVLink 1.0
+ //
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_DL_DATA_PARITY = 0,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_DL_CTRL_PARITY = 1,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_PROTOCOL = 2,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_OVERFLOW = 3,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_RAM_DATA_PARITY = 4,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_RAM_HDR_PARITY = 5,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_RESP = 6,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_POISON = 7,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_TX_RAM_DATA_PARITY = 8,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_TX_RAM_HDR_PARITY = 9,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_TX_CREDIT = 10,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_DL_FLOW_CTRL_PARITY = 11,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TL_DL_HDR_PARITY = 12,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_RECOVERY_LONG = 13,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_RAM = 14,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_INTERFACE = 15,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_SUBLINK_CHANGE = 16,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_DL_RX_FAULT_SUBLINK_CHANGE = 17,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_DL_RX_FAULT_DL_PROTOCOL = 18,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_DL_LTSSM_FAULT = 19,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_MAX_V1 = 19,
+ INFOROM_NVLINK_NUM_V1_FATAL_ERR_TYPES = 20,
+
+ //
+ // NVLink 2.0
+ //
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DL_DATA_PARITY = 0,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DL_CTRL_PARITY = 1,
+ // No direct equivalent to: _TL_RX_PROTOCOL = 2,
+ // No direct equivalent to: _TL_RX_OVERFLOW = 3,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RAM_DATA_PARITY = 4,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RAM_HDR_PARITY = 5,
+ // No direct equivalent to: _TL_RX_RESP = 6,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DATA_POISONED_PKT_RCVD = 7,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_RAM_DATA_PARITY = 8,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_RAM_HDR_PARITY = 9,
+ // No direct equivalent to: _TL_TX_CREDIT = 10,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_DL_FLOW_CONTROL_PARITY = 11,
+ // No direct equivalent to: _TL_DL_HDR_PARITY = 12,
+ // Identical to NVLink 1.0: _DL_TX_RECOVERY_LONG = 13,
+ // Identical to NVLink 1.0: _DL_TX_FAULT_RAM = 14,
+ // Identical to NVLink 1.0: _DL_TX_FAULT_INTERFACE = 15,
+ // Identical to NVLink 1.0: _DL_TX_FAULT_SUBLINK_CHANGE = 16,
+ // Identical to NVLink 1.0: _DL_RX_FAULT_SUBLINK_CHANGE = 17,
+ // Identical to NVLink 1.0: _DL_RX_FAULT_DL_PROTOCOL = 18,
+ // Identical to NVLink 1.0: _DL_LTSSM_FAULT = 19,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DL_HDR_PARITY = 20,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_AE_FLIT_RCVD = 21,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_BE_FLIT_RCVD = 22,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_ADDR_ALIGN = 23,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_PKT_LEN = 24,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_CMD_ENC = 25,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_DAT_LEN_ENC = 26,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_ADDR_TYPE = 27,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_RSP_STATUS = 28,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_PKT_STATUS = 29,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_CACHE_ATTR_ENC_IN_PROBE_REQ = 30,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_CACHE_ATTR_ENC_IN_PROBE_RESP = 31,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DAT_LEN_GT_ATOMIC_REQ_MAX_SIZE = 32,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DAT_LEN_GT_RMW_REQ_MAX_SIZE = 33,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DAT_LEN_LT_ATR_RESP_MIN_SIZE = 34,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_PO_FOR_CACHE_ATTR = 35,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_COMPRESSED_RESP = 36,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RESP_STATUS_TARGET = 37,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RESP_STATUS_UNSUPPORTED_REQUEST = 38,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_HDR_OVERFLOW = 39,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DATA_OVERFLOW = 40,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_STOMPED_PKT_RCVD = 41,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_CORRECTABLE_INTERNAL = 42,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_UNSUPPORTED_VC_OVERFLOW = 43,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_UNSUPPORTED_NVLINK_CREDIT_RELEASE = 44,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_UNSUPPORTED_NCISOC_CREDIT_RELEASE = 45,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_HDR_CREDIT_OVERFLOW = 46,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_DATA_CREDIT_OVERFLOW = 47,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_DL_REPLAY_CREDIT_OVERFLOW = 48,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_UNSUPPORTED_VC_OVERFLOW = 49,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_STOMPED_PKT_SENT = 50,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_DATA_POISONED_PKT_SENT = 51,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_RESP_STATUS_TARGET = 52,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_RESP_STATUS_UNSUPPORTED_REQUEST = 53,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_MIF_RX_RAM_DATA_PARITY = 54,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_MIF_RX_RAM_HDR_PARITY = 55,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_MIF_TX_RAM_DATA_PARITY = 56,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_MIF_TX_RAM_HDR_PARITY = 57,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_MAX_V2 = 57,
+ INFOROM_NVLINK_NUM_V2_FATAL_ERR_TYPES = 58,
+
+ // NVLink 3.0
+
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_COLLAPSED_RESPONSE = 58,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_NCISOC_HDR_ECC_DBE = 59,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_NCISOC_PARITY = 60,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_DL_LTSSM_FAULT_UP = 61,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_DL_LTSSM_FAULT_DOWN = 62,
+ INFOROM_NVLINK_FATAL_ERR_TYPE_MAX_V3 = 62,
+ INFOROM_NVLINK_NUM_V3_FATAL_ERR_TYPES = 63,
+
+ INFOROM_NVLINK_FATAL_ERR_TYPE_MAX = 62,
+ INFOROM_NVLINK_NUM_FATAL_ERR_TYPES = 63,
+} INFOROM_NVLINK_FATAL_ERR_TYPE;
+
+typedef enum
+{
+ // DL RX -----------------------------------------
+ // Fatal Counts
+ INFOROM_NVLINK_DL_RX_FAULT_DL_PROTOCOL_FATAL = 0,
+ INFOROM_NVLINK_DL_RX_FAULT_SUBLINK_CHANGE_FATAL,
+
+ // Correctable Accumulated Counts
+ INFOROM_NVLINK_DL_RX_FLIT_CRC_CORR,
+ INFOROM_NVLINK_DL_RX_LANE0_CRC_CORR,
+ INFOROM_NVLINK_DL_RX_LANE1_CRC_CORR,
+ INFOROM_NVLINK_DL_RX_LANE2_CRC_CORR,
+ INFOROM_NVLINK_DL_RX_LANE3_CRC_CORR,
+ INFOROM_NVLINK_DL_RX_LINK_REPLAY_EVENTS_CORR,
+
+ // DL TX -----------------------------------------
+ // Fatal Counts
+ INFOROM_NVLINK_DL_TX_FAULT_RAM_FATAL,
+ INFOROM_NVLINK_DL_TX_FAULT_INTERFACE_FATAL,
+ INFOROM_NVLINK_DL_TX_FAULT_SUBLINK_CHANGE_FATAL,
+
+ // Correctable Accumulated Counts
+ INFOROM_NVLINK_DL_TX_LINK_REPLAY_EVENTS_CORR,
+
+ // DL Disassociated ------------------------------
+ // Fatal Counts
+ INFOROM_NVLINK_DL_LTSSM_FAULT_UP_FATAL,
+ INFOROM_NVLINK_DL_LTSSM_FAULT_DOWN_FATAL,
+
+ // Correctable Accumulated Counts
+ INFOROM_NVLINK_DL_LINK_RECOVERY_EVENTS_CORR,
+
+ // TLC RX ----------------------------------------
+ // Fatal Counts
+ INFOROM_NVLINK_TLC_RX_DL_HDR_PARITY_ERR_FATAL,
+ INFOROM_NVLINK_TLC_RX_DL_DATA_PARITY_ERR_FATAL,
+ INFOROM_NVLINK_TLC_RX_DL_CTRL_PARITY_ERR_FATAL,
+ INFOROM_NVLINK_TLC_RX_INVALID_AE_FATAL,
+ INFOROM_NVLINK_TLC_RX_INVALID_BE_FATAL,
+ INFOROM_NVLINK_TLC_RX_INVALID_ADDR_ALIGN_FATAL,
+ INFOROM_NVLINK_TLC_RX_PKTLEN_ERR_FATAL,
+ INFOROM_NVLINK_TLC_RX_RSVD_PACKET_STATUS_ERR_FATAL,
+ INFOROM_NVLINK_TLC_RX_RSVD_CACHE_ATTR_PROBE_REQ_ERR_FATAL,
+ INFOROM_NVLINK_TLC_RX_RSVD_CACHE_ATTR_PROBE_RSP_ERR_FATAL,
+ INFOROM_NVLINK_TLC_RX_DATLEN_GT_RMW_REQ_MAX_ERR_FATAL,
+ INFOROM_NVLINK_TLC_RX_DATLEN_LT_ATR_RSP_MIN_ERR_FATAL,
+ INFOROM_NVLINK_TLC_RX_INVALID_CR_FATAL,
+ INFOROM_NVLINK_TLC_RX_INVALID_COLLAPSED_RESPONSE_FATAL,
+ INFOROM_NVLINK_TLC_RX_HDR_OVERFLOW_FATAL,
+ INFOROM_NVLINK_TLC_RX_DATA_OVERFLOW_FATAL,
+ INFOROM_NVLINK_TLC_RX_STOMP_DETECTED_FATAL,
+ INFOROM_NVLINK_TLC_RX_RSVD_CMD_ENC_FATAL,
+ INFOROM_NVLINK_TLC_RX_RSVD_DAT_LEN_ENC_FATAL,
+ INFOROM_NVLINK_TLC_RX_INVALID_PO_FOR_CACHE_ATTR_FATAL,
+ // This is only needed for NCISOC support (not used outside SoC?)
+ // TLC_RX_NCISOC_CREDIT_PARITY_ERR_FATAL_COUNT,
+
+ // Non-Fatal Counts
+ INFOROM_NVLINK_TLC_RX_RSP_STATUS_HW_ERR_NONFATAL,
+ INFOROM_NVLINK_TLC_RX_RSP_STATUS_UR_ERR_NONFATAL,
+ INFOROM_NVLINK_TLC_RX_RSP_STATUS_PRIV_ERR_NONFATAL,
+ INFOROM_NVLINK_TLC_RX_POISON_NONFATAL,
+ INFOROM_NVLINK_TLC_RX_AN1_HEARTBEAT_TIMEOUT_NONFATAL,
+ INFOROM_NVLINK_TLC_RX_ILLEGAL_PRI_WRITE_NONFATAL,
+
+ // Correctable Accumulated Counts
+ // These should be logged in the ECC object instead
+ // TLC_RX_HDR_RAM_ECC_SBE_ACCUM,
+ // TLC_RX_DAT0_RAM_ECC_SBE_ACCUM,
+ // TLC_RX_DAT1_RAM_ECC_SBE_ACCUM,
+
+ // TLC TX ----------------------------------------
+ // Fatal Counts
+ INFOROM_NVLINK_TLC_TX_DL_CREDIT_PARITY_ERR_FATAL,
+ // These should be logged in the ECC object instead
+ // TLC_TX_CREQ_HDR_RAM_ECC_DBE_FATAL_COUNT,
+ // TLC_TX_RSP_HDR_RAM_ECC_DBE_FATAL_COUNT,
+ // TLC_TX_RSP1_HDR_RAM_ECC_DBE_FATAL_COUNT,
+ // TLC_TX_COM_HDR_RAM_ECC_DBE_FATAL_COUNT,
+ INFOROM_NVLINK_TLC_TX_NCISOC_HDR_ECC_DBE_FATAL,
+ INFOROM_NVLINK_TLC_TX_NCISOC_PARITY_ERR_FATAL,
+
+ // Non-Fatal Counts
+ // This is only needed for NCISOC support (not used outside SoC?)
+ // TLC_TX_NCISOC_DAT_ECC_DBE_NONFATAL_COUNT,
+ INFOROM_NVLINK_TLC_TX_ILLEGAL_PRI_WRITE_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC0_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC1_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC2_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC3_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC4_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC5_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC6_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC7_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_POISON_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_RSP_STATUS_HW_ERR_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_RSP_STATUS_UR_ERR_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_RSP_STATUS_PRIV_ERR_NONFATAL,
+
+ // Correctable Counts
+ // These should be logged in the ECC object instead
+ // TLC_TX_CREQ_RAMS_ECC_SBE_CORR_ACCUM,
+ // TLC_TX_RSP_RAMS_ECC_SBE_CORR_ACCUM,
+ // TLC_TX_RSP1_RAMS_ECC_SBE_CORR_ACCUM,
+ // TLC_TX_COM_RAMS_ECC_SBE_CORR_ACCUM,
+ // This is only needed for NCISOC support (not used outside SoC?)
+ // TLC_TX_NCISOC_ECC_LIMIT_ERR_CORR_ACCUM,
+
+ // NVLIPT Disassociated --------------------------
+ // Fatal Counts
+ INFOROM_NVLINK_NVLIPT_SLEEP_WHILE_ACTIVE_LINK_FATAL,
+ INFOROM_NVLINK_NVLIPT_RSTSEQ_PHYCTL_TIMEOUT_FATAL,
+ INFOROM_NVLINK_NVLIPT_RSTSEQ_CLKCTL_TIMEOUT_FATAL,
+ INFOROM_NVLINK_NVLIPT_CLKCTL_ILLEGAL_REQUEST_FATAL,
+ INFOROM_NVLINK_NVLIPT_RSTSEQ_PLL_TIMEOUT_FATAL,
+ INFOROM_NVLINK_NVLIPT_RSTSEQ_PHYARB_TIMEOUT_FATAL,
+
+ // Non-Fatal Counts
+ INFOROM_NVLINK_NVLIPT_ILLEGAL_LINK_STATE_REQUEST_NONFATAL,
+ INFOROM_NVLINK_NVLIPT_FAILED_MINION_REQUEST_NONFATAL,
+ INFOROM_NVLINK_NVLIPT_RESERVED_REQUEST_VALUE_NONFATAL,
+ INFOROM_NVLINK_NVLIPT_LINK_STATE_WRITE_WHILE_BUSY_NONFATAL,
+ INFOROM_NVLINK_NVLIPT_WRITE_TO_LOCKED_SYSTEM_REG_NONFATAL,
+ INFOROM_NVLINK_NVLIPT_LINK_STATE_REQUEST_TIMEOUT_NONFATAL,
+
+ // TODO 3014908 log these in the NVL object until we have ECC object support
+ INFOROM_NVLINK_TLC_RX_HDR_RAM_ECC_DBE_FATAL,
+ INFOROM_NVLINK_TLC_RX_DAT0_RAM_ECC_DBE_FATAL,
+ INFOROM_NVLINK_TLC_RX_DAT1_RAM_ECC_DBE_FATAL,
+ INFOROM_NVLINK_TLC_TX_CREQ_DAT_RAM_ECC_DBE_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_RSP_DAT_RAM_ECC_DBE_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_COM_DAT_RAM_ECC_DBE_NONFATAL,
+ INFOROM_NVLINK_TLC_TX_RSP1_DAT_RAM_ECC_DBE_FATAL,
+
+ // DL Interrupts -----------------------------------------
+ // Fatal Counts
+ INFOROM_NVLINK_DL_PHY_A_FATAL,
+ INFOROM_NVLINK_DL_RX_CRC_COUNTER_FATAL,
+ INFOROM_NVLINK_DL_TX_PL_ERROR_FATAL,
+ INFOROM_NVLINK_DL_RX_PL_ERROR_FATAL,
+
+ INFOROM_NVLINK_MAX_ERROR_TYPE
+} INFOROM_NVLINK_ERROR_TYPES;
+
+#define INFOROM_NVLINK_V1_FATAL_ERR_TYPES \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_DL_DATA_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_DL_CTRL_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_PROTOCOL) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_OVERFLOW) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_RAM_DATA_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_RAM_HDR_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_RESP) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_RX_POISON) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_TX_RAM_DATA_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_TX_RAM_HDR_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_TX_CREDIT) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_DL_FLOW_CTRL_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TL_DL_HDR_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_RECOVERY_LONG) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_RAM) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_INTERFACE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_SUBLINK_CHANGE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_RX_FAULT_SUBLINK_CHANGE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_RX_FAULT_DL_PROTOCOL) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_LTSSM_FAULT)
+
+#define INFOROM_NVLINK_V2_FATAL_ERR_TYPES \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DL_DATA_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DL_CTRL_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RAM_DATA_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RAM_HDR_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DATA_POISONED_PKT_RCVD) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_RAM_DATA_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_RAM_HDR_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_DL_FLOW_CONTROL_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_RECOVERY_LONG) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_RAM) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_INTERFACE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_SUBLINK_CHANGE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_RX_FAULT_SUBLINK_CHANGE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_RX_FAULT_DL_PROTOCOL) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_LTSSM_FAULT) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DL_HDR_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_AE_FLIT_RCVD) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_BE_FLIT_RCVD) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_ADDR_ALIGN) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_PKT_LEN) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_CMD_ENC) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_DAT_LEN_ENC) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_ADDR_TYPE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_RSP_STATUS) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_PKT_STATUS) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_CACHE_ATTR_ENC_IN_PROBE_REQ) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_CACHE_ATTR_ENC_IN_PROBE_RESP) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DAT_LEN_GT_ATOMIC_REQ_MAX_SIZE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DAT_LEN_GT_RMW_REQ_MAX_SIZE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DAT_LEN_LT_ATR_RESP_MIN_SIZE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_PO_FOR_CACHE_ATTR) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_COMPRESSED_RESP) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RESP_STATUS_TARGET) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RESP_STATUS_UNSUPPORTED_REQUEST) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_HDR_OVERFLOW) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DATA_OVERFLOW) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_STOMPED_PKT_RCVD) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_CORRECTABLE_INTERNAL) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_UNSUPPORTED_VC_OVERFLOW) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_UNSUPPORTED_NVLINK_CREDIT_RELEASE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_UNSUPPORTED_NCISOC_CREDIT_RELEASE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_HDR_CREDIT_OVERFLOW) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_DATA_CREDIT_OVERFLOW) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_DL_REPLAY_CREDIT_OVERFLOW) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_UNSUPPORTED_VC_OVERFLOW) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_STOMPED_PKT_SENT) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_DATA_POISONED_PKT_SENT) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_RESP_STATUS_TARGET) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_RESP_STATUS_UNSUPPORTED_REQUEST) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_MIF_RX_RAM_DATA_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_MIF_RX_RAM_HDR_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_MIF_TX_RAM_DATA_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_MIF_TX_RAM_HDR_PARITY)
+
+#define INFOROM_NVLINK_V3_FATAL_ERR_TYPES \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DL_DATA_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DL_CTRL_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_DL_FLOW_CONTROL_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_RAM) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_INTERFACE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_FAULT_SUBLINK_CHANGE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_RX_FAULT_SUBLINK_CHANGE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_RX_FAULT_DL_PROTOCOL) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DL_HDR_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_AE_FLIT_RCVD) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_BE_FLIT_RCVD) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_ADDR_ALIGN) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_PKT_LEN) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_CMD_ENC) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_DAT_LEN_ENC) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_PKT_STATUS) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_CACHE_ATTR_ENC_IN_PROBE_REQ) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_RSVD_CACHE_ATTR_ENC_IN_PROBE_RESP) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DAT_LEN_GT_RMW_REQ_MAX_SIZE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DAT_LEN_LT_ATR_RESP_MIN_SIZE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_PO_FOR_CACHE_ATTR) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_COMPRESSED_RESP) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_HDR_OVERFLOW) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_DATA_OVERFLOW) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_STOMPED_PKT_RCVD) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_RX_INVALID_COLLAPSED_RESPONSE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_NCISOC_HDR_ECC_DBE) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_TLC_TX_NCISOC_PARITY) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_LTSSM_FAULT_UP) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_LTSSM_FAULT_DOWN)
+
+#define INFOROM_NVLINK_V4_FATAL_ERR_TYPES \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_PHY_A) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_RX_CRC_COUNTER) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_TX_PL_ERROR) | \
+ NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_DL_RX_PL_ERROR)
+
+#define INFOROM_ADD_NVLINK_FATAL_ERR_TYPE(mask, type) \
+ mask |= NVBIT64(INFOROM_NVLINK_FATAL_ERR_TYPE_##type)
+
+typedef struct
+{
+ NvU32 errorsPerMinute;
+ NvU32 timestamp;
+} INFOROM_NVLINK_ERROR_RATE;
+
+#define INFOROM_NVLINK_NUM_LINKS 6
+
+typedef union INFOROM_NVL_OBJECT INFOROM_NVL_OBJECT, *PINFOROM_NVL_OBJECT;
+
+// Version 1.0 ----------------------------------------------------------------
+
+// Link Remote Endpoint Type
+typedef enum
+{
+ INFOROM_NVL_OBJECT_V1_REMOTE_TYPE_UNSUPPORTED = -1,
+ INFOROM_NVL_OBJECT_V1_REMOTE_TYPE_NONE = 0,
+ INFOROM_NVL_OBJECT_V1_REMOTE_TYPE_PEER = 1,
+ INFOROM_NVL_OBJECT_V1_REMOTE_TYPE_SYSTEM = 2,
+ INFOROM_NVL_OBJECT_V1_REMOTE_TYPE_SWITCH = 3,
+ INFOROM_NVL_OBJECT_V1_REMOTE_TYPE_MAX = 3,
+ INFOROM_NVL_OBJECT_V1_NUM_REMOTE_TYPES = 4,
+} INFOROM_NVL_OBJECT_V1_REMOTE_TYPE;
+
+// Fatal Errors
+typedef enum
+{
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_UNSUPPORTED = -1,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_RX_DL_DATA_PARITY = 0,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_RX_DL_CTRL_PARITY = 1,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_RX_PROTOCOL = 2,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_RX_OVERFLOW = 3,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_RX_RAM_DATA_PARITY = 4,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_RX_RAM_HDR_PARITY = 5,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_RX_RESP = 6,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_RX_POISON = 7,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_TX_RAM_DATA_PARITY = 8,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_TX_RAM_HDR_PARITY = 9,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_TX_CREDIT = 10,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_DL_FLOW_CTRL_PARITY = 11,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_TL_DL_HDR_PARITY = 12,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_DL_TX_RECOVERY_LONG = 13,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_DL_TX_FAULT_RAM = 14,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_DL_TX_FAULT_INTERFACE = 15,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_DL_TX_FAULT_SUBLINK_CHANGE = 16,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_DL_RX_FAULT_SUBLINK_CHANGE = 17,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_DL_RX_FAULT_DL_PROTOCOL = 18,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_DL_LTSSM_FAULT = 19,
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX_MAX = 19,
+ INFOROM_NVL_OBJECT_V1_NUM_FATAL_ERR_INDICES = 20,
+} INFOROM_NVL_OBJECT_V1_FATAL_ERR_INDEX;
+
+typedef struct INFOROM_NVL_OBJECT_V1_FATAL_ERR_DATA
+{
+ inforom_U008 counts[INFOROM_NVL_OBJECT_V1_NUM_FATAL_ERR_INDICES];
+ inforom_U008 reserved[25];
+} INFOROM_NVL_OBJECT_V1_FATAL_ERR_DATA;
+
+#define INFOROM_NVL_OBJECT_V1_FATAL_ERR_DATA_FMT "45b"
+
+// Non-Fatal Errors
+typedef struct INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_ENTRY
+{
+ inforom_U024 errRate;
+ inforom_U032 timestamp;
+} INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_ENTRY;
+
+#define INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_FMT "td"
+
+#define INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_DAY_ENTRIES 5
+#define INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_DAY_INTERVAL (60*60*24)
+#define INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_MONTH_ENTRIES 3
+#define INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_MONTH_INTERVAL (60*60*24*30)
+
+typedef struct INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_DATA
+{
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_ENTRY maxNDaysAgo[
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_DAY_ENTRIES];
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_ENTRY maxNMonthsAgo[
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_MONTH_ENTRIES];
+} INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_DATA;
+
+#define INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_DATA_FMT \
+ INFOROM_FMT_REP08(INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_FMT)
+
+typedef struct INFOROM_NVL_OBJECT_V1_ERR_DATA
+{
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_DATA fatal;
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_DATA nonfatal;
+} INFOROM_NVL_OBJECT_V1_ERR_DATA;
+
+#define INFOROM_NVL_OBJECT_V1_ERR_DATA_FMT \
+ INFOROM_NVL_OBJECT_V1_FATAL_ERR_DATA_FMT \
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_DATA_FMT
+
+#define INFOROM_NVL_OBJECT_V1_NUM_LINKS 6
+
+typedef struct INFOROM_NVL_OBJECT_V1
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ inforom_U004 lastErrorRemoteType[
+ INFOROM_NVL_OBJECT_V1_NUM_LINKS];
+ inforom_U008 reserved1[1];
+ INFOROM_NVL_OBJECT_V1_ERR_DATA errData[INFOROM_NVL_OBJECT_V1_NUM_LINKS];
+ inforom_U016 padding[1];
+ inforom_U032 reserved2[13];
+} INFOROM_NVL_OBJECT_V1;
+
+#define INFOROM_NVL_OBJECT_V1_FMT \
+ INFOROM_OBJECT_HEADER_V1_00_FMT \
+ "6n" /* lastRemoteType */ \
+ "b" /* reserved1 */ \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V1_ERR_DATA_FMT) \
+ INFOROM_FMT_REP02(INFOROM_NVL_OBJECT_V1_ERR_DATA_FMT) \
+ "w" /* padding */ \
+ "13d" /* reserved2 */
+
+#define INFOROM_NVL_OBJECT_V1_PACKED_SIZE 672
+
+// Version 2.0 ----------------------------------------------------------------
+
+// Link Remote Endpoint Type
+typedef enum
+{
+ INFOROM_NVL_OBJECT_V2_REMOTE_TYPE_UNSUPPORTED = -1,
+ INFOROM_NVL_OBJECT_V2_REMOTE_TYPE_NONE = 0,
+ INFOROM_NVL_OBJECT_V2_REMOTE_TYPE_PEER = 1,
+ INFOROM_NVL_OBJECT_V2_REMOTE_TYPE_SYSTEM = 2,
+ INFOROM_NVL_OBJECT_V2_REMOTE_TYPE_SWITCH = 3,
+ INFOROM_NVL_OBJECT_V2_REMOTE_TYPE_MAX = 3,
+ INFOROM_NVL_OBJECT_V2_NUM_REMOTE_TYPES = 4,
+} INFOROM_NVL_OBJECT_V2_REMOTE_TYPE;
+
+// Fatal Errors
+typedef enum
+{
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_UNSUPPORTED = -1,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_DL_HDR_PARITY = 0,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_DL_DATA_PARITY = 1,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_DL_CTRL_PARITY = 2,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RAM_DATA_PARITY = 3,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RAM_HDR_PARITY = 4,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_INVALID_AE_FLIT_RCVD = 5,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_INVALID_BE_FLIT_RCVD = 6,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_INVALID_ADDR_ALIGN = 7,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_PKT_LEN = 8,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RSVD_CMD_ENC = 9,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RSVD_DAT_LEN_ENC = 10,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RSVD_ADDR_TYPE = 11,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RSVD_RSP_STATUS = 12,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RSVD_PKT_STATUS = 13,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RSVD_CACHE_ATTR_ENC_IN_PROBE_REQ = 14,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RSVD_CACHE_ATTR_ENC_IN_PROBE_RESP = 15,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_DAT_LEN_GT_ATOMIC_REQ_MAX_SIZE = 16,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_DAT_LEN_GT_RMW_REQ_MAX_SIZE = 17,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_DAT_LEN_LT_ATR_RESP_MIN_SIZE = 18,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_INVALID_PO_FOR_CACHE_ATTR = 19,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_INVALID_COMPRESSED_RESP = 20,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RESP_STATUS_TARGET = 21,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_RESP_STATUS_UNSUPPORTED_REQUEST = 22,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_HDR_OVERFLOW = 23,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_DATA_OVERFLOW = 24,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_STOMPED_PKT_RCVD = 25,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_DATA_POISONED_PKT_RCVD = 26,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_CORRECTABLE_INTERNAL = 27,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_UNSUPPORTED_VC_OVERFLOW = 28,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_UNSUPPORTED_NVLINK_CREDIT_RELEASE = 29,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_RX_UNSUPPORTED_NCISOC_CREDIT_RELEASE = 30,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_HDR_CREDIT_OVERFLOW = 31,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_DATA_CREDIT_OVERFLOW = 32,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_DL_REPLAY_CREDIT_OVERFLOW = 33,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_DL_FLOW_CONTROL_PARITY = 34,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_RAM_HDR_PARITY = 35,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_RAM_DATA_PARITY = 36,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_UNSUPPORTED_VC_OVERFLOW = 37,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_STOMPED_PKT_SENT = 38,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_DATA_POISONED_PKT_SENT = 39,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_RESP_STATUS_TARGET = 40,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_TLC_TX_RESP_STATUS_UNSUPPORTED_REQUEST = 41,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_MIF_RX_RAM_DATA_PARITY = 42,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_MIF_RX_RAM_HDR_PARITY = 43,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_MIF_TX_RAM_DATA_PARITY = 44,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_MIF_TX_RAM_HDR_PARITY = 45,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_DL_TX_RECOVERY_LONG = 46,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_DL_TX_FAULT_RAM = 47,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_DL_TX_FAULT_INTERFACE = 48,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_DL_TX_FAULT_SUBLINK_CHANGE = 49,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_DL_RX_FAULT_SUBLINK_CHANGE = 50,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_DL_RX_FAULT_DL_PROTOCOL = 51,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_DL_LTSSM_FAULT = 52,
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX_MAX = 52,
+ INFOROM_NVL_OBJECT_V2_NUM_FATAL_ERR_INDICES = 53,
+} INFOROM_NVL_OBJECT_V2_FATAL_ERR_INDEX;
+
+typedef struct INFOROM_NVL_OBJECT_V2_FATAL_ERR_DATA
+{
+ inforom_U008 counts[INFOROM_NVL_OBJECT_V2_NUM_FATAL_ERR_INDICES];
+} INFOROM_NVL_OBJECT_V2_FATAL_ERR_DATA;
+
+#define INFOROM_NVL_OBJECT_V2_FATAL_ERR_DATA_FMT "53b"
+
+// Non-Fatal Errors
+typedef INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_ENTRY
+ INFOROM_NVL_OBJECT_V2_NONFATAL_ERR_RATE_ENTRY;
+
+#define INFOROM_NVL_OBJECT_V2_NONFATAL_ERR_RATE_FMT \
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_FMT
+
+#define INFOROM_NVL_OBJECT_V2_NONFATAL_ERR_RATE_DAY_ENTRIES \
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_DAY_ENTRIES
+#define INFOROM_NVL_OBJECT_V2_NONFATAL_ERR_RATE_DAY_INTERVAL \
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_DAY_INTERVAL
+#define INFOROM_NVL_OBJECT_V2_NONFATAL_ERR_RATE_MONTH_ENTRIES \
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_MONTH_ENTRIES
+#define INFOROM_NVL_OBJECT_V2_NONFATAL_ERR_RATE_MONTH_INTERVAL \
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_RATE_MONTH_INTERVAL
+
+typedef INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_DATA
+ INFOROM_NVL_OBJECT_V2_NONFATAL_ERR_DATA;
+
+#define INFOROM_NVL_OBJECT_V2_NONFATAL_ERR_DATA_FMT \
+ INFOROM_NVL_OBJECT_V1_NONFATAL_ERR_DATA_FMT
+
+typedef struct INFOROM_NVL_OBJECT_V2_ERR_DATA
+{
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_DATA fatal;
+ INFOROM_NVL_OBJECT_V2_NONFATAL_ERR_DATA nonfatal;
+} INFOROM_NVL_OBJECT_V2_ERR_DATA;
+
+#define INFOROM_NVL_OBJECT_V2_ERR_DATA_FMT \
+ INFOROM_NVL_OBJECT_V2_FATAL_ERR_DATA_FMT \
+ INFOROM_NVL_OBJECT_V2_NONFATAL_ERR_DATA_FMT
+
+#define INFOROM_NVL_OBJECT_V2_NUM_LINKS INFOROM_NVL_OBJECT_V1_NUM_LINKS
+
+typedef struct INFOROM_NVL_OBJECT_V2
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ inforom_U004 lastErrorRemoteType[
+ INFOROM_NVL_OBJECT_V2_NUM_LINKS];
+ inforom_U008 reserved1[1];
+ INFOROM_NVL_OBJECT_V2_ERR_DATA errData[INFOROM_NVL_OBJECT_V2_NUM_LINKS];
+ inforom_U016 padding[1];
+ inforom_U032 reserved2[1];
+} INFOROM_NVL_OBJECT_V2;
+
+#define INFOROM_NVL_OBJECT_V2_FMT \
+ INFOROM_OBJECT_HEADER_V1_00_FMT \
+ "6n" /* lastRemoteType */ \
+ "b" /* reserved1 */ \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V2_ERR_DATA_FMT) \
+ INFOROM_FMT_REP02(INFOROM_NVL_OBJECT_V2_ERR_DATA_FMT) \
+ "w" /* padding */ \
+ "d" /* reserved2 */
+
+#define INFOROM_NVL_OBJECT_V2_PACKED_SIZE 672
+
+// Version 3.G0 ---------------------------------------------------------------
+
+#define INFOROM_NVL_OBJECT_V3G_NUM_LINKS 12
+#define INFOROM_NVL_OBJECT_V3G_MAX_SEED_BUFFER_SIZE 7
+
+typedef INFOROM_NVL_OBJECT_V2_REMOTE_TYPE INFOROM_NVL_OBJECT_V3_REMOTE_TYPE;
+
+typedef struct INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO
+{
+ inforom_U032 lastUpdated;
+ NvU64_ALIGN32 remoteDeviceSID;
+ inforom_U008 remoteDeviceType;
+ inforom_U008 remoteDeviceLink;
+} INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO;
+
+#define INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO_FMT "dq2b"
+
+typedef struct INFOROM_NVL_OBJECT_V3_MINION_DATA
+{
+ inforom_U032 lastUpdated;
+ inforom_U032 data[INFOROM_NVL_OBJECT_V3G_MAX_SEED_BUFFER_SIZE];
+} INFOROM_NVL_OBJECT_V3_MINION_DATA;
+
+#define INFOROM_NVL_OBJECT_V3_MINION_DATA_FMT "8d"
+
+typedef struct INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE
+{
+ inforom_U032 lastUpdated;
+ inforom_U032 flitCrcErrorsPerMinute;
+ inforom_U016 laneCrcErrorsPerMinute[4];
+} INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE;
+
+#define INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE_FMT "2d4w"
+
+typedef INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE
+ INFOROM_NVL_OBJECT_V3G_CORRECTABLE_ERROR_RATE_ARRAY[INFOROM_NVL_OBJECT_V3G_NUM_LINKS];
+
+#define INFOROM_NVL_OBJECT_V3G_CORRECTABLE_ERROR_RATE_ARRAY_FMT \
+ INFOROM_FMT_REP08(INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE_FMT) \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE_FMT)
+
+typedef struct INFOROM_NVL_OBJECT_V3G_MAX_CORRECTABLE_ERROR_RATES
+{
+ INFOROM_NVL_OBJECT_V3G_CORRECTABLE_ERROR_RATE_ARRAY dailyMaxCorrectableErrorRates[5];
+ INFOROM_NVL_OBJECT_V3G_CORRECTABLE_ERROR_RATE_ARRAY monthlyMaxCorrectableErrorRates[3];
+} INFOROM_NVL_OBJECT_V3G_MAX_CORRECTABLE_ERROR_RATES;
+
+#define INFOROM_NVL_OBJECT_V3G_MAX_CORRECTABLE_ERROR_RATES_FMT \
+ INFOROM_FMT_REP08(INFOROM_NVL_OBJECT_V3G_CORRECTABLE_ERROR_RATE_ARRAY_FMT)
+
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_NVLIPT_INSTANCE_ID 3:0
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID 7:4
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_DL0 0
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_DL1 1
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_DL2 2
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_DL3 3
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_DL4 4
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_DL5 5
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_DL(n) \
+ (NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_DL0+(n))
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC0 6
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC1 7
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC2 8
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC3 9
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC4 10
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC5 11
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC(n) \
+ (NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_TLC0+(n))
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_MINION 12
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_BLOCK_ID_NVLIPT 13
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_DIRECTION 9:8
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_DIRECTION_NA 1
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_DIRECTION_RX 2
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_DIRECTION_TX 3
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_SEVERITY 11:10
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_SEVERITY_CORRECTABLE 1
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_SEVERITY_UNCORRECTABLE_NONFATAL 2
+#define NV_INFOROM_NVL_OBJECT_V3_ERROR_METADATA_SEVERITY_UNCORRECTABLE_FATAL 3
+
+#define INFOROM_NVL_OBJECT_V3_NVLIPT_INSTANCE_MAX 15
+#define INFOROM_NVL_OBJECT_V3_BLOCK_ID_MAX 15
+
+#define NV_INFOROM_NVL_OBJECT_V3_NVLIPT_ERROR_SUBTYPE 4:0
+#define NV_INFOROM_NVL_OBJECT_V3_NVLIPT_ERROR_LINK_ID 7:5
+#define NV_INFOROM_NVL_OBJECT_V3_NVLIPT_ERROR_LINK_ID_COMMON 7
+
+// Format is <BLOCK>_<DIRECTION>_<SUBTYPE>_<SEVERITY>_<TYPE>
+// Each <BLOCK>_<DIRECTION> has its own subtype space.
+typedef enum
+{
+ // DL RX -----------------------------------------
+ // Fatal Counts
+ DL_RX_FAULT_DL_PROTOCOL_FATAL_COUNT = 0,
+ DL_RX_FAULT_SUBLINK_CHANGE_FATAL_COUNT,
+
+ // Correctable Accumulated Counts
+ DL_RX_FLIT_CRC_CORR_ACCUM,
+ DL_RX_LANE0_CRC_CORR_ACCUM,
+ DL_RX_LANE1_CRC_CORR_ACCUM,
+ DL_RX_LANE2_CRC_CORR_ACCUM,
+ DL_RX_LANE3_CRC_CORR_ACCUM,
+ DL_RX_LINK_REPLAY_EVENTS_CORR_ACCUM,
+
+ // DL TX -----------------------------------------
+ // Fatal Counts
+ DL_TX_FAULT_RAM_FATAL_COUNT = 0,
+ DL_TX_FAULT_INTERFACE_FATAL_COUNT,
+ DL_TX_FAULT_SUBLINK_CHANGE_FATAL_COUNT,
+
+ // Correctable Accumulated Counts
+ DL_TX_LINK_REPLAY_EVENTS_CORR_ACCUM,
+
+ // DL Disassociated ------------------------------
+ // Fatal Counts
+ DL_NA_LTSSM_FAULT_UP_FATAL_COUNT = 0,
+ DL_NA_LTSSM_FAULT_DOWN_FATAL_COUNT,
+
+ // Correctable Accumulated Counts
+ DL_NA_LINK_RECOVERY_EVENTS_CORR_ACCUM,
+
+ DL_NA_PHY_A_FATAL_COUNT,
+ DL_RX_CRC_COUNTER_FATAL_COUNT,
+ DL_TX_PL_ERROR_FATAL_COUNT,
+ DL_RX_PL_ERROR_FATAL_COUNT,
+
+ // TLC RX ----------------------------------------
+ // Fatal Counts
+ TLC_RX_DL_HDR_PARITY_ERR_FATAL_COUNT = 0,
+ TLC_RX_DL_DATA_PARITY_ERR_FATAL_COUNT,
+ TLC_RX_DL_CTRL_PARITY_ERR_FATAL_COUNT,
+ TLC_RX_INVALID_AE_FATAL_COUNT,
+ TLC_RX_INVALID_BE_FATAL_COUNT,
+ TLC_RX_INVALID_ADDR_ALIGN_FATAL_COUNT,
+ TLC_RX_PKTLEN_ERR_FATAL_COUNT,
+ TLC_RX_RSVD_PACKET_STATUS_ERR_FATAL_COUNT,
+ TLC_RX_RSVD_CACHE_ATTR_PROBE_REQ_ERR_FATAL_COUNT,
+ TLC_RX_RSVD_CACHE_ATTR_PROBE_RSP_ERR_FATAL_COUNT,
+ TLC_RX_DATLEN_GT_RMW_REQ_MAX_ERR_FATAL_COUNT,
+ TLC_RX_DATLEN_LT_ATR_RSP_MIN_ERR_FATAL_COUNT,
+ TLC_RX_INVALID_CR_FATAL_COUNT,
+ TLC_RX_INVALID_COLLAPSED_RESPONSE_FATAL_COUNT,
+ TLC_RX_HDR_OVERFLOW_FATAL_COUNT,
+ TLC_RX_DATA_OVERFLOW_FATAL_COUNT,
+ TLC_RX_STOMP_DETECTED_FATAL_COUNT,
+ TLC_RX_RSVD_CMD_ENC_FATAL_COUNT,
+ TLC_RX_RSVD_DAT_LEN_ENC_FATAL_COUNT,
+ TLC_RX_INVALID_PO_FOR_CACHE_ATTR_FATAL_COUNT,
+ // This is only needed for NCISOC support (not used outside SoC?)
+ // TLC_RX_NCISOC_CREDIT_PARITY_ERR_FATAL_COUNT,
+
+ // Non-Fatal Counts
+ TLC_RX_RSP_STATUS_HW_ERR_NONFATAL_COUNT,
+ TLC_RX_RSP_STATUS_UR_ERR_NONFATAL_COUNT,
+ TLC_RX_RSP_STATUS_PRIV_ERR_NONFATAL_COUNT,
+ TLC_RX_POISON_NONFATAL_COUNT,
+ TLC_RX_AN1_HEARTBEAT_TIMEOUT_NONFATAL_COUNT,
+ TLC_RX_ILLEGAL_PRI_WRITE_NONFATAL_COUNT,
+
+ // Fatal Counts addendum
+ TLC_RX_HDR_RAM_ECC_DBE_FATAL_COUNT,
+ TLC_RX_DAT0_RAM_ECC_DBE_FATAL_COUNT,
+ TLC_RX_DAT1_RAM_ECC_DBE_FATAL_COUNT,
+
+ // Correctable Accumulated Counts
+ // These should be logged in the ECC object instead
+ // TLC_RX_HDR_RAM_ECC_SBE_ACCUM,
+ // TLC_RX_DAT0_RAM_ECC_SBE_ACCUM,
+ // TLC_RX_DAT1_RAM_ECC_SBE_ACCUM,
+
+ // TLC TX ----------------------------------------
+ // Fatal Counts
+ TLC_TX_DL_CREDIT_PARITY_ERR_FATAL_COUNT = 0,
+ // These should be logged in the ECC object instead
+ // TLC_TX_CREQ_HDR_RAM_ECC_DBE_FATAL_COUNT,
+ // TLC_TX_RSP_HDR_RAM_ECC_DBE_FATAL_COUNT,
+ // TLC_TX_RSP1_HDR_RAM_ECC_DBE_FATAL_COUNT,
+ // TLC_TX_COM_HDR_RAM_ECC_DBE_FATAL_COUNT,
+ TLC_TX_NCISOC_HDR_ECC_DBE_FATAL_COUNT,
+ TLC_TX_NCISOC_PARITY_ERR_FATAL_COUNT,
+
+ // Non-Fatal Counts
+ // This is only needed for NCISOC support (not used outside SoC?)
+ // TLC_TX_NCISOC_DAT_ECC_DBE_NONFATAL_COUNT,
+ TLC_TX_ILLEGAL_PRI_WRITE_NONFATAL_COUNT,
+ TLC_TX_AN1_TIMEOUT_VC0_NONFATAL_COUNT,
+ TLC_TX_AN1_TIMEOUT_VC1_NONFATAL_COUNT,
+ TLC_TX_AN1_TIMEOUT_VC2_NONFATAL_COUNT,
+ TLC_TX_AN1_TIMEOUT_VC3_NONFATAL_COUNT,
+ TLC_TX_AN1_TIMEOUT_VC4_NONFATAL_COUNT,
+ TLC_TX_AN1_TIMEOUT_VC5_NONFATAL_COUNT,
+ TLC_TX_AN1_TIMEOUT_VC6_NONFATAL_COUNT,
+ TLC_TX_AN1_TIMEOUT_VC7_NONFATAL_COUNT,
+ TLC_TX_POISON_NONFATAL_COUNT,
+ TLC_TX_RSP_STATUS_HW_ERR_NONFATAL_COUNT,
+ TLC_TX_RSP_STATUS_UR_ERR_NONFATAL_COUNT,
+ TLC_TX_RSP_STATUS_PRIV_ERR_NONFATAL_COUNT,
+ TLC_TX_CREQ_DAT_RAM_ECC_DBE_NONFATAL_COUNT,
+ TLC_TX_RSP_DAT_RAM_ECC_DBE_NONFATAL_COUNT,
+ TLC_TX_COM_DAT_RAM_ECC_DBE_NONFATAL_COUNT,
+
+ // Correctable Counts
+ // These should be logged in the ECC object instead
+ // TLC_TX_CREQ_RAMS_ECC_SBE_CORR_ACCUM,
+ // TLC_TX_RSP_RAMS_ECC_SBE_CORR_ACCUM,
+ // TLC_TX_RSP1_RAMS_ECC_SBE_CORR_ACCUM,
+ // TLC_TX_COM_RAMS_ECC_SBE_CORR_ACCUM,
+ // This is only needed for NCISOC support (not used outside SoC?)
+ // TLC_TX_NCISOC_ECC_LIMIT_ERR_CORR_ACCUM,
+
+ // TLC TX Fatal addendum
+ TLC_TX_RSP1_DAT_RAM_ECC_DBE_FATAL_COUNT,
+
+ // NVLIPT Disassociated --------------------------
+ // Fatal Counts
+ NVLIPT_NA_SLEEP_WHILE_ACTIVE_LINK_FATAL_COUNT = 0,
+ NVLIPT_NA_RSTSEQ_PHYCTL_TIMEOUT_FATAL_COUNT,
+ NVLIPT_NA_RSTSEQ_CLKCTL_TIMEOUT_FATAL_COUNT,
+ NVLIPT_NA_CLKCTL_ILLEGAL_REQUEST_FATAL_COUNT,
+ NVLIPT_NA_RSTSEQ_PLL_TIMEOUT_FATAL_COUNT,
+ NVLIPT_NA_RSTSEQ_PHYARB_TIMEOUT_FATAL_COUNT,
+
+ // Non-Fatal Counts
+ NVLIPT_NA_ILLEGAL_LINK_STATE_REQUEST_NONFATAL_COUNT,
+ NVLIPT_NA_FAILED_MINION_REQUEST_NONFATAL_COUNT,
+ NVLIPT_NA_RESERVED_REQUEST_VALUE_NONFATAL_COUNT,
+ NVLIPT_NA_LINK_STATE_WRITE_WHILE_BUSY_NONFATAL_COUNT,
+ NVLIPT_NA_WRITE_TO_LOCKED_SYSTEM_REG_NONFATAL_COUNT,
+ NVLIPT_NA_LINK_STATE_REQUEST_TIMEOUT_NONFATAL_COUNT
+} INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_SUBTYPE;
+
+#define INFOROM_NVL_OBJECT_V3_FATAL_ERR_INDEX_UNSUPPORTED ((NvU8) NV_U8_MAX)
+
+typedef enum
+{
+ INFOROM_NVL_ERROR_TYPE_INVALID = 0,
+ INFOROM_NVL_ERROR_TYPE_COUNT,
+ INFOROM_NVL_ERROR_TYPE_ACCUM
+} INFOROM_NVL_OBJECT_V3_ERROR_TYPE;
+
+typedef enum
+{
+ INFOROM_NVL_ERROR_BLOCK_TYPE_DL = 0,
+ INFOROM_NVL_ERROR_BLOCK_TYPE_TLC,
+ INFOROM_NVL_ERROR_BLOCK_TYPE_NVLIPT
+} INFOROM_NVL_ERROR_BLOCK_TYPE;
+
+typedef struct
+{
+ NvU8 nvliptInstance;
+ NvU8 localLinkIdx;
+ INFOROM_NVLINK_ERROR_TYPES error;
+ NvU32 count; // count is used only for correctable errors
+} INFOROM_NVLINK_ERROR_EVENT;
+
+#define INFOROM_NVL_OBJECT_MAX_SUBLINK_WIDTH 8
+typedef struct
+{
+ NvU16 flitCrc;
+ NvU8 laneCrc[INFOROM_NVL_OBJECT_MAX_SUBLINK_WIDTH];
+ NvU16 rxLinkReplay;
+ NvU16 txLinkReplay;
+ NvU16 linkRecovery;
+} INFOROM_NVLINK_CORRECTABLE_ERROR_COUNTS;
+
+typedef struct INFOROM_NVL_OBJECT_V3_ERROR_ENTRY
+{
+ inforom_U008 header;
+ inforom_U016 metadata;
+ inforom_U008 errorSubtype;
+ union
+ {
+ struct
+ {
+ inforom_U032 lastError;
+ inforom_U032 avgEventDelta;
+ inforom_U032 totalCount;
+ } event;
+ struct
+ {
+ inforom_U032 lastUpdated;
+ NvU64_ALIGN32 totalCount;
+ } accum;
+ } data;
+} INFOROM_NVL_OBJECT_V3_ERROR_ENTRY;
+
+#define INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT "bwb3d"
+
+#define INFOROM_NVL_OBJECT_V3G_NUM_ERROR_ENTRIES 240
+
+typedef struct INFOROM_NVL_OBJECT_V3G
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO remoteDeviceInfo[INFOROM_NVL_OBJECT_V3G_NUM_LINKS];
+ INFOROM_NVL_OBJECT_V3_MINION_DATA minionData[INFOROM_NVL_OBJECT_V3G_NUM_LINKS];
+ INFOROM_NVL_OBJECT_V3G_MAX_CORRECTABLE_ERROR_RATES maxCorrectableErrorRates;
+ INFOROM_NVL_OBJECT_V3_ERROR_ENTRY errorLog[INFOROM_NVL_OBJECT_V3G_NUM_ERROR_ENTRIES];
+} INFOROM_NVL_OBJECT_V3G;
+
+#define INFOROM_NVL_OBJECT_V3G_REMOTE_DEVICE_INFO_ARRAY_FMT \
+ INFOROM_FMT_REP08(INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO_FMT) \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO_FMT)
+
+#define INFOROM_NVL_OBJECT_V3G_MINION_DATA_ARRAY_FMT \
+ INFOROM_FMT_REP08(INFOROM_NVL_OBJECT_V3_MINION_DATA_FMT) \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V3_MINION_DATA_FMT)
+
+#define INFOROM_NVL_OBJECT_V3G_ERROR_LOG_FMT \
+ INFOROM_FMT_REP128(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP64(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP32(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP16(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT)
+
+#define INFOROM_NVL_OBJECT_V3G_FMT \
+ INFOROM_OBJECT_HEADER_V1_00_FMT \
+ INFOROM_NVL_OBJECT_V3G_REMOTE_DEVICE_INFO_ARRAY_FMT \
+ INFOROM_NVL_OBJECT_V3G_MINION_DATA_ARRAY_FMT \
+ INFOROM_NVL_OBJECT_V3G_MAX_CORRECTABLE_ERROR_RATES_FMT \
+ INFOROM_NVL_OBJECT_V3G_ERROR_LOG_FMT
+
+#define INFOROM_NVL_OBJECT_V3G_PACKED_SIZE 5936
+
+// Version 3.S0 ---------------------------------------------------------------
+#define INFOROM_NVL_OBJECT_V3S_NUM_LINKS 36
+#define INFOROM_NVL_OBJECT_V3S_NUM_ERROR_ENTRIES 721
+
+typedef INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE
+ INFOROM_NVL_OBJECT_V3S_CORRECTABLE_ERROR_RATE_ARRAY[INFOROM_NVL_OBJECT_V3S_NUM_LINKS];
+
+#define INFOROM_NVL_OBJECT_V3S_CORRECTABLE_ERROR_RATE_ARRAY_FMT \
+ INFOROM_FMT_REP32(INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE_FMT) \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE_FMT)
+
+typedef struct INFOROM_NVL_OBJECT_V3S_MAX_CORRECTABLE_ERROR_RATES
+{
+ INFOROM_NVL_OBJECT_V3S_CORRECTABLE_ERROR_RATE_ARRAY dailyMaxCorrectableErrorRates[5];
+ INFOROM_NVL_OBJECT_V3S_CORRECTABLE_ERROR_RATE_ARRAY monthlyMaxCorrectableErrorRates[3];
+} INFOROM_NVL_OBJECT_V3S_MAX_CORRECTABLE_ERROR_RATES;
+
+#define INFOROM_NVL_OBJECT_V3S_MAX_CORRECTABLE_ERROR_RATES_FMT \
+ INFOROM_FMT_REP08(INFOROM_NVL_OBJECT_V3S_CORRECTABLE_ERROR_RATE_ARRAY_FMT)
+
+typedef struct INFOROM_NVL_OBJECT_V3S
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO remoteDeviceInfo[INFOROM_NVL_OBJECT_V3S_NUM_LINKS];
+ INFOROM_NVL_OBJECT_V3_MINION_DATA minionData[INFOROM_NVL_OBJECT_V3S_NUM_LINKS];
+ INFOROM_NVL_OBJECT_V3S_MAX_CORRECTABLE_ERROR_RATES maxCorrectableErrorRates;
+ INFOROM_NVL_OBJECT_V3_ERROR_ENTRY errorLog[INFOROM_NVL_OBJECT_V3S_NUM_ERROR_ENTRIES];
+} INFOROM_NVL_OBJECT_V3S;
+
+#define INFOROM_NVL_OBJECT_V3S_REMOTE_DEVICE_INFO_ARRAY_FMT \
+ INFOROM_FMT_REP32(INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO_FMT) \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO_FMT)
+
+#define INFOROM_NVL_OBJECT_V3S_MINION_DATA_ARRAY_FMT \
+ INFOROM_FMT_REP32(INFOROM_NVL_OBJECT_V3_MINION_DATA_FMT) \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V3_MINION_DATA_FMT)
+
+#define INFOROM_NVL_OBJECT_V3S_ERROR_LOG_FMT \
+ INFOROM_FMT_REP512(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP128(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP64(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP16(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT
+
+#define INFOROM_NVL_OBJECT_V3S_FMT \
+ INFOROM_OBJECT_HEADER_V1_00_FMT \
+ INFOROM_NVL_OBJECT_V3S_REMOTE_DEVICE_INFO_ARRAY_FMT \
+ INFOROM_NVL_OBJECT_V3S_MINION_DATA_ARRAY_FMT \
+ INFOROM_NVL_OBJECT_V3S_MAX_CORRECTABLE_ERROR_RATES_FMT \
+ INFOROM_NVL_OBJECT_V3S_ERROR_LOG_FMT
+
+#define INFOROM_NVL_OBJECT_V3S_PACKED_SIZE 17808
+
+// Version 4.G0 ---------------------------------------------------------------
+
+#define INFOROM_NVL_OBJECT_V4G_NUM_LINKS 18
+
+typedef struct INFOROM_NVL_OBJECT_V4_L1_THRESHOLD_DATA
+{
+ inforom_U032 word1;
+ inforom_U032 word2;
+} INFOROM_NVL_OBJECT_V4_L1_THRESHOLD_DATA;
+
+#define INFOROM_NVL_OBJECT_V4_L1_THRESHOLD_DATA_FMT "2d"
+
+typedef INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE
+ INFOROM_NVL_OBJECT_V4G_CORRECTABLE_ERROR_RATE_ARRAY[INFOROM_NVL_OBJECT_V4G_NUM_LINKS];
+
+#define INFOROM_NVL_OBJECT_V4G_CORRECTABLE_ERROR_RATE_ARRAY_FMT \
+ INFOROM_FMT_REP16(INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE_FMT) \
+ INFOROM_FMT_REP02(INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE_FMT)
+
+typedef struct INFOROM_NVL_OBJECT_V4G_MAX_CORRECTABLE_ERROR_RATES
+{
+ INFOROM_NVL_OBJECT_V4G_CORRECTABLE_ERROR_RATE_ARRAY dailyMaxCorrectableErrorRates[5];
+ INFOROM_NVL_OBJECT_V4G_CORRECTABLE_ERROR_RATE_ARRAY monthlyMaxCorrectableErrorRates[3];
+} INFOROM_NVL_OBJECT_V4G_MAX_CORRECTABLE_ERROR_RATES;
+
+#define INFOROM_NVL_OBJECT_V4G_MAX_CORRECTABLE_ERROR_RATES_FMT \
+ INFOROM_FMT_REP08(INFOROM_NVL_OBJECT_V4G_CORRECTABLE_ERROR_RATE_ARRAY_FMT)
+
+typedef struct INFOROM_NVL_OBJECT_V4G_RESERVED
+{
+ inforom_U032 reserved;
+} INFOROM_NVL_OBJECT_V4G_RESERVED;
+
+#define INFOROM_NVL_OBJECT_V4G_RESERVED_FMT "d"
+
+#define INFOROM_NVL_OBJECT_V4G_NUM_ERROR_ENTRIES 364
+
+typedef struct INFOROM_NVL_OBJECT_V4G
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ INFOROM_NVL_OBJECT_V4_L1_THRESHOLD_DATA l1ThresholdData;
+ INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO remoteDeviceInfo[INFOROM_NVL_OBJECT_V4G_NUM_LINKS];
+ INFOROM_NVL_OBJECT_V4G_MAX_CORRECTABLE_ERROR_RATES maxCorrectableErrorRates;
+ INFOROM_NVL_OBJECT_V3_ERROR_ENTRY errorLog[INFOROM_NVL_OBJECT_V4G_NUM_ERROR_ENTRIES];
+ INFOROM_NVL_OBJECT_V4G_RESERVED reserved;
+} INFOROM_NVL_OBJECT_V4G;
+
+#define INFOROM_NVL_OBJECT_V4G_REMOTE_DEVICE_INFO_ARRAY_FMT \
+ INFOROM_FMT_REP16(INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO_FMT) \
+ INFOROM_FMT_REP02(INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO_FMT)
+
+#define INFOROM_NVL_OBJECT_V4G_ERROR_LOG_FMT \
+ INFOROM_FMT_REP128(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP128(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP64(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP32(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP08(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT)
+
+#define INFOROM_NVL_OBJECT_V4G_FMT \
+ INFOROM_OBJECT_HEADER_V1_00_FMT \
+ INFOROM_NVL_OBJECT_V4G_REMOTE_DEVICE_INFO_ARRAY_FMT \
+ INFOROM_NVL_OBJECT_V4_L1_THRESHOLD_DATA_FMT \
+ INFOROM_NVL_OBJECT_V4G_MAX_CORRECTABLE_ERROR_RATES_FMT \
+ INFOROM_NVL_OBJECT_V4G_ERROR_LOG_FMT \
+ INFOROM_NVL_OBJECT_V4G_RESERVED_FMT
+
+#define INFOROM_NVL_OBJECT_V4G_PACKED_SIZE 8400
+
+// Version 4.S0 ---------------------------------------------------------------
+#define INFOROM_NVL_OBJECT_V4S_NUM_LINKS 64
+#define INFOROM_NVL_OBJECT_V4S_NUM_ERROR_ENTRIES 1286
+
+typedef INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE
+ INFOROM_NVL_OBJECT_V4S_CORRECTABLE_ERROR_RATE_ARRAY[INFOROM_NVL_OBJECT_V4S_NUM_LINKS];
+
+#define INFOROM_NVL_OBJECT_V4S_CORRECTABLE_ERROR_RATE_ARRAY_FMT \
+ INFOROM_FMT_REP64(INFOROM_NVL_OBJECT_V3_CORRECTABLE_ERROR_RATE_FMT)
+
+typedef struct INFOROM_NVL_OBJECT_V4S_MAX_CORRECTABLE_ERROR_RATES
+{
+ INFOROM_NVL_OBJECT_V4S_CORRECTABLE_ERROR_RATE_ARRAY dailyMaxCorrectableErrorRates[5];
+ INFOROM_NVL_OBJECT_V4S_CORRECTABLE_ERROR_RATE_ARRAY monthlyMaxCorrectableErrorRates[3];
+} INFOROM_NVL_OBJECT_V4S_MAX_CORRECTABLE_ERROR_RATES;
+
+#define INFOROM_NVL_OBJECT_V4S_MAX_CORRECTABLE_ERROR_RATES_FMT \
+ INFOROM_FMT_REP08(INFOROM_NVL_OBJECT_V4S_CORRECTABLE_ERROR_RATE_ARRAY_FMT)
+
+typedef struct INFOROM_NVL_OBJECT_V4S
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ INFOROM_NVL_OBJECT_V4_L1_THRESHOLD_DATA l1ThresholdData;
+ INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO remoteDeviceInfo[INFOROM_NVL_OBJECT_V4S_NUM_LINKS];
+ INFOROM_NVL_OBJECT_V4S_MAX_CORRECTABLE_ERROR_RATES maxCorrectableErrorRates;
+ INFOROM_NVL_OBJECT_V3_ERROR_ENTRY errorLog[INFOROM_NVL_OBJECT_V4S_NUM_ERROR_ENTRIES];
+} INFOROM_NVL_OBJECT_V4S;
+
+#define INFOROM_NVL_OBJECT_V4S_REMOTE_DEVICE_INFO_ARRAY_FMT \
+ INFOROM_FMT_REP64(INFOROM_NVL_OBJECT_V3_REMOTE_DEVICE_INFO_FMT)
+
+#define INFOROM_NVL_OBJECT_V4S_ERROR_LOG_FMT \
+ INFOROM_FMT_REP512(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP512(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP256(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT) \
+ INFOROM_FMT_REP02(INFOROM_NVL_OBJECT_V3_ERROR_ENTRY_FMT)
+
+#define INFOROM_NVL_OBJECT_V4S_FMT \
+ INFOROM_OBJECT_HEADER_V1_00_FMT \
+ INFOROM_NVL_OBJECT_V4S_REMOTE_DEVICE_INFO_ARRAY_FMT \
+ INFOROM_NVL_OBJECT_V4_L1_THRESHOLD_DATA_FMT \
+ INFOROM_NVL_OBJECT_V4S_MAX_CORRECTABLE_ERROR_RATES_FMT \
+ INFOROM_NVL_OBJECT_V4S_ERROR_LOG_FMT
+
+#define INFOROM_NVL_OBJECT_V4S_PACKED_SIZE 29680
+
+#define INFOROM_NVL_OBJECT_V5_MAX_NUM_LINKS 18
+#define INFOROM_NVL_OBJECT_V5_MAX_NUM_LANES_PER_LINK 2
+
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_UPTIME_FMT "d"
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_LOCAL_MAX_RAW_BER_FMT "b"
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_LOCAL_MAX_EFF_BER_FMT "b"
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_CURR_EFF_MONITOR_FMT "w"
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_PLR_XMIT_RETRY_FMT "d"
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_TOTAL_RECOVERY_FMT "d"
+
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_UPTIME_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_LOCAL_MAX_RAW_BER_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_LOCAL_MAX_EFF_BER_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_CURR_EFF_MONITOR_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_PLR_XMIT_RETRY_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_TOTAL_RECOVERY_FMT
+
+typedef struct INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA // u8[16]
+{
+ inforom_U032 uptime; // u8[4]
+ inforom_U008 localMaxRawBERExp; // u8[1]
+ inforom_U008 localMaxEffBERExp; // u8[1]
+ inforom_U016 currEffBERMonitor; // u8[2]
+ inforom_U032 plrXmitRetryWithinTSecMaxLo; // u8[4]
+ inforom_U032 totalSuccessfulRecoveryEvents; // u8[4]
+} INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA;
+
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_MFDE_FMT "43d"
+
+typedef struct INFOROM_NVL_OBJECT_V5_RECORD_METRIC_MFDE // u8[172]
+{
+ inforom_U032 data[43]; // u8[172]
+} INFOROM_NVL_OBJECT_V5_RECORD_METRIC_MFDE;
+
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA_INITIAL_RAW_BER_FMT "18b"
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA_INITIAL_EFF_BER_FMT "18b"
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA_LAST_DOWN_REASON_FMT "18b"
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA_PADDING_FMT "82b"
+
+#define INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_MFDE_FMT \
+ INFOROM_FMT_REP16(INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_FMT) \
+ INFOROM_FMT_REP02(INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA_FMT) \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA_INITIAL_RAW_BER_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA_INITIAL_EFF_BER_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA_LAST_DOWN_REASON_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA_PADDING_FMT
+
+typedef struct INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA // u8[596]
+{
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_MFDE mfdeEvent; // u8[172]
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_LINK_DATA link[INFOROM_NVL_OBJECT_V5_MAX_NUM_LINKS]; // u8[288]
+ inforom_U008 initialRawBERExp[INFOROM_NVL_OBJECT_V5_MAX_NUM_LINKS]; // u8[18]
+ inforom_U008 initialEffBERExp[INFOROM_NVL_OBJECT_V5_MAX_NUM_LINKS]; // u8[18]
+ inforom_U008 lastDownReason[INFOROM_NVL_OBJECT_V5_MAX_NUM_LINKS]; // u8[18]
+ inforom_U008 padding[82]; // u8[82]
+} INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA;
+
+#define INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_HISTOGRAM_FMT "12b"
+
+typedef struct INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_HISTOGRAM // u8[12]
+{
+ inforom_U008 fixedPoint[12]; // u8[12]
+} INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_HISTOGRAM;
+
+#define INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_LINK_DATA_LINK_DOWN_COUNT_FMT "d"
+
+#define INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_LINK_DATA_FMT \
+ "4b" \
+ INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_LINK_DATA_LINK_DOWN_COUNT_FMT \
+ INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_HISTOGRAM_FMT
+
+typedef struct INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_LINK_DATA // u8[20]
+{
+ inforom_U008 reserved[4]; // u8[4]
+ inforom_U032 linkDownCount; // u8[4]
+ INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_HISTOGRAM downReasonHistogram; // u8[12]
+} INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_LINK_DATA;
+
+#define INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_DATA_GLOBAL_MAX_RAW_BER_FMT "18b"
+#define INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_DATA_GLOBAL_MAX_EFF_BER_FMT "18b"
+
+#define INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_DATA_FMT \
+ INFOROM_FMT_REP16(INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_LINK_DATA_FMT) \
+ INFOROM_FMT_REP02(INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_LINK_DATA_FMT) \
+ INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_DATA_GLOBAL_MAX_RAW_BER_FMT \
+ INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_DATA_GLOBAL_MAX_EFF_BER_FMT
+
+typedef struct INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_DATA // u8[396]
+{
+ INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_LINK_DATA link[INFOROM_NVL_OBJECT_V5_MAX_NUM_LINKS]; // u8[360]
+ inforom_U008 globalMaxRawBERExp[INFOROM_NVL_OBJECT_V5_MAX_NUM_LINKS]; // u8[18]
+ inforom_U008 globalMaxEffBERExp[INFOROM_NVL_OBJECT_V5_MAX_NUM_LINKS]; // u8[18]
+} INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_DATA;
+
+#define INFOROM_NVL_OBJECT_V5_RESERVED_FMT "8b"
+
+#define INFOROM_NVL_OBJECT_V5_FMT \
+ INFOROM_OBJECT_HEADER_V1_00_FMT \
+ INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_DATA_FMT \
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA_FMT \
+ INFOROM_NVL_OBJECT_V5_RESERVED_FMT
+
+#define INFOROM_NVL_OBJECT_V5_PACKED_SIZE 1008
+
+typedef struct INFOROM_NVL_OBJECT_V5 // u8[1008]
+{
+ INFOROM_OBJECT_HEADER_V1_00 header; // u8[8]
+ INFOROM_NVL_OBJECT_V5_ACCUMULATIVE_METRIC_DATA accumulative; // u8[396]
+ INFOROM_NVL_OBJECT_V5_RECORD_METRIC_DATA record; // u8[596]
+ inforom_U008 reserved[8]; // u8[8]
+} INFOROM_NVL_OBJECT_V5;
+
+#define INFOROM_NVL_OBJECT_FLUSH_INTERVAL (60 * 10)
+
+typedef struct
+{
+ struct
+ {
+ NvU32 flitCrc;
+ NvU32 laneCrc[4];
+ } errorsPerMinute[INFOROM_NVL_OBJECT_V3G_NUM_LINKS];
+
+ struct
+ {
+ NvU32 flitCrc;
+ NvU32 laneCrc[4];
+ NvU32 rxLinkReplay;
+ NvU32 txLinkReplay;
+ NvU32 linkRecovery;
+ } lastRead[INFOROM_NVL_OBJECT_V3G_NUM_LINKS];
+} INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V3G;
+
+typedef struct
+{
+ struct
+ {
+ NvU32 flitCrc;
+ NvU32 laneCrc[4];
+ } errorsPerMinute[INFOROM_NVL_OBJECT_V3S_NUM_LINKS];
+
+ struct
+ {
+ NvU32 flitCrc;
+ NvU32 laneCrc[4];
+ NvU32 rxLinkReplay;
+ NvU32 txLinkReplay;
+ NvU32 linkRecovery;
+ } lastRead[INFOROM_NVL_OBJECT_V3S_NUM_LINKS];
+} INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V3S;
+
+typedef struct
+{
+ struct
+ {
+ NvU32 flitCrc;
+ NvU32 laneCrc[4];
+ } errorsPerMinute[INFOROM_NVL_OBJECT_V4G_NUM_LINKS];
+
+ struct
+ {
+ NvU32 flitCrc;
+ NvU32 laneCrc[4];
+ NvU32 rxLinkReplay;
+ NvU32 txLinkReplay;
+ NvU32 linkRecovery;
+ } lastRead[INFOROM_NVL_OBJECT_V4G_NUM_LINKS];
+} INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V4G;
+
+typedef struct
+{
+ struct
+ {
+ NvU32 flitCrc;
+ NvU32 laneCrc[4];
+ } errorsPerMinute[INFOROM_NVL_OBJECT_V4S_NUM_LINKS];
+
+ struct
+ {
+ NvU32 flitCrc;
+ NvU32 laneCrc[4];
+ NvU32 rxLinkReplay;
+ NvU32 txLinkReplay;
+ NvU32 linkRecovery;
+ } lastRead[INFOROM_NVL_OBJECT_V4S_NUM_LINKS];
+} INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V4S;
+
+typedef struct INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V5
+{
+ struct
+ {
+ void *pParams;
+ void *pAsyncHandle;
+ } request[2];
+ NvU8 head;
+} INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V5, INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V6;
+
+typedef union
+{
+ INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V3G v3g;
+ INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V3S v3s;
+ INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V4G v4g;
+ INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V4S v4s;
+ INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V5 v5;
+ INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE_V6 v6;
+} INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE;
+
+typedef struct
+{
+ const char *pFmt;
+ NvU8 *pPackedObject;
+ INFOROM_NVL_OBJECT *pNvl;
+
+ NvBool bDirty;
+ NvBool bDisableFatalErrorLogging;
+ NvBool bDisableCorrectableErrorLogging;
+ NvBool bCallbackPending;
+
+ NvU32 timeSinceLastFlush;
+
+ INFOROM_NVL_CORRECTABLE_ERROR_RATE_STATE correctableErrorRateState;
+} INFOROM_NVLINK_STATE, *PINFOROM_NVLINK_STATE;
+
+// Version 6.0 -------------------------------------------------------------
+#define INFOROM_NVL_OBJECT_V6_MAX_NUM_LINKS 36
+#define INFOROM_NVL_OBJECT_V6_MAX_NUM_LANES_PER_LINK 2
+
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_PLR_TX_BW_LOSS_LOW_FREQUENCY_FMT "6w"
+typedef struct INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_PLR_TX_BW_LOSS_LOW_FREQUENCY // u16[6]
+{
+ inforom_U016 lastPlrTxBwLossLf; // u16
+ inforom_U016 meanPlrTxBwLossLf; // u16
+ inforom_U016 maxPlrTxBwLossLf; // u16
+ inforom_U016 consBelowPlrTxBwLossLfThreshold; // u16
+ inforom_U016 numOfPlrTxBwLossLfWarnings; // u16
+ inforom_U016 numOfPlrTxBwLossLfAlarms; // u16
+} INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_PLR_TX_BW_LOSS_LOW_FREQUENCY;
+
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_RECOVERY_BW_LOSS_LOW_FREQUENCY_FMT "6w"
+typedef struct INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_RECOVERY_BW_LOSS_LOW_FREQUENCY // u16[6]
+{
+ inforom_U016 lastRecoveryBwLossLf; // u16
+ inforom_U016 meanRecoveryBwLossLf; // u16
+ inforom_U016 maxRecoveryBwLossLf; // u16
+ inforom_U016 consBelowRecoveryBwLossLfThreshold; // u16
+ inforom_U016 numOfRecoveryBwLossLfWarnings; // u16
+ inforom_U016 numOfRecoveryBwLossLfAlarms; // u16
+} INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_RECOVERY_BW_LOSS_LOW_FREQUENCY;
+
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_EFFECTIVE_BER_LOW_FREQUENCY_FMT "3w3b6n"
+typedef struct INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_EFFECTIVE_BER_LOW_FREQUENCY // u8[12]
+{
+ inforom_U016 consBelowEffBerLfThreshold; // u16
+ inforom_U016 numOfEffBerLfWarnings; // u16
+ inforom_U016 numOfEffBERLfAlarms; // u16
+ inforom_U008 meanEffBerLfMagnitue; // u8
+ inforom_U008 lastEffBerLfMagnitue; // u8
+ inforom_U008 maxEffBerLfMagnitue; // u8
+ inforom_U004 lastEffBerLfCoef; // u4
+ inforom_U004 meanEffBerLfCoef; // u4
+ inforom_U004 maxEffBerLfCoef; // u4
+ inforom_U004 padding[3]; // u4[3]
+} INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_EFFECTIVE_BER_LOW_FREQUENCY;
+
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_UPTIME_FMT "d"
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_TOTAL_RECOVERY_FMT "d"
+
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_FMT \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_UPTIME_FMT \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_PLR_TX_BW_LOSS_LOW_FREQUENCY_FMT \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_RECOVERY_BW_LOSS_LOW_FREQUENCY_FMT \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_EFFECTIVE_BER_LOW_FREQUENCY_FMT \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_TOTAL_RECOVERY_FMT
+
+typedef struct INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA // u8[44]
+{
+ inforom_U032 uptime; // u8[4]
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_PLR_TX_BW_LOSS_LOW_FREQUENCY plrTxBwLossLf; // u16[6]
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_RECOVERY_BW_LOSS_LOW_FREQUENCY recoveryBwLossLf; // u16[6]
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_EFFECTIVE_BER_LOW_FREQUENCY effBerLf; // u8[12]
+ inforom_U032 totalSuccessfulRecoveryEvents; // u8[4]
+} INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA;
+
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_MFDE_FMT "43w"
+
+typedef struct INFOROM_NVL_OBJECT_V6_RECORD_METRIC_MFDE // u8[172]
+{
+ inforom_U032 data[43]; // u8[172]
+} INFOROM_NVL_OBJECT_V6_RECORD_METRIC_MFDE;
+
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA_INITIAL_RAW_BER_FMT "36b"
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA_INITIAL_EFF_BER_FMT "36b"
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA_LAST_DOWN_REASON_FMT "36b"
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA_LAST_DOWN_ADVANCED_REASON_FMT "36w"
+
+#define INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA_FMT \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_MFDE_FMT \
+ INFOROM_FMT_REP32(INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_FMT) \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA_FMT) \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA_INITIAL_RAW_BER_FMT \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA_INITIAL_EFF_BER_FMT \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA_LAST_DOWN_REASON_FMT \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA_LAST_DOWN_ADVANCED_REASON_FMT
+
+typedef struct INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA // u8[1936]
+{
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_MFDE mfdeEvent; // u8[172]
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_LINK_DATA link[INFOROM_NVL_OBJECT_V6_MAX_NUM_LINKS]; // u8[1584]
+ inforom_U008 initialRawBERExp[INFOROM_NVL_OBJECT_V6_MAX_NUM_LINKS]; // u8[36]
+ inforom_U008 initialEffBERExp[INFOROM_NVL_OBJECT_V6_MAX_NUM_LINKS]; // u8[36]
+ inforom_U008 lastDownReason[INFOROM_NVL_OBJECT_V6_MAX_NUM_LINKS]; // u8[36]
+ inforom_U016 lastDownAdvancedReason[INFOROM_NVL_OBJECT_V6_MAX_NUM_LINKS]; // u8[72]
+} INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA;
+
+#define INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_FMT "16b"
+
+typedef struct INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM // u8[24]
+{
+ inforom_U008 fixedPoint[24]; // u8[24]
+} INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM;
+
+#define INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_XID_LINK_FMT "5b"
+
+typedef struct INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_XID_LINK // u8[5]
+{
+ inforom_U008 fixedPoint[5];
+} INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_XID_LINK;
+
+#define INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_XID_GPU_FMT "d3b"
+
+typedef struct INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_XID_GPU // u8[7]
+{
+ inforom_U032 xidCount; // u8[4]
+ inforom_U008 fixedPoint[3]; // u8[3] 3 per GPU XIDs
+} INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_XID_GPU;
+
+#define INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_LINK_DATA_LINK_DOWN_COUNT_FMT "d"
+#define INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_LINK_DATA_PADDING_FMT "3b"
+
+#define INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_LINK_DATA_FMT \
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_LINK_DATA_LINK_DOWN_COUNT_FMT \
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_FMT \
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_XID_LINK_FMT \
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_LINK_DATA_PADDING_FMT
+
+typedef struct INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_LINK_DATA // u8[36]
+{
+ inforom_U032 linkDownCount; // u8[4]
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM downReasonHistogram; // u8[24]
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_XID_LINK xidHistogram; // u8[5]
+ inforom_U008 padding[3]; // u8[3]
+} INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_LINK_DATA;
+
+#define INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_DATA_PADDING_FMT "b"
+
+#define INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_DATA_FMT \
+ INFOROM_FMT_REP32(INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_LINK_DATA_FMT) \
+ INFOROM_FMT_REP04(INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_LINK_DATA_FMT) \
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_XID_GPU_FMT \
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_DATA_PADDING_FMT
+
+typedef struct INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_DATA // u8[1304]
+{
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_LINK_DATA link[INFOROM_NVL_OBJECT_V6_MAX_NUM_LINKS]; // u8[1296]
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_HISTOGRAM_XID_GPU xidHistogram; // u8[7]
+ inforom_U008 padding; // u8
+} INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_DATA;
+
+#define INFOROM_NVL_OBJECT_V6_RESERVED_FMT "784b"
+
+#define INFOROM_NVL_OBJECT_V6_FMT \
+ INFOROM_OBJECT_HEADER_V1_00_FMT \
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_DATA_FMT \
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA_FMT \
+ INFOROM_NVL_OBJECT_V6_RESERVED_FMT
+
+#define INFOROM_NVL_OBJECT_V6_PACKED_SIZE 4032
+
+typedef struct INFOROM_NVL_OBJECT_V6 // u8[]
+{
+ INFOROM_OBJECT_HEADER_V1_00 header; // u8[8]
+ INFOROM_NVL_OBJECT_V6_ACCUMULATIVE_METRIC_DATA accumulative; // u8[1304]
+ INFOROM_NVL_OBJECT_V6_RECORD_METRIC_DATA record; // u8[1936]
+ inforom_U008 reserved[784]; // u8[784]
+} INFOROM_NVL_OBJECT_V6;
+
+union INFOROM_NVL_OBJECT
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ INFOROM_NVL_OBJECT_V1 v1;
+ INFOROM_NVL_OBJECT_V2 v2;
+ INFOROM_NVL_OBJECT_V3G v3g;
+ INFOROM_NVL_OBJECT_V3S v3s;
+ INFOROM_NVL_OBJECT_V4G v4g;
+ INFOROM_NVL_OBJECT_V4S v4s;
+ INFOROM_NVL_OBJECT_V5 v5;
+ INFOROM_NVL_OBJECT_V6 v6;
+};
+
+#endif /* _IFRNVL_H_ */
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrstruct.h b/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrstruct.h
new file mode 100644
index 0000000..5c1caed
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/inforom/ifrstruct.h
@@ -0,0 +1,110 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 1999-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _IFRSTRUCT_H_
+#define _IFRSTRUCT_H_
+
+#include "inforom/types.h"
+
+#include "inforom/ifrnvl.h"
+#include "inforom/ifrecc.h"
+#include "inforom/ifrdem.h"
+#include "inforom/omsdef.h"
+
+#define INFOROM_OBD_OBJECT_V1_XX_PACKED_SIZE 128
+
+struct INFOROM_OBD_OBJECT_V1_XX
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ inforom_U032 buildDate;
+ inforom_U008 marketingName[24];
+ inforom_U008 serialNumber[16];
+ inforom_U008 memoryManufacturer;
+ inforom_U008 memoryPartID[20];
+ inforom_U008 memoryDateCode[6];
+ inforom_U008 productPartNumber[20];
+ inforom_U008 boardRevision[3];
+ inforom_U008 boardType;
+ inforom_U008 board699PartNumber[20];
+ inforom_U008 reserved[5];
+};
+#define INFOROM_OBD_OBJECT_V1_XX_FMT INFOROM_OBJECT_HEADER_V1_00_FMT "d116b"
+typedef struct INFOROM_OBD_OBJECT_V1_XX INFOROM_OBD_OBJECT_V1_XX;
+
+#define INFOROM_OBD_OBJECT_V2_XX_PACKED_SIZE 224
+
+struct INFOROM_OBD_OBJECT_V2_XX
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ inforom_U032 buildDate;
+ inforom_U008 marketingName[24];
+ inforom_U008 serialNumber[16];
+ inforom_U008 memoryManufacturer;
+ inforom_U008 memoryPartID[20];
+ inforom_U008 memoryDateCode[6];
+ inforom_U008 productPartNumber[20];
+ inforom_U008 boardRevision[3];
+ inforom_U008 boardType;
+ inforom_U008 board699PartNumber[20];
+ inforom_U032 productLength;
+ inforom_U032 productWidth;
+ inforom_U032 productHeight;
+ inforom_U008 vbiosFactoryVersion[5];
+ inforom_U008 board965PartNumber[20];
+ inforom_U008 reserved[64];
+};
+#define INFOROM_OBD_OBJECT_V2_XX_FMT INFOROM_OBJECT_HEADER_V1_00_FMT "d111b3d89b"
+typedef struct INFOROM_OBD_OBJECT_V2_XX INFOROM_OBD_OBJECT_V2_XX;
+
+//
+// OEM 1.0
+//
+
+#define INFOROM_OEM_OBJECT_V1_00_PACKED_SIZE 512
+#define INFOROM_OEM_OBJECT_HEADER_VERSION 1
+
+struct INFOROM_OEM_OBJECT_V1_00
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ inforom_U008 oemInfo[504];
+};
+#define INFOROM_OEM_OBJECT_V1_00_FMT INFOROM_OBJECT_HEADER_V1_00_FMT "504b"
+typedef struct INFOROM_OEM_OBJECT_V1_00 INFOROM_OEM_OBJECT_V1_00;
+
+#define INFOROM_IMG_OBJECT_V1_00_PACKED_SIZE 64
+#define INFOROM_IMG_OBJECT_V1_00_VERSION_LENGTH 16
+
+struct INFOROM_IMG_OBJECT_V1_00
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ inforom_U008 version[INFOROM_IMG_OBJECT_V1_00_VERSION_LENGTH];
+ inforom_U016 pciDeviceId;
+ inforom_U016 pciVendorId;
+ inforom_U016 pciSubsystemId;
+ inforom_U016 pciSubsystemVendorId;
+ inforom_U008 reserved[32];
+};
+#define INFOROM_IMG_OBJECT_V1_00_FMT INFOROM_OBJECT_HEADER_V1_00_FMT "16b4w32b"
+typedef struct INFOROM_IMG_OBJECT_V1_00 INFOROM_IMG_OBJECT_V1_00;
+
+#endif // _IFRSTRUCT_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/inforom/omsdef.h b/userspace/sdks/nv570/nvalloc/common/inc/inforom/omsdef.h
new file mode 100644
index 0000000..9509a7b
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/inforom/omsdef.h
@@ -0,0 +1,116 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _INFOROM_OMSDEF_H_
+#define _INFOROM_OMSDEF_H_
+
+#include "inforom/types.h"
+
+#define INFOROM_OMS_OBJECT_V1_PACKED_SIZE 112
+
+#define INFOROM_OMS_OBJECT_V1_SETTINGS_ENTRY_DATA_ENTRY_AVAILABLE 0:0
+#define INFOROM_OMS_OBJECT_V1_SETTINGS_ENTRY_DATA_ENTRY_AVAILABLE_NO 0
+#define INFOROM_OMS_OBJECT_V1_SETTINGS_ENTRY_DATA_ENTRY_AVAILABLE_YES 1
+#define INFOROM_OMS_OBJECT_V1_SETTINGS_ENTRY_DATA_FORCE_DEVICE_DISABLE 1:1
+#define INFOROM_OMS_OBJECT_V1_SETTINGS_ENTRY_DATA_FORCE_DEVICE_DISABLE_NO 0
+#define INFOROM_OMS_OBJECT_V1_SETTINGS_ENTRY_DATA_FORCE_DEVICE_DISABLE_YES 1
+
+#define INFOROM_OMS_OBJECT_V1G_SETTINGS_ENTRY_DATA_RESERVED 23:2
+#define INFOROM_OMS_OBJECT_V1G_SETTINGS_ENTRY_DATA_ENTRY_CHECKSUM 31:24
+
+typedef struct INFOROM_OMS_OBJECT_V1G_SETTINGS_ENTRY
+{
+ inforom_U032 data;
+ inforom_U032 clockLimitMin;
+ inforom_U032 clockLimitMax;
+} INFOROM_OMS_OBJECT_V1G_SETTINGS_ENTRY;
+
+#define INFOROM_OMS_OBJECT_V1G_NUM_SETTINGS_ENTRIES 8
+
+typedef struct INFOROM_OMS_OBJECT_V1G
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ inforom_U032 lifetimeRefreshCount;
+ INFOROM_OMS_OBJECT_V1G_SETTINGS_ENTRY settings[
+ INFOROM_OMS_OBJECT_V1G_NUM_SETTINGS_ENTRIES];
+ inforom_U032 reserved;
+} INFOROM_OMS_OBJECT_V1G;
+
+#define INFOROM_OMS_OBJECT_V1G_FMT INFOROM_OBJECT_HEADER_V1_00_FMT "26d"
+
+#define INFOROM_OMS_OBJECT_V1S_SETTINGS_ENTRY_DATA_RESERVED 7:2
+#define INFOROM_OMS_OBJECT_V1S_SETTINGS_ENTRY_DATA_ENTRY_CHECKSUM 15:8
+
+typedef struct INFOROM_OMS_OBJECT_V1S_SETTINGS_ENTRY
+{
+ inforom_U016 data;
+} INFOROM_OMS_OBJECT_V1S_SETTINGS_ENTRY;
+
+#define INFOROM_OMS_OBJECT_V1S_NUM_SETTINGS_ENTRIES 50
+
+typedef struct INFOROM_OMS_OBJECT_V1S
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ inforom_U032 lifetimeRefreshCount;
+ INFOROM_OMS_OBJECT_V1S_SETTINGS_ENTRY settings[
+ INFOROM_OMS_OBJECT_V1S_NUM_SETTINGS_ENTRIES];
+} INFOROM_OMS_OBJECT_V1S;
+
+#define INFOROM_OMS_OBJECT_V1S_FMT INFOROM_OBJECT_HEADER_V1_00_FMT "d50w"
+
+typedef struct INFOROM_OMS_V1S_DATA
+{
+ INFOROM_OMS_OBJECT_V1S_SETTINGS_ENTRY *pIter;
+ INFOROM_OMS_OBJECT_V1S_SETTINGS_ENTRY prev;
+ INFOROM_OMS_OBJECT_V1S_SETTINGS_ENTRY *pNext;
+} INFOROM_OMS_V1S_DATA;
+
+typedef struct INFOROM_OMS_V1G_DATA
+{
+ INFOROM_OMS_OBJECT_V1G_SETTINGS_ENTRY *pIter;
+ INFOROM_OMS_OBJECT_V1G_SETTINGS_ENTRY prev;
+ INFOROM_OMS_OBJECT_V1G_SETTINGS_ENTRY *pNext;
+} INFOROM_OMS_V1G_DATA;
+
+typedef union
+{
+ INFOROM_OBJECT_HEADER_V1_00 header;
+ INFOROM_OMS_OBJECT_V1S v1s;
+ INFOROM_OMS_OBJECT_V1G v1g;
+} INFOROM_OMS_OBJECT;
+
+typedef union
+{
+ INFOROM_OMS_V1S_DATA v1s;
+ INFOROM_OMS_V1G_DATA v1g;
+} INFOROM_OMS_DATA;
+
+typedef struct
+{
+ const char *pFmt;
+ NvU8 *pPackedObject;
+ INFOROM_OMS_OBJECT *pOms;
+ INFOROM_OMS_DATA omsData;
+} INFOROM_OMS_STATE;
+
+#endif /* _INFOROM_OMSDEF_H_ */
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/inforom/types.h b/userspace/sdks/nv570/nvalloc/common/inc/inforom/types.h
new file mode 100644
index 0000000..c062cb0
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/inforom/types.h
@@ -0,0 +1,79 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _INFOROM_TYPES_H_
+#define _INFOROM_TYPES_H_
+
+/*!
+ * @file types.h
+ * @brief Common types and definitions used by InfoROM objects
+ */
+
+typedef NvS32 inforom_S008;
+typedef NvU32 inforom_U004;
+typedef NvU32 inforom_U008;
+typedef NvU32 inforom_U016;
+typedef NvU32 inforom_U024;
+typedef NvU32 inforom_U032;
+typedef NvU64 inforom_U064;
+typedef NvU8 inforom_X008;
+
+#define INFOROM_FMT_S08 's'
+#define INFOROM_FMT_U04 'n'
+#define INFOROM_FMT_U08 'b'
+#define INFOROM_FMT_U16 'w'
+#define INFOROM_FMT_U24 't'
+#define INFOROM_FMT_U32 'd'
+#define INFOROM_FMT_U64 'q'
+#define INFOROM_FMT_BINARY 'x'
+
+// Helper macros for generating repeating format sequences
+#define INFOROM_FMT_REP02(fmt) fmt fmt
+#define INFOROM_FMT_REP04(fmt) INFOROM_FMT_REP02(fmt) INFOROM_FMT_REP02(fmt)
+#define INFOROM_FMT_REP08(fmt) INFOROM_FMT_REP04(fmt) INFOROM_FMT_REP04(fmt)
+#define INFOROM_FMT_REP16(fmt) INFOROM_FMT_REP08(fmt) INFOROM_FMT_REP08(fmt)
+#define INFOROM_FMT_REP32(fmt) INFOROM_FMT_REP16(fmt) INFOROM_FMT_REP16(fmt)
+#define INFOROM_FMT_REP64(fmt) INFOROM_FMT_REP32(fmt) INFOROM_FMT_REP32(fmt)
+#define INFOROM_FMT_REP128(fmt) INFOROM_FMT_REP64(fmt) INFOROM_FMT_REP64(fmt)
+#define INFOROM_FMT_REP256(fmt) INFOROM_FMT_REP128(fmt) INFOROM_FMT_REP128(fmt)
+#define INFOROM_FMT_REP512(fmt) INFOROM_FMT_REP256(fmt) INFOROM_FMT_REP256(fmt)
+
+#define INFOROM_OBJECT_SUBVERSION_SUPPORTS_NVSWITCH(sv) \
+ ((((sv) & 0xF0) == 0) || (((sv) & 0xF0) == 0x20))
+
+#define INFOROM_OBJECT_HEADER_V1_00_SIZE_OFFSET 0x05
+#define INFOROM_OBJECT_HEADER_V1_00_CHECKSUM_OFFSET 0x07
+#define INFOROM_OBJECT_HEADER_V1_00_PACKED_SIZE 8
+
+typedef struct INFOROM_OBJECT_HEADER_V1_00
+{
+ inforom_S008 type[3];
+ inforom_U008 version;
+ inforom_U008 subversion;
+ inforom_U016 size;
+ inforom_U008 checksum;
+} INFOROM_OBJECT_HEADER_V1_00;
+
+#define INFOROM_OBJECT_HEADER_V1_00_FMT "3s2bwb"
+
+#endif // _INFOROM_TYPES_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/mctp_format.h b/userspace/sdks/nv570/nvalloc/common/inc/mctp_format.h
new file mode 100644
index 0000000..dd2052a
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/mctp_format.h
@@ -0,0 +1,120 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef MCTP_FORMAT_H
+#define MCTP_FORMAT_H
+
+/**
+ * MCTP (Management Component Transport Protocol) format definitions
+ *
+ * Based on DMTF DSP0236 - MCTP Base Specification.
+ * This is a common header that will be used across multiple RM subsystems
+ * like FSP, GSP, SEC2, etc. for standardized inter-processor communication.
+ *
+ * MCTP provides a transport-agnostic protocol for message exchange between
+ * platform management components. RM uses MCTP's basic transport header
+ * with vendor-defined message types (NVDM) for internal communication.
+ */
+
+// MCTP Transport Header Fields (First DWORD)
+#define MCTP_HEADER_VERSION 3:0
+#define MCTP_HEADER_RSVD 7:4
+#define MCTP_HEADER_DEID 15:8
+#define MCTP_HEADER_SEID 23:16
+#define MCTP_HEADER_TAG 26:24
+#define MCTP_HEADER_TO 27:27
+#define MCTP_HEADER_SEQ 29:28
+#define MCTP_HEADER_EOM 30:30
+#define MCTP_HEADER_SOM 31:31
+
+// MCTP Message Header Fields (Second DWORD)
+#define MCTP_MSG_HEADER_TYPE 6:0
+#define MCTP_MSG_HEADER_IC 7:7
+#define MCTP_MSG_HEADER_VENDOR_ID 23:8
+#define MCTP_MSG_HEADER_NVDM_TYPE 31:24
+
+// MCTP Constants from specification
+#define MCTP_MSG_HEADER_TYPE_VENDOR_PCI 0x7e
+#define MCTP_MSG_HEADER_VENDOR_ID_NV 0x10de
+
+/**
+ * @brief Create MCTP transport header
+ *
+ * Generic helper function to construct the MCTP transport header (first DWORD).
+ * Can be used by any subsystem (FSP, GSP, SEC2, etc.).
+ *
+ * Note: TAG and TO fields are set to 0. These are only needed for complex
+ * scenarios with concurrent interleaved messages or request/response correlation,
+ * which are not currently used. Header version is hard-coded to 0x1 (MCTP 1.0).
+ *
+ * @param[in] som Start of Message flag (1 for first packet)
+ * @param[in] eom End of Message flag (1 for last packet)
+ * @param[in] seid Source Endpoint ID
+ * @param[in] deid Destination Endpoint ID
+ * @param[in] seq Packet sequence number (0-3, modulo 4)
+ *
+ * @return Constructed MCTP transport header (32-bit DWORD)
+ */
+static NV_INLINE NvU32
+mctpCreateTransportHeader
+(
+ NvU8 som,
+ NvU8 eom,
+ NvU8 seid,
+ NvU8 deid,
+ NvU8 seq
+)
+{
+ return REF_NUM(MCTP_HEADER_VERSION, 0x1) |
+ REF_NUM(MCTP_HEADER_SEID, seid) |
+ REF_NUM(MCTP_HEADER_DEID, deid) |
+ REF_NUM(MCTP_HEADER_SEQ, seq) |
+ REF_NUM(MCTP_HEADER_EOM, eom) |
+ REF_NUM(MCTP_HEADER_SOM, som);
+}
+
+/**
+ * @brief Create NVDM over MCTP header
+ *
+ * Generic helper function to construct the NVDM message header (second DWORD).
+ * Sets the MCTP message type to Vendor Defined PCI (0x7E) and includes
+ * NVIDIA's vendor ID (0x10DE) along with the subsystem-specific NVDM type.
+ * Can be used by any subsystem (FSP, GSP, SEC2, etc.).
+ *
+ * @param[in] nvdmType NVDM message type (subsystem/communication-path specific)
+ *
+ * @return Constructed NVDM header (32-bit DWORD)
+ */
+static NV_INLINE NvU32
+mctpCreateNvdmHeader
+(
+ NvU8 nvdmType
+)
+{
+ return REF_DEF(MCTP_MSG_HEADER_TYPE, _VENDOR_PCI) |
+ REF_NUM(MCTP_MSG_HEADER_IC, 0) |
+ REF_DEF(MCTP_MSG_HEADER_VENDOR_ID, _NV) |
+ REF_NUM(MCTP_MSG_HEADER_NVDM_TYPE, nvdmType);
+}
+
+#endif // MCTP_FORMAT_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/nv-firmware-chip-family-select.h b/userspace/sdks/nv570/nvalloc/common/inc/nv-firmware-chip-family-select.h
new file mode 100644
index 0000000..962776a
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/nv-firmware-chip-family-select.h
@@ -0,0 +1,230 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2022-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef NV_FIRMWARE_CHIP_FAMILY_SELECT_H
+#define NV_FIRMWARE_CHIP_FAMILY_SELECT_H
+
+
+
+#include <published/nv_arch.h>
+#include <nv-firmware.h>
+#include <nvctassert.h>
+
+static inline nv_firmware_chip_family_t nv_firmware_get_chip_family(
+ NvU32 gpuArch,
+ NvU32 gpuImpl
+)
+{
+ switch (gpuArch)
+ {
+ case GPU_ARCHITECTURE_TURING:
+ if (gpuImpl <= GPU_IMPLEMENTATION_TU106)
+ return NV_FIRMWARE_CHIP_FAMILY_TU10X;
+ else
+ return NV_FIRMWARE_CHIP_FAMILY_TU11X;
+
+ case GPU_ARCHITECTURE_AMPERE:
+ if (gpuImpl == GPU_IMPLEMENTATION_GA100)
+ return NV_FIRMWARE_CHIP_FAMILY_GA100;
+ else
+ return NV_FIRMWARE_CHIP_FAMILY_GA10X;
+
+ case GPU_ARCHITECTURE_ADA:
+ return NV_FIRMWARE_CHIP_FAMILY_AD10X;
+
+ case GPU_ARCHITECTURE_HOPPER:
+ return NV_FIRMWARE_CHIP_FAMILY_GH100;
+
+ case GPU_ARCHITECTURE_BLACKWELL_GB1XX:
+ if (gpuImpl == GPU_IMPLEMENTATION_GB10B)
+ return NV_FIRMWARE_CHIP_FAMILY_GB10Y;
+ else
+ return NV_FIRMWARE_CHIP_FAMILY_GB10X;
+
+ case GPU_ARCHITECTURE_BLACKWELL_GB2XX:
+ if (gpuImpl >= GPU_IMPLEMENTATION_GB20B)
+ return NV_FIRMWARE_CHIP_FAMILY_GB20Y;
+ else
+ return NV_FIRMWARE_CHIP_FAMILY_GB20X;
+
+ case GPU_ARCHITECTURE_RUBIN_GR1XX:
+ return NV_FIRMWARE_CHIP_FAMILY_GR10X;
+ }
+
+ return NV_FIRMWARE_CHIP_FAMILY_NULL;
+}
+
+typedef enum
+{
+ NV_FIRMWARE_TASK_INIT,
+ NV_FIRMWARE_TASK_RM,
+ NV_FIRMWARE_TASK_INTR,
+ NV_FIRMWARE_TASK_VGPU,
+ NV_FIRMWARE_TASK_MNOC,
+ NV_FIRMWARE_TASK_DEBUG,
+ NV_FIRMWARE_TASK_ROOT,
+ NV_FIRMWARE_TASK_RM_STATE_MONITOR,
+
+ NV_FIRMWARE_TASK_COUNT
+} nv_firmware_task_t;
+
+typedef enum {
+ NV_FIRMWARE_LIBOS_NONE_SUPPORTED = 0x0,
+ NV_FIRMWARE_LIBOS2_SUPPORTED = 0x1,
+ NV_FIRMWARE_LIBOS3_SUPPORTED = 0x2,
+} libosMappingType;
+
+typedef struct
+{
+ const char *memory_id;
+ const char *prefix;
+ const char *elf_section_name;
+ const NvU8 supported_os; // bitmask
+} nv_firmware_task_log_info_t;
+
+static inline
+const nv_firmware_task_log_info_t *nv_firmware_get_task_log_infos(unsigned *num_infos)
+{
+ const static nv_firmware_task_log_info_t infos[] =
+ {
+ {"LOGINIT", "INIT", ".fwlogging_init", NV_FIRMWARE_LIBOS2_SUPPORTED | NV_FIRMWARE_LIBOS3_SUPPORTED},
+ {"LOGRM", "RM", ".fwlogging_rm", NV_FIRMWARE_LIBOS2_SUPPORTED | NV_FIRMWARE_LIBOS3_SUPPORTED},
+ {"LOGINTR", "INTR", ".fwlogging_rm", NV_FIRMWARE_LIBOS3_SUPPORTED},
+ {"LOGVGPU", "VGPU", ".fwlogging_vgpu", NV_FIRMWARE_LIBOS2_SUPPORTED | NV_FIRMWARE_LIBOS3_SUPPORTED},
+ {"LOGMNOC", "MNOC", ".fwlogging_mnoc", NV_FIRMWARE_LIBOS3_SUPPORTED},
+ {"LOGDBG", "DBG", ".fwlogging_debug", NV_FIRMWARE_LIBOS3_SUPPORTED},
+ {"LOGROOT", "ROOT", ".fwlogging_start", NV_FIRMWARE_LIBOS3_SUPPORTED},
+ {"LOGRMON", "RMON", ".fwlogging_rm", NV_FIRMWARE_LIBOS3_SUPPORTED},
+ };
+
+ *num_infos = NV_ARRAY_ELEMENTS(infos);
+ ct_assert(NV_ARRAY_ELEMENTS(infos) == NV_FIRMWARE_TASK_COUNT);
+
+ return infos;
+}
+
+static inline
+const nv_firmware_task_log_info_t* nv_firmware_log_info_for_task(nv_firmware_task_t task_id)
+{
+ unsigned num_infos = 0;
+ const nv_firmware_task_log_info_t* infos = nv_firmware_get_task_log_infos(&num_infos);
+
+ if ((unsigned)task_id >= num_infos)
+ {
+ return NULL;
+ }
+
+ return &infos[task_id];
+}
+
+typedef struct
+{
+ const char *elf_section_name;
+
+ struct
+ {
+ NvU32 lo, hi;
+ } gpuArch;
+
+ struct
+ {
+ NvU32 lo, hi;
+ } gpuImpl;
+} nv_firmware_kernel_log_info_t;
+
+#define NV_FIRMWARE_KERNEL_LOG_MEMORY_ID "LOGKRNL"
+#define NV_FIRMWARE_KERNEL_LOG_PREFIX "KRNL"
+#define NV_FIRMWARE_GPU_ARCH_SHIFT 0x4
+
+//
+// HAL for selecting .fwlogging section. Chip ID is checked to fall within {gpuArch, gpuImpl}::{lo, hi}
+// ranges. Optional gpuImpl range can be used to specify sub-range of an architecture.
+// If `hi` is not set, the range is treated as open. Ranges are checked in order of specification.
+// Range overlaps are allowed and resolved by the order.
+//
+static inline
+const nv_firmware_kernel_log_info_t *nv_firmware_get_kernel_log_infos(unsigned *num_infos)
+{
+ const static nv_firmware_kernel_log_info_t infos[] =
+ {
+ {".fwlogging_kernel_gr10x",
+ {GPU_ARCHITECTURE_RUBIN_GR1XX}, // gr10x...
+ },
+ {".fwlogging_kernel_gb20y",
+ {GPU_ARCHITECTURE_BLACKWELL_GB2XX, GPU_ARCHITECTURE_BLACKWELL_GB2XX}, // gb20y
+ {GPU_IMPLEMENTATION_GB20B, 0}
+ },
+ {".fwlogging_kernel_gb20x",
+ {GPU_ARCHITECTURE_BLACKWELL_GB2XX}, // gb20x...
+ },
+ {".fwlogging_kernel_gb10y",
+ {GPU_ARCHITECTURE_BLACKWELL_GB1XX, GPU_ARCHITECTURE_BLACKWELL_GB1XX}, // gb10y
+ {GPU_IMPLEMENTATION_GB10B, 0}
+ },
+
+ {".fwlogging_kernel_gb10x",
+ {GPU_ARCHITECTURE_BLACKWELL_GB1XX}, // gb10x...
+ },
+
+ {".fwlogging_kernel_gh100",
+ {GPU_ARCHITECTURE_HOPPER, GPU_ARCHITECTURE_HOPPER}, // gh100
+ },
+
+ {".fwlogging_kernel_ga10x",
+ {GPU_ARCHITECTURE_AMPERE, GPU_ARCHITECTURE_ADA}, // ga10x...ad10x
+ },
+ };
+
+ *num_infos = NV_ARRAY_ELEMENTS(infos);
+
+ return infos;
+}
+
+static inline
+const nv_firmware_kernel_log_info_t *nv_firmware_kernel_log_info_for_gpu(NvU32 gpuArch, NvU32 gpuImpl)
+{
+ unsigned num_infos = 0;
+ const nv_firmware_kernel_log_info_t* infos = nv_firmware_get_kernel_log_infos(&num_infos);
+
+ for (unsigned i = 0; i < num_infos; i++)
+ {
+ const nv_firmware_kernel_log_info_t* info = &infos[i];
+
+ NvBool bMatchingArch = info->gpuArch.lo <= gpuArch;
+ if (info->gpuArch.hi != 0)
+ bMatchingArch &= gpuArch <= info->gpuArch.hi;
+
+ NvBool bMatchingImpl = info->gpuImpl.lo <= gpuImpl;
+ if (info->gpuImpl.hi != 0)
+ bMatchingImpl &= gpuImpl <= info->gpuImpl.hi;
+
+ if (bMatchingArch && bMatchingImpl)
+ {
+ return info;
+ }
+ }
+
+ return NULL;
+}
+
+#endif // NV_FIRMWARE_CHIP_FAMILY_SELECT_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/nv-firmware.h b/userspace/sdks/nv570/nvalloc/common/inc/nv-firmware.h
new file mode 100644
index 0000000..000aa38
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/nv-firmware.h
@@ -0,0 +1,145 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef NV_FIRMWARE_H
+#define NV_FIRMWARE_H
+
+
+
+#include <nvtypes.h>
+#include <nvmisc.h>
+
+typedef enum
+{
+ NV_FIRMWARE_TYPE_GSP,
+ NV_FIRMWARE_TYPE_GSP_LOG,
+ NV_FIRMWARE_TYPE_UCODES
+} nv_firmware_type_t;
+
+typedef enum
+{
+ NV_FIRMWARE_CHIP_FAMILY_NULL = 0,
+ NV_FIRMWARE_CHIP_FAMILY_TU10X = 1,
+ NV_FIRMWARE_CHIP_FAMILY_TU11X = 2,
+ NV_FIRMWARE_CHIP_FAMILY_GA100 = 3,
+ NV_FIRMWARE_CHIP_FAMILY_GA10X = 4,
+ NV_FIRMWARE_CHIP_FAMILY_AD10X = 5,
+ NV_FIRMWARE_CHIP_FAMILY_GH100 = 6,
+ NV_FIRMWARE_CHIP_FAMILY_GB10X = 8,
+ NV_FIRMWARE_CHIP_FAMILY_GB20X = 9,
+ NV_FIRMWARE_CHIP_FAMILY_GR10X = 10,
+ NV_FIRMWARE_CHIP_FAMILY_GB10Y = 11,
+ NV_FIRMWARE_CHIP_FAMILY_GB20Y = 12,
+ NV_FIRMWARE_CHIP_FAMILY_END,
+} nv_firmware_chip_family_t;
+
+static inline const char *nv_firmware_chip_family_to_string(
+ nv_firmware_chip_family_t fw_chip_family
+)
+{
+ switch (fw_chip_family) {
+ case NV_FIRMWARE_CHIP_FAMILY_GR10X: return "gr10x";
+ case NV_FIRMWARE_CHIP_FAMILY_GB10X: return "gb10x";
+ case NV_FIRMWARE_CHIP_FAMILY_GB10Y: return "gb10y";
+ case NV_FIRMWARE_CHIP_FAMILY_GB20Y: return "gb20y";
+ case NV_FIRMWARE_CHIP_FAMILY_GB20X: return "gb20x";
+ case NV_FIRMWARE_CHIP_FAMILY_GH100: return "gh100";
+ case NV_FIRMWARE_CHIP_FAMILY_AD10X: return "ad10x";
+ case NV_FIRMWARE_CHIP_FAMILY_GA10X: return "ga10x";
+ case NV_FIRMWARE_CHIP_FAMILY_GA100: return "ga100";
+ case NV_FIRMWARE_CHIP_FAMILY_TU11X: return "tu11x";
+ case NV_FIRMWARE_CHIP_FAMILY_TU10X: return "tu10x";
+
+ case NV_FIRMWARE_CHIP_FAMILY_END: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_NULL:
+ return "";
+ }
+ return "";
+}
+
+// The includer may optionally define
+// NV_FIRMWARE_FOR_NAME(name)
+// to return a platform-defined string for a given a firmware base name.
+//
+// The function nv_firmware_for_chip_family will then be available.
+#if defined(NV_FIRMWARE_FOR_NAME)
+static inline const char *nv_firmware_for_chip_family(
+ nv_firmware_type_t fw_type,
+ nv_firmware_chip_family_t fw_chip_family
+)
+{
+ switch (fw_chip_family)
+ {
+ case NV_FIRMWARE_CHIP_FAMILY_GR10X: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_GB10X: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_GB10Y: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_GB20Y: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_GB20X: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_GH100: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_AD10X: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_GA10X:
+ {
+ switch (fw_type)
+ {
+ case NV_FIRMWARE_TYPE_GSP: return NV_FIRMWARE_FOR_NAME("gsp_ga10x");
+ case NV_FIRMWARE_TYPE_GSP_LOG: return NV_FIRMWARE_FOR_NAME("gsp_log_ga10x");
+ case NV_FIRMWARE_TYPE_UCODES: return NV_FIRMWARE_FOR_NAME("ucodes_ga10x");
+ }
+ return "";
+ }
+
+ case NV_FIRMWARE_CHIP_FAMILY_GA100: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_TU11X: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_TU10X:
+ {
+ switch (fw_type)
+ {
+ case NV_FIRMWARE_TYPE_GSP: return NV_FIRMWARE_FOR_NAME("gsp_tu10x");
+ case NV_FIRMWARE_TYPE_GSP_LOG: return NV_FIRMWARE_FOR_NAME("gsp_log_tu10x");
+ case NV_FIRMWARE_TYPE_UCODES: return NV_FIRMWARE_FOR_NAME("ucodes_tu10x");
+ }
+ return "";
+ }
+
+ case NV_FIRMWARE_CHIP_FAMILY_END: // fall through
+ case NV_FIRMWARE_CHIP_FAMILY_NULL:
+ return "";
+ }
+
+ return "";
+}
+#endif // defined(NV_FIRMWARE_FOR_NAME)
+
+// The includer may optionally define
+// NV_FIRMWARE_DECLARE_GSP(name)
+// which will then be invoked (at the top-level) for each
+// gsp_* and ucodes_* (but not gsp_log_*)
+#if defined(NV_FIRMWARE_DECLARE_GSP)
+NV_FIRMWARE_DECLARE_GSP("gsp_ga10x")
+NV_FIRMWARE_DECLARE_GSP("gsp_tu10x")
+NV_FIRMWARE_DECLARE_GSP("ucodes_ga10x")
+NV_FIRMWARE_DECLARE_GSP("ucodes_tu10x")
+#endif // defined(NV_FIRMWARE_DECLARE_GSP)
+
+#endif // NV_FIRMWARE_DECLARE_GSP
+
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/nvcst.h b/userspace/sdks/nv570/nvalloc/common/inc/nvcst.h
new file mode 100644
index 0000000..1b7239a
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/nvcst.h
@@ -0,0 +1,460 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2004-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef NVCST_H
+#define NVCST_H
+
+#include <platform/chipset/chipset.h>
+#include <platform/chipset/chipset_info.h>
+#include <nvpcie.h>
+#include <nvdevid.h>
+
+#define CHIPSET_SETUP_FUNC(name) static NV_STATUS name(OBJCL *pCl);
+
+CHIPSET_SETUP_FUNC(Intel_25XX_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_27XX_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_2A40_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_0040_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_2E00_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_25E0_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_29XX_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_29X0_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_29E0_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_359E_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_4000_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_4003_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_3400_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_3B42_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_1C46_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_1C10_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_1C4B_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_1C49_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_1D40_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_8D47_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_8D44_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_1E10_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_8C4B_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_8CC4_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_A145_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_A2C5_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_A242_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_A2D2_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_A2C9_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_A301_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_0685_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_4381_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_7A82_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_7A04_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_7D06_setupFunc)
+CHIPSET_SETUP_FUNC(SiS_656_setupFunc)
+CHIPSET_SETUP_FUNC(ATI_RS400_setupFunc)
+CHIPSET_SETUP_FUNC(ATI_RS480_setupFunc)
+CHIPSET_SETUP_FUNC(ATI_RD870_setupFunc)
+CHIPSET_SETUP_FUNC(ATI_RD890_setupFunc)
+CHIPSET_SETUP_FUNC(ATI_RX780_setupFunc)
+CHIPSET_SETUP_FUNC(ATI_FX990_setupFunc)
+CHIPSET_SETUP_FUNC(AMD_RS780_setupFunc)
+CHIPSET_SETUP_FUNC(AMD_FX790_setupFunc)
+CHIPSET_SETUP_FUNC(AMD_FX890_setupFunc)
+CHIPSET_SETUP_FUNC(AMD_X370_setupFunc)
+CHIPSET_SETUP_FUNC(VIA_VX900_setupFunc)
+CHIPSET_SETUP_FUNC(APM_Storm_setupFunc)
+CHIPSET_SETUP_FUNC(ARMV8_generic_setupFunc)
+CHIPSET_SETUP_FUNC(Marvell_ThunderX2_setupFunc)
+CHIPSET_SETUP_FUNC(QEMU_setupFunc)
+CHIPSET_SETUP_FUNC(Ampere_eMag_setupFunc)
+CHIPSET_SETUP_FUNC(Huawei_Kunpeng920_setupFunc)
+CHIPSET_SETUP_FUNC(Mellanox_BlueField_setupFunc)
+CHIPSET_SETUP_FUNC(Mellanox_BlueField3_setupFunc)
+CHIPSET_SETUP_FUNC(Amazon_Gravitron2_setupFunc)
+CHIPSET_SETUP_FUNC(Fujitsu_A64FX_setupFunc)
+CHIPSET_SETUP_FUNC(Ampere_Altra_setupFunc)
+CHIPSET_SETUP_FUNC(Arm_NeoverseN1_setupFunc)
+CHIPSET_SETUP_FUNC(Ampere_AmpereOne_setupFunc)
+CHIPSET_SETUP_FUNC(Qualcomm_Snapdragon_setupFunc)
+CHIPSET_SETUP_FUNC(Nvidia_T210_setupFunc)
+CHIPSET_SETUP_FUNC(Nvidia_T194_setupFunc)
+CHIPSET_SETUP_FUNC(Nvidia_TH500_setupFunc)
+CHIPSET_SETUP_FUNC(PLDA_XpressRichAXI_setupFunc)
+CHIPSET_SETUP_FUNC(Riscv_generic_setupFunc)
+CHIPSET_SETUP_FUNC(Intel_A70D_setupFunc)
+CHIPSET_SETUP_FUNC(AMD_14D8_setupFunc)
+CHIPSET_SETUP_FUNC(Nvidia_TB500_setupFunc)
+
+
+// Keep string length <=32 (including termination) to avoid string copy overflow
+CSINFO chipsetInfo[] =
+{
+ // PCI Express chipset
+
+ {PCI_VENDOR_ID_INTEL, 0x2580, CS_INTEL_2580, "Grantsdale", Intel_25XX_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x2584, CS_INTEL_2584, "Alderwood", Intel_25XX_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x2588, CS_INTEL_2588, "Intel2588", Intel_25XX_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x2590, CS_INTEL_2590, "Alviso", Intel_25XX_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x25C0, CS_INTEL_25E0, "Greencreek", Intel_25E0_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x25E0, CS_INTEL_25E0, "Greencreek", Intel_25E0_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x29B0, CS_INTEL_29X0, "IntelQ35", Intel_29X0_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x29C0, CS_INTEL_29X0, "BearlakeB", Intel_29X0_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x29D0, CS_INTEL_29X0, "IntelQ33", Intel_29X0_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x29E0, CS_INTEL_29E0, "BearlakeX", Intel_29E0_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x359E, CS_INTEL_359E, "Tumwater", Intel_359E_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x4000, CS_INTEL_4000, "Stoakley", Intel_4000_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x4003, CS_INTEL_4003, "SkullTrail", Intel_4003_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x3400, CS_INTEL_3400, "IntelX58", Intel_3400_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x3403, CS_INTEL_3400, "IntelX58", Intel_3400_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x3405, CS_INTEL_3400, "IntelX58", Intel_3400_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x3406, CS_INTEL_3400, "Tylersburg", Intel_3400_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x2770, CS_INTEL_2770, "Lakeport", Intel_25XX_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x2774, CS_INTEL_2774, "Glenwood", Intel_27XX_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x277C, CS_INTEL_277C, "Glenwood", Intel_27XX_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x2A40, CS_INTEL_2A40, "Montevina", Intel_2A40_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x2E00, CS_INTEL_2E00, "Eaglelake", Intel_2E00_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x2E10, CS_INTEL_2E00, "Eaglelake", Intel_2E00_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x2E20, CS_INTEL_2E00, "Eaglelake", Intel_2E00_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x2E30, CS_INTEL_2E00, "Eaglelake", Intel_2E00_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x0044, CS_INTEL_0040, "Arrandale/Auburndale", Intel_0040_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x0062, CS_INTEL_0040, "Arrandale/Auburndale", Intel_0040_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xD130, CS_INTEL_3B42, "Clarksfield", Intel_3B42_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xD132, CS_INTEL_3B42, "Clarksfield", Intel_3B42_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x3B42, CS_INTEL_3B42, "P55/PM55/H57", Intel_3B42_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x1C46, CS_INTEL_1C46, "IntelP67-CougarPoint", Intel_1C46_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x1C4B, CS_INTEL_1C46, "HuronRiver-HM67", Intel_1C4B_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x1C4F, CS_INTEL_1C46, "HuronRiver-QM67", Intel_1C4B_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x1C49, CS_INTEL_1C49, "HuronRiver-HM65", Intel_1C49_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x1C44, CS_INTEL_1C46, "IntelZ68", Intel_1C46_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x1C10, CS_INTEL_1C10, "IntelP67", Intel_1C10_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x1D40, CS_INTEL_1D40, "IntelX79", Intel_1D40_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x1D41, CS_INTEL_1D40, "IntelX79", Intel_1D40_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x1E10, CS_INTEL_1E10, "IntelZ75", Intel_1E10_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x0150, CS_INTEL_1E10, "IntelZ77A-GD55", Intel_1E10_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x0151, CS_INTEL_1E10, "IntelZ77A-GD55", Intel_1E10_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x0100, CS_INTEL_1E10, "IntelZ77A-GD55", Intel_1E10_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x8C4B, CS_INTEL_8C4B, "SharkBay-HM87", Intel_8C4B_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x8C44, CS_INTEL_8C4B, "SharkBay-Z87", Intel_8C4B_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x8C41, CS_INTEL_8C4B, "SharkBay-H8x/P8x", Intel_8C4B_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x8C49, CS_INTEL_8C4B, "SharkBay-HM86", Intel_8C4B_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x8C52, CS_INTEL_8C4B, "SharkBay-E3", Intel_8C4B_setupFunc}, // Does not support SLI
+ {PCI_VENDOR_ID_INTEL, 0x8CC4, CS_INTEL_8CC4, "IntelZ97", Intel_8CC4_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x8CC3, CS_INTEL_8CC4, "IntelHM97", Intel_8CC4_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA145, CS_INTEL_A145, "IntelZ170", Intel_A145_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA14E, CS_INTEL_A145, "IntelHM170", Intel_A145_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA150, CS_INTEL_A145, "IntelHM170", Intel_A145_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA149, CS_INTEL_A145, "SkyLake C236", Intel_A145_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA14A, CS_INTEL_A145, "SkyLake C232", Intel_A145_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA14D, CS_INTEL_A145, "SkyLake-H", Intel_A145_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA244, CS_INTEL_A145, "SkyLake C620", Intel_A145_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA1C8, CS_INTEL_A145, "SkyLake C620", Intel_A145_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x8D47, CS_INTEL_8D47, "IntelX99", Intel_8D47_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x8D44, CS_INTEL_8D47, "IntelC612", Intel_8D44_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA2C5, CS_INTEL_A2C5, "IntelZ270", Intel_A2C5_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA154, CS_INTEL_A2C5, "IntelZ270", Intel_A2C5_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA152, CS_INTEL_A2C5, "IntelRX9S", Intel_A2C5_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA242, CS_INTEL_A242, "IntelC422", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA241, CS_INTEL_A242, "IntelC422", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA243, CS_INTEL_A242, "IntelC422", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA2D2, CS_INTEL_A2D2, "IntelX299", Intel_A2D2_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA2D3, CS_INTEL_A242, "IntelC422", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA1C1, CS_INTEL_A242, "IntelC621", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA1C2, CS_INTEL_A242, "IntelC622", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA1C3, CS_INTEL_A242, "IntelC624", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA1C4, CS_INTEL_A242, "IntelC625", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA1C5, CS_INTEL_A242, "IntelC626", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA1C6, CS_INTEL_A242, "IntelC627", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA1C7, CS_INTEL_A242, "IntelC628", Intel_A242_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA2C9, CS_INTEL_A2C9, "IntelZ370", Intel_A2C9_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA310, CS_INTEL_A2C9, "IntelZ370", Intel_A2C9_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA30E, CS_INTEL_A2C9, "IntelZ370", Intel_A2C9_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA305, CS_INTEL_A2C9, "IntelZ390", Intel_A2C9_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA30D, CS_INTEL_A2C9, "IntelH370", Intel_A2C9_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA301, CS_INTEL_A301, "Intel-CannonLake", Intel_A301_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x0685, CS_INTEL_0685, "Intel-CometLake", Intel_0685_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0xA1CB, CS_INTEL_C620, "Intel-IceLake", NULL},
+ {PCI_VENDOR_ID_INTEL, 0x4381, CS_INTEL_4381, "Intel-RocketLake", Intel_4381_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x4385, CS_INTEL_4381, "Intel-RocketLake", Intel_4381_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7A82, CS_INTEL_7A82, "Intel-AlderLake", Intel_7A82_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7A84, CS_INTEL_7A82, "Intel-AlderLake", Intel_7A82_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x1B81, CS_INTEL_1B81, "Intel-SapphireRapids", NULL},
+ {PCI_VENDOR_ID_INTEL, 0x7A8A, CS_INTEL_1B81, "Intel-SapphireRapids", NULL},
+ {PCI_VENDOR_ID_INTEL, 0x18DC, CS_INTEL_18DC, "Intel-IceLake", NULL},
+ {PCI_VENDOR_ID_INTEL, 0x7A04, CS_INTEL_7A04, "Intel-RaptorLake", Intel_7A04_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x5795, CS_INTEL_5795, "Intel-GraniteRapids", NULL},
+ {PCI_VENDOR_ID_INTEL, 0xA70D, CS_INTEL_B660, "Intel-B660", Intel_A70D_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D06, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D1A, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D1B, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D1C, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D2A, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D2D, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D2E, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D2F, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D35, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D67, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+ {PCI_VENDOR_ID_INTEL, 0x7D30, CS_INTEL_7D06, "Intel-Arrowlake", Intel_7D06_setupFunc},
+
+ {PCI_VENDOR_ID_NVIDIA, 0x0FAE, CS_NVIDIA_T210, "T210", Nvidia_T210_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x0FAF, CS_NVIDIA_T210, "T210", Nvidia_T210_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x10E5, CS_NVIDIA_T186, "T186", Nvidia_T210_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x10E6, CS_NVIDIA_T186, "T186", Nvidia_T210_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x1AD0, CS_NVIDIA_T194, "T194", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x1AD1, CS_NVIDIA_T194, "T194", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x1AD2, CS_NVIDIA_T194, "T194", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x229A, CS_NVIDIA_T234, "T234", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x229C, CS_NVIDIA_T234, "T234", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x229E, CS_NVIDIA_T234, "T234", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22C2, CS_NVIDIA_T23x, "T23x", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22C3, CS_NVIDIA_T23x, "T23x", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22B1, CS_NVIDIA_TH500, "TH500", Nvidia_TH500_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22B2, CS_NVIDIA_TH500, "TH500", Nvidia_TH500_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22B3, CS_NVIDIA_TH500, "TH500", Nvidia_TH500_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22B4, CS_NVIDIA_TH500, "TH500", Nvidia_TH500_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22B8, CS_NVIDIA_TH500, "TH500", Nvidia_TH500_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22B9, CS_NVIDIA_TH500, "TH500", Nvidia_TH500_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22D6, CS_NVIDIA_T264, "T264", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22D8, CS_NVIDIA_T264, "T264", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22DA, CS_NVIDIA_T264, "T264", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x2B00, CS_NVIDIA_T264, "T264", Nvidia_T194_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x2F95, CS_NVIDIA_TB500, "TB500", Nvidia_TB500_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x2F96, CS_NVIDIA_TB500, "TB500", Nvidia_TB500_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x2F97, CS_NVIDIA_TB500, "TB500", Nvidia_TB500_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x2F98, CS_NVIDIA_TB500, "TB500", Nvidia_TB500_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x2F99, CS_NVIDIA_TB500, "TB500", Nvidia_TB500_setupFunc},
+
+ {PCI_VENDOR_ID_SIS, 0x0649, CS_SIS_649, "649", SiS_656_setupFunc},
+ {PCI_VENDOR_ID_SIS, 0x0656, CS_SIS_656, "656", SiS_656_setupFunc},
+
+ {PCI_VENDOR_ID_ATI, 0x5A31, CS_ATI_RS400, "RS400", ATI_RS400_setupFunc},
+ {PCI_VENDOR_ID_ATI, 0x5A33, CS_ATI_RS400, "RS400", ATI_RS400_setupFunc},
+ {PCI_VENDOR_ID_ATI, 0x5950, CS_ATI_RS480, "RS480", ATI_RS480_setupFunc},
+ {PCI_VENDOR_ID_ATI, 0x5951, CS_ATI_RS480, "RS480", ATI_RS480_setupFunc},
+ {PCI_VENDOR_ID_ATI, 0x5956, CS_ATI_FX790, "FX790" ,AMD_FX790_setupFunc},
+ {PCI_VENDOR_ID_ATI, 0x5A11, CS_ATI_FX890, "FX890" ,AMD_FX890_setupFunc},
+ {PCI_VENDOR_ID_ATI, 0x5a13, CS_ATI_RD850, "RD850" ,ATI_RD870_setupFunc},
+ {PCI_VENDOR_ID_ATI, 0x5a12, CS_ATI_RD870, "RD870" ,ATI_RD870_setupFunc},
+ {PCI_VENDOR_ID_ATI, 0x5a10, CS_ATI_RD890, "RD890" ,ATI_RD890_setupFunc},
+ {PCI_VENDOR_ID_ATI, 0x5957, CS_ATI_RX780, "RX780" ,ATI_RX780_setupFunc},
+ {PCI_VENDOR_ID_ATI, 0x5A14, CS_ATI_FX990, "FX990/X990/970",ATI_FX990_setupFunc},
+
+ {PCI_VENDOR_ID_AMD, 0x9601, CS_AMD_GX890, "GX890" ,AMD_FX890_setupFunc},
+ {PCI_VENDOR_ID_AMD, 0x9600, CS_AMD_RS780, "RS780" ,AMD_RS780_setupFunc},
+ {PCI_VENDOR_ID_AMD, 0x790e, CS_AMD_X370, "X370/X399/X470/ TRX40/X570/WRX80", AMD_X370_setupFunc },
+ {PCI_VENDOR_ID_AMD, 0x14d8, CS_AMD_RPH, "AMD-Raphael", AMD_14D8_setupFunc},
+
+ {PCI_VENDOR_ID_VIA, 0x0308, CS_VIA_VT8369B, "VT8369B", NULL},
+ {PCI_VENDOR_ID_VIA, 0x0410, CS_VIA_VX900, "VX900", VIA_VX900_setupFunc},
+ {PCI_VENDOR_ID_APM, 0xe004, CS_APM_STORM, "X-Gene Storm", APM_Storm_setupFunc},
+ {PCI_VENDOR_ID_IBM, 0x03DC, CS_IBM_VENICE, "Venice", NULL},
+ {PCI_VENDOR_ID_MARVELL, 0xAF00, CS_MARVELL_THUNDERX2, "Marvell ThunderX2", Marvell_ThunderX2_setupFunc},
+ {PCI_VENDOR_ID_REDHAT, 0x0008, CS_REDHAT_QEMU, "QEMU Redhat", QEMU_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE005, CS_AMPERE_EMAG, "AMPERE eMag", Ampere_eMag_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE006, CS_AMPERE_EMAG, "AMPERE eMag", Ampere_eMag_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE007, CS_AMPERE_EMAG, "AMPERE eMag", Ampere_eMag_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE008, CS_AMPERE_EMAG, "AMPERE eMag", Ampere_eMag_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE009, CS_AMPERE_EMAG, "AMPERE eMag", Ampere_eMag_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE00A, CS_AMPERE_EMAG, "AMPERE eMag", Ampere_eMag_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE00B, CS_AMPERE_EMAG, "AMPERE eMag", Ampere_eMag_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE00C, CS_AMPERE_EMAG, "AMPERE eMag", Ampere_eMag_setupFunc},
+ {PCI_VENDOR_ID_HUAWEI, 0xA120, CS_HUAWEI_KUNPENG920, "Huawei Kunpeng920", Huawei_Kunpeng920_setupFunc},
+ {PCI_VENDOR_ID_MELLANOX, 0xA2D0, CS_MELLANOX_BLUEFIELD, "Mellanox BlueField", Mellanox_BlueField_setupFunc},
+ {PCI_VENDOR_ID_MELLANOX, 0xA2D4, CS_MELLANOX_BLUEFIELD2, "Mellanox BlueField 2", NULL},
+ {PCI_VENDOR_ID_MELLANOX, 0xA2D5, CS_MELLANOX_BLUEFIELD2, "Mellanox BlueField 2 Crypto disabled", NULL},
+ {PCI_VENDOR_ID_MELLANOX, 0xA2DA, CS_MELLANOX_BLUEFIELD3, "Mellanox BlueField 3 Crypto enabled", Mellanox_BlueField3_setupFunc},
+ {PCI_VENDOR_ID_MELLANOX, 0xA2DB, CS_MELLANOX_BLUEFIELD3, "Mellanox BlueField 3 Crypto disabled", Mellanox_BlueField3_setupFunc},
+ {PCI_VENDOR_ID_AMAZON, 0x0200, CS_AMAZON_GRAVITRON2, "Amazon Gravitron2", Amazon_Gravitron2_setupFunc},
+ {PCI_VENDOR_ID_FUJITSU, 0x1952, CS_FUJITSU_A64FX, "Fujitsu A64FX", Fujitsu_A64FX_setupFunc},
+ {PCI_VENDOR_ID_CADENCE, 0xDC01, CS_PHYTIUM_S2500, "Phytium S2500", NULL},
+ {PCI_VENDOR_ID_CADENCE, 0xDC08, CS_PHYTIUM_S2500, "Phytium S2500", NULL},
+ {PCI_VENDOR_ID_CADENCE, 0xDC16, CS_PHYTIUM_S2500, "Phytium S2500", NULL},
+ {PCI_VENDOR_ID_CADENCE, 0xFC01, CS_PHYTIUM_S2500, "Phytium S2500", NULL},
+ {PCI_VENDOR_ID_CADENCE, 0xFC08, CS_PHYTIUM_S2500, "Phytium S2500", NULL},
+ {PCI_VENDOR_ID_CADENCE, 0xFC16, CS_PHYTIUM_S2500, "Phytium S2500", NULL},
+ {PCI_VENDOR_ID_AMPERE, 0xE000, CS_AMPERE_ALTRA, "Ampere Altra", Ampere_Altra_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE00D, CS_AMPERE_ALTRA, "Ampere Altra", Ampere_Altra_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE00E, CS_AMPERE_ALTRA, "Ampere Altra", Ampere_Altra_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE010, CS_AMPERE_ALTRA, "Ampere Altra", Ampere_Altra_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE100, CS_AMPERE_ALTRA, "Ampere Altra", Ampere_Altra_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE110, CS_AMPERE_ALTRA, "Ampere Altra", Ampere_Altra_setupFunc},
+ {PCI_VENDOR_ID_ARM, 0x0100, CS_ARM_NEOVERSEN1, "Arm Neoverse N1", Arm_NeoverseN1_setupFunc},
+ {PCI_VENDOR_ID_HYGON, 0x790E, CS_HYGON_C86, "Hygon-C86-7151", NULL},
+ {PCI_VENDOR_ID_MARVELL, 0xA02D, CS_MARVELL_OCTEON_CN96XX, "Marvell Octeon CN96xx", ARMV8_generic_setupFunc},
+ {PCI_VENDOR_ID_MARVELL, 0xA02D, CS_MARVELL_OCTEON_CN98XX, "Marvell Octeon CN98xx", ARMV8_generic_setupFunc},
+ {PCI_VENDOR_ID_QUALCOMM, 0x010E, CS_SNAPDRAGON_8CX, "Qualcomm Snapdragon 8cx Gen3", Qualcomm_Snapdragon_setupFunc},
+ {PCI_VENDOR_ID_QUALCOMM, 0x0111, CS_SNAPDRAGON_8CX, "Qualcomm Snapdragon 8cx Gen4", Qualcomm_Snapdragon_setupFunc},
+ {PCI_VENDOR_ID_SIFIVE, 0x0000, CS_SIFIVE_FU740_C000, "SiFive FU740-000", Riscv_generic_setupFunc},
+ {PCI_VENDOR_ID_PLDA, 0x1111, CS_PLDA_XPRESSRICH_AXI_REF, "XpressRich-AXI Ref Design", PLDA_XpressRichAXI_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE200, CS_AMPERE_AMPEREONE160, "Ampere AmpereOne-160", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE201, CS_AMPERE_AMPEREONE160, "Ampere AmpereOne-160", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE202, CS_AMPERE_AMPEREONE160, "Ampere AmpereOne-160", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE203, CS_AMPERE_AMPEREONE160, "Ampere AmpereOne-160", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE204, CS_AMPERE_AMPEREONE160, "Ampere AmpereOne-160", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE205, CS_AMPERE_AMPEREONE160, "Ampere AmpereOne-160", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE206, CS_AMPERE_AMPEREONE160, "Ampere AmpereOne-160", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE207, CS_AMPERE_AMPEREONE160, "Ampere AmpereOne-160", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_PHYTIUM, 0x5C16, CS_PHYTIUM_S5000, "Phytium S5000", NULL},
+ {PCI_VENDOR_ID_AMPERE, 0xE208, CS_AMPERE_AMPEREONE192, "Ampere AmpereOne-192", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE209, CS_AMPERE_AMPEREONE192, "Ampere AmpereOne-192", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE20A, CS_AMPERE_AMPEREONE192, "Ampere AmpereOne-192", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE20B, CS_AMPERE_AMPEREONE192, "Ampere AmpereOne-192", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE20C, CS_AMPERE_AMPEREONE192, "Ampere AmpereOne-192", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE20D, CS_AMPERE_AMPEREONE192, "Ampere AmpereOne-192", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE20E, CS_AMPERE_AMPEREONE192, "Ampere AmpereOne-192", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_AMPERE, 0xE20F, CS_AMPERE_AMPEREONE192, "Ampere AmpereOne-192", Ampere_AmpereOne_setupFunc},
+ {PCI_VENDOR_ID_NVIDIA, 0x22D1, CS_NVIDIA_T254, "T254", Nvidia_T194_setupFunc},
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // last element must have chipset CS_UNKNOWN (zero)
+ {0, 0, CS_UNKNOWN, "Unknown", NULL}
+};
+
+
+VENDORNAME vendorName[] =
+{
+ {PCI_VENDOR_ID_NVIDIA, "NVIDIA"},
+ {PCI_VENDOR_ID_INTEL, "Intel"},
+ {PCI_VENDOR_ID_VIA, "VIA"},
+ {PCI_VENDOR_ID_RCC, "ServerWorks"},
+ {PCI_VENDOR_ID_MICRON_1, "Micron"},
+ {PCI_VENDOR_ID_MICRON_2, "Micron"},
+ {PCI_VENDOR_ID_APPLE, "Apple"},
+ {PCI_VENDOR_ID_SIS, "SiS"},
+ {PCI_VENDOR_ID_ATI, "ATI"},
+ {PCI_VENDOR_ID_TRANSMETA, "Transmeta"},
+ {PCI_VENDOR_ID_HP, "HP"},
+ {PCI_VENDOR_ID_AMD, "AMD"},
+ {PCI_VENDOR_ID_ALI, "ALi"},
+ {PCI_VENDOR_ID_APM, "AppliedMicro"},
+ {PCI_VENDOR_ID_IBM, "IBM"},
+ {PCI_VENDOR_ID_MARVELL, "MarvellThunderX2"},
+ {PCI_VENDOR_ID_REDHAT, "QemuRedhat"},
+ {PCI_VENDOR_ID_AMPERE, "AmpereComputing"},
+ {PCI_VENDOR_ID_HUAWEI, "Huawei"},
+ {PCI_VENDOR_ID_MELLANOX, "Mellanox"},
+ {PCI_VENDOR_ID_AMAZON, "Amazon"},
+ {PCI_VENDOR_ID_FUJITSU, "Fujitsu"},
+ {PCI_VENDOR_ID_CADENCE, "Cadence"},
+ {PCI_VENDOR_ID_ARM, "ARM"},
+ {PCI_VENDOR_ID_ALIBABA, "Alibaba"},
+ {PCI_VENDOR_ID_QUALCOMM, "Qualcomm"},
+ {PCI_VENDOR_ID_SIFIVE, "SiFive"},
+ {PCI_VENDOR_ID_PLDA, "PLDA"},
+ {PCI_VENDOR_ID_PHYTIUM, "Phytium"},
+ {0, "Unknown"} // Indicates end of the table
+};
+
+
+//
+// Allowlist all chipsets with which dGPU over PCIe is supported on ARM
+// (both v7 and v8) platforms. Also include IGPU specific chipsets.
+//
+ARMCSALLOWLISTINFO armChipsetAllowListInfo[] =
+{
+ {PCI_VENDOR_ID_NVIDIA, 0x0FAE, CS_NVIDIA_T210}, // NVIDIA Tegra X1 RP0
+ {PCI_VENDOR_ID_NVIDIA, 0x0FAF, CS_NVIDIA_T210}, // NVIDIA Tegra X1 RP1
+ {PCI_VENDOR_ID_NVIDIA, 0x10E5, CS_NVIDIA_T186}, // NVIDIA Tegra P1 RP0
+ {PCI_VENDOR_ID_NVIDIA, 0x10E6, CS_NVIDIA_T186}, // NVIDIA Tegra P1 RP1
+ {PCI_VENDOR_ID_NVIDIA, 0x1AD0, CS_NVIDIA_T194}, // NVIDIA Tegra V1 RP0
+ {PCI_VENDOR_ID_NVIDIA, 0x1AD1, CS_NVIDIA_T194}, // NVIDIA Tegra V1 RP1
+ {PCI_VENDOR_ID_NVIDIA, 0x1AD2, CS_NVIDIA_T194}, // NVIDIA Tegra V1 RP2
+ {PCI_VENDOR_ID_NVIDIA, 0x229A, CS_NVIDIA_T234}, // NVIDIA Tegra Orin RP0
+ {PCI_VENDOR_ID_NVIDIA, 0x229C, CS_NVIDIA_T234}, // NVIDIA Tegra Orin RP1
+ {PCI_VENDOR_ID_NVIDIA, 0x229E, CS_NVIDIA_T234}, // NVIDIA Tegra Orin RP2
+ {PCI_VENDOR_ID_NVIDIA, 0x22C2, CS_NVIDIA_T23x}, // NVIDIA Tegra RP0
+ {PCI_VENDOR_ID_NVIDIA, 0x22C3, CS_NVIDIA_T23x}, // NVIDIA Tegra RP1
+ {PCI_VENDOR_ID_NVIDIA, 0x22B1, CS_NVIDIA_TH500}, // NVIDIA TH500 RP for GH100 GPU in GH180.
+ {PCI_VENDOR_ID_NVIDIA, 0x22B2, CS_NVIDIA_TH500}, // NVIDIA TH500 RP x16
+ {PCI_VENDOR_ID_NVIDIA, 0x22B3, CS_NVIDIA_TH500}, // NVIDIA TH500 RP x4
+ {PCI_VENDOR_ID_NVIDIA, 0x22B4, CS_NVIDIA_TH500}, // NVIDIA TH500 RP x1
+ {PCI_VENDOR_ID_NVIDIA, 0x22B8, CS_NVIDIA_TH500}, // NVIDIA TH500 RP x8
+ {PCI_VENDOR_ID_NVIDIA, 0x22B9, CS_NVIDIA_TH500}, // NVIDIA TH500 RP x2
+ {PCI_VENDOR_ID_NVIDIA, 0x22D6, CS_NVIDIA_T264}, // NVIDIA Tegra RP x8
+ {PCI_VENDOR_ID_NVIDIA, 0x22D8, CS_NVIDIA_T264}, // NVIDIA Tegra RP x4
+ {PCI_VENDOR_ID_NVIDIA, 0x22DA, CS_NVIDIA_T264}, // NVIDIA Tegra RP x2
+ {PCI_VENDOR_ID_NVIDIA, 0x22E6, CS_NVIDIA_T264}, // NVIDIA Tegra iGPU RP
+ {PCI_VENDOR_ID_NVIDIA, 0x2B00, CS_NVIDIA_T264}, // NVIDIA Tegra iGPU
+ {PCI_VENDOR_ID_NVIDIA, 0x2F95, CS_NVIDIA_TB500}, // NVIDIA TB500 RP x16
+ {PCI_VENDOR_ID_NVIDIA, 0x2F96, CS_NVIDIA_TB500}, // NVIDIA TB500 RP x8
+ {PCI_VENDOR_ID_NVIDIA, 0x2F97, CS_NVIDIA_TB500}, // NVIDIA TB500 RP x4
+ {PCI_VENDOR_ID_NVIDIA, 0x2F98, CS_NVIDIA_TB500}, // NVIDIA TB500 RP x2
+ {PCI_VENDOR_ID_NVIDIA, 0x2F99, CS_NVIDIA_TB500}, // NVIDIA TB500 RP x1
+
+ {PCI_VENDOR_ID_APM, 0xe004, CS_APM_STORM}, // Applied Micro X-Gene "Storm"
+ {PCI_VENDOR_ID_MARVELL, 0xAF00, CS_MARVELL_THUNDERX2}, // Marvell ThunderX2
+ {PCI_VENDOR_ID_REDHAT, 0x0008, CS_REDHAT_QEMU}, // Redhat QEMU
+ {PCI_VENDOR_ID_AMPERE, 0xE005, CS_AMPERE_EMAG}, // Ampere eMag
+ {PCI_VENDOR_ID_AMPERE, 0xE006, CS_AMPERE_EMAG}, // Ampere eMag
+ {PCI_VENDOR_ID_AMPERE, 0xE007, CS_AMPERE_EMAG}, // Ampere eMag
+ {PCI_VENDOR_ID_AMPERE, 0xE008, CS_AMPERE_EMAG}, // Ampere eMag
+ {PCI_VENDOR_ID_AMPERE, 0xE009, CS_AMPERE_EMAG}, // Ampere eMag
+ {PCI_VENDOR_ID_AMPERE, 0xE00A, CS_AMPERE_EMAG}, // Ampere eMag
+ {PCI_VENDOR_ID_AMPERE, 0xE00B, CS_AMPERE_EMAG}, // Ampere eMag
+ {PCI_VENDOR_ID_AMPERE, 0xE00C, CS_AMPERE_EMAG}, // Ampere eMag
+ {PCI_VENDOR_ID_HUAWEI, 0xA120, CS_HUAWEI_KUNPENG920}, // Huawei Kunpeng 920
+ {PCI_VENDOR_ID_MELLANOX, 0xA2D0, CS_MELLANOX_BLUEFIELD}, // Mellanox BlueField
+ {PCI_VENDOR_ID_MELLANOX, 0xA2D4, CS_MELLANOX_BLUEFIELD2},// Mellanox BlueField 2
+ {PCI_VENDOR_ID_MELLANOX, 0xA2D5, CS_MELLANOX_BLUEFIELD2},// Mellanox BlueField 2 Crypto disabled
+ {PCI_VENDOR_ID_MELLANOX, 0xA2DB, CS_MELLANOX_BLUEFIELD3},// Mellanox BlueField 3 Crypto disabled
+ {PCI_VENDOR_ID_MELLANOX, 0xA2DA, CS_MELLANOX_BLUEFIELD3},// Mellanox BlueField 3 Crypto enabled
+ {PCI_VENDOR_ID_AMAZON, 0x0200, CS_AMAZON_GRAVITRON2}, // Amazon Gravitron2
+ {PCI_VENDOR_ID_FUJITSU, 0x1952, CS_FUJITSU_A64FX}, // Fujitsu A64FX
+ {PCI_VENDOR_ID_CADENCE, 0xDC01, CS_PHYTIUM_S2500}, // Phytium S2500
+ {PCI_VENDOR_ID_CADENCE, 0xDC08, CS_PHYTIUM_S2500}, // Phytium S2500
+ {PCI_VENDOR_ID_CADENCE, 0xDC16, CS_PHYTIUM_S2500}, // Phytium S2500
+ {PCI_VENDOR_ID_CADENCE, 0xFC01, CS_PHYTIUM_S2500}, // Phytium S2500
+ {PCI_VENDOR_ID_CADENCE, 0xFC08, CS_PHYTIUM_S2500}, // Phytium S2500
+ {PCI_VENDOR_ID_CADENCE, 0xFC16, CS_PHYTIUM_S2500}, // Phytium S2500
+ {PCI_VENDOR_ID_AMPERE, 0xE000, CS_AMPERE_ALTRA}, // Ampere Altra
+ {PCI_VENDOR_ID_AMPERE, 0xE00D, CS_AMPERE_ALTRA}, // Ampere Altra
+ {PCI_VENDOR_ID_AMPERE, 0xE00E, CS_AMPERE_ALTRA}, // Ampere Altra
+ {PCI_VENDOR_ID_AMPERE, 0xE010, CS_AMPERE_ALTRA}, // Ampere Altra
+ {PCI_VENDOR_ID_AMPERE, 0xE100, CS_AMPERE_ALTRA}, // Ampere Altra
+ {PCI_VENDOR_ID_AMPERE, 0xE110, CS_AMPERE_ALTRA}, // Ampere Altra
+ {PCI_VENDOR_ID_ARM, 0x0100, CS_ARM_NEOVERSEN1}, // Arm Neoverse N1
+ {PCI_VENDOR_ID_MARVELL, 0xA02D, CS_MARVELL_OCTEON_CN96XX}, // Marvell OCTEON CN96xx
+ {PCI_VENDOR_ID_MARVELL, 0xA02D, CS_MARVELL_OCTEON_CN98XX}, // Marvell OCTEON CN98xx
+ {PCI_VENDOR_ID_ALIBABA, 0x8000, CS_ALIBABA_YITIAN}, // Alibaba Yitian
+ {PCI_VENDOR_ID_QUALCOMM, 0x010E, CS_SNAPDRAGON_8CX}, // Qualcomm Snapdragon 8cx Gen3 - 8280 dev platform
+ {PCI_VENDOR_ID_QUALCOMM, 0x0111, CS_SNAPDRAGON_8CX}, // Qualcomm Snapdragon 8cx Gen4 - 8380 dev(?) platform
+ {PCI_VENDOR_ID_AMPERE, 0xE200, CS_AMPERE_AMPEREONE160}, // Ampere AmpereOne-160
+ {PCI_VENDOR_ID_AMPERE, 0xE201, CS_AMPERE_AMPEREONE160}, // Ampere AmpereOne-160
+ {PCI_VENDOR_ID_AMPERE, 0xE202, CS_AMPERE_AMPEREONE160}, // Ampere AmpereOne-160
+ {PCI_VENDOR_ID_AMPERE, 0xE203, CS_AMPERE_AMPEREONE160}, // Ampere AmpereOne-160
+ {PCI_VENDOR_ID_AMPERE, 0xE204, CS_AMPERE_AMPEREONE160}, // Ampere AmpereOne-160
+ {PCI_VENDOR_ID_AMPERE, 0xE205, CS_AMPERE_AMPEREONE160}, // Ampere AmpereOne-160
+ {PCI_VENDOR_ID_AMPERE, 0xE206, CS_AMPERE_AMPEREONE160}, // Ampere AmpereOne-160
+ {PCI_VENDOR_ID_AMPERE, 0xE207, CS_AMPERE_AMPEREONE160}, // Ampere AmpereOne-160
+ {PCI_VENDOR_ID_PHYTIUM, 0x5C16, CS_PHYTIUM_S5000}, // Phytium S5000
+ {PCI_VENDOR_ID_AMPERE, 0xE208, CS_AMPERE_AMPEREONE192}, // Ampere AmpereOne-192
+ {PCI_VENDOR_ID_AMPERE, 0xE209, CS_AMPERE_AMPEREONE192}, // Ampere AmpereOne-192
+ {PCI_VENDOR_ID_AMPERE, 0xE20A, CS_AMPERE_AMPEREONE192}, // Ampere AmpereOne-192
+ {PCI_VENDOR_ID_AMPERE, 0xE20B, CS_AMPERE_AMPEREONE192}, // Ampere AmpereOne-192
+ {PCI_VENDOR_ID_AMPERE, 0xE20C, CS_AMPERE_AMPEREONE192}, // Ampere AmpereOne-192
+ {PCI_VENDOR_ID_AMPERE, 0xE20D, CS_AMPERE_AMPEREONE192}, // Ampere AmpereOne-192
+ {PCI_VENDOR_ID_AMPERE, 0xE20E, CS_AMPERE_AMPEREONE192}, // Ampere AmpereOne-192
+ {PCI_VENDOR_ID_AMPERE, 0xE20F, CS_AMPERE_AMPEREONE192}, // Ampere AmpereOne-192
+ {PCI_VENDOR_ID_NVIDIA, 0x22D1, CS_NVIDIA_T254},
+
+ // last element must have chipset CS_UNKNOWN (zero)
+ {0, 0, CS_UNKNOWN}
+};
+
+#endif /* NVCST_H */
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/nvdm_format.h b/userspace/sdks/nv570/nvalloc/common/inc/nvdm_format.h
new file mode 100644
index 0000000..db3baa0
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/nvdm_format.h
@@ -0,0 +1,63 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef NVDM_FORMAT_H
+#define NVDM_FORMAT_H
+
+/**
+ * NVDM (NVIDIA Data Model) overlaid on MCTP (Management Component Transport
+ * Protocol) format definitions.
+ *
+ * This header consolidates NVDM type definitions from multiple RM subsystems
+ * including FSP, SEC2, GSP, and others. NVDM is a vendor-defined message layer
+ * overlaid on MCTP that provides a simple way for different subsystems to
+ * communicate.
+ */
+
+//
+// List of NVDM Message Types
+//
+// Values are allocated from a shared namespace across all subsystems.
+// Add new types here and update the NVDM Message Type allocation page.
+//
+#define NVDM_TYPE_RESET 0x4
+#define NVDM_TYPE_HULK 0x11
+#define NVDM_TYPE_FIRMWARE_UPDATE 0x12
+#define NVDM_TYPE_PRC 0x13
+#define NVDM_TYPE_COT 0x14
+#define NVDM_TYPE_FSP_RESPONSE 0x15
+#define NVDM_TYPE_SEC2_RESPONSE NVDM_TYPE_FSP_RESPONSE
+#define NVDM_TYPE_CAPS_QUERY 0x16
+#define NVDM_TYPE_INFOROM 0x17
+#define NVDM_TYPE_SMBPBI 0x18
+#define NVDM_TYPE_ROMREAD 0x1A
+#define NVDM_TYPE_UEFI_RM 0x1C
+#define NVDM_TYPE_UEFI_XTL_DEBUG_INTR 0x1D
+#define NVDM_TYPE_TNVL 0x1F
+#define NVDM_TYPE_CLOCK_BOOST 0x20
+#define NVDM_TYPE_FSP_GSP_COMM 0x21
+#define NVDM_TYPE_SEC2_GSP_COMM NVDM_TYPE_FSP_GSP_COMM
+
+#define NVDM_TYPE_RM_RPC 0x25 // GSP-RM RPC messages
+
+#endif // NVDM_FORMAT_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/nvpcie.h b/userspace/sdks/nv570/nvalloc/common/inc/nvpcie.h
new file mode 100644
index 0000000..c4ee983
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/nvpcie.h
@@ -0,0 +1,545 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2000-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef NVPCIE_H
+#define NVPCIE_H
+
+
+#include "nvtypes.h"
+
+/**************** Resource Manager Defines and Structures ******************\
+* *
+* Private PCI Express related defines and structures. *
+* *
+\***************************************************************************/
+
+typedef struct NBADDR
+{
+ NvU32 domain;
+ NvU8 bus;
+ NvU8 device;
+ NvU8 func;
+ NvU8 valid;
+ void *handle;
+} NBADDR;
+
+typedef struct PORTDATA
+{
+ NBADDR addr;
+ void *vAddr; // virtual address of the port, if it has been mapped . Not used starting with Win10 BuildXXXXX
+ NvU32 PCIECapPtr; // offset of the PCIE capptr in the NB
+ // Capability register set in enhanced configuration space
+ //
+ NvU32 PCIEErrorCapPtr; // offset of the Advanced Error Reporting Capability register set
+ NvU32 PCIEVCCapPtr; // offset of the Virtual Channel (VC) Capability register set
+ NvU32 PCIEL1SsCapPtr; // Offset of the L1 Substates Capabilities
+ NvU32 PCIEAcsCapPtr; // Offset of the ACS redirect Capabilities
+ NvU16 DeviceID, VendorID; // device and vendor ID for port
+} PORTDATA;
+
+#define PCI_VENDOR_ID 0x00
+#ifndef PCI_DEVICE_ID
+#define PCI_DEVICE_ID 0x02
+#endif
+#define PCI_BASE_ADDRESS_1 0x14 /* Aperture Base */
+#define PCI_BASE_ADDRESS_2 0x18 /* Aperture Base */
+#define PCI_CAPABILITY_LIST 0x34
+#define PCI_DEVICE_SPECIFIC 0x40
+
+#define NV_PCI_ID 0x0
+#define NV_PCI_ID_VENDOR 15:0
+#define NV_PCI_ID_VENDOR_NVIDIA 0x10DE
+#define NV_PCI_ID_DEVICE 31:16
+
+#define PCI_MAX_SLOTS 255
+#define PCI_MAX_LANE_WIDTH 32
+
+#define PCI_MAX_FUNCTION 8
+#define PCI_INVALID_VENDORID 0xFFFF
+#define PCI_INVALID_DEVICEID 0xFFFF
+#define PCI_INVALID_SUBVENDORID 0xFFFF
+#define PCI_INVALID_SUBDEVICEID 0xFFFF
+
+#define PCI_IS_VENDORID_VALID(id) (((id) != 0x0000) && ((id) != 0xFFFF))
+
+#define PCI_CLASS_BRIDGE_DEV 0x06
+#define PCI_SUBCLASS_BR_HOST 0x00
+#define PCI_MULTIFUNCTION 0x80
+
+// From PCI Local Bus Specification, Revision 3.0
+// and PCI Express Base Specification 6.0
+// numbers in comments to right of values indicate
+// the referenced section in the PCIE spec
+
+
+#define CAP_ID_MASK 0xFF
+
+#define CAP_ID_NULL 0x00 // 7.9.28.1
+#define CAP_ID_PMI 0x01 // 7.5.2.1
+#define CAP_ID_AGP 0x02
+#define CAP_ID_VPD 0x03 // 7.9.18.1
+#define CAP_ID_SLOT_ID 0x04
+#define CAP_ID_MSI 0x05 // 7.7.1.1
+#define CAP_ID_HOT_SWAP 0x06
+#define CAP_ID_PCI_X 0x07
+#define CAP_ID_HYPER_TRANSPORT 0x08
+#define CAP_ID_VENDOR_SPECIFIC 0x09
+#define CAP_ID_DEBUG_PORT 0x0A
+#define CAP_ID_CRC 0x0B
+#define CAP_ID_HOT_PLUG 0x0C
+#define CAP_ID_SUBSYSTEM_ID 0x0D // 7.9.23.1
+#define CAP_ID_AGP8X 0x0E
+#define CAP_ID_SECURE 0x0F
+#define CAP_ID_PCI_EXPRESS 0x10 // 7.5.3.1
+#define CAP_ID_MSI_X 0x11 // 7.7.2.1
+#define CAP_ID_ENHANCED_ALLOCATION 0x14 // 7.8.5.1
+#define CAP_ID_FPB 0x15 // 7.8.11.1
+#define CAP_ID_AF 0x13 // 7.9.21.1
+
+//
+// sizes for static PCI capabilities structure
+//
+#define CAP_NULL_SIZE 0x04 // 7.9.28
+#define CAP_PMI_SIZE 0x08 // 7.5.2
+#define CAP_VPD_SIZE 0x08 // 7.9.18
+#define CAP_PCI_X_SIZE 0x3C // 7.5.3
+#define CAP_PCI_EXPRESS_SIZE 0x3C // 7.5.3
+#define CAP_FPB_SIZE 0x08 // 7.8.11.1
+#define CAP_AF_SIZE 0x08 // 7.9.21
+#define CAP_SUBSYSTEM_ID_SIZE 0x08 // 7.9.23
+
+// MSI capability size related fields
+#define PCI_MSI_CONTROL 0x02 // 7.7.1.2
+#define PCI_MSI_CONTROL_64BIT_CAPABLE 7:7
+#define PCI_MSI_CONTROL_64BIT_CAPABLE_FALSE 0
+#define PCI_MSI_CONTROL_64BIT_CAPABLE_TRUE 1
+#define PCI_MSI_CONTROL_PVM_CAPABLE 8:8
+#define PCI_MSI_CONTROL_PVM_CAPABLE_FALSE 0
+#define PCI_MSI_CONTROL_PVM_CAPABLE_TRUE 1
+#define PCI_MSI_BASE_SIZE 0x0C // 7.7.1
+#define PCI_MSI_64BIT_ADDR_CAPABLE_ADJ_SIZE 0x04 // 7.7.1
+#define PCI_MSI_PVM_CAPABLE_ADJ_SIZE 0x08 // 7.7.1
+
+// MSI-X capability size related fields
+#define PCI_MSI_X_BASE_SIZE 0x0C // 7.7.2
+#define PCI_MSI_X_CONTROL 0x02 // 7.7.2.2
+#define PCI_MSI_X_CONTROL_TABLE_SIZE 10:0
+#define PCI_MSI_X_TABLE_OFFSET_BIR 0x04 // 7.7.2.3
+#define PCI_MSI_X_TABLE_OFFSET 31:3
+#define PCI_MSI_X_PBR_OFFSET_BIR 0x08 // 7.7.2.4
+#define PCI_MSI_X_PBR_OFFSET 31:3
+#define PCI_MSI_X_TABLE_ENTRY_SIZE 0x10 // 7.7.2
+#define PCI_MSI_X_PBR_ENTRY_SIZE 0x10 // 7.7.2
+
+// Enhanced Allocation Capability size related fields
+#define PCI_ENHANCED_ALLOCATION_FIRST_DW 0x00 // 7.8.5.1
+#define PCI_ENHANCED_ALLOCATION_FIRST_DW_NUM_ENTRIES 21:16
+#define PCI_ENHANCED_ALLOCATION_TYPE_0_BASE_SIZE 0x04 // 7.8.5.1
+#define PCI_ENHANCED_ALLOCATION_TYPE_1_BASE_SIZE 0x08 // 7.8.5.2
+#define PCI_ENHANCED_ALLOCATION_ENTRY_HEADER 0x00 // 7.8.5.3
+#define PCI_ENHANCED_ALLOCATION_ENTRY_HEADER_ENTRY_SIZE 2:0
+
+// PCI Vendor Specific Capability size related fields
+#define PCI_VENDOR_SPECIFIC_CAP_HEADER 0x00 // 7.9.4
+#define PCI_VENDOR_SPECIFIC_CAP_HEADER_LENGTH 23:16
+
+//
+// Extended config space size is 4096 bytes.
+//
+#define PCI_EXTENDED_CONFIG_SPACE_LENGTH 4096
+
+//
+// From PCI Local Bus Specification, Revision 3.0
+// HEADER TYPE0 Definitions - Byte offsets
+//
+#define PCI_HEADER_TYPE0_VENDOR_ID 0x00
+#define PCI_HEADER_TYPE0_DEVICE_ID 0x02
+#define PCI_HEADER_TYPE0_COMMAND 0x04
+#define PCI_HEADER_TYPE0_STATUS 0x06
+#define PCI_HEADER_TYPE0_REVISION_ID 0x08
+#define PCI_HEADER_TYPE0_PROGIF 0x09
+#define PCI_HEADER_TYPE0_SUBCLASS 0x0A
+#define PCI_HEADER_TYPE0_BASECLASS 0x0B
+#define PCI_HEADER_TYPE0_CACHE_LINE_SIZE 0x0C
+#define PCI_HEADER_TYPE0_LATENCY_TIMER 0x0D
+#define PCI_HEADER_TYPE0_HEADER_TYPE 0x0E
+#define PCI_HEADER_TYPE0_HEADER_TYPE_0 0
+#define PCI_HEADER_TYPE0_HEADER_TYPE_1 1
+#define PCI_HEADER_TYPE0_BIST 0x0F
+#define PCI_HEADER_TYPE0_BAR0 0x10
+#define PCI_HEADER_TYPE0_BAR1 0x14
+#define PCI_HEADER_TYPE0_BAR2 0x18
+#define PCI_HEADER_TYPE0_BAR3 0x1C
+#define PCI_HEADER_TYPE0_BAR4 0x20
+#define PCI_HEADER_TYPE0_BAR5 0x24
+#define PCI_HEADER_TYPE0_CBCIS_PTR 0x28
+#define PCI_HEADER_TYPE0_SUBSYS_VEN_ID 0x2C
+#define PCI_HEADER_TYPE0_SUBSYS_ID 0x2E
+#define PCI_HEADER_TYPE0_ROMBAR 0x30
+#define PCI_HEADER_TYPE0_CAP_PTR 0x34
+#define PCI_HEADER_TYPE0_INT_LINE 0x3C
+#define PCI_HEADER_TYPE0_INT_PIN 0x3D
+#define PCI_HEADER_TYPE0_MIN_GNT 0x3E
+#define PCI_HEADER_TYPE0_MAX_LAT 0x3F
+
+//
+// From PCI Express Base Specification Revision 2.0
+// HEADER TYPE1 Definitions
+#define PCI_HEADER_TYPE1_BRIDGE_CONTROL 0x3E
+#define PCI_HEADER_TYPE1_BRIDGE_CONTROL_VGA_EN 0x08
+
+#define PCIE_LINK_CAPABILITIES_2 0x000000A4 /* R--4R */
+#define PCIE_LINK_CAPABILITIES_2_RSVD 0:0 /* C--VF */
+#define PCIE_LINK_CAPABILITIES_2_RSVD_INIT 0x00000000 /* C---V */
+#define PCIE_LINK_CAPABILITIES_2_SUPPORTED_LINK_SPEED 7:1 /* R-EVF */
+#define PCIE_LINK_CAPABILITIES_2_SUPPORTED_LINK_SPEED_GEN1_GEN2_GEN3_GEN4_GEN5 0x0000001F /* R---V */
+#define PCIE_LINK_CAPABILITIES_2_SUPPORTED_LINK_SPEED_HIDDEN 0x00000000 /* R---V */
+#define PCIE_LINK_CAPABILITIES_2_SUPPORTED_LINK_SPEED_GEN1 0x00000001 /* R---V */
+#define PCIE_LINK_CAPABILITIES_2_SUPPORTED_LINK_SPEED_GEN1_GEN2 0x00000003 /* R---V */
+#define PCIE_LINK_CAPABILITIES_2_SUPPORTED_LINK_SPEED_GEN1_GEN2_GEN3 0x00000007 /* R-E-V */
+#define PCIE_LINK_CAPABILITIES_2_SUPPORTED_LINK_SPEED_GEN1_GEN2_GEN3_GEN4 0x0000000F /* R---V */
+#define PCIE_LINK_CAPABILITIES_2_CROSS_LINK_SUPPORT 8:8 /* C--VF */
+#define PCIE_LINK_CAPABILITIES_2_CROSS_LINK_SUPPORT_DISABLED 0x00000000 /* C---V */
+#define PCIE_LINK_CAPABILITIES_2_RET_PRESENCE_DET_SUPP 23:23 /* R-EVF */
+#define PCIE_LINK_CAPABILITIES_2_RET_PRESENCE_DET_SUPP_UNSET 0x00000000 /* R-E-V */
+#define PCIE_LINK_CAPABILITIES_2_2RET_PRESENCE_DET_SUPP 24:24 /* R-EVF */
+#define PCIE_LINK_CAPABILITIES_2_2RET_PRESENCE_DET_SUPP_UNSET 0x00000000 /* R-E-V */
+#define PCIE_LINK_CAPABILITIES_2_RSVD1 31:25 /* C--VF */
+#define PCIE_LINK_CAPABILITIES_2_RSVD1_INIT 0x00000000 /* C---V */
+
+//
+// PCI Express Virtual Peer-to-Peer Approval Definition
+//
+// These offsets are unused in hardware on existing chips and are reserved on
+// future chips. Software has defined a virtual PCI capability that may be
+// emulated by hypervisors at these offsets, and this capability is not tied
+// to any specific hardware.
+//
+//
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0 0x000000C8
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_ID 7:0
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_NEXT 15:8
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_LENGTH 23:16
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_SIG_LO 31:24
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1 0x000000CC
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_SIG_HI 15:0
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_VERSION 18:16
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_PEER_CLIQUE_ID 22:19
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_RSVD 31:23
+
+#define NV_PCI_VIRTUAL_P2P_APPROVAL_SIGNATURE 0x00503250
+
+#define NV_PCI_VIRTUAL_CONFIG_BITS_CAP_0 0x000000D4
+#define NV_PCI_VIRTUAL_CONFIG_BITS_CAP_0_ID 7:0
+#define NV_PCI_VIRTUAL_CONFIG_BITS_CAP_0_NEXT 15:8
+#define NV_PCI_VIRTUAL_CONFIG_BITS_CAP_0_LENGTH 23:16
+#define NV_PCI_VIRTUAL_CONFIG_BITS_CAP_0_SIG_LO 31:24
+#define NV_PCI_VIRTUAL_CONFIG_BITS_CAP_1 0x000000D8
+#define NV_PCI_VIRTUAL_CONFIG_BITS_CAP_1_SIG_HI 15:0
+#define NV_PCI_VIRTUAL_CONFIG_BITS_CAP_1_VALUE 31:16
+
+#define NV_PCI_VIRTUAL_CONFIG_BITS_SIGNATURE 0x00535442 //"BTS"
+
+// Allocation of _VALUE bits
+#define NV_PCI_VIRTUAL_CONFIG_BITS_PCI_EGRESS_POISON_ENABLE 0:0
+
+// Chipset-specific definitions.
+// Intel SantaRosa definitions
+#define INTEL_2A00_CONFIG_SPACE_BASE 0x60
+
+// Intel Montevina definitions
+#define INTEL_2A40_CONFIG_SPACE_BASE 0x60
+#define INTEL_2A40_ASLM_CAPABLE_REVID 0x05
+
+// Intel EagleLake definitions
+#define INTEL_2E00_CONFIG_SPACE_BASE 0x60
+
+// Intel Bearlake definitions
+#define INTEL_29XX_CONFIG_SPACE_BASE 0x60
+
+// Intel BroadWater definitions
+#define INTEL_29A0_CONFIG_SPACE_BASE 0x60
+
+// Intel Grantsdale definitions
+#define INTEL_25XX_CONFIG_SPACE_BASE 0x48
+
+// Intel Tumwater definitions
+#define INTEL_359E_CONFIG_SPACE_BASE 0xCC
+
+// Intel Greencreek definitions
+#define INTEL_25E0_CONFIG_SPACE_BASE_ADDRESS 0xE0000000
+
+// Intel Stoakley definitions
+#define INTEL_4000_CONFIG_SPACE_BASE_ADDRESS 0xE0000000
+
+// Intel SkullTrail definitions
+#define INTEL_4003_CONFIG_SPACE_BASE_ADDRESS_F 0xF0000000
+#define INTEL_4003_CONFIG_SPACE_BASE_ADDRESS_E 0xE0000000
+#define INTEL_4003_CONFIG_SPACE_BASE_ADDRESS INTEL_4003_CONFIG_SPACE_BASE_ADDRESS_F
+#define INTEL_4003_CONFIG_SPACE_BASE 0x64
+
+// SiS 656
+#define SIS_656_CONFIG_SPACE_BASE 0xE0
+#define SIS_656_CONFIG_SPACE_BASE_ADDRESS 3:0 // mapped to 31:28
+
+// PCI/PCIE definitions
+#define PCI_MAX_CAPS 20 // max caps to parse
+#define PCI_MAX_DEVICES 32 // max devices on bus
+#define PCI_MAX_FUNCTIONS 8 // max functions for a device
+#define PCI_CAP_HEADER_ID 7:0 // PCI cap header id
+#define PCI_CAP_HEADER_NEXT 15:8 // PCI cap header next
+#define PCI_COMMON_CLASS_SUBCLASS 0x0a // PCI class/subclass (word)
+#define PCI_COMMON_CLASS_SUBBASECLASS_HOST 0x0600 // Host bridge (connect PCI to CPU) [00] + Bridge Device [06]
+#define PCI_COMMON_CLASS_SUBBASECLASS_P2P 0x0604 // PCI-to-PCI bridge (connects PCI buses) [04] + Bridge Device [06]
+#define PCI_COMMON_CLASS_SUBBASECLASS_VGA 0x0300
+#define PCI_COMMON_CLASS_SUBBASECLASS_3DCTRL 0x0302
+#define PCI_COMMON_CAP_PTR 0x34 // PCI common cap ptr (byte)
+#define PCI_TYPE_1_SECONDARY_BUS_NUMBER 0x19 // PCI type 1 sec bus (byte)
+#define PCI_TYPE_1_SUBORDINATE_BUS_NUMBER 0x1a // PCI type 1 sub bus (byte)
+#define PCIE_CAP_HEADER_ID 15:0 // PCIE cap header id
+#define PCIE_CAP_HEADER_ID_INVALID 0xffff
+#define PCIE_CAP_HEADER_NEXT 31:20 // PCIE cap header next
+#define PCIE_BUS_SHIFT 20 // PCIE cfg space bus shift
+#define PCIE_DEVICE_SHIFT 15 // PCIE cfg space dev shift
+#define PCIE_FUNC_SHIFT 12 // PCIE cfg space func shift
+#define PCIE_CAP_VERSION 19:16 // PCIE cap version
+#define PCIE_CAP_VERSION_2P0 2 // PCIE 2.0 version
+#define PCIE_LINK_CNTRL_STATUS_2_OFFSET 0x30 // PCIE Link Control/Status 2 offset
+#define PCIE_LINK_STATUS_2 31:16 // PCIE Link Status 2 Register
+#define PCIE_LINK_STATUS_2_DE_EMPHASIS 0:0 // PCIE De-Emphasis Level
+#define PCI_COMMON_SUBSYSTEM_VENDOR_ID 0x2c // PCI subsystem Vendor Id
+#define PCI_COMMON_SUBSYSTEM_ID 0x2e // PCI subsystem Id
+#define PCIE_CAPABILITY_BASE 0x100 // 1st PCIE capability.
+
+// PCI Express Capability ID in the enhanced configuration space
+#define PCIE_CAP_ID_NULL 0x00 // 7.9.28.1
+#define PCIE_CAP_ID_ERROR 0x01 // 7.8.4.1
+#define PCIE_CAP_ID_VC 0x02 // 7.9.1.1
+#define PCIE_CAP_ID_SERIAL 0x03 // 7.9.3.1
+#define PCIE_CAP_ID_POWER 0x04 // 7.8.1.1
+#define PCIE_CAP_ID_ROOT_COMPLEX 0x05 // 7.9.8.1
+#define PCIE_CAP_ID_ROOT_COMPLEX_INTERNAL_LINK_CTRL 0x06 // 7.9.9.1
+#define PCIE_CAP_ID_ROOT_COMPLEX_EVENT_COLLECTOR_ENDPOINT 0x07 // 7.9.10.1
+#define PCIE_CAP_ID_PCIE_CAP_ID_MFVC 0x08 // 7.9.2.1
+#define PCIE_CAP_ID_RCRB 0x0A // 7.9.7.1
+#define PCIE_CAP_ID_ACS 0x0D // 7.7.11.1
+#define PCIE_CAP_ID_ARI 0x0E // 7.8.8.1
+#define PCIE_CAP_ID_MULTICAST 0x12 // 7.9.11.1
+#define PCIE_CAP_ID_RESIZABLE_BAR 0x15 // 7.8.6.1
+#define PCIE_CAP_ID_DYNAMIC_POWER_ALLOCATION 0x16 // 7.9.12.1
+#define PCIE_CAP_ID_TPH 0x17 // 7.9.13.1
+#define PCIE_CAP_ID_LATENCY_TOLERANCE 0x18 // 7.8.2.1
+#define PCIE_CAP_ID_SECONDARY_PCIE_CAPABILITY 0x19 // 7.7.3.1
+#define PCIE_CAP_ID_PASID 0x1B // 7.8.9.1
+#define PCIE_CAP_ID_DPC 0x1D // 7.9.14.1
+#define PCIE_CAP_ID_L1_PM_SUBSTATES 0x1E // 7.8.3.1
+#define PCIE_CAP_ID_PTM 0x1F // 7.9.15.1
+#define PCIE_CAP_ID_FRS_QUEUING 0x21 // 7.8.10.1
+#define PCIE_CAP_ID_READINESS_TIME_REPORTING 0x22 // 7.9.16.1
+#define PCIE_CAP_ID_VENDOR_SPECIFIC 0x23 // 7.9.6.1
+#define PCIE_CAP_ID_VF_RESIZABLE_BAR 0x24 // 7.8.7.1
+#define PCIE_CAP_ID_DATA_LINK 0x25 // 7.7.4.1
+#define PCIE_CAP_ID_PHYSLAYER_16_GT 0x26 // 7.7.5.1
+#define PCIE_CAP_ID_LANE_MARGINING_AT_RECEVER 0x27 // 7.7.10.1
+#define PCIE_CAP_ID_HIERARCHY_ID 0x28 // 7.9.17.1
+#define PCIE_CAP_ID_NPEM 0x29 // 7.9.19.1
+#define PCIE_CAP_ID_PHYSLAYER_32_GT 0x2A // 7.7.6.1
+#define PCIE_CAP_ID_ALTERNATE_PROTOCOL 0x2B // 7.9.20.1
+#define PCIE_CAP_ID_SFI 0x2C // 7.9.22.1
+#define PCIE_CAP_ID_SHADOW_FUNCTIONS 0x2D // 7.9.25.1
+#define PCIE_CAP_ID_DATA_OBJECT_EXCHANGE 0x2E // 7.9.24.1
+#define PCIE_CAP_ID_DEVICE_3 0x2F // 7.7.9.1
+#define PCIE_CAP_ID_IDE 0x30 // 7.9.26.1
+#define PCIE_CAP_ID_PHYSLAYER_64_GT 0x31 // 7.7.7.1
+#define PCIE_CAP_ID_FLT_LOGGING 0x32 // 7.7.8.1
+#define PCIE_CAP_ID_FLIT_PERF_MEASURMENT 0x33 // 7.8.12.1
+#define PCIE_CAP_ID_FLIT_ERROR_INJECTION 0x34 // 7.8.13.1
+
+// static sized structure sizes
+#define PCIE_CAP_HEADER_SIZE 0x04 // 7.6.3
+#define PCIE_CAP_NULL_SIZE 0x04 // 7.9.28
+#define PCIE_CAP_ERROR_SIZE 0x48 // 7.8.4
+#define PCIE_CAP_POWER_SIZE 0x10 // 7.8.1
+#define PCIE_CAP_ROOT_COMPLEX_INTERNAL_LINK_CTRL_SIZE 0x0C // 7.9.9
+#define PCIE_CAP_ROOT_COMPLEX_EVENT_COLLECTOR_ENDPOINT_SIZE 0x0C // 7.9.10
+#define PCIE_CAP_SECONDARY_PCIE_SIZE 0x4C // 7.7.3.1
+#define PCIE_CAP_DATA_LINK_SIZE 0x0C // 7.7.4
+#define PCIE_CAP_PHYSLAYER_16_GT_SIZE 0x40 // 7.7.5
+#define PCIE_CAP_PHYSLAYER_32_GT_SIZE 0x40 // 7.7.6
+#define PCIE_CAP_PHYSLAYER_64_GT_SIZE 0x20 // 7.7.7
+#define PCIE_CAP_FLT_LOGGING_SIZE 0x3C // 7.7.8
+#define PCIE_CAP_DEVICE_3_SIZE 0x10 // 7.7.9
+#define PCIE_CAP_LANE_MARGINING_AT_RECEVER_SIZE 0x88 // 7.7.10
+#define PCIE_CAP_ACS_SIZE 0x10 // 7.7.11
+#define PCIE_CAP_LATENCY_TOLERANCE_SIZE 0x08 // 7.8.2
+#define PCIE_CAP_L1_PM_SUBSTATE_SIZE 0x14 // 7.8.3
+#define PCIE_CAP_RESIZABLE_BAR_SIZE 0x34 // 7.8.6
+#define PCIE_CAP_VF_RESIZABLE_BAR_SIZE 0x34 // 7.8.7
+#define PCIE_CAP_ARI_SIZE 0x08 // 7.8.8
+#define PCIE_CAP_PASID_SIZE 0x08 // 7.8.9
+#define PCIE_CAP_FRS_QUEUING_SIZE 0x10 // 7.8.10
+#define PCIE_CAP_FPB_SIZE 0x24 // 7.8.11
+#define PCIE_CAP_FLIT_PERF_MEASURMENT_SIZE 0x24 // 7.8.12
+#define PCIE_CAP_FLIT_ERROR_INJECTION_SIZE 0x24 // 7.8.13
+#define PCIE_CAP_DEV_SERIAL_SIZE 0x0C // 7.9.3
+#define PCIE_CAP_RCRB_SIZE 0x14 // 7.9.7
+#define PCIE_CAP_MULTICAST_SIZE 0x30 // 7.9.11
+#define PCIE_CAP_DYNAMIC_POWER_ALLOCATION_SIZE 0x30 // 7.9.12
+#define PCIE_CAP_DPC_SIZE 0x5C // 7.9.14
+#define PCIE_CAP_PTM_SIZE 0x0C // 7.9.15
+#define PCIE_CAP_READINESS_TIME_REPORTING_SIZE 0x0C // 7.9.16
+#define PCIE_CAP_HIERARCHY_ID_SIZE 0x0C // 7.9.17
+#define PCIE_CAP_NPEM_SIZE 0x10 // 7.9.19
+#define PCIE_CAP_ALTERNATE_PROTOCOL_SIZE 0x14 // 7.9.20
+#define PCIE_CAP_SFI_SIZE 0x14 // 7.9.22
+#define PCIE_CAP_DATA_OBJECT_EXCHANGE_SIZE 0x18 // 7.9.24
+#define PCIE_CAP_SHADOW_FUNCTIONS_SIZE 0x1C // 7.9.25
+#define PCIE_CAP_IDE_SIZE 0x34 // 7.9.26
+
+// Virtual Channel Capability size related fields
+#define PCIE_VC_REGISTER_1 0x04 // 7.9.1.2
+#define PCIE_VC_REGISTER_1_EXTENDED_VC_COUNT 2:0
+#define PCIE_VIRTUAL_CHANNELS_BASE_SIZE 0x18 // 7.9.1
+#define PCIE_VIRTUAL_CHANNELS_EXTENDED_VC_ENTRY_SIZE 0x10 // 7.9.1
+
+// Multi Function Virtual Channel Capability size related fields
+#define PCIE_MFVC_REGISTER_1 0x04 // 7.9.2.2
+#define PCIE_MFVC_REGISTER_1_EXTENDED_VC_COUNT 2:0
+#define PCIE_PCIE_CAP_ID_MFVC_BASE_SIZE 0x18 // 7.9.2
+#define PCIE_PCIE_CAP_ID_MFVC_EXTENDED_VC_ENTRY_SIZE 0x10 // 7.9.2
+
+// Vendor Specific Capability size related fields
+#define PCIE_VENDOR_SPECIFIC_HEADER_1 0x04 // 7.9.6.2
+#define PCIE_VENDOR_SPECIFIC_HEADER_1_LENGTH 31:20
+
+// Root Complex Capability size related fields
+#define PCIE_ROOT_COMPLEX_SELF_DESC_REGISTER 0x04 // 7.9.8.2
+#define PCIE_ROOT_COMPLEX_SELF_DESC_REGISTER_NUM_LINK_ENTRIES 15:8
+#define PCIE_ROOT_COMPLEX_BASE_SIZE 0x0C // 7.9.8
+#define PCIE_ROOT_COMPLEX_LINK_ENTRY_SIZE 0x10 // 7.9.8.3
+
+// TPH capability size related fields
+#define PCIE_TPH_REQUESTOR_REGISTER 0x04 // 7.9.13.2
+#define PCIE_TPH_REQUESTOR_REGISTER_ST_TABLE_SIZE 26:16
+#define PCIE_TPH_BASE_SIZE 0x0C // 7.9.13
+#define PCIE_TPH_ST_ENTRY_SIZE 0x02 // 7.9.13.4
+
+// Intel CPU family.
+#define INTEL_CPU_FAMILY_06 0x06
+#define INTEL_CPU_FAMILY_15 0x0f
+#define INTEL_CPU_FAMILY_16 0x10
+#define INTEL_CPU_FAMILY_21 0x15
+
+// Intel CPU Model. Calculated as Model += (extModel << 4).
+#define INTEL_CPU_MODEL_2A 0x2a
+#define INTEL_CPU_MODEL_2D 0x2d
+#define INTEL_CPU_MODEL_3A 0x3a
+#define INTEL_CPU_MODEL_3F 0x3f
+
+// Symbolic defines for each possible virtual channel
+enum
+{
+ RM_PCIE_VIRTUAL_CHANNEL_0 = 0,
+ RM_PCIE_VIRTUAL_CHANNEL_1,
+ RM_PCIE_VIRTUAL_CHANNEL_2,
+ RM_PCIE_VIRTUAL_CHANNEL_3,
+ RM_PCIE_VIRTUAL_CHANNEL_4,
+ RM_PCIE_VIRTUAL_CHANNEL_5,
+ RM_PCIE_VIRTUAL_CHANNEL_6,
+ RM_PCIE_VIRTUAL_CHANNEL_7,
+ RM_PCIE_VIRTUAL_CHANNEL_INVALID
+};
+
+// Diagnostic collection actions.
+#define RM_PCIE_ACTION_NOP 0
+#define RM_PCIE_ACTION_COLLECT_CONFIG_SPACE 1
+#define RM_PCIE_ACTION_COLLECT_PCI_CAP_STRUCT 2
+#define RM_PCIE_ACTION_COLLECT_PCIE_CAP_STRUCT 3
+#define RM_PCIE_ACTION_COLLECT_ALL_PCI_CAPS 4
+#define RM_PCIE_ACTION_COLLECT_ALL_PCIE_CAPS 5
+#define RM_PCIE_ACTION_REPORT_PCI_CAPS_COUNT 6
+#define RM_PCIE_ACTION_REPORT_PCIE_CAPS_COUNT 7
+#define RM_PCIE_ACTION_EOS 0xff
+
+
+// Diagnostic collection device Type ids
+#define RM_PCIE_DEVICE_TYPE_NONE 0xff
+#define RM_PCIE_DEVICE_TYPE_GPU 0
+#define RM_PCIE_DEVICE_TYPE_UPSTREAM_BRIDGE 1
+#define RM_PCIE_DEVICE_COUNT 2
+
+// Diagnostic collection capability Type ids
+#define RM_PCIE_DC_CAP_TYPE_NONE 0xff
+#define RM_PCIE_DC_CAP_TYPE_PCI 0
+#define RM_PCIE_DC_CAP_TYPE_PCIE 1
+#define RM_PCIE_DC_CAP_TYPE_COUNT 2
+
+typedef struct _def_bif_dc_diagnostic_collection_command
+{
+ NvU8 action;
+ NvU8 deviceType;
+ NvU16 locator;
+ NvU16 length;
+} CL_PCIE_DC_DIAGNOSTIC_COLLECTION_ENTRY;
+
+typedef struct _def_cl_pcie_dc_capability_map_entry
+{
+ NvU16 id;
+ NvU16 blkOffset;
+} CL_PCIE_DC_CAPABILITY_MAP_ENTRY;
+typedef struct
+{
+ NvU16 count;
+ CL_PCIE_DC_CAPABILITY_MAP_ENTRY entries[PCI_MAX_CAPS];
+} CL_PCIE_DC_CAPABILITY_MAP;
+
+typedef struct OBJCL OBJCL;
+typedef struct OBJGPU OBJGPU;
+// root port setup functions
+NV_STATUS Broadcom_HT2100_setupFunc(OBJGPU *, OBJCL*);
+
+NV_STATUS Intel_RP25XX_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Intel_RP81XX_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Intel_RP3C0X_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Intel_RP2F0X_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Intel_RP0C0X_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Intel_Broadwell_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Intel_Skylake_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Intel_Skylake_U_Pch_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Intel_Skylake_H_Pch_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Intel_Kabylake_Y_setupFunc(OBJGPU *, OBJCL*);
+
+NV_STATUS Nvidia_RPC19_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Nvidia_RPC51_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS Nvidia_RPC55_setupFunc(OBJGPU *, OBJCL*);
+
+NV_STATUS AMD_RP1480_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS AMD_RP1630_setupFunc(OBJGPU *, OBJCL*);
+NV_STATUS AMD_RP1483_setupFunc(OBJGPU *, OBJCL*);
+
+NV_STATUS Qualcomm_Snapdragon8cx_RP_setupFunc(OBJGPU *, OBJCL*);
+
+// Determines if the GPU is in a multi-GPU board based on devid checks
+NvBool gpuIsMultiGpuBoard(OBJGPU *);
+
+#endif // NVPCIE_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/nvrangetypes.h b/userspace/sdks/nv570/nvalloc/common/inc/nvrangetypes.h
new file mode 100644
index 0000000..1ff7df6
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/nvrangetypes.h
@@ -0,0 +1,162 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2016-2017 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*!
+ * @file nvrangetypes.h
+ * @brief Range types and operator macros
+ * @note #include a header to define NvUxx and NvSxx before sourcing this file.
+ */
+
+#ifndef _NVRANGETYPES_H_
+#define _NVRANGETYPES_H_
+
+
+//
+// Define range types by convention
+//
+#define __NV_DEFINE_RANGE_TYPE(T) \
+typedef struct NvRange ## T \
+{ \
+ Nv ## T min; \
+ Nv ## T max; \
+} NvRange ## T;
+
+
+__NV_DEFINE_RANGE_TYPE(U64) // NvRangeU64
+__NV_DEFINE_RANGE_TYPE(S64) // NvRangeS64
+__NV_DEFINE_RANGE_TYPE(U32) // NvRangeU32
+__NV_DEFINE_RANGE_TYPE(S32) // NvRangeS32
+__NV_DEFINE_RANGE_TYPE(U16) // NvRangeU16
+__NV_DEFINE_RANGE_TYPE(S16) // NvRangeS16
+__NV_DEFINE_RANGE_TYPE(U8) // NvRangeU8
+__NV_DEFINE_RANGE_TYPE(S8) // NvRangeS8
+
+
+//
+// Operator macros
+//
+// Macros are named xxx_RANGE (rather than xxx_RANGEU32, etc.) since they work
+// properly on ranges with any number of bits, signed or unsigned.
+//
+
+#define NV_EQUAL_RANGE(r1, r2) ((r1).min == (r2).min && (r1).max == (r2).max)
+#define NV_EMPTY_INCLUSIVE_RANGE(r) ((r).min > (r).max)
+#define NV_EMPTY_EXCLUSIVE_RANGE(r) ((r).min + 1 > (r).max - 1)
+#define NV_WITHIN_INCLUSIVE_RANGE(r, x) ((r).min <= (x) && (x) <= (r).max)
+#define NV_WITHIN_EXCLUSIVE_RANGE(r, x) ((r).min < (x) && (x) < (r).max)
+#define NV_IS_SUBSET_RANGE(r1, r2) ((r1).min >= (r2).min && (r2).max >= (r1).max)
+#define NV_IS_SUPERSET_RANGE(r1, r2) ((r1).min <= (r2).min && (r2).max <= (r1).max)
+#define NV_CENTER_OF_RANGE(r) ((r).min / 2 + ((r).max + 1) / 2) // Avoid overflow and rounding anomalies.
+#define NV_IS_OVERLAPPING_RANGE(r1, r2) \
+ (NV_WITHIN_INCLUSIVE_RANGE((r1), (r2).min) || \
+ NV_WITHIN_INCLUSIVE_RANGE((r1), (r2).max))
+
+#define NV_DISTANCE_FROM_RANGE(r, x) ((x) < (r).min? (r).min - (x): ((x) > (r).max? (x) - (r).max: 0))
+#define NV_VALUE_WITHIN_INCLUSIVE_RANGE(r, x) ((x) < (r).min? (r).min : ((x) > (r).max? (r).max : (x)))
+#define NV_VALUE_WITHIN_EXCLUSIVE_RANGE(r, x) ((x) <= (r).min? (r).min + 1 : ((x) >= (r).max? (r).max - 1 : (x)))
+
+#define NV_INIT_RANGE(r, x, y) \
+do \
+{ \
+ (r).min = (x); \
+ (r).max = (y); \
+} while(0)
+
+#define NV_ASSIGN_DELTA_RANGE(r, x, d) \
+do \
+{ \
+ (r).min = (x) - (d); \
+ (r).max = (x) + (d); \
+} while(0)
+
+#define NV_ASSIGN_INTERSECTION_RANGE(r1, r2) \
+do \
+{ \
+ if ((r1).min < (r2).min) \
+ (r1).min = (r2).min; \
+ if ((r1).max > (r2).max) \
+ (r1).max = (r2).max; \
+} while(0)
+
+#define NV_ASSIGN_UNION_RANGE(r1, r2) \
+do \
+{ \
+ if ((r1).min > (r2).min) \
+ (r1).min = (r2).min; \
+ if ((r1).max < (r2).max) \
+ (r1).max = (r2).max; \
+} while(0)
+
+#define NV_MULTIPLY_RANGE(r, x) \
+do \
+{ \
+ (r).min *= (x); \
+ (r).max *= (x); \
+} while(0)
+
+#define NV_DIVIDE_FLOOR_RANGE(r, x) \
+do \
+{ \
+ (r).min /= (x); \
+ (r).max /= (x); \
+} while(0)
+
+#define NV_DIVIDE_CEILING_RANGE(r, x) \
+do \
+{ \
+ (r).min = ((r).min + (x) - 1) / (x); \
+ (r).max = ((r).max + (x) - 1) / (x); \
+} while(0)
+
+#define NV_DIVIDE_ROUND_RANGE(r, x) \
+do \
+{ \
+ (r).min = ((r).min + (x) / 2) / (x); \
+ (r).max = ((r).max + (x) / 2) / (x); \
+} while(0)
+
+#define NV_DIVIDE_WIDE_RANGE(r, x) \
+do \
+{ \
+ (r).min /= (x); \
+ (r).max = ((r).max + (x) - 1) / (x); \
+} while(0)
+
+#define NV_DIVIDE_NARROW_RANGE(r, x) \
+do \
+{ \
+ (r).min = ((r).min + (x) - 1) / (x); \
+ (r).max /= (x); \
+} while(0)
+
+#define NV_VALUE_WITHIN_INCLUSIVE_RANGE(r, x) \
+ ((x) < (r).min? (r).min : ((x) > (r).max? (r).max : (x)))
+
+#define NV_WITHIN_INCLUSIVE_RANGE(r, x) \
+ ((r).min <= (x) && (x) <= (r).max)
+
+#define NV_DISTANCE_FROM_RANGE(r, x) \
+ ((x) < (r).min? (r).min - (x): ((x) > (r).max? (x) - (r).max: 0))
+
+#endif // _NVRANGETYPES_H_
+
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi.h b/userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi.h
new file mode 100644
index 0000000..aefad5e
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi.h
@@ -0,0 +1,2925 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2010-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _SMBPBI_H
+#define _SMBPBI_H
+
+#include "oob/smbpbi_impl.h"
+
+/*!
+ * This file contains definitions for SMBPBI - SMBUS Out-Of-Band (OOB) interface
+ */
+/*!
+ * NV_MSGBOX_CMD() macro below and its derivatives depend on DRF_DEF() and DRF_NUM()
+ * macros, that are defined in "nvdrf.h" header file, which is a part of
+ * smbus/msgbox SDK. That file needs to be #included before this (smbpbi.h)
+ * header file.
+ */
+
+/********************************************************************************
+ * *
+ * GPU COMMANDS *
+ * *
+ ********************************************************************************/
+
+//
+// Encoding:
+// 30 29 23 16 15 8 7 0
+// .-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.
+// |I|C|R| STATUS | ARG2 | ARG1 | OPCODE | COMMAND
+// `-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
+// 31 28 24
+//
+
+#define NV_MSGBOX_CMD_OPCODE 7:0
+#define NV_MSGBOX_CMD_OPCODE_NULL_CMD 0x00000000
+#define NV_MSGBOX_CMD_OPCODE_GET_CAP_DWORD 0x00000001
+#define NV_MSGBOX_CMD_OPCODE_GET_TEMP 0x00000002
+#define NV_MSGBOX_CMD_OPCODE_GET_EXT_TEMP 0x00000003 /* With 8 fractional bits! */
+#define NV_MSGBOX_CMD_OPCODE_GET_POWER 0x00000004
+#define NV_MSGBOX_CMD_OPCODE_GET_SYS_ID_DATA 0x00000005
+#define NV_MSGBOX_CMD_OPCODE_GET_ECC_V1 0x00000006
+#define NV_MSGBOX_CMD_OPCODE_GET_ECC_V2 0x00000007
+#define NV_MSGBOX_CMD_OPCODE_GPU_PCONTROL 0x00000008
+#define NV_MSGBOX_CMD_OPCODE_GPU_SYSCONTROL 0x00000009
+#define NV_MSGBOX_CMD_OPCODE_SET_MASTER_CAPS 0x0000000a
+#define NV_MSGBOX_CMD_OPCODE_SET_PRIMARY_CAPS 0x0000000a // Duplicate value till bug 3190552 is addressed.
+#define NV_MSGBOX_CMD_OPCODE_GPU_REQUEST_CPL 0x0000000b
+#define NV_MSGBOX_CMD_OPCODE_GET_ECC_V3 0x0000000c
+#define NV_MSGBOX_CMD_OPCODE_SCRATCH_READ 0x0000000d
+#define NV_MSGBOX_CMD_OPCODE_SCRATCH_WRITE 0x0000000e
+#define NV_MSGBOX_CMD_OPCODE_SCRATCH_COPY 0x0000000f
+#define NV_MSGBOX_CMD_OPCODE_ASYNC_REQUEST 0x00000010
+#define NV_MSGBOX_CMD_OPCODE_REGISTER_ACCESS 0x00000011
+#define NV_MSGBOX_CMD_OPCODE_GET_POWER_CONNECTOR_STATE 0x00000012
+#define NV_MSGBOX_CMD_OPCODE_GET_PAGE_RETIREMENT_STATS 0x00000013
+#define NV_MSGBOX_CMD_OPCODE_GET_ECC_V4 0x00000014
+#define NV_MSGBOX_CMD_OPCODE_GET_THERM_PARAM 0x00000015
+#define NV_MSGBOX_CMD_OPCODE_GET_ECC_V5 0x00000016
+#define NV_MSGBOX_CMD_OPCODE_ACCESS_WP_MODE 0x00000017
+
+//
+// TODO: Get rid of MISC_GPU_FLAGS once all SMBPBI implementations have made
+// the switch to MISC_DEVICE_FLAGS.
+//
+#define NV_MSGBOX_CMD_OPCODE_GET_MISC_GPU_FLAGS 0x00000018
+#define NV_MSGBOX_CMD_OPCODE_GET_MISC_DEVICE_FLAGS 0x00000018
+#define NV_MSGBOX_CMD_OPCODE_GPU_UTIL_COUNTERS 0x00000019
+#define NV_MSGBOX_CMD_OPCODE_GET_NVLINK_INFO 0x0000001a
+#define NV_MSGBOX_CMD_OPCODE_GET_CLOCK_FREQ_INFO 0x0000001b
+#define NV_MSGBOX_CMD_OPCODE_BUNDLE_LAUNCH 0x0000001c
+#define NV_MSGBOX_CMD_OPCODE_GET_DRIVER_EVENT_MSG 0x0000001d
+#define NV_MSGBOX_CMD_OPCODE_GET_ECC_V6 0x0000001e
+#define NV_MSGBOX_CMD_OPCODE_REMAP_ROW_STATS 0x00000020
+#define NV_MSGBOX_CMD_OPCODE_GET_PCIE_LINK_INFO 0x00000021
+#define NV_MSGBOX_CMD_OPCODE_GET_ENERGY_COUNTER 0x00000022
+#define NV_MSGBOX_CMD_OPCODE_RESERVED_0 0x00000024
+#define NV_MSGBOX_CMD_OPCODE_RESERVED_1 0x00000025
+#define NV_MSGBOX_CMD_OPCODE_GET_POWER_HINT_INFO 0x00000026
+#define NV_MSGBOX_CMD_OPCODE_DYNAMIC_SYSTEM_INFORMATION 0x00000027
+#define NV_MSGBOX_CMD_OPCODE_GPU_PERFORMANCE_MONITORING 0x00000028
+
+#define NV_MSGBOX_CMD_ARG1 15:8
+#define NV_MSGBOX_CMD_ARG1_NULL 0x00000000
+#define NV_MSGBOX_CMD_ARG1_TEMP_GPU_0 0x00000000
+#define NV_MSGBOX_CMD_ARG1_TEMP_NVSWITCH_0 0x00000000
+#define NV_MSGBOX_CMD_ARG1_TEMP_GPU_1 0x00000001 /* For Gemini boards */
+#define NV_MSGBOX_CMD_ARG1_TEMP_BOARD 0x00000004
+#define NV_MSGBOX_CMD_ARG1_TEMP_MEMORY 0x00000005
+#define NV_MSGBOX_CMD_ARG1_TEMP_PWR_SUPPLY 0x00000006
+#define NV_MSGBOX_CMD_ARG1_TEMP_T_LIMIT 0x00000007
+#define NV_MSGBOX_CMD_ARG1_TEMP_NUM_SENSORS 8
+#define NV_MSGBOX_CMD_ARG1_POWER_TOTAL 0x00000000
+#define NV_MSGBOX_CMD_ARG1_SMBPBI_POWER 0x00000001
+#define NV_MSGBOX_CMD_ARG1_POWER_FB 0x00000002
+#define NV_MSGBOX_CMD_ARG1_POWER_MODULE 0x00000003
+/* SysId info type encodings for opcode NV_MSGBOX_CMD_OPCODE_GET_SYS_ID_DATA (0x05) */
+#define NV_MSGBOX_CMD_ARG1_BOARD_PART_NUM_V1 0x00000000
+#define NV_MSGBOX_CMD_ARG1_OEM_INFO_V1 0x00000001
+#define NV_MSGBOX_CMD_ARG1_SERIAL_NUM_V1 0x00000002
+#define NV_MSGBOX_CMD_ARG1_MARKETING_NAME_V1 0x00000003
+#define NV_MSGBOX_CMD_ARG1_GPU_PART_NUM_V1 0x00000004
+#define NV_MSGBOX_CMD_ARG1_MEMORY_VENDOR_V1 0x00000005
+#define NV_MSGBOX_CMD_ARG1_MEMORY_PART_NUM_V1 0x00000006
+#define NV_MSGBOX_CMD_ARG1_BUILD_DATE_V1 0x00000007
+#define NV_MSGBOX_CMD_ARG1_FIRMWARE_VER_V1 0x00000008
+#define NV_MSGBOX_CMD_ARG1_VENDOR_ID_V1 0x00000009
+#define NV_MSGBOX_CMD_ARG1_DEV_ID_V1 0x0000000a
+#define NV_MSGBOX_CMD_ARG1_SUB_VENDOR_ID_V1 0x0000000b
+#define NV_MSGBOX_CMD_ARG1_SUB_ID_V1 0x0000000c
+#define NV_MSGBOX_CMD_ARG1_GPU_GUID_V1 0x0000000d
+#define NV_MSGBOX_CMD_ARG1_INFOROM_VER_V1 0x0000000e
+#define NV_MSGBOX_CMD_ARG1_PRODUCT_LENGTH_V1 0x0000000f
+#define NV_MSGBOX_CMD_ARG1_PRODUCT_WIDTH_V1 0x00000010
+#define NV_MSGBOX_CMD_ARG1_PRODUCT_HEIGHT_V1 0x00000011
+#define NV_MSGBOX_CMD_ARG1_PCIE_SPEED_V1 0x00000012
+#define NV_MSGBOX_CMD_ARG1_PCIE_WIDTH_V1 0x00000013
+#define NV_MSGBOX_CMD_ARG1_TGP_LIMIT_V1 0x00000014
+#define NV_MSGBOX_CMD_ARG1_FRU_PART_NUMBER_V1 0x00000015
+#define NV_MSGBOX_CMD_ARG1_MODULE_POWER_LIMIT_V1 0x00000016
+#define NV_MSGBOX_CMD_ARG1_MAX_DRAM_CAPACITY_V1 0x00000017
+#define NV_MSGBOX_CMD_ARG1_SYS_ID_DATA_TYPE_MAX 0x00000017 /* Adjust, when adding new types */
+#define NV_MSGBOX_CMD_ARG1_REGISTER_ACCESS_WRITE 0x00000000
+#define NV_MSGBOX_CMD_ARG1_REGISTER_ACCESS_READ 0x00000001
+#define NV_MSGBOX_CMD_ARG1_THERM_PARAM_TEMP_TARGET 0x00000000
+#define NV_MSGBOX_CMD_ARG1_THERM_PARAM_TEMP_HW_SLOWDN 0x00000001
+#define NV_MSGBOX_CMD_ARG1_THERM_PARAM_TEMP_SHUTDN 0x00000002
+#define NV_MSGBOX_CMD_ARG1_THERM_PARAM_TEMP_HBM_SLOWDN 0x00000003
+#define NV_MSGBOX_CMD_ARG1_THERM_PARAM_TEMP_SW_SLOWDN 0x00000004
+#define NV_MSGBOX_CMD_ARG1_THERM_PARAM_TEMP_TARGET_TLIMIT 0x00000005
+#define NV_MSGBOX_CMD_ARG1_THERM_PARAM_TEMP_HW_SLOWDN_TLIMIT 0x00000006
+#define NV_MSGBOX_CMD_ARG1_THERM_PARAM_TEMP_SHUTDN_TLIMIT 0x00000007
+#define NV_MSGBOX_CMD_ARG1_THERM_PARAM_TEMP_HBM_SLOWDN_TLIMIT 0x00000008
+#define NV_MSGBOX_CMD_ARG1_THERM_PARAM_TEMP_SW_SLOWDN_TLIMIT 0x00000009
+#define NV_MSGBOX_CMD_ARG1_GET_MISC_ECC_ENABLED_STATE 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GET_MISC_GPU_RESET_REQUIRED 0x00000001
+#define NV_MSGBOX_CMD_ARG1_GET_MISC_GPU_FLAGS_PAGE_0 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GET_MISC_GPU_FLAGS_PAGE_1 0x00000001
+#define NV_MSGBOX_CMD_ARG1_GET_MISC_DEVICE_FLAGS_PAGE_0 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GET_MISC_DEVICE_FLAGS_PAGE_1 0x00000001
+
+#define NV_MSGBOX_CMD_ARG1_GPU_UTIL_COUNTERS_CONTEXT_TIME 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GPU_UTIL_COUNTERS_SM_TIME 0x00000001
+#define NV_MSGBOX_CMD_ARG1_GPU_UTIL_COUNTERS_RESET_COUNTERS 0x000000FF
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_LINK_COUNT 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_LINK_STATE_V1 0x00000001
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_LINK_BANDWIDTH 0x00000002
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_ERR_COUNTER_REPLAY 0x00000003
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_ERR_COUNTER_RECOVERY 0x00000004
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_ERR_COUNTER_FLIT_CRC 0x00000005
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_ERR_COUNTER_DATA_CRC 0x00000006
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_LINK_STATE_V2 0x00000007
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_SUBLINK_WIDTH 0x00000008
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_THROUGHPUT_DATA_TX 0x00000009
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_THROUGHPUT_DATA_RX 0x0000000a
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_THROUGHPUT_RAW_TX 0x0000000b
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_THROUGHPUT_RAW_RX 0x0000000c
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_TRAINING_ERROR_STATE 0x0000000d
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_RUNTIME_ERROR_STATE 0x0000000e
+#define NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_AVAILABILITY 0x0000000f
+#define NV_MSGBOX_CMD_ARG1_GET_CLOCK_FREQ_INFO_CURRENT 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GET_CLOCK_FREQ_INFO_MIN 0x00000001
+#define NV_MSGBOX_CMD_ARG1_GET_CLOCK_FREQ_INFO_MAX 0x00000002
+#define NV_MSGBOX_CMD_ARG1_GET_CLOCK_FREQ_INFO_PAGE_3 0x00000003
+#define NV_MSGBOX_CMD_ARG1_GET_SUPPORTED_CLOCK_THROTTLE_REASONS 0x00000004
+#define NV_MSGBOX_CMD_ARG1_GET_CURRENT_CLOCK_THROTTLE_REASONS 0x00000005
+#define NV_MSGBOX_CMD_ARG1_REMAP_ROWS_RAW_COUNTS 0x00000000
+#define NV_MSGBOX_CMD_ARG1_REMAP_ROWS_STATE_FLAGS 0x00000001
+#define NV_MSGBOX_CMD_ARG1_REMAP_ROWS_HISTOGRAM 0x00000002
+#define NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_0 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_1 0x00000001
+#define NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_2 0x00000002
+#define NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_3 0x00000003
+#define NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_4 0x00000004
+#define NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_6 0x00000006
+#define NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_8 0x00000008
+#define NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_9 0x00000009
+
+/* Async requests */
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_TGP_LIMIT_CONTROL_GET \
+ 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_TGP_LIMIT_CONTROL_SET \
+ 0x00000001
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_TGP_LIMIT_INFO_GET \
+ 0x00000002
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_THERMAL_FAN_V1_COUNT_GET \
+ 0x00000003
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_THERMAL_FAN_V1_INFO_GET \
+ 0x00000004
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_THERMAL_FAN_V1_STATUS_GET \
+ 0x00000005
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_OVERCLOCKING_LIMIT_CONTROL_GET \
+ 0x00000006
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_OVERCLOCKING_LIMIT_CONTROL_SET \
+ 0x00000007
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_ENERGY_COUNTER_STATUS_GET \
+ 0x00000008
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_VIOLATION_COUNTERS_STATUS_GET \
+ 0x00000009
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_UTILIZATION_RATE_GET \
+ 0x0000000a
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_OOB_CLOCK_LIMIT_SET \
+ 0x0000000b
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_DEVICE_MODE_CONTROL \
+ 0x0000000c
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_TEST_MESSAGE_SEND \
+ 0x0000000e
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_CLOCK_LIMIT_GET \
+ 0x0000000d
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_FAN_CURVE_POINTS_GET_SET \
+ 0x0000000f
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_POWER_HINT_GET \
+ 0x00000010
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_CONFIGURE_PROGRAMMABLE_EDPP \
+ 0x00000011
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_MODULE_LIMIT_CONTROL_GET \
+ 0x00000012
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_MODULE_LIMIT_CONTROL_SET \
+ 0x00000013
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_MODULE_LIMIT_INFO_GET \
+ 0x00000014
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_MEMORY_CAPACITY_UTILIZATION_GET \
+ 0x00000015
+#define NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_POLL 0x000000ff
+
+
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_SEL 15:14
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_SEL_CNT 0x00000000 /* counters */
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_SEL_FBA 0x00000001 /* FB addresses */
+/* Counters */
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_DEV 13:12
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_DEV_FB 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_DEV_GR 0x00000001
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_FB_SRC 11:10
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_FB_SRC_LTC 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_FB_SRC_FB 0x00000001
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_GR_SRC 11:10
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_GR_SRC_L1 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_GR_SRC_RF 0x00000001
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_TYPE 9:8
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_TYPE_SBE 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_CNT_TYPE_DBE 0x00000001
+/* FB addresses */
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_FBA_SC 13:13 /* scope */
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_FBA_SC_IND 0x00000000 /* individual addresses */
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_FBA_SC_CUMUL 0x00000001 /* cumulative counters */
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_FBA_IND_FLD 12:12 /* field */
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_FBA_IND_FLD_CTRS 0x00000000 /* counters: sbe, dbe */
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_FBA_IND_FLD_ADDR 0x00000001 /* address value */
+#define NV_MSGBOX_CMD_ARG1_ECC_V2_FBA_IND_INDEX 11:8 /* address array index: 0-13 */
+
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_SEL 15:14
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_SEL_CNT 0x00000000 /* counters */
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_SEL_FBA 0x00000001 /* FB addresses */
+/* Counters */
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_DEV 13:12
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_DEV_FB 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_DEV_GR 0x00000001
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_FB_SRC 11:10
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_FB_SRC_LTC 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_FB_SRC_FB 0x00000001
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_GR_SRC 11:10
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_GR_SRC_L1 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_GR_SRC_RF 0x00000001
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_GR_SRC_TEX 0x00000002
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_TYPE 9:8
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_TYPE_SBE 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_CNT_TYPE_DBE 0x00000001
+/* FB addresses */
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_FBA_SC 13:13 /* scope */
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_FBA_SC_IND 0x00000000 /* individual addresses */
+// These are not present in V3
+//#define NV_MSGBOX_CMD_ARG1_ECC_V3_FBA_SC_CUMUL 0x00000001 /* cumulative counters */
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_FBA_IND_FLD 12:12 /* field */
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_FBA_IND_FLD_CTRS 0x00000000 /* counters: sbe, dbe */
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_FBA_IND_FLD_ADDR 0x00000001 /* address value */
+#define NV_MSGBOX_CMD_ARG1_ECC_V3_FBA_IND_INDEX 11:8 /* address array index: 0-13 */
+
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_SEL 15:14
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_SEL_CNT 0x00000000 /* counters */
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_SEL_FBA 0x00000001 /* FB addresses */
+/* Counters */
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_DEV 13:12
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_DEV_FB 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_DEV_GR 0x00000001
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_FB_SRC 11:10
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_FB_SRC_LTC 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_FB_SRC_FB 0x00000001
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_GR_SRC 11:10
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_GR_SRC_SHM 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_GR_SRC_RF 0x00000001
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_GR_SRC_TEX 0x00000002
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_TYPE 9:8
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_TYPE_SBE 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_CNT_TYPE_DBE 0x00000001
+/* FB addresses */
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_FBA_SC 13:13 /* scope */
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_FBA_SC_IND 0x00000000 /* individual addresses */
+// These are not present in V4
+//#define NV_MSGBOX_CMD_ARG1_ECC_V4_FBA_SC_CUMUL 0x00000001 /* cumulative counters */
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_FBA_IND_FLD 12:12 /* field */
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_FBA_IND_FLD_CTRS 0x00000000 /* counters: sbe, dbe */
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_FBA_IND_FLD_ADDR 0x00000001 /* address value */
+#define NV_MSGBOX_CMD_ARG1_ECC_V4_FBA_IND_INDEX 11:8 /* address array index: 0-13 */
+
+#define NV_MSGBOX_CMD_ARG1_ECC_V5_SEL 15:15
+#define NV_MSGBOX_CMD_ARG1_ECC_V5_SEL_COUNTS 0x00000000 /* address/region counts */
+#define NV_MSGBOX_CMD_ARG1_ECC_V5_SEL_ERR_BUFFER 0x00000001 /* SRAM error buffer */
+
+#define NV_MSGBOX_CMD_ARG1_ECC_V5_COUNTS_INDEX_LO 14:8 /* 7 least significant index bits */
+
+#define NV_MSGBOX_CMD_ARG1_ECC_V5_ERR_BUF_INDEX 11:8 /* buffer entry index */
+
+#define NV_MSGBOX_CMD_ARG1_ACCESS_WP_MODE_ACTION 8:8
+#define NV_MSGBOX_CMD_ARG1_ACCESS_WP_MODE_ACTION_GET 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ACCESS_WP_MODE_ACTION_SET 0x00000001
+
+#define NV_MSGBOX_CMD_ARG1_BUNDLE_REQUEST_COUNT 11:8
+#define NV_MSGBOX_CMD_ARG1_BUNDLE_DISP_RULE_COUNT 15:12
+
+#define NV_MSGBOX_CMD_ARG1_GET_DEM_OLDEST 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GET_DEM_BY_SEQ_NUMBER 0x00000001
+#define NV_MSGBOX_CMD_ARG1_GET_DEM_BY_TIMESTAMP 0x00000002
+
+#define NV_MSGBOX_CMD_ARG1_ECC_V6_ERROR_TYPE 15:8
+#define NV_MSGBOX_CMD_ARG1_ECC_V6_ERROR_TYPE_CORRECTABLE_ERROR 0
+#define NV_MSGBOX_CMD_ARG1_ECC_V6_ERROR_TYPE_UNCORRECTABLE_ERROR 1
+#define NV_MSGBOX_CMD_ARG1_ECC_V6_ERROR_TYPE_ECC_STATE_FLAGS 2
+
+#define NV_MSGBOX_CMD_ARG1_ENERGY_COUNTER_GPU 0x00000000
+#define NV_MSGBOX_CMD_ARG1_ENERGY_COUNTER_MODULE 0x00000003
+
+// Query type of _GET_POWER_HINT_INFO
+#define NV_MSGBOX_CMD_ARG1_GET_POWER_HINT_INFO_CLK 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GET_POWER_HINT_INFO_TEMP 0x00000001
+#define NV_MSGBOX_CMD_ARG1_GET_POWER_HINT_INFO_PROFILES 0x00000002
+#define NV_MSGBOX_CMD_ARG1_GET_POWER_HINT_INFO_NUM \
+ (NV_MSGBOX_CMD_ARG1_GET_POWER_HINT_INFO_PROFILES + 1)
+
+// Arg1 for _GPU_PERFORMANCE_MONITORING
+#define NV_MSGBOX_CMD_ARG1_GPM_ACTION 15:14
+#define NV_MSGBOX_CMD_ARG1_GPM_ACTION_GET_INSTANTANEOUS_METRIC 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GPM_ACTION_GET_SNAPSHOT_METRIC 0x00000001
+#define NV_MSGBOX_CMD_ARG1_GPM_ACTION_CAPTURE_SNAPSHOT 0x00000002
+#define NV_MSGBOX_CMD_ARG1_GPM_ACTION_SET_MULTIPLIER 0x00000003
+
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC 13:8
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_GRAPHICS_ENGINE 0x00000000
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_SM_ACTIVITY 0x00000001
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_SM_OCCUPANCY 0x00000002
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_TENSOR_CORE_ACTIVITY 0x00000003
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_DRAM_USAGE 0x00000004
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_FP64_ACTIVITY 0x00000005
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_FP32_ACTIVITY 0x00000006
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_FP16_ACTIVITY 0x00000007
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_PCIE_TX_BANDWIDTH 0x00000008
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_PCIE_RX_BANDWIDTH 0x00000009
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_RAW_TX_BANDWIDTH 0x0000000A
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_DATA_TX_BANDWIDTH 0x0000000B
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_RAW_RX_BANDWIDTH 0x0000000C
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_DATA_RX_BANDWIDTH 0x0000000D
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVDEC_UTILIZATION 0x0000000E
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVJPG_UTILIZATION 0x0000000F
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVOFA_UTILIZATION 0x00000010
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_RAW_TX_BW_PER_LINK 0x00000011
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_DATA_TX_BW_PER_LINK 0x00000012
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_RAW_RX_BW_PER_LINK 0x00000013
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_DATA_RX_BW_PER_LINK 0x00000014
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVDEC_UTIL_PER_INSTANCE 0x00000015
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVJPG_UTIL_PER_INSTANCE 0x00000016
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_INTEGER_UTILIZATION 0x00000017
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_DMMA_UTILIZATION 0x00000018
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_HMMA_UTILIZATION 0x00000019
+#define NV_MSGBOX_CMD_ARG1_GPM_METRIC_IMMA_UTILIZATION 0x0000001A
+
+#define NV_MSGBOX_CMD_ARG1_DYN_SYS_INFO_DRIVER_VERSION_V1 0x00000000
+
+#define NV_MSGBOX_CMD_ARG2 23:16
+#define NV_MSGBOX_CMD_ARG2_NULL 0x00000000
+
+#define NV_MSGBOX_CMD_ARG2_ECC_V2_FB_PARTITION 23:20
+#define NV_MSGBOX_CMD_ARG2_ECC_V2_FB_SLICE 19:16
+#define NV_MSGBOX_CMD_ARG2_ECC_V2_GR_GPC 23:20
+#define NV_MSGBOX_CMD_ARG2_ECC_V2_GR_TPC 19:16
+
+#define NV_MSGBOX_CMD_ARG2_ECC_V3_FB_PARTITION 23:20
+#define NV_MSGBOX_CMD_ARG2_ECC_V3_FB_SLICE 19:16
+#define NV_MSGBOX_CMD_ARG2_ECC_V3_FB_SUBPARTITION 19:16
+#define NV_MSGBOX_CMD_ARG2_ECC_V3_GR_TEX 23:22
+#define NV_MSGBOX_CMD_ARG2_ECC_V3_GR_GPC 21:19
+#define NV_MSGBOX_CMD_ARG2_ECC_V3_GR_TPC 18:16
+
+#define NV_MSGBOX_CMD_ARG2_ECC_V4_FB_PARTITION 23:20
+#define NV_MSGBOX_CMD_ARG2_ECC_V4_FB_SLICE 19:16
+#define NV_MSGBOX_CMD_ARG2_ECC_V4_FB_SUBPARTITION 19:16
+#define NV_MSGBOX_CMD_ARG2_ECC_V4_GR_TEX 23:22
+#define NV_MSGBOX_CMD_ARG2_ECC_V4_GR_GPC 21:19
+#define NV_MSGBOX_CMD_ARG2_ECC_V4_GR_TPC 18:16
+
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_INDEX_HI 23:21
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE 18:16
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE_HDR_META 0x0 /* header and metadata */
+
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE_ADDR_ADDR 0x1 /* addr: address */
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE_ADDR_UNCORRECTED_COUNTS 0x2 /* addr: uncorrectedCounts */
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE_ADDR_CORRECTED_TOTAL 0x3 /* addr: correctedTotal */
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE_ADDR_CORRECTED_UNIQUE 0x4 /* addr: correctedUnique */
+
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE_REGN_CORRECTED_TOTAL 0x1 /* region: correctedTotal */
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE_REGN_CORRECTED_UNIQUE 0x2 /* region: correctedUnique */
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE_REGN_UNCORRECTED_TOTAL 0x3 /* region: uncorrectedTotal */
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE_REGN_UNCORRECTED_UNIQUE 0x4 /* region: uncorrectedUnique */
+
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_COUNTS_TYPE_MAX 0x4
+
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_ERR_BUF_TYPE 17:16 /* entry element type */
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_ERR_BUF_TYPE_ERR_TYPE_META 0x0 /* errorType and metadata */
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_ERR_BUF_TYPE_TIME_STAMP 0x1 /* time stamp */
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_ERR_BUF_TYPE_ADDR 0x2 /* address */
+
+#define NV_MSGBOX_CMD_ARG2_ECC_V5_ERR_BUF_TYPE_MAX 0x2
+
+#define NV_MSGBOX_CMD_ARG2_REG_INDEX_SCRATCH_PAGE 0x00000000
+#define NV_MSGBOX_CMD_ARG2_REG_INDEX_EVENTS_PENDING 0x00000001
+#define NV_MSGBOX_CMD_ARG2_REG_INDEX_EVENT_MASK 0x00000002
+#define NV_MSGBOX_CMD_ARG2_REG_INDEX_MAX 0x00000002 /* increase when adding
+ new registers */
+
+#define NV_MSGBOX_CMD_ARG2_NVLINK_INFO_AGGREGATE 0x000000FF
+
+#define NV_MSGBOX_CMD_ARG2_ACCESS_WP_MODE_SET_STATE 23:16
+#define NV_MSGBOX_CMD_ARG2_ACCESS_WP_MODE_SET_STATE_DISABLED 0x0000005A
+#define NV_MSGBOX_CMD_ARG2_ACCESS_WP_MODE_SET_STATE_ENABLED 0x000000A5
+
+#define NV_MSGBOX_CMD_ARG2_GET_CLOCK_FREQ_INFO_GPCCLK 0x00000000
+#define NV_MSGBOX_CMD_ARG2_GET_CLOCK_FREQ_INFO_MEMCLK 0x00000001
+
+#define NV_MSGBOX_CMD_ARG2_ECC_V6_COUNTER_TYPE 23:16
+#define NV_MSGBOX_CMD_ARG2_ECC_V6_COUNTER_TYPE_SRAM 0
+#define NV_MSGBOX_CMD_ARG2_ECC_V6_COUNTER_TYPE_DRAM 1
+
+#define NV_MSGBOX_CMD_ARG2_REMAP_ROW_RAW_CNT_COMBINED 0x00000000
+#define NV_MSGBOX_CMD_ARG2_REMAP_ROW_RAW_CNT_UNCORR 0x00000001
+#define NV_MSGBOX_CMD_ARG2_REMAP_ROW_RAW_CNT_CORR 0x00000002
+
+#define NV_MSGBOX_CMD_ARG2_REMAP_ROWS_STATE_FLAGS_PAGE0 0x00000000
+
+/*!
+ * Arg2 for _GET_PCIE_LINK_INFO
+ * Arg1 == _GET_PCIE_LINK_INFO_PAGE_8
+ * Return TX EQ parameters
+ */
+#define NV_MSGBOX_CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_8_LANE_IDX 3:0
+#define NV_MSGBOX_CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_8_SPEED_SELECT 5:4
+#define NV_MSGBOX_CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_8_SPEED_SELECT_GEN_3 \
+ 0x00000000
+#define NV_MSGBOX_CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_8_SPEED_SELECT_GEN_4 \
+ 0x00000001
+#define NV_MSGBOX_CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_8_SPEED_SELECT_GEN_5 \
+ 0x00000002
+
+/*!
+ * Arg2 for _GET_PCIE_LINK_INFO
+ * Arg1 == _GET_PCIE_LINK_INFO_PAGE_9
+ * Return RX EQ parameters
+ */
+#define NV_MSGBOX_CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_9_LANE_IDX 3:0
+#define NV_MSGBOX_CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_9_SPEED_SELECT 5:4
+#define NV_MSGBOX_CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_9_SPEED_SELECT_GEN_3 \
+ 0x00000000
+#define NV_MSGBOX_CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_9_SPEED_SELECT_GEN_4 \
+ 0x00000001
+#define NV_MSGBOX_CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_9_SPEED_SELECT_GEN_5 \
+ 0x00000002
+
+/*!
+ * Arg2 for _GET_POWER_HINT_INFO
+ * ARG1 == _GET_POWER_HINT_INFO_CLK
+ * Return Min/Max frequency in MHz
+ */
+#define NV_MSGBOX_CMD_ARG2_GET_POWER_HINT_INFO_CLK_GR 0x00000000
+#define NV_MSGBOX_CMD_ARG2_GET_POWER_HINT_INFO_CLK_MEM 0x00000001
+
+/*!
+ * Arg2 for _GET_POWER_HINT_INFO
+ * ARG1 == _GET_POWER_HINT_INFO_PROFILES
+ * Return bits represents which profiles are available
+ */
+#define NV_MSGBOX_CMD_ARG2_GET_POWER_HINT_INFO_PROFILES_PAGE_0 0x00000000
+#define NV_MSGBOX_CMD_ARG2_GET_POWER_HINT_INFO_PROFILES_PAGE_1 0x00000001
+#define NV_MSGBOX_CMD_ARG2_GET_POWER_HINT_INFO_PROFILES_PAGE_2 0x00000002
+#define NV_MSGBOX_CMD_ARG2_GET_POWER_HINT_INFO_PROFILES_PAGE_3 0x00000003
+#define NV_MSGBOX_CMD_ARG2_GET_POWER_HINT_INFO_PROFILES_TOTAL_PAGES \
+ (NV_MSGBOX_CMD_ARG2_GET_POWER_HINT_INFO_PROFILES_PAGE_3 + 1)
+
+// Arg2 for _GPU_PERFORMANCE_MONITORING
+#define NV_MSGBOX_CMD_ARG2_GPM_PARTITION_AGGREGATE 0x000000FF
+#define NV_MSGBOX_CMD_ARG2_GPM_PARTITION_INDEX 21:16
+#define NV_MSGBOX_CMD_ARG2_GPM_CI_METRICS_REQUESTED 23:23
+#define NV_MSGBOX_CMD_ARG2_GPM_CI_METRICS_REQUESTED_YES 0x00000001
+#define NV_MSGBOX_CMD_ARG2_GPM_CI_METRICS_REQUESTED_NO 0x00000000
+
+#define NV_MSGBOX_CMD_ARG2_GPM_MULTIPLIER 23:16
+#define NV_MSGBOX_CMD_ARG2_GPM_MULTIPLIER_1X 0x00000001
+#define NV_MSGBOX_CMD_ARG2_GPM_MULTIPLIER_2X 0x00000002
+#define NV_MSGBOX_CMD_ARG2_GPM_MULTIPLIER_5X 0x00000005
+#define NV_MSGBOX_CMD_ARG2_GPM_MULTIPLIER_10X 0x0000000A
+#define NV_MSGBOX_CMD_ARG2_GPM_MULTIPLIER_100X 0x00000064
+
+
+#define NV_MSGBOX_CMD_STATUS 28:24
+#define NV_MSGBOX_CMD_STATUS_NULL 0x00000000
+#define NV_MSGBOX_CMD_STATUS_ERR_REQUEST 0x00000001
+#define NV_MSGBOX_CMD_STATUS_ERR_OPCODE 0x00000002
+#define NV_MSGBOX_CMD_STATUS_ERR_ARG1 0x00000003
+#define NV_MSGBOX_CMD_STATUS_ERR_ARG2 0x00000004
+#define NV_MSGBOX_CMD_STATUS_ERR_DATA 0x00000005
+#define NV_MSGBOX_CMD_STATUS_ERR_MISC 0x00000006
+#define NV_MSGBOX_CMD_STATUS_ERR_I2C_ACCESS 0x00000007
+#define NV_MSGBOX_CMD_STATUS_ERR_NOT_SUPPORTED 0x00000008
+#define NV_MSGBOX_CMD_STATUS_ERR_NOT_AVAILABLE 0x00000009
+#define NV_MSGBOX_CMD_STATUS_ERR_BUSY 0x0000000a
+#define NV_MSGBOX_CMD_STATUS_ERR_AGAIN 0x0000000b
+#define NV_MSGBOX_CMD_STATUS_ERR_SENSOR_DATA 0x0000000c
+#define NV_MSGBOX_CMD_STATUS_ERR_DISPOSITION 0x0000000d
+#define NV_MSGBOX_CMD_STATUS_PARTIAL_FAILURE 0x0000001b
+#define NV_MSGBOX_CMD_STATUS_ACCEPTED 0x0000001c
+#define NV_MSGBOX_CMD_STATUS_INACTIVE 0x0000001d
+#define NV_MSGBOX_CMD_STATUS_READY 0x0000001e
+#define NV_MSGBOX_CMD_STATUS_SUCCESS 0x0000001f
+
+#define NV_MSGBOX_CMD_RSVD 29:29
+#define NV_MSGBOX_CMD_RSVD_INIT 0x00000000
+
+#define NV_MSGBOX_CMD_COPY_DATA 30:30
+#define NV_MSGBOX_CMD_COPY_DATA_OFF 0x00000000
+#define NV_MSGBOX_CMD_COPY_DATA_ON 0x00000001
+
+#define NV_MSGBOX_CMD_EVENT_PENDING 30:30
+#define NV_MSGBOX_CMD_EVENT_PENDING_OFF 0x00000000
+#define NV_MSGBOX_CMD_EVENT_PENDING_ON 0x00000001
+
+#define NV_MSGBOX_CMD_INTR 31:31
+#define NV_MSGBOX_CMD_INTR_NOT_PENDING 0x00000000
+#define NV_MSGBOX_CMD_INTR_PENDING 0x00000001
+#define NV_MSGBOX_CMD_INTR_CLEAR 0x00000000
+
+/* For individual requests in a bundle */
+
+#define NV_MSGBOX_CMD_ON_BUNDLE_FAILURE 31:31
+#define NV_MSGBOX_CMD_ON_BUNDLE_FAILURE_CONTINUE 0x00000000
+#define NV_MSGBOX_CMD_ON_BUNDLE_FAILURE_STOP 0x00000001
+
+#define NV_MSGBOX_CMD_DATA_COPY 23:0
+#define NV_MSGBOX_CMD_DATA_COPY_INIT 0x00000000
+#define NV_MSGBOX_CMD_EXT_STATUS 23:0
+
+// NV_MSGBOX_CMD_COPY_SIZE_ENCODING used for certain commands to embed size
+// indicators in the output when copy-bit is set in request
+
+#define NV_MSGBOX_CMD_COPY_SIZE_ENCODING_READ_DATA_OUT 0:0
+#define NV_MSGBOX_CMD_COPY_SIZE_ENCODING_READ_DATA_OUT_SET 1
+#define NV_MSGBOX_CMD_COPY_SIZE_ENCODING_READ_DATA_OUT_NOT_SET 0
+
+#define NV_MSGBOX_CMD_COPY_SIZE_ENCODING_READ_EXT_DATA_OUT 1:1
+#define NV_MSGBOX_CMD_COPY_SIZE_ENCODING_READ_EXT_DATA_OUT_SET 1
+#define NV_MSGBOX_CMD_COPY_SIZE_ENCODING_READ_EXT_DATA_OUT_NOT_SET 0
+
+#define NV_MSGBOX_CMD_COPY_SIZE_ENCODING_DATA 23:2
+#define NV_MSGBOX_CMD_COPY_SIZE_ENCODING_DATA_INIT 0x00000000
+
+/* Response to NV_MSGBOX_CMD_ARG1_REMAP_ROWS_HISTOGRAM */
+#define NV_MSGBOX_CMD_REMAP_ROW_HISTOGRAM_NONE_AVAILABILITY 15:0
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_THROUGHPUT_* */
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_GRANULARITY 1:0
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_GRANULARITY_KIB 0x00000000
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_GRANULARITY_MIB 0x00000001
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_GRANULARITY_GIB 0x00000002
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_GRANULARITY_TIB 0x00000003
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_NEW_SAMPLE 2:2
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_NEW_SAMPLE_FALSE 0x00000000
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_NEW_SAMPLE_TRUE 0x00000001
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_INVALID_DELTA 3:3
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_INVALID_DELTA_FALSE 0x00000000
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_INVALID_DELTA_TRUE 0x00000001
+#define NV_MSGBOX_CMD_NVLINK_INFO_THROUGHPUT_DELTA 23:4
+
+/*
+ * Response to NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_TRAINING_ERR_STATE
+ * NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_RUNTIME_ERR_STATE
+ */
+#define NV_MSGBOX_CMD_NVLINK_INFO_TRAINING_ERROR_COUNT 11:0
+#define NV_MSGBOX_CMD_NVLINK_INFO_RUNTIME_ERROR_COUNT 23:12
+#define NV_MSGBOX_CMD_NVLINK_INFO_ERROR_COUNT_MAX \
+ DRF_MASK(NV_MSGBOX_CMD_NVLINK_INFO_TRAINING_ERROR_COUNT)
+
+/**
+ * Response to NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_AVAILABILITY
+ */
+#define NV_MSGBOX_CMD_NVLINK_INFO_GET_NVLINK_INFO_AVAILABILTY_PAGE_0 0x00000000
+
+/**
+ * This field is populated as response to the following metrics:
+ * - NV_MSGBOX_CMD_ARG1_GPM_METRIC_DRAM_USAGE
+ * - NV_MSGBOX_CMD_ARG1_GPM_METRIC_PCIE_TX_BANDWIDTH
+ * - NV_MSGBOX_CMD_ARG1_GPM_METRIC_PCIE_RX_BANDWIDTH
+ * - NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_RAW_TX_BANDWIDTH
+ * - NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_DATA_TX_BANDWIDTH
+ * - NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_RAW_RX_BANDWIDTH
+ * - NV_MSGBOX_CMD_ARG1_GPM_METRIC_NVLINK_DATA_RX_BANDWIDTH
+ */
+#define NV_MSGBOX_CMD_GPM_DATA_GRANULARITY 2:0
+#define NV_MSGBOX_CMD_GPM_DATA_GRANULARITY_B 0x00000000
+#define NV_MSGBOX_CMD_GPM_DATA_GRANULARITY_KIB 0x00000001
+#define NV_MSGBOX_CMD_GPM_DATA_GRANULARITY_MIB 0x00000002
+#define NV_MSGBOX_CMD_GPM_DATA_GRANULARITY_GIB 0x00000003
+
+/* MSGBOX data, capability dword structure */
+
+#define NV_MSGBOX_DATA_REG 31:0
+#define NV_MSGBOX_DATA_CAP_COUNT 6
+
+#define NV_MSGBOX_DATA_CAP_0 0
+#define NV_MSGBOX_DATA_CAP_0_TEMP_GPU_0 0:0
+#define NV_MSGBOX_DATA_CAP_0_TEMP_GPU_0_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_TEMP_GPU_0_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_TEMP_NVSWITCH_0 0:0
+#define NV_MSGBOX_DATA_CAP_0_TEMP_NVSWITCH_0_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_TEMP_NVSWITCH_0_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_TEMP_GPU_1 1:1
+#define NV_MSGBOX_DATA_CAP_0_TEMP_GPU_1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_TEMP_GPU_1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_TEMP_BOARD 4:4
+#define NV_MSGBOX_DATA_CAP_0_TEMP_BOARD_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_TEMP_BOARD_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_TEMP_MEMORY 5:5
+#define NV_MSGBOX_DATA_CAP_0_TEMP_MEMORY_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_TEMP_MEMORY_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_TEMP_PWR_SUPPLY 6:6
+#define NV_MSGBOX_DATA_CAP_0_TEMP_PWR_SUPPLY_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_TEMP_PWR_SUPPLY_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_TEMP_T_LIMIT 7:7
+#define NV_MSGBOX_DATA_CAP_0_TEMP_T_LIMIT_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_TEMP_T_LIMIT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_EXT_TEMP_BITS 11:8
+#define NV_MSGBOX_DATA_CAP_0_EXT_TEMP_BITS_ZERO 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_EXT_TEMP_BITS_ADT7473 0x00000002
+#define NV_MSGBOX_DATA_CAP_0_EXT_TEMP_BITS_SFXP11_5 0x00000005
+#define NV_MSGBOX_DATA_CAP_0_EXT_TEMP_BITS_SFXP24_8 0x00000008
+#define NV_MSGBOX_DATA_CAP_0_GET_ENERGY_COUNTER_MODULE 12:12
+#define NV_MSGBOX_DATA_CAP_0_GET_ENERGY_COUNTER_MODULE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_GET_ENERGY_COUNTER_MODULE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_MODULE_LIMIT_CONTROL_GET 13:13
+#define NV_MSGBOX_DATA_CAP_0_MODULE_LIMIT_CONTROL_GET_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_MODULE_LIMIT_CONTROL_GET_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_MODULE_LIMIT_CONTROL_SET 14:14
+#define NV_MSGBOX_DATA_CAP_0_MODULE_LIMIT_CONTROL_SET_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_MODULE_LIMIT_CONTROL_SET_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_MODULE_LIMIT_INFO_GET 15:15
+#define NV_MSGBOX_DATA_CAP_0_MODULE_LIMIT_INFO_GET_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_MODULE_LIMIT_INFO_GET_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_POWER_TOTAL 16:16
+#define NV_MSGBOX_DATA_CAP_0_POWER_TOTAL_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_POWER_TOTAL_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_GPU_PCONTROL 17:17
+#define NV_MSGBOX_DATA_CAP_0_GPU_PCONTROL_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_GPU_PCONTROL_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_GPU_SYSCONTROL 18:18
+#define NV_MSGBOX_DATA_CAP_0_GPU_SYSCONTROL_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_GPU_SYSCONTROL_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_THERMP_BITS 28:19 // Adjust when adding new bits
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_TLIMIT_BITS 23:19 // Adjust when adding new bits
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_BITS 28:24 // Adjust when adding new bits
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_ACOUSTIC_TLIMIT 19:19
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_ACOUSTIC_TLIMIT_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_ACOUSTIC_TLIMIT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SLOWDN_TLIMIT 20:20
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SLOWDN_TLIMIT_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SLOWDN_TLIMIT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SHUTDN_TLIMIT 21:21
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SHUTDN_TLIMIT_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SHUTDN_TLIMIT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_MEMORY_TLIMIT 22:22
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_MEMORY_TLIMIT_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_MEMORY_TLIMIT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_GPU_SW_SLOWDOWN_TLIMIT 23:23
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_GPU_SW_SLOWDOWN_TLIMIT_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_GPU_SW_SLOWDOWN_TLIMIT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_ACOUSTIC 24:24
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_ACOUSTIC_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_ACOUSTIC_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SLOWDN 25:25
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SLOWDN_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SLOWDN_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SHUTDN 26:26
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SHUTDN_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_SHUTDN_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_MEMORY 27:27
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_MEMORY_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_MEMORY_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_GPU_SW_SLOWDOWN 28:28
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_GPU_SW_SLOWDOWN_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_THERMP_TEMP_GPU_SW_SLOWDOWN_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_GET_FABRIC_STATE_FLAGS 29:29
+#define NV_MSGBOX_DATA_CAP_0_GET_FABRIC_STATE_FLAGS_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_GET_FABRIC_STATE_FLAGS_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_POWER_FB 30:30
+#define NV_MSGBOX_DATA_CAP_0_POWER_FB_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_POWER_FB_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_0_POWER_MODULE 31:31
+#define NV_MSGBOX_DATA_CAP_0_POWER_MODULE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_0_POWER_MODULE_AVAILABLE 0x00000001
+
+#define NV_MSGBOX_DATA_CAP_1 1
+#define NV_MSGBOX_DATA_CAP_1_BOARD_PART_NUM_V1 0:0
+#define NV_MSGBOX_DATA_CAP_1_BOARD_PART_NUM_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_BOARD_PART_NUM_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_OEM_INFO_V1 1:1
+#define NV_MSGBOX_DATA_CAP_1_OEM_INFO_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_OEM_INFO_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_SERIAL_NUM_V1 2:2
+#define NV_MSGBOX_DATA_CAP_1_SERIAL_NUM_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_SERIAL_NUM_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_MARKETING_NAME_V1 3:3
+#define NV_MSGBOX_DATA_CAP_1_MARKETING_NAME_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_MARKETING_NAME_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_GPU_PART_NUM_V1 4:4
+#define NV_MSGBOX_DATA_CAP_1_GPU_PART_NUM_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_GPU_PART_NUM_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_MEMORY_VENDOR_V1 5:5
+#define NV_MSGBOX_DATA_CAP_1_MEMORY_VENDOR_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_MEMORY_VENDOR_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_MEMORY_PART_NUM_V1 6:6
+#define NV_MSGBOX_DATA_CAP_1_MEMORY_PART_NUM_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_MEMORY_PART_NUM_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_BUILD_DATE_V1 7:7
+#define NV_MSGBOX_DATA_CAP_1_BUILD_DATE_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_BUILD_DATE_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_FIRMWARE_VER_V1 8:8
+#define NV_MSGBOX_DATA_CAP_1_FIRMWARE_VER_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_FIRMWARE_VER_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_VENDOR_ID_V1 9:9
+#define NV_MSGBOX_DATA_CAP_1_VENDOR_ID_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_VENDOR_ID_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_DEV_ID_V1 10:10
+#define NV_MSGBOX_DATA_CAP_1_DEV_ID_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_DEV_ID_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_SUB_VENDOR_ID_V1 11:11
+#define NV_MSGBOX_DATA_CAP_1_SUB_VENDOR_ID_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_SUB_VENDOR_ID_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_SUB_ID_V1 12:12
+#define NV_MSGBOX_DATA_CAP_1_SUB_ID_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_SUB_ID_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_GPU_GUID_V1 13:13
+#define NV_MSGBOX_DATA_CAP_1_GPU_GUID_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_GPU_GUID_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_INFOROM_VER_V1 14:14
+#define NV_MSGBOX_DATA_CAP_1_INFOROM_VER_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_INFOROM_VER_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_MODULE_POWER_LIMIT_V1 15:15
+#define NV_MSGBOX_DATA_CAP_1_MODULE_POWER_LIMIT_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_MODULE_POWER_LIMIT_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_ECC_V1 16:16
+#define NV_MSGBOX_DATA_CAP_1_ECC_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_ECC_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_ECC_V2 17:17
+#define NV_MSGBOX_DATA_CAP_1_ECC_V2_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_ECC_V2_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_ECC_V3 18:18
+#define NV_MSGBOX_DATA_CAP_1_ECC_V3_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_ECC_V3_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_RET_PG_CNT 19:19
+#define NV_MSGBOX_DATA_CAP_1_RET_PG_CNT_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_RET_PG_CNT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_ECC_V4 20:20
+#define NV_MSGBOX_DATA_CAP_1_ECC_V4_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_ECC_V4_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_ECC_V5 21:21
+#define NV_MSGBOX_DATA_CAP_1_ECC_V5_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_ECC_V5_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_ACCESS_WP_MODE 22:22
+#define NV_MSGBOX_DATA_CAP_1_ACCESS_WP_MODE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_ACCESS_WP_MODE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_GET_ECC_ENABLED_STATE 23:23
+#define NV_MSGBOX_DATA_CAP_1_GET_ECC_ENABLED_STATE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_GET_ECC_ENABLED_STATE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_GET_GPU_RESET_REQUIRED 24:24
+#define NV_MSGBOX_DATA_CAP_1_GET_GPU_RESET_REQUIRED_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_GET_GPU_RESET_REQUIRED_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_GPU_UTIL_COUNTERS 25:25
+#define NV_MSGBOX_DATA_CAP_1_GPU_UTIL_COUNTERS_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_GPU_UTIL_COUNTERS_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_NVLINK_INFO_STATE_V1 26:26
+#define NV_MSGBOX_DATA_CAP_1_NVLINK_INFO_STATE_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_NVLINK_INFO_STATE_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_NVLINK_ERROR_COUNTERS 27:27
+#define NV_MSGBOX_DATA_CAP_1_NVLINK_ERROR_COUNTERS_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_NVLINK_ERROR_COUNTERS_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_CLOCK_FREQ_INFO 28:28
+#define NV_MSGBOX_DATA_CAP_1_CLOCK_FREQ_INFO_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_CLOCK_FREQ_INFO_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_GET_MIG_ENABLED_STATE 29:29
+#define NV_MSGBOX_DATA_CAP_1_GET_MIG_ENABLED_STATE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_GET_MIG_ENABLED_STATE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_ECC_V6 30:30
+#define NV_MSGBOX_DATA_CAP_1_ECC_V6_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_ECC_V6_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_1_CLOCK_THROTTLE_REASON 31:31
+#define NV_MSGBOX_DATA_CAP_1_CLOCK_THROTTLE_REASON_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_1_CLOCK_THROTTLE_REASON_AVAILABLE 0x00000001
+
+#define NV_MSGBOX_DATA_CAP_2 2
+#define NV_MSGBOX_DATA_CAP_2_GPU_DRIVER 0:0
+#define NV_MSGBOX_DATA_CAP_2_GPU_DRIVER_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_GPU_DRIVER_NOT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_NVSWITCH_DRIVER 0:0
+#define NV_MSGBOX_DATA_CAP_2_NVSWITCH_DRIVER_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_NVSWITCH_DRIVER_NOT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_GPU_REQUEST 1:1
+#define NV_MSGBOX_DATA_CAP_2_GPU_REQUEST_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_GPU_REQUEST_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_NUM_SCRATCH_BANKS 4:2
+#define NV_MSGBOX_DATA_CAP_2_NUM_SCRATCH_BANKS_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_FAN_V1_CONTROL 5:5
+#define NV_MSGBOX_DATA_CAP_2_FAN_V1_CONTROL_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_FAN_V1_CONTROL_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_PRODUCT_LENGTH_V1 6:6
+#define NV_MSGBOX_DATA_CAP_2_PRODUCT_LENGTH_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_PRODUCT_LENGTH_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_PRODUCT_WIDTH_V1 7:7
+#define NV_MSGBOX_DATA_CAP_2_PRODUCT_WIDTH_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_PRODUCT_WIDTH_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_PRODUCT_HEIGHT_V1 8:8
+#define NV_MSGBOX_DATA_CAP_2_PRODUCT_HEIGHT_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_PRODUCT_HEIGHT_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_PCIE_SPEED_V1 9:9
+#define NV_MSGBOX_DATA_CAP_2_PCIE_SPEED_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_PCIE_SPEED_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_PCIE_WIDTH_V1 10:10
+#define NV_MSGBOX_DATA_CAP_2_PCIE_WIDTH_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_PCIE_WIDTH_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_TGP_LIMIT_V1 11:11
+#define NV_MSGBOX_DATA_CAP_2_TGP_LIMIT_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_TGP_LIMIT_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_SCRATCH_PAGE_SIZE 12:12
+#define NV_MSGBOX_DATA_CAP_2_SCRATCH_PAGE_SIZE_1024B 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_SCRATCH_PAGE_SIZE_256B 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_REMAP_ROW_STATS 13:13
+#define NV_MSGBOX_DATA_CAP_2_REMAP_ROW_STATS_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_REMAP_ROW_STATS_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_GET_PCIE_LINK_INFO 14:14
+#define NV_MSGBOX_DATA_CAP_2_GET_PCIE_LINK_INFO_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_GET_PCIE_LINK_INFO_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_GET_GPU_DRAIN_AND_RESET_RECOMMENDED 15:15
+#define NV_MSGBOX_DATA_CAP_2_GET_GPU_DRAIN_AND_RESET_RECOMMENDED_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_GET_GPU_DRAIN_AND_RESET_RECOMMENDED_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_THROUGHPUT 16:16
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_THROUGHPUT_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_THROUGHPUT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_LINK_STATE_V2 17:17
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_LINK_STATE_V2_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_LINK_STATE_V2_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_SUBLINK_WIDTH 18:18
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_SUBLINK_WIDTH_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_SUBLINK_WIDTH_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_GET_ENERGY_COUNTER 19:19
+#define NV_MSGBOX_DATA_CAP_2_GET_ENERGY_COUNTER_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_GET_ENERGY_COUNTER_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_REMAP_ROW_PENDING 20:20
+#define NV_MSGBOX_DATA_CAP_2_REMAP_ROW_PENDING_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_REMAP_ROW_PENDING_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_REMAP_ROW_HISTOGRAM 21:21
+#define NV_MSGBOX_DATA_CAP_2_REMAP_ROW_HISTOGRAM_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_REMAP_ROW_HISTOGRAM_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_TRAINING_ERROR_STATE 22:22
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_TRAINING_ERROR_STATE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_TRAINING_ERROR_STATE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_RUNTIME_ERROR_STATE 23:23
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_RUNTIME_ERROR_STATE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_RUNTIME_ERROR_STATE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_GET_PCIE_LINK_TARGET_SPEED 25:25
+#define NV_MSGBOX_DATA_CAP_2_GET_PCIE_LINK_TARGET_SPEED_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_GET_PCIE_LINK_TARGET_SPEED_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_CURRENT_PSTATE 26:26
+#define NV_MSGBOX_DATA_CAP_2_CURRENT_PSTATE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_CURRENT_PSTATE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_AVAILABILITY 27:27
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_AVAILABILITY_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_NVLINK_INFO_AVAILABILITY_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_2_FRU_PART_NUMBER_V1 31:31
+#define NV_MSGBOX_DATA_CAP_2_FRU_PART_NUMBER_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_2_FRU_PART_NUMBER_V1_AVAILABLE 0x00000001
+
+#define NV_MSGBOX_DATA_CAP_4 4
+#define NV_MSGBOX_DATA_CAP_4_HW_VIOLATION_TIME 0:0
+#define NV_MSGBOX_DATA_CAP_4_HW_VIOLATION_TIME_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_HW_VIOLATION_TIME_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_SW_VIOLATION_TIME 1:1
+#define NV_MSGBOX_DATA_CAP_4_SW_VIOLATION_TIME_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_SW_VIOLATION_TIME_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_SW_POWER_VIOLATION_TIME 2:2
+#define NV_MSGBOX_DATA_CAP_4_SW_POWER_VIOLATION_TIME_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_SW_POWER_VIOLATION_TIME_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_SW_THERMAL_VIOLATION_TIME 3:3
+#define NV_MSGBOX_DATA_CAP_4_SW_THERMAL_VIOLATION_TIME_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_SW_THERMAL_VIOLATION_TIME_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_UTILIZATION_RATE 4:4
+#define NV_MSGBOX_DATA_CAP_4_UTILIZATION_RATE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_UTILIZATION_RATE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_GET_DRIVER_EVENT_MSG 5:5
+#define NV_MSGBOX_DATA_CAP_4_GET_DRIVER_EVENT_MSG_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_GET_DRIVER_EVENT_MSG_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_REQUEST_BUNDLING 6:6
+#define NV_MSGBOX_DATA_CAP_4_REQUEST_BUNDLING_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_REQUEST_BUNDLING_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_SET_DEVICE_DISABLE 7:7
+#define NV_MSGBOX_DATA_CAP_4_SET_DEVICE_DISABLE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_SET_DEVICE_DISABLE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_SET_ECC_MODE 8:8
+#define NV_MSGBOX_DATA_CAP_4_SET_ECC_MODE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_SET_ECC_MODE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_SET_MIG_MODE 10:10
+#define NV_MSGBOX_DATA_CAP_4_SET_MIG_MODE_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_SET_MIG_MODE_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_FAN_CURVE_POINTS_GET_SET 11:11
+#define NV_MSGBOX_DATA_CAP_4_FAN_CURVE_POINTS_GET_SET_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_FAN_CURVE_POINTS_GET_SET_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_POWER_HINT 22:22
+#define NV_MSGBOX_DATA_CAP_4_POWER_HINT_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_POWER_HINT_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_DRIVER_VERSION_V1 23:23
+#define NV_MSGBOX_DATA_CAP_4_DRIVER_VERSION_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_DRIVER_VERSION_V1_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_GPU_PERFORMANCE_MONITORING 24:24
+#define NV_MSGBOX_DATA_CAP_4_GPU_PERFORMANCE_MONITORING_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_GPU_PERFORMANCE_MONITORING_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_DEM_BY_SEQNUM_TIMESTAMP 26:26
+#define NV_MSGBOX_DATA_CAP_4_DEM_BY_SEQNUM_TIMESTAMP_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_DEM_BY_SEQNUM_TIMESTAMP_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_CONFIGURE_PROGRAMMABLE_EDPP 30:30
+#define NV_MSGBOX_DATA_CAP_4_CONFIGURE_PROGRAMMABLE_EDPP_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_CONFIGURE_PROGRAMMABLE_EDPP_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_CAP_4_MAX_DRAM_CAPACITY_V1 31:31
+#define NV_MSGBOX_DATA_CAP_4_MAX_DRAM_CAPACITY_V1_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_4_MAX_DRAM_CAPACITY_V1_AVAILABLE 0x00000001
+
+#define NV_MSGBOX_DATA_CAP_5 5
+#define NV_MSGBOX_DATA_CAP_5_MEMORY_CAPACITY_UTILIZATION 6:6
+#define NV_MSGBOX_DATA_CAP_5_MEMORY_CAPACITY_UTILIZATION_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_5_MEMORY_CAPACITY_UTILIZATION_AVAILABLE 0x00000001
+
+#define NV_MSGBOX_DATA_CAP_5_SRAM_ERROR_THRESHOLD_EXCEEDED 9:9
+#define NV_MSGBOX_DATA_CAP_5_SRAM_ERROR_THRESHOLD_EXCEEDED_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_CAP_5_SRAM_ERROR_THRESHOLD_EXCEEDED_AVAILABLE 0x00000001
+
+/* ECC counters */
+#define NV_MSGBOX_DATA_ECC_CNT_16BIT_DBE 31:16
+#define NV_MSGBOX_DATA_ECC_CNT_16BIT_SBE 16:0
+#define NV_MSGBOX_DATA_ECC_CNT_8BIT_DBE 23:16
+#define NV_MSGBOX_DATA_ECC_CNT_8BIT_SBE 7:0
+
+#define NV_MSGBOX_DATA_ECC_V5_COUNT_HEADER 7:0
+
+#define NV_MSGBOX_DATA_ECC_V5_COUNT_HDR_ID 1:0
+#define NV_MSGBOX_DATA_ECC_V5_COUNT_HDR_ID_INVAL 0
+#define NV_MSGBOX_DATA_ECC_V5_COUNT_HDR_ID_ADDR 1
+#define NV_MSGBOX_DATA_ECC_V5_COUNT_HDR_ID_REGN 2
+
+#define NV_MSGBOX_DATA_ECC_V5_COUNT_METADATA 31:16
+
+#define NV_MSGBOX_DATA_ECC_V5_ERR_BUF_ERR_TYPE 7:0
+
+#define NV_MSGBOX_DATA_ECC_V5_ERR_BUF_ERR_TYPE_ID 0:0
+#define NV_MSGBOX_DATA_ECC_V5_ERR_BUF_ERR_TYPE_ID_UNCORR 0
+#define NV_MSGBOX_DATA_ECC_V5_ERR_BUF_ERR_TYPE_ID_CORR 1
+
+#define NV_MSGBOX_DATA_ECC_V5_ERR_BUF_METADATA 31:16
+
+#define NV_MSGBOX_DATA_ECC_V5_METADATA_STRUCT_ID 21:16
+#define NV_MSGBOX_DATA_ECC_V5_METADATA_STRUCT_ID_LRF 0
+#define NV_MSGBOX_DATA_ECC_V5_METADATA_STRUCT_ID_L1DATA 1
+#define NV_MSGBOX_DATA_ECC_V5_METADATA_STRUCT_ID_L1TAG 2
+#define NV_MSGBOX_DATA_ECC_V5_METADATA_STRUCT_ID_CBU 3
+#define NV_MSGBOX_DATA_ECC_V5_METADATA_STRUCT_ID_LTC 4
+#define NV_MSGBOX_DATA_ECC_V5_METADATA_STRUCT_ID_DRAM 5
+
+#define NV_MSGBOX_DATA_ECC_V5_METADATA_LOCATION_ID 26:22
+#define NV_MSGBOX_DATA_ECC_V5_METADATA_SUBLOCATION_ID 31:27
+
+/* ECC state flags */
+#define NV_MSGBOX_DATA_ECC_V6_STATE_FLAGS 31:0
+
+#define NV_MSGBOX_DATA_ECC_V6_STATE_FLAGS_SRAM_ERROR_THRESHOLD_EXCEEDED 0:0
+#define NV_MSGBOX_DATA_ECC_V6_STATE_FLAGS_SRAM_ERROR_THRESHOLD_EXCEEDED_FALSE 0
+#define NV_MSGBOX_DATA_ECC_V6_STATE_FLAGS_SRAM_ERROR_THRESHOLD_EXCEEDED_TRUE 1
+
+/* NV_MSGBOX_CMD_OPCODE_SCRATCH_COPY src offset argument */
+#define NV_MSGBOX_DATA_COPY_SRC_OFFSET 7:0
+
+/* NV_MSGBOX_CMD_ARG2_REG_INDEX_SCRATCH_PAGE register layout */
+#define NV_MSGBOX_DATA_SCRATCH_PAGE_DST 7:0
+#define NV_MSGBOX_DATA_SCRATCH_PAGE_SRC 15:8
+
+/* Async request status codes returned in the data register */
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS 7:0
+
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_SUCCESS 0x00000000
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_CARD_NOT_PRESENT 0x00000001
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_DUAL_LINK_INUSE 0x00000002
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_GENERIC 0x00000003
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_GPU_NOT_FULL_POWER 0x00000004
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_IN_USE 0x00000005
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INSUFFICIENT_RESOURCES 0x00000006
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_ACCESS_TYPE 0x00000007
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_ARGUMENT 0x00000008
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_BASE 0x00000009
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_CHANNEL 0x0000000A
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_CLASS 0x0000000B
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_CLIENT 0x0000000C
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_COMMAND 0x0000000D
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_DATA 0x0000000E
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_DEVICE 0x0000000F
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_DMA_SPECIFIER 0x00000010
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_EVENT 0x00000011
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_FLAGS 0x00000012
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_FUNCTION 0x00000013
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_HEAP 0x00000014
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_INDEX 0x00000015
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_LIMIT 0x00000016
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_METHOD 0x00000017
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_OBJECT_BUFFER 0x00000018
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_OBJECT_ERROR 0x00000019
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_OBJECT_HANDLE 0x0000001A
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_OBJECT_NEW 0x0000001B
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_OBJECT_OLD 0x0000001C
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_OBJECT_PARENT 0x0000001D
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_OFFSET 0x0000001E
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_OWNER 0x0000001F
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_PARAM_STRUCT 0x00000020
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_PARAMETER 0x00000021
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_POINTER 0x00000022
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_REGISTRY_KEY 0x00000023
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_STATE 0x00000024
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_STRING_LENGTH 0x00000025
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_XLATE 0x00000026
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_IRQ_NOT_FIRING 0x00000027
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_MULTIPLE_MEMORY_TYPES 0x00000028
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_NOT_SUPPORTED 0x00000029
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_OPERATING_SYSTEM 0x0000002A
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_PROTECTION_FAULT 0x0000002B
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_TIMEOUT 0x0000002C
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_TOO_MANY_PRIMARIES 0x0000002D
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_IRQ_EDGE_TRIGGERED 0x0000002E
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_OPERATION 0x0000002F
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_NOT_COMPATIBLE 0x00000030
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_MORE_PROCESSING_REQUIRED 0x00000031
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INSUFFICIENT_PERMISSIONS 0x00000032
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_TIMEOUT_RETRY 0x00000033
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_NOT_READY 0x00000034
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_GPU_IS_LOST 0x00000035
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_IN_FULLCHIP_RESET 0x00000036
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_LOCK_STATE 0x00000037
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_ADDRESS 0x00000038
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INVALID_IRQ_LEVEL 0x00000039
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_MEMORY_TRAINING_FAILED 0x00000040
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_BUSY_RETRY 0x00000041
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_INSUFFICIENT_POWER 0x00000042
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_OBJECT_NOT_FOUND 0x00000043
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_BUFFER_TOO_SMALL 0x00000044
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_RESET_REQUIRED 0x00000045
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_PRIV_SEC_VIOLATION 0x00000046
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_DEFERRED 0x00000047
+#define NV_MSGBOX_DATA_ASYNC_REQ_STATUS_ERROR_FREQ_NOT_SUPPORTED 0x00000048
+
+/* Response to NV_MSGBOX_CMD_OPCODE_GET_POWER_CONNECTOR_STATE */
+#define NV_MSGBOX_DATA_POWER_CONNECTED 0:0
+#define NV_MSGBOX_DATA_POWER_CONNECTED_SUFFICIENT 0x00000000
+#define NV_MSGBOX_DATA_POWER_CONNECTED_INSUFFICIENT 0x00000001
+
+/* Response to NV_MSGBOX_CMD_OPCODE_GET_PAGE_RETIREMENT_STATS */
+#define NV_MSGBOX_DATA_RETIRED_PAGES_CNT_SBE 7:0
+#define NV_MSGBOX_DATA_RETIRED_PAGES_CNT_DBE 15:8
+
+/*
+ * Response to
+ * NV_MSGBOX_CMD_ARG1_GET_MISC_ECC_ENABLED_STATE
+ * NV_MSGBOX_CMD_ARG1_GET_MISC_GPU_FLAGS_PAGE_0
+ */
+#define NV_MSGBOX_DATA_ECC_ENABLED_STATE_SUPPORTED 0:0
+#define NV_MSGBOX_DATA_ECC_ENABLED_STATE_SUPPORTED_OFF 0x00000000
+#define NV_MSGBOX_DATA_ECC_ENABLED_STATE_SUPPORTED_ON 0x00000001
+#define NV_MSGBOX_DATA_ECC_ENABLED_STATE_CURRENT 1:1
+#define NV_MSGBOX_DATA_ECC_ENABLED_STATE_CURRENT_OFF 0x00000000
+#define NV_MSGBOX_DATA_ECC_ENABLED_STATE_CURRENT_ON 0x00000001
+#define NV_MSGBOX_DATA_ECC_ENABLED_STATE_PENDING 2:2
+#define NV_MSGBOX_DATA_ECC_ENABLED_STATE_PENDING_OFF 0x00000000
+#define NV_MSGBOX_DATA_ECC_ENABLED_STATE_PENDING_ON 0x00000001
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_MISC_GPU_FLAGS_PAGE_0 */
+#define NV_MSGBOX_DATA_MIG_ENABLED_STATE_SUPPORTED 3:3
+#define NV_MSGBOX_DATA_MIG_ENABLED_STATE_SUPPORTED_OFF 0x00000000
+#define NV_MSGBOX_DATA_MIG_ENABLED_STATE_SUPPORTED_ON 0x00000001
+#define NV_MSGBOX_DATA_MIG_ENABLED_STATE_CURRENT 4:4
+#define NV_MSGBOX_DATA_MIG_ENABLED_STATE_CURRENT_OFF 0x00000000
+#define NV_MSGBOX_DATA_MIG_ENABLED_STATE_CURRENT_ON 0x00000001
+#define NV_MSGBOX_DATA_MIG_ENABLED_STATE_PENDING 5:5
+#define NV_MSGBOX_DATA_MIG_ENABLED_STATE_PENDING_OFF 0x00000000
+#define NV_MSGBOX_DATA_MIG_ENABLED_STATE_PENDING_ON 0x00000001
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_MISC_DEVICE_FLAGS_PAGE_0 */
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DRIVER_STATUS 6:6
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DRIVER_STATUS_NOT_RUNNING 0x00000000
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DRIVER_STATUS_RUNNING 0x00000001
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DEVICE_STATUS 7:7
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DEVICE_STATUS_ENABLED 0x00000000
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DEVICE_STATUS_DISABLED 0x00000001
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_FABRIC_MANAGER_STATUS 10:8
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_FABRIC_MANAGER_STATUS_NOT_RUNNING 0x00000000
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_FABRIC_MANAGER_STATUS_RUNNING 0x00000001
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_FABRIC_MANAGER_STATUS_TIMEOUT 0x00000002
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_FABRIC_MANAGER_STATUS_ERROR 0x00000003
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_SOURCE 13:11
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_SOURCE_NONE 0x00000000
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_SOURCE_LOCAL_DEVICE 0x00000001
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_SOURCE_PEER_DEVICE 0x00000002
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_SOURCE_IN_BAND 0x00000003
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_SOURCE_OUT_OF_BAND 0x00000004
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_REASON 16:14
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_REASON_NONE 0x00000000
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_REASON_CLIENT_OVERRIDE 0x00000001
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_REASON_TRUNK_LINK_FAILED 0x00000002
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_REASON_ACCESS_LINK_FAILED 0x00000003
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DISABLE_REASON_UNSPECIFIED_FAILURE 0x00000004
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DRIVER_RELOAD 17:17
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DRIVER_RELOAD_NOT_PENDING 0x00000000
+#define NV_MSGBOX_DATA_DEVICE_DISABLE_STATE_DRIVER_RELOAD_PENDING 0x00000001
+
+/* Response to NV_MSGBOX_CMD_ARG1_ACCESS_WP_MODE_ACTION_GET */
+#define NV_MSGBOX_DATA_ACCESS_WP_MODE_GET_STATE 7:0
+#define NV_MSGBOX_DATA_ACCESS_WP_MODE_GET_STATE_DISABLED 0x0000005A
+#define NV_MSGBOX_DATA_ACCESS_WP_MODE_GET_STATE_ENABLED 0x000000A5
+
+/*
+ * Response to
+ * NV_MSGBOX_CMD_ARG1_GET_MISC_GPU_RESET_REQUIRED
+ * NV_MSGBOX_CMD_ARG1_GET_MISC_GPU_FLAGS_PAGE_1
+ */
+#define NV_MSGBOX_DATA_GPU_RESET_REQUIRED 0:0
+#define NV_MSGBOX_DATA_GPU_RESET_REQUIRED_OFF 0x00000000
+#define NV_MSGBOX_DATA_GPU_RESET_REQUIRED_ON 0x00000001
+#define NV_MSGBOX_DATA_GPU_DRAIN_AND_RESET_RECOMMENDED 1:1
+#define NV_MSGBOX_DATA_GPU_DRAIN_AND_RESET_RECOMMENDED_NO 0x00000000
+#define NV_MSGBOX_DATA_GPU_DRAIN_AND_RESET_RECOMMENDED_YES 0x00000001
+
+/**
+ * Response to
+ * NV_MSGBOX_CMD_ARG1_GET_CLOCK_FREQ_INFO_PAGE_3
+ */
+#define NV_MSGBOX_DATA_GET_CLOCK_FREQ_INFO_PAGE_3_CURRENT_PSTATE 3:0
+#define NV_MSGBOX_DATA_GET_CLOCK_FREQ_INFO_PAGE_3_CURRENT_PSTATE_INVALID 0x0000000F
+
+/**
+ * Response to
+ * NV_MSGBOX_CMD_ARG1_GET_CLOCK_THROTTLE_REASON
+ */
+#define NV_MSGBOX_DATA_CLOCK_THROTTLE_REASON 31:0
+#define NV_MSGBOX_DATA_CLOCK_THROTTLE_REASON_NONE 0x00000000
+#define NV_MSGBOX_DATA_CLOCK_THROTTLE_REASON_SW_POWER_CAP 0x00000001
+#define NV_MSGBOX_DATA_CLOCK_THROTTLE_REASON_HW_SLOWDOWN 0x00000002
+#define NV_MSGBOX_DATA_CLOCK_THROTTLE_REASON_HW_THERMAL_SLOWDOWN 0x00000004
+#define NV_MSGBOX_DATA_CLOCK_THROTTLE_REASON_HW_POWER_BREAK_SLOWDOWN 0x00000008
+#define NV_MSGBOX_DATA_CLOCK_THROTTLE_REASON_SYNC_BOOST 0x00000010
+#define NV_MSGBOX_DATA_CLOCK_THROTTLE_REASON_SW_THERMAL_SLOWDOWN 0x00000020
+
+/*
+ * Number of Nvlink data outputs (dataOut, extData) for
+ * NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_LINK queries
+ */
+#define NV_MSGBOX_DATA_NVLINK_INFO_DATA_WIDTH 2
+
+/*
+ * Encoding for Invalid data
+ */
+#define NV_MSGBOX_DATA_NVLINK_INFO_DATA_INVALID 0xFFFFFFFF
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_LINK_STATE_V1 */
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V1__SIZE 32
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V1_DOWN 0x00000000
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V1_UP 0x00000001
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V1_INVALID 0x000000ff
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_LINK_STATE_V2 */
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V2(i) (3+(i)*4):(0+(i)*4)
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V2__SIZE 8
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V2_OFF 0x00000000
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V2_SAFE 0x00000001
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V2_ACTIVE 0x00000002
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V2_ERROR 0x00000003
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V2_L1_LOW_POWER 0x00000004
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V2_NVLINK_DISABLED 0x00000005
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_STATE_V2_INVALID 0x000000ff
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_LINK_BANDWIDTH (in Mps) */
+#define NV_MSGBOX_DATA_NVLINK_INFO_LINK_BANDWIDTH__SIZE 1
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_INVALID 0xFFFFFFFF
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_00000_MBPS 0
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_16000_MBPS 16000
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_19200_MBPS 19200
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_20000_MBPS 20000
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_25000_MBPS 25000
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_25781_MBPS 25781
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_32000_MBPS 32000
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_40000_MBPS 40000
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_50000_MBPS 50000
+#define NV_MSGBOX_DATA_NVLINK_LINE_RATE_53125_MBPS 53125
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_SUBLINK_WIDTH */
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_WIDTH(i) (5+(i)*6):(0+(i)*6)
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_WIDTH__SIZE 5
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_WIDTH_INVALID 0x000000ff
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_TX_WIDTH 2:0
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_TX_WIDTH_0 0x00000000
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_TX_WIDTH_1 0x00000001
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_TX_WIDTH_2 0x00000002
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_TX_WIDTH_4 0x00000003
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_TX_WIDTH_8 0x00000004
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_TX_WIDTH_INVALID 0x00000007
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_RX_WIDTH 5:3
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_RX_WIDTH_0 0x00000000
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_RX_WIDTH_1 0x00000001
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_RX_WIDTH_2 0x00000002
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_RX_WIDTH_4 0x00000003
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_RX_WIDTH_8 0x00000004
+#define NV_MSGBOX_DATA_NVLINK_INFO_SUBLINK_RX_WIDTH_INVALID 0x00000007
+
+/*
+ * Response to NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_TRAINING_ERR_STATE
+ * NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_RUNTIME_ERR_STATE
+ */
+#define NV_MSGBOX_DATA_NVLINK_INFO_ERROR_STATE__SIZE 32
+#define NV_MSGBOX_DATA_NVLINK_INFO_ERROR_STATE_INVALID 0x000000ff
+#define NV_MSGBOX_DATA_NVLINK_INFO_ERROR_STATE_NO_ERROR 0x00000000
+#define NV_MSGBOX_DATA_NVLINK_INFO_ERROR_STATE_ERROR 0x00000001
+
+/* Respones to NV_MSGBOX_CMD_ARG2_REMAP_ROW_RAW_CNT_COMBINED */
+#define NV_MSGBOX_DATA_REMAP_ROW_UNCORR_CNT 10:0
+#define NV_MSGBOX_DATA_REMAP_ROW_UNCORR_CNT_EXCESS 11:11
+#define NV_MSGBOX_DATA_REMAP_ROW_UNCORR_CNT_EXCESS_FALSE 0
+#define NV_MSGBOX_DATA_REMAP_ROW_UNCORR_CNT_EXCESS_TRUE 1
+#define NV_MSGBOX_DATA_REMAP_ROW_CORR_CNT 22:12
+#define NV_MSGBOX_DATA_REMAP_ROW_CORR_CNT_EXCESS 23:23
+#define NV_MSGBOX_DATA_REMAP_ROW_CORR_CNT_EXCESS_FALSE 0
+#define NV_MSGBOX_DATA_REMAP_ROW_CORR_CNT_EXCESS_TRUE 1
+
+/* Response to NV_MSGBOX_CMD_ARG1_REMAP_ROWS_STATE_FLAGS */
+#define NV_MSGBOX_DATA_REMAP_ROW_STATE_FLAGS_PAGE0_FAILED_REMAPPING 0:0
+#define NV_MSGBOX_DATA_REMAP_ROW_STATE_FLAGS_PAGE0_FAILED_REMAPPING_FALSE 0
+#define NV_MSGBOX_DATA_REMAP_ROW_STATE_FLAGS_PAGE0_FAILED_REMAPPING_TRUE 1
+#define NV_MSGBOX_DATA_REMAP_ROW_STATE_FLAGS_PAGE0_PENDING_REMAPPING 1:1
+#define NV_MSGBOX_DATA_REMAP_ROW_STATE_FLAGS_PAGE0_PENDING_REMAPPING_FALSE 0
+#define NV_MSGBOX_DATA_REMAP_ROW_STATE_FLAGS_PAGE0_PENDING_REMAPPING_TRUE 1
+
+/* Response to NV_MSGBOX_CMD_ARG1_REMAP_ROWS_HISTOGRAM */
+#define NV_MSGBOX_DATA_REMAP_ROW_HISTOGRAM_LOW_AVAILABILITY 15:0
+#define NV_MSGBOX_DATA_REMAP_ROW_HISTOGRAM_PARTIAL_AVAILABILITY 31:16
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_0 */
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_SPEED 2:0
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_SPEED_UNKNOWN 0x00000000
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_SPEED_2500_MTPS 0x00000001
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_SPEED_5000_MTPS 0x00000002
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_SPEED_8000_MTPS 0x00000003
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_SPEED_16000_MTPS 0x00000004
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_SPEED_32000_MTPS 0x00000005
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_WIDTH 6:4
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_WIDTH_UNKNOWN 0x00000000
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_WIDTH_X1 0x00000001
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_WIDTH_X2 0x00000002
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_WIDTH_X4 0x00000003
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_WIDTH_X8 0x00000004
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_WIDTH_X16 0x00000005
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_LINK_WIDTH_X32 0x00000006
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_NONFATAL_ERROR_COUNT 15:8
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_FATAL_ERROR_COUNT 23:16
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_0_UNSUPP_REQ_COUNT 31:24
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_1 */
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_1_L0_TO_RECOVERY_COUNT 31:0
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_2 */
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_2_REPLAY_ROLLOVER_COUNT 15:0
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_2_NAKS_RCVD_COUNT 31:16
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_3 */
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_3_TARGET_LINK_SPEED 2:0
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_3_TARGET_LINK_SPEED_UNKNOWN 0x00000000
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_3_TARGET_LINK_SPEED_2500_MTPS 0x00000001
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_3_TARGET_LINK_SPEED_5000_MTPS 0x00000002
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_3_TARGET_LINK_SPEED_8000_MTPS 0x00000003
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_3_TARGET_LINK_SPEED_16000_MTPS 0x00000004
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_3_TARGET_LINK_SPEED_32000_MTPS 0x00000005
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_3_TARGET_LINK_SPEED_RESERVED 2:0
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_4 */
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_4_TX_COUNT 31:0
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_6 */
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE 4:0
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_DETECT 0x00000000
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_POLLING 0x00000001
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_CONFIGURATION 0x00000002
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_RECOVERY 0x00000003
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_RECOVERY_EQZN 0x00000004
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_L0 0x00000005
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_L0S 0x00000006
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_L1 0x00000007
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_L1_PLL_PD 0x00000008
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_L2 0x00000009
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_L1_CPM 0x0000000a
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_L1_1 0x0000000b
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_L1_2 0x0000000c
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_HOT_RESET 0x0000000d
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_LOOPBACK 0x0000000e
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_DISABLED 0x0000000f
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_LINK_DOWN 0x00000010
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_LINK_READY 0x00000011
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_LANES_IN_SLEEP 0x00000012
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_6_LTSSM_STATE_ILLEGAL 0x0000001f
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_8 */
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_8_EQ_TX_LOCAL_PRESET 3:0
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_8_EQ_TX_LOCAL_USE_PRESET 4:4
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_8_EQ_TX_LOCAL_FS 10:5
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_8_EQ_TX_LOCAL_LF 16:11
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_9 */
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_9_EQ_RX_REMOTE_PRESET 3:0
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_9_EQ_RX_REMOTE_USE_PRESET 4:4
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_9_EQ_RX_REMOTE_FS 10:5
+#define NV_MSGBOX_DATA_PCIE_LINK_INFO_PAGE_9_EQ_RX_REMOTE_LF 16:11
+
+/*
+ * Input for NV_MSGBOX_CMD_OPCODE_GPU_PERFORMANCE_MONITORING. Value is valid
+ * only if Arg2 != GPM_PARTITION_AGGREGATE and Arg2.Bit7 == 1
+ */
+#define NV_MSGBOX_DATA_GPM_COMPUTE_INSTANCE_INDEX 15:8
+
+/*
+ * The following three fields correspond to the data which is interpreted
+ * differently depending on GPM Metric specified in Arg1.
+ */
+#define NV_MSGBOX_DATA_GPM_NVLINK_INDEX 7:0
+#define NV_MSGBOX_DATA_GPM_NVDEC_INSTANCE 7:0
+#define NV_MSGBOX_DATA_GPM_NVJPG_INSTANCE 7:0
+
+/* MSGBOX Extended Data Register */
+#define NV_MSGBOX_EXT_DATA_REG 31:0
+
+/* Respones to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_0 */
+#define NV_MSGBOX_EXT_DATA_PCIE_LINK_INFO_PAGE_0_CORRECTABLE_ERROR_COUNT 15:0
+
+/* Respones to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_1 */
+#define NV_MSGBOX_EXT_DATA_PCIE_LINK_INFO_PAGE_1_REPLAY_COUNT 31:0
+
+/* Respones to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_2 */
+#define NV_MSGBOX_EXT_DATA_PCIE_LINK_INFO_PAGE_2_NAKS_SENT_COUNT 15:0
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_4 */
+#define NV_MSGBOX_EXT_DATA_PCIE_LINK_INFO_PAGE_4_RX_COUNT 31:0
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_8 */
+#define NV_MSGBOX_EXT_DATA_PCIE_LINK_INFO_PAGE_8_EQ_TX_LOCAL_PRECUR 5:0
+#define NV_MSGBOX_EXT_DATA_PCIE_LINK_INFO_PAGE_8_EQ_TX_LOCAL_MAINCUR 11:6
+#define NV_MSGBOX_EXT_DATA_PCIE_LINK_INFO_PAGE_8_EQ_TX_LOCAL_POSTCUR 17:12
+
+/* Response to NV_MSGBOX_CMD_ARG1_GET_PCIE_LINK_INFO_PAGE_9 */
+#define NV_MSGBOX_EXT_DATA_PCIE_LINK_INFO_PAGE_9_EQ_RX_REMOTE_PRECUR 5:0
+#define NV_MSGBOX_EXT_DATA_PCIE_LINK_INFO_PAGE_9_EQ_RX_REMOTE_MAINCUR 11:6
+#define NV_MSGBOX_EXT_DATA_PCIE_LINK_INFO_PAGE_9_EQ_RX_REMOTE_POSTCUR 17:12
+
+/* Response to NV_MSGBOX_CMD_ARG1_REMAP_ROWS_HISTOGRAM */
+#define NV_MSGBOX_EXT_DATA_REMAP_ROW_HISTOGRAM_MAX_AVAILABILITY 31:16
+#define NV_MSGBOX_EXT_DATA_REMAP_ROW_HISTOGRAM_HIGH_AVAILABILITY 15:0
+
+/* SysId info per type sizes */
+#define NV_MSGBOX_SYSID_DATA_SIZE_BOARD_PART_NUM_V1 24
+#define NV_MSGBOX_SYSID_DATA_SIZE_OEM_INFO_V1 24
+#define NV_MSGBOX_SYSID_DATA_SIZE_SERIAL_NUM_V1 16
+#define NV_MSGBOX_SYSID_DATA_SIZE_MARKETING_NAME_V1 24
+#define NV_MSGBOX_SYSID_DATA_SIZE_GPU_PART_NUM_V1 16
+#define NV_MSGBOX_SYSID_DATA_SIZE_MEMORY_VENDOR_V1 1
+#define NV_MSGBOX_SYSID_DATA_SIZE_MEMORY_PART_NUM_V1 20
+#define NV_MSGBOX_SYSID_DATA_SIZE_BUILD_DATE_V1 4
+#define NV_MSGBOX_SYSID_DATA_SIZE_FIRMWARE_VER_V1 14
+#define NV_MSGBOX_SYSID_DATA_SIZE_VENDOR_ID_V1 2
+#define NV_MSGBOX_SYSID_DATA_SIZE_DEV_ID_V1 2
+#define NV_MSGBOX_SYSID_DATA_SIZE_SUB_VENDOR_ID_V1 2
+#define NV_MSGBOX_SYSID_DATA_SIZE_SUB_ID_V1 2
+#define NV_MSGBOX_SYSID_DATA_SIZE_GPU_GUID_V1 16
+#define NV_MSGBOX_SYSID_DATA_SIZE_INFOROM_VER_V1 16
+#define NV_MSGBOX_SYSID_DATA_SIZE_PRODUCT_LENGTH_V1 4
+#define NV_MSGBOX_SYSID_DATA_SIZE_PRODUCT_WIDTH_V1 4
+#define NV_MSGBOX_SYSID_DATA_SIZE_PRODUCT_HEIGHT_V1 4
+#define NV_MSGBOX_SYSID_DATA_SIZE_PCIE_SPEED_V1 1
+#define NV_MSGBOX_SYSID_DATA_SIZE_PCIE_WIDTH_V1 1
+#define NV_MSGBOX_SYSID_DATA_SIZE_TGP_LIMIT_V1 4
+#define NV_MSGBOX_SYSID_DATA_SIZE_FRU_PART_NUMBER_V1 20
+#define NV_MSGBOX_SYSID_DATA_SIZE_MODULE_POWER_LIMIT_V1 4
+#define NV_MSGBOX_SYSID_DATA_SIZE_MAX_DRAM_CAPACITY_V1 4
+
+/*!
+ * Response to NV_MSGBOX_CMD_ARG1_GET_POWER_HINT_INFO_CLK
+ * 16-bit frequency in MHz
+ */
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_CLK_GR_MIN 15:0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_CLK_GR_MAX 31:16
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_CLK_MEM_MIN 15:0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_CLK_MEM_MAX 31:16
+
+/*!
+ * Response to NV_MSGBOX_CMD_ARG1_GET_POWER_HINT_INFO_TEMP
+ * 16-bit frequency in MHz
+ */
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_TEMP_MIN 15:0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_TEMP_MAX 31:16
+
+/*!
+ * Response to _ARG1_GET_POWER_HINT_INFO_PROFILES, 1 page consists of data and
+ * ext data, then we can support up to 256 profiles
+ * Bit index represents profile ID
+ */
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_DMMA_PERF 0:0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_DMMA_PERF_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_DMMA_PERF_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_DMMA_HIGH_K 1:1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_DMMA_HIGH_K_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_DMMA_HIGH_K_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_DMMA_LOW_K 2:2
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_DMMA_LOW_K_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_DMMA_LOW_K_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_HMMA 3:3
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_HMMA_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_HMMA_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_IMMA 4:4
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_IMMA_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_IMMA_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_SGEMM 5:5
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_SGEMM_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_SGEMM_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_TRANSFORMER 6:6
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_TRANSFORMER_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_TRANSFORMER_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_0 7:7
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_0_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_0_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_1 8:8
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_1_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_1_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_2 9:9
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_2_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_2_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_3 10:10
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_3_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_3_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_4 11:11
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_4_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_4_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_5 12:12
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_5_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_5_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_6 13:13
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_6_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_6_AVAILABLE 1
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_7 14:14
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_7_NOT_AVAILABLE 0
+#define NV_MSGBOX_DATA_POWER_HINT_INFO_PROFILES_PAGE_0_CUSTOMER_CUSTOM_7_AVAILABLE 1
+
+#define NV_MSGBOX_DATA_DYN_SYS_INFO_SIZE_DRIVER_VERSION 64
+
+/* Event types */
+typedef enum
+{
+ NV_MSGBOX_EVENT_TYPE_SERVER_RESTART_COLD = 0,
+ NV_MSGBOX_EVENT_TYPE_GPU_RESET_REQUIRED,
+ NV_MSGBOX_EVENT_TYPE_DRIVER_ERROR_MESSAGE_OLDEST,
+ NV_MSGBOX_EVENT_TYPE_TGP_LIMIT_SET_SUCCESS,
+ NV_MSGBOX_EVENT_TYPE_CLOCK_LIMIT_SET_SUCCESS,
+ NV_MSGBOX_EVENT_TYPE_ECC_TOGGLE_SUCCESS,
+ NV_MSGBOX_EVENT_TYPE_MIG_TOGGLE_SUCCESS,
+ NV_MSGBOX_EVENT_TYPE_SERVER_RESTART_WARM,
+ NV_MSGBOX_EVENT_TYPE_DRIVER_ERROR_MESSAGE_NEW,
+ NV_MSGBOX_EVENT_TYPE_MODULE_LIMIT_SET_SUCCESS,
+ NV_MSGBOX_NUM_EVENTS, /* insert new event types before this line */
+} NvMsgboxEventType;
+
+/* Legacy event names for compatipility */
+#define NV_MSGBOX_EVENT_TYPE_SERVER_RESTART NV_MSGBOX_EVENT_TYPE_SERVER_RESTART_COLD
+#define NV_MSGBOX_EVENT_TYPE_DRIVER_ERROR_MESSAGE NV_MSGBOX_EVENT_TYPE_DRIVER_ERROR_MESSAGE_OLDEST
+
+/* Bit mask of all defined events */
+#define NV_MSGBOX_EVENT_TYPE__ALL (NVBIT(NV_MSGBOX_NUM_EVENTS) - 1)
+
+/* ----------------------- Set Master Capabilities ---------------------------- */
+
+//
+// SET_MASTER_CAPS
+//
+// Descripiton:
+// Set/declare SMBPBI Master capabilities.
+//
+// Common Encoding:
+// 7 0 7 0
+// .-+-+-+-+-+-+-+-. .-+-+-+-+-+-+-+-.
+// | CLASS | ARG1 | CAP_INDEX | ARG2
+// `-+-+-+-+-+-+-+-' `-+-+-+-+-+-+-+-'
+//
+// The SMBPBI Master capabilities are logically grouped into classes (specified
+// in arg1). Capabilities are sent 32 at a time (dword index stored in arg2)
+// per-class (typically once during system-initialization).
+//
+// Classes:
+// _GPU_REQ - Class of capability bits corresponding 1:1 with the GPU-
+// Request opcodes the master supports.
+//
+#define NV_MSGBOX_CMD_SET_MASTER_CAPS_ARG1_CLASS 7:0
+#define NV_MSGBOX_CMD_SET_MASTER_CAPS_ARG1_CLASS_GPU_REQ 0x00000000
+
+#define NV_MSGBOX_DATA_MASTER_CAPS_GPU_REQ_COUNT 1
+
+#define NV_MSGBOX_DATA_MASTER_CAPS_GPU_REQ_0 31:0
+#define NV_MSGBOX_DATA_MASTER_CAPS_GPU_REQ_0_CPU_PCONTROL 0:0
+#define NV_MSGBOX_DATA_MASTER_CAPS_GPU_REQ_0_CPU_PCONTROL_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_MASTER_CAPS_GPU_REQ_0_CPU_PCONTROL_AVAILABLE 0x00000001
+#define NV_MSGBOX_DATA_MASTER_CAPS_GPU_REQ_0_SYS_PCONTROL 1:1
+#define NV_MSGBOX_DATA_MASTER_CAPS_GPU_REQ_0_SYS_PCONTROL_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_DATA_MASTER_CAPS_GPU_REQ_0_SYS_PCONTROL_AVAILABLE 0x00000001
+
+/* ------------------ GPU Performance Control (PCONTROL) ---------------------- */
+
+//
+// GPU_PCONTROL arg1, arg2, and data encoding (fields are relative to zero, not
+// relative to their position in the COMMAND/DATA registers).
+//
+
+//
+// ARG1/ARG2 Encoding
+//
+// 7 3 2 0 7 0
+// .-+-+-+-+-+-+-+-. .-+-+-+-+-+-+-+-.
+// | TARGET | ACT | ARG1 |0 0 0 0 0 0 0 0| ARG2 (reserved)
+// `-+-+-+-+-+-+-+-' `-+-+-+-+-+-+-+-'
+//
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_ACTION 2:0
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_ACTION_GET_INFO 0x00000000
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_ACTION_GET_LIMIT 0x00000001
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_ACTION_SET_LIMIT 0x00000002
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_ACTION_GET_STATUS 0x00000003
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_TARGET 7:3
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_TARGET_VPSTATE 0x00000000
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_TARGET_POWER_SMBIDX 0x00000001
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG2_RSVD 7:0
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_SET_ACTION(arg1, action) \
+ (arg1) = FLD_SET_DRF(_MSGBOX_CMD, _GPU_PCONTROL_ARG1, _ACTION, \
+ action, (arg1))
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_GET_ACTION(arg1) \
+ DRF_VAL(_MSGBOX_CMD, _GPU_PCONTROL_ARG1, _ACTION, (arg1))
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_SET_TARGET(arg1, target) \
+ (arg1) = FLD_SET_DRF(_MSGBOX_CMD, _GPU_PCONTROL_ARG1, _TARGET, \
+ target, (arg1))
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_ARG1_GET_TARGET(arg1) \
+ DRF_VAL(_MSGBOX_CMD, _GPU_PCONTROL_ARG1, _TARGET, (arg1))
+
+//
+// Getting GPU vPstate Information
+//
+// Inputs:
+// ARG1 - {TARGET=VPSTATE, ACTION=GET_INFO}
+// ARG2 - Unused/reserved (must be zero)
+//
+// Outputs:
+// DATA - Current min/max range of externally available vpstates
+// (vPmin=fastest, vPmax=slowest)
+//
+// Encoding:
+// 31 16 15 8 7 0
+// .-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.
+// |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| MIN | MAX | DATA
+// `-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
+//
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_INFO_MAX 7:0
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_INFO_MIN 15:8
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_INFO_RSVD 31:16
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_INFO_SET_MAX(data, max) \
+ (data) = FLD_SET_DRF_NUM(_MSGBOX_CMD, _GPU_PCONTROL_DATA, \
+ _VPSTATE_GET_INFO_MAX, (max), (data))
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_INFO_GET_MAX(data) \
+ DRF_VAL(_MSGBOX_CMD, _GPU_PCONTROL_DATA, _VPSTATE_GET_INFO_MAX, (data))
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_INFO_SET_MIN(data, min) \
+ (data) = FLD_SET_DRF_NUM(_MSGBOX_CMD, _GPU_PCONTROL_DATA, \
+ _VPSTATE_GET_INFO_MIN, (min), (data))
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_INFO_GET_MIN(data) \
+ DRF_VAL(_MSGBOX_CMD, _GPU_PCONTROL_DATA, _VPSTATE_GET_INFO_MIN, (data))
+
+//
+// Getting GPU vPstate Limits
+//
+// Inputs:
+// ARG1 - {TARGET=VPSTATE, ACTION=GET_LIMIT}
+// ARG2 - Unused/reserved (must be zero)
+//
+// Outputs:
+// DATA - Last requested vpstate limit/value, zero when no limit has been set.
+//
+// Encoding:
+// 31 8 7 0
+// .-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.
+// |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| VALUE | DATA
+// `-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
+//
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_LIMIT_VALUE 7:0
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_LIMIT_RSVD 31:8
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_LIMIT_SET_VALUE(data, value) \
+ (data) = FLD_SET_DRF_NUM(_MSGBOX_CMD, _GPU_PCONTROL_DATA, \
+ _VPSTATE_GET_LIMIT_VALUE, (value), (data))
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_LIMIT_GET_VALUE(data) \
+ DRF_VAL(_MSGBOX_CMD, _GPU_PCONTROL_DATA, _VPSTATE_GET_LIMIT_VALUE, (data))
+
+//
+// Setting GPU vPstate Limits:
+//
+// Inputs:
+// ARG1 - {TARGET=VPSTATE, ACTION=SET_LIMIT}
+// ARG2 - Unused/reserved (must be zero)
+// DATA - Desired vpstate limit/value between vPmin and vPmax (inclusive),
+// zero to clear active limits.
+// Outputs:
+// none
+//
+// Encoding:
+// 31 8 7 0
+// .-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.
+// |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| VALUE | DATA
+// `-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
+//
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_SET_LIMIT_VALUE 7:0
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_SET_LIMIT_VALUE_CLEAR 0x00000000
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_SET_LIMIT_VALUE_INIT 0x00000000
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_SET_LIMIT_RSVD 31:8
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_SET_LIMIT_SET_VALUE(data, limit) \
+ (data) = FLD_SET_DRF_NUM(_MSGBOX_CMD, _GPU_PCONTROL_DATA, \
+ _VPSTATE_SET_LIMIT_VALUE, (limit), (data))
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_SET_LIMIT_GET_VALUE(data) \
+ DRF_VAL(_MSGBOX_CMD, _GPU_PCONTROL_DATA, _VPSTATE_SET_LIMIT_VALUE, (data))
+
+//
+// Getting GPU vPstate Status
+//
+// Inputs:
+// ARG1 - {TARGET=VPSTATE, ACTION=GET_STATUS}
+// ARG2 - Unused/reserved (must be zero)
+//
+// Outputs:
+// DATA - Current vPstate
+//
+// Encoding:
+// 31 8 7 0
+// .-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.
+// |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| CURRENT | DATA
+// `-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
+//
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_STATUS_CURRENT 7:0
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_STATUS_RSVD 31:8
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_STATUS_SET_CURRENT(data, curr) \
+ (data) = FLD_SET_DRF_NUM(_MSGBOX_CMD, _GPU_PCONTROL_DATA, \
+ _VPSTATE_GET_STATUS_CURRENT, (curr), (data))
+
+#define NV_MSGBOX_CMD_GPU_PCONTROL_DATA_VPSTATE_GET_STATUS_GET_CURRENT(data) \
+ DRF_VAL(_MSGBOX_CMD, _GPU_PCONTROL_DATA, _VPSTATE_GET_STATUS_CURRENT, (data))
+
+
+/* ------------------------- GPU System Control ------------------------------- */
+
+//
+// GPU_SYSCONTROL
+//
+// Description:
+// Command sent to the GPU to set/remove a system-imposed operating limit
+// on a specific system-parameter.
+//
+// Common Encoding:
+// 7 2 1 0 7 0
+// .-+-+-+-+-+-+-+-. .-+-+-+-+-+-+-+-.
+// | TARGET |ACT| ARG1 |0 0 0 0 0 0 0 0| ARG2 (reserved)
+// `-+-+-+-+-+-+-+-' `-+-+-+-+-+-+-+-'
+//
+// Notes:
+// - TARGET accepts NV0000_CTRL_SYSTEM_PARAM_* definitions
+// - arg1, arg2, and data encoding (fields are relative to zero, not relative
+// to their position in the DATA_OUT register).
+//
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_ARG1_ACTION 1:0
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_ARG1_ACTION_CLEAR_LIMIT 0x00000000
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_ARG1_ACTION_SET_LIMIT 0x00000001
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_ARG1_TARGET 7:2
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_ARG2_RSVD 7:0
+
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_ARG1_SET_ACTION(arg1, action) \
+ (arg1) = FLD_SET_DRF(_MSGBOX_CMD, _GPU_SYSCONTROL_ARG1, _ACTION, \
+ action, (arg1))
+
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_ARG1_GET_ACTION(arg1) \
+ DRF_VAL(_MSGBOX_CMD, _GPU_SYSCONTROL_ARG1, _ACTION, (arg1))
+
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_ARG1_SET_TARGET(arg1, target) \
+ (arg1) = FLD_SET_DRF_NUM(_MSGBOX_CMD, _GPU_SYSCONTROL_ARG1, _TARGET, \
+ target, (arg1))
+
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_ARG1_GET_TARGET(arg1) \
+ DRF_VAL(_MSGBOX_CMD, _GPU_SYSCONTROL_ARG1, _TARGET, (arg1))
+
+//
+// Setting a System-Parameter Operating-Limit:
+//
+// Inputs:
+// ARG1 - {TARGET=NV_MSGBOX_SYS_PARAM_*, ACTION=SET_LIMIT}
+// ARG2 - Unused/reserved (must be zero)
+// DATA - Desired limit/value.
+//
+// Outputs:
+// none
+//
+// Encoding:
+// 31 0
+// .-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.
+// | VALUE | DATA
+// `-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
+//
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_DATA_SET_LIMIT_VALUE 31:0
+
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_DATA_SET_LIMIT_SET_VALUE(data, limit) \
+ (data) = FLD_SET_DRF_NUM(_MSGBOX_CMD, _GPU_SYSCONTROL_DATA, \
+ _SET_LIMIT_VALUE, (limit), (data))
+
+#define NV_MSGBOX_CMD_GPU_SYSCONTROL_DATA_PARAM_SET_LIMIT_GET_VALUE(data) \
+ DRF_VAL(_MSGBOX_CMD, _GPU_SYSCONTROL_DATA, _SET_LIMIT_VALUE, (data))
+
+//
+// Host side scratch memory buffer
+// This memory buffer is allocated by the host CPU in its system memory
+// and is used for passing additional arguments and results, that don't
+// fit in the command/status and data registers due to their size.
+// This memory can be accessed by the BMC SMBus master through
+// dedicated requests.
+//
+// Page size is various on different SMBPBI servers.
+// Capability dword[2] bit 12 shows size in bytes
+//
+// _1024 --> 0xFF dwords
+// _256 --> 0x40 dowrds
+//
+#define NV_MSGBOX_SCRATCH_PAGE_SIZE_1024_D 0xFF
+#define NV_MSGBOX_SCRATCH_PAGE_SIZE_256_D 0x40
+
+//
+// TODO Once switch soc/pmu/oobtest remove the reference to this, this will be
+// removed.
+//
+#define NV_MSGBOX_SCRATCH_PAGE_SIZE 1024
+#define NV_MSGBOX_SCRATCH_NUM_PAGES_P 2 // expressed as a power of 2
+ // must be >= 2
+
+// This cap code plugs into NV_MSGBOX_DATA_CAP_2_NUM_SCRATCH_BANKS
+#define NV_MSGBOX_SCRATCH_NUM_PAGES_CAP_CODE \
+ (NV_MSGBOX_SCRATCH_NUM_PAGES_P > 0 ? \
+ NV_MSGBOX_SCRATCH_NUM_PAGES_P - 1 : 0)
+
+#define NV_MSGBOX_SCRATCH_NUM_PAGES (1 << NV_MSGBOX_SCRATCH_NUM_PAGES_P)
+#define NV_MSGBOX_SCRATCH_BUFFER_SIZE (NV_MSGBOX_SCRATCH_NUM_PAGES \
+ * NV_MSGBOX_SCRATCH_PAGE_SIZE)
+
+// Auxiliary definitions related to NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_STATE_SPEED
+#define NV_MSGBOX_NVLINK_STATE_BITS_PER_NVLINK 4
+#define NV_MSGBOX_NVLINK_STATE_NVLINKS_PER_REGISTER (32 / NV_MSGBOX_NVLINK_STATE_BITS_PER_NVLINK)
+#define NV_MSGBOX_NVLINK_STATE_NUM_NVLINKS_VOLTA 6
+#define NV_MSGBOX_NVLINK_STATE_NUM_NVLINKS_TURING 2
+#define NV_MSGBOX_NVLINK_STATE_NUM_NVLIPT_GA100 3
+#define NV_MSGBOX_NVLINK_STATE_NUM_LINKS_PER_NVLIPT_NVL30 4
+#define NV_MSGBOX_NVLINK_SUBLINK_WIDTH_MAX_NVL30 4
+#define NV_MSGBOX_NVLINK_STATE_NUM_NVLINKS_GA100 \
+ (NV_MSGBOX_NVLINK_STATE_NUM_NVLIPT_GA100 * \
+ NV_MSGBOX_NVLINK_STATE_NUM_LINKS_PER_NVLIPT_NVL30)
+#define NV_MSGBOX_NVLINK_STATE_NUM_NVLIPT_GA10X 1
+#define NV_MSGBOX_NVLINK_STATE_NUM_NVLINKS_GA10X \
+ (NV_MSGBOX_NVLINK_STATE_NUM_NVLIPT_GA10X * \
+ NV_MSGBOX_NVLINK_STATE_NUM_LINKS_PER_NVLIPT_NVL30)
+#define NV_MSGBOX_NVLINK_STATE_NUM_NVLIPT_LR10 9
+#define NV_MSGBOX_NVLINK_STATE_NUM_NVLINKS_LR10 \
+ (NV_MSGBOX_NVLINK_STATE_NUM_NVLIPT_LR10 * \
+ NV_MSGBOX_NVLINK_STATE_NUM_LINKS_PER_NVLIPT_NVL30)
+#define NV_MSGBOX_NVLINK_STATE_NUM_REGISTERS(arch) \
+ ((NV_MSGBOX_NVLINK_STATE_NUM_NVLINKS##arch + NV_MSGBOX_NVLINK_STATE_NVLINKS_PER_REGISTER - 1) \
+ / NV_MSGBOX_NVLINK_STATE_NVLINKS_PER_REGISTER)
+
+// Auxiliary definitions related to NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_THROUGHPUT_*
+#define NV_MSGBOX_NVLINK_THROUGHPUT_COUNTER_INDEX_DATA_TX 0x00000000
+#define NV_MSGBOX_NVLINK_THROUGHPUT_COUNTER_INDEX_DATA_RX 0x00000001
+#define NV_MSGBOX_NVLINK_THROUGHPUT_COUNTER_INDEX_RAW_TX 0x00000002
+#define NV_MSGBOX_NVLINK_THROUGHPUT_COUNTER_INDEX_RAW_RX 0x00000003
+#define NV_MSGBOX_NVLINK_THROUGHPUT_COUNTER_INDEX_MAX 0x00000004
+
+#if !defined(NV_MSGBOX_NO_PARAM_STRUCTS)
+//
+// Parameter structures for asynchronous requests
+// passed in scratch space
+//
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_TGP_LIMIT_CONTROL_GET,
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_TGP_LIMIT_CONTROL_SET,
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_MODULE_LIMIT_CONTROL_GET and
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_MODULE_LIMIT_CONTROL_SET
+ */
+typedef struct
+{
+ NvU32 flags;
+ /*!
+ * If flags:_PERSIST is _ON, make limitCurrInput persistent,
+ * surviving the driver reload and the system reboot.
+ *
+ * If flags:_CLEAR is _ON, it will clear the TGP limit. The
+ * persistence still depends on persist flag.
+ */
+#define NV_MSGBOX_PMGR_PWR_POWER_LIMIT_CONTROL_PARAMS_FLAGS_PERSIST 0:0
+#define NV_MSGBOX_PMGR_PWR_POWER_LIMIT_CONTROL_PARAMS_FLAGS_PERSIST_OFF 0x00000000
+#define NV_MSGBOX_PMGR_PWR_POWER_LIMIT_CONTROL_PARAMS_FLAGS_PERSIST_ON 0x00000001
+#define NV_MSGBOX_PMGR_PWR_POWER_LIMIT_CONTROL_PARAMS_FLAGS_CLEAR 1:1
+#define NV_MSGBOX_PMGR_PWR_POWER_LIMIT_CONTROL_PARAMS_FLAGS_CLEAR_OFF 0x00000000
+#define NV_MSGBOX_PMGR_PWR_POWER_LIMIT_CONTROL_PARAMS_FLAGS_CLEAR_ON 0x00000001
+
+ /*!
+ * Current total GPU power limit value to enforce, requested by the
+ * SMBPBI client, expressed in milliwatts.
+ * Must always be within range imposed by the current policy.
+ * 0xffffffff is returned, if the limit has not been set by the SMBPBI client.
+ */
+ NvU32 limitCurrInput;
+
+ /*!
+ * Currently arbitrated total GPU power limit value after taking
+ * into account limits, requested by all clients, expressed
+ * in milliwatts.
+ */
+ NvU32 limitCurrOutput;
+} NV_MSGBOX_PMGR_PWR_POWER_LIMIT_CONTROL_PARAMS;
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_TGP_LIMIT_INFO_GET and
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_MODULE_LIMIT_INFO_GET
+ */
+typedef struct
+{
+ /*!
+ * Current total GPU power limit lower and upper bounds and the
+ * default setting, expressed in milliwatts.
+ * These constraints must be observed, when the limit
+ * is being set with either
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_TGP_LIMIT_CONTROL_SET or
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_PMGR_PWR_MODULE_LIMIT_CONTROL_SET.
+ */
+ NvU32 limitMin;
+ NvU32 limitMax;
+ NvU32 limitDefault;
+} NV_MSGBOX_PMGR_PWR_POWER_LIMIT_INFO_PARAMS;
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_THERMAL_FAN_V1_COUNT_GET
+ */
+typedef struct
+{
+ NvU32 fanCount; //<! number of fans on the board
+} NV_MSGBOX_THERMAL_FAN_V1_COUNT_PARAMS;
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_THERMAL_FAN_V1_INFO_GET
+ */
+typedef struct
+{
+ NvU32 fanIndex; //<! fan ID to be filled by the caller
+ NvU32 fanProperties; //<! fan properties, detailed below
+
+//! Fan level metric
+#define NV_MSGBOX_FAN_V1_PROP_LEVEL_METRIC 0:0
+#define NV_MSGBOX_FAN_V1_PROP_LEVEL_METRIC_PWM 0x00000000
+#define NV_MSGBOX_FAN_V1_PROP_LEVEL_METRIC_RPM 0x00000001
+
+//! Fan tachometer availability
+#define NV_MSGBOX_FAN_V1_PROP_TACH 1:1
+#define NV_MSGBOX_FAN_V1_PROP_TACH_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_FAN_V1_PROP_TACH_AVAILABLE 0x00000001
+
+//! Fan tachometer bounds (min/max) availability
+#define NV_MSGBOX_FAN_V1_PROP_TACH_BOUNDS 2:2
+#define NV_MSGBOX_FAN_V1_PROP_TACH_BOUNDS_NOT_AVAILABLE 0x00000000
+#define NV_MSGBOX_FAN_V1_PROP_TACH_BOUNDS_AVAILABLE 0x00000001
+
+ NvU16 fanLevelMin; //<! minimum fan level
+ NvU16 fanLevelMax; //<! maximum fan level
+ NvU16 fanTachMin; //<! tachometer minimum
+ NvU16 fanTachMax; //<! tachometer maximum
+} NV_MSGBOX_THERMAL_FAN_V1_INFO_PARAMS;
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_THERMAL_FAN_V1_STATUS_GET
+ */
+typedef struct
+{
+ NvU32 fanIndex; //<! fan ID to be filled by the caller
+ /*!
+ * Current fan level and speed
+ */
+ NvU8 levelCurr; //<! current fan level, 0 if n/a
+ NvU16 speedCurr; //<! current fan speed (RPM), 0 if no tach
+
+} NV_MSGBOX_THERMAL_FAN_V1_STATUS_PARAMS;
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_OVERCLOCKING_LIMIT_CONTROL
+ */
+typedef struct
+{
+ NvU32 limitType; //<! Argument representing VPSTATE/CLOCK
+
+//! CLOCK/VPSTATE types - add types below
+#define NV_MSGBOX_OVERCLOCKING_LIMIT_TYPE_MAX_CUSTOMER_BOOST_VPSTATE 0x00000001
+
+ NvU32 maxClkLimitMHz; //<! Clock limit
+
+} NV_MSGBOX_OVERCLOCKING_LIMIT_CONTROL_PARAMS;
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_ENERGY_COUNTER_STATUS_GET
+ */
+typedef struct
+{
+ NV_DECLARE_ALIGNED(NvU64 energyCountermJ, 8); //<! Energy counter value
+
+} NV_MSGBOX_ENERGY_COUNTER_STATUS_PARAMS;
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_VIOLATION_COUNTERS_STATUS_GET
+ */
+typedef struct
+{
+ NvU32 policyMask;
+ /*!
+ * Argument representing policies whose violation times
+ * are being requested/provided
+ */
+
+//! NVBIT OFFSET <> POLICY - add types below
+#define NV_MSGBOX_VIOLATION_COUNTERS_TYPE_ALL_SUPPORTED_POLICIES 0xFFFFFFFF //-1 represents All Supported policies
+#define NV_MSGBOX_VIOLATION_COUNTERS_TYPE_HW_VIOLATION 0
+#define NV_MSGBOX_VIOLATION_COUNTERS_TYPE_SW_GLOBAL_VIOLATION 1
+#define NV_MSGBOX_VIOLATION_COUNTERS_TYPE_SW_POWER_VIOLATION 2
+#define NV_MSGBOX_VIOLATION_COUNTERS_TYPE_SW_THERMAL_VIOLATION 3
+
+ NV_DECLARE_ALIGNED(NvU64 violationTime[32], 8); //<! Violation counter value
+
+} NV_MSGBOX_VIOLATION_COUNTERS_STATUS_PARAMS;
+
+//! Number of clock domains to track for gathering utilization data.
+#define NV_MSGBOX_UTILIZATION_RATE_CLOCK_DOMAIN_COUNT 2
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_UTILIZATION_RATE_GET
+ */
+typedef struct
+{
+ NvU32 gpuUtil; //<! Percent of sample that the Graphics/SM unit remains busy.
+ NvU32 memUtil; //<! Percent of sample that the memory unit remains busy.
+
+} NV_MSGBOX_UTILIZATION_RATE_PARAMS;
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_OOB_CLOCK_LIMIT_SET
+ *
+ * Masks of NV_MSGBOX_OOB_CLOCK_LIMIT_CTRL_PARAMS_FLAGS_<XYZ>.
+ */
+typedef struct
+{
+ NvU32 flags;
+ /*!
+ * If flags: _CLEAR is _ON, it will clear the limits. Otherwise,
+ * set the clock limits.
+ *
+ * If flags: _PERSIST is _ON, set/clear limits persistently,
+ * surviving the driver reload and the system reboot.
+ *
+ */
+#define NV_MSGBOX_OOB_CLOCK_LIMIT_CTRL_PARAMS_FLAGS_PERSIST 0:0
+#define NV_MSGBOX_OOB_CLOCK_LIMIT_CTRL_PARAMS_FLAGS_PERSIST_OFF 0x00000000
+#define NV_MSGBOX_OOB_CLOCK_LIMIT_CTRL_PARAMS_FLAGS_PERSIST_ON 0x00000001
+#define NV_MSGBOX_OOB_CLOCK_LIMIT_CTRL_PARAMS_FLAGS_CLEAR 1:1
+#define NV_MSGBOX_OOB_CLOCK_LIMIT_CTRL_PARAMS_FLAGS_CLEAR_OFF 0x00000000
+#define NV_MSGBOX_OOB_CLOCK_LIMIT_CTRL_PARAMS_FLAGS_CLEAR_ON 0x00000001
+
+ /*!
+ * Graphics clock limit in MHz
+ */
+ NvU32 clkMinFreqMHz;
+ NvU32 clkMaxFreqMHz;
+} NV_MSGBOX_OOB_CLOCK_LIMIT_CTRL_PARAMS;
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_MEMORY_CAPACITY_UTILIZATION_GET
+ */
+typedef struct
+{
+ NvU32 capacityReservedMiB; //<! Device memory (in MiB) reserved for system use.
+ NvU32 capacityUsedMiB; //<! Allocated device memory (in MiB).
+} NV_MSGBOX_MEMORY_CAPACITY_UTILIZATION_PARAMS;
+
+/*
+ * Parameters for NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_TEST_MESSAGE_SEND
+ */
+#define NV_MSGBOX_TEST_MESSAGE_SEND_STRING_SIZE_MAX 32
+/*
+ * If the message starts with this character, the message
+ * will not be sent to the kernel.
+ */
+#define NV_MSGBOX_TEST_MESSAGE_SEND_SILENT_CHAR '@'
+typedef struct
+{
+ NvU8 string[NV_MSGBOX_TEST_MESSAGE_SEND_STRING_SIZE_MAX];
+} NV_MSGBOX_TEST_MESSAGE_SEND_PARAMS;
+
+/*
+ * Individual request structure definition for bundled requests
+ */
+typedef struct
+{
+ NvU32 cmdStatus; //<! Command/Status
+ NvU32 dataIn; //<! Data In
+ NvU32 dataOut; //<! Data Out
+ NvU32 extData; //<! Extended Data
+} NV_MSGBOX_IND_REQUEST;
+
+/*!
+ * Driver Event Message record
+ */
+typedef struct
+{
+ NvU8 recordSize; //<! in 32-bit words
+ NvU8 xidId; //<! event type Id (Xid)
+ NvU8 flags; //<! bit 0: some DEMs after this one
+ //<! have been lost
+ //<! bit 1: the text message has been
+ //<! truncated
+ NvU8 xidIdExt; //<! event type Id (Xid) extension
+ NvU32 seqNumber; //<! record sequential number
+ NvU32 timeStamp; //<! seconds since the epoch UTC
+
+ /*
+ * Some Windows builds include this file, and older Microsoft
+ * compilers won't accept a zero size array in this context:
+ * "C4200 nonstandard extension used: zero-sized array in struct/union",
+ * despite this being a legitimate C99.
+ * We need to find a way to fix this, if we ever decide to
+ * implement DEM/Xid logging for Windows.
+ */
+ NvU8 textMessage[]; //<! NUL terminated
+
+} NV_MSGBOX_DEM_RECORD;
+#define NV_MSGBOX_DEM_RECORD_FLAGS_OVFL 0:0
+#define NV_MSGBOX_DEM_RECORD_FLAGS_OVFL_NOT_SET 0x00000000
+#define NV_MSGBOX_DEM_RECORD_FLAGS_OVFL_SET 0x00000001
+#define NV_MSGBOX_DEM_RECORD_FLAGS_TRUNC 1:1
+#define NV_MSGBOX_DEM_RECORD_FLAGS_TRUNC_NOT_SET 0x00000000
+#define NV_MSGBOX_DEM_RECORD_FLAGS_TRUNC_SET 0x00000001
+
+/*!
+ * Result Disposition Rule word layout
+ */
+#define NV_MSGBOX_DISP_RULE_REQ_IDX 2:0
+#define NV_MSGBOX_DISP_RULE_SRC_REG 4:3
+#define NV_MSGBOX_DISP_RULE_SRC_REG_STATUS 0x00000000
+#define NV_MSGBOX_DISP_RULE_SRC_REG_DATA 0x00000001
+#define NV_MSGBOX_DISP_RULE_SRC_REG_EXT_DATA 0x00000002
+#define NV_MSGBOX_DISP_RULE_SRC_REG_MAX 0x00000002
+#define NV_MSGBOX_DISP_RULE_SRC_RIGHT_BIT 9:5
+#define NV_MSGBOX_DISP_RULE_SRC_WIDTH 14:10
+#define NV_MSGBOX_DISP_RULE_DST_REG 16:15
+#define NV_MSGBOX_DISP_RULE_DST_REG_STATUS 0x00000000
+#define NV_MSGBOX_DISP_RULE_DST_REG_DATA 0x00000001
+#define NV_MSGBOX_DISP_RULE_DST_REG_EXT_DATA 0x00000002
+#define NV_MSGBOX_DISP_RULE_DST_REG_MAX 0x00000002
+#define NV_MSGBOX_DISP_RULE_DST_RIGHT_BIT 21:17
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_CLOCK_LIMIT_GET
+ * Masks of NV_MSGBOX_OOB_CLOCK_LIMIT_CTRL_PARAMS_FLAGS_<XYZ>.
+ */
+typedef struct {
+ /*!
+ * Graphics clock limit in MHz
+ * if there is no cap, return
+ * NV_MSGBOX_CLOCK_LIMIT_GET_PARAMS_CLOCK_LIMIT_NOT_SET
+ */
+ NvU16 oobClientMin;
+ NvU16 oobClientMax;
+ NvU16 enforcedMin;
+ NvU16 enforcedMax;
+#define NV_MSGBOX_CLOCK_LIMIT_GET_PARAMS_CLOCK_LIMIT_NOT_SET 0xffff
+} NV_MSGBOX_CLOCK_LIMIT_GET_PARAMS;
+
+/*!
+ * This structure is used to hold parameters for
+ * NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_DEVICE_MODE_CONTROL
+ */
+typedef struct
+{
+ NvU16 modeType; //<! Mode type
+#define NV_MSGBOX_DEVICE_MODE_CONTROL_PARAMS_MODE_TYPE_ECC 0x00000000
+#define NV_MSGBOX_DEVICE_MODE_CONTROL_PARAMS_MODE_TYPE_MIG 0x00000001
+#define NV_MSGBOX_DEVICE_MODE_CONTROL_PARAMS_MODE_TYPE_DISABLE 0x00000002
+
+ NvU16 flags; //<! flags
+#define NV_MSGBOX_DEVICE_MODE_CONTROL_PARAMS_FLAGS_CONTROL 0:0
+#define NV_MSGBOX_DEVICE_MODE_CONTROL_PARAMS_FLAGS_CONTROL_CLEAR 0x00000000
+#define NV_MSGBOX_DEVICE_MODE_CONTROL_PARAMS_FLAGS_CONTROL_SET 0x00000001
+
+} NV_MSGBOX_DEVICE_MODE_CONTROL_PARAMS;
+
+//
+// This is the maximum number of curve points this API will be able to carry.
+// With the understanding that the maximum number of points currently
+// implemented in the RM is 3, we are leaving 2 additional slots as a room
+// for possible future growth, so that we don't have to spin the API definition
+// in case we ever want to implement more than 3 points.
+//
+#define NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINTS_MAX_POINTS 5
+
+typedef struct
+{
+ NvS16 temperature; //<! degrees C, signed 16 bit value
+
+ union {
+ NvU16 level; //<! Fan PWM setting in the range 0..100
+ //<! 0: no rotation
+ //<! 100: full speed
+ NvU16 rpmValue; //<! tach speed in RPM
+ } fanSetting;
+} NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINT;
+
+#define NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINTS_ACTION_GET 0
+#define NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINTS_ACTION_GET_DEFAULT 1
+#define NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINTS_ACTION_SET 2
+typedef struct
+{
+ NvU8 action; //<! [in]
+ //<! NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINTS_ACTION_GET:
+ //<! get currently active point values
+ //<! NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINTS_ACTION_GET_DEFAULT:
+ //<! get VBIOS default point values
+ //<! NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINTS_ACTION_SET:
+ //<! set new active point values
+
+ NvU8 fanIndex; //<! [in]
+
+ NvU8 numEffectivePoints; //<! [out] for fanGetCurvePoints. This is the
+ //<! number of points actually implemented
+ //<! and filled in the array below
+ //<! [in] for fanSetCurvePoints. This is how
+ //<! many points the caller is sending to
+ //<! the API. Must not exceed what was
+ //<! returned by fanGetCurvePoints.
+
+ NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINT
+ curvePoints[NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINTS_MAX_POINTS];
+ //<! [out] for fanGetCurvePoints.
+ //<! [in] for fanSetCurvePoints.
+} NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINTS_PARAMS;
+
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_DMMA_PERF 0
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_DMMA_HIGH_K 1
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_DMMA_LOW_K 2
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_HMMA 3
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_IMMA 4
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_SGEMM 5
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_TRANSFORMER 6
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_CUSTOMER_CUSTOM_0 7
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_CUSTOMER_CUSTOM_1 8
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_CUSTOMER_CUSTOM_2 9
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_CUSTOMER_CUSTOM_3 10
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_CUSTOMER_CUSTOM_4 11
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_CUSTOMER_CUSTOM_5 12
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_CUSTOMER_CUSTOM_6 13
+#define NV_MSGBOX_POWER_HINT_PROFILES_ID_CUSTOMER_CUSTOM_7 14
+/*!
+ * This param is used for NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_POWER_HINT_GET
+ */
+typedef struct
+{
+ /*!
+ * [out] Power Hint in mW
+ */
+ NvU32 powermW;
+ /*!
+ * [in] Graphics Clock in MHz
+ */
+ NvU16 grClkMHz;
+ /*!
+ * [in] Memory Clock
+ */
+ NvU16 memClkMHz;
+ /*!
+ * [in] GPU Temperature
+ */
+ NvS16 temperature;
+ /*!
+ * [in] Profile ID
+ */
+ NvU8 profile;
+ // new param starting from here.
+} NV_MSGBOX_POWER_HINT_PARAMS;
+
+/*!
+ * This param is used for NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_CONFIGURE_PROGRAMMABLE_EDPP
+ */
+typedef struct
+{
+ /*!
+ * [out] Power Hint in mW
+ */
+ NvU32 data;
+} NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS;
+
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA 31:0
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_OPERATION 1:0
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_OPERATION_GET 0x0
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_OPERATION_SET 0x1
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_OPERATION_CLEAR 0x2
+
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_MODE 3:2
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_MODE_PERSISTENT 0x0
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_MODE_ONESHOT 0x1
+
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_LIMIT_CURRENT 10:4
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_LIMIT_RATED 17:11
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_LIMIT_MAXIMUM 24:18
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_DATA_LIMIT_MINIMUM 31:25
+
+#define NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS_LIMIT_NOT_SET 0x7F
+
+/*!
+ * @brief Union of all possible parameter struct. Used to determine the maximum
+ * amount of space parameter blocks can take.
+ */
+typedef union {
+ NV_MSGBOX_PMGR_PWR_POWER_LIMIT_CONTROL_PARAMS tgpLimitControl;
+ NV_MSGBOX_THERMAL_FAN_V1_COUNT_PARAMS fanCountV1Get;
+ NV_MSGBOX_THERMAL_FAN_V1_INFO_PARAMS fanCountV1Info;
+ NV_MSGBOX_THERMAL_FAN_V1_STATUS_PARAMS fanCountV1Status;
+ NV_MSGBOX_OVERCLOCKING_LIMIT_CONTROL_PARAMS overclockingLimitControl;
+ NV_MSGBOX_ENERGY_COUNTER_STATUS_PARAMS energyCounterStatus;
+ NV_MSGBOX_VIOLATION_COUNTERS_STATUS_PARAMS violationCountersStatus;
+ NV_MSGBOX_UTILIZATION_RATE_PARAMS utilizationRate;
+ NV_MSGBOX_OOB_CLOCK_LIMIT_CTRL_PARAMS oobClockLimitCtrlParams;
+ NV_MSGBOX_DEVICE_MODE_CONTROL_PARAMS deviceModeControlParams;
+ NV_MSGBOX_TEST_MESSAGE_SEND_PARAMS testMessageSend;
+ NV_MSGBOX_CLOCK_LIMIT_GET_PARAMS clockLimitGet;
+ NV_MSGBOX_THERMAL_FAN_V3_FAN_CURVE_POINTS_PARAMS fanCurvePointsV3;
+ NV_MSGBOX_POWER_HINT_PARAMS powerHintParams;
+ NV_MSGBOX_PROGRAMMABLE_EDPP_PARAMS programmableEdppParams;
+} NV_MSGBOX_ASYNC_REQ_PARAMS_UNION;
+
+#endif // !NV_MSGBOX_NO_PARAM_STRUCTS
+
+/* Utility command constructor macros */
+
+#define NV_MSGBOX_CMD(opcode, arg1, arg2) \
+ ( \
+ DRF_DEF(_MSGBOX, _CMD, _OPCODE, opcode) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1, (arg1)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2, (arg2)) | \
+ DRF_DEF(_MSGBOX, _CMD, _STATUS, _NULL) | \
+ DRF_DEF(_MSGBOX, _CMD, _RSVD, _INIT) | \
+ DRF_DEF(_MSGBOX, _CMD, _INTR, _PENDING) \
+ )
+#define NV_MSGBOX_CMD_NULL_CMD() NV_MSGBOX_CMD(_NULL_CMD, 0, 0)
+#define NV_MSGBOX_CMD_GET_CAP_DWORD(index) NV_MSGBOX_CMD(_GET_CAP_DWORD, (index), 0)
+#define NV_MSGBOX_CMD_GET_TEMP(source) NV_MSGBOX_CMD(_GET_TEMP, (source), 0)
+#define NV_MSGBOX_CMD_GET_EXT_TEMP(source) NV_MSGBOX_CMD(_GET_EXT_TEMP, (source), 0)
+#define NV_MSGBOX_CMD_GET_POWER(source) NV_MSGBOX_CMD(_GET_POWER, (source), 0)
+#define NV_MSGBOX_CMD_GET_SYS_ID_DATA(type, offset) \
+ NV_MSGBOX_CMD(_GET_SYS_ID_DATA, (type), (offset) / 4)
+#define NV_MSGBOX_CMD_SCRATCH_READ(off) NV_MSGBOX_CMD(_SCRATCH_READ, (off), 0)
+#define NV_MSGBOX_CMD_SCRATCH_WRITE(off, cnt) NV_MSGBOX_CMD(_SCRATCH_WRITE, (off), (cnt) - 1)
+#define NV_MSGBOX_CMD_SCRATCH_COPY(off, cnt) NV_MSGBOX_CMD(_SCRATCH_COPY, (off), (cnt) - 1)
+#define NV_MSGBOX_CMD_ASYNC_REQUEST(req_type, scratch_offset) \
+ NV_MSGBOX_CMD(_ASYNC_REQUEST, (req_type), (scratch_offset) / 4)
+#define NV_MSGBOX_CMD_ASYNC_REQUEST_POLL(req_id) \
+ NV_MSGBOX_CMD(_ASYNC_REQUEST, \
+ NV_MSGBOX_CMD_ARG1_ASYNC_REQUEST_POLL, \
+ (req_id))
+#define NV_MSGBOX_CMD_REGISTER_READ(addr) NV_MSGBOX_CMD(_REGISTER_ACCESS, \
+ NV_MSGBOX_CMD_ARG1_REGISTER_ACCESS_READ, \
+ (addr))
+#define NV_MSGBOX_CMD_REGISTER_WRITE(addr) NV_MSGBOX_CMD(_REGISTER_ACCESS, \
+ NV_MSGBOX_CMD_ARG1_REGISTER_ACCESS_WRITE, \
+ (addr))
+#define NV_MSGBOX_CMD_GET_THERM_PARAM(param) NV_MSGBOX_CMD(_GET_THERM_PARAM, \
+ NV_MSGBOX_CMD_ARG1_THERM_PARAM##param, 0)
+
+#define NV_MSGBOX_CMD_ACCESS_WP_MODE(action, state) \
+ NV_MSGBOX_CMD(_ACCESS_WP_MODE, (action), (state))
+
+#define NV_MSGBOX_CMD_GET_WP_MODE() \
+ NV_MSGBOX_CMD_ACCESS_WP_MODE(NV_MSGBOX_CMD_ARG1_ACCESS_WP_MODE_ACTION_GET, 0)
+
+#define NV_MSGBOX_CMD_SET_WP_MODE(state) \
+ NV_MSGBOX_CMD_ACCESS_WP_MODE(NV_MSGBOX_CMD_ARG1_ACCESS_WP_MODE_ACTION_SET, (state))
+
+#define NV_MSGBOX_CMD_GET_MISC_GPU_FLAGS(subtype, arg2) \
+ NV_MSGBOX_CMD(_GET_MISC_GPU_FLAGS, (subtype), (arg2))
+
+#define NV_MSGBOX_CMD_GET_ECC_ENABLED_STATE() \
+ NV_MSGBOX_CMD_GET_MISC_GPU_FLAGS(NV_MSGBOX_CMD_ARG1_GET_MISC_ECC_ENABLED_STATE, 0)
+
+#define NV_MSGBOX_CMD_GET_GPU_RESET_REQUIRED() \
+ NV_MSGBOX_CMD_GET_MISC_GPU_FLAGS(NV_MSGBOX_CMD_ARG1_GET_MISC_GPU_RESET_REQUIRED, 0)
+
+#define NV_MSGBOX_CMD_GET_MISC_GPU_FLAGS_PAGE_0() \
+ NV_MSGBOX_CMD_GET_MISC_GPU_FLAGS(NV_MSGBOX_CMD_ARG1_GET_MISC_GPU_FLAGS_PAGE_0, 0)
+
+#define NV_MSGBOX_CMD_GET_MISC_GPU_FLAGS_PAGE_1() \
+ NV_MSGBOX_CMD_GET_MISC_GPU_FLAGS(NV_MSGBOX_CMD_ARG1_GET_MISC_GPU_FLAGS_PAGE_1, 0)
+
+#define NV_MSGBOX_CMD_GET_NVLINK_INFO(subtype, arg2) \
+ NV_MSGBOX_CMD(_GET_NVLINK_INFO, (subtype), (arg2))
+
+#define NV_MSGBOX_CMD_GET_NVLINK_INFO_ERR_CNT(errtype, link_index) \
+ NV_MSGBOX_CMD(_GET_NVLINK_INFO, \
+ NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO_ERR_COUNTER##errtype,\
+ (link_index))
+
+#define NV_MSGBOX_CMD_GET_NVLINK_INFO_ERR_STATE(errtype, link_page) \
+ NV_MSGBOX_CMD(_GET_NVLINK_INFO, \
+ NV_MSGBOX_CMD_ARG1_GET_NVLINK_INFO##errtype##_ERROR_STATE, \
+ (link_page))
+
+#define NV_MSGBOX_CMD_GET_GPU_UTIL_COUNTERS(subtype) \
+ NV_MSGBOX_CMD(_GPU_UTIL_COUNTERS, (subtype), 0)
+
+#define NV_MSGBOX_CMD_GET_GPU_UTIL_COUNTERS_CONTEXT_TIME() \
+ NV_MSGBOX_CMD_GET_GPU_UTIL_COUNTERS(NV_MSGBOX_CMD_ARG1_GPU_UTIL_COUNTERS_CONTEXT_TIME)
+
+#define NV_MSGBOX_CMD_GET_GPU_UTIL_COUNTERS_SM_TIME() \
+ NV_MSGBOX_CMD_GET_GPU_UTIL_COUNTERS(NV_MSGBOX_CMD_ARG1_GPU_UTIL_COUNTERS_SM_TIME)
+
+#define NV_MSGBOX_CMD_GET_GPU_UTIL_COUNTERS_RESET_COUNTERS() \
+ NV_MSGBOX_CMD_GET_GPU_UTIL_COUNTERS(NV_MSGBOX_CMD_ARG1_GPU_UTIL_COUNTERS_RESET_COUNTERS)
+
+#define NV_MSGBOX_CMD_GET_NVLINK_INFO_ERR_CNT_REPLAY(link_index) \
+ NV_MSGBOX_CMD_GET_NVLINK_INFO_ERR_CNT(_REPLAY, (link_index))
+
+#define NV_MSGBOX_CMD_GET_NVLINK_INFO_ERR_CNT_RECOVERY(link_index) \
+ NV_MSGBOX_CMD_GET_NVLINK_INFO_ERR_CNT(_RECOVERY, (link_index))
+
+#define NV_MSGBOX_CMD_GET_NVLINK_INFO_ERR_CNT_FLIT_CRC(link_index) \
+ NV_MSGBOX_CMD_GET_NVLINK_INFO_ERR_CNT(_FLIT_CRC, (link_index))
+
+#define NV_MSGBOX_CMD_GET_NVLINK_INFO_ERR_CNT_DATA_CRC(link_index) \
+ NV_MSGBOX_CMD_GET_NVLINK_INFO_ERR_CNT(_DATA_CRC, (link_index))
+
+#define NV_MSGBOX_CMD_GET_CLOCK_FREQ_INFO(subtype, clkdomain) \
+ NV_MSGBOX_CMD(_GET_CLOCK_FREQ_INFO, (subtype), (clkdomain))
+
+#define NV_MSGBOX_CMD_GET_CLOCK_FREQ_INFO_GPC_CURRENT() \
+ NV_MSGBOX_CMD_GET_CLOCK_FREQ_RANGE(NV_MSGBOX_CMD_ARG1_GET_CLOCK_FREQ_RANGE_GPC_CURRENT, \
+ NV_MSGBOX_CMD_ARG2_GET_CLOCK_FREQ_INFO_GPCCLK)
+
+#define NV_MSGBOX_CMD_GET_CLOCK_FREQ_INFO_GPC_MIN() \
+ NV_MSGBOX_CMD_GET_CLOCK_FREQ_RANGE(NV_MSGBOX_CMD_ARG1_GET_CLOCK_FREQ_INFO_GPC_MIN, \
+ NV_MSGBOX_CMD_ARG2_GET_CLOCK_FREQ_INFO_GPCCLK)
+
+#define NV_MSGBOX_CMD_GET_CLOCK_FREQ_INFO_GPC_MAX() \
+ NV_MSGBOX_CMD_GET_CLOCK_FREQ_RANGE(NV_MSGBOX_CMD_ARG1_GET_CLOCK_FREQ_INFO_GPC_MAX, \
+ NV_MSGBOX_CMD_ARG2_GET_CLOCK_FREQ_INFO_GPCCLK)
+
+#define NV_MSGBOX_CMD_GET_DRIVER_EVENT_MSG(ptr) NV_MSGBOX_CMD(_GET_DRIVER_EVENT_MSG, 0, (ptr))
+
+//
+// ECC V2
+//
+#define NV_MSGBOX_CMD_ECC_V2_CNT_FB(src, type, partition, slice) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V2, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_SEL, _CNT) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_CNT_DEV, _FB) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_CNT_FB_SRC, src) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_CNT_TYPE, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V2_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V2_FB_SLICE, (slice)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V2_CNT_GR(src, type, gpc, tpc) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V2, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_SEL, _CNT) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_CNT_DEV, _GR) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_CNT_GR_SRC, src) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_CNT_TYPE, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V2_GR_GPC, (gpc)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V2_GR_TPC, (tpc)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V2_FBA_CUMUL(partition, slice) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V2, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_SEL, _FBA) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_FBA_SC, _CUMUL) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V2_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V2_FB_SLICE, (slice)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V2_FBA_IND_ADDR(partition, slice, index) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V2, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_SEL, _FBA) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_FBA_SC, _IND) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_FBA_IND_FLD, _ADDR) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1_ECC_V2_FBA_IND_INDEX, (index)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V2_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V2_FB_SLICE, (slice)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V2_FBA_IND_CTRS(partition, slice, index) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V2, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_SEL, _FBA) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_FBA_SC, _IND) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V2_FBA_IND_FLD, _CTRS) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1_ECC_V2_FBA_IND_INDEX, (index)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V2_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V2_FB_SLICE, (slice)) \
+ )
+
+//
+// ECC V3
+//
+#define NV_MSGBOX_CMD_ECC_V3_CNT_FB_LTC(type, partition, slice) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V3, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_SEL, _CNT) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_DEV, _FB) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_FB_SRC, _LTC) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_TYPE, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_FB_SLICE, (slice)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V3_CNT_FB_FB(type, partition, subpart) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V3, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_SEL, _CNT) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_DEV, _FB) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_FB_SRC, _FB) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_TYPE, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_FB_SUBPARTITION, (subpart)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V3_CNT_GR(src, type, gpc, tpc) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V3, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_SEL, _CNT) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_DEV, _GR) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_GR_SRC, src) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_TYPE, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_GR_GPC, (gpc)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_GR_TPC, (tpc)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V3_CNT_GR_TEX(type, gpc, tpc, tex) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V3, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_SEL, _CNT) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_DEV, _GR) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_GR_SRC, _TEX) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_CNT_TYPE, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_GR_GPC, (gpc)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_GR_TPC, (tpc)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_GR_TEX, (tex)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V3_FBA_IND_ADDR(partition, subpart, index) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V3, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_SEL, _FBA) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_FBA_SC, _IND) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_FBA_IND_FLD, _ADDR) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1_ECC_V3_FBA_IND_INDEX, (index)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_FB_SUBPARTITION, (subpart)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V3_FBA_IND_CTRS(partition, subpart, index) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V3, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_SEL, _FBA) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_FBA_SC, _IND) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V3_FBA_IND_FLD, _CTRS) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1_ECC_V3_FBA_IND_INDEX, (index)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V3_FB_SUBPARTITION, (subpart)) \
+ )
+
+//
+// ECC V4
+//
+#define NV_MSGBOX_CMD_ECC_V4_CNT_FB_LTC(type, partition, slice) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V4, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_SEL, _CNT) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_DEV, _FB) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_FB_SRC, _LTC) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_TYPE, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_FB_SLICE, (slice)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V4_CNT_FB_FB(type, partition, subpart) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V4, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_SEL, _CNT) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_DEV, _FB) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_FB_SRC, _FB) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_TYPE, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_FB_SUBPARTITION, (subpart)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V4_CNT_GR(src, type, gpc, tpc) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V4, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_SEL, _CNT) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_DEV, _GR) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_GR_SRC, src) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_TYPE, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_GR_GPC, (gpc)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_GR_TPC, (tpc)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V4_CNT_GR_TEX(type, gpc, tpc, tex) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V4, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_SEL, _CNT) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_DEV, _GR) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_GR_SRC, _TEX) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_CNT_TYPE, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_GR_GPC, (gpc)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_GR_TPC, (tpc)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_GR_TEX, (tex)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V4_FBA_IND_ADDR(partition, subpart, index) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V4, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_SEL, _FBA) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_FBA_SC, _IND) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_FBA_IND_FLD, _ADDR) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1_ECC_V4_FBA_IND_INDEX, (index)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_FB_SUBPARTITION, (subpart)) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V4_FBA_IND_CTRS(partition, subpart, index) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V4, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_SEL, _FBA) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_FBA_SC, _IND) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V4_FBA_IND_FLD, _CTRS) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1_ECC_V4_FBA_IND_INDEX, (index)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_FB_PARTITION, (partition)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V4_FB_SUBPARTITION, (subpart)) \
+ )
+
+//
+// ECC V5
+//
+#define NV_MSGBOX_CMD_ECC_V5_CNT(index) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V5, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V5_SEL, _COUNTS) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1_ECC_V5_COUNTS_INDEX_LO, (index)) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_ECC_V5_COUNTS_INDEX_HI, (index) >> 7) \
+ )
+#define NV_MSGBOX_ECC_V5_COUNTS_NUM_ENTRIES 600
+
+#define NV_MSGBOX_CMD_ECC_V5_CNT_HDR_META(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_CNT(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_COUNTS_TYPE, _HDR_META) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_CNT_REGN_CORRECTED_TOTAL(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_CNT(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_COUNTS_TYPE, _REGN_CORRECTED_TOTAL) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_CNT_REGN_CORRECTED_UNIQUE(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_CNT(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_COUNTS_TYPE, _REGN_CORRECTED_UNIQUE) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_CNT_REGN_UNCORRECTED_TOTAL(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_CNT(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_COUNTS_TYPE, _REGN_UNCORRECTED_TOTAL) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_CNT_REGN_UNCORRECTED_UNIQUE(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_CNT(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_COUNTS_TYPE, _REGN_UNCORRECTED_UNIQUE) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_CNT_ADDR_ADDR(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_CNT(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_COUNTS_TYPE, _ADDR_ADDR) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_CNT_ADDR_UNCORRECTED_COUNTS(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_CNT(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_COUNTS_TYPE, _ADDR_UNCORRECTED_COUNTS) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_CNT_ADDR_CORRECTED_TOTAL(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_CNT(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_COUNTS_TYPE, _ADDR_CORRECTED_TOTAL) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_CNT_ADDR_CORRECTED_UNIQUE(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_CNT(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_COUNTS_TYPE, _ADDR_CORRECTED_UNIQUE) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_ERR_BUF(index) \
+ ( \
+ NV_MSGBOX_CMD(_GET_ECC_V5, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_ECC_V5_SEL, _ERR_BUFFER) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1_ECC_V5_ERR_BUF_INDEX, (index)) \
+ )
+#define NV_MSGBOX_ECC_V5_ERR_BUF_NUM_ENTRIES 16
+
+#define NV_MSGBOX_CMD_ECC_V5_ERR_BUF_ERR_TYPE_META(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_ERR_BUF(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_ERR_BUF_TYPE, _ERR_TYPE_META) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_ERR_BUF_TIME_STAMP(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_ERR_BUF(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_ERR_BUF_TYPE, _TIME_STAMP) \
+ )
+
+#define NV_MSGBOX_CMD_ECC_V5_ERR_BUF_ADDR(index) \
+ ( \
+ NV_MSGBOX_CMD_ECC_V5_ERR_BUF(index) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2_ECC_V5_ERR_BUF_TYPE, _ADDR) \
+ )
+
+#define NV_MSGBOX_CMD_SET_COPY_DATA(cmd) \
+ ( \
+ FLD_SET_DRF(_MSGBOX, _CMD, _COPY_DATA, _ON, (cmd)) \
+ )
+
+#define NV_MSGBOX_CMD_GET_PCIE_LINK_INFO_1(page) \
+ ( \
+ NV_MSGBOX_CMD(_GET_PCIE_LINK_INFO, \
+ (page), \
+ 0) \
+ )
+
+// We use the fact here that for pages ## 8 and 9 Arg2 definitions are similar
+#define NV_MSGBOX_CMD_GET_PCIE_LINK_INFO_2(page, lane, speed) \
+ ( \
+ NV_MSGBOX_CMD(_GET_PCIE_LINK_INFO, \
+ (page), \
+ DRF_NUM(_MSGBOX, _CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_8, \
+ _LANE_IDX, (lane)) | \
+ DRF_NUM(_MSGBOX, _CMD_ARG2_GET_PCIE_LINK_INFO_PAGE_8, \
+ _SPEED_SELECT, (speed))) \
+ )
+
+#define NV_MSGBOX_CMD_GPM_GET_METRIC(type, metric, req_ci_metrics, partition) \
+ ( \
+ NV_MSGBOX_CMD(_GPU_PERFORMANCE_MONITORING, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_GPM_ACTION, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1_GPM_METRIC, metric) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_GPM_CI_METRICS_REQUESTED, req_ci_metrics) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_GPM_PARTITION_INDEX, partition) \
+ )
+
+#define NV_MSGBOX_CMD_GPM_GET_METRIC_AGGREGATE(type, metric) \
+ ( \
+ NV_MSGBOX_CMD(_GPU_PERFORMANCE_MONITORING, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_GPM_ACTION, type) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG1_GPM_METRIC, metric) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG2, _GPM_PARTITION_AGGREGATE) \
+ )
+
+#define NV_MSGBOX_DATA_IN_GPM(instance_id, ci_index) \
+ ( \
+ DRF_NUM(_MSGBOX, _DATA, _GPM_NVDEC_INSTANCE, instance_id) | \
+ DRF_NUM(_MSGBOX, _DATA, _GPM_COMPUTE_INSTANCE_INDEX, ci_index) \
+ )
+
+#define NV_MSGBOX_CMD_GPM_SET_MULTIPLIER(multiplier) \
+ ( \
+ NV_MSGBOX_CMD(_GPU_PERFORMANCE_MONITORING, 0, 0) | \
+ DRF_DEF(_MSGBOX, _CMD, _ARG1_GPM_ACTION, _SET_MULTIPLIER) | \
+ DRF_NUM(_MSGBOX, _CMD, _ARG2_GPM_MULTIPLIER, (multiplier)) \
+ )
+
+#define NV_MSGBOX_GET_CMD_OPCODE(cmd) DRF_VAL(_MSGBOX, _CMD, _OPCODE, (cmd))
+#define NV_MSGBOX_GET_CMD_ARG1(cmd) DRF_VAL(_MSGBOX, _CMD, _ARG1 , (cmd))
+#define NV_MSGBOX_GET_CMD_ARG2(cmd) DRF_VAL(_MSGBOX, _CMD, _ARG2 , (cmd))
+#define NV_MSGBOX_GET_CMD_STATUS(cmd) DRF_VAL(_MSGBOX, _CMD, _STATUS, (cmd))
+#define NV_MSGBOX_CMD_IS_COPY_DATA_SET(cmd) \
+ FLD_TEST_DRF(_MSGBOX, _CMD, _COPY_DATA, _ON, (cmd))
+
+#define NV_MSGBOX_CAP_IS_AVAILABLE(caps, idx, name) \
+ !(FLD_TEST_DRF(_MSGBOX, _DATA_CAP_##idx, name, _NOT_AVAILABLE, (caps)[idx]))
+
+#define NV_MSGBOX_CAP_SET_AVAILABLE(caps, idx, name) \
+ (caps)[idx] = FLD_SET_DRF(_MSGBOX, _DATA_CAP_##idx, name, _AVAILABLE, \
+ (caps)[idx])
+
+/********************************************************************************
+ * *
+ * GPU REQUESTS *
+ * *
+ ********************************************************************************/
+
+//
+// Encoding:
+// 31 24 23 16 15 8 7 0
+// .-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.
+// | REQUEST ID | ARG2 | ARG1 | OPCODE | DATA_OUT
+// `-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
+//
+#define NV_MSGBOX_REQ_OPCODE 7:0
+#define NV_MSGBOX_REQ_OPCODE_CPU_PCONTROL 0x00000000
+#define NV_MSGBOX_REQ_OPCODE_SYS_PCONTROL 0x00000001
+#define NV_MSGBOX_REQ_ARG1 15:8
+#define NV_MSGBOX_REQ_ARG2 23:16
+#define NV_MSGBOX_REQ_REQUEST_ID 31:24
+#define NV_MSGBOX_REQ(opcode, arg1, arg2, requestId) \
+ ( \
+ DRF_NUM(_MSGBOX, _REQ, _OPCODE , (opcode)) | \
+ DRF_NUM(_MSGBOX, _REQ, _ARG1 , (arg1)) | \
+ DRF_NUM(_MSGBOX, _REQ, _ARG2 , (arg2)) | \
+ DRF_NUM(_MSGBOX, _REQ, _REQUEST_ID, (requestId)) \
+ )
+
+/* ---------------- CPU Performance Control (PCONTROL) ------------------------ */
+
+//
+// CPU_PCONTROL
+//
+// Description:
+// GPU-Request used to retrieve information and control various aspects of
+// CPU performance.
+//
+// Common Encoding:
+// 7 3 2 0
+// .-+-+-+-+-+-+-+-.
+// | TARGET | ACT | ARG1
+// `-+-+-+-+-+-+-+-'
+//
+// Notes:
+// arg1, arg2, and data encoding (fields are relative to zero, not relative
+// to their position in the DATA_OUT register).
+//
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG1_ACTION 2:0
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG1_ACTION_RSVD1 0x00000000
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG1_ACTION_RSVD2 0x00000001
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG1_ACTION_SET_LIMIT 0x00000002
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG1_TARGET 7:3
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG1_TARGET_PSTATE 0x00000000
+
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG1_SET_ACTION(arg1, action) \
+ (arg1) = FLD_SET_DRF(_MSGBOX_REQ, _CPU_PCONTROL_ARG1, _ACTION, \
+ action, (arg1))
+
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG1_GET_ACTION(arg1) \
+ DRF_VAL(_MSGBOX_REQ, _CPU_PCONTROL_ARG1, _ACTION, (arg1))
+
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG1_SET_TARGET(arg1, target) \
+ (arg1) = FLD_SET_DRF(_MSGBOX_REQ, _CPU_PCONTROL_ARG1, _TARGET, \
+ target, (arg1))
+
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG1_GET_TARGET(arg1) \
+ DRF_VAL(_MSGBOX_REQ, _CPU_PCONTROL_ARG1, _TARGET, (arg1))
+
+//
+// Setting CPU Pstate Limits:
+//
+// Inputs:
+// ARG1 - {TARGET=PSTATE, ACTION=SET_LIMIT}
+// ARG2 - Stores desired CPU Pstate limit
+//
+// Outputs:
+// none
+//
+// Encoding:
+// 7 3 2 0 7 0
+// .-+-+-+-+-+-+-+-. .-+-+-+-+-+-+-+-.
+// | TARGET | ACT | ARG1 | VALUE | ARG2
+// `-+-+-+-+-+-+-+-' `-+-+-+-+-+-+-+-'
+//
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG2_PSTATE_SET_LIMIT_VALUE 7:0
+
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG2_PSTATE_SET_LIMIT_SET_VALUE(arg2, limit) \
+ (arg2) = FLD_SET_DRF_NUM(_MSGBOX_REQ, _CPU_PCONTROL_ARG2, \
+ _PSTATE_SET_LIMIT_VALUE, (limit), (arg2))
+
+#define NV_MSGBOX_REQ_CPU_PCONTROL_ARG2_PSTATE_SET_LIMIT_GET_VALUE(arg2) \
+ DRF_VAL(_MSGBOX_REQ, _CPU_PCONTROL_ARG2, _PSTATE_SET_LIMIT_VALUE, (arg2))
+
+/* ----------------------- System Performance Control ------------------------- */
+
+//
+// SYS_PCONTROL
+//
+// Description:
+// GPU-Request used to retrieve information and control various aspects of
+// system-performance.
+//
+// Common Encoding:
+// 7 3 2 0 7 0
+// .-+-+-+-+-+-+-+-. .-+-+-+-+-+-+-+-.
+// | TARGET | ACT | ARG1 |0 0 0 0 0 0 0 0| ARG2 (reserved)
+// `-+-+-+-+-+-+-+-' `-+-+-+-+-+-+-+-'
+//
+// Notes:
+// - TARGET accepts NV0000_CTRL_SYSTEM_PARAM_* definitions
+// - arg1, arg2, and data encoding (fields are relative to zero, not relative
+// to their position in the DATA_OUT register).
+//
+#define NV_MSGBOX_REQ_SYS_PCONTROL_ARG1_ACTION 2:0
+#define NV_MSGBOX_REQ_SYS_PCONTROL_ARG1_ACTION_GET_STATUS 0x00000000
+#define NV_MSGBOX_REQ_SYS_PCONTROL_ARG1_ACTION_GET_LIMIT 0x00000001
+#define NV_MSGBOX_REQ_SYS_PCONTROL_ARG1_TARGET 7:3
+#define NV_MSGBOX_REQ_SYS_PCONTROL_ARG2_RSVD 7:0
+
+#define NV_MSGBOX_REQ_SYS_PCONTROL_ARG1_SET_ACTION(arg1, action) \
+ (arg1) = FLD_SET_DRF(_MSGBOX_REQ, _SYS_PCONTROL_ARG1, _ACTION, \
+ action, (arg1))
+
+#define NV_MSGBOX_REQ_SYS_PCONTROL_ARG1_GET_ACTION(arg1) \
+ DRF_VAL(_MSGBOX_REQ, _SYS_PCONTROL_ARG1, _ACTION, (arg1))
+
+#define NV_MSGBOX_REQ_SYS_PCONTROL_ARG1_SET_TARGET(arg1, target) \
+ (arg1) = FLD_SET_DRF_NUM(_MSGBOX_REQ, _SYS_PCONTROL_ARG1, _TARGET, \
+ (target), (arg1))
+
+#define NV_MSGBOX_REQ_SYS_PCONTROL_ARG1_GET_TARGET(arg1) \
+ DRF_VAL(_MSGBOX_REQ, _SYS_PCONTROL_ARG1, _TARGET, (arg1))
+
+#endif /* _SMBPBI_H */
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi_impl.h b/userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi_impl.h
new file mode 100644
index 0000000..e7052c8
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi_impl.h
@@ -0,0 +1,45 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2019-2020 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#ifndef _SMBPBI_IMPL_H
+#define _SMBPBI_IMPL_H
+/*!
+ * This header file stores implementation dependent parameters of the SMBPBI server.
+ */
+
+/*!
+ * Maximum number of individual requests in a bundle
+ */
+#define NV_MSGBOX_PARAM_MAX_BUNDLE_SIZE 4
+
+/*!
+ * Maximum number of Result Disposition Rules
+ */
+#define NV_MSGBOX_PARAM_MAX_DISP_RULES 10
+
+/*!
+ * Maximum length of the Driver Event Message text string is 80, including
+ * the terminating NUL character.
+ */
+#define NV_MSGBOX_MAX_DRIVER_EVENT_MSG_TXT_SIZE 80
+
+#endif // _SMBPBI_IMPL_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi_priv.h b/userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi_priv.h
new file mode 100644
index 0000000..53b48da
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/oob/smbpbi_priv.h
@@ -0,0 +1,59 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2010-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _SMBPBI_PRIV_H_
+#define _SMBPBI_PRIV_H_
+
+/*!
+ * This file contains NVIDIA private defines for the SMBPBI
+ * interface.
+ */
+
+#include "oob/smbpbi.h"
+
+// MSGBOX command word structure
+
+//
+// Reserving opcodes above 0xC0 for internal/private functionationality.
+//
+// These opcodes should not be included in any documentation we release outside
+// of NVIDIA!
+//
+
+//
+// Only for internal use (should not be written to the command register). Used
+// for internal tracking when commands are redirected to the RM from the PMU.
+//
+#define NV_MSGBOX_CMD_ERR_MORE_PROCESSING_REQUIRED 0x000000F0
+
+//
+// Alternative encodings of the command word.
+// These were distinguished by a non-zero value in the 29:29 bit.
+// Bit 29 is now reserved and must be 0 i.e. only standard requests will be processed
+// and debug requests would fail.
+//
+#define NV_MSGBOX_CMD_ENCODING 29:29
+#define NV_MSGBOX_CMD_ENCODING_STANDARD 0x00000000
+
+#endif // _SMBPBI_PRIV_H_
+
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/rmRiscvUcode.h b/userspace/sdks/nv570/nvalloc/common/inc/rmRiscvUcode.h
new file mode 100644
index 0000000..d2e4259
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/rmRiscvUcode.h
@@ -0,0 +1,95 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2018-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * << DO NOT EDIT >>
+ *
+ * This file describes the format of generated ucode binary. Please do not change the
+ * content unless the same change is applied to the target ucode builds.
+ */
+
+#ifndef RM_RISCV_UCODE_H
+#define RM_RISCV_UCODE_H
+
+#include "nvtypes.h"
+
+typedef struct {
+ //
+ // Version 1
+ // Version 2
+ // Version 3 = for Partition boot
+ // Version 4 = for eb riscv boot
+ // Version 5 = Support signing entire RISC-V image as "code" in code section for hopper and later.
+ //
+ NvU32 version; // structure version
+ NvU32 bootloaderOffset;
+ NvU32 bootloaderSize;
+ NvU32 bootloaderParamOffset;
+ NvU32 bootloaderParamSize;
+ NvU32 riscvElfOffset;
+ NvU32 riscvElfSize;
+ NvU32 appVersion; // Changelist number associated with the image
+ //
+ // Manifest contains information about Monitor and it is
+ // input to BR
+ //
+ NvU32 manifestOffset;
+ NvU32 manifestSize;
+ //
+ // Monitor Data offset within RISCV image and size
+ //
+ NvU32 monitorDataOffset;
+ NvU32 monitorDataSize;
+ //
+ // Monitor Code offset withtin RISCV image and size
+ //
+ NvU32 monitorCodeOffset;
+ NvU32 monitorCodeSize;
+ NvU32 bIsMonitorEnabled;
+ //
+ // Swbrom Code offset within RISCV image and size
+ //
+ NvU32 swbromCodeOffset;
+ NvU32 swbromCodeSize;
+ //
+ // Swbrom Data offset within RISCV image and size
+ //
+ NvU32 swbromDataOffset;
+ NvU32 swbromDataSize;
+ //
+ // Total size of FB carveout (image and reserved space).
+ //
+ NvU32 fbReservedSize;
+ //
+ // Indicates whether the entire RISC-V image is signed as "code" in code section.
+ //
+ NvU32 bSignedAsCode;
+ //
+ // SMP (multihart) and PLIC (split interrupts)
+ // enablement options
+ //
+ NvU32 bIsSmp;
+ NvU32 bIsPlicEnabled;
+} RM_RISCV_UCODE_DESC;
+
+#endif // RM_RISCV_UCODE_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/rm_state_monitor.h b/userspace/sdks/nv570/nvalloc/common/inc/rm_state_monitor.h
new file mode 100644
index 0000000..e89fd16
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/rm_state_monitor.h
@@ -0,0 +1,72 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef RM_STATE_MONITOR_H
+#define RM_STATE_MONITOR_H
+
+// run every 100ms to prevent excessive CPU usage
+// as RM dump task runs as a higher priority task
+// than RM main task
+#define RM_STATE_MONITOR_WAIT_PERIOD (100000000) // 100ms
+
+typedef enum {
+ RM_STATE_MONITOR_HEADER_REQUEST_EXIT,
+ RM_STATE_MONITOR_HEADER_REQUEST_RM_STATE,
+ RM_STATE_MONITOR_HEADER_RESPONSE
+} RM_STATE_MONITOR_HEADER;
+
+typedef struct {
+ RM_STATE_MONITOR_HEADER header;
+} RM_STATE_MONITOR_REQUEST_MESSAGE;
+
+typedef struct {
+ NV_STATUS status;
+} RM_STATE_MONITOR_RESPONSE_MESSAGE;
+
+typedef union {
+ RM_STATE_MONITOR_REQUEST_MESSAGE request;
+ RM_STATE_MONITOR_RESPONSE_MESSAGE response;
+} RM_STATE_MONITOR_MESSAGE;
+
+#define RM_STATE_MONITOR_MAX_DPC_QUEUE_ITEMS 16
+#define RM_STATE_MONITOR_MAX_WORK_ITEMS 32
+#define RM_STATE_MONITOR_MAX_INTERRUPTS 32
+#define RM_STATE_MONITOR_MAX_ENINGE_BYTE_ARRAY (4)
+
+typedef struct {
+ NvU64 dpcQueue[RM_STATE_MONITOR_MAX_DPC_QUEUE_ITEMS][RM_STATE_MONITOR_MAX_ENINGE_BYTE_ARRAY];
+ NvU64 workItemsQueue[RM_STATE_MONITOR_MAX_WORK_ITEMS];
+ NvU64 lastDpcExecutionTime;
+ NvU64 totalDpcExecutionTime;
+ NvU64 lastWorkItemsExecutionTime;
+ NvU64 totalWorkItemsExecutionTime;
+ NvU64 interrupts[RM_STATE_MONITOR_MAX_INTERRUPTS]; //TODO: should this get set? will affect perf
+} RM_STATE_MONITOR_DATA;
+
+typedef struct {
+ NvU64 requestSequenceNumber;
+ NvU64 responseSequenceNumber;
+ RM_STATE_MONITOR_DATA data;
+} RM_STATE_MONITOR_BUFFER_LAYOUT;
+
+#endif
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/rmflcnbl.h b/userspace/sdks/nv570/nvalloc/common/inc/rmflcnbl.h
new file mode 100644
index 0000000..7a49306
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/rmflcnbl.h
@@ -0,0 +1,147 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2013-2019 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*!
+ * Data structures and interfaces used for generic falcon boot-loader.
+ *
+ * This generic boot-loader is designed to load both non-secure and
+ * secure code taking care of signature as well. This bootloader
+ * should be loaded at the end of the IMEM so that it doesnt overwrite
+ * itself when it tries to load the code into IMEM starting at blk 0.
+ * The data will be loaded into DMEM offset 0.
+ */
+
+#ifndef RMFLCNBL_H
+#define RMFLCNBL_H
+
+#include "flcnifcmn.h"
+
+/*!
+ * @brief Structure used by the boot-loader to load the rest of the code.
+ *
+ * This has to be filled by the GPU driver and copied into DMEM at offset
+ * provided in the @ref _def_rm_flcn_bl_desc.blDmemDescLoadOff.
+ */
+typedef struct _def_rm_flcn_bl_dmem_desc
+{
+ /*!
+ * reserved should be always first element
+ */
+ NvU32 reserved[4];
+ /*!
+ * signature should follow reserved 16B signature for secure code.
+ * 0s if no secure code
+ */
+ NvU32 signature[4];
+ /*!
+ * ctxDma is used by the bootloader while loading code/data.
+ */
+ NvU32 ctxDma;
+ /*!
+ * 256B aligned physical FB address where code is located.
+ */
+ RM_FLCN_U64 codeDmaBase;
+ /*!
+ * Offset from codeDmaBase where the nonSecure code is located.
+ * The offset must be multiple of 256 to help performance.
+ */
+ NvU32 nonSecureCodeOff;
+ /*!
+ * The size of the nonSecure code part.
+ */
+ NvU32 nonSecureCodeSize;
+ /*!
+ * Offset from codeDmaBase where the secure code is located.
+ * The offset must be multiple of 256 to help performance.
+ */
+ NvU32 secureCodeOff;
+ /*!
+ * The size of the ecure code part.
+ */
+ NvU32 secureCodeSize;
+ /*!
+ * Code entry point which will be invoked by BL after code is loaded.
+ */
+ NvU32 codeEntryPoint;
+ /*!
+ * 256B aligned Physical FB Address where data is located.
+ */
+ RM_FLCN_U64 dataDmaBase;
+ /*!
+ * Size of data block. Should be multiple of 256B.
+ */
+ NvU32 dataSize;
+ /*!
+ * Arguments to be passed to the target firmware being loaded.
+ */
+ NvU32 argc;
+ /*!
+ * Number of arguments to be passed to the target firmware being loaded.
+ */
+ NvU32 argv;
+} RM_FLCN_BL_DMEM_DESC, *PRM_FLCN_BL_DMEM_DESC;
+
+/*!
+ * @brief The header used by the GPU driver to figure out code and data
+ * sections of bootloader.
+ */
+typedef struct _def_rm_flcn_bl_img_header
+{
+ /*!
+ * Offset of code section in the image.
+ */
+ NvU32 blCodeOffset;
+ /*!
+ * Size of code section in the image.
+ */
+ NvU32 blCodeSize;
+ /*!
+ * Offset of data section in the image.
+ */
+ NvU32 blDataOffset;
+ /*!
+ * Size of data section in the image.
+ */
+ NvU32 blDataSize;
+} RM_FLCN_BL_IMG_HEADER, *PRM_FLCN_BL_IMG_HEADER;
+
+/*!
+ * @brief The descriptor used by RM to figure out the requirements of boot loader.
+ */
+typedef struct _def_rm_flcn_bl_desc
+{
+ /*!
+ * Starting tag of bootloader
+ */
+ NvU32 blStartTag;
+ /*!
+ * Dmem offset where _def_rm_flcn_bl_dmem_desc to be loaded
+ */
+ NvU32 blDmemDescLoadOff;
+ /*!
+ * Description of the image
+ */
+ RM_FLCN_BL_IMG_HEADER blImgHeader;
+} RM_FLCN_BL_DESC, *PRM_FLCN_BL_DESC;
+
+#endif // RMFLCNBL_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/rmgspseq.h b/userspace/sdks/nv570/nvalloc/common/inc/rmgspseq.h
new file mode 100644
index 0000000..5d130d6
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/rmgspseq.h
@@ -0,0 +1,66 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2019-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*!
+ * Top-level header-file that defines the GSP data structures used to request
+ * firmware load/execution by the CPU.
+ */
+
+#ifndef _RMGSPSEQ_H_
+#define _RMGSPSEQ_H_
+
+#include "rmflcnbl.h"
+
+/*!
+ * Structure for loading/executing generic bootloader
+ */
+typedef struct GspLoadExecGenericBootloaderParams
+{
+ RM_FLCN_BL_DMEM_DESC dmemDesc;
+ NvU32 dmemDescSize;
+ NvU32 addrSpace;
+ NvU32 cpuCacheAttrib;
+ NvU32 reserved[4];
+} GspLoadExecGenericBootloaderParams;
+
+/*!
+ * Structure for loading/executing HS binary
+ */
+typedef struct GspLoadExecHsBinaryParams
+{
+ NvU64 imemPhysAddr;
+ NvU64 dmemPhysAddr;
+ NvU64 reserved64[2];
+ NvU32 ucodeImemVA;
+ NvU32 ucodeImemPA;
+ NvU32 ucodeImemSize;
+ NvU32 ucodeDmemVA;
+ NvU32 ucodeDmemPA;
+ NvU32 ucodeDmemSize;
+ NvU32 hsSigDmemAddr;
+ NvU32 engineIdMask;
+ NvU32 ucodeId;
+ NvU32 reserved32[3];
+} GspLoadExecHsBinaryParams;
+
+#endif // _RMGSPSEQ_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/rmifrif.h b/userspace/sdks/nv570/nvalloc/common/inc/rmifrif.h
new file mode 100644
index 0000000..b774d02
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/rmifrif.h
@@ -0,0 +1,123 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2020-2012 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _RMIFRIF_H_
+#define _RMIFRIF_H_
+
+/*!
+ * @file rmifrif.h
+ * @brief Defines structures and interfaces common between RM and
+ * Init-From-Rom (IFR).
+ *
+ * For systems supporting GC6 that have on-board VBIOS ROMs, IFR is used
+ * to expedite several parts of GC6 exit in parallel with PEX init.
+ *
+ * After running devinit using a PMU ucode image loaded from the ROM itself,
+ * parts of RM stateLoad can be done using RM's ucode image. This is
+ * achieved by loading RM PMU ucode directly from FB. The primary difficulties
+ * are how to find RM's PMU ucode and how to bootstrap it.
+ *
+ * We use the simple approach of allocating a fixed buffer near the
+ * top of FB that contains the information required to bootstrap RM's PMU
+ * image. This buffer is called the RM_IFR_GC6_CTX.
+ *
+ * The buffer is allocated within RM's reserved memory space, directly before
+ * the VBIOS workspace (if any is present). Since the VBIOS workspace is
+ * always a multiple of 64K, RM enforces that the offset between top of memory
+ * and the end of the buffer is 64K. This way the IFR code can start
+ * from the top of memory and search downwards in 64K decrements.
+ *
+ * A small header is placed at the end of the buffer which contains a
+ * string signature identifying the buffer and other data needed to find the
+ * remaining context data.
+ *
+ * Top_Of-FB /---------------------\ <-
+ * | | \
+ * | (VBIOS_Workspace) | | END_OFFSET
+ * | | /
+ * |---------------------| <-
+ | | \
+ * | GSP FW (if present) | | pFbHalPvtInfo->gspFwSizeBytes
+ * | | /
+ * |---------------------| <-
+ * | RM_IFR_GC6_CTX_HDR | \
+ * |---------------------| |
+ * | (Padding) | | RM_IFR_GC6_CTX_HDR.bufferSize
+ * |---------------------| |
+ * | Sequence Data | /
+ * |---------------------| <-
+ * | |
+ * | |
+ * | |
+ * | |
+ * 0x00000000 \---------------------/
+ *
+ * To simplify the RM PMU bootstrap process and decrease IFR maintainence
+ * cost, the bootstrap process is encoded as a sequence script, leveraging
+ * a small subset of RM's PMU_SEQ_INST interface (see pmuseqinst.h).
+ * Register writes are captured during the initial (CPU-driven) RM PMU bootstrap
+ * and saved into a sequence for replay during GC6 exit.
+ *
+ * Only the following opcodes are supported currently:
+ * NV_PMU_SEQ_WRITE_REG_OPC - (multi-)register write
+ * NV_PMU_SEQ_EXIT_OPC - sequence done
+ *
+ */
+
+/*!
+ * Header structure which identifies the GC6 context buffer.
+ */
+typedef struct
+{
+ NvU8 signature[12]; // RM_IFR_GC6_CTX_SIGNATURE
+ NvU32 bufferSize; // Size of the entire context buffer in bytes
+ NvU32 seqSizeWords; // Number of 32-bit words of sequence data
+ NvU32 checksum; // 32-bit chunk checksum of the sequence data
+} RM_IFR_GC6_CTX_HDR, *PRM_IFR_GC6_CTX_HDR;
+
+/*!
+ * String signature that IFR searches for to find the GC6 context buffer.
+ */
+#define RM_IFR_GC6_CTX_SIGNATURE "GC6_CTX_HDR" // 12 bytes
+
+/*!
+ * Alignment of the offset between top of memory and the end of the
+ * GC6 context buffer (which is also the end of the header).
+ */
+#define RM_IFR_GC6_CTX_END_OFFSET_ALIGNMENT 0x10000 // 64KB
+
+/*!
+ * Maximum offset between top of memory and the end of the
+ * GC6 context buffer. This is meant to be a loose upper bound preventing
+ * scanning of the whole of memory (e.g. when something goes wrong).
+ */
+#define RM_IFR_GC6_CTX_END_OFFSET_MAX 0x1000000 // 16MB
+
+/*!
+ * Maximum size of the context data in bytes.
+ * This is limited by FECS falcon DMEM size (4K on Kepler).
+ * The buffer must fit within DMEM together with stack and other global data.
+ */
+#define RM_IFR_GC6_CTX_DATA_MAX_SIZE 2048 // 2KB
+
+#endif // _RMIFRIF_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/rmlsfm.h b/userspace/sdks/nv570/nvalloc/common/inc/rmlsfm.h
new file mode 100644
index 0000000..ca91911
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/rmlsfm.h
@@ -0,0 +1,579 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef RMLSFM_H
+#define RMLSFM_H
+
+/*****************************************************************************/
+/* This file is shared between ACR, SEC2 Binaries */
+/* Do not update this file without updating ACR/SEC2 */
+/*****************************************************************************/
+
+/*!
+ * @file rmlsfm.h
+ * @brief Top-level header-file that defines Light Secure Falcon Managment
+ SW shared interfaces.
+ */
+
+/*!
+ * READ/WRITE masks for WPR region
+ */
+#define LSF_WPR_REGION_RMASK (0xCU) // Readable only from level 2 and 3 client
+#define LSF_WPR_REGION_WMASK (0xCU) // Writable only from level 2 and 3 client
+#define LSF_WPR_REGION_RMASK_SUB_WPR_ENABLED (0x8) // Readable only from level 3 client
+#define LSF_WPR_REGION_WMASK_SUB_WPR_ENABLED (0x8) // Writable only from level 3 client
+#define LSF_WPR_REGION_ALLOW_READ_MISMATCH_NO (0x0) // Disallow read mis-match for all clients
+#define LSF_WPR_REGION_ALLOW_WRITE_MISMATCH_NO (0x0) // Disallow write mis-match for all clients
+
+/*!
+ * READ mask for WPR region on Tegra
+ * This is required until we update tegra binaries, Bug 200281517
+ * TODO: dgoyal - Remove this once tegra binaries are updated
+ */
+#define LSF_WPR_REGION_RMASK_FOR_TEGRA (0xFU)
+
+/*!
+ * Expected REGION ID to be used for the unprotected FB region (region that
+ * does not have read or write protections)
+ */
+#define LSF_UNPROTECTED_REGION_ID (0x0U)
+
+/*!
+ * Expected REGION ID to be used for the WPR region for the falcon microcode (includes data).
+ * ACR allots client requests to each region based on read/write masks and it is supposed
+ * to provide first priority to requests from LSFM. Providing first priority will naturally assign
+ * region ID 1 to LSFM and this define will provide a way for different parties to sanity check
+ * this fact. Also there are other falcons (FECS/video falcons) which depends on this define, so please
+ * be aware while modifying this.
+ */
+#define LSF_WPR_EXPECTED_REGION_ID (0x1U)
+
+/*!
+ * Expected REGION ID to be used for the unused WPR region.
+ */
+#define LSF_WPR_UNUSED_REGION_ID (0x2U)
+
+/*!
+ * Invalid LS falcon subWpr ID
+ */
+#define LSF_SUB_WPR_ID_INVALID (0xFFFFFFFFU)
+
+/*!
+ * Expected REGION ID to be used for the VPR region.
+ */
+#define LSF_VPR_REGION_ID (0x3U)
+
+/*!
+ * Expected REGION ID to be used for the CPR region with conf compute.
+ */
+#define LSF_CPR_REGION_ID (0x3U)
+
+/*!
+ * Size of the separate bootloader data that could be present in WPR region.
+ */
+#define LSF_LS_BLDATA_EXPECTED_SIZE (0x100U)
+
+/*!
+ * since we dont check signatures in GC6 exit, we need to hardcode the WPR offset
+ */
+#define LSF_WPR_EXPECTED_OFFSET (0x0U)
+
+/*!
+ * CTXDMA to be used while loading code/data in target falcons
+ */
+#define LSF_BOOTSTRAP_CTX_DMA_FECS (0x0)
+
+/*!
+ * Context DMA ID 6 is reserved for Video UCODE
+ */
+#define LSF_BOOTSTRAP_CTX_DMA_VIDEO (0x6)
+#define LSF_BOOTSTRAP_CTX_DMA_BOOTSTRAP_OWNER (0x0)
+#define LSF_BOOTSTRAP_CTX_DMA_FBFLCN (0x0)
+
+/*!
+ * Falcon Id Defines
+ * Defines a common Light Secure Falcon identifier.
+ * Codesigning infra. assumes LSF_FALCON_ID_ prefix for units,
+ * Changes to the define needs to be reflected in path [1]
+ * For new Falcon Id adding, we need to append to the end;
+ * don't insert the new falcon Id in the middle.
+ *
+ * @note If a newly added Falcon has multiple instances sharing
+ * the same Falcon Id, the LSF_FALCON_USES_INSTANCE macro
+ * need to be updated.
+ */
+#define LSF_FALCON_ID_PMU (0U)
+#define LSF_FALCON_ID_DPU (1U)
+#define LSF_FALCON_ID_GSPLITE LSF_FALCON_ID_DPU
+#define LSF_FALCON_ID_FECS (2U)
+#define LSF_FALCON_ID_GPCCS (3U)
+#define LSF_FALCON_ID_NVDEC (4U)
+#define LSF_FALCON_ID_NVENC (5U)
+#define LSF_FALCON_ID_NVENC0 (5U)
+#define LSF_FALCON_ID_NVENC1 (6U)
+#define LSF_FALCON_ID_SEC2 (7U)
+#define LSF_FALCON_ID_NVENC2 (8U)
+#define LSF_FALCON_ID_MINION (9U)
+#define LSF_FALCON_ID_FBFALCON (10U)
+#define LSF_FALCON_ID_XUSB (11U)
+#define LSF_FALCON_ID_GSP_RISCV (12U)
+#define LSF_FALCON_ID_PMU_RISCV (13U)
+#define LSF_FALCON_ID_SOE (14U)
+#define LSF_FALCON_ID_NVDEC1 (15U)
+#define LSF_FALCON_ID_OFA (16U)
+#define LSF_FALCON_ID_SEC2_RISCV (17U)
+#define LSF_FALCON_ID_NVDEC_RISCV (18U)
+#define LSF_FALCON_ID_NVDEC_RISCV_EB (19U)
+#define LSF_FALCON_ID_NVJPG (20U)
+#define LSF_FALCON_ID_FECS_RISCV (21U)
+#define LSF_FALCON_ID_GPCCS_RISCV (22U)
+#define LSF_FALCON_ID_NVJPG_RISCV_EB (23U)
+#define LSF_FALCON_ID_OFA_RISCV_EB (24U)
+#define LSF_FALCON_ID_NVENC_RISCV_EB (25U)
+#define LSF_FALCON_ID_PMU_RISCV_EB (26U)
+#define LSF_FALCON_ID_NVDEC0_RISCV_EB (27U)
+#define LSF_FALCON_ID_GSPLITE_RISCV_EB (28U)
+#define LSF_FALCON_ID_DISPLAY_RISCV_EB (29U)
+#define LSF_FALCON_ID_FBFALCON_RISCV_EB (30U)
+#define LSF_FALCON_ID_LPSEC (31U)
+#define LSF_FALCON_ID_END (32U)
+
+#define LSF_FALCON_ID_INVALID (0xFFFFFFFFU)
+
+//
+// TODO: Remove below Alias and add _EB Patching to macro LSF_FALCON_ID_FECS_RISCV, similarly for GPCCS,
+// and similar cleanups in RM since RISCV based CTXSW engines are to be booted externally.
+// Tracking in Bug 3808599
+//
+#define LSF_FALCON_ID_FECS_RISCV_EB (LSF_FALCON_ID_FECS_RISCV)
+#define LSF_FALCON_ID_GPCCS_RISCV_EB (LSF_FALCON_ID_GPCCS_RISCV)
+
+//
+// ************************ NOTIFICATION *********************************
+// In case anyone needs to add new LSF falconId, please must calculate
+// WPR header size per LSF_FALCON_ID_END. RM needs to call lsfmGetWprHeaderSizeMax_HAL
+// to align with acrReadSubWprHeader_HAL in ACR. Otherwise, ACR can't get correct
+// address to read sub wpr headers.
+// We observer in case LSF_FALCON_ID_END > 32 will cause SEC2 IMEM tag missing error;
+// but don't get the root cause yet.
+//
+#define LSF_FALCON_ID_END_15 (15U)
+#define LSF_FALCON_ID_END_17 (17U)
+#define LSF_FALCON_ID_END_18 (18U)
+#define LSF_FALCON_ID_END_21 (21U)
+#define LSF_FALCON_ID_END_30 (30U)
+
+#define LSF_FALCON_INSTANCE_DEFAULT_0 (0x0U)
+#define LSF_FALCON_INSTANCE_DEFAULT_3 (0x3U)
+#define LSF_FALCON_INSTANCE_DEFAULT_4 (0x4U)
+#define LSF_FALCON_INSTANCE_COUNT_DEFAULT_1 (0x1U)
+
+// Currently max supported instance is 24 for FECS/GPCCS SMC
+#define LSF_FALCON_INSTANCE_FECS_GPCCS_MAX (0x18U)
+#define LSF_FALCON_INSTANCE_INVALID (0xFFFFFFFFU)
+#define LSF_FALCON_INDEX_MASK_DEFAULT_0 (0x0U)
+
+/*!
+ * Checks if the LSF Falcon specified by falconId uses a falconInstance to uniquely identify itself.
+ * Some Falcons (eg: NVENC) use separate FalconId for each instance while some (eg: NVJPG)
+ * shares the same falconId across all instances of that engine. Those engines require a falconInstance
+ * to uniquely identify it.
+ * @note this macro should be updated as needed whenever LSF_FALCON_ID* defines are added. See Bug: 3833461
+ */
+#define LSF_FALCON_USES_INSTANCE(falconId) ((falconId == LSF_FALCON_ID_NVDEC_RISCV_EB) || \
+ (falconId == LSF_FALCON_ID_NVJPG) || \
+ (falconId == LSF_FALCON_ID_NVJPG_RISCV_EB) || \
+ (falconId == LSF_FALCON_ID_NVENC_RISCV_EB) || \
+ (falconId == LSF_FALCON_ID_FECS_RISCV_EB) || \
+ (falconId == LSF_FALCON_ID_GPCCS_RISCV_EB) || \
+ (falconId == LSF_FALCON_ID_GSPLITE_RISCV_EB) || \
+ (falconId == LSF_FALCON_ID_OFA_RISCV_EB) || \
+ (falconId == LSF_FALCON_ID_LPSEC))
+
+
+/*!
+ * Size in entries of the ucode descriptor's dependency map.
+ * This used to be LSF_FALCON_ID_END, but since that had to grow and we did not want to break any
+ * existing binaries, they had to be split.
+ *
+ * Increasing this number should be done with care.
+ */
+#define LSF_FALCON_DEPMAP_SIZE (11U)
+
+/*!
+ * Falcon Binaries version defines
+ */
+#define LSF_FALCON_BIN_VERSION_INVALID (0xFFFFFFFFU)
+
+
+/*!
+ * Light Secure Falcon Ucode Description Defines
+ * This stucture is prelim and may change as the ucode signing flow evolves.
+ */
+typedef struct
+{
+ NvU8 prdKeys[2][16];
+ NvU8 dbgKeys[2][16];
+ NvU32 bPrdPresent;
+ NvU32 bDbgPresent;
+ NvU32 falconId;
+ NvU32 bSupportsVersioning;
+ NvU32 version;
+ NvU32 depMapCount;
+ NvU8 depMap[LSF_FALCON_DEPMAP_SIZE * 2 * 4];
+ NvU8 kdf[16];
+} LSF_UCODE_DESC, *PLSF_UCODE_DESC;
+
+/*!
+ * Light Secure WPR Header
+ * Defines state allowing Light Secure Falcon bootstrapping.
+ *
+ * falconId - LS falcon ID
+ * lsbOffset - Offset into WPR region holding LSB header
+ * bootstrapOwner - Bootstrap OWNER (either PMU or SEC2)
+ * bLazyBootstrap - Skip bootstrapping by ACR
+ * status - Bootstrapping status
+ */
+typedef struct
+{
+ NvU32 falconId;
+ NvU32 lsbOffset;
+ NvU32 bootstrapOwner;
+ NvU32 bLazyBootstrap;
+ NvU32 binVersion;
+ NvU32 status;
+} LSF_WPR_HEADER, *PLSF_WPR_HEADER;
+
+/*!
+ * LSF shared SubWpr Header
+ *
+ * useCaseId - Shared SubWpr se case ID (updated by RM)
+ * startAddr - start address of subWpr (updated by RM)
+ * size4K - size of subWpr in 4K (updated by RM)
+ */
+typedef struct
+{
+ NvU32 useCaseId;
+ NvU32 startAddr;
+ NvU32 size4K;
+} LSF_SHARED_SUB_WPR_HEADER, *PLSF_SHARED_SUB_WPR_HEADER;
+
+// Shared SubWpr use case IDs
+typedef enum
+{
+ LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_FRTS_VBIOS_TABLES = 1,
+ LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_PLAYREADY_SHARED_DATA = 2,
+ LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_APM_RTS = 3
+} LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_ENUM;
+
+#define LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_MAX LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_APM_RTS
+#define LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_INVALID (0xFFFFFFFFU)
+
+#define MAX_SUPPORTED_SHARED_SUB_WPR_USE_CASES LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_MAX
+
+//
+// Static sizes of shared subWPRs
+// Minimum granularity supported is 4K
+//
+#define LSF_SHARED_DATA_SUB_WPR_FRTS_VBIOS_TABLES_SIZE_IN_4K (0x100) // 1MB in 4K
+#define LSF_SHARED_DATA_SUB_WPR_PLAYREADY_SHARED_DATA_SIZE_IN_4K (0x1) // 4K
+#define LSF_SHARED_DATA_SUB_WPR_APM_RTS_SIZE_IN_4K (0x1) // 4K
+
+/*!
+ * Bootstrap Owner Defines
+ */
+#define LSF_BOOTSTRAP_OWNER_PMU (LSF_FALCON_ID_PMU)
+#define LSF_BOOTSTRAP_OWNER_SEC2 (LSF_FALCON_ID_SEC2)
+#define LSF_BOOTSTRAP_OWNER_GSPLITE (LSF_FALCON_ID_GSPLITE)
+#define LSF_BOOTSTRAP_OWNER_DEFAULT LSF_BOOTSTRAP_OWNER_PMU
+
+/*!
+ * Image Status Defines
+ */
+#define LSF_IMAGE_STATUS_NONE (0U)
+#define LSF_IMAGE_STATUS_COPY (1U)
+#define LSF_IMAGE_STATUS_VALIDATION_CODE_FAILED (2U)
+#define LSF_IMAGE_STATUS_VALIDATION_DATA_FAILED (3U)
+#define LSF_IMAGE_STATUS_VALIDATION_DONE (4U)
+#define LSF_IMAGE_STATUS_VALIDATION_SKIPPED (5U)
+#define LSF_IMAGE_STATUS_BOOTSTRAP_READY (6U)
+#define LSF_IMAGE_STATUS_REVOCATION_CHECK_FAILED (7U)
+
+/*!
+ * Light Secure Bootstrap Header
+ * Defines state allowing Light Secure Falcon bootstrapping.
+ *
+ * signature - Code/data signature details for this LS falcon
+ * ucodeOffset - Offset into WPR region where UCODE is located
+ * ucodeSize - Size of ucode
+ * dataSize - Size of ucode data
+ * blCodeSize - Size of bootloader that needs to be loaded by bootstrap owner
+ * blImemOffset - BL starting virtual address. Need for tagging.
+ * blDataOffset - Offset into WPR region holding the BL data
+ * blDataSize - Size of BL data
+ * appCodeOffset - Offset into WPR region where Application UCODE is located
+ * appCodeSize - Size of Application UCODE
+ * appDataOffset - Offset into WPR region where Application DATA is located
+ * appDataSize - Size of Application DATA
+ * blLoadCodeAt0 - Load BL at 0th IMEM offset
+ * bSetVACtx - Make sure to set the code/data loading CTX DMA to be virtual before exiting
+ * bDmaReqCtx - This falcon requires a ctx before issuing DMAs
+ * bForcePrivLoad- Use priv loading method instead of bootloader/DMAs
+ */
+
+#define NV_FLCN_ACR_LSF_FLAG_LOAD_CODE_AT_0 0:0
+#define NV_FLCN_ACR_LSF_FLAG_LOAD_CODE_AT_0_FALSE 0
+#define NV_FLCN_ACR_LSF_FLAG_LOAD_CODE_AT_0_TRUE 1
+#define NV_FLCN_ACR_LSF_FLAG_SET_VA_CTX 1:1
+#define NV_FLCN_ACR_LSF_FLAG_SET_VA_CTX_FALSE 0
+#define NV_FLCN_ACR_LSF_FLAG_SET_VA_CTX_TRUE 1
+#define NV_FLCN_ACR_LSF_FLAG_DMACTL_REQ_CTX 2:2
+#define NV_FLCN_ACR_LSF_FLAG_DMACTL_REQ_CTX_FALSE 0
+#define NV_FLCN_ACR_LSF_FLAG_DMACTL_REQ_CTX_TRUE 1
+#define NV_FLCN_ACR_LSF_FLAG_FORCE_PRIV_LOAD 3:3
+#define NV_FLCN_ACR_LSF_FLAG_FORCE_PRIV_LOAD_FALSE 0
+#define NV_FLCN_ACR_LSF_FLAG_FORCE_PRIV_LOAD_TRUE 1
+typedef struct
+{
+ LSF_UCODE_DESC signature;
+ NvU32 ucodeOffset;
+ NvU32 ucodeSize;
+ NvU32 dataSize;
+ NvU32 blCodeSize;
+ NvU32 blImemOffset;
+ NvU32 blDataOffset;
+ NvU32 blDataSize;
+ NvU32 appCodeOffset;
+ NvU32 appCodeSize;
+ NvU32 appDataOffset;
+ NvU32 appDataSize;
+ NvU32 flags;
+ /*
+ * TODO: Uncomment this once Sanket's changes
+ * of HALifying is done
+ NvU32 monitorCodeOffset;
+ NvU32 monitorDataOffset;
+ NvU32 manifestOffset;
+ */
+} LSF_LSB_HEADER, *PLSF_LSB_HEADER;
+
+
+/*!
+ * Light Secure WPR Content Alignments
+ */
+#define LSF_WPR_HEADER_ALIGNMENT (256U)
+#define LSF_SUB_WPR_HEADER_ALIGNMENT (256U)
+#define LSF_LSB_HEADER_ALIGNMENT (256U)
+#define LSF_BL_DATA_ALIGNMENT (256U)
+#define LSF_BL_DATA_SIZE_ALIGNMENT (256U)
+#define LSF_BL_CODE_SIZE_ALIGNMENT (256U)
+#define LSF_DATA_SIZE_ALIGNMENT (256U)
+#define LSF_CODE_SIZE_ALIGNMENT (256U)
+
+// MMU excepts subWpr sizes in units of 4K
+#define SUB_WPR_SIZE_ALIGNMENT (4096U)
+
+/*!
+ * Maximum WPR Header size
+ */
+#define LSF_WPR_HEADERS_TOTAL_SIZE_MAX (NV_ALIGN_UP((sizeof(LSF_WPR_HEADER) * LSF_FALCON_ID_END), LSF_WPR_HEADER_ALIGNMENT))
+#define LSF_LSB_HEADER_TOTAL_SIZE_MAX (NV_ALIGN_UP(sizeof(LSF_LSB_HEADER), LSF_LSB_HEADER_ALIGNMENT))
+
+//
+// PMU OBJACR_ALIGNED_256 size will vary with LSF_FALCON_ID_END.
+// PMU could run out of DMEM in case we increase LSF_FALCON_ID_END more and more.
+// The PMU supports the ACR task on GM20X_thru_VOLTA profiles only.
+// In order to prevent LSF_FALCON_ID_END changes to affect older / shipped PMU ucodes (increase of DMEM footprint)
+// adding PMU specific ***_END define capturing value covering all PMU profiles that this with the ACR task.
+//
+#define LSF_FALCON_ID_END_PMU (LSF_FALCON_ID_FBFALCON + 1)
+#define LSF_WPR_HEADERS_TOTAL_SIZE_MAX_PMU (NV_ALIGN_UP((sizeof(LSF_WPR_HEADER) * LSF_FALCON_ID_END_PMU), LSF_WPR_HEADER_ALIGNMENT))
+
+//
+// In order to prevent LSF_FALCON_ID_END changes to affect older / shipped SEC2/ACR ucodes (increase of DMEM footprint)
+// adding SEC2/ACR specific ***_END define covering all supported falcons in pre-hopper SEC2-RTOS/ACR ucode.
+//
+#define LSF_FALCON_ID_END_ACR_ON_SEC2 (LSF_FALCON_ID_NVJPG + 1)
+#define LSF_WPR_HEADERS_TOTAL_SIZE_MAX_ACR_ON_SEC2 (NV_ALIGN_UP((sizeof(LSF_WPR_HEADER) * LSF_FALCON_ID_END_ACR_ON_SEC2), LSF_WPR_HEADER_ALIGNMENT))
+
+// Maximum SUB WPR header size
+#define LSF_SUB_WPR_HEADERS_TOTAL_SIZE_MAX (NV_ALIGN_UP((sizeof(LSF_SHARED_SUB_WPR_HEADER) * LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_MAX), LSF_SUB_WPR_HEADER_ALIGNMENT))
+
+/*!
+ * For the ucode surface alignment, We align to RM_PAGE_SIZE because of
+ * busMapRmAperture issues, not because of Falcon ucode alignment requirements
+ * which currently are that it be at least 256.
+ */
+#define LSF_UCODE_DATA_ALIGNMENT RM_PAGE_SIZE
+
+/*!
+ * ACR Descriptors used by ACR UC
+ */
+
+/*!
+ * Supporting maximum of 2 regions.
+ * This is needed to pre-allocate space in DMEM
+ */
+#define RM_FLCN_ACR_MAX_REGIONS (2)
+#define LSF_BOOTSTRAP_OWNER_RESERVED_DMEM_SIZE (0x200)
+
+/*!
+ * startAddress - Starting address of region
+ * endAddress - Ending address of region
+ * regionID - Region ID
+ * readMask - Read Mask
+ * writeMask - WriteMask
+ * clientMask - Bit map of all clients currently using this region
+ * shadowMemStartAddress- FB location from where contents need to be copied to startAddress
+ */
+typedef struct _def_acr_dmem_region_prop
+{
+ NvU32 startAddress;
+ NvU32 endAddress;
+ NvU32 regionID;
+ NvU32 readMask;
+ NvU32 writeMask;
+ NvU32 clientMask;
+ NvU32 shadowMemStartAddress;
+} RM_FLCN_ACR_REGION_PROP, *PRM_FLCN_ACR_REGION_PROP;
+
+
+/*!
+ * noOfRegions - Number of regions used by RM.
+ * regionProps - Region properties
+ */
+typedef struct _def_acr_regions
+{
+ NvU32 noOfRegions;
+ RM_FLCN_ACR_REGION_PROP regionProps[RM_FLCN_ACR_MAX_REGIONS];
+} RM_FLCN_ACR_REGIONS, *PRM_FLCN_ACR_REGIONS;
+
+/*!
+ * bVprEnabled : When set, ACR_LOCKDOWN phase programs VPR range. Needs to be
+ : NvU32 because of alignment
+ * vprStartAddress : Start address of VPR region. SEC2 binary updates this value
+ * vprEndAddress : End address of VPR region. SEC2 binary updates this value
+ * hdcpPolicies : VPR display policies. SEC2 binary updates this value
+ */
+typedef struct _def_acr_vpr_dmem_desc
+{
+ NvU32 bVprEnabled;
+ NvU32 vprStartAddress;
+ NvU32 vprEndAddress;
+ NvU32 hdcpPolicies;
+} ACR_BSI_VPR_DESC, *PACR_BSI_VPR_DESC;
+
+/*!
+ * reservedDmem - When the bootstrap owner has done bootstrapping other falcons,
+ * and need to switch into LS mode, it needs to have its own actual
+ * DMEM image copied into DMEM as part of LS setup. If ACR desc is at
+ * location 0, it will definitely get overwritten causing data corruption.
+ * Hence we are reserving 0x200 bytes to give room for any loading data.
+ * NOTE: This has to be the first member always
+ * signature - Signature of ACR ucode.
+ * wprRegionID - Region ID holding the WPR header and its details
+ * wprOffset - Offset from the WPR region holding the wpr header
+ * regions - Region descriptors
+ * ucodeBlobBase- Used for Tegra, stores non-WPR start address where kernel stores ucode blob
+ * ucodeBlobSize- Used for Tegra, stores the size of the ucode blob
+ */
+typedef struct _def_acr_dmem_desc
+{
+ NvU32 signatures[4];
+ NvU32 wprRegionID;
+ NvU32 wprOffset;
+ NvU32 mmuMemoryRange;
+ RM_FLCN_ACR_REGIONS regions;
+ NvU32 ucodeBlobSize;
+ // uCodeBlobBase is moved after ucodeBlobSize to inherently align to qword (8 bytes)
+ NvU64 NV_DECLARE_ALIGNED(ucodeBlobBase, 8);
+
+ /*!
+ * Do not change the offset of this descriptor as it shared between
+ * ACR_REGION_LOCKDOWN HS binary and SEC2. Any change in this structure
+ * need recompilation of SEC2 and ACR_LOCKDOWN HS binary
+ */
+ ACR_BSI_VPR_DESC vprDesc;
+} RM_FLCN_ACR_DESC, *PRM_FLCN_ACR_DESC;
+
+/*!
+* Hub keys/nonce Structure in BSI
+*/
+#define MAX_SFBHUB_ENCRYPTION_REGION_KEY_SIZE 4
+
+typedef struct _def_acr_hub_scratch_data
+{
+ NvU32 key[MAX_SFBHUB_ENCRYPTION_REGION_KEY_SIZE];
+ NvU32 nonce[MAX_SFBHUB_ENCRYPTION_REGION_KEY_SIZE];
+} ACR_BSI_HUB_DESC, *PACR_BSI_HUB_DESC;
+
+#define MAX_HUB_ENCRYPTION_REGION_COUNT 3
+typedef struct _def_acr_hub_scratch_array
+{
+ ACR_BSI_HUB_DESC entries[MAX_HUB_ENCRYPTION_REGION_COUNT];
+} ACR_BSI_HUB_DESC_ARRAY, *PACR_BSI_HUB_DESC_ARRAY;
+
+typedef struct _def_acr_reserved_dmem
+{
+ NvU32 reservedDmem[(LSF_BOOTSTRAP_OWNER_RESERVED_DMEM_SIZE/4)]; // Always first..
+} ACR_RESERVED_DMEM, *PACR_RESERVED_DMEM;
+
+typedef struct _def_booter_reserved_dmem
+{
+ NvU32 reservedDmem[(LSF_BOOTSTRAP_OWNER_RESERVED_DMEM_SIZE/4)]; // Always first..
+} BOOTER_RESERVED_DMEM;
+
+#define NV_FLCN_ACR_DESC_FLAGS_SIG_VERIF 0:0
+#define NV_FLCN_ACR_DESC_FLAGS_SIG_VERIF_DISABLE 0
+#define NV_FLCN_ACR_DESC_FLAGS_SIG_VERIF_ENABLE 1
+
+// Macro defines to be consumed by RM to get GH100 GSP Inst_in_sys FMC boot status.
+#define GSP_INST_IN_SYS_COMPLETION_STATUS_OK 0x55
+#define GSP_INST_IN_SYS_COMPLETION_STATUS_ERROR 0xAA
+#define GSP_INST_IN_SYS_COMPLETION_STATUS_IN_PROGRESS 0x00
+
+/*!
+ * Size of ACR phase in dword
+ */
+#define ACR_PHASE_SIZE_DWORD sizeof(RM_FLCN_ACR_DESC)/sizeof(NvU32)
+
+/*!
+ * Falcon Mode Tokens
+ * This is the value logged to a mailbox register to indicate that the
+ * falcon isn't booted in secure mode.
+ */
+#define LSF_FALCON_MODE_TOKEN_FLCN_INSECURE (0xDEADDEADU)
+
+
+// LS encryption context, to store data to decrypt LS images.
+#define LS_ENCRYPTION_AES128_CBC_IV_SIZE_BYTE (16)
+
+typedef struct
+{
+ NvU8 bLsEncrypted;
+ NvU8 rsvd[3];
+ NvU8 lsEncIV[LS_ENCRYPTION_AES128_CBC_IV_SIZE_BYTE];
+} LSF_ENCRYPTION_CONTEXT, *PLSF_ENCRYPTION_CONTEXT;
+
+#endif // RMLSFM_H
+
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/rmpbicmdif.h b/userspace/sdks/nv570/nvalloc/common/inc/rmpbicmdif.h
new file mode 100644
index 0000000..cd4d092
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/rmpbicmdif.h
@@ -0,0 +1,140 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2009-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*!
+ * Shared postbox interface defines for RM and PMU.
+ */
+
+#ifndef RMPBICMDIF_H
+#define RMPBICMDIF_H
+
+/*
+ * Define the status of postbox interface at different instances.
+ *
+ * The values should be in accordance to the spec and must not be changed.
+ * A new PBI command must be submitted with the status NV_PBI_COMMAND_STATUS_UNDEFINED.
+ */
+
+#define NV_PBI_COMMAND_STATUS 7:0
+#define NV_PBI_COMMAND_STATUS_UNDEFINED 0x00 // command submitted to PMU
+#define NV_PBI_COMMAND_STATUS_SUCCESS 0x01 // command successfully completed by PMU
+#define NV_PBI_COMMAND_STATUS_PENDING 0x02 // command accepted by PMU
+#define NV_PBI_COMMAND_STATUS_BUSY 0x03 // command processing in PMU
+#define NV_PBI_COMMAND_STATUS_UNSPECIFIED_FAILURE 0x04 // unknown failure or hang
+#define NV_PBI_COMMAND_STATUS_INVALID_ADDRESS 0x05 // invalid address submitted to PMU
+#define NV_PBI_COMMAND_STATUS_MORE_DATA 0x06 // user needs to send more data to PMU
+#define NV_PBI_COMMAND_STATUS_INVALID_COMMAND 0x07 // invalid command submitted
+
+/*
+ * This corresponds to reserved bits of command register
+ */
+#define NV_PBI_COMMAND_RSVD_0 15:8
+#define NV_PBI_COMMAND_RSVD_0_VAL 0x00
+
+/*
+ * This specifies the dword index if client is sending multiple dwords
+ * for single Dword this should be zero
+ */
+#define NV_PBI_COMMAND_BUFFER_INDEX 19:16
+
+/*
+ * This specifies the total no. of dwords passed by client
+ */
+#define NV_PBI_COMMAND_BUFFER_SIZE 23:20
+
+/*
+ * These corresponds the different function ID's supported out of PBI
+ */
+#define NV_PBI_COMMAND_FUNC_ID 27:24
+#define NV_PBI_COMMAND_FUNC_ID_GET_CAPABILITIES (0)
+#define NV_PBI_COMMAND_FUNC_ID_EXECUTE_ROUTINE (11)
+
+//
+// Definitions for common 'Execute Routine' calls that are
+// shared across all GPUs.
+//
+// Common routine IDs must be in the range 0x80 to 0xff.
+//
+// Get GID:
+#define NV_PBI_EXECUTE_ROUTINE_GET_GID 0x80
+// Get Feature:
+#define NV_PBI_EXECUTE_ROUTINE_GET_FEATURE 0x81
+#define NV_PBI_EXECUTE_ROUTINE_GET_FEATURE_EXCLUSION 5:0
+#define NV_PBI_EXECUTE_ROUTINE_GET_FEATURE_EXCLUSION_ALLOWED 0x2
+
+/*
+ * This corresponds to reserved field of command register
+ */
+#define NV_PBI_COMMAND_RSVD_1 28:28
+#define NV_PBI_COMMAND_RSVD_1_VAL 0x00
+
+/*
+ * If this bit is set system will be notified on command completion
+ */
+#define NV_PBI_COMMAND_SYS_NOTIFY 29:29
+#define NV_PBI_COMMAND_SYS_NOTIFY_TRUE 0x01
+#define NV_PBI_COMMAND_SYS_NOTIFY_FALSE 0x00
+
+/*
+ * If this bit is set driver will be notified of command completion status
+ */
+#define NV_PBI_COMMAND_DRV_NOTIFY 30:30
+#define NV_PBI_COMMAND_DRV_NOTIFY_TRUE 0x01
+#define NV_PBI_COMMAND_DRV_NOTIFY_FALSE 0x00
+
+/*
+ * Defines the interrupt state of the PBI command
+ */
+#define NV_PBI_COMMAND_INTERRUPT 31:31
+#define NV_PBI_COMMAND_INTERRUPT_TRUE 0x01
+#define NV_PBI_COMMAND_INTERRUPT_FALSE 0x00
+
+/*
+ * This sets the different fields of command register
+ */
+#define PBI_SET_COMMAND_PARAMS(status, r0, index, sz, cmd, r1, sys, \
+ drv, intr, val) \
+{ \
+ val = DRF_NUM(_PBI, _COMMAND, _STATUS, status) | \
+ DRF_NUM(_PBI, _COMMAND, _RSVD_0, r0) | \
+ DRF_NUM(_PBI, _COMMAND, _BUFFER_INDEX, index) | \
+ DRF_NUM(_PBI, _COMMAND, _BUFFER_SIZE, sz) | \
+ DRF_NUM(_PBI, _COMMAND, _FUNC_ID, cmd) | \
+ DRF_NUM(_PBI, _COMMAND, _RSVD_1, r1) | \
+ DRF_NUM(_PBI, _COMMAND, _SYS_NOTIFY, sys) | \
+ DRF_NUM(_PBI, _COMMAND, _DRV_NOTIFY, drv) | \
+ DRF_NUM(_PBI, _COMMAND, _INTERRUPT, intr); \
+}
+
+/*
+ * postbox_clients_mutex_id
+ *
+ * Define the Mutex ID for different PBI clients
+ */
+enum postbox_clients_mutex_id
+{
+ PBI_CLIENT_NONE = 0x00,
+ PBI_CLIENT_DRIVER_PCIPBI_SHIM = 0x15
+};
+
+#endif /* RMPBICMDIF_H */
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/sec2/nvdm_payload_cmd_response.h b/userspace/sdks/nv570/nvalloc/common/inc/sec2/nvdm_payload_cmd_response.h
new file mode 100644
index 0000000..fa117aa
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/sec2/nvdm_payload_cmd_response.h
@@ -0,0 +1,44 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * @file nvdm_payload_cmd_response.h
+ * @brief Header file containing the definition for the
+ * NVDM_PAYLOAD_COMMAND_RESPONSE structure, which
+ * is required for SMBPBI-specific payloads and needs
+ * to be visible by bothe the PMU and the driver sides.
+ */
+
+#ifndef _NVDM_PAYLOAD_CMD_RESPONSE_H
+#define _NVDM_PAYLOAD_CMD_RESPONSE_H
+
+#pragma pack(1)
+typedef struct
+{
+ NvU32 taskId;
+ NvU32 commandNvdmType;
+ NvU32 errorCode;
+} NVDM_PAYLOAD_COMMAND_RESPONSE;
+#pragma pack()
+
+#endif // _NVDM_PAYLOAD_CMD_RESPONSE_H
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/sec2/sec2_emem_channels.h b/userspace/sdks/nv570/nvalloc/common/inc/sec2/sec2_emem_channels.h
new file mode 100644
index 0000000..3681f24
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/sec2/sec2_emem_channels.h
@@ -0,0 +1,39 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _SEC2_EMEM_CHANNELS_H_
+#define _SEC2_EMEM_CHANNELS_H_
+
+//
+// NVDM (NVIDIA Data Model) overlayed on MCTP (Management Component Transport
+// Protocol) and sent over EMEM is the communication mechanism used between SEC2
+// management partition and CPU-RM/other uprocs.
+//
+
+// RM uses channel 0 for SEC2 EMEM.
+#define SEC2_EMEM_CHANNEL_RM 0x0
+
+// EMEM channel 0 (RM) is allocated 1K bytes.
+#define SEC2_EMEM_CHANNEL_RM_SIZE 1024
+
+#endif // _SEC2_EMEM_CHANNELS_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmrsakeys.h b/userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmrsakeys.h
new file mode 100644
index 0000000..882497b
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmrsakeys.h
@@ -0,0 +1,160 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*!
+ * @file rmspdmrsakeys.h
+ * @brief SPDM Interfaces - RSA keys
+ */
+
+#ifndef _RM_SPDM_RSA_KEYS_H_
+#define _RM_SPDM_RSA_KEYS_H_
+
+//
+// Note !!
+// All key components order must be big-endian(network order).
+// If any change for these key components, need to rebuild GSP/RM code as well.
+//
+#ifndef USE_MBEDTLS
+
+const NvU8 g_rsa3k_modulus_mutual_authentication_prod[] =
+{
+ 0xcd, 0x65, 0xd2, 0xca, 0x74, 0xd1, 0x76, 0x76, 0x9f, 0x18, 0x23, 0x64, 0x55, 0x84, 0x98, 0x60,
+ 0x71, 0xeb, 0x42, 0x6d, 0xa4, 0x98, 0xf9, 0x92, 0xea, 0x83, 0x5b, 0x9b, 0xe2, 0x66, 0x8b, 0x43,
+ 0x14, 0x4d, 0x5a, 0xb8, 0xdb, 0x68, 0x2b, 0xfa, 0x5f, 0xdf, 0x7f, 0xf4, 0xfd, 0x5e, 0x42, 0x34,
+ 0x09, 0x98, 0xa1, 0x21, 0x98, 0x4c, 0x8d, 0xbc, 0x99, 0xdb, 0xea, 0xc1, 0xe3, 0x42, 0xe6, 0x67,
+ 0x26, 0x86, 0x2c, 0xd0, 0xdb, 0xf3, 0x9c, 0x12, 0xad, 0xb3, 0x82, 0x93, 0x9c, 0xb9, 0xae, 0x98,
+ 0x82, 0xeb, 0x59, 0xb6, 0x5c, 0x09, 0x9f, 0xa6, 0x15, 0x30, 0xa0, 0xc6, 0x77, 0xd5, 0xae, 0xa2,
+ 0x91, 0x65, 0x24, 0xc3, 0x7d, 0x9b, 0xa4, 0x2c, 0x31, 0x73, 0x41, 0x26, 0x72, 0xe7, 0x2f, 0xb8,
+ 0x60, 0xd8, 0xce, 0xb8, 0xd8, 0x4b, 0x90, 0x6c, 0xa3, 0x19, 0x7e, 0x2b, 0xd5, 0xf6, 0x05, 0x8a,
+ 0x2b, 0xb9, 0x9e, 0x27, 0xba, 0x2e, 0x16, 0x81, 0x9a, 0x9e, 0xf5, 0x6c, 0x38, 0x0a, 0x01, 0xea,
+ 0xd6, 0xe1, 0xa4, 0x83, 0x76, 0xd0, 0x68, 0xbb, 0x90, 0x63, 0xce, 0x1c, 0x8c, 0x6f, 0x0f, 0x6b,
+ 0x65, 0x5b, 0x12, 0xe2, 0x92, 0x60, 0x79, 0x88, 0x99, 0x5e, 0x17, 0x89, 0x4d, 0x54, 0xb1, 0x87,
+ 0x9c, 0xe6, 0x6d, 0x3c, 0x56, 0x1c, 0x3a, 0x3e, 0xb9, 0x16, 0x2c, 0xc8, 0xda, 0x1a, 0xfb, 0x5c,
+ 0xd7, 0x16, 0x3c, 0x74, 0xda, 0x78, 0xf1, 0x53, 0xd7, 0x66, 0x97, 0x8a, 0x57, 0x0b, 0x86, 0x57,
+ 0x2c, 0x45, 0xa1, 0x5e, 0xae, 0x39, 0x39, 0xde, 0xe0, 0x40, 0x6f, 0xdb, 0x4c, 0xd8, 0xc1, 0x8c,
+ 0xdb, 0xce, 0xea, 0x05, 0xc0, 0xbc, 0x89, 0x72, 0x15, 0xfd, 0xbf, 0xb2, 0xb7, 0xf2, 0x5d, 0x05,
+ 0xdd, 0x2b, 0x53, 0xa4, 0x03, 0x1e, 0x11, 0x67, 0xa7, 0x0f, 0x87, 0xfb, 0x57, 0x48, 0x91, 0xc8,
+ 0x02, 0xb7, 0x46, 0x3d, 0x82, 0xcd, 0x06, 0x4a, 0x79, 0x0f, 0xa5, 0x8a, 0xac, 0xfb, 0xb7, 0xc2,
+ 0xf0, 0x95, 0x19, 0x4c, 0x78, 0x7a, 0xc7, 0xd7, 0x70, 0xee, 0x6e, 0x59, 0xaf, 0x51, 0x9b, 0x11,
+ 0x03, 0xd3, 0x56, 0xb3, 0x05, 0x5a, 0xbb, 0x1f, 0xbd, 0xc2, 0x0e, 0x89, 0x77, 0xb4, 0xc1, 0x02,
+ 0xf9, 0x97, 0x56, 0x07, 0x2e, 0x4e, 0x2d, 0x01, 0x73, 0x89, 0x7d, 0xf3, 0xc9, 0x8c, 0x88, 0x2c,
+ 0x79, 0xd9, 0x47, 0x34, 0x9e, 0x32, 0x51, 0xd4, 0xa6, 0x7e, 0xd1, 0x08, 0xda, 0xc0, 0x76, 0x24,
+ 0x8e, 0x25, 0x73, 0x14, 0x30, 0xd2, 0x17, 0x37, 0xbc, 0xe0, 0x3e, 0xa2, 0x47, 0xff, 0xe2, 0x4e,
+ 0x9b, 0x31, 0x6c, 0xe6, 0x54, 0xaf, 0x62, 0x3a, 0xcd, 0xfa, 0x2f, 0xaf, 0x73, 0x2e, 0x73, 0x4a,
+ 0x3a, 0x60, 0xa8, 0xa9, 0xfc, 0x77, 0xb2, 0x57, 0xdd, 0x3a, 0xfa, 0xce, 0x35, 0xc3, 0xea, 0xa9
+};
+
+const NvU8 g_rsa3k_public_exponent_mutual_authentication_prod[] = {0x00, 0x01, 0x00, 0x01};
+
+const NvU8 g_rsa3k_private_exponent_mutual_authentication_prod[] =
+{
+ 0x04, 0x85, 0xc0, 0x6d, 0x6a, 0xc3, 0x0d, 0xeb, 0xb0, 0xb7, 0x14, 0x58, 0x6a, 0x35, 0xa0, 0x31,
+ 0x47, 0x70, 0xd9, 0xa6, 0x96, 0x60, 0x33, 0xe6, 0x93, 0x39, 0x4f, 0x34, 0x10, 0x79, 0x17, 0x89,
+ 0xe3, 0x91, 0x8c, 0x74, 0xd3, 0x87, 0xe8, 0xa7, 0xfb, 0xa2, 0x6d, 0x2b, 0xd4, 0xc4, 0x55, 0x8a,
+ 0xd5, 0xc7, 0x41, 0x8c, 0xfe, 0xd0, 0x78, 0xb2, 0x75, 0x64, 0xcd, 0x37, 0x75, 0xac, 0x8c, 0x6c,
+ 0x2b, 0x01, 0xfb, 0x4c, 0xa1, 0xfb, 0x2c, 0x2d, 0x91, 0x1b, 0x89, 0xbd, 0x7c, 0x4e, 0xee, 0x54,
+ 0x37, 0x55, 0xbd, 0x44, 0xf1, 0xa3, 0xd8, 0x9b, 0x0c, 0x8e, 0x64, 0x8b, 0xda, 0x29, 0x9f, 0x4d,
+ 0xbf, 0x0b, 0xce, 0x12, 0x6b, 0xda, 0x98, 0x73, 0xcc, 0xa6, 0xf0, 0x01, 0x4b, 0xb8, 0x61, 0x69,
+ 0x9a, 0xe0, 0x4b, 0x34, 0xf0, 0xb6, 0x41, 0x38, 0xd3, 0x22, 0x85, 0x8f, 0xab, 0x87, 0x5e, 0x39,
+ 0xdb, 0x9a, 0x9b, 0xab, 0xde, 0x42, 0x93, 0x86, 0x49, 0x04, 0x44, 0xfd, 0x1c, 0x02, 0xc4, 0x66,
+ 0x0a, 0x53, 0x2f, 0x8f, 0x21, 0x77, 0x97, 0x46, 0xc1, 0xf8, 0x20, 0x9a, 0xaa, 0x50, 0xeb, 0xb2,
+ 0xfe, 0xa9, 0x51, 0xb2, 0x21, 0x6c, 0xf4, 0x60, 0x18, 0x98, 0x64, 0xc6, 0x46, 0x28, 0x9e, 0x3c,
+ 0x11, 0x2d, 0x55, 0xac, 0x65, 0x6c, 0xfb, 0xaf, 0x53, 0xdd, 0xf4, 0x20, 0x7c, 0x04, 0xea, 0x11,
+ 0xe8, 0x25, 0x65, 0x15, 0x32, 0x8e, 0x08, 0x84, 0xc7, 0x41, 0x13, 0x58, 0x73, 0x61, 0x63, 0x1f,
+ 0xef, 0x30, 0x1d, 0x3d, 0x36, 0x08, 0x3a, 0xb2, 0xf7, 0x25, 0x56, 0xfc, 0x03, 0x78, 0xb5, 0x45,
+ 0xf4, 0x60, 0x47, 0x95, 0x1c, 0x6a, 0x2b, 0xfa, 0xe3, 0x1c, 0x2f, 0x0d, 0x2a, 0x90, 0x43, 0x65,
+ 0x09, 0xbe, 0x63, 0x71, 0x33, 0xd3, 0x29, 0x31, 0xd5, 0x29, 0x26, 0xa3, 0x15, 0xc2, 0x46, 0x70,
+ 0xb4, 0x3e, 0x23, 0xaf, 0xb6, 0xfb, 0x87, 0x8f, 0x39, 0xf0, 0xd2, 0x3e, 0x35, 0x3c, 0xec, 0x7a,
+ 0xd2, 0x0f, 0xd8, 0xa4, 0x0c, 0x19, 0xc8, 0xee, 0x47, 0x7c, 0x1e, 0xd6, 0x67, 0x31, 0xe2, 0x9d,
+ 0xc0, 0x65, 0x64, 0x60, 0xe7, 0xd2, 0xeb, 0xe1, 0x02, 0xd5, 0x92, 0x7c, 0x51, 0xf1, 0x3b, 0x12,
+ 0x00, 0x65, 0xfd, 0x2b, 0x13, 0x15, 0xfa, 0x6d, 0x99, 0x1d, 0xd3, 0x03, 0x77, 0xb1, 0xb0, 0xf0,
+ 0x39, 0x7c, 0x27, 0x13, 0x30, 0xba, 0xff, 0x4d, 0x2e, 0xda, 0xe0, 0x37, 0xad, 0xf4, 0x49, 0x0a,
+ 0xdd, 0x1e, 0x87, 0x8c, 0xc9, 0x6b, 0xf8, 0xc6, 0xb3, 0x05, 0xeb, 0x6c, 0x5f, 0x84, 0x64, 0x62,
+ 0x1c, 0xf6, 0x04, 0x6f, 0xd7, 0xa9, 0xbc, 0x22, 0x97, 0xdb, 0x8d, 0xa5, 0xe1, 0x3a, 0x5c, 0x0d,
+ 0x7b, 0x78, 0x25, 0x98, 0x04, 0x7f, 0x2b, 0x59, 0x5b, 0x7c, 0xf7, 0x73, 0x37, 0x7f, 0x92, 0x8d
+};
+
+#else
+
+const NvU8 g_rsa3k_modulus_mutual_authentication_prod[] =
+{
+ 0xa9, 0xea, 0xc3, 0x35, 0xce, 0xfa, 0x3a, 0xdd, 0x57, 0xb2, 0x77, 0xfc, 0xa9, 0xa8, 0x60, 0x3a,
+ 0x4a, 0x73, 0x2e, 0x73, 0xaf, 0x2f, 0xfa, 0xcd, 0x3a, 0x62, 0xaf, 0x54, 0xe6, 0x6c, 0x31, 0x9b,
+ 0x4e, 0xe2, 0xff, 0x47, 0xa2, 0x3e, 0xe0, 0xbc, 0x37, 0x17, 0xd2, 0x30, 0x14, 0x73, 0x25, 0x8e,
+ 0x24, 0x76, 0xc0, 0xda, 0x08, 0xd1, 0x7e, 0xa6, 0xd4, 0x51, 0x32, 0x9e, 0x34, 0x47, 0xd9, 0x79,
+ 0x2c, 0x88, 0x8c, 0xc9, 0xf3, 0x7d, 0x89, 0x73, 0x01, 0x2d, 0x4e, 0x2e, 0x07, 0x56, 0x97, 0xf9,
+ 0x02, 0xc1, 0xb4, 0x77, 0x89, 0x0e, 0xc2, 0xbd, 0x1f, 0xbb, 0x5a, 0x05, 0xb3, 0x56, 0xd3, 0x03,
+ 0x11, 0x9b, 0x51, 0xaf, 0x59, 0x6e, 0xee, 0x70, 0xd7, 0xc7, 0x7a, 0x78, 0x4c, 0x19, 0x95, 0xf0,
+ 0xc2, 0xb7, 0xfb, 0xac, 0x8a, 0xa5, 0x0f, 0x79, 0x4a, 0x06, 0xcd, 0x82, 0x3d, 0x46, 0xb7, 0x02,
+ 0xc8, 0x91, 0x48, 0x57, 0xfb, 0x87, 0x0f, 0xa7, 0x67, 0x11, 0x1e, 0x03, 0xa4, 0x53, 0x2b, 0xdd,
+ 0x05, 0x5d, 0xf2, 0xb7, 0xb2, 0xbf, 0xfd, 0x15, 0x72, 0x89, 0xbc, 0xc0, 0x05, 0xea, 0xce, 0xdb,
+ 0x8c, 0xc1, 0xd8, 0x4c, 0xdb, 0x6f, 0x40, 0xe0, 0xde, 0x39, 0x39, 0xae, 0x5e, 0xa1, 0x45, 0x2c,
+ 0x57, 0x86, 0x0b, 0x57, 0x8a, 0x97, 0x66, 0xd7, 0x53, 0xf1, 0x78, 0xda, 0x74, 0x3c, 0x16, 0xd7,
+ 0x5c, 0xfb, 0x1a, 0xda, 0xc8, 0x2c, 0x16, 0xb9, 0x3e, 0x3a, 0x1c, 0x56, 0x3c, 0x6d, 0xe6, 0x9c,
+ 0x87, 0xb1, 0x54, 0x4d, 0x89, 0x17, 0x5e, 0x99, 0x88, 0x79, 0x60, 0x92, 0xe2, 0x12, 0x5b, 0x65,
+ 0x6b, 0x0f, 0x6f, 0x8c, 0x1c, 0xce, 0x63, 0x90, 0xbb, 0x68, 0xd0, 0x76, 0x83, 0xa4, 0xe1, 0xd6,
+ 0xea, 0x01, 0x0a, 0x38, 0x6c, 0xf5, 0x9e, 0x9a, 0x81, 0x16, 0x2e, 0xba, 0x27, 0x9e, 0xb9, 0x2b,
+ 0x8a, 0x05, 0xf6, 0xd5, 0x2b, 0x7e, 0x19, 0xa3, 0x6c, 0x90, 0x4b, 0xd8, 0xb8, 0xce, 0xd8, 0x60,
+ 0xb8, 0x2f, 0xe7, 0x72, 0x26, 0x41, 0x73, 0x31, 0x2c, 0xa4, 0x9b, 0x7d, 0xc3, 0x24, 0x65, 0x91,
+ 0xa2, 0xae, 0xd5, 0x77, 0xc6, 0xa0, 0x30, 0x15, 0xa6, 0x9f, 0x09, 0x5c, 0xb6, 0x59, 0xeb, 0x82,
+ 0x98, 0xae, 0xb9, 0x9c, 0x93, 0x82, 0xb3, 0xad, 0x12, 0x9c, 0xf3, 0xdb, 0xd0, 0x2c, 0x86, 0x26,
+ 0x67, 0xe6, 0x42, 0xe3, 0xc1, 0xea, 0xdb, 0x99, 0xbc, 0x8d, 0x4c, 0x98, 0x21, 0xa1, 0x98, 0x09,
+ 0x34, 0x42, 0x5e, 0xfd, 0xf4, 0x7f, 0xdf, 0x5f, 0xfa, 0x2b, 0x68, 0xdb, 0xb8, 0x5a, 0x4d, 0x14,
+ 0x43, 0x8b, 0x66, 0xe2, 0x9b, 0x5b, 0x83, 0xea, 0x92, 0xf9, 0x98, 0xa4, 0x6d, 0x42, 0xeb, 0x71,
+ 0x60, 0x98, 0x84, 0x55, 0x64, 0x23, 0x18, 0x9f, 0x76, 0x76, 0xd1, 0x74, 0xca, 0xd2, 0x65, 0xcd,
+ 0x00
+};
+
+const NvU8 g_rsa3k_public_exponent_mutual_authentication_prod[] = {0x01, 0x00, 0x01, 0x00};
+
+const NvU8 g_rsa3k_private_exponent_mutual_authentication_prod[] =
+{
+ 0x8d, 0x92, 0x7f, 0x37, 0x73, 0xf7, 0x7c, 0x5b, 0x59, 0x2b, 0x7f, 0x04, 0x98, 0x25, 0x78, 0x7b,
+ 0x0d, 0x5c, 0x3a, 0xe1, 0xa5, 0x8d, 0xdb, 0x97, 0x22, 0xbc, 0xa9, 0xd7, 0x6f, 0x04, 0xf6, 0x1c,
+ 0x62, 0x64, 0x84, 0x5f, 0x6c, 0xeb, 0x05, 0xb3, 0xc6, 0xf8, 0x6b, 0xc9, 0x8c, 0x87, 0x1e, 0xdd,
+ 0x0a, 0x49, 0xf4, 0xad, 0x37, 0xe0, 0xda, 0x2e, 0x4d, 0xff, 0xba, 0x30, 0x13, 0x27, 0x7c, 0x39,
+ 0xf0, 0xb0, 0xb1, 0x77, 0x03, 0xd3, 0x1d, 0x99, 0x6d, 0xfa, 0x15, 0x13, 0x2b, 0xfd, 0x65, 0x00,
+ 0x12, 0x3b, 0xf1, 0x51, 0x7c, 0x92, 0xd5, 0x02, 0xe1, 0xeb, 0xd2, 0xe7, 0x60, 0x64, 0x65, 0xc0,
+ 0x9d, 0xe2, 0x31, 0x67, 0xd6, 0x1e, 0x7c, 0x47, 0xee, 0xc8, 0x19, 0x0c, 0xa4, 0xd8, 0x0f, 0xd2,
+ 0x7a, 0xec, 0x3c, 0x35, 0x3e, 0xd2, 0xf0, 0x39, 0x8f, 0x87, 0xfb, 0xb6, 0xaf, 0x23, 0x3e, 0xb4,
+ 0x70, 0x46, 0xc2, 0x15, 0xa3, 0x26, 0x29, 0xd5, 0x31, 0x29, 0xd3, 0x33, 0x71, 0x63, 0xbe, 0x09,
+ 0x65, 0x43, 0x90, 0x2a, 0x0d, 0x2f, 0x1c, 0xe3, 0xfa, 0x2b, 0x6a, 0x1c, 0x95, 0x47, 0x60, 0xf4,
+ 0x45, 0xb5, 0x78, 0x03, 0xfc, 0x56, 0x25, 0xf7, 0xb2, 0x3a, 0x08, 0x36, 0x3d, 0x1d, 0x30, 0xef,
+ 0x1f, 0x63, 0x61, 0x73, 0x58, 0x13, 0x41, 0xc7, 0x84, 0x08, 0x8e, 0x32, 0x15, 0x65, 0x25, 0xe8,
+ 0x11, 0xea, 0x04, 0x7c, 0x20, 0xf4, 0xdd, 0x53, 0xaf, 0xfb, 0x6c, 0x65, 0xac, 0x55, 0x2d, 0x11,
+ 0x3c, 0x9e, 0x28, 0x46, 0xc6, 0x64, 0x98, 0x18, 0x60, 0xf4, 0x6c, 0x21, 0xb2, 0x51, 0xa9, 0xfe,
+ 0xb2, 0xeb, 0x50, 0xaa, 0x9a, 0x20, 0xf8, 0xc1, 0x46, 0x97, 0x77, 0x21, 0x8f, 0x2f, 0x53, 0x0a,
+ 0x66, 0xc4, 0x02, 0x1c, 0xfd, 0x44, 0x04, 0x49, 0x86, 0x93, 0x42, 0xde, 0xab, 0x9b, 0x9a, 0xdb,
+ 0x39, 0x5e, 0x87, 0xab, 0x8f, 0x85, 0x22, 0xd3, 0x38, 0x41, 0xb6, 0xf0, 0x34, 0x4b, 0xe0, 0x9a,
+ 0x69, 0x61, 0xb8, 0x4b, 0x01, 0xf0, 0xa6, 0xcc, 0x73, 0x98, 0xda, 0x6b, 0x12, 0xce, 0x0b, 0xbf,
+ 0x4d, 0x9f, 0x29, 0xda, 0x8b, 0x64, 0x8e, 0x0c, 0x9b, 0xd8, 0xa3, 0xf1, 0x44, 0xbd, 0x55, 0x37,
+ 0x54, 0xee, 0x4e, 0x7c, 0xbd, 0x89, 0x1b, 0x91, 0x2d, 0x2c, 0xfb, 0xa1, 0x4c, 0xfb, 0x01, 0x2b,
+ 0x6c, 0x8c, 0xac, 0x75, 0x37, 0xcd, 0x64, 0x75, 0xb2, 0x78, 0xd0, 0xfe, 0x8c, 0x41, 0xc7, 0xd5,
+ 0x8a, 0x55, 0xc4, 0xd4, 0x2b, 0x6d, 0xa2, 0xfb, 0xa7, 0xe8, 0x87, 0xd3, 0x74, 0x8c, 0x91, 0xe3,
+ 0x89, 0x17, 0x79, 0x10, 0x34, 0x4f, 0x39, 0x93, 0xe6, 0x33, 0x60, 0x96, 0xa6, 0xd9, 0x70, 0x47,
+ 0x31, 0xa0, 0x35, 0x6a, 0x58, 0x14, 0xb7, 0xb0, 0xeb, 0x0d, 0xc3, 0x6a, 0x6d, 0xc0, 0x85, 0x04
+};
+
+#endif
+
+#endif // _RM_SPDM_RSA_KEYS_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmtransport.h b/userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmtransport.h
new file mode 100644
index 0000000..9440ed8
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmtransport.h
@@ -0,0 +1,97 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _RM_SPDM_TRANSPORT_H_
+#define _RM_SPDM_TRANSPORT_H_
+
+/* ------------------------- Macros and Defines ----------------------------- */
+//
+// The following defines and macros are shared for any message-related constants
+// shared between RM and endpoint.
+//
+
+// Defines used for polling-based communication between Kernel-RM and GSP.
+#define NV_SPDM_PARTITION_BOOT_SUCCESS (0x59D3B007)
+#define NV_SPDM_REQUESTER_SECRETS_DERIVED (0x59D35DED)
+#define NV_SPDM_NO_MESSAGE_PENDING_TOKEN (0x00000000)
+#define NV_SPDM_REQUESTER_MESSAGE_PENDING_TOKEN (0xAFAFAFAF)
+#define NV_SPDM_RESPONDER_MESSAGE_PENDING_TOKEN (0xFAFAFAFA)
+#define NV_SPDM_SECRET_TEARDOWN_SUCCESS (0x59D35EDE)
+#define NV_SPDM_SECRET_TEARDOWN_FAILURE (0x59D35EFA)
+#define NV_SPDM_SECRET_TEARDOWN_ACK (0x59D35EAC)
+
+// TDISP Defines for polling-based communication between Kernel-RM and GSP.
+#define NV_TDISP_PARTITION_BOOT_SUCCESS (0x59D4B001)
+
+//
+// The SPDM communication between Kernel-RM and GSP utilizes a buffer in sysmem accessible
+// to both endpoints. The sysmem buffer will contain both a custom NV-defined header
+// describing the message type and size, and the SPDM payload itself.
+//
+
+//
+// Size of the full transportation buffer (header + SPDM payload) allocated in sysmem.
+// We need to align sysmem allocations with page size, but need less space. So we
+// over-allocate and tell GSP we only have the size we actually need.
+//
+#define NV_SPDM_SYSMEM_SURFACE_SIZE_PAGE_ALIGNED (0x2000)
+#define NV_SPDM_SYSMEM_SURFACE_SIZE_IN_BYTES (0x1200)
+#define NV_SPDM_SYSMEM_SURFACE_ALIGNMENT_IN_BYTES (256)
+
+// Struct and defines for the header which prepends the SPDM payload.
+#pragma pack(1)
+typedef struct _NV_SPDM_DESC_HEADER
+{
+ NvU32 msgType;
+ NvU32 msgSizeByte;
+ NvU32 version;
+} NV_SPDM_DESC_HEADER, *PNV_SPDM_DESC_HEADER;
+#pragma pack()
+
+#define NV_SPDM_MESSAGE_TYPE_NORMAL (0)
+#define NV_SPDM_MESSAGE_TYPE_SECURED (1)
+#define NV_SPDM_MESSAGE_TYPE_APPLICATION (2)
+#define NV_SPDM_DESC_HEADER_VERSION_1_0 (0x10)
+#define NV_SPDM_DESC_HEADER_VERSION_CURRENT (NV_SPDM_DESC_HEADER_VERSION_1_0)
+#define NV_SPDM_DESC_HEADER_ALIGNMENT_IN_BYTES (NV_SPDM_SYSMEM_SURFACE_ALIGNMENT_IN_BYTES)
+
+// Define utilized to determine size available for SPDM payload
+#define NV_SPDM_MAX_SPDM_PAYLOAD_SIZE (NV_SPDM_SYSMEM_SURFACE_SIZE_IN_BYTES - sizeof(NV_SPDM_DESC_HEADER))
+#define NV_SPDM_MAX_TRANSCRIPT_BUFFER_SIZE (2 * NV_SPDM_MAX_SPDM_PAYLOAD_SIZE)
+
+// Limited by the transport size, do not increase without increasing transport buffer.
+#define NV_SPDM_MAX_RANDOM_MSG_BYTES (0x0)
+
+#ifdef NVRM
+#include "gpu/mem_mgr/mem_desc.h"
+#else
+#ifndef ADDR_SYSMEM
+// System memory (PCI)
+#define ADDR_SYSMEM (1)
+#endif // ADDR_SYSMEM
+#endif //NVRM
+
+#define NV_SPDM_DMA_ADDR_SPACE_DEFAULT (ADDR_SYSMEM)
+#define NV_SPDM_DMA_REGION_ID_DEFAULT (0)
+
+#endif // _RM_SPDM_TRANSPORT_H_
diff --git a/userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmvendordef.h b/userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmvendordef.h
new file mode 100644
index 0000000..76eec37
--- /dev/null
+++ b/userspace/sdks/nv570/nvalloc/common/inc/spdm/rmspdmvendordef.h
@@ -0,0 +1,161 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _RMSPDMVENDORDEF_H_
+#define _RMSPDMVENDORDEF_H_
+#include <nvtypes.h>
+
+/*!
+ * In NVIDIA's implementation of SPDM, we will support application messages
+ * which are payloads delivered encrypted in SPDM secured messages,
+ * sent across the SPDM channel, but do not contain SPDM messages.
+ * Instead, these messages are for NVIDIA-application purposes.
+ * These messages and relevant structs are defined here.
+ */
+
+/* ------------------------- Application Payloads ------------------------ */
+/*!
+ * All application messages will follow a simple header format in order to
+ * simplify the parsing and forwarding of application messages to the
+ * relevant recipient endpoint. This format is defined as follows:
+ *
+ * +----------------------------------+
+ * | RM_SPDM_NV_CMD |
+ * | Command Type | Command Payload |
+ * | (4 bytes) (n - 4 - 4 bytes) |
+ * +----------------------------------+
+ *
+ * The Command Type value defines the expected structure of the payload,
+ * and how it should be interpreted.
+ *
+ * There are two major categories of commands - requests and responses.
+ * The values of 0x00000000-0x7FFFFFFF are reserved for requests.
+ * The values of 0x80000000-0xFFFFFFFF are reserved for responses.
+ */
+
+typedef enum
+{
+ // Request commands.
+ RM_SPDM_NV_CMD_TYPE_REQ_KEYMGR_NVLE = 0x00000000,
+ // 0x00000001 - 0x7FFFFFFF reserved.
+
+ // Response commands.
+ RM_SPDM_NV_CMD_TYPE_RSP_SUCCESS = 0x80000000,
+ // 0x80000001 - 0xFFFFFFFF reserved.
+ RM_SPDM_NV_CMD_TYPE_RSP_ERROR = 0xFFFFFFFF,
+} RM_SPDM_NV_CMD_TYPE;
+
+typedef struct
+{
+ NvU32 cmdType;
+} RM_SPDM_NV_CMD_HDR;
+
+/* ------------------------- NVIDIA Requests -------------------------------- */
+/*!
+ * Request Command: Key Manager NVLE Command
+ * Command Type: 0x00000000
+ *
+ * Fields:
+ * Payload - Variable size opaque data blob containing command meant for Key manager
+ *
+ * This command is a generic wrapper around all commands that must be forwarded to Key Manager for NvLink Encryption.
+ * The command structure itself is opaque, as SPDM need not process any of the message itself. This limits coupling
+ * between the two command interfaces.
+ */
+typedef struct
+{
+ RM_SPDM_NV_CMD_HDR hdr;
+
+ NvU8 payload[];
+} RM_SPDM_NV_CMD_REQ_KEYMGR_NVLE;
+
+/*!
+ * Union of all known requests, so responder can allocate enough space for all possible requests.
+ */
+typedef union {
+ RM_SPDM_NV_CMD_HDR hdr;
+
+ RM_SPDM_NV_CMD_REQ_KEYMGR_NVLE keyMgrNvle;
+} RM_SPDM_NV_CMD_REQ;
+
+/* ------------------------- NVIDIA Responses ------------------------------- */
+/*!
+ * Response Command: Success
+ * Command Type: 0x80000000
+ *
+ * This command is a simple payload for the responding endpoint to
+ * return success. It has no Command Payload.
+ */
+typedef struct
+{
+ RM_SPDM_NV_CMD_HDR hdr;
+} RM_SPDM_NV_CMD_RSP_SUCCESS;
+
+/*!
+ * Response Command: Error
+ * Command Type: 0xFFFFFFFF
+ *
+ * This command is a generic placeholder error response to return specific
+ * failure code to application endpoint. This is used to return an error
+ * back to the original application which sent the message, rather than
+ * suggesting that there was some SPDM or transport layer error.
+ */
+typedef struct
+{
+ RM_SPDM_NV_CMD_HDR hdr;
+ NV_STATUS status;
+} RM_SPDM_NV_CMD_RSP_ERROR;
+
+/*!
+ * Union of all known responses, so requester can allocate enough space for all possible responses.
+ */
+typedef union {
+ RM_SPDM_NV_CMD_HDR hdr;
+
+ RM_SPDM_NV_CMD_RSP_SUCCESS success;
+ RM_SPDM_NV_CMD_RSP_ERROR error;
+} RM_SPDM_NV_CMD_RSP;
+
+#pragma pack()
+
+/* ------------------------- Macros ----------------------------------------- */
+#define SPDM_MAX_MEASUREMENT_BLOCK_COUNT (64)
+#define SPDM_CERT_DEFAULT_SLOT_ID (0)
+#define SPDM_CAPABILITIES_CT_EXPONENT_MAX (0x1F)
+#define SPDM_DEFAULT_HEARTBEAT_PERIOD_IN_SEC (4)
+
+#define NV_BYTE_TO_BIT_OVERFLOW_MASK_UINT32 (0xE0000000)
+#define IS_BYTE_TO_BIT_OVERFLOW_UINT32(a) \
+ ((a & NV_BYTE_TO_BIT_OVERFLOW_MASK_UINT32) != 0)
+
+/* ---------------------- Public defines ------------------------------------- */
+#define NV_KEY_UPDATE_TRIGGER_THRESHOLD (0x10000000)
+
+#define NV_KEY_UPDATE_TRIGGER_ID_INVALID (0)
+#define NV_KEY_UPDATE_TRIGGER_ID_GET_MEASUREMENTS (1)
+#define NV_KEY_UPDATE_TRIGGER_ID_HEARTBEAT (2)
+#define NV_KEY_UPDATE_TRIGGER_ID_LAST (3)
+
+#define NV_SPDM_ENCAP_CERT_SIZE_IN_BYTE (578)
+
+#endif // _RMSPDMVENDORDEF_H_