summaryrefslogtreecommitdiffstats
path: root/userspace/sdks/nv570/inc/ctrl/ctrl5070
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/inc/ctrl/ctrl5070
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/inc/ctrl/ctrl5070')
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070base.h66
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070chnc.h1062
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070common.h79
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070impoverrides.h33
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070or.h448
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070rg.h437
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070system.h81
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070verif.h32
8 files changed, 2238 insertions, 0 deletions
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070base.h b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070base.h
new file mode 100644
index 0000000..fe28542
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070base.h
@@ -0,0 +1,66 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2005-2021 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
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl5070/ctrl5070base.finn
+//
+
+#include "ctrl/ctrlxxxx.h"
+/* NV5070_DISPLAY control commands and parameters */
+
+#define NV5070_CTRL_CMD(cat,idx) NVXXXX_CTRL_CMD(0x5070, NV5070_CTRL_##cat, idx)
+
+/* Display command categories (6bits) */
+#define NV5070_CTRL_RESERVED (0x00)
+#define NV5070_CTRL_CHNCTL (0x01)
+#define NV5070_CTRL_RG (0x02)
+#define NV5070_CTRL_OR (0x04)
+#define NV5070_CTRL_INST (0x05)
+#define NV5070_CTRL_VERIF (0x06)
+#define NV5070_CTRL_SYSTEM (0x07)
+#define NV5070_CTRL_EVENT (0x09)
+
+/*
+ * NV5070_CTRL_CMD_NULL
+ *
+ * This command does nothing.
+ * This command does not take any parameters.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ */
+#define NV5070_CTRL_CMD_NULL (0x50700000) /* finn: Evaluated from "(FINN_NV50_DISPLAY_RESERVED_INTERFACE_ID << 8) | 0x0" */
+
+
+// This struct must be the first member of all
+// 5070 control calls
+typedef struct NV5070_CTRL_CMD_BASE_PARAMS {
+ NvU32 subdeviceIndex;
+} NV5070_CTRL_CMD_BASE_PARAMS;
+
+/* _ctrl5070base_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070chnc.h b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070chnc.h
new file mode 100644
index 0000000..71e6499
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070chnc.h
@@ -0,0 +1,1062 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2001-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.
+ */
+
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl5070/ctrl5070chnc.finn
+//
+
+#include "ctrl/ctrl5070/ctrl5070base.h"
+#include "ctrl5070common.h"
+#include "nvdisptypes.h"
+
+#define NV5070_CTRL_CMD_NUM_DISPLAY_ID_DWORDS_PER_HEAD 2
+
+
+
+#define NV5070_CTRL_IDLE_CHANNEL_ACCL_NONE (0x00000000)
+#define NV5070_CTRL_IDLE_CHANNEL_ACCL_IGNORE_PI (NVBIT(0))
+#define NV5070_CTRL_IDLE_CHANNEL_ACCL_SKIP_NOTIF (NVBIT(1))
+#define NV5070_CTRL_IDLE_CHANNEL_ACCL_SKIP_SEMA (NVBIT(2))
+#define NV5070_CTRL_IDLE_CHANNEL_ACCL_IGNORE_INTERLOCK (NVBIT(3))
+#define NV5070_CTRL_IDLE_CHANNEL_ACCL_IGNORE_FLIPLOCK (NVBIT(4))
+#define NV5070_CTRL_IDLE_CHANNEL_ACCL_TRASH_ONLY (NVBIT(5))
+#define NV5070_CTRL_IDLE_CHANNEL_ACCL_TRASH_AND_ABORT (NVBIT(6))
+
+#define NV5070_CTRL_IDLE_CHANNEL_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV5070_CTRL_IDLE_CHANNEL_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 channelClass;
+ NvU32 channelInstance;
+
+ NvU32 desiredChannelStateMask;
+ NvU32 accelerators; // For future expansion. Not yet implemented
+ NvU32 timeout; // For future expansion. Not yet implemented
+ NvBool restoreDebugMode;
+} NV5070_CTRL_IDLE_CHANNEL_PARAMS;
+
+
+
+/*
+ * NV5070_CTRL_CMD_IS_MODE_POSSIBLE
+ *
+ * This command is used by DD to determine whether or not a given mode
+ * is possible given the current nvclk, mclk, dispclk and potentially some
+ * other parameters that are normally hidden from it. All the parameters
+ * except IsPossible (output), Force422(output), MinPstate (input/output),
+ * minPerfLevel (output), CriticalWatermark (output), worstCaseMargin (output),
+ * and worstCaseDomain (output) params are supplied by the caller.
+ *
+ * HeadActive
+ * Whether or not the params for this head are relevant.
+ *
+ * PixelClock
+ * Frequency: Pixel clk frequency in KHz.
+ * Adj1000Div1001: 1000/1001 multiplier for pixel clock.
+ *
+ * RasterSize
+ * Width: Total width of the raster. Also referred to as HTotal.
+ * Height: Total height of the raster. Also referred to as VTotal.
+ *
+ * RasterBlankStart
+ * X: Start of horizontal blanking for the raster.
+ * Y: Start of vertical blanking for the raster.
+ *
+ * RasterBlankEnd
+ * X: End of horizontal blanking for the raster.
+ * Y: End of vertical blanking for the raster.
+ *
+ * RasterVertBlank2
+ * YStart: Start of second blanking for second field for an
+ * interlaced raster. This field is irrelevant when raster is
+ * progressive.
+ * YEnd: End of second blanking for second field for an
+ * interlaced raster. This field is irrelevant when raster is
+ * progressive.
+ *
+ * Control
+ * RasterStructure: Whether the raster ir progressive or interlaced.
+ *
+ * OutputScaler
+ * VerticalTaps: Vertical scaler taps.
+ * HorizontalTaps: Horizontal scaler taps.
+ * Force422: Whether OutputScaler is operating in 422 mode or not.
+ *
+ * ViewportSizeOut
+ * Width: Width of output viewport.
+ * Height: Height of output viewport.
+ * Both the above fields are irrelevant for G80.
+ *
+ * ViewportSizeOutMin
+ * Width: Minimum possible/expected width of output viewport.
+ * Height: Minimum possible/expected height of output viewport.
+ *
+ * ViewportSizeIn
+ * Width: Width of input viewport.
+ * Height: Height of input viewport.
+ *
+ * Params
+ * Format: Core channel's pixel format. See the enumerants following
+ * the variable declaration for possible options.
+ * SuperSample: Whether to use X1AA or X4AA in core channel.
+ * This parameter is ignored for G80.
+ *
+ * BaseUsageBounds
+ * Usable: Whether or not the base channel is expected to be used.
+ * PixelDepth: Maximum pixel depth allowed in base channel.
+ * SuperSample: Whether or not X4AA is allowed in base channel.
+ * BaseLutUsage: Base LUT Size
+ * OutputLutUsage: Output LUT size
+ *
+ * OverlayUsageBounds
+ * Usable: Whether or not the overlay channel is expected to be used.
+ * PixelDepth: Maximum pixel depth allowed in overlay channel.
+ * OverlayLutUsage: Overlay LUT Size
+ *
+ * BaseLutLo
+ * Enable: Specifies Core Channel's Base LUT is enable or not.
+ * Mode: Specifies the LUT Mode.
+ * NeverYieldToBase: Specifies whether NEVER_YIELD_TO_BASE is enabled or not.
+ *
+ * OutputLutLo
+ * Enable: Specifies Core Channel's Output LUT is enable or not.
+ * Mode: Specifies the LUT Mode.
+ * NeverYieldToBase: Specifies whether NEVER_YIELD_TO_BASE is enabled or not.
+ *
+ * outputResourcePixelDepthBPP
+ * Specifies the output pixel depth with scaler mode.
+ *
+ * CriticalWatermark
+ * If MinPState is set to _NEED_MIN_PSTATE, this will return the critical
+ * watermark level at the minimum Pstate. Otherwise, this will return
+ * the critical watermark at the level that the IMP calculations are
+ * otherwise performed at.
+ *
+ * pixelReplicateMode
+ * Specifies the replication mode whether it is X2 or X4. Need to set the parameter
+ * to OFF if there is no pixel replication.
+ *
+ * numSSTLinks
+ * Number of Single Stream Transport links which will be used by the
+ * SOR. "0" means to use the number indicated by the most recent
+ * NV0073_CTRL_CMD_DP_SINGLE_HEAD_MULTI_STREAM_MODE_SST call.
+ *
+ * RequestedOperation
+ * This parameter is used to determine whether
+ * 1. DD is simplying querying whether or not the specified mode is
+ * possible (REQUESTED_OPER = _QUERY) or
+ * 2. DD is about to set the specified mode and RM should make
+ * appropriate preparations to make the mode possible. DD should
+ * never pass in a mode that was never indicated by RM as possible
+ * when DD queried for the possibility of the mode. This
+ * corresponds to REQUESTED_OPER = _PRE_MODESET.
+ * 3. DD just finished setting the specified mode. RM can go ahead
+ * and make changes like lowering the perf level if desired. This
+ * corresponds to REQUESTED_OPER = _POST_MODESET. This parameter is
+ * useful when we are at a higher perf level in a mode that's not
+ * possible at a lower perf level and want to go to a mode that is
+ * possible even at a lower perf level. In such cases, lowering
+ * perf level before modeset is complete is dangerous as it will
+ * cause underflow. RM will wait until the end of modeset to lower
+ * the perf level.
+ *
+ * options
+ * Specifies a bitmask for options.
+ * NV5070_CTRL_IS_MODE_POSSIBLE_OPTIONS_GET_MARGIN
+ * Tells IMP to calculate worstCaseMargin and worstCaseDomain.
+ *
+ * IsPossible
+ * This is the first OUT param for this call. It indicates whether
+ * or not the current mode is possible.
+ *
+ * MinPState
+ * MinPState is an IO (in/out) variable; it gives the minimum p-state
+ * value at which the mode is possible on a PStates 2.0 system if the
+ * parameter is initialized by the caller with _NEED_MIN_PSTATE. If
+ * _NEED_MIN_PSTATE is not specified, IMP query will just run at the
+ * max available perf level and return results for that pstate.
+ *
+ * If the minimum pstate is required, then MasterLockMode,
+ * MasterLockPin, SlaveLockMode, and SlaveLockPin must all be
+ * initialized.
+ *
+ * On a PStates 3.0 system, the return value for MinPState is
+ * undefined, but minPerfLevel can return the minimum IMP v-pstate.
+ *
+ * minPerfLevel
+ * On a PStates 3.0 system, minPerfLevel returns the minimum IMP
+ * v-pstate at which the mode is possible. On a PStates 2.0 system,
+ * minPerfLevel returns the minimum perf level at which the mode is
+ * possible.
+ *
+ * minPerfLevel is valid only if MinPState is initialized to
+ * _NEED_MIN_PSTATE.
+ *
+ * worstCaseMargin
+ * Returns the ratio of available bandwidth to required bandwidth,
+ * multiplied by NV5070_CTRL_IMP_MARGIN_MULTIPLIER. Available
+ * bandwidth is calculated in the worst case bandwidth domain, i.e.,
+ * the domain with the least available margin. Bandwidth domains
+ * include the IMP-relevant clock domains, and possibly other virtual
+ * bandwidth domains such as AWP.
+ *
+ * Note that IMP checks additional parameters besides the bandwidth
+ * margins, but only the bandwidth margin is reported here, so it is
+ * possible for a mode to have a more restrictive domain that is not
+ * reflected in the reported margin result.
+ *
+ * This result is not guaranteed to be valid if the mode is not
+ * possible.
+ *
+ * Note also that the result is generally calculated for the highest
+ * pstate possible (usually P0). But if _NEED_MIN_PSTATE is specified
+ * with the MinPState parameter, the result will be calculated for the
+ * min possible pstate (or the highest possible pstate, if the mode is
+ * not possible).
+ *
+ * The result is valid only if
+ * NV5070_CTRL_IS_MODE_POSSIBLE_OPTIONS_GET_MARGIN is set in
+ * "options".
+ *
+ * worstCaseDomain
+ * Returns a short text string naming the domain for the margin
+ * returned in "worstCaseMargin". See "worstCaseMargin" for more
+ * information.
+ *
+ * bUseCachedPerfState
+ * Indicates that RM should use cached values for the fastest
+ * available perf level (v-pstate for PStates 3.0 or pstate for
+ * PStates 2.0) and dispclk. This feature allows the query call to
+ * execute faster, and is intended to be used, for example, during
+ * mode enumeration, when many IMP query calls are made in close
+ * succession, and perf conditions are not expected to change between
+ * query calls. When IMP has not been queried recently, it is
+ * recommended to NOT use cached values, in case perf conditions have
+ * changed and the cached values no longer reflect the current
+ * conditions.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_GENERIC
+ *
+ * Assumptions/Limitations:
+ * - If the caller sends any methods to alter the State Cache, before calling of
+ * the following functions:
+ * NV5070_CTRL_CMD_IS_MODE_POSSIBLE_REQUESTED_OPERATION_QUERY_USE_SC
+ * NV5070_CTRL_CMD_IS_MODE_POSSIBLE_REQUESTED_OPERATION_PRE_MODESET_USE_SC
+ * NV5070_CTRL_CMD_IS_MODE_POSSIBLE_REQUESTED_OPERATION_POST_MODESET_USE_SC
+ * the caller must repeatedly issue NV5070_CTRL_CMD_GET_CHANNEL_INFO, and delay until the
+ * returned channelState is either:
+ * NV5070_CTRL_CMD_GET_CHANNEL_INFO_STATE_IDLE,
+ * NV5070_CTRL_CMD_GET_CHANNEL_INFO_STATE_WRTIDLE, or
+ * NV5070_CTRL_CMD_GET_CHANNEL_INFO_STATE_EMPTY.
+ * This ensures that all commands have reached the State Cache before RM reads
+ * them.
+ *
+ *
+ */
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE (0x50700109) /* finn: Evaluated from "(FINN_NV50_DISPLAY_CHNCTL_INTERFACE_ID << 8) | NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_REQUESTED_OPERATION_QUERY (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_REQUESTED_OPERATION_PRE_MODESET (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_REQUESTED_OPERATION_POST_MODESET (0x00000002)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_REQUESTED_OPERATION_QUERY_USE_SC (0x00000003)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_REQUESTED_OPERATION_PRE_MODESET_USE_SC (0x00000004)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_REQUESTED_OPERATION_POST_MODESET_USE_SC (0x00000005)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_REQUESTED_OPERATION_SUPERVISOR (0x00000007)
+
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OPTIONS_GET_MARGIN (0x00000001)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_IS_POSSIBLE_NO (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_IS_POSSIBLE_YES (0x00000001)
+
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_UNDEFINED (0x00000000)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_P0 (0x00000001)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_P1 (0x00000002)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_P2 (0x00000004)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_P3 (0x00000008)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_P8 (0x00000100)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_P10 (0x00000400)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_P12 (0x00001000)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_P15 (0x00008000)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_MAX NV5070_CTRL_IS_MODE_POSSIBLE_PSTATES_P15
+#define NV5070_CTRL_IS_MODE_POSSIBLE_NEED_MIN_PSTATE (0x10101010)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_NEED_MIN_PSTATE_DEFAULT (0x00000000)
+
+#define NV5070_CTRL_IMP_MARGIN_MULTIPLIER (0x00000400)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_HEAD_ACTIVE_NO (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_HEAD_ACTIVE_YES (0x00000001)
+
+#define NV5070_CTRL_IS_MODE_POSSIBLE_DISPLAY_ID_SKIP_IMP_OUTPUT_CHECK (0xAAAAAAAA)
+
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_RESOURCE_PIXEL_DEPTH_DEFAULT (0x00000000)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_RESOURCE_PIXEL_DEPTH_BPP_16_422 (0x00000001)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_RESOURCE_PIXEL_DEPTH_BPP_18_444 (0x00000002)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_RESOURCE_PIXEL_DEPTH_BPP_20_422 (0x00000003)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_RESOURCE_PIXEL_DEPTH_BPP_24_422 (0x00000004)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_RESOURCE_PIXEL_DEPTH_BPP_24_444 (0x00000005)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_RESOURCE_PIXEL_DEPTH_BPP_30_444 (0x00000006)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_RESOURCE_PIXEL_DEPTH_BPP_32_422 (0x00000007)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_RESOURCE_PIXEL_DEPTH_BPP_36_444 (0x00000008)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_RESOURCE_PIXEL_DEPTH_BPP_48_444 (0x00000009)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PIXEL_CLOCK_ADJ1000DIV1001_NO (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PIXEL_CLOCK_ADJ1000DIV1001_YES (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_CONTROL_STRUCTURE_PROGRESSIVE (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_CONTROL_STRUCTURE_INTERLACED (0x00000001)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_SCALER_VERTICAL_TAPS_1 (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_SCALER_VERTICAL_TAPS_2 (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_SCALER_VERTICAL_TAPS_3 (0x00000002)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_SCALER_VERTICAL_TAPS_3_ADAPTIVE (0x00000003)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_SCALER_VERTICAL_TAPS_5 (0x00000004)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_SCALER_HORIZONTAL_TAPS_1 (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_SCALER_HORIZONTAL_TAPS_2 (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_SCALER_HORIZONTAL_TAPS_8 (0x00000002)
+
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_SCALER_FORCE422_MODE_DISABLE (0x00000000)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_OUTPUT_SCALER_FORCE422_MODE_ENABLE (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_FORMAT_I8 (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_FORMAT_VOID16 (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_FORMAT_VOID32 (0x00000002)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_FORMAT_RF16_GF16_BF16_AF16 (0x00000003)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_FORMAT_A8R8G8B8 (0x00000004)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_FORMAT_A2B10G10R10 (0x00000005)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_FORMAT_A8B8G8R8 (0x00000006)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_FORMAT_R5G6B5 (0x00000007)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_FORMAT_A1R5G5B5 (0x00000008)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_SUPER_SAMPLE_X1AA (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_SUPER_SAMPLE_X4AA (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_USABLE_USE_CURRENT (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_USABLE_NO (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_USABLE_YES (0x00000002)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_PIXEL_DEPTH_USE_CURRENT (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_PIXEL_DEPTH_8 (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_PIXEL_DEPTH_16 (0x00000002)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_PIXEL_DEPTH_32 (0x00000003)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_PIXEL_DEPTH_64 (0x00000004)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_SUPER_SAMPLE_USE_CURRENT (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_SUPER_SAMPLE_X1AA (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_SUPER_SAMPLE_X4AA (0x00000002)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_BASE_LUT_USAGE_NONE (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_BASE_LUT_USAGE_257 (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_BASE_LUT_USAGE_1025 (0x00000002)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_OUTPUT_LUT_USAGE_NONE (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_OUTPUT_LUT_USAGE_257 (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_USAGE_BOUNDS_OUTPUT_LUT_USAGE_1025 (0x00000002)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OVERLAY_USAGE_BOUNDS_USABLE_USE_CURRENT (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OVERLAY_USAGE_BOUNDS_USABLE_NO (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OVERLAY_USAGE_BOUNDS_USABLE_YES (0x00000002)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OVERLAY_USAGE_BOUNDS_PIXEL_DEPTH_USE_CURRENT (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OVERLAY_USAGE_BOUNDS_PIXEL_DEPTH_16 (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OVERLAY_USAGE_BOUNDS_PIXEL_DEPTH_32 (0x00000002)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OVERLAY_USAGE_BOUNDS_PIXEL_DEPTH_64 (0x00000003)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OVERLAY_USAGE_BOUNDS_OVERLAY_LUT_USAGE_NONE (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OVERLAY_USAGE_BOUNDS_OVERLAY_LUT_USAGE_257 (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OVERLAY_USAGE_BOUNDS_OVERLAY_LUT_USAGE_1025 (0x00000002)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_ENABLE_DISABLE (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_ENABLE_ENABLE (0x00000001)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_MODE_LORES (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_MODE_HIRES (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_MODE_INDEX_1025_UNITY_RANGE (0x00000002)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_MODE_INTERPOLATE_1025_UNITY_RANGE (0x00000003)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_MODE_INTERPOLATE_1025_XRBIAS_RANGE (0x00000004)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_MODE_INTERPOLATE_1025_XVYCC_RANGE (0x00000005)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_MODE_INTERPOLATE_257_UNITY_RANGE (0x00000006)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_MODE_INTERPOLATE_257_LEGACY_RANGE (0x00000007)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_NEVER_YIELD_TO_BASE_DISABLE (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_BASE_LUT_LO_NEVER_YIELD_TO_BASE_ENABLE (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_ENABLE_DISABLE (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_ENABLE_ENABLE (0x00000001)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_MODE_LORES (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_MODE_HIRES (0x00000001)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_MODE_INDEX_1025_UNITY_RANGE (0x00000002)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_MODE_INTERPOLATE_1025_UNITY_RANGE (0x00000003)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_MODE_INTERPOLATE_1025_XRBIAS_RANGE (0x00000004)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_MODE_INTERPOLATE_1025_XVYCC_RANGE (0x00000005)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_MODE_INTERPOLATE_257_UNITY_RANGE (0x00000006)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_MODE_INTERPOLATE_257_LEGACY_RANGE (0x00000007)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_NEVER_YIELD_TO_BASE_DISABLE (0x00000000)
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_OUTPUT_LUT_LO_NEVER_YIELD_TO_BASE_ENABLE (0x00000001)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PIXEL_REPLICATE_MODE_OFF (0x00000000)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PIXEL_REPLICATE_MODE_X2 (0x00000001)
+#define NV5070_CTRL_IS_MODE_POSSIBLE_PIXEL_REPLICATE_MODE_X4 (0x00000002)
+
+#define NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS_MESSAGE_ID (0x9U)
+
+typedef struct NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ struct {
+ NvU32 HeadActive;
+ struct {
+ NvU32 Frequency;
+
+ NvU32 Adj1000Div1001;
+ } PixelClock;
+
+ struct {
+ NvU32 Width;
+ NvU32 Height;
+ } RasterSize;
+
+ struct {
+ NvU32 X;
+ NvU32 Y;
+ } RasterBlankStart;
+
+ struct {
+ NvU32 X;
+ NvU32 Y;
+ } RasterBlankEnd;
+
+ struct {
+ NvU32 YStart;
+ NvU32 YEnd;
+ } RasterVertBlank2;
+
+ struct {
+ NvU32 Structure;
+/*
+ * Note: For query calls, the lock modes and lock pins are used only if the min
+ * pstate is required (i.e., if MinPState is set to
+ * NV5070_CTRL_IS_MODE_POSSIBLE_NEED_MIN_PSTATE).
+ */
+ NV_DISP_LOCK_MODE MasterLockMode;
+ NV_DISP_LOCK_PIN MasterLockPin;
+ NV_DISP_LOCK_MODE SlaveLockMode;
+ NV_DISP_LOCK_PIN SlaveLockPin;
+ } Control;
+
+ struct {
+ NvU32 VerticalTaps;
+ NvU32 HorizontalTaps;
+ NvBool Force422;
+ } OutputScaler;
+
+ struct {
+ NvU32 Width;
+ NvU32 Height;
+ } ViewportSizeOut;
+
+ struct {
+ NvU32 Width;
+ NvU32 Height;
+ } ViewportSizeOutMin;
+
+ struct {
+ NvU32 Width;
+ NvU32 Height;
+ } ViewportSizeOutMax;
+
+ struct {
+ NvU32 Width;
+ NvU32 Height;
+ } ViewportSizeIn;
+
+ struct {
+ NvU32 Format;
+ NvU32 SuperSample;
+ } Params;
+
+ struct {
+ NvU32 Usable;
+ NvU32 PixelDepth;
+ NvU32 SuperSample;
+ NvU32 BaseLutUsage;
+ NvU32 OutputLutUsage;
+ } BaseUsageBounds;
+
+ struct {
+ NvU32 Usable;
+ NvU32 PixelDepth;
+ NvU32 OverlayLutUsage;
+ } OverlayUsageBounds;
+
+ struct {
+ NvBool Enable;
+ NvU32 Mode;
+ NvBool NeverYieldToBase;
+ } BaseLutLo;
+
+ struct {
+ NvBool Enable;
+ NvU32 Mode;
+ NvBool NeverYieldToBase;
+ } OutputLutLo;
+
+ NvU32 displayId[NV5070_CTRL_CMD_NUM_DISPLAY_ID_DWORDS_PER_HEAD];
+ NvU32 outputResourcePixelDepthBPP;
+
+ NvU32 CriticalWatermark; // in pixels
+
+ } Head[NV5070_CTRL_CMD_MAX_HEADS];
+
+ struct {
+ NvU32 owner;
+ NvU32 protocol;
+ } Dac[NV5070_CTRL_CMD_MAX_DACS];
+
+ struct {
+//
+// owner field is deprecated. In the future, all client calls should set
+// ownerMask and bUseSorOwnerMask. bUseSorOwnerMask must be set in order
+// to use ownerMask.
+//
+ NvU32 owner;
+ NvU32 ownerMask; // Head mask owned this sor
+
+ NvU32 protocol;
+ NvU32 pixelReplicateMode;
+
+ NvU8 numSSTLinks;
+ } Sor[NV5070_CTRL_CMD_MAX_SORS];
+
+ NvBool bUseSorOwnerMask;
+
+ struct {
+ NvU32 owner;
+ NvU32 protocol;
+ } Pior[NV5070_CTRL_CMD_MAX_PIORS];
+
+
+ NvU32 RequestedOperation;
+// This argument is for VERIF and INTERNAL use only
+ NvU32 options;
+ NvU32 IsPossible;
+ NvU32 MinPState;
+
+ NvU32 minPerfLevel;
+//
+// Below are the possible Output values for MinPState variable.
+// Lower the p-state value higher the power consumption; if no p-states are defined on chip
+// then it will return as zero.
+//
+
+//
+// Below are the possible input values for MinPstate Variable, by default it calculate
+// mode is possible or not at max available p-state and return the same state in that variable.
+//
+ NvU32 worstCaseMargin;
+
+//
+// The calculated margin is multiplied by a constant, so that it can be
+// represented as an integer with reasonable precision. "0x400" was chosen
+// because it is a power of two, which might allow some compilers/CPUs to
+// simplify the calculation by doing a shift instead of a multiply/divide.
+// (And 0x400 is 1024, which is close to 1000, so that may simplify visual
+// interpretation of the raw margin value.)
+//
+ char worstCaseDomain[8];
+
+ NvBool bUseCachedPerfState;
+} NV5070_CTRL_CMD_IS_MODE_POSSIBLE_PARAMS;
+
+/*
+ * NV5070_CTRL_CMD_GET_CHANNEL_INFO
+ *
+ * This command returns the current channel state.
+ *
+ * channelClass
+ * This field indicates the hw class number (507A-507E)
+ *
+ * channelInstance
+ * This field indicates which of the two instances of the channel
+ * (in case there are two. ex: base, overlay etc) the cmd is meant for.
+ * Note that core channel has only one instance and the field should
+ * be set to 0 for core channel.
+ *
+ * channelState
+ * This field indicates the desired channel state in a mask form that
+ * is compatible with NV5070_CTRL_CMD_IDLE_CHANNEL. A mask format
+ * allows clients to check for one from a group of states.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_GENERIC
+ *
+ * Display driver uses this call to ensure that all it's methods have
+ * propagated through hardware's internal fifo
+ * (NV5070_CTRL_GET_CHANNEL_INFO_STATE_NO_METHOD_PENDING) before it calls
+ * RM to check whether or not the mode it set up in Assembly State Cache will
+ * be possible. Note that display driver can not use completion notifier in
+ * this case because completion notifier is associated with Update and Update
+ * will propagate the state from Assembly to Armed and when checking the
+ * possibility of a mode, display driver wouldn't want Armed state to be
+ * affected.
+ */
+#define NV5070_CTRL_CMD_GET_CHANNEL_INFO (0x5070010b) /* finn: Evaluated from "(FINN_NV50_DISPLAY_CHNCTL_INTERFACE_ID << 8) | NV5070_CTRL_CMD_GET_CHANNEL_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_IDLE NV5070_CTRL_CMD_CHANNEL_STATE_IDLE
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_WRTIDLE NV5070_CTRL_CMD_CHANNEL_STATE_WRTIDLE
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_EMPTY NV5070_CTRL_CMD_CHANNEL_STATE_EMPTY
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_FLUSHED NV5070_CTRL_CMD_CHANNEL_STATE_FLUSHED
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_BUSY NV5070_CTRL_CMD_CHANNEL_STATE_BUSY
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_DEALLOC NV5070_CTRL_CMD_CHANNEL_STATE_DEALLOC
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_DEALLOC_LIMBO NV5070_CTRL_CMD_CHANNEL_STATE_DEALLOC_LIMBO
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_LIMBO1 NV5070_CTRL_CMD_CHANNEL_STATE_LIMBO1
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_LIMBO2 NV5070_CTRL_CMD_CHANNEL_STATE_LIMBO2
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_FCODEINIT NV5070_CTRL_CMD_CHANNEL_STATE_FCODEINIT
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_FCODE NV5070_CTRL_CMD_CHANNEL_STATE_FCODE
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_VBIOSINIT NV5070_CTRL_CMD_CHANNEL_STATE_VBIOSINIT
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_VBIOSOPER NV5070_CTRL_CMD_CHANNEL_STATE_VBIOSOPER
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_UNCONNECTED NV5070_CTRL_CMD_CHANNEL_STATE_UNCONNECTED
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_INITIALIZE NV5070_CTRL_CMD_CHANNEL_STATE_INITIALIZE
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_SHUTDOWN1 NV5070_CTRL_CMD_CHANNEL_STATE_SHUTDOWN1
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_SHUTDOWN2 NV5070_CTRL_CMD_CHANNEL_STATE_SHUTDOWN2
+#define NV5070_CTRL_GET_CHANNEL_INFO_STATE_NO_METHOD_PENDING (NV5070_CTRL_GET_CHANNEL_INFO_STATE_EMPTY | NV5070_CTRL_GET_CHANNEL_INFO_STATE_WRTIDLE | NV5070_CTRL_GET_CHANNEL_INFO_STATE_IDLE)
+#define NV5070_CTRL_CMD_GET_CHANNEL_INFO_PARAMS_MESSAGE_ID (0xBU)
+
+typedef struct NV5070_CTRL_CMD_GET_CHANNEL_INFO_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 channelClass;
+ NvU32 channelInstance;
+ NvBool IsChannelInDebugMode;
+
+ NvU32 channelState;
+} NV5070_CTRL_CMD_GET_CHANNEL_INFO_PARAMS;
+
+
+
+/*
+ * NV5070_CTRL_CMD_SET_ACCL
+ *
+ * This command turns accelerators on and off. The use of this command
+ * should be restricted as it may have undesirable effects. It's
+ * purpose is to provide a mechanism for clients to use the
+ * accelerator bits to get into states that are either not detectable
+ * by the RM or may take longer to reach than we think is reasonable
+ * to wait in the RM.
+ *
+ * NV5070_CTRL_CMD_GET_ACCL
+ *
+ * This command queries the current state of the accelerators.
+ *
+ * channelClass
+ * This field indicates the hw class number (507A-507E)
+ *
+ * channelInstance
+ * This field indicates which of the two instances of the channel
+ * (in case there are two. ex: base, overlay etc) the cmd is meant for.
+ * Note that core channel has only one instance and the field should
+ * be set to 0 for core channel.
+ *
+ * accelerators
+ * Accelerators to be set in the SET_ACCEL command. Returns the
+ * currently set accelerators on the GET_ACCEL command.
+ *
+ * accelMask
+ * A mask to specify which accelerators to change with the
+ * SET_ACCEL command. This field does nothing in the GET_ACCEL
+ * command.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_CHANNEL
+ * NV_ERR_INVALID_OWNER
+ * NV_ERR_GENERIC
+ *
+ */
+
+#define NV5070_CTRL_CMD_SET_ACCL (0x5070010c) /* finn: Evaluated from "(FINN_NV50_DISPLAY_CHNCTL_INTERFACE_ID << 8) | NV5070_CTRL_SET_ACCL_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_GET_ACCL (0x5070010d) /* finn: Evaluated from "(FINN_NV50_DISPLAY_CHNCTL_INTERFACE_ID << 8) | NV5070_CTRL_GET_ACCL_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_ACCL_NONE NV5070_CTRL_IDLE_CHANNEL_ACCL_NONE
+#define NV5070_CTRL_ACCL_IGNORE_PI NV5070_CTRL_IDLE_CHANNEL_ACCL_IGNORE_PI
+#define NV5070_CTRL_ACCL_SKIP_NOTIF NV5070_CTRL_IDLE_CHANNEL_ACCL_SKIP_NOTIF
+#define NV5070_CTRL_ACCL_SKIP_SEMA NV5070_CTRL_IDLE_CHANNEL_ACCL_SKIP_SEMA
+#define NV5070_CTRL_ACCL_IGNORE_INTERLOCK NV5070_CTRL_IDLE_CHANNEL_ACCL_IGNORE_INTERLOCK
+#define NV5070_CTRL_ACCL_IGNORE_FLIPLOCK NV5070_CTRL_IDLE_CHANNEL_ACCL_IGNORE_FLIPLOCK
+#define NV5070_CTRL_ACCL_TRASH_ONLY NV5070_CTRL_IDLE_CHANNEL_ACCL_TRASH_ONLY
+#define NV5070_CTRL_ACCL_TRASH_AND_ABORT NV5070_CTRL_IDLE_CHANNEL_ACCL_TRASH_AND_ABORT
+#define NV5070_CTRL_SET_ACCL_PARAMS_MESSAGE_ID (0xCU)
+
+typedef struct NV5070_CTRL_SET_ACCL_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 channelClass;
+ NvU32 channelInstance;
+
+ NvU32 accelerators;
+ NvU32 accelMask;
+} NV5070_CTRL_SET_ACCL_PARAMS;
+#define NV5070_CTRL_GET_ACCL_PARAMS_MESSAGE_ID (0xDU)
+
+typedef NV5070_CTRL_SET_ACCL_PARAMS NV5070_CTRL_GET_ACCL_PARAMS;
+
+
+
+/*
+ * NV5070_CTRL_CMD_GET_PINSET_COUNT
+ *
+ * Get number of pinsets on this GPU.
+ *
+ * pinsetCount [out]
+ * Number of pinsets on this GPU is returned in this parameter.
+ * This count includes pinsets that are not connected.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV5070_CTRL_CMD_GET_PINSET_COUNT (0x50700115) /* finn: Evaluated from "(FINN_NV50_DISPLAY_CHNCTL_INTERFACE_ID << 8) | NV5070_CTRL_GET_PINSET_COUNT_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_GET_PINSET_COUNT_PARAMS_MESSAGE_ID (0x15U)
+
+typedef struct NV5070_CTRL_GET_PINSET_COUNT_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 pinsetCount;
+} NV5070_CTRL_GET_PINSET_COUNT_PARAMS;
+
+/*
+ * NV5070_CTRL_CMD_GET_PINSET_PEER
+ *
+ * Retrieve the pinset/GPU that is connected to the specified pinset on
+ * this GPU.
+ *
+ * pinset [in]
+ * Pinset on this GPU for which peer info is to be returned must be
+ * specified in this parameter.
+ *
+ * peerGpuId [out]
+ * Instance of the GPU on the other side of the connection is
+ * returned in this parameter.
+ *
+ * peerPinset [out]
+ * Pinset on the other side of the connection is returned in this
+ * parameter. If there is no connection then the value is
+ * NV5070_CTRL_CMD_GET_PINSET_PEER_PEER_PINSET_NONE.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV5070_CTRL_CMD_GET_PINSET_PEER (0x50700116) /* finn: Evaluated from "(FINN_NV50_DISPLAY_CHNCTL_INTERFACE_ID << 8) | NV5070_CTRL_GET_PINSET_PEER_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_GET_PINSET_PEER_PEER_GPUINSTANCE_NONE (0xffffffff)
+
+#define NV5070_CTRL_CMD_GET_PINSET_PEER_PEER_PINSET_NONE (0xffffffff)
+
+#define NV5070_CTRL_GET_PINSET_PEER_PARAMS_MESSAGE_ID (0x16U)
+
+typedef struct NV5070_CTRL_GET_PINSET_PEER_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 pinset;
+
+ NvU32 peerGpuInstance;
+ NvU32 peerPinset;
+} NV5070_CTRL_GET_PINSET_PEER_PARAMS;
+
+/*
+ * NV5070_CTRL_CMD_SET_RMFREE_FLAGS
+ *
+ * This command sets the flags for an upcoming call to RmFree().
+ * After the RmFree() API runs successfully or not, the flags are cleared.
+ *
+ * flags
+ * This parameter holds the NV0000_CTRL_GPU_SET_RMFREE_FLAGS_*
+ * flags to be passed for the next RmFree() command only.
+ * The flags can be one of those:
+ * - NV0000_CTRL_GPU_SET_RMFREE_FLAGS_NONE:
+ * explicitly clears the flags
+ * - NV0000_CTRL_GPU_SET_RMFREE_FLAGS_FREE_PRESERVES_HW:
+ * instructs RmFree() to preserve the HW configuration. After
+ * RmFree() is run this flag is cleared.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV5070_CTRL_CMD_SET_RMFREE_FLAGS (0x50700117) /* finn: Evaluated from "(FINN_NV50_DISPLAY_CHNCTL_INTERFACE_ID << 8) | NV5070_CTRL_SET_RMFREE_FLAGS_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_SET_RMFREE_FLAGS_NONE 0x00000000
+#define NV5070_CTRL_SET_RMFREE_FLAGS_PRESERVE_HW 0x00000001
+#define NV5070_CTRL_SET_RMFREE_FLAGS_PARAMS_MESSAGE_ID (0x17U)
+
+typedef struct NV5070_CTRL_SET_RMFREE_FLAGS_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 flags;
+} NV5070_CTRL_SET_RMFREE_FLAGS_PARAMS;
+
+
+/*
+ * NV5070_CTRL_CMD_IMP_SET_GET_PARAMETER
+ *
+ * This command allows to set or get certain IMP parameters. Change of
+ * values take effect on next modeset and is persistent across modesets
+ * until the driver is unloaded or user changes the override.
+ *
+ * index
+ * One of NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_XXX defines -
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IMP_ENABLE
+ * Only supports "get" operation. If FALSE, IMP is being bypassed and
+ * all Is Mode Possible queries are answered with "mode is possible"
+ * and registers normally set by IMP are not changed from their defaults.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_ASR_ALLOWED
+ * Should IMP consider using ASR. ASR won't be allowed unless it is set to
+ * "allowed" through both _IS_ASR_ALLOWED and _IS_ASR_ALLOWED_PER_PSTATE.
+ * Note that IMP will not run ASR and MSCG at the same time.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_ASR_ALLOWED_PER_PSTATE
+ * Should IMP consider using ASR when this pstate is being used. ASR won't
+ * be allowed unless it is set to "allowed" through both
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_ASR_ALLOWED and
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_ASR_ALLOWED_PER_PSTATE.
+ * So when NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_ASR_ALLOWED
+ * returns FALSE, IMP won't consider ASR for any p-state. Note that IMP
+ * will not run ASR and MSCG at the same time. This function is valid
+ * only on PStates 2.0 systems.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_MSCG_ALLOWED_PER_PSTATE
+ * Should IMP consider using MSCG when this pstate is being used. MSCG
+ * won't be allowed if the MSCG feature isn't enabled even if we set to
+ * "allowed" through
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_MSCG_ALLOWED_PER_PSTATE.
+ * Use NV2080_CTRL_CMD_MC_QUERY_POWERGATING_PARAMETER to query if MSCG is
+ * supported and enabled. Note that IMP will not run ASR and MSCG at the
+ * same time. This function is valid only on PStates 2.0 systems.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_STUTTER_FEATURE_PER_PSTATE
+ * Only supports "get" operation. Returns which stutter feature is being
+ * engaged in hardware when running on the given pstate. Valid values are:
+ * NV5070_CTRL_IMP_STUTTER_FEATURE_NONE
+ * This value indicates no stutter feature is enabled.
+ * NV5070_CTRL_IMP_STUTTER_FEATURE_ASR
+ * This value indicates ASR is the current enabled stutter feature.
+ * NV5070_CTRL_IMP_STUTTER_FEATURE_MSCG
+ * This value indicates MSCG is the current enabled stutter feature.
+ * Note that system will not run ASR and MSCG at the same time. This
+ * function is valid only on PStates 2.0 systems.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_STUTTER_FEATURE_PREDICTED_EFFICIENCY_PER_PSTATE
+ * Only supports "get" operation. Returns the efficiency which IMP
+ * predicted for the engaged stutter feature (ASR or MSCG) when running
+ * on the given pstate. Normally, the actual efficiency should be higher
+ * than the calculated predicted efficiency. For MSCG, the predicted
+ * efficiency assumes no mempool compression. If compression is enabled
+ * with MSCG, the actual efficiency may be significantly higher. Returns
+ * 0 if no stutter feature is running. On PStates 3.0 systems, the
+ * pstateApi parameter is ignored, and the result is returned for the min
+ * IMP v-pstate possible.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS
+ * Only supports "get" operation. Returns information about what the possible
+ * mclk switch is. Valid fields are:
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_POSSIBLE
+ * This field is not head-specific and indicates if mclk switch is
+ * possible with the current mode.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_OVERRIDE_MEMPOOL
+ * This field is not head-specific and indicates if mclk switch is
+ * possible with the nominal mempool settings (_NO) or if special
+ * settings are required in order for mclk switch to be possible (_YES).
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_MID_WATERMARK
+ * Each head has its own setting for this field. If this field is
+ * set to _YES, then the specified head will allow mclk switch to
+ * begin if mempool occupancy exceeds the MID_WATERMARK setting.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_DWCF
+ * Each head has its own setting for this field. If this field is
+ * set to _YES, then the specified head will allow mclk switch to
+ * begin if the head is in its DWCF interval, and the mempool
+ * occupancy is greater than or equal to the DWCF watermark.
+ * Note: If neither _MID_WATERMARK nor _DWCF is set to _YES, then the
+ * specified head is ignored when determining when it is OK to start an
+ * mclk switch. Mclk switch must be allowed (or ignored) by all heads
+ * before an mclk switch will actually begin.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_FORCE_MIN_MEMPOOL
+ * Should min mempool be forced.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MEMPOOL_COMPRESSION
+ * Should mempool compression be enabled.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_CURSOR_SIZE
+ * The cursor size (in horizontal pixels) used by IMP (rather than the
+ * actual cursor size) for its computation.
+ * A maximum value is in place for what can be set. It can be queried
+ * after resetting the value - it gets reset to the maximum possible
+ * value.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_ISOFBLATENCY_TEST_ENABLE
+ * This is to Enable/Disable ISO FB Latency Test.
+ * The test records the max ISO FB latency for all heads during the test period (excluding modeset time).
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_ISOFBLATENCY_TEST_WC_TOTAL_LATENCY
+ * This is used to retrieve calculated wcTotalLatency of ISO FB Latency Test.
+ * wcTotalLatency is the worst case time for a request's data to come back after the request is issued.
+ * It is the sum of IMP calculated FbLatency and stream delay.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_ISOFBLATENCY_TEST_MAX_LATENCY
+ * This is used to retrieve the max latency among all heads during the whole ISO FB Latency Test.
+ * The max latency can be used to compare with the wcTotalLatency we calculated.
+ * It decides whether the ISO FB Latency Test is passed or not.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_ISOFBLATENCY_TEST_MAX_TEST_PERIOD
+ * This is used to retrieve the max test period during the whole ISO FB Latency Test.
+ * By experimental result, the test period should be at least 10 secs to approximate the
+ * worst case Fb latency in real situation.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_GLITCHLESS_MODESET_ENABLE
+ * This enables or disables glitchless modesets. Modesets can be
+ * glitchless if:
+ * (1) There are no raster timing changes, and
+ * (2) The resource requirements of all bandwidth clients are either not
+ * changing, or they are all changing in the same direction (all
+ * increasing or all decreasing).
+ * If glitchless modeset is disabled, or is not possible, heads will be
+ * blanked during the modeset transition.
+ * pstateApi
+ * NV2080_CTRL_PERF_PSTATES_PXXX value.
+ * Required for NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_ASR_ALLOWED_PER_PSTATE,
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_MSCG_ALLOWED_PER_PSTATE,
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_STUTTER_FEATURE_PER_PSTATE and
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_STUTTER_FEATURE_PREDICTED_EFFICIENCY_PER_PSTATE
+ * on PStates 2.0 systems. For other indices must be
+ * NV2080_CTRL_PERF_PSTATES_UNDEFINED. Not used on PStates 3.0 systems.
+ * head
+ * Head index, which is required when querying Mclk switch feature.
+ * (index = NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS)
+ * operation
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_OPERATION_GET
+ * Indicates a "get" operation.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_OPERATION_SET
+ * Indicates a "set" operation.
+ * NV5070_CTRL_IMP_SET_GET_PARAMETER_OPERATION_RESET
+ * Indicates a "reset" operation. This operation will reset the values for
+ * all indices to their RM defaults.
+ * value
+ * Value for new setting of a "set" operation, or the returned value of a
+ * "get" operation; for enable/disable operations, "enable" is non-zero,
+ * and "disable" is zero.
+ *
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_POINTER
+ * NV_ERR_INVALID_INDEX specified index is not supported
+ * NV_ERR_INSUFFICIENT_RESOURCES cannot handle any more overrides
+ * NV_ERR_INVALID_OBJECT the struct needed to get the specified information
+ * is not marked as valid
+ * NV_ERR_INVALID_STATE the parameter has been set but resetting will
+ * not be possible
+ */
+#define NV5070_CTRL_CMD_IMP_SET_GET_PARAMETER (0x50700118) /* finn: Evaluated from "(FINN_NV50_DISPLAY_CHNCTL_INTERFACE_ID << 8) | NV5070_CTRL_IMP_SET_GET_PARAMETER_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_PARAMS_MESSAGE_ID (0x18U)
+
+typedef struct NV5070_CTRL_IMP_SET_GET_PARAMETER_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 index;
+ NvU32 pstateApi;
+ NvU32 head;
+ NvU32 operation;
+ NvU32 value;
+} NV5070_CTRL_IMP_SET_GET_PARAMETER_PARAMS;
+
+/* valid operation values */
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_OPERATION_GET 0
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_OPERATION_SET 1
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_OPERATION_RESET 2
+
+/* valid index value */
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_NONE (0x00000000)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IMP_ENABLE (0x00000001)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_ASR_ALLOWED (0x00000002)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_ASR_ALLOWED_PER_PSTATE (0x00000003)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_IS_MSCG_ALLOWED_PER_PSTATE (0x00000004)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_STUTTER_FEATURE_PER_PSTATE (0x00000005)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_STUTTER_FEATURE_PREDICTED_EFFICIENCY_PER_PSTATE (0x00000006)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS (0x00000007)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_FORCE_MIN_MEMPOOL (0x00000008)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MEMPOOL_COMPRESSION (0x00000009)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_CURSOR_SIZE (0x0000000A)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_ISOFBLATENCY_TEST_ENABLE (0x0000000B)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_ISOFBLATENCY_TEST_WC_TOTAL_LATENCY (0x0000000C)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_ISOFBLATENCY_TEST_MAX_LATENCY (0x0000000D)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_ISOFBLATENCY_TEST_MAX_TEST_PERIOD (0x0000000E)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_GLITCHLESS_MODESET_ENABLE (0x0000000F)
+
+/* valid NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_ISOHUB_STUTTER_FEATURE values */
+#define NV5070_CTRL_IMP_STUTTER_FEATURE_NONE 0
+#define NV5070_CTRL_IMP_STUTTER_FEATURE_ASR 1
+#define NV5070_CTRL_IMP_STUTTER_FEATURE_MSCG 2
+
+/* valid NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE values */
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_POSSIBLE 0:0
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_POSSIBLE_NO (0x00000000)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_POSSIBLE_YES (0x00000001)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_OVERRIDE_MEMPOOL 1:1
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_OVERRIDE_MEMPOOL_NO (0x00000000)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_OVERRIDE_MEMPOOL_YES (0x00000001)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_MID_WATERMARK 2:2
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_MID_WATERMARK_NO (0x00000000)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_MID_WATERMARK_YES (0x00000001)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_DWCF 3:3
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_DWCF_NO (0x00000000)
+#define NV5070_CTRL_IMP_SET_GET_PARAMETER_INDEX_MCLK_SWITCH_FEATURE_OUTPUTS_VALUE_DWCF_YES (0x00000001)
+
+/*
+ * NV5070_CTRL_CMD_SET_MEMPOOL_WAR_FOR_BLIT_TEARING
+ *
+ * This command engages the WAR for blit tearing caused by huge mempool size and
+ * mempool compression. The EVR in aero off mode uses scanline info to predict
+ * where the scanline will be at a later time. Since RG scanline is used to perform
+ * front buffer blits and isohub buffers large amount of display data it may have
+ * fetched several lines of data ahead of where the RG is scanning out leading to
+ * video tearing. The WAR for this problem is to reduce the amount of data fetched.
+ *
+ * base
+ * This struct must be the first member of all 5070 control calls containing
+ * the subdeviceIndex.
+ * bEngageWAR
+ * Indicates if mempool WAR has to be engaged or disengaged.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+
+#define NV5070_CTRL_CMD_SET_MEMPOOL_WAR_FOR_BLIT_TEARING (0x50700119) /* finn: Evaluated from "(FINN_NV50_DISPLAY_CHNCTL_INTERFACE_ID << 8) | NV5070_CTRL_SET_MEMPOOL_WAR_FOR_BLIT_TEARING_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_SET_MEMPOOL_WAR_FOR_BLIT_TEARING_PARAMS_MESSAGE_ID (0x19U)
+
+typedef struct NV5070_CTRL_SET_MEMPOOL_WAR_FOR_BLIT_TEARING_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvBool bEngageWAR;
+} NV5070_CTRL_SET_MEMPOOL_WAR_FOR_BLIT_TEARING_PARAMS;
+typedef struct NV5070_CTRL_SET_MEMPOOL_WAR_FOR_BLIT_TEARING_PARAMS *PNV5070_CTRL_SET_MEMPOOL_WAR_FOR_BLIT_TEARING_PARAMS;
+
+/* _ctrl5070chnc_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070common.h b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070common.h
new file mode 100644
index 0000000..75d7295
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070common.h
@@ -0,0 +1,79 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2001-2021 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
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl5070/ctrl5070common.finn
+//
+
+
+
+#define NV5070_CTRL_CMD_CHANNEL_STATE_IDLE NVBIT(0)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_WRTIDLE NVBIT(1)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_QUIESCENT1 NVBIT(2)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_QUIESCENT2 NVBIT(3)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_EMPTY NVBIT(4)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_FLUSHED NVBIT(5)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_BUSY NVBIT(6)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_DEALLOC NVBIT(7)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_DEALLOC_LIMBO NVBIT(8)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_LIMBO1 NVBIT(9)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_LIMBO2 NVBIT(10)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_FCODEINIT NVBIT(11)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_FCODE NVBIT(12)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_VBIOSINIT NVBIT(13)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_VBIOSOPER NVBIT(14)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_UNCONNECTED NVBIT(15)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_INITIALIZE NVBIT(16)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_SHUTDOWN1 NVBIT(17)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_SHUTDOWN2 NVBIT(18)
+#define NV5070_CTRL_CMD_CHANNEL_STATE_INIT NVBIT(19)
+
+#define NV5070_CTRL_CMD_MAX_HEADS 4U
+#define NV5070_CTRL_CMD_MAX_DACS 4U
+#define NV5070_CTRL_CMD_MAX_SORS 8U
+#define NV5070_CTRL_CMD_MAX_PIORS 4U
+
+#define NV5070_CTRL_CMD_OR_OWNER_NONE (0xFFFFFFFFU)
+#define NV5070_CTRL_CMD_OR_OWNER_HEAD(i) (i)
+#define NV5070_CTRL_CMD_OR_OWNER_HEAD__SIZE_1 NV5070_CTRL_CMD_MAX_HEADS
+
+#define NV5070_CTRL_CMD_SOR_OWNER_MASK_NONE (0x00000000U)
+#define NV5070_CTRL_CMD_SOR_OWNER_MASK_HEAD(i) (1 << i)
+
+#define NV5070_CTRL_CMD_DAC_PROTOCOL_RGB_CRT (0x00000000U)
+
+
+
+#define NV5070_CTRL_CMD_SOR_PROTOCOL_SINGLE_TMDS_A (0x00000000U)
+#define NV5070_CTRL_CMD_SOR_PROTOCOL_SINGLE_TMDS_B (0x00000001U)
+#define NV5070_CTRL_CMD_SOR_PROTOCOL_DUAL_TMDS (0x00000002U)
+#define NV5070_CTRL_CMD_SOR_PROTOCOL_LVDS_CUSTOM (0x00000003U)
+#define NV5070_CTRL_CMD_SOR_PROTOCOL_DP_A (0x00000004U)
+#define NV5070_CTRL_CMD_SOR_PROTOCOL_DP_B (0x00000005U)
+#define NV5070_CTRL_CMD_SOR_PROTOCOL_SUPPORTED (0xFFFFFFFFU)
+
+#define NV5070_CTRL_CMD_PIOR_PROTOCOL_EXT_TMDS_ENC (0x00000000U)
+
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070impoverrides.h b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070impoverrides.h
new file mode 100644
index 0000000..0f2864a
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070impoverrides.h
@@ -0,0 +1,33 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2001-2021 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
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl5070/ctrl5070impoverrides.finn
+//
+
+
+
+
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070or.h b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070or.h
new file mode 100644
index 0000000..eefafa4
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070or.h
@@ -0,0 +1,448 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2001-2021 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
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl5070/ctrl5070or.finn
+//
+
+#include "ctrl5070common.h"
+#include "ctrl/ctrl5070/ctrl5070base.h"
+
+/*
+ * NV5070_CTRL_CMD_GET_SOR_OP_MODE
+ *
+ * This command returns current settings for the specified SOR.
+ *
+ * orNumber
+ * The OR number for which the operating mode needs to be read.
+ *
+ * category
+ * Whether LVDS or CSTM setting are desired.
+ *
+ * puTxda
+ * Status of data pins of link A
+ *
+ * puTxdb
+ * Status of data pins of link B
+ *
+ * puTxca
+ * Status of link A clock
+ *
+ * puTxcb
+ * Status of link B clock
+ *
+ * upper
+ * Whether LVDS bank A is the upper, odd, or first pixel.
+ *
+ * mode
+ * Current protocol.
+ *
+ * linkActA
+ * Status of link B clock
+ *
+ * linkActB
+ * Status of link B clock
+ *
+ * lvdsEn
+ * Output driver configuration.
+ *
+ * lvdsDual
+ * Whether LVDS dual-link mode is turned on or not.
+ *
+ * dupSync
+ * Whether DE, HSYNC, and VSYNC are used for encoding instead of
+ * RES, CNTLE, and CNTLF.
+ *
+ * newMode
+ * Whether new or old mode is being used.
+ *
+ * balanced
+ * Whether balanced encoding is enabled.
+ *
+ * plldiv
+ * Feedback divider for the hi-speed pll
+ *
+ * rotClk
+ * Skew of TXC clock.
+ *
+ * rotDat
+ * How much are the 8 bits of each color channel rotated by
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_GENERIC
+ */
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE (0x50700422) /* finn: Evaluated from "(FINN_NV50_DISPLAY_OR_INTERFACE_ID << 8) | NV5070_CTRL_CMD_GET_SOR_OP_MODE_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_CATEGORY 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_CATEGORY_LVDS 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_CATEGORY_CUSTOM 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_0 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_0_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_0_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_1 1:1
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_1_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_1_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_2 2:2
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_2_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_2_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_3 3:3
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_3_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDA_3_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_0 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_0_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_0_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_1 1:1
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_1_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_1_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_2 2:2
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_2_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_2_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_3 3:3
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_3_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXDB_3_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXCA 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXCA_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXCA_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXCB 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXCB_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PU_TXCB_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_UPPER 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_UPPER_UPPER_RESET 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_MODE 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_MODE_LVDS 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_MODE_TMDS 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LINKACTA 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LINKACTA_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LINKACTA_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LINKACTB 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LINKACTB_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LINKACTB_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LVDS_EN 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LVDS_EN_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LVDS_EN_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LVDS_DUAL 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LVDS_DUAL_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_LVDS_DUAL_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_DUP_SYNC 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_DUP_SYNC_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_DUP_SYNC_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_NEW_MODE 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_NEW_MODE_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_NEW_MODE_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_BALANCED 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_BALANCED_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_BALANCED_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PLLDIV 0:0
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PLLDIV_BY_7 0x00000000
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PLLDIV_BY_10 0x00000001
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_ROTCLK 3:0
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_ROTDAT 2:0
+
+#define NV5070_CTRL_CMD_GET_SOR_OP_MODE_PARAMS_MESSAGE_ID (0x22U)
+
+typedef struct NV5070_CTRL_CMD_GET_SOR_OP_MODE_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 orNumber;
+
+ NvU32 category;
+ NvU32 puTxda;
+ NvU32 puTxdb;
+ NvU32 puTxca;
+ NvU32 puTxcb;
+ NvU32 upper;
+ NvU32 mode;
+ NvU32 linkActA;
+ NvU32 linkActB;
+ NvU32 lvdsEn;
+ NvU32 lvdsDual;
+ NvU32 dupSync;
+ NvU32 newMode;
+ NvU32 balanced;
+ NvU32 plldiv;
+ NvU32 rotClk;
+ NvU32 rotDat;
+} NV5070_CTRL_CMD_GET_SOR_OP_MODE_PARAMS;
+
+
+/*
+ * NV5070_CTRL_CMD_SET_SOR_OP_MODE
+ *
+ * This command applies the specified settings to the specified SOR.
+ *
+ * orNumber
+ * The OR number for which the operating mode needs to be read.
+ * Note that if DCB doesn't report LVDS for the specified orNumber,
+ * the call will return failure.
+ *
+ * category
+ * Whether LVDS or CSTM settings are specified.
+ *
+ * puTxda
+ * Used to enable or disable the data pins of link A.
+ *
+ * puTxdb
+ * Used to enable or disable the data pins of link B.
+ *
+ * puTxca
+ * Used to enable or disable link A clock.
+ *
+ * puTxcb
+ * Used to enable or disable link B clock.
+ *
+ * upper
+ * Whether LVDS bank A should be the upper, odd, or first pixel.
+ *
+ * mode
+ * What protocol (LVDS/TMDS to use).
+ *
+ * linkActA
+ * Used to enable or disable the digital logic of link A.
+ *
+ * linkActB
+ * Used to enable or disable the digital logic of link B.
+ *
+ * lvdsEn
+ * Output driver configuration.
+ *
+ * lvdsDual
+ * Whether to turn on LVDS dual-link mode.
+ *
+ * dupSync
+ * Whether to use DE, HSYNC, and VSYNC for encoding instead of
+ * RES, CNTLE, and CNTLF.
+ *
+ * newMode
+ * Whether to use new or old mode.
+ *
+ * balanced
+ * Whether or not to use balanced encoding.
+ *
+ * plldiv
+ * Feedback divider to use for the hi-speed pll.
+ *
+ * rotClk
+ * How much to skew TXC clock.
+ *
+ * rotDat
+ * How much to rotate the 8 bits of each color channel by.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_GENERIC
+ */
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE (0x50700423) /* finn: Evaluated from "(FINN_NV50_DISPLAY_OR_INTERFACE_ID << 8) | NV5070_CTRL_CMD_SET_SOR_OP_MODE_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_CATEGORY 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_CATEGORY_LVDS 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_CATEGORY_CUSTOM 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_0 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_0_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_0_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_1 1:1
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_1_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_1_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_2 2:2
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_2_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_2_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_3 3:3
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_3_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDA_3_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_0 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_0_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_0_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_1 1:1
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_1_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_1_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_2 2:2
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_2_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_2_ENABLE 0x00000001
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_3 3:3
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_3_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXDB_3_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXCA 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXCA_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXCA_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXCB 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXCB_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PU_TXCB_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_UPPER 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_UPPER_UPPER_RESET 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_MODE 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_MODE_LVDS 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_MODE_TMDS 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LINKACTA 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LINKACTA_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LINKACTA_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LINKACTB 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LINKACTB_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LINKACTB_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LVDS_EN 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LVDS_EN_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LVDS_EN_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LVDS_DUAL 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LVDS_DUAL_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_LVDS_DUAL_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_DUP_SYNC 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_DUP_SYNC_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_DUP_SYNC_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_NEW_MODE 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_NEW_MODE_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_NEW_MODE_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_BALANCED 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_BALANCED_DISABLE 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_BALANCED_ENABLE 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PLLDIV 0:0
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PLLDIV_BY_7 0x00000000
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PLLDIV_BY_10 0x00000001
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_ROTCLK 3:0
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_ROTDAT 2:0
+
+#define NV5070_CTRL_CMD_SET_SOR_OP_MODE_PARAMS_MESSAGE_ID (0x23U)
+
+typedef struct NV5070_CTRL_CMD_SET_SOR_OP_MODE_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 orNumber;
+
+ NvU32 category;
+ NvU32 puTxda;
+ NvU32 puTxdb;
+ NvU32 puTxca;
+ NvU32 puTxcb;
+ NvU32 upper;
+ NvU32 mode;
+ NvU32 linkActA;
+ NvU32 linkActB;
+ NvU32 lvdsEn;
+ NvU32 lvdsDual;
+ NvU32 dupSync;
+ NvU32 newMode;
+ NvU32 balanced;
+ NvU32 plldiv;
+ NvU32 rotClk;
+ NvU32 rotDat;
+} NV5070_CTRL_CMD_SET_SOR_OP_MODE_PARAMS;
+
+/*
+ * NV5070_CTRL_CMD_SET_SOR_FLUSH_MODE
+ *
+ * Set the given SOR number into flush mode in preparation for DP link training.
+ *
+ * orNumber [in]
+ * The SOR number to set into flush mode.
+ *
+ * bEnable [in]
+ * Whether to enable or disable flush mode on this SOR.
+ *
+ * bImmediate [in]
+ * If set to true, will enable flush in immediate mode.
+ * If not, will enable flush in loadv mode.
+ * NOTE: We do not support exit flush in LoadV mode.
+ *
+ * headMask [in]
+ * Optional. If set brings only the heads in the head mask out of flush
+ * OR will stay in flush mode until last head is out of flush mode.
+ * Caller can use _HEAD__ALL to specify all the heads are to be brought out.
+ * NOTE: headMask would be considered only while exiting from flush mode.
+ *
+ * bForceRgDiv [in]
+ * If set forces RgDiv. Should be used only for HW/SW testing
+ *
+ * bUseBFM [in]
+ * If Set then it mean we are using BFM else executing on non-BFM paltforms.
+ *
+ * bFireAndForget [in]
+ * Fire the flush mode & perform post-processing without waiting for it
+ * to be done. This is required for special cases like GC5 where we have
+ * ELV blocked, RG stall & we trigger flush for one shot mode & then do
+ * a modeset by disabling it without actually waiting for it to get
+ * disabled. We will not get any vblank interrupt in this case as we have
+ * stalled RG.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV5070_CTRL_CMD_SET_SOR_FLUSH_MODE (0x50700457) /* finn: Evaluated from "(FINN_NV50_DISPLAY_OR_INTERFACE_ID << 8) | NV5070_CTRL_SET_SOR_FLUSH_MODE_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_SET_SOR_FLUSH_MODE_PARAMS_MESSAGE_ID (0x57U)
+
+typedef struct NV5070_CTRL_SET_SOR_FLUSH_MODE_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 sorNumber;
+ NvBool bEnable;
+ NvBool bImmediate;
+ NvU32 headMask;
+ NvBool bForceRgDiv;
+ NvBool bUseBFM;
+ NvBool bFireAndForget;
+} NV5070_CTRL_SET_SOR_FLUSH_MODE_PARAMS;
+
+#define NV5070_CTRL_SET_SOR_FLUSH_MODE_PARAMS_HEADMASK_HEAD(i) (i):(i)
+#define NV5070_CTRL_SET_SOR_FLUSH_MODE_PARAMS_HEADMASK_HEAD__SIZE_1 NV5070_CTRL_CMD_MAX_HEADS
+#define NV5070_CTRL_SET_SOR_FLUSH_MODE_PARAMS_HEADMASK_HEAD_ALL 0xFFFFFFFF
+
+
+
+/* _ctrl5070or_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070rg.h b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070rg.h
new file mode 100644
index 0000000..88f66ab
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070rg.h
@@ -0,0 +1,437 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2001-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.
+ */
+
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl5070/ctrl5070rg.finn
+//
+
+#include "ctrl/ctrl5070/ctrl5070base.h"
+
+
+
+/*
+ * NV5070_CTRL_CMD_GET_RG_STATUS
+ *
+ * This 'get' command returns the status of raster generator
+ *
+ * head
+ * The head for which RG status is desired.
+ *
+ * scanLocked
+ * Whether or not RG is scan (raster or frame) locked.
+ * flipLocked
+ * Whether or not RG is flip locked.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_GENERIC
+ */
+#define NV5070_CTRL_CMD_GET_RG_STATUS (0x50700202) /* finn: Evaluated from "(FINN_NV50_DISPLAY_RG_INTERFACE_ID << 8) | NV5070_CTRL_CMD_GET_RG_STATUS_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_GET_RG_STATUS_SCANLOCKED_NO (0x00000000)
+#define NV5070_CTRL_CMD_GET_RG_STATUS_SCANLOCKED_YES (0x00000001)
+
+#define NV5070_CTRL_CMD_GET_RG_STATUS_FLIPLOCKED_NO (0x00000000)
+#define NV5070_CTRL_CMD_GET_RG_STATUS_FLIPLOCKED_YES (0x00000001)
+
+#define NV5070_CTRL_CMD_GET_RG_STATUS_STALLED_NO (0x00000000)
+#define NV5070_CTRL_CMD_GET_RG_STATUS_STALLED_YES (0x00000001)
+
+#define NV5070_CTRL_CMD_GET_RG_STATUS_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV5070_CTRL_CMD_GET_RG_STATUS_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 head;
+
+ NvU32 scanLocked; // [OUT]
+ NvU32 flipLocked; // [OUT]
+ NvU32 rgStalled;
+} NV5070_CTRL_CMD_GET_RG_STATUS_PARAMS;
+
+/*
+ * NV5070_CTRL_CMD_UNDERFLOW_PARAMS
+ *
+ * This structure contains data for
+ * NV5070_CTRL_CMD_SET_RG_UNDERFLOW_PROP and
+ * NV5070_CTRL_CMD_GET_RG_UNDERFLOW_PROP CTRL calls
+ *
+ * head
+ * The head for which RG underflow properties needed to be set/get.
+ * Valid values for this parameter are 0 to NV5070_CTRL_CMD_MAX_HEADS.
+ * enable
+ * _SET_RG_: Whether to enable or disable RG underflow reporting.
+ * _GET_RG_: Whether or not RG underflow reporting is enabled.
+ * underflow
+ * _SET_RG_: Clear underflow (CLEAR_UNDERFLOW_YES) or leave it alone
+ * (CLEAR_UNDERFLOW_NO).
+ * Note: The GET_RG function automatically clears the underflow.
+ * It is recommended that GET_RG be used to clear any initial
+ * underflows, and that the "underflow" field be set to
+ * CLEAR_UNDERFLOW_NO in any SET_RG calls. This field may be
+ * deprecated in the future, for SET_RG calls.
+ * _GET_RG_: UNDERFLOWED_YES if an RG underflow occurred since the most
+ * recent prior call to to NV5070_CTRL_CMD_GET_RG_STATUS.
+ * epfifoUnderflow
+ * _SET_RG_: Not used.
+ * _GET_RG_: EPFIFO_UNDERFLOWED_YES if an EPFIFO underflow occurred since
+ * the most recent prior call to NV5070_CTRL_CMD_GET_RG_STATUS.
+ * mode
+ * _SET_RG_: What mode to use when underflow occurs. This is
+ * independent from enable field. This is always active.
+ * _GET_RG_: What mode is used when underflow occurs. This is
+ * independent from enable field. This is always active.
+ */
+typedef struct NV5070_CTRL_CMD_UNDERFLOW_PARAMS {
+ NvU32 head;
+ NvU32 enable;
+ NvU32 underflow;
+ NvU32 epfifoUnderflow;
+ NvU32 mode;
+} NV5070_CTRL_CMD_UNDERFLOW_PARAMS;
+
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_ENABLED_NO (0x00000000)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_ENABLED_YES (0x00000001)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_UNDERFLOWED_NO (0x00000000)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_UNDERFLOWED_YES (0x00000001)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_EPFIFO_UNDERFLOWED_NO (0x00000000)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_EPFIFO_UNDERFLOWED_YES (0x00000001)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_MODE_REPEAT (0x00000000)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_MODE_RED (0x00000001)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_ENABLE_NO (0x00000000)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_ENABLE_YES (0x00000001)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_CLEAR_UNDERFLOW_NO (0x00000000)
+#define NV5070_CTRL_CMD_UNDERFLOW_PROP_CLEAR_UNDERFLOW_YES (0x00000001)
+
+/*
+ * NV5070_CTRL_CMD_GET_RG_UNDERFLOW_PROP
+ *
+ * This command returns the underflow reporting parameters inside
+ * NV5070_CTRL_CMD_UNDERFLOW_PARAMS structure
+ *
+ * underflowParams
+ * Contains data for underflow logging.
+ * Check NV5070_CTRL_CMD_UNDERFLOW_PARAMS structure.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_GENERIC
+ */
+#define NV5070_CTRL_CMD_GET_RG_UNDERFLOW_PROP (0x50700203) /* finn: Evaluated from "(FINN_NV50_DISPLAY_RG_INTERFACE_ID << 8) | NV5070_CTRL_CMD_GET_RG_UNDERFLOW_PROP_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_GET_RG_UNDERFLOW_PROP_PARAMS_MESSAGE_ID (0x3U)
+
+typedef struct NV5070_CTRL_CMD_GET_RG_UNDERFLOW_PROP_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NV5070_CTRL_CMD_UNDERFLOW_PARAMS underflowParams;
+} NV5070_CTRL_CMD_GET_RG_UNDERFLOW_PROP_PARAMS;
+
+
+/*
+ * NV5070_CTRL_CMD_SET_RG_UNDERFLOW_PROP
+ *
+ * This command sets up the underflow parameters using
+ * NV5070_CTRL_CMD_UNDERFLOW_PARAMS structure
+ *
+ * underflowParams
+ * Contains data for underflow logging.
+ * Check NV5070_CTRL_CMD_UNDERFLOW_PARAMS structure.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_GENERIC
+ */
+#define NV5070_CTRL_CMD_SET_RG_UNDERFLOW_PROP (0x50700204) /* finn: Evaluated from "(FINN_NV50_DISPLAY_RG_INTERFACE_ID << 8) | NV5070_CTRL_CMD_SET_RG_UNDERFLOW_PROP_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_SET_RG_UNDERFLOW_PROP_PARAMS_MESSAGE_ID (0x4U)
+
+typedef struct NV5070_CTRL_CMD_SET_RG_UNDERFLOW_PROP_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NV5070_CTRL_CMD_UNDERFLOW_PARAMS underflowParams;
+} NV5070_CTRL_CMD_SET_RG_UNDERFLOW_PROP_PARAMS;
+
+
+/*
+ * NV5070_CTRL_CMD_GET_RG_FLIPLOCK_PROP
+ *
+ * This command gets the timing parameters associated with the lockout period.
+ *
+ * head
+ * The head for which RG fliplock properties are desired.
+ *
+ * maxSwapLockoutSkew
+ * The maximum possible skew between the swap lockout signals for all
+ * heads which are fliplocked to this head.
+ *
+ * swapLockoutStart
+ * Determines the start of the start lockout period, expressed as the
+ * number of lines before the end of the frame. The minimum allowed
+ * value is 1.
+
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_GENERIC
+ */
+#define NV5070_CTRL_CMD_GET_RG_FLIPLOCK_PROP (0x50700205) /* finn: Evaluated from "(FINN_NV50_DISPLAY_RG_INTERFACE_ID << 8) | NV5070_CTRL_CMD_GET_RG_FLIPLOCK_PROP_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_GET_RG_FLIPLOCK_PROP_MAX_SWAP_LOCKOUT_SKEW 9:0
+
+#define NV5070_CTRL_CMD_GET_RG_FLIPLOCK_PROP_SWAP_LOCKOUT_START 15:0
+
+#define NV5070_CTRL_CMD_GET_RG_FLIPLOCK_PROP_PARAMS_MESSAGE_ID (0x5U)
+
+typedef struct NV5070_CTRL_CMD_GET_RG_FLIPLOCK_PROP_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 head;
+
+ NvU32 maxSwapLockoutSkew;
+ NvU32 swapLockoutStart;
+} NV5070_CTRL_CMD_GET_RG_FLIPLOCK_PROP_PARAMS;
+
+/*
+ * NV5070_CTRL_CMD_SET_RG_FLIPLOCK_PROP
+ *
+ * This command sets the timing parameters associated with the lockout period.
+ *
+ * head
+ * The head for which RG fliplock properties are desired.
+ *
+ * maxSwapLockoutSkew
+ * The maximum possible skew between the swap lockout signals for all
+ * heads which are fliplocked to this head.
+ *
+ * swapLockoutStart
+ * Determines the start of the start lockout period, expressed as the
+ * number of lines before the end of the frame. The minimum allowed
+ * value is 1.
+
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_GENERIC
+ */
+#define NV5070_CTRL_CMD_SET_RG_FLIPLOCK_PROP (0x50700206) /* finn: Evaluated from "(FINN_NV50_DISPLAY_RG_INTERFACE_ID << 8) | NV5070_CTRL_CMD_SET_RG_FLIPLOCK_PROP_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_SET_RG_FLIPLOCK_PROP_MAX_SWAP_LOCKOUT_SKEW 9:0
+#define NV5070_CTRL_CMD_SET_RG_FLIPLOCK_PROP_MAX_SWAP_LOCKOUT_SKEW_INIT (0x00000000)
+
+#define NV5070_CTRL_CMD_SET_RG_FLIPLOCK_PROP_SWAP_LOCKOUT_START 15:0
+#define NV5070_CTRL_CMD_SET_RG_FLIPLOCK_PROP_SWAP_LOCKOUT_START_INIT (0x00000000)
+
+#define NV5070_CTRL_CMD_SET_RG_FLIPLOCK_PROP_PARAMS_MESSAGE_ID (0x6U)
+
+typedef struct NV5070_CTRL_CMD_SET_RG_FLIPLOCK_PROP_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 head;
+
+ NvU32 maxSwapLockoutSkew;
+ NvU32 swapLockoutStart;
+} NV5070_CTRL_CMD_SET_RG_FLIPLOCK_PROP_PARAMS;
+
+/*
+ * NV5070_CTRL_CMD_GET_RG_CONNECTED_LOCKPIN_STATELESS
+ *
+ * This command returns which set of lockpins needs to be used in order to
+ * successfully raster lock two heads on different GPUs together. The
+ * second GPU is not inferred from linked SLI state, if any, and needs to
+ * be specified explicitly.
+ *
+ * head
+ * The local head to be locked with the peer head.
+ *
+ * peer.hDisplay
+ * The handle identifying a display object allocated on another
+ * GPU. It specifies the peer of interest with a subdevice
+ * index (see below) and needs to be be distinct from the handle
+ * supplied directly to NvRmControl().
+ *
+ * peer.subdeviceIndex
+ * The index of the peer subdevice of interest.
+ *
+ * peer.head
+ * The peer head to be locked with the local head.
+ *
+ * masterScanLockPin
+ * slaveScanLockPin
+ * Returns the master and slave scanlock pins that would need to
+ * be used to lock the specified heads together, if any.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_OBJECT_HANDLE
+ * NV_ERR_INVALID_OBJECT_PARENT
+ */
+#define NV5070_CTRL_CMD_GET_RG_CONNECTED_LOCKPIN_STATELESS (0x5070020a) /* finn: Evaluated from "(FINN_NV50_DISPLAY_RG_INTERFACE_ID << 8) | NV5070_CTRL_GET_RG_CONNECTED_LOCKPIN_STATELESS_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_GET_RG_CONNECTED_LOCKPIN_STATELESS_MASTER_SCAN_LOCK_CONNECTED 0:0
+#define NV5070_CTRL_CMD_GET_RG_CONNECTED_LOCKPIN_STATELESS_MASTER_SCAN_LOCK_CONNECTED_NO (0x00000000)
+#define NV5070_CTRL_CMD_GET_RG_CONNECTED_LOCKPIN_STATELESS_MASTER_SCAN_LOCK_CONNECTED_YES (0x00000001)
+#define NV5070_CTRL_CMD_GET_RG_CONNECTED_LOCKPIN_STATELESS_MASTER_SCAN_LOCK_PIN 2:1
+
+#define NV5070_CTRL_CMD_GET_RG_CONNECTED_LOCKPIN_STATELESS_SLAVE_SCAN_LOCK_CONNECTED 0:0
+#define NV5070_CTRL_CMD_GET_RG_CONNECTED_LOCKPIN_STATELESS_SLAVE_SCAN_LOCK_CONNECTED_NO (0x00000000)
+#define NV5070_CTRL_CMD_GET_RG_CONNECTED_LOCKPIN_STATELESS_SLAVE_SCAN_LOCK_CONNECTED_YES (0x00000001)
+#define NV5070_CTRL_CMD_GET_RG_CONNECTED_LOCKPIN_STATELESS_SLAVE_SCAN_LOCK_PIN 2:1
+
+#define NV5070_CTRL_GET_RG_CONNECTED_LOCKPIN_STATELESS_PARAMS_MESSAGE_ID (0xAU)
+
+typedef struct NV5070_CTRL_GET_RG_CONNECTED_LOCKPIN_STATELESS_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 head;
+
+ struct {
+ NvHandle hDisplay;
+ NvU32 subdeviceIndex;
+ NvU32 head;
+ } peer;
+
+ NvU32 masterScanLock;
+ NvU32 slaveScanLock;
+} NV5070_CTRL_GET_RG_CONNECTED_LOCKPIN_STATELESS_PARAMS;
+
+/*
+ * NV5070_CTRL_CMD_GET_PINSET_LOCKPINS
+ *
+ * Get the lockpins for the specified pinset.
+ *
+ * pinset [in]
+ * The pinset whose corresponding lockpin numbers need to be determined
+ * must be specified with this parameter.
+ *
+ * scanLockPin [out]
+ * The scanlock lockpin (rasterlock or framelock) index, which can be
+ * either master or slave, is returned in this parameter.
+ *
+ * flipLockPin [out]
+ * The fliplock lockpin index, is returned in this parameter.
+ *
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV5070_CTRL_CMD_GET_PINSET_LOCKPINS (0x5070020b) /* finn: Evaluated from "(FINN_NV50_DISPLAY_RG_INTERFACE_ID << 8) | NV5070_CTRL_GET_PINSET_LOCKPINS_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_GET_PINSET_LOCKPINS_SCAN_LOCK_PIN_NONE 0xffffffff
+
+#define NV5070_CTRL_GET_PINSET_LOCKPINS_FLIP_LOCK_PIN_NONE 0xffffffff
+
+#define NV5070_CTRL_GET_PINSET_LOCKPINS_PARAMS_MESSAGE_ID (0xBU)
+
+typedef struct NV5070_CTRL_GET_PINSET_LOCKPINS_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 pinset;
+ NvU32 scanLockPin;
+ NvU32 flipLockPin;
+} NV5070_CTRL_GET_PINSET_LOCKPINS_PARAMS;
+
+/*
+ * NV5070_CTRL_CMD_GET_RG_SCAN_LINE
+ *
+ * This 'get' command returns the current scan line value from raster generator
+ *
+ * head
+ * The head for which current scan line number is desired.
+ *
+ * scanLine
+ * Current scan line number.
+ *
+ * inVblank
+ * Whether or not in vblank.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_GENERIC
+ */
+#define NV5070_CTRL_CMD_GET_RG_SCAN_LINE (0x5070020c) /* finn: Evaluated from "(FINN_NV50_DISPLAY_RG_INTERFACE_ID << 8) | NV5070_CTRL_CMD_GET_RG_SCAN_LINE_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_CMD_GET_RG_SCAN_LINE_IN_VBLANK_NO (0x00000000)
+#define NV5070_CTRL_CMD_GET_RG_SCAN_LINE_IN_VBLANK_YES (0x00000001)
+
+#define NV5070_CTRL_CMD_GET_RG_SCAN_LINE_PARAMS_MESSAGE_ID (0xCU)
+
+typedef struct NV5070_CTRL_CMD_GET_RG_SCAN_LINE_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 head;
+ NvU32 scanLine; // [OUT]
+ NvU32 inVblank; // [OUT]
+} NV5070_CTRL_CMD_GET_RG_SCAN_LINE_PARAMS;
+
+/*
+ * NV5070_CTRL_CMD_GET_FRAMELOCK_HEADER_LOCKPINS
+ *
+ * This command returns FrameLock header lock pin information.
+ * Lock pin index returned by this command corresponds to the
+ * evo lock pin number. Example - lock pin index 0 means
+ * LOCKPIN_0.
+ *
+ * frameLockPin [out]
+ * This parameter returns the FrameLock pin index
+ * connected to FrameLock header.
+ *
+ * rasterLockPin [out]
+ * This parameter returns the RasterLock pin index
+ * connected to FrameLock header.
+ *
+ * flipLockPin [out]
+ * This parameter returns the FlipLock pin index
+ * connected to FrameLock header.
+ *
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_NOT_SUPPORTED
+ */
+
+#define NV5070_CTRL_CMD_GET_FRAMELOCK_HEADER_LOCKPINS (0x5070020d) /* finn: Evaluated from "(FINN_NV50_DISPLAY_RG_INTERFACE_ID << 8) | NV5070_CTRL_GET_FRAMELOCK_HEADER_LOCKPINS_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_GET_FRAMELOCK_HEADER_LOCKPINS_FRAME_LOCK_PIN_NONE (0xffffffff)
+#define NV5070_CTRL_GET_FRAMELOCK_HEADER_LOCKPINS_RASTER_LOCK_PIN_NONE (0xffffffff)
+#define NV5070_CTRL_GET_FRAMELOCK_HEADER_LOCKPINS_FLIP_LOCK_PIN_NONE (0xffffffff)
+#define NV5070_CTRL_GET_FRAMELOCK_HEADER_LOCKPINS_PARAMS_MESSAGE_ID (0xDU)
+
+typedef struct NV5070_CTRL_GET_FRAMELOCK_HEADER_LOCKPINS_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+ NvU32 frameLockPin;
+ NvU32 rasterLockPin;
+ NvU32 flipLockPin;
+} NV5070_CTRL_GET_FRAMELOCK_HEADER_LOCKPINS_PARAMS;
+
+
+
+/* _ctrl5070rg_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070system.h b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070system.h
new file mode 100644
index 0000000..c222907
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070system.h
@@ -0,0 +1,81 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2005-2021 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
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl5070/ctrl5070system.finn
+//
+
+#include "ctrl/ctrl5070/ctrl5070base.h"
+#include "ctrl/ctrl5070/ctrl5070common.h" // NV5070_CTRL_CMD_MAX_HEADS
+
+/* extract cap bit setting from tbl */
+#define NV5070_CTRL_SYSTEM_GET_CAP(tbl,c) (((NvU8)tbl[(1?c)]) & (0?c))
+
+/* caps format is byte_index:bit_mask */
+#define NV5070_CTRL_SYSTEM_CAPS_BUG_237734_REQUIRES_DMI_WAR 0:0x01 // Deprecated
+#define NV5070_CTRL_SYSTEM_CAPS_STEREO_DIN_AVAILABLE 0:0x02
+#define NV5070_CTRL_SYSTEM_CAPS_BUG_381003_MULTIWAY_AFR_WAR 0:0x04
+#define NV5070_CTRL_SYSTEM_CAPS_BUG_538079_COLOR_COMPRESSION_SUPPORTED 0:0x08 // Deprecated
+#define NV5070_CTRL_SYSTEM_CAPS_BUG_2052012_GLITCHY_MCLK_SWITCH 0:0x10
+#define NV5070_CTRL_SYSTEM_CAPS_DEEP_COLOR_SUPPORT 0:0x20
+#define NV5070_CTRL_SYSTEM_CAPS_BUG_644815_DNISO_VIDMEM_ONLY 0:0x40
+
+
+/* size in bytes of display caps table */
+#define NV5070_CTRL_SYSTEM_CAPS_TBL_SIZE 1
+
+/*
+ * NV5070_CTRL_CMD_SYSTEM_GET_CAPS_V2
+ *
+ * This command returns the set of display capabilities for the parent device
+ * in the form of an array of unsigned bytes. Display capabilities
+ * include supported features and required workarounds for the display
+ * engine(s) within the device, each represented by a byte offset into the
+ * table and a bit position within that byte. The set of display capabilities
+ * will be normalized across all GPUs within the device (a feature capability
+ * will be set only if it's supported on all GPUs while a required workaround
+ * capability will be set if any of the GPUs require it).
+ *
+ * [out] capsTbl
+ * This caps table array is where the display cap bits will be transferred
+ * by the RM. The caps table is an array of unsigned bytes.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ */
+#define NV5070_CTRL_CMD_SYSTEM_GET_CAPS_V2 (0x50700709) /* finn: Evaluated from "(FINN_NV50_DISPLAY_SYSTEM_INTERFACE_ID << 8) | NV5070_CTRL_SYSTEM_GET_CAPS_V2_PARAMS_MESSAGE_ID" */
+
+#define NV5070_CTRL_SYSTEM_GET_CAPS_V2_PARAMS_MESSAGE_ID (0x9U)
+
+typedef struct NV5070_CTRL_SYSTEM_GET_CAPS_V2_PARAMS {
+ NV5070_CTRL_CMD_BASE_PARAMS base;
+
+ NvU8 capsTbl[NV5070_CTRL_SYSTEM_CAPS_TBL_SIZE];
+} NV5070_CTRL_SYSTEM_GET_CAPS_V2_PARAMS;
+
+/* _ctrl5070system_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070verif.h b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070verif.h
new file mode 100644
index 0000000..ab31072
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl5070/ctrl5070verif.h
@@ -0,0 +1,32 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2001-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.
+ */
+
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl5070/ctrl5070verif.finn
+//
+