From f9e4e0e07fd5a6a7757db977f69c8e91a0ae283f Mon Sep 17 00:00:00 2001 From: John Hubbard Date: Wed, 12 Jun 2019 14:41:51 -0700 Subject: New ref manuals directory, delete old locations As decided in a recent OpenSource-Approval meeting, we want the directory structure for reference manuals here to be fairly close to the way they are organized internal to NVIDIA. This CL therefore does the following: Rename from: Host-Fifo/volta/gv100/* Display-Ref-Manuals/gv100/* to: manuals/volta/gv100/* Regenerate index.html files to match (important for the "github pages" site, at https://nvidia.github.io/open-gpu-doc/ . Reviewed by: Maneet Singh --- Host-Fifo/index.html | 7 - Host-Fifo/volta/gv100/dev_bus.ref.txt | 316 --- Host-Fifo/volta/gv100/dev_fifo.ref.txt | 639 ----- Host-Fifo/volta/gv100/dev_master.ref.txt | 363 --- Host-Fifo/volta/gv100/dev_pbdma.ref.txt | 4261 ---------------------------- Host-Fifo/volta/gv100/dev_ram.ref.txt | 1269 --------- Host-Fifo/volta/gv100/dev_timer.ref.txt | 79 - Host-Fifo/volta/gv100/dev_usermode.ref.txt | 134 - Host-Fifo/volta/gv100/index.html | 13 - Host-Fifo/volta/index.html | 7 - 10 files changed, 7088 deletions(-) delete mode 100644 Host-Fifo/index.html delete mode 100644 Host-Fifo/volta/gv100/dev_bus.ref.txt delete mode 100644 Host-Fifo/volta/gv100/dev_fifo.ref.txt delete mode 100644 Host-Fifo/volta/gv100/dev_master.ref.txt delete mode 100644 Host-Fifo/volta/gv100/dev_pbdma.ref.txt delete mode 100644 Host-Fifo/volta/gv100/dev_ram.ref.txt delete mode 100644 Host-Fifo/volta/gv100/dev_timer.ref.txt delete mode 100644 Host-Fifo/volta/gv100/dev_usermode.ref.txt delete mode 100644 Host-Fifo/volta/gv100/index.html delete mode 100644 Host-Fifo/volta/index.html (limited to 'Host-Fifo') diff --git a/Host-Fifo/index.html b/Host-Fifo/index.html deleted file mode 100644 index e8f184d..0000000 --- a/Host-Fifo/index.html +++ /dev/null @@ -1,7 +0,0 @@ - - Host-Fifo - -

Host-Fifo

- volta
- - diff --git a/Host-Fifo/volta/gv100/dev_bus.ref.txt b/Host-Fifo/volta/gv100/dev_bus.ref.txt deleted file mode 100644 index 488e265..0000000 --- a/Host-Fifo/volta/gv100/dev_bus.ref.txt +++ /dev/null @@ -1,316 +0,0 @@ -Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. - -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. --------------------------------------------------------------------------------- - -#define NV_PBUS_SW_SCRATCH(i) (0x00001580+(i)*4) /* RW-4A */ -#define NV_PBUS_SW_SCRATCH__SIZE_1 32 /* */ -#define NV_PBUS_SW_SCRATCH_FIELD 31:0 /* RWIVF */ -#define NV_PBUS_SW_SCRATCH_FIELD_INIT 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_0 0x00001100 /* RW-4R */ -#define NV_PBUS_INTR_0_PRI_SQUASH 1:1 /* RWIVF */ -#define NV_PBUS_INTR_0_PRI_SQUASH_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_PRI_SQUASH_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_PRI_SQUASH_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_0_PRI_FECSERR 2:2 /* RWIVF */ -#define NV_PBUS_INTR_0_PRI_FECSERR_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_PRI_FECSERR_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_PRI_FECSERR_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_0_PRI_TIMEOUT 3:3 /* RWIVF */ -#define NV_PBUS_INTR_0_PRI_TIMEOUT_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_PRI_TIMEOUT_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_PRI_TIMEOUT_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_0_FB_REQ_TIMEOUT 4:4 /* RWIVF */ -#define NV_PBUS_INTR_0_FB_REQ_TIMEOUT_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_FB_REQ_TIMEOUT_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_FB_REQ_TIMEOUT_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_0_FB_ACK_TIMEOUT 5:5 /* RWIVF */ -#define NV_PBUS_INTR_0_FB_ACK_TIMEOUT_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_FB_ACK_TIMEOUT_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_FB_ACK_TIMEOUT_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_0_FB_ACK_EXTRA 6:6 /* RWIVF */ -#define NV_PBUS_INTR_0_FB_ACK_EXTRA_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_FB_ACK_EXTRA_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_FB_ACK_EXTRA_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_0_FB_RDATA_TIMEOUT 7:7 /* RWIVF */ -#define NV_PBUS_INTR_0_FB_RDATA_TIMEOUT_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_FB_RDATA_TIMEOUT_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_FB_RDATA_TIMEOUT_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_0_FB_RDATA_EXTRA 8:8 /* RWIVF */ -#define NV_PBUS_INTR_0_FB_RDATA_EXTRA_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_FB_RDATA_EXTRA_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_FB_RDATA_EXTRA_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_0_SW 26:26 /* RWIVF */ -#define NV_PBUS_INTR_0_SW_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_SW_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_SW_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_0_POSTED_DEADLOCK_TIMEOUT 27:27 /* RWIVF */ -#define NV_PBUS_INTR_0_POSTED_DEADLOCK_TIMEOUT_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_POSTED_DEADLOCK_TIMEOUT_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_POSTED_DEADLOCK_TIMEOUT_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_0_ACCESS_TIMEOUT 31:31 /* RWIVF */ -#define NV_PBUS_INTR_0_ACCESS_TIMEOUT_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PBUS_INTR_0_ACCESS_TIMEOUT_PENDING 0x00000001 /* R---V */ -#define NV_PBUS_INTR_0_ACCESS_TIMEOUT_RESET 0x00000001 /* -W--C */ -#define NV_PBUS_INTR_EN_0 0x00001140 /* RW-4R */ -#define NV_PBUS_INTR_EN_0_PRI_SQUASH 1:1 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_PRI_SQUASH_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_PRI_SQUASH_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_0_PRI_FECSERR 2:2 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_PRI_FECSERR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_PRI_FECSERR_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_0_PRI_TIMEOUT 3:3 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_PRI_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_PRI_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_0_FB_REQ_TIMEOUT 4:4 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_FB_REQ_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_FB_REQ_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_0_FB_ACK_TIMEOUT 5:5 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_FB_ACK_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_FB_ACK_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_0_FB_ACK_EXTRA 6:6 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_FB_ACK_EXTRA_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_FB_ACK_EXTRA_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_0_FB_RDATA_TIMEOUT 7:7 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_FB_RDATA_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_FB_RDATA_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_0_FB_RDATA_EXTRA 8:8 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_FB_RDATA_EXTRA_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_FB_RDATA_EXTRA_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_0_SW 26:26 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_SW_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_SW_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_0_POSTED_DEADLOCK_TIMEOUT 27:27 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_POSTED_DEADLOCK_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_POSTED_DEADLOCK_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_0_ACCESS_TIMEOUT 31:31 /* RWIVF */ -#define NV_PBUS_INTR_EN_0_ACCESS_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_0_ACCESS_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1 0x00001144 /* RW-4R */ -#define NV_PBUS_INTR_EN_1_PRI_SQUASH 1:1 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_PRI_SQUASH_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_PRI_SQUASH_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1_PRI_FECSERR 2:2 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_PRI_FECSERR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_PRI_FECSERR_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1_PRI_TIMEOUT 3:3 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_PRI_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_PRI_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1_FB_REQ_TIMEOUT 4:4 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_FB_REQ_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_FB_REQ_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1_FB_ACK_TIMEOUT 5:5 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_FB_ACK_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_FB_ACK_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1_FB_ACK_EXTRA 6:6 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_FB_ACK_EXTRA_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_FB_ACK_EXTRA_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1_FB_RDATA_TIMEOUT 7:7 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_FB_RDATA_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_FB_RDATA_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1_FB_RDATA_EXTRA 8:8 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_FB_RDATA_EXTRA_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_FB_RDATA_EXTRA_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1_SW 26:26 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_SW_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_SW_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1_POSTED_DEADLOCK_TIMEOUT 27:27 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_POSTED_DEADLOCK_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_POSTED_DEADLOCK_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_INTR_EN_1_ACCESS_TIMEOUT 31:31 /* RWIVF */ -#define NV_PBUS_INTR_EN_1_ACCESS_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_INTR_EN_1_ACCESS_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_SW_INTR_0 0x00001150 /* -W-4R */ -#define NV_PBUS_SW_INTR_0_SET 0:0 /* -W-VF */ -#define NV_PBUS_SW_INTR_0_SET_PENDING 0x00000001 /* -W--V */ -#define NV_PBUS_SW_INTR_1 0x00001154 /* RW-4R */ -#define NV_PBUS_SW_INTR_1_SCRATCH 31:0 /* RWIVF */ -#define NV_PBUS_SW_INTR_1_SCRATCH_DATA 0x00000000 /* RWI-V */ -#define NV_PBUS_SW_INTR_2 0x00001158 /* RW-4R */ -#define NV_PBUS_SW_INTR_2_SCRATCH 31:0 /* RWIVF */ -#define NV_PBUS_SW_INTR_2_SCRATCH_DATA 0x00000000 /* RWI-V */ -#define NV_PBUS_SW_INTR_3 0x0000115C /* RW-4R */ -#define NV_PBUS_SW_INTR_3_SCRATCH 31:0 /* RWIVF */ -#define NV_PBUS_SW_INTR_3_SCRATCH_FLAG 0x00000000 /* RWI-V */ -#define NV_PBUS_SW_INTR_4 0x00001160 /* RW-4R */ -#define NV_PBUS_SW_INTR_4_SCRATCH 31:0 /* RWIVF */ -#define NV_PBUS_SW_INTR_4_SCRATCH_FLAG 0x00000000 /* RWI-V */ -#define NV_PBUS_BAR0_WINDOW 0x00001700 /* RW-4R */ -#define NV_PBUS_BAR0_WINDOW_BASE 23:0 /* RWIUF */ -#define NV_PBUS_BAR0_WINDOW_BASE_0 0x00000000 /* RWI-V */ -#define NV_PBUS_BAR0_WINDOW_TARGET 25:24 /* RWIUF */ -#define NV_PBUS_BAR0_WINDOW_TARGET_VID_MEM 0x00000000 /* RWI-V */ -#define NV_PBUS_BAR0_WINDOW_TARGET_SYS_MEM_COHERENT 0x00000002 /* RW--V */ -#define NV_PBUS_BAR0_WINDOW_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* RW--V */ -#define NV_PBUS_BAR0_WINDOW_BASE_SHIFT 16 /* */ -#define NV_PBUS_BAR1_BLOCK 0x00001704 /* RW-4R */ -#define NV_PBUS_BAR1_BLOCK_MAP 29:0 /* */ -#define NV_PBUS_BAR1_BLOCK_PTR 27:0 /* RWIUF */ -#define NV_PBUS_BAR1_BLOCK_PTR_0 0x00000000 /* RWI-V */ -#define NV_PBUS_BAR1_BLOCK_TARGET 29:28 /* RWIUF */ -#define NV_PBUS_BAR1_BLOCK_TARGET_VID_MEM 0x00000000 /* RWI-V */ -#define NV_PBUS_BAR1_BLOCK_TARGET_SYS_MEM_COHERENT 0x00000002 /* RW--V */ -#define NV_PBUS_BAR1_BLOCK_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* RW--V */ -#define NV_PBUS_BAR1_BLOCK_MODE 31:31 /* RWIUF */ -#define NV_PBUS_BAR1_BLOCK_MODE_PHYSICAL 0x00000000 /* RWI-V */ -#define NV_PBUS_BAR1_BLOCK_MODE_VIRTUAL 0x00000001 /* RW--V */ -#define NV_PBUS_BAR1_BLOCK_PTR_SHIFT 12 /* */ -#define NV_PBUS_BIND_STATUS 0x00001710 /* R--4R */ -#define NV_PBUS_BIND_STATUS_BAR1_PENDING 0:0 /* R-IUF */ -#define NV_PBUS_BIND_STATUS_BAR1_PENDING_EMPTY 0x00000000 /* R-I-V */ -#define NV_PBUS_BIND_STATUS_BAR1_PENDING_BUSY 0x00000001 /* R---V */ -#define NV_PBUS_BIND_STATUS_BAR1_OUTSTANDING 1:1 /* R-IUF */ -#define NV_PBUS_BIND_STATUS_BAR1_OUTSTANDING_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_BIND_STATUS_BAR1_OUTSTANDING_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_BIND_STATUS_BAR2_PENDING 2:2 /* R-IUF */ -#define NV_PBUS_BIND_STATUS_BAR2_PENDING_EMPTY 0x00000000 /* R-I-V */ -#define NV_PBUS_BIND_STATUS_BAR2_PENDING_BUSY 0x00000001 /* R---V */ -#define NV_PBUS_BIND_STATUS_BAR2_OUTSTANDING 3:3 /* R-IUF */ -#define NV_PBUS_BIND_STATUS_BAR2_OUTSTANDING_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_BIND_STATUS_BAR2_OUTSTANDING_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_BAR2_BLOCK 0x00001714 /* RW-4R */ -#define NV_PBUS_BAR2_BLOCK_MAP 29:0 /* */ -#define NV_PBUS_BAR2_BLOCK_PTR 27:0 /* RWIUF */ -#define NV_PBUS_BAR2_BLOCK_PTR_0 0x00000000 /* RWI-V */ -#define NV_PBUS_BAR2_BLOCK_TARGET 29:28 /* RWIUF */ -#define NV_PBUS_BAR2_BLOCK_TARGET_VID_MEM 0x00000000 /* RWI-V */ -#define NV_PBUS_BAR2_BLOCK_TARGET_SYS_MEM_COHERENT 0x00000002 /* RW--V */ -#define NV_PBUS_BAR2_BLOCK_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* RW--V */ -#define NV_PBUS_BAR2_BLOCK_MODE 31:31 /* RWIUF */ -#define NV_PBUS_BAR2_BLOCK_MODE_PHYSICAL 0x00000000 /* RWI-V */ -#define NV_PBUS_BAR2_BLOCK_MODE_VIRTUAL 0x00000001 /* RW--V */ -#define NV_PBUS_BAR2_BLOCK_PTR_SHIFT 12 /* */ -#define NV_PBUS_EXT_CG 0x00001C00 /* RW-4R */ -#define NV_PBUS_EXT_CG_IDLE_CG_DLY_CNT 5:0 /* RWIVF */ -#define NV_PBUS_EXT_CG_IDLE_CG_DLY_CNT_HWINIT 0x00000000 /* RWI-V */ -#define NV_PBUS_EXT_CG_IDLE_CG_DLY_CNT__PROD 0x00000002 /* RW--V */ -#define NV_PBUS_EXT_CG_IDLE_CG_EN 6:6 /* RWIVF */ -#define NV_PBUS_EXT_CG_IDLE_CG_EN_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_EXT_CG_IDLE_CG_EN_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_EXT_CG_IDLE_CG_EN__PROD 0x00000001 /* RW--V */ -#define NV_PBUS_EXT_CG_STALL_CG_EN 14:14 /* RWIVF */ -#define NV_PBUS_EXT_CG_STALL_CG_EN_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_EXT_CG_STALL_CG_EN_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_EXT_CG_STALL_CG_EN__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG_WAKEUP_DLY_CNT 19:16 /* RWIVF */ -#define NV_PBUS_EXT_CG_WAKEUP_DLY_CNT_HWINIT 0x00000000 /* RWI-V */ -#define NV_PBUS_EXT_CG_WAKEUP_DLY_CNT__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1 0x00001C04 /* RW-4R */ -#define NV_PBUS_EXT_CG1_MONITOR_CG_EN 0:0 /* RWIVF */ -#define NV_PBUS_EXT_CG1_MONITOR_CG_EN_ENABLED 0x00000001 /* RW--V */ -#define NV_PBUS_EXT_CG1_MONITOR_CG_EN_DISABLED 0x00000000 /* RWI-V */ -#define NV_PBUS_EXT_CG1_MONITOR_CG_EN__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG 9:1 /* */ -#define NV_PBUS_EXT_CG1_SLCG_ENABLED 0x00000000 /* */ -#define NV_PBUS_EXT_CG1_SLCG_DISABLED 0x000001ff /* */ -#define NV_PBUS_EXT_CG1_SLCG__PROD 0x00000000 /* */ -#define NV_PBUS_EXT_CG1_SLCG_BL 1:1 /* RWIVF */ -#define NV_PBUS_EXT_CG1_SLCG_BL_ENABLED 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_BL_DISABLED 0x00000001 /* RWI-V */ -#define NV_PBUS_EXT_CG1_SLCG_BL__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_C11 2:2 /* RWIVF */ -#define NV_PBUS_EXT_CG1_SLCG_C11_ENABLED 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_C11_DISABLED 0x00000001 /* RWI-V */ -#define NV_PBUS_EXT_CG1_SLCG_C11__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_MAP 3:3 /* RWIVF */ -#define NV_PBUS_EXT_CG1_SLCG_MAP_ENABLED 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_MAP_DISABLED 0x00000001 /* RWI-V */ -#define NV_PBUS_EXT_CG1_SLCG_MAP__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_PRI 4:4 /* RWIVF */ -#define NV_PBUS_EXT_CG1_SLCG_PRI_ENABLED 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_PRI_DISABLED 0x00000001 /* RWI-V */ -#define NV_PBUS_EXT_CG1_SLCG_PRI__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_UNROLL 5:5 /* RWIVF */ -#define NV_PBUS_EXT_CG1_SLCG_UNROLL_ENABLED 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_UNROLL_DISABLED 0x00000001 /* RWI-V */ -#define NV_PBUS_EXT_CG1_SLCG_UNROLL__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_ASMBL 6:6 /* RWIVF */ -#define NV_PBUS_EXT_CG1_SLCG_ASMBL_ENABLED 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_ASMBL_DISABLED 0x00000001 /* RWI-V */ -#define NV_PBUS_EXT_CG1_SLCG_ASMBL__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_ROLL 7:7 /* RWIVF */ -#define NV_PBUS_EXT_CG1_SLCG_ROLL_ENABLED 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_ROLL_DISABLED 0x00000001 /* RWI-V */ -#define NV_PBUS_EXT_CG1_SLCG_ROLL__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_IFR 8:8 /* RWIVF */ -#define NV_PBUS_EXT_CG1_SLCG_IFR_ENABLED 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_IFR_DISABLED 0x00000001 /* RWI-V */ -#define NV_PBUS_EXT_CG1_SLCG_IFR__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_PM 9:9 /* RWIVF */ -#define NV_PBUS_EXT_CG1_SLCG_PM_ENABLED 0x00000000 /* RW--V */ -#define NV_PBUS_EXT_CG1_SLCG_PM_DISABLED 0x00000001 /* RWI-V */ -#define NV_PBUS_EXT_CG1_SLCG_PM__PROD 0x00000000 /* RW--V */ -#define NV_PBUS_IFR_STATUS1 0x00001724 /* R--4R */ -#define NV_PBUS_IFR_STATUS1_BAR0ADDR 23:0 /* R-IVF */ -#define NV_PBUS_IFR_STATUS1_BAR0ADDR_INIT 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_STATUS1_IFF_DONE 27:27 /* R-IVF */ -#define NV_PBUS_IFR_STATUS1_IFF_DONE_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_STATUS1_IFF_DONE_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_STATUS1_IDLE 29:29 /* R-IVF */ -#define NV_PBUS_IFR_STATUS1_IDLE_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_STATUS1_IDLE_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_STATUS1_LASTEXEC 30:30 /* R-IVF */ -#define NV_PBUS_IFR_STATUS1_LASTEXEC_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_STATUS1_LASTEXEC_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_STATUS1_READINRMW 31:31 /* R-IVF */ -#define NV_PBUS_IFR_STATUS1_READINRMW_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_STATUS1_READINRMW_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR 0x00001728 /* R--4R */ -#define NV_PBUS_IFR_ERROR_BADSIG 0:0 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_BADSIG_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_BADSIG_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_FAILSAFE_TIMEOUT 1:1 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_FAILSAFE_TIMEOUT_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_FAILSAFE_TIMEOUT_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_BADPARITY 8:8 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_BADPARITY_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_BADPARITY_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_BADROMLEN 12:12 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_BADROMLEN_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_BADROMLEN_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_BADCHECKSUM 16:16 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_BADCHECKSUM_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_BADCHECKSUM_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_BADFORMAT 20:20 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_BADFORMAT_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_BADFORMAT_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_PRI_ERROR 21:21 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_PRI_ERROR_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_PRI_ERROR_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_IFF_RESENSE_TIMEOUT 23:23 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_IFF_RESENSE_TIMEOUT_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_IFF_RESENSE_TIMEOUT_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_IFF_BADFIELDSPEC 24:24 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_IFF_BADFIELDSPEC_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_IFF_BADFIELDSPEC_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_IFF_BADSPACEID 25:25 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_IFF_BADSPACEID_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_IFF_BADSPACEID_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_IFF_BADFUSELEN 26:26 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_IFF_BADFUSELEN_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_IFF_BADFUSELEN_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_IFF_BADCMDOP 27:27 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_IFF_BADCMDOP_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_IFF_BADCMDOP_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_IFR_ERROR_IFF_PRI_ERROR 29:29 /* R-IVF */ -#define NV_PBUS_IFR_ERROR_IFF_PRI_ERROR_TRUE 0x00000001 /* R---V */ -#define NV_PBUS_IFR_ERROR_IFF_PRI_ERROR_FALSE 0x00000000 /* R-I-V */ -#define NV_PBUS_LVDS_USER 0x00001800 /* RW-4R */ -#define NV_PBUS_LVDS_USER_VALUE 3:0 /* RWIVF */ -#define NV_PBUS_LVDS_USER_VALUE_INIT 0x0000000F /* RWI-V */ diff --git a/Host-Fifo/volta/gv100/dev_fifo.ref.txt b/Host-Fifo/volta/gv100/dev_fifo.ref.txt deleted file mode 100644 index dcb055e..0000000 --- a/Host-Fifo/volta/gv100/dev_fifo.ref.txt +++ /dev/null @@ -1,639 +0,0 @@ -Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. - -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. --------------------------------------------------------------------------------- - -#define NV_PFIFO_CFG0 0x00002004 /* R--4R */ -#define NV_PFIFO_CFG0_NUM_PBDMA 7:0 /* R-IUF */ -#define NV_PFIFO_CFG0_NUM_PBDMA_INIT 14 /* R-I-V */ -#define NV_PFIFO_CFG0_PBDMA_FAULT_ID 23:16 /* R-IUF */ -#define NV_PFIFO_CFG0_PBDMA_FAULT_ID_INIT 32 /* R-I-V */ -#define NV_PFIFO_CFG1 0x00002008 /* R--4R */ -#define NV_PFIFO_CFG1_NUM_CHANNELS 31:0 /* R-IUF */ -#define NV_PFIFO_CFG1_NUM_CHANNELS_INIT 4096 /* R-I-V */ -#define NV_PFIFO_CFG2 0x0000200c /* R--4R */ -#define NV_PFIFO_CFG2_HOST_CLASS_ID 15:0 /* R-IUF */ -#define NV_PFIFO_CFG2_HOST_CLASS_ID_VALUE 50031 /* R-I-V */ -#define NV_PFIFO_CONFIG 0x00002200 /* RW-4R */ -#define NV_PFIFO_CONFIG_L2_EVICT 9:8 /* RWIVF */ -#define NV_PFIFO_CONFIG_L2_EVICT_FIRST 0x00000000 /* RWI-V */ -#define NV_PFIFO_CONFIG_L2_EVICT_NORMAL 0x00000001 /* RW--V */ -#define NV_PFIFO_ACQ_PRETEST 0x00002250 /* RW-4R */ -#define NV_PFIFO_ACQ_PRETEST_TIMEOUT 7:0 /* RWIUF */ -#define NV_PFIFO_ACQ_PRETEST_TIMEOUT_8 0x00000008 /* RWI-V */ -#define NV_PFIFO_ACQ_PRETEST_TIMESCALE 15:12 /* RWIUF */ -#define NV_PFIFO_ACQ_PRETEST_TIMESCALE_0 0x00000000 /* RWI-V */ -#define NV_PFIFO_ACQ_PRETEST_TIMESCALE_10 0x0000000a /* RW--V */ -#define NV_PFIFO_USERD_WRITEBACK 0x0000225C /* RW-4R */ -#define NV_PFIFO_USERD_WRITEBACK_TIMER 7:0 /* RWIUF */ -#define NV_PFIFO_USERD_WRITEBACK_TIMER_DISABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_USERD_WRITEBACK_TIMER_SHORT 0x00000003 /* RW--V */ -#define NV_PFIFO_USERD_WRITEBACK_TIMER_100US 0x00000064 /* RWI-V */ -#define NV_PFIFO_USERD_WRITEBACK_TIMESCALE 15:12 /* RWIUF */ -#define NV_PFIFO_USERD_WRITEBACK_TIMESCALE_0 0x00000000 /* RWI-V */ -#define NV_PFIFO_USERD_WRITEBACK_TIMESCALE_SHORT 0x00000000 /* */ -#define NV_PFIFO_USERD_WRITEBACK_TIMESCALE_100US 0x00000000 /* */ -#define NV_PCCSR_CHANNEL_INST(i) (0x00800000+(i)*8) /* RW-4A */ -#define NV_PCCSR_CHANNEL_INST__SIZE_1 4096 /* */ -#define NV_PCCSR_CHANNEL_INST_PTR 27:0 /* RWXUF */ -#define NV_PCCSR_CHANNEL_INST_TARGET 29:28 /* RWXVF */ -#define NV_PCCSR_CHANNEL_INST_TARGET_VID_MEM 0x00000000 /* RW--V */ -#define NV_PCCSR_CHANNEL_INST_TARGET_SYS_MEM_COHERENT 0x00000002 /* RW--V */ -#define NV_PCCSR_CHANNEL_INST_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* RW--V */ -#define NV_PCCSR_CHANNEL_INST_BIND 31:31 /* RWIVF */ -#define NV_PCCSR_CHANNEL_INST_BIND_FALSE 0x00000000 /* RWI-V */ -#define NV_PCCSR_CHANNEL_INST_BIND_TRUE 0x00000001 /* RW--V */ -#define NV_PCCSR_CHANNEL_INST_PTR_ALIGN_SHIFT 12 /* */ -#define NV_PCCSR_CHANNEL(i) (0x00800004+(i)*8) /* RW-4A */ -#define NV_PCCSR_CHANNEL__SIZE_1 4096 /* */ -#define NV_PCCSR_CHANNEL_ENABLE 0:0 /* R-IVF */ -#define NV_PCCSR_CHANNEL_ENABLE_NOT_IN_USE 0x00000000 /* R-I-V */ -#define NV_PCCSR_CHANNEL_ENABLE_IN_USE 0x00000001 /* R---V */ -#define NV_PCCSR_CHANNEL_NEXT 1:1 /* RWIVF */ -#define NV_PCCSR_CHANNEL_NEXT_FALSE 0x00000000 /* RWI-V */ -#define NV_PCCSR_CHANNEL_NEXT_TRUE 0x00000001 /* RW--V */ -#define NV_PCCSR_CHANNEL_FORCE_CTX_RELOAD 8:8 /* -W-VF */ -#define NV_PCCSR_CHANNEL_FORCE_CTX_RELOAD_FALSE 0x00000000 /* -W--T */ -#define NV_PCCSR_CHANNEL_FORCE_CTX_RELOAD_TRUE 0x00000001 /* -W--T */ -#define NV_PCCSR_CHANNEL_ENABLE_SET 10:10 /* -W-VF */ -#define NV_PCCSR_CHANNEL_ENABLE_SET_TRUE 0x00000001 /* -W--T */ -#define NV_PCCSR_CHANNEL_ENABLE_SET_FALSE 0x00000000 /* -W--T */ -#define NV_PCCSR_CHANNEL_ENABLE_CLR 11:11 /* -W-VF */ -#define NV_PCCSR_CHANNEL_ENABLE_CLR_TRUE 0x00000001 /* -W--T */ -#define NV_PCCSR_CHANNEL_ENABLE_CLR_FALSE 0x00000000 /* -W--T */ -#define NV_PCCSR_CHANNEL_PBDMA_FAULTED 22:22 /* RWIVF */ -#define NV_PCCSR_CHANNEL_PBDMA_FAULTED_FALSE 0x00000000 /* R-I-V */ -#define NV_PCCSR_CHANNEL_PBDMA_FAULTED_TRUE 0x00000001 /* R---V */ -#define NV_PCCSR_CHANNEL_PBDMA_FAULTED_RESET 0x00000001 /* -W--T */ -#define NV_PCCSR_CHANNEL_ENG_FAULTED 23:23 /* RWIVF */ -#define NV_PCCSR_CHANNEL_ENG_FAULTED_FALSE 0x00000000 /* R-I-V */ -#define NV_PCCSR_CHANNEL_ENG_FAULTED_TRUE 0x00000001 /* R---V */ -#define NV_PCCSR_CHANNEL_ENG_FAULTED_RESET 0x00000001 /* -W--T */ -#define NV_PCCSR_CHANNEL_STATUS 27:24 /* R-IVF */ -#define NV_PCCSR_CHANNEL_STATUS_IDLE 0x00000000 /* R-I-V */ -#define NV_PCCSR_CHANNEL_STATUS_PENDING 0x00000001 /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_PENDING_CTX_RELOAD 0x00000002 /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_PENDING_ACQUIRE 0x00000003 /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_PENDING_ACQ_CTX_RELOAD 0x00000004 /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_ON_PBDMA 0x00000005 /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_ON_PBDMA_AND_ENG 0x00000006 /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_ON_ENG 0x00000007 /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_ON_ENG_PENDING_ACQUIRE 0x00000008 /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_ON_ENG_PENDING 0x00000009 /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_ON_PBDMA_CTX_RELOAD 0x0000000A /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_ON_PBDMA_AND_ENG_CTX_RELOAD 0x0000000B /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_ON_ENG_CTX_RELOAD 0x0000000C /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_ON_ENG_PENDING_CTX_RELOAD 0x0000000D /* R---V */ -#define NV_PCCSR_CHANNEL_STATUS_ON_ENG_PENDING_ACQ_CTX_RELOAD 0x0000000E /* R---V */ -#define NV_PCCSR_CHANNEL_BUSY 28:28 /* R-IVF */ -#define NV_PCCSR_CHANNEL_BUSY_FALSE 0x00000000 /* R-I-V */ -#define NV_PCCSR_CHANNEL_BUSY_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_RUNLIST_BASE 0x00002270 /* RW-4R */ -#define NV_PFIFO_RUNLIST_BASE_PTR 27:0 /* RWEUF */ -#define NV_PFIFO_RUNLIST_BASE_PTR_NULL 0x00000000 /* RWE-V */ -#define NV_PFIFO_RUNLIST_BASE_TARGET 29:28 /* RWEVF */ -#define NV_PFIFO_RUNLIST_BASE_TARGET_VID_MEM 0x00000000 /* RWE-V */ -#define NV_PFIFO_RUNLIST_BASE_TARGET_SYS_MEM_COHERENT 0x00000002 /* RW--V */ -#define NV_PFIFO_RUNLIST_BASE_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* RW--V */ -#define NV_PFIFO_RUNLIST_BASE_PTR_ALIGN_SHIFT 12 /* */ -#define NV_PFIFO_RUNLIST 0x00002274 /* RW-4R */ -#define NV_PFIFO_RUNLIST_LENGTH 15:0 /* RWEUF */ -#define NV_PFIFO_RUNLIST_LENGTH_ZERO 0x00000000 /* RWE-V */ -#define NV_PFIFO_RUNLIST_LENGTH_MAX 0x0000ffff /* RW--V */ -#define NV_PFIFO_RUNLIST_ID 23:20 /* RWXUF */ -#define NV_PFIFO_ENG_RUNLIST_BASE(i) (0x00002280+(i)*8) /* R--4A */ -#define NV_PFIFO_ENG_RUNLIST_BASE__SIZE_1 13 /* */ -#define NV_PFIFO_ENG_RUNLIST_BASE_PTR 27:0 /* R-EUF */ -#define NV_PFIFO_ENG_RUNLIST_BASE_PTR_NULL 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENG_RUNLIST_BASE_TARGET 29:28 /* R-EVF */ -#define NV_PFIFO_ENG_RUNLIST_BASE_TARGET_VID_MEM 0x0 /* R-E-V */ -#define NV_PFIFO_ENG_RUNLIST_BASE_TARGET_SYS_MEM_COHERENT 0x2 /* R---V */ -#define NV_PFIFO_ENG_RUNLIST_BASE_TARGET_SYS_MEM_NONCOHERENT 0x3 /* R---V */ -#define NV_PFIFO_ENG_RUNLIST(i) (0x00002284+(i)*8) /* R--4A */ -#define NV_PFIFO_ENG_RUNLIST__SIZE_1 13 /* */ -#define NV_PFIFO_ENG_RUNLIST_LENGTH 15:0 /* R-EUF */ -#define NV_PFIFO_ENG_RUNLIST_LENGTH_ZERO 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENG_RUNLIST_LENGTH_MAX 0x0000ffff /* R---V */ -#define NV_PFIFO_ENG_RUNLIST_PENDING 20:20 /* R-EVF */ -#define NV_PFIFO_ENG_RUNLIST_PENDING_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENG_RUNLIST_PENDING_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_PBDMA_MAP(i) (0x00002390+(i)*4) /* R--4A */ -#define NV_PFIFO_PBDMA_MAP__SIZE_1 14 /* */ -#define NV_PFIFO_PBDMA_MAP_RUNLISTS 15:0 /* R-XVF */ -#define NV_PFIFO_LB_ENTRY_SIZE 128 /* */ -#define NV_PFIFO_LB_GPBUF_CONTROL(i) (0x000023E0+(i)*8) /* R--4A */ -#define NV_PFIFO_LB_GPBUF_CONTROL__SIZE_1 14 /* */ -#define NV_PFIFO_LB_GPBUF_CONTROL_SIZE 30:24 /* R-XUF */ -#define NV_PFIFO_LB_GPBUF_CONTROL_SIZE_128B 0x00000001 /* R-X-V */ -#define NV_PFIFO_LB_PBBUF_CONTROL(i) (0x000023E4+(i)*8) /* R--4A */ -#define NV_PFIFO_LB_PBBUF_CONTROL__SIZE_1 14 /* */ -#define NV_PFIFO_LB_PBBUF_CONTROL_SIZE 31:24 /* R-XUF */ -#define NV_PFIFO_LB_PBBUF_CONTROL_SIZE_128B 0x00000001 /* R-X-V */ -#define NV_PFIFO_INTR_0 0x00002100 /* RW-4R */ -#define NV_PFIFO_INTR_0_BIND_ERROR 0:0 /* RWEVF */ -#define NV_PFIFO_INTR_0_BIND_ERROR_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_0_BIND_ERROR_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_0_BIND_ERROR_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_0_SCHED_ERROR 8:8 /* RWEVF */ -#define NV_PFIFO_INTR_0_SCHED_ERROR_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_0_SCHED_ERROR_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_0_SCHED_ERROR_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_0_CHSW_ERROR 16:16 /* RWEVF */ -#define NV_PFIFO_INTR_0_CHSW_ERROR_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_0_CHSW_ERROR_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_0_CHSW_ERROR_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_0_MEMOP_TIMEOUT 23:23 /* RWIVF */ -#define NV_PFIFO_INTR_0_MEMOP_TIMEOUT_NOT_PENDING 0x00000000 /* R-I-V */ -#define NV_PFIFO_INTR_0_MEMOP_TIMEOUT_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_0_MEMOP_TIMEOUT_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_0_LB_ERROR 24:24 /* RWEVF */ -#define NV_PFIFO_INTR_0_LB_ERROR_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_0_LB_ERROR_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_0_LB_ERROR_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_0_PBDMA_INTR 29:29 /* R-XVF */ -#define NV_PFIFO_INTR_0_PBDMA_INTR_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PFIFO_INTR_0_PBDMA_INTR_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_0_RUNLIST_EVENT 30:30 /* R-EVF */ -#define NV_PFIFO_INTR_0_RUNLIST_EVENT_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_0_RUNLIST_EVENT_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_0_CHANNEL_INTR 31:31 /* RWEVF */ -#define NV_PFIFO_INTR_0_CHANNEL_INTR_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_0_CHANNEL_INTR_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_0_CHANNEL_INTR_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_EN_0 0x00002140 /* RW-4R */ -#define NV_PFIFO_INTR_EN_0_BIND_ERROR 0:0 /* RWIVF */ -#define NV_PFIFO_INTR_EN_0_BIND_ERROR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_0_BIND_ERROR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_0_SCHED_ERROR 8:8 /* RWIVF */ -#define NV_PFIFO_INTR_EN_0_SCHED_ERROR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_0_SCHED_ERROR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_0_CHSW_ERROR 16:16 /* RWIVF */ -#define NV_PFIFO_INTR_EN_0_CHSW_ERROR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_0_CHSW_ERROR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_0_MEMOP_TIMEOUT 23:23 /* RWIVF */ -#define NV_PFIFO_INTR_EN_0_MEMOP_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_0_MEMOP_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_0_LB_ERROR 24:24 /* RWIVF */ -#define NV_PFIFO_INTR_EN_0_LB_ERROR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_0_LB_ERROR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_0_PBDMA_INTR 29:29 /* RWIVF */ -#define NV_PFIFO_INTR_EN_0_PBDMA_INTR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_0_PBDMA_INTR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_0_RUNLIST_EVENT 30:30 /* RWIVF */ -#define NV_PFIFO_INTR_EN_0_RUNLIST_EVENT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_0_RUNLIST_EVENT_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_0_CHANNEL_INTR 31:31 /* RWIVF */ -#define NV_PFIFO_INTR_EN_0_CHANNEL_INTR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_0_CHANNEL_INTR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_1 0x00002528 /* RW-4R */ -#define NV_PFIFO_INTR_EN_1_BIND_ERROR 0:0 /* RWIVF */ -#define NV_PFIFO_INTR_EN_1_BIND_ERROR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_1_BIND_ERROR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_1_SCHED_ERROR 8:8 /* RWIVF */ -#define NV_PFIFO_INTR_EN_1_SCHED_ERROR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_1_SCHED_ERROR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_1_CHSW_ERROR 16:16 /* RWIVF */ -#define NV_PFIFO_INTR_EN_1_CHSW_ERROR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_1_CHSW_ERROR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_1_MEMOP_TIMEOUT 23:23 /* RWIVF */ -#define NV_PFIFO_INTR_EN_1_MEMOP_TIMEOUT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_1_MEMOP_TIMEOUT_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_1_LB_ERROR 24:24 /* RWIVF */ -#define NV_PFIFO_INTR_EN_1_LB_ERROR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_1_LB_ERROR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_1_PBDMA_INTR 29:29 /* RWIVF */ -#define NV_PFIFO_INTR_EN_1_PBDMA_INTR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_1_PBDMA_INTR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_1_RUNLIST_EVENT 30:30 /* RWIVF */ -#define NV_PFIFO_INTR_EN_1_RUNLIST_EVENT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_1_RUNLIST_EVENT_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_EN_1_CHANNEL_INTR 31:31 /* RWIVF */ -#define NV_PFIFO_INTR_EN_1_CHANNEL_INTR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_EN_1_CHANNEL_INTR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_STALL 0x00002530 /* RW-4R */ -#define NV_PFIFO_INTR_STALL_BIND_ERROR 0:0 /* RWIVF */ -#define NV_PFIFO_INTR_STALL_BIND_ERROR_DISABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_INTR_STALL_BIND_ERROR_ENABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_INTR_STALL_SCHED_ERROR 8:8 /* RWIVF */ -#define NV_PFIFO_INTR_STALL_SCHED_ERROR_DISABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_INTR_STALL_SCHED_ERROR_ENABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_INTR_STALL_CHSW_ERROR 16:16 /* RWIVF */ -#define NV_PFIFO_INTR_STALL_CHSW_ERROR_DISABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_INTR_STALL_CHSW_ERROR_ENABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_INTR_STALL_MEMOP_TIMEOUT 23:23 /* RWIVF */ -#define NV_PFIFO_INTR_STALL_MEMOP_TIMEOUT_DISABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_INTR_STALL_MEMOP_TIMEOUT_ENABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_INTR_STALL_LB_ERROR 24:24 /* RWIVF */ -#define NV_PFIFO_INTR_STALL_LB_ERROR_DISABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_INTR_STALL_LB_ERROR_ENABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_INTR_STALL_PBDMA_INTR 29:29 /* RWIVF */ -#define NV_PFIFO_INTR_STALL_PBDMA_INTR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_STALL_PBDMA_INTR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_STALL_RUNLIST_EVENT 30:30 /* RWIVF */ -#define NV_PFIFO_INTR_STALL_RUNLIST_EVENT_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_STALL_RUNLIST_EVENT_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_STALL_CHANNEL_INTR 31:31 /* RWIVF */ -#define NV_PFIFO_INTR_STALL_CHANNEL_INTR_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_INTR_STALL_CHANNEL_INTR_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_INTR_BIND_ERROR 0x0000252C /* R--4R */ -#define NV_PFIFO_INTR_BIND_ERROR_CODE 7:0 /* R-EVF */ -#define NV_PFIFO_INTR_BIND_ERROR_CODE_NO_ERROR 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_BIND_ERROR_CODE_BIND_NOT_UNBOUND 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_BIND_ERROR_CODE_UNBIND_WHILE_RUNNING 0x00000003 /* R---V */ -#define NV_PFIFO_INTR_BIND_ERROR_CODE_INVALID_CTX_TGT 0x00000006 /* R---V */ -#define NV_PFIFO_INTR_BIND_ERROR_CODE_UNBIND_WHILE_PARKED 0x0000000B /* R---V */ -#define NV_PFIFO_INTR_SCHED_ERROR 0x0000254C /* R--4R */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE 7:0 /* R-EVF */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_NO_ERROR 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_ENGINE_RESET 0x00000005 /* R---V */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_RL_REQ_TIMEOUT 0x0000000c /* R---V */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_RL_ACK_TIMEOUT 0x00000006 /* R---V */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_RL_ACK_EXTRA 0x00000007 /* R---V */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_RL_RDAT_TIMEOUT 0x00000008 /* R---V */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_RL_RDAT_EXTRA 0x00000009 /* R---V */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_CTXSW_TIMEOUT 0x0000000a /* R---V */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_NEW_RUNLIST 0x0000000d /* R---V */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_CONFIG_WHILE_BUSY 0x0000000e /* R---V */ -#define NV_PFIFO_INTR_SCHED_ERROR_CODE_BAD_TSG 0x00000020 /* R---V */ -#define NV_PFIFO_INTR_CHSW_ERROR 0x0000256C /* R--4R */ -#define NV_PFIFO_INTR_CHSW_ERROR_CODE 7:0 /* R-EVF */ -#define NV_PFIFO_INTR_CHSW_ERROR_CODE_NO_ERROR 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_CHSW_ERROR_CODE_REQ_TIMEOUT 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_CHSW_ERROR_CODE_ACK_TIMEOUT 0x00000002 /* R---V */ -#define NV_PFIFO_INTR_CHSW_ERROR_CODE_ACK_EXTRA 0x00000003 /* R---V */ -#define NV_PFIFO_INTR_CHSW_ERROR_CODE_RDAT_TIMEOUT 0x00000004 /* R---V */ -#define NV_PFIFO_INTR_CHSW_ERROR_CODE_RDAT_EXTRA 0x00000005 /* R---V */ -#define NV_PFIFO_INTR_LB_ERROR 0x0000258C /* R--4R */ -#define NV_PFIFO_INTR_LB_ERROR_CODE 7:0 /* R-EVF */ -#define NV_PFIFO_INTR_LB_ERROR_CODE_NO_ERROR 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_LB_ERROR_CODE_REQ_TIMEOUT 0x00000002 /* R---V */ -#define NV_PFIFO_INTR_LB_ERROR_CODE_ACK_TIMEOUT 0x00000003 /* R---V */ -#define NV_PFIFO_INTR_LB_ERROR_CODE_ACK_EXTRA 0x00000004 /* R---V */ -#define NV_PFIFO_INTR_LB_ERROR_CODE_RDAT_TIMEOUT 0x00000005 /* R---V */ -#define NV_PFIFO_INTR_LB_ERROR_CODE_RDAT_EXTRA 0x00000006 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID 0x000025A0 /* R--4R */ -#define NV_PFIFO_INTR_PBDMA_ID_0 0:0 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_0_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_0_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_1 1:1 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_1_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_1_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_2 2:2 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_2_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_2_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_3 3:3 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_3_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_3_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_4 4:4 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_4_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_4_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_5 5:5 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_5_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_5_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_6 6:6 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_6_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_6_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_7 7:7 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_7_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_7_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_8 8:8 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_8_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_8_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_9 9:9 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_9_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_9_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_10 10:10 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_10_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_10_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_11 11:11 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_11_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_11_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_12 12:12 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_12_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_12_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_13 13:13 /* R-EVF */ -#define NV_PFIFO_INTR_PBDMA_ID_13_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_PBDMA_ID_13_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_PBDMA_ID_STATUS(i) (i):(i) /* */ -#define NV_PFIFO_INTR_PBDMA_ID_STATUS__SIZE_1 14 /* */ -#define NV_PFIFO_INTR_PBDMA_ID_STATUS_NOT_PENDING 0x00000000 /* */ -#define NV_PFIFO_INTR_PBDMA_ID_STATUS_PENDING 0x00000001 /* */ -#define NV_PFIFO_INTR_RUNLIST 0x00002A00 /* RW-4R */ -#define NV_PFIFO_INTR_RUNLIST_EVENT(i) (i):(i) /* */ -#define NV_PFIFO_INTR_RUNLIST_EVENT__SIZE_1 32 /* */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_NOT_PENDING 0x00000000 /* */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_PENDING 0x00000001 /* */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_RESET 0x00000001 /* */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_0 0:0 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_0_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_0_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_0_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_1 1:1 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_1_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_1_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_1_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_2 2:2 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_2_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_2_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_2_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_3 3:3 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_3_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_3_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_3_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_4 4:4 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_4_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_4_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_4_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_5 5:5 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_5_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_5_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_5_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_6 6:6 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_6_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_6_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_6_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_7 7:7 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_7_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_7_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_7_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_8 8:8 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_8_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_8_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_8_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_9 9:9 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_9_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_9_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_9_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_10 10:10 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_10_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_10_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_10_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_11 11:11 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_11_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_11_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_11_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_12 12:12 /* RWEVF */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_12_NOT_PENDING 0x00000000 /* R-E-V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_12_PENDING 0x00000001 /* R---V */ -#define NV_PFIFO_INTR_RUNLIST_EVENT_12_RESET 0x00000001 /* -W--T */ -#define NV_PFIFO_ENG_TIMEOUT 0x00002A0C /* RW-4R */ -#define NV_PFIFO_ENG_TIMEOUT_PERIOD 30:0 /* RWIVF */ -#define NV_PFIFO_ENG_TIMEOUT_PERIOD_INIT 0x003fffff /* RWI-V */ -#define NV_PFIFO_ENG_TIMEOUT_PERIOD_MAX 0x7fffffff /* RW--V */ -#define NV_PFIFO_ENG_TIMEOUT_DETECTION 31:31 /* RWIVF */ -#define NV_PFIFO_ENG_TIMEOUT_DETECTION_DISABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_ENG_TIMEOUT_DETECTION_ENABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_CLEAR_FAULTED_TIMEOUT 0x00002A14 /* RW-4R */ -#define NV_PFIFO_CLEAR_FAULTED_TIMEOUT_PERIOD 29:0 /* RWIVF */ -#define NV_PFIFO_CLEAR_FAULTED_TIMEOUT_PERIOD_INIT 0x000003ff /* RWI-V */ -#define NV_PFIFO_CLEAR_FAULTED_TIMEOUT_PERIOD_MAX 0x3fffffff /* RW--V */ -#define NV_PFIFO_CLEAR_FAULTED_TIMEOUT_DETECTION 31:31 /* RWIVF */ -#define NV_PFIFO_CLEAR_FAULTED_TIMEOUT_DETECTION_DISABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_CLEAR_FAULTED_TIMEOUT_DETECTION_ENABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG 0x000026E0 /* RW-4R */ -#define NV_PFIFO_BLKCG_IDLE_CG_DLY_CNT 5:0 /* RWIVF */ -#define NV_PFIFO_BLKCG_IDLE_CG_DLY_CNT_INIT 0x00000000 /* RWI-V */ -#define NV_PFIFO_BLKCG_IDLE_CG_DLY_CNT__PROD 0x00000002 /* RW--V */ -#define NV_PFIFO_BLKCG_IDLE_CG_EN 6:6 /* RWIVF */ -#define NV_PFIFO_BLKCG_IDLE_CG_EN_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_BLKCG_IDLE_CG_EN_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_BLKCG_IDLE_CG_EN__PROD 0x00000001 /* RW--V */ -#define NV_PFIFO_BLKCG_STALL_CG_EN 14:14 /* RWIVF */ -#define NV_PFIFO_BLKCG_STALL_CG_EN_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_BLKCG_STALL_CG_EN_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_BLKCG_STALL_CG_EN__PROD 0x00000001 /* RW--V */ -#define NV_PFIFO_BLKCG_WAKEUP_DLY_CNT 19:16 /* RWIVF */ -#define NV_PFIFO_BLKCG_WAKEUP_DLY_CNT_INIT 0x00000000 /* RWI-V */ -#define NV_PFIFO_BLKCG_WAKEUP_DLY_CNT__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1 0x000026EC /* RW-4R */ -#define NV_PFIFO_BLKCG1_MONITOR_CG_EN 0:0 /* RWIVF */ -#define NV_PFIFO_BLKCG1_MONITOR_CG_EN_ENABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_BLKCG1_MONITOR_CG_EN_DISABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG 16:1 /* */ -#define NV_PFIFO_BLKCG1_SLCG_ENABLED 0x00000000 /* */ -#define NV_PFIFO_BLKCG1_SLCG_DISABLED 0x0000FFFF /* */ -#define NV_PFIFO_BLKCG1_SLCG__PROD 0x00000000 /* */ -#define NV_PFIFO_BLKCG1_SLCG_RLP 1:1 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_RLP_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_RLP_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_RLP__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_CPUQ_RSP 2:2 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_CPUQ_RSP_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_CPUQ_RSP_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_CPUQ_RSP__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_EVH 3:3 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_EVH_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_EVH_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_EVH__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PMC 4:4 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_PMC_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PMC_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_PMC__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_FECS_PRIV 5:5 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_FECS_PRIV_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_FECS_PRIV_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_FECS_PRIV__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PRIV_RING 6:6 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_PRIV_RING_ENABLED 0x00000000 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_PRIV_RING_DISABLED 0x00000001 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PRIV_RING__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_EISM 7:7 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_EISM_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_EISM_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_EISM__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_LB 8:8 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_LB_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_LB_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_LB__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_CTL 9:9 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_CTL_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_CTL_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_CTL__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_GP 10:10 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_GP_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_GP_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_GP__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_PB 11:11 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_PB_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_PB_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_PBDMA_PB__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_TMR 12:12 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_TMR_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_TMR_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_TMR__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PRI 13:13 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_PRI_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_PRI_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_PRI__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_CHSW 14:14 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_CHSW_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_CHSW_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_CHSW__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_XBAR 15:15 /* RWIVF */ -#define NV_PFIFO_BLKCG1_SLCG_XBAR_ENABLED 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_XBAR_DISABLED 0x00000001 /* RWI-V */ -#define NV_PFIFO_BLKCG1_SLCG_XBAR__PROD 0x00000000 /* RW--V */ -#define NV_PFIFO_BLKCG1_SLCG_UNUSED 16:16 /* */ -#define NV_PFIFO_BLKCG1_SLCG_UNUSED_ENABLED 0x00000000 /* */ -#define NV_PFIFO_BLKCG1_SLCG_UNUSED_DISABLED 0x00000001 /* */ -#define NV_PFIFO_BLKCG1_SLCG_UNUSED__PROD 0x00000000 /* */ -#define NV_PFIFO_SCHED_DISABLE 0x00002630 /* RW-4R */ -#define NV_PFIFO_SCHED_DISABLE_RUNLIST(i) (i):(i) /* */ -#define NV_PFIFO_SCHED_DISABLE_RUNLIST__SIZE_1 13 /* */ -#define NV_PFIFO_SCHED_DISABLE_FALSE 0x00000000 /* */ -#define NV_PFIFO_SCHED_DISABLE_TRUE 0x00000001 /* */ -#define NV_PFIFO_SCHED_DISABLE_RUNLIST_MASK 12:0 /* RWEVF */ -#define NV_PFIFO_SCHED_DISABLE_RUNLIST_MASK_INIT 0 /* RWE-V */ -#define NV_PFIFO_PREEMPT 0x00002634 /* RW-4R */ -#define NV_PFIFO_PREEMPT_ID 11:0 /* */ -#define NV_PFIFO_PREEMPT_ID_NULL 0x00000000 /* */ -#define NV_PFIFO_PREEMPT_ID_HW 11:0 /* RWEUF */ -#define NV_PFIFO_PREEMPT_ID_HW_NULL 0x00000000 /* RWE-V */ -#define NV_PFIFO_PREEMPT_PENDING 20:20 /* R-EVF */ -#define NV_PFIFO_PREEMPT_PENDING_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_PREEMPT_PENDING_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_PREEMPT_TYPE 25:24 /* RWEVF */ -#define NV_PFIFO_PREEMPT_TYPE_CHANNEL 0x00000000 /* RWE-V */ -#define NV_PFIFO_PREEMPT_TYPE_TSG 0x00000001 /* RW--V */ -#define NV_PFIFO_RUNLIST_PREEMPT 0x00002638 /* RW-4R */ -#define NV_PFIFO_RUNLIST_PREEMPT_RUNLIST(i) (i):(i) /* */ -#define NV_PFIFO_RUNLIST_PREEMPT_RUNLIST__SIZE_1 32 /* */ -#define NV_PFIFO_RUNLIST_PREEMPT_PENDING 0x00000001 /* */ -#define NV_PFIFO_RUNLIST_PREEMPT_DONE 0x00000000 /* */ -#define NV_PFIFO_RUNLIST_PREEMPT_RUNLISTS 13-1:0 /* RWEUF */ -#define NV_PFIFO_RUNLIST_PREEMPT_RUNLISTS_INIT 0x00000000 /* RWE-V */ -#define NV_PFIFO_SCHED_STATUS 0x0000263C /* R--4R */ -#define NV_PFIFO_SCHED_STATUS_CHSW 1:1 /* R-EVF */ -#define NV_PFIFO_SCHED_STATUS_CHSW_NOT_IN_PROGRESS 0x00000000 /* R-E-V */ -#define NV_PFIFO_SCHED_STATUS_CHSW_IN_PROGRESS 0x00000001 /* R---V */ -#define NV_PFIFO_SCHED_STATUS_RUNLIST_FETCH 2:2 /* R-EVF */ -#define NV_PFIFO_SCHED_STATUS_RUNLIST_FETCH_IDLE 0x00000000 /* R-E-V */ -#define NV_PFIFO_SCHED_STATUS_RUNLIST_FETCH_BUSY 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS(i) (0x00002640+(i)*8) /* R--4A */ -#define NV_PFIFO_ENGINE_STATUS__SIZE_1 15 /* */ -#define NV_PFIFO_ENGINE_STATUS_ID 11:0 /* */ -#define NV_PFIFO_ENGINE_STATUS_ID_ZERO 0x00000000 /* */ -#define NV_PFIFO_ENGINE_STATUS_ID_HW 11:0 /* R-XUF */ -#define NV_PFIFO_ENGINE_STATUS_ID_HW_ZERO 0x00000000 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_ID_TYPE 12:12 /* R-XVF */ -#define NV_PFIFO_ENGINE_STATUS_ID_TYPE_CHID 0x00000000 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_ID_TYPE_TSGID 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_CTX_STATUS 15:13 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_CTX_STATUS_INVALID 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_CTX_STATUS_VALID 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_CTX_STATUS_CTXSW_LOAD 0x00000005 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_CTX_STATUS_CTXSW_SAVE 0x00000006 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_CTX_STATUS_CTXSW_SWITCH 0x00000007 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_ID 27:16 /* */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_ID_ZERO 0x00000000 /* */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_ID_HW 27:16 /* R-XUF */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_ID_HW_ZERO 0x00000000 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_ID_TYPE 28:28 /* R-XVF */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_ID_TYPE_CHID 0x00000000 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_ID_TYPE_TSGID 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_ENG_RELOAD 29:29 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_ENG_RELOAD_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_ENG_RELOAD_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_FAULTED 30:30 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_FAULTED_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_FAULTED_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_ENGINE 31:31 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_ENGINE_IDLE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_ENGINE_BUSY 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_CTXSW 15:15 /* */ -#define NV_PFIFO_ENGINE_STATUS_CTXSW_NOT_IN_PROGRESS 0x00000000 /* */ -#define NV_PFIFO_ENGINE_STATUS_CTXSW_IN_PROGRESS 0x00000001 /* */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG(i) (0x00002644+(i)*8) /* R--4A */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG__SIZE_1 15 /* */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_IF_EN 0:0 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_IF_EN_DISABLED 0x00000000 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_IF_EN_ENABLED 0x00000001 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_INTR 4:4 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_INTR_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_INTR_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE0_NO_CREDITS 8:8 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE0_NO_CREDITS_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE0_NO_CREDITS_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE0_WFI 12:12 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE0_WFI_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE0_WFI_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE1_NO_CREDITS 16:16 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE1_NO_CREDITS_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE1_NO_CREDITS_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE1_WFI 20:20 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE1_WFI_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_DEBUG_PIPE1_WFI_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_INST(i) (0x00003100+(i)*4) /* R--4A */ -#define NV_PFIFO_ENGINE_STATUS_INST__SIZE_1 15 /* */ -#define NV_PFIFO_ENGINE_STATUS_INST_PTR 27:0 /* R-XUF */ -#define NV_PFIFO_ENGINE_STATUS_INST_PTR_ZERO 0x00000000 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_INST_TARGET 29:28 /* R-XUF */ -#define NV_PFIFO_ENGINE_STATUS_INST_TARGET_VID_MEM 0x00000000 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_INST_TARGET_SYS_MEM_COHERENT 0x00000002 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_INST_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_INST_VALID 31:31 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_INST_VALID_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_INST_VALID_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST(i) (0x00003000+(i)*4) /* R--4A */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST__SIZE_1 15 /* */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST_PTR 27:0 /* R-XUF */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST_PTR_ZERO 0x00000000 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST_TARGET 29:28 /* R-XUF */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST_TARGET_VID_MEM 0x00000000 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST_TARGET_SYS_MEM_COHERENT 0x00000002 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* R---V */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST_VALID 31:31 /* R-EVF */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST_VALID_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_ENGINE_STATUS_NEXT_INST_VALID_TRUE 0x00000001 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS(i) (0x00003080+(i)*4) /* R--4A */ -#define NV_PFIFO_PBDMA_STATUS__SIZE_1 14 /* */ -#define NV_PFIFO_PBDMA_STATUS_ID 11:0 /* */ -#define NV_PFIFO_PBDMA_STATUS_ID_ZERO 0x00000000 /* */ -#define NV_PFIFO_PBDMA_STATUS_ID_HW 11:0 /* R-XUF */ -#define NV_PFIFO_PBDMA_STATUS_ID_HW_ZERO 0x00000000 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_ID_TYPE 12:12 /* R-XVF */ -#define NV_PFIFO_PBDMA_STATUS_ID_TYPE_CHID 0x00000000 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_ID_TYPE_TSGID 0x00000001 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_CHAN_STATUS 15:13 /* R-EVF */ -#define NV_PFIFO_PBDMA_STATUS_CHAN_STATUS_INVALID 0x00000000 /* R-E-V */ -#define NV_PFIFO_PBDMA_STATUS_CHAN_STATUS_VALID 0x00000001 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_CHAN_STATUS_CHSW_LOAD 0x00000005 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_CHAN_STATUS_CHSW_SAVE 0x00000006 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_CHAN_STATUS_CHSW_SWITCH 0x00000007 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_NEXT_ID 27:16 /* */ -#define NV_PFIFO_PBDMA_STATUS_NEXT_ID_ZERO 0x00000000 /* */ -#define NV_PFIFO_PBDMA_STATUS_NEXT_ID_HW 27:16 /* R-XUF */ -#define NV_PFIFO_PBDMA_STATUS_NEXT_ID_HW_ZERO 0x00000000 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_NEXT_ID_TYPE 28:28 /* R-XVF */ -#define NV_PFIFO_PBDMA_STATUS_NEXT_ID_TYPE_CHID 0x00000000 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_NEXT_ID_TYPE_TSGID 0x00000001 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_CHSW 15:15 /* */ -#define NV_PFIFO_PBDMA_STATUS_CHSW_NOT_IN_PROGRESS 0x00000000 /* */ -#define NV_PFIFO_PBDMA_STATUS_CHSW_IN_PROGRESS 0x00000001 /* */ -#define NV_PFIFO_PBDMA_STATUS_INST(i) (0x00002790+(i)*4) /* R--4A */ -#define NV_PFIFO_PBDMA_STATUS_INST__SIZE_1 14 /* */ -#define NV_PFIFO_PBDMA_STATUS_INST_PTR 27:0 /* R-XUF */ -#define NV_PFIFO_PBDMA_STATUS_INST_PTR_ZERO 0x00000000 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_INST_TARGET 29:28 /* R-XUF */ -#define NV_PFIFO_PBDMA_STATUS_INST_TARGET_VID_MEM 0x00000000 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_INST_TARGET_SYS_MEM_COHERENT 0x00000002 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_INST_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* R---V */ -#define NV_PFIFO_PBDMA_STATUS_INST_VALID 31:31 /* R-EVF */ -#define NV_PFIFO_PBDMA_STATUS_INST_VALID_FALSE 0x00000000 /* R-E-V */ -#define NV_PFIFO_PBDMA_STATUS_INST_VALID_TRUE 0x00000001 /* R---V */ diff --git a/Host-Fifo/volta/gv100/dev_master.ref.txt b/Host-Fifo/volta/gv100/dev_master.ref.txt deleted file mode 100644 index 8ae6133..0000000 --- a/Host-Fifo/volta/gv100/dev_master.ref.txt +++ /dev/null @@ -1,363 +0,0 @@ -Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. - -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. --------------------------------------------------------------------------------- - -#define NV_PMC_BOOT_0 0x00000000 /* R--4R */ -#define NV_PMC_BOOT_0_ID 31:0 /* */ -#define NV_PMC_BOOT_0_MINOR_REVISION 3:0 /* R--VF */ -#define NV_PMC_BOOT_0_MINOR_REVISION_1 0x00000001 /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_2 0x00000002 /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_3 0x00000003 /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_4 0x00000004 /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_5 0x00000005 /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_6 0x00000006 /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_7 0x00000007 /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_8 0x00000008 /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_9 0x00000009 /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_10 0x0000000A /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_11 0x0000000B /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_12 0x0000000C /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_13 0x0000000D /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_14 0x0000000E /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_15 0x0000000F /* R---V */ -#define NV_PMC_BOOT_0_MINOR_REVISION_INIT 0x00000001 /* R---V */ -#define NV_PMC_BOOT_0_MAJOR_REVISION 7:4 /* R--VF */ -#define NV_PMC_BOOT_0_MAJOR_REVISION_A 0x0000000A /* R---V */ -#define NV_PMC_BOOT_0_MAJOR_REVISION_B 0x0000000B /* R---V */ -#define NV_PMC_BOOT_0_MAJOR_REVISION_C 0x0000000C /* R---V */ -#define NV_PMC_BOOT_0_MAJOR_REVISION_D 0x0000000D /* R---V */ -#define NV_PMC_BOOT_0_MAJOR_REVISION_E 0x0000000E /* R---V */ -#define NV_PMC_BOOT_0_MAJOR_REVISION_F 0x0000000F /* R---V */ -#define NV_PMC_BOOT_0_MAJOR_REVISION_INIT 0x00000000 /* R---V */ -#define NV_PMC_BOOT_0_RESERVED_0 11:8 /* */ -#define NV_PMC_BOOT_0_IMPLEMENTATION 23:20 /* R--VF */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_0 0x00000000 /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_1 0x00000001 /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_2 0x00000002 /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_3 0x00000003 /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_4 0x00000004 /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_5 0x00000005 /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_6 0x00000006 /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_7 0x00000007 /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_8 0x00000008 /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_9 0x00000009 /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_A 0x0000000A /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_B 0x0000000B /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_C 0x0000000C /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_D 0x0000000D /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_E 0x0000000E /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_F 0x0000000F /* R---V */ -#define NV_PMC_BOOT_0_IMPLEMENTATION_INIT 0x00000000 /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE 28:24 /* R--VF */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GF100 0x0000000C /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GF110 0x0000000D /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GK100 0x0000000E /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GK110 0x0000000F /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GK200 0x00000010 /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GM000 0x00000011 /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GM100 0x00000011 /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GM200 0x00000012 /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GP100 0x00000013 /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GV100 0x00000014 /* R---V */ -#define NV_PMC_BOOT_0_ARCHITECTURE_GV110 0x00000015 /* R---V */ -#define NV_PMC_BOOT_1 0x00000004 /* RW-4R */ -#define NV_PMC_BOOT_1_VGPU8 8:8 /* R--VF */ -#define NV_PMC_BOOT_1_VGPU8_REAL 0x00000000 /* R---V */ -#define NV_PMC_BOOT_1_VGPU8_VIRTUAL 0x00000001 /* R---V */ -#define NV_PMC_BOOT_1_VGPU16 16:16 /* R--VF */ -#define NV_PMC_BOOT_1_VGPU16_REAL 0x00000000 /* R---V */ -#define NV_PMC_BOOT_1_VGPU16_VIRTUAL 0x00000001 /* R---V */ -#define NV_PMC_BOOT_2 0x00000008 /* R--4R */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION 3:0 /* R-XVF */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_0 0x00000000 /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_1 0x00000001 /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_2 0x00000002 /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_3 0x00000003 /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_4 0x00000004 /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_5 0x00000005 /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_6 0x00000006 /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_7 0x00000007 /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_8 0x00000008 /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_9 0x00000009 /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_A 0x0000000A /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_B 0x0000000B /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_C 0x0000000C /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_D 0x0000000D /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_E 0x0000000E /* R---V */ -#define NV_PMC_BOOT_2_MINOR_EXTENDED_REVISION_F 0x0000000F /* R---V */ -#define NV_PMC_BOOT_2_FAB_ID 7:4 /* R-XVF */ -#define NV_PMC_BOOT_2_FAB_ID_0 0x00000000 /* R---V */ -#define NV_PMC_BOOT_2_FAB_ID_1 0x00000001 /* R---V */ -#define NV_PMC_BOOT_2_FAB_ID_2 0x00000002 /* R---V */ -#define NV_PMC_BOOT_2_FAB_ID_3 0x00000003 /* R---V */ -#define NV_PMC_BOOT_42 0x00000A00 /* R--4R */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION 11:8 /* R-XVF */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_0 0x00000000 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_1 0x00000001 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_2 0x00000002 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_3 0x00000003 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_4 0x00000004 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_5 0x00000005 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_6 0x00000006 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_7 0x00000007 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_8 0x00000008 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_9 0x00000009 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_A 0x0000000A /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_B 0x0000000B /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_C 0x0000000C /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_D 0x0000000D /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_E 0x0000000E /* R---V */ -#define NV_PMC_BOOT_42_MINOR_EXTENDED_REVISION_F 0x0000000F /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION 15:12 /* R-XVF */ -#define NV_PMC_BOOT_42_MINOR_REVISION_1 0x00000001 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_2 0x00000002 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_3 0x00000003 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_4 0x00000004 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_5 0x00000005 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_6 0x00000006 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_7 0x00000007 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_8 0x00000008 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_9 0x00000009 /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_10 0x0000000A /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_11 0x0000000B /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_12 0x0000000C /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_13 0x0000000D /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_14 0x0000000E /* R---V */ -#define NV_PMC_BOOT_42_MINOR_REVISION_15 0x0000000F /* R---V */ -#define NV_PMC_BOOT_42_MAJOR_REVISION 19:16 /* R-XVF */ -#define NV_PMC_BOOT_42_MAJOR_REVISION_A 0x0000000A /* R---V */ -#define NV_PMC_BOOT_42_MAJOR_REVISION_B 0x0000000B /* R---V */ -#define NV_PMC_BOOT_42_MAJOR_REVISION_C 0x0000000C /* R---V */ -#define NV_PMC_BOOT_42_MAJOR_REVISION_D 0x0000000D /* R---V */ -#define NV_PMC_BOOT_42_MAJOR_REVISION_E 0x0000000E /* R---V */ -#define NV_PMC_BOOT_42_MAJOR_REVISION_F 0x0000000F /* R---V */ -#define NV_PMC_BOOT_42_IMPLEMENTATION 23:20 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_0 0x00000000 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_1 0x00000001 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_2 0x00000002 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_3 0x00000003 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_4 0x00000004 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_5 0x00000005 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_6 0x00000006 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_7 0x00000007 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_8 0x00000008 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_9 0x00000009 /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_A 0x0000000A /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_B 0x0000000B /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_C 0x0000000C /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_D 0x0000000D /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_E 0x0000000E /* */ -#define NV_PMC_BOOT_42_IMPLEMENTATION_F 0x0000000F /* */ -#define NV_PMC_BOOT_42_ARCHITECTURE 28:24 /* */ -#define NV_PMC_BOOT_42_ARCHITECTURE_GP100 0x00000013 /* */ -#define NV_PMC_BOOT_42_ARCHITECTURE_GV100 0x00000014 /* */ -#define NV_PMC_BOOT_42_ARCHITECTURE_GV110 0x00000015 /* */ -#define NV_PMC_BOOT_42_CHIP_ID 28:20 /* R-XVF */ -#define NV_PMC_BOOT_42_CHIP_ID_GP000 0x00000131 /* R---V */ -#define NV_PMC_BOOT_42_CHIP_ID_GP100 0x00000130 /* R---V */ -#define NV_PMC_BOOT_42_CHIP_ID_GP102 0x00000132 /* R---V */ -#define NV_PMC_BOOT_42_CHIP_ID_GP104 0x00000134 /* R---V */ -#define NV_PMC_BOOT_42_CHIP_ID_GP104V 0x00000139 /* R---V */ -#define NV_PMC_BOOT_42_CHIP_ID_GP106 0x00000136 /* R---V */ -#define NV_PMC_BOOT_42_CHIP_ID_GP107 0x00000137 /* R---V */ -#define NV_PMC_BOOT_42_CHIP_ID_GP108 0x00000138 /* R---V */ -#define NV_PMC_BOOT_42_CHIP_ID_GP108V 0x0000013A /* R---V */ -#define NV_PMC_BOOT_42_CHIP_ID_GV100 0x00000140 /* R---V */ -#define NV_PMC_BOOT_42_CHIP_ID_GV10B 0x0000014B /* R---V */ -#define NV_PMC_INTR(i) (0x00000100+(i)*4) /* R--4A */ -#define NV_PMC_INTR__SIZE_1 4 /* */ -#define NV_PMC_INTR_DEVICE(i) (i):(i) /* */ -#define NV_PMC_INTR_DEVICE__SIZE_1 32 /* */ -#define NV_PMC_INTR_DEVICE_NOT_PENDING 0x00000000 /* */ -#define NV_PMC_INTR_DEVICE_PENDING 0x00000001 /* */ -#define NV_PMC_INTR_PFIFO 8:8 /* R--VF */ -#define NV_PMC_INTR_PFIFO_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_PFIFO_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_HUB 9:9 /* R--VF */ -#define NV_PMC_INTR_HUB_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_HUB_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_PFB 13:13 /* R--VF */ -#define NV_PMC_INTR_PFB_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_PFB_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_THERMAL 18:18 /* R--VF */ -#define NV_PMC_INTR_THERMAL_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_THERMAL_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_HDACODEC 19:19 /* R--VF */ -#define NV_PMC_INTR_HDACODEC_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_HDACODEC_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_PTIMER 20:20 /* R--VF */ -#define NV_PMC_INTR_PTIMER_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_PTIMER_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_PMGR 21:21 /* R--VF */ -#define NV_PMC_INTR_PMGR_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_PMGR_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_DFD 23:23 /* R--VF */ -#define NV_PMC_INTR_DFD_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_DFD_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_PMU 24:24 /* R--VF */ -#define NV_PMC_INTR_PMU_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_PMU_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_LTC_ALL 25:25 /* R--VF */ -#define NV_PMC_INTR_LTC_ALL_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_LTC_ALL_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_PDISP 26:26 /* R--VF */ -#define NV_PMC_INTR_PDISP_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_PDISP_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_PBUS 28:28 /* R--VF */ -#define NV_PMC_INTR_PBUS_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_PBUS_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_XVE 29:29 /* R--VF */ -#define NV_PMC_INTR_XVE_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_XVE_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_PRIV_RING 30:30 /* R--VF */ -#define NV_PMC_INTR_PRIV_RING_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_PRIV_RING_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_SOFTWARE 31:31 /* R--VF */ -#define NV_PMC_INTR_SOFTWARE_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_SOFTWARE_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_MODE(i) (0x00000120+(i)*4) /* R--4A */ -#define NV_PMC_INTR_MODE__SIZE_1 4 /* */ -#define NV_PMC_INTR_MODE_BIT(i) (i):(i) /* */ -#define NV_PMC_INTR_MODE_BIT__SIZE_1 32 /* */ -#define NV_PMC_INTR_MODE_BIT_LEVEL 0x00000000 /* */ -#define NV_PMC_INTR_MODE_BIT_EDGE 0x00000001 /* */ -#define NV_PMC_INTR_MODE_VALUE 31:0 /* C--VF */ -#define NV_PMC_INTR_MODE_VALUE_INIT 0x00000000 /* C---V */ -#define NV_PMC_INTR_EN(i) (0x00000140+(i)*4) /* R--4A */ -#define NV_PMC_INTR_EN__SIZE_1 4 /* */ -#define NV_PMC_INTR_EN_DEVICE(i) (i):(i) /* */ -#define NV_PMC_INTR_EN_DEVICE__SIZE_1 32 /* */ -#define NV_PMC_INTR_EN_DEVICE_DISABLED 0x00000000 /* */ -#define NV_PMC_INTR_EN_DEVICE_ENABLED 0x00000001 /* */ -#define NV_PMC_INTR_EN_VALUE 31:0 /* R-IVF */ -#define NV_PMC_INTR_EN_VALUE_INIT 0x00000000 /* R-I-V */ -#define NV_PMC_INTR_EN_SET(i) (0x00000160+(i)*4) /* -W-4A */ -#define NV_PMC_INTR_EN_SET__SIZE_1 4 /* */ -#define NV_PMC_INTR_EN_SET_DEVICE(i) (i):(i) /* */ -#define NV_PMC_INTR_EN_SET_DEVICE__SIZE_1 32 /* */ -#define NV_PMC_INTR_EN_SET_DEVICE_SET 0x00000001 /* */ -#define NV_PMC_INTR_EN_SET_VALUE 31:0 /* -W-VF */ -#define NV_PMC_INTR_EN_CLEAR(i) (0x00000180+(i)*4) /* -W-4A */ -#define NV_PMC_INTR_EN_CLEAR__SIZE_1 4 /* */ -#define NV_PMC_INTR_EN_CLEAR_DEVICE(i) (i):(i) /* */ -#define NV_PMC_INTR_EN_CLEAR_DEVICE__SIZE_1 32 /* */ -#define NV_PMC_INTR_EN_CLEAR_DEVICE_SET 0x00000001 /* */ -#define NV_PMC_INTR_EN_CLEAR_VALUE 31:0 /* -W-VF */ -#define NV_PMC_INTR_SW(i) (0x000001A0+(i)*4) /* RW-4A */ -#define NV_PMC_INTR_SW__SIZE_1 4 /* */ -#define NV_PMC_INTR_SW_ASSERT 0:0 /* RWIVF */ -#define NV_PMC_INTR_SW_ASSERT_TRUE 0x00000001 /* RW--V */ -#define NV_PMC_INTR_SW_ASSERT_FALSE 0x00000000 /* RWI-V */ -#define NV_PMC_INTR_LTC 0x000001C0 /* R--4R */ -#define NV_PMC_INTR_LTC_PART_MASK 16:0 /* R--VF */ -#define NV_PMC_INTR_LTC_PART_MASK_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_LTC_PART_MASK_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_LTC_PART(i) (i):(i) /* */ -#define NV_PMC_INTR_LTC_PART__SIZE_1 16 /* */ -#define NV_PMC_INTR_LTC_PART_NOT_PENDING 0x00000000 /* */ -#define NV_PMC_INTR_LTC_PART_PENDING 0x00000001 /* */ -#define NV_PMC_INTR_FBPA 0x000001D0 /* R--4R */ -#define NV_PMC_INTR_FBPA_PART_MASK 16:0 /* R--VF */ -#define NV_PMC_INTR_FBPA_PART_MASK_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_FBPA_PART_MASK_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_FBPA_FBFALCON_INTR_NOSTALL 30:30 /* R--VF */ -#define NV_PMC_INTR_FBPA_FBFALCON_INTR_NOSTALL_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_FBPA_FBFALCON_INTR_NOSTALL_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_FBPA_FBFALCON_INTR_STALL 31:31 /* R--VF */ -#define NV_PMC_INTR_FBPA_FBFALCON_INTR_STALL_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PMC_INTR_FBPA_FBFALCON_INTR_STALL_PENDING 0x00000001 /* R---V */ -#define NV_PMC_INTR_FBPA_PART(i) (i):(i) /* */ -#define NV_PMC_INTR_FBPA_PART__SIZE_1 16 /* */ -#define NV_PMC_INTR_FBPA_PART_NOT_PENDING 0x00000000 /* */ -#define NV_PMC_INTR_FBPA_PART_PENDING 0x00000001 /* */ -#define NV_PMC_ENABLE 0x00000200 /* RW-4R */ -#define NV_PMC_ENABLE_DEVICE(i) (i):(i) /* */ -#define NV_PMC_ENABLE_DEVICE__SIZE_1 32 /* */ -#define NV_PMC_ENABLE_DEVICE_DISABLE 0x00000000 /* */ -#define NV_PMC_ENABLE_DEVICE_ENABLE 0x00000001 /* */ -#define NV_PMC_ENABLE_PRIV_RING 5:5 /* RWIVF */ -#define NV_PMC_ENABLE_PRIV_RING_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PRIV_RING_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PFIFO 8:8 /* RWIVF */ -#define NV_PMC_ENABLE_PFIFO_DISABLED 0x00000000 /* RWI-V */ -#define NV_PMC_ENABLE_PFIFO_ENABLED 0x00000001 /* RW--V */ -#define NV_PMC_ENABLE_HOST_SCHEDULER 8:8 /* */ -#define NV_PMC_ENABLE_HOST_SCHEDULER_DISABLED 0x00000000 /* */ -#define NV_PMC_ENABLE_HOST_SCHEDULER_ENABLED 0x00000001 /* */ -#define NV_PMC_ENABLE_NVLINK 25:25 /* RWIVF */ -#define NV_PMC_ENABLE_NVLINK_DISABLED 0x00000000 /* RWI-V */ -#define NV_PMC_ENABLE_NVLINK_ENABLED 0x00000001 /* RW--V */ -#define NV_PMC_ENABLE_ZPW 26:26 /* RWIVF */ -#define NV_PMC_ENABLE_ZPW_DISABLED 0x00000000 /* RWI-V */ -#define NV_PMC_ENABLE_ZPW_ENABLED 0x00000001 /* RW--V */ -#define NV_PMC_ENABLE_BLG 27:27 /* RWIVF */ -#define NV_PMC_ENABLE_BLG_DISABLED 0x00000000 /* RWI-V */ -#define NV_PMC_ENABLE_BLG_ENABLED 0x00000001 /* RW--V */ -#define NV_PMC_ENABLE_PERFMON 28:28 /* RWIVF */ -#define NV_PMC_ENABLE_PERFMON_DISABLED 0x00000000 /* RWI-V */ -#define NV_PMC_ENABLE_PERFMON_ENABLED 0x00000001 /* RW--V */ -#define NV_PMC_ENABLE_PDISP 30:30 /* RWIVF */ -#define NV_PMC_ENABLE_PDISP_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PDISP_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB 0x00000204 /* RW-4R */ -#define NV_PMC_ENABLE_PB_0 0:0 /* RWIVF */ -#define NV_PMC_ENABLE_PB_0_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_0_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_1 1:1 /* RWIVF */ -#define NV_PMC_ENABLE_PB_1_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_1_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_2 2:2 /* RWIVF */ -#define NV_PMC_ENABLE_PB_2_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_2_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_3 3:3 /* RWIVF */ -#define NV_PMC_ENABLE_PB_3_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_3_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_4 4:4 /* RWIVF */ -#define NV_PMC_ENABLE_PB_4_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_4_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_5 5:5 /* RWIVF */ -#define NV_PMC_ENABLE_PB_5_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_5_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_6 6:6 /* RWIVF */ -#define NV_PMC_ENABLE_PB_6_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_6_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_7 7:7 /* RWIVF */ -#define NV_PMC_ENABLE_PB_7_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_7_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_8 8:8 /* RWIVF */ -#define NV_PMC_ENABLE_PB_8_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_8_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_9 9:9 /* RWIVF */ -#define NV_PMC_ENABLE_PB_9_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_9_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_10 10:10 /* RWIVF */ -#define NV_PMC_ENABLE_PB_10_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_10_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_11 11:11 /* RWIVF */ -#define NV_PMC_ENABLE_PB_11_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_11_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_12 12:12 /* RWIVF */ -#define NV_PMC_ENABLE_PB_12_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_12_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_13 13:13 /* RWIVF */ -#define NV_PMC_ENABLE_PB_13_DISABLED 0x00000000 /* RW--V */ -#define NV_PMC_ENABLE_PB_13_ENABLED 0x00000001 /* RWI-V */ -#define NV_PMC_ENABLE_PB_SEL(i) (i):(i) /* */ -#define NV_PMC_ENABLE_PB_SEL__SIZE_1 14 /* */ diff --git a/Host-Fifo/volta/gv100/dev_pbdma.ref.txt b/Host-Fifo/volta/gv100/dev_pbdma.ref.txt deleted file mode 100644 index bc5163a..0000000 --- a/Host-Fifo/volta/gv100/dev_pbdma.ref.txt +++ /dev/null @@ -1,4261 +0,0 @@ -Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. - -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. --------------------------------------------------------------------------------- - -1 - INTRODUCTION -================== - - A Host's PBDMA unit fetches pushbuffer data from memory, generates -commands, called "methods", from the fetched data, executes some of the -generated methods itself, and sends the remainder of the methods to engines. - This manual describes the Host PBDMA register space and all Host methods. -The NV_PPBDMA space defines registers that are contained within each of Host's -PBDMA units. Each PBDMA unit is allocated a 8KB address space for its -registers. - The NV_UDMA space defines the Host methods. A method consists of an -address doubleword and a data doubleword. The address specifies the operation -to be performed. The data is an operand. The NV_UDMA address space contains -the addresses of the methods that are executed by a PBDMA unit. -GP_ENTRY0 and GP_ENTRY1 - GP-Entry Memory Format - - A pushbuffer contains the specifications of the operations that a GPU -context is to perform for a particular client. Pushbuffers are stored in -memory. A doubleword-sized (4-byte) unit of pushbuffer data is known as a -pushbuffer entry. GP entries indicate the location of the pushbuffer data in -memory. GP entries themselves are also stored in memory. - A GP entry specifies the location and size of a pushbuffer segment (a -contiguous block of PB entries) in memory. See "FIFO_DMA" in dev_ram.ref for -details about pushbuffer segments and the format of pushbuffer data. - - The NV_PPBDMA_GP_ENTRY0_GET and NV_PPBDMA_GP_ENTRY1_GET_HI fields of a GP -entry specify the 38-bit dword-address (which would make a 40-bit byte-address) -of the first pushbuffer entry of the GP entry's pushbuffer segment. Because -each pushbuffer entry (and by extension each pushbuffer segment) is doubleword -aligned (4-byte aligned), the least significant 2 bits of the 40-bit -byte-address are not stored. The byte-address of the first pushbuffer entry in -a GP entry's pushbuffer segment is -(GP_ENTRY1_GET_HI << 32) + (GP_ENTRY0_GET << 2). - The NV_PPBDMA_GP_ENTRY1_LENGTH field, when non-zero, indicates the number -of pushbuffer entries contained within the GP entry's pushbuffer segment. The -byte-address of the first pushbuffer entry beyond the pushbuffer segment is -(GP_ENTRY1_GET_HI << 32) + (GP_ENTRY0_GET << 2) + (GP_ENTRY1_LENGTH * 4). - If NV_PPBDMA_GP_ENTRY1_LENGTH is CONTROL (0), then the GP entry is a -"control" entry, meaning this GP entry will not cause any PB data to be fetched -or executed. In this case, the NV_PPBDMA_GP_ENTRY1_OPCODE field specifies an -operation to perform, and the NV_PPBDMA_GP_ENTRY0_OPERAND field contains the -operand. The available operations are as follows: - - * NV_PPBDMA_GP_ENTRY1_OPCODE_NOP: no operation will be performed, but note - that the SYNC field is still respected--see below. - - * NV_PPBDMA_GP_ENTRY1_OPCODE_GP_CRC: the ENTRY0_OPERAND field is compared - with the cyclic redundancy check value that was calculated over previous - GP entries (NV_PPBDMA_GP_CRC). After each comparison, the - NV_PPBDMA_GP_CRC is cleared, whether they match or differ. If they - differ, then Host initiates an interrupt (NV_PPBDMA_INTR_0_GPCRC). For - recovery, clearing the interrupt will cause the PBDMA to continue as if - the control entry was OPCODE_NOP. - - * NV_PPBDMA_GP_ENTRY1_OPCODE_PB_CRC: the ENTRY0_OPERAND is compared - with the CRC value that was calculated over the previous pushbuffer - segment (NV_PPBDMA_PB_CRC). The PB CRC resets to 0 with each pushbuffer - segment. If the two CRCs differ, Host will raise the - NV_PPBDMA_INTR_0_PBCRC interrupt. For recovery, clearing the interrupt - will continue as if the control entry was OPCODE_NOP. Note the PB_CRC is - indeterminate if an END_PB_SEGMENT PB control entry was used in the prior - segment or if SSDM disabled the device and the segment had conditional - fetching enabled. - - Host supports two privilege levels for channels: privileged and -non-privileged. The privilege level is determined by the -NV_PPBDMA_CONFIG_AUTH_LEVEL field set from the corresponding NV_RAMFC_CONFIG -dword in the RAMFC. Non-privileged channels cannot execute privileged methods, -but privileged channels can. Any attempt to run a privileged operation from a -non-privileged channel will result in PB raising NV_PPBDMA_INTR_0_METHOD. - - - The NV_PPBDMA_GP_ENTRY1_SYNC field specifies whether a pushbuffer may be -fetched before Host has finished processing the preceding PB segment. If this -field is SYNC_PROCEED, then Host does not wait for the preceding PB segment to -be processed. If this field is SYNC_WAIT, then Host waits until the preceding -PB segment has been processed by Host before beginning to fetch the current PB -segment. - Host's processing of a PB segment consists of parsing PB entries into PB -instructions, decoding those instructions into control entries or method -headers, generating methods from method headers, determining whether methods are -to be executed by Host or by an engine, executing Host methods, and sending -non-Host methods and SetObject methods to engines. - Note that in the case where the final PB entry of the preceding PB segment -is a method header representing a PB compressed method sequence of nonzero -length--that is, the compressed method sequence is split across PB segments with -all of its method data entries in the PB segment for which SYNC_WAIT is -set--then Host is considered to have finished processing the preceding PB -segment once that method header is read. However, splitting a PB compressed -method sequence for software methods is not supported because Host will issue -the DEVICE interrupt indicating the SW method as soon as it processess the -method header, which happens prior to fetching the method data entries for that -compressed method sequence. Thus SW cannot actually execute any of the methods -in the sequence because the method data is not yet available, leaving the PBDMA -wedged. - When SYNC_WAIT is set, Host does not wait for any engine methods generated -from the preceding PB segment to complete. Host does not automatically wait -until an engine is done processing all methods generated from that PB segment. -If software desires that the engine finish processing all methods generated from -one PB segment before a second PB segment is fetched, then software may place -Host methods that wait until the engine is idle in the first PB segment (like -WFI, SET_REF, or SEM_EXECUTE with RELEASE_WFI_EN set). Alternatively, software -might put a semaphore acquire at the end of the first PB segment, and have an -engine release the semaphore. In both cases, SYNC_WAIT must be set on the -second PB segment. This field applies even if the NV_PPBDMA_GP_ENTRY1_LENGTH -field is zero; if SYNC_WAIT is specified in this case, no further GP entries -will be processed until the wait finishes. - - Some parts of a pushbuffer may not be executed depending on the value of -the NV_PPBDMA_SUBDEVICE_ID and SUBDEVICE_MASK. If an entire PB segment will not -be executed due to conditional execution, Host need not even bother fetching the -PB segment. - The NV_PPBDMA_GP_ENTRY0_FETCH field indicates whether the PB segment -specified by the GP entry should be fetched unconditionally or fetched -conditionally. If this field is FETCH_UNCONDITIONAL, then the PB segment is -fetched unconditionally. If this field is FETCH_CONDITIONAL, then the PB -segment is only fetched if the NV_PPBDMA_SUBDEVICE_STATUS field is -STATUS_ACTIVE. - -******************************************************************************** -Warning: When using subdevice masking, one must take care to synchronize -properly with any later GP entries marked FETCH_CONDITIONAL. If GP fetching -gets too far ahead of PB processing, it is possible for a later conditional PB -segment to be discarded prior to reaching an SSDM command that sets -SUBDEVICE_STATUS to ACTIVE. This would cause Host to execute garbage data. One -way to avoid this would be to set the SYNC_WAIT flag on any FETCH_CONDITIONAL -segments following a subdevice reenable. -******************************************************************************** - - If the PB segment is not fetched then it behaves as an OPCODE_NOP control -entry. If a PB segment contains a SET_SUBDEVICE_MASK PB instruction that Host -must see, then the GP entry for that PB segment must specify -FETCH_UNCONDITIONAL. - If the PB segment specifies FETCH_CONDITIONAL and the subdevice mask shows -STATUS_ACTIVE, but the PB segment contains a SET_SUBDEVICE_MASK PB instruction -that will disable the mask, the rest of the PB segment will be discarded. In -that case, an arbitrary number of entries past the SSDM may have already updated -the PB CRC, rendering the PB CRC indeterminate. - If Host must wait for a previous PB segment's Host processing to be -completed before examining NV_PPBDMA_SUBDEVICE_STATUS, then the GP entry should -also have its SYNC_WAIT field set. - A PB segment marked FETCH_CONDITIONAL must not have a PB compressed method -sequence that crosses a PB segment boundary (with its header in previous non- -conditional PB segment and its final valid data in a conditional PB segment)-- -doing so will cause a NV_PPBDMA_INTR_0_PBSEG interrupt. - - Software may monitor Host's progress through the pushbuffer by reading the -channel's NV_RAMUSERD_TOP_LEVEL_GET entry from USERD, which is backed by Host's -NV_PPBDMA_TOP_LEVEL_GET register. See "NV_PFIFO_USERD_WRITEBACK" in -dev_fifo.ref for information about how frequently this information is written -back into USERD. If a PB segment occurs multiple times within a pushbuffer -(like a commonly used subroutine), then progress through that segment may be -less useful for monitoring, because software will not know which occurrence of -the segment is being processed. - The NV_PPBDMA_GP_ENTRY_LEVEL field specifies whether progress through the -GP entry's PB segment should be indicated in NV_RAMUSERD_TOP_LEVEL_GET. If this -field is LEVEL_MAIN, then progress through the PB segment will be reported -- -NV_RAMUSERD_TOP_LEVEL_GET will equal NV_RAMUSERD_GET. If this field is -LEVEL_SUBROUTINE, then progress through this PB segment is not reported -- Host -will not alter NV_RAMUSERD_TOP_LEVEL_GET. If this field is LEVEL_SUBROUTINE, -reads of NV_RAMUSERD_TOP_LEVEL_GET will return the last value of NV_RAMUSERD_GET -from a PB segment at LEVEL_MAIN. - - If the GP entry's opcode is OPCODE_ILLEGAL or an invalid opcode, Host will -initiate an interrupt (NV_PPBDMA_INTR_0_GPENTRY). If a GP entry specifies a PB -segment that crosses the end of the virtual address space (0xFFFFFFFFFF), then -Host will initiate an interrupt (NV_PPBDMA_INTR_0_GPENTRY). Invalid GP entries -are treated like traps: they will set the interrupt and freeze the PBDMA, but -the invalid GP entry is discarded. Once the interrupt is cleared, the PBDMA -unit will simply continue with the next GP entry. - Note a corner case exists where the PB segment described by a GP entry is -at the end of the virtual address space, or in other words, the last PB entry in -the described PB segment is the last dword in the virtual address space. This -type of GP entry is not valid and will generate a GPENTRY interrupt. The -PBDMA's PUT pointer describes the address of the first dword beyond the PB -segment, thus making the last dword in the virtual address space unusable for -storing a pbentry. - - - -#define NV_PPBDMA_GP_ENTRY__SIZE 8 /* */ - -#define NV_PPBDMA_GP_ENTRY0 0x10000000 /* RW-4R */ - -#define NV_PPBDMA_GP_ENTRY0_OPERAND 31:0 /* RWXUF */ -#define NV_PPBDMA_GP_ENTRY0_FETCH 0:0 /* */ -#define NV_PPBDMA_GP_ENTRY0_FETCH_UNCONDITIONAL 0x00000000 /* */ -#define NV_PPBDMA_GP_ENTRY0_FETCH_CONDITIONAL 0x00000001 /* */ -#define NV_PPBDMA_GP_ENTRY0_GET 31:2 /* */ - -#define NV_PPBDMA_GP_ENTRY1 0x10000004 /* RW-4R */ - -#define NV_PPBDMA_GP_ENTRY1_GET_HI 7:0 /* RWXUF */ - - -#define NV_PPBDMA_GP_ENTRY1_LEVEL 9:9 /* RWXUF */ -#define NV_PPBDMA_GP_ENTRY1_LEVEL_MAIN 0x00000000 /* RW--V */ -#define NV_PPBDMA_GP_ENTRY1_LEVEL_SUBROUTINE 0x00000001 /* RW--V */ -#define NV_PPBDMA_GP_ENTRY1_LENGTH 30:10 /* RWXUF */ -#define NV_PPBDMA_GP_ENTRY1_LENGTH_CONTROL 0x00000000 /* RW--V */ -#define NV_PPBDMA_GP_ENTRY1_SYNC 31:31 /* RWXUF */ -#define NV_PPBDMA_GP_ENTRY1_SYNC_PROCEED 0x00000000 /* RW--V */ -#define NV_PPBDMA_GP_ENTRY1_SYNC_WAIT 0x00000001 /* RW--V */ -#define NV_PPBDMA_GP_ENTRY1_OPCODE 7:0 /* RWXUF */ -#define NV_PPBDMA_GP_ENTRY1_OPCODE_NOP 0x00000000 /* RW--V */ -#define NV_PPBDMA_GP_ENTRY1_OPCODE_ILLEGAL 0x00000001 /* RW--V */ -#define NV_PPBDMA_GP_ENTRY1_OPCODE_GP_CRC 0x00000002 /* RW--V */ -#define NV_PPBDMA_GP_ENTRY1_OPCODE_PB_CRC 0x00000003 /* RW--V */ - - - - - -Number of NOPs for self-modifying gpfifo - -This is a formula for SW to estimate the number of NOPs needed to pad the gpfifo -such that the modification of a gp entry by the engine or by the CPU can take -effect. Here, NV_PFIFO_LB_GPBUF_CONTROL_SIZE(eng) refers to the SIZE field in the -NV_PFIFO_LB_GPBUF_CONTROL(eng) register.(More info about the register in dev_fifo.ref) - -NUM_GP_NOPS(eng) = ((NV_PFIFO_LB_GPBUF_CONTROL_SIZE(eng)+1) * NV_PFIFO_LB_ENTRY_SIZE)/ NV_PPBDMA_GP_ENTRY__SIZE - - - - - -GP_BASE - Base and Limit of the Circular Buffer of GP Entries - - GP entries are stored in a buffer in memory. The NV_PPBDMA_GP_BASE_OFFSET -and NV_PPBDMA_GP_BASE_HI_OFFSET fields specify the 37-bit address in 8-byte -granularity of the start of a circular buffer that contains GP entries (GPFIFO). -This address is a virtual (not a physical) address. GP entries are always -GP_ENTRY__SIZE-byte aligned, so the least significant three bits of the byte -address are not stored. The byte address of the GPFIFO base pointer is thus: - - gpfifo_base_ptr = GP_BASE + (GP_BASE_HI_OFFSET << 32) - - The number of GP entries in the circular buffer is always a power of 2. -The NV_PPBDMA_GP_BASE_HI_LIMIT2 field specifies the number of bits used to count -the memory allocated to the GP FIFO. The LIMIT2 value specified in these -registers is Log base 2 of the number of entries in the GP FIFO. For example, -if the number of entries is 2^16--indicating a memory area of -(2^16)*GP_ENTRY__SIZE bytes--then the value written in LIMIT2 is 16. - The circular buffer containing GP entries cannot cross the maximum address. -If OFFSET + (1< 0xFFFFFFFFFF, then Host will -initiate a CPU interrupt (NV_PPBDMA_INTR_0_GPFIFO). - The NV_PPBDMA_GP_PUT, NV_PPBDMA_GP_GET, and NV_PPBDMA_GP_FETCH registers -(and their associated NV_RAMFC and NV_RAMUSERD entries) are relative to the -value of this register. - These registers are part of a GPU context's state. On a switch, the values -of these registers are saved to, and restored from, the NV_RAMFC_GP_BASE and -NV_RAMFC_GP_BASE_HI entries in the RAMFC part of the GPU context's GPU-instance -block. - Typically, software initializes the information in NV_RAMFC_GP_BASE and -NV_RAMFC_GP_BASE_HI when the GPU context's GPU-instance block is first created. -These registers are available to software only for debug. Software should use -them only if the GPU context is assigned to a PBDMA unit and that PBDMA unit is -stalled. While a GPU context's Host context is not contained within a PBDMA -unit, software should use the RAMFC entries to access this information. - A pair of these registers exists for each of Host's PBDMA units. These -registers run on Host's internal bus clock. - - -#define NV_PPBDMA_GP_BASE(i) (0x00040048+(i)*8192) /* RW-4A */ -#define NV_PPBDMA_GP_BASE__SIZE_1 14 /* */ - -#define NV_PPBDMA_GP_BASE_OFFSET 31:3 /* RW-UF */ -#define NV_PPBDMA_GP_BASE_OFFSET_ZERO 0x00000000 /* RW--V */ -#define NV_PPBDMA_GP_BASE_RSVD 2:0 /* RW-UF */ -#define NV_PPBDMA_GP_BASE_RSVD_ZERO 0x00000000 /* RW--V */ - -#define NV_PPBDMA_GP_BASE_HI(i) (0x0004004c+(i)*8192) /* RW-4A */ -#define NV_PPBDMA_GP_BASE_HI__SIZE_1 14 /* */ - -#define NV_PPBDMA_GP_BASE_HI_OFFSET 7:0 /* RW-UF */ -#define NV_PPBDMA_GP_BASE_HI_OFFSET_ZERO 0x00000000 /* RW--V */ -#define NV_PPBDMA_GP_BASE_HI_LIMIT2 20:16 /* RW-UF */ -#define NV_PPBDMA_GP_BASE_HI_LIMIT2_ZERO 0x00000000 /* RW--V */ -#define NV_PPBDMA_GP_BASE_HI_RSVDA 15:8 /* RW-UF */ -#define NV_PPBDMA_GP_BASE_HI_RSVDA_ZERO 0x00000000 /* RW--V */ -#define NV_PPBDMA_GP_BASE_HI_RSVDB 31:21 /* RW-UF */ -#define NV_PPBDMA_GP_BASE_HI_RSVDB_ZERO 0x00000000 /* RW--V */ - - -GP_FETCH - Pointer to the next GP-Entry to be Fetched - - Host does not fetch all GP entries with a single request to the memory -subsystem. Host fetches GP entries in batches. The NV_PPBDMA_GP_FETCH register -indicates index of the next GP entry to be fetched by Host. The actual 40-bit -virtual address of the specified GP entry is computed as follows: - fetch address = GP_FETCH_ENTRY * NV_PPBDMA_GP_ENTRY__SIZE + GP_BASE - If NV_PPBDMA_GP_PUT==NV_PPBDMA_GP_FETCH, then requests to fetch the entire -GP circular buffer have been issued, and Host cannot make more requests until -NV_PPBDMA_GP_PUT is changed. Host may finish fetching GP entries long before it -has finished processing the PB segments specified by those entries. -Software should not use NV_PPBDMA_GP_FETCH (it should use NV_PPBDMA_GP_GET), to -determine whether the GP circular buffer is full. NV_PPBDMA_GP_FETCH represents -the current extent of prefetching of GP entries; prefetched entries may be -discarded and refetched later. - This register is part of a GPU context's state. On a switch, the value of -this register is saved to, and restored from, the NV_RAMFC_GP_FETCH entry of -the RAMFC part of the GPU context's GPU-instance block. - A PBDMA unit maintains this register. Typically, software does not need to -access this register. This register is available to software only for debug. -Because Host may fetch GP entries long before it is ready to process the -entries, and because Host may discard GP entries that it has fetched, software -should not use NV_PPBDMA_GP_FETCH to monitor Host's progress (software should -use NV_PPBDMA_GP_GET for monitoring). Software should use this register only if -the GPU context is assigned to a PBDMA unit and that PBDMA unit is stalled. -While a GPU context's Host context is not contained within a PBDMA unit, -software should use NV_RAMFC_GP_FETCH to access this information. - If after a PRI write, or after this register has been restored from RAMFC -memory, the value equals or exceeds the size of the circular buffer that stores -GP entries (1<= PV), -where SV is the semaphore value in memory, PV is the payload value, and >= is -an unsigned greater-than-or-equal-to comparison. - If OPERATION is ACQ_CIRC_GEQ, the acquire succeeds when the two's -complement signed representation of the semaphore value minus the payload value -is non-negative; that is, when the semaphore value is within half a range -greater than or equal to the payload value, modulo that range. The -PAYLOAD_SIZE field determines if Host is doing a 32 bit comparison or a 64 bit -comparison. So in other words, the condition is met when the PAYLOAD_SIZE is -32BIT and the semaphore value is within the range [payload, -((payload+(2^(32-1)))-1)], modulo 2^32, or when the PAYLOAD_SIZE is 64BIT and -the semaphore value is within the range [payload, ((payload+(2^(64-1)))-1)], -modulo 2^64. - If OPERATION is ACQ_AND, the acquire succeeds when the bitwise-AND of the -semaphore value and the payload value is not zero. The PAYLOAD_SIZE field -determines if a 32 bit or 64 bit value is read from memory, and compared to. - If OPERATION is ACQ_NOR, the acquire succeeds when the bitwise-NOR of the -semaphore value and the payload value is not zero. PAYLOAD_SIZE determines if -a 32 bit or 64 bit value is read from memory, and compared to. - If OPERATION is RELEASE, then Host simply writes the payload value to the -semaphore structure in memory at the SEM_ADDR_LO/_HI address. The exact value -written depends on the operation defined. If PAYLOAD_SIZE is 32BIT then a 32 -bit payload value from PAYLOAD_LO is used. If PAYLOAD_SIZE is 64BIT then a 64 -bit payload specified by PAYLOAD_LO/_HI is used. - If OPERATION is REDUCTION, then Host sends the memory system an -instruction to perform the atomic reduction operation specified in the -REDUCTION field on the memory value, using the PAYLOAD_LO/_HI payload value as -the operand. The OPERATION_PAYLOAD_SIZE field determines if a 32 bit or 64 bit -reduction is performed. Note that if the semaphore address refers to a page -whose PTE has ATOMIC_DISABLE set, the operation will result in an -ATOMIC_VIOLATION fault; - Note that if the PAYLOAD_SIZE is 64BIT, the semaphore address is required -to be 8-byte aligned. If RELEASE_TIMESTAMP is EN while the operation is a -RELEASE or REDUCTION operation, the semaphore address is required to be 16-byte -aligned. The semaphore address is not required to be 16-byte aligned during an -acquire operation. If the semaphore address is not aligned according to the -field values Host will raise the NV_PPBDMA_INTR_0 interrupt. - For iGPU cases where a semaphore release can be mapped to an onchip syncpoint, -the SIZE must be 4Bytes to avoid double incrementing the target syncpoint. -Timestamping should also be disabled to avoid unwanted behavior. - -Semaphore switch option: - - The NV_UDMA_SEM_EXECUTE_ACQUIRE_SWITCH_TSG field specifies whether or not -Host should switch to processing another TSG if the acquire fails. If every -channel within the same TSG has no work (is waiting on a semaphore acquire, is -idle, is unbound, or is disabled), the TSG can make no further progress until -one of the relevant semaphores is released. Because it may be a long time -before the release, it may be more efficient for the PBDMA unit to switch off -the blocked TSG prior to the runqueue timeslice expiring, so that it can serve -a different TSG that is not waiting, or so that it can poll other semaphores on -other TSGs whose channels are waiting on acquires. - When a semaphore acquire fails, the PBDMA unit will always switch to -another channel within the same TSG, provided that it has not completed a -traversal through all the TSG's channels. If every pending channel in the TSG -is waiting on a semaphore acquire, the Host scheduler is able identify a lack -of progress for the entire TSG by the time it has completed a traversal through -all those channels. In this case the value of ACQUIRE_SWITCH_TSG for each of -these channels determines whether the PBDMA will switch to another TSG or start -another traversal through the same TSG. - If ACQUIRE_SWITCH_TSG is DIS for any of the channels in the TSG, the Host -scheduler will ignore any lack of progress and continue processing the TSG, -until either every channel in the TSG runs out of work or the timeslice -expires. If ACQUIRE_SWITCH_TSG is EN for every pending channel in the TSG, the -Host scheduler will recognize a lack of progress for the whole TSG, and will -switch to the next serviceable TSG on the runqueue, if possible. - In the case described above, if there isn't a different serviceable TSG -on the runlist, then the current channel's TSG will continue to be scheduled -and the acquire retry will be naturally delayed by the time it takes for Host's -runlist processing to return to the same channel. This retry delay may be too -short, in which case the runlist search can be throttled to increase the delay -by configuring NV_PFIFO_ACQ_PRETEST; see dev_fifo.ref. Note that if the -channel remains switched in, the prefetched pushbuffer data is not discarded, -so setting ACQUIRE_SWITCH_TSG_EN cannot deterministically be depended on to -cause the discarding of prefetched pushbuffer data. - Also note that when switching between channels within a TSG, Host does not -wait on any timer (such as NV_PFIFO_ACQ_PRETEST or NV_PPBDMA_ACQUIRE_RETRY), -but is instead throttled by the time it takes to switch channels. Host will -honor the ACQUIRE_RETRY time, but only if the same channel is rescheduled -without a channel switch. - -Semaphore wait-for-idle option: - - The NV_UDMA_SEM_EXECUTE_RELEASE_WFI field applies only to releases and -reductions. It specifies whether Host should wait until the engine to which -the channel last sent methods is idle (in other words, until all previous -methods in the channel have been completed) before writing to memory as part of -the release or reduction operation. If this field is RELEASE_WFI_EN, then Host -waits for the engine to be idle, inserts a system memory barrier, and then -updates the value in memory. If this field is RELEASE_WFI_DIS, Host performs -the semaphore operation on the memory without waiting for the engine to be -idle, and without using a system memory barrier. - -Semaphore timestamp option: - - The NV_UDMA_SEM_EXECUTE_RELEASE_TIMESTAMP specifies whether a timestamp -should be written by a release in addition to the payload. If -RELEASE_TIMESTAMP is DIS, then only the semaphore payload will be written. If -the field is EN then both the semaphore payload and a nanosecond timestamp will -be written. In this case, the semaphore address must be 16-byte aligned; see -the related note at NV_UDMA_SEM_ADDR_LO. If RELEASE_TIMESTAMP is EN and -SEM_ADDR_LO is not 16-byte aligned, then Host will initiate an interrupt -(NV_PPBDMA_INTR_0_SEMAPHORE). When a 16-byte semaphore is written, the -semaphore timestamp will be written before the semaphore payload so that when -an acquire succeeds, the timestamp write will have completed. This ensures SW -will not get an out-of-date timestamp on platforms which guarantee ordering -within a 16-byte aligned region. The timestamp value is snapped from the -NV_PTIMER_TIME_1/0 registers; see dev_timer.ref. - For iGPU cases where a semaphore release can be mapped to an onchip syncpoint, -the SIZE must be 4Bytes to avoid double incrementing the target syncpoint. -Timestamping should also be disabled for a synpoint backed releast to avoid -unexpected behavior. - - Below is the little endian format of 16-byte semaphores in memory: - - ---- ------------------- ------------------- - byte Data(Little endian) Data(Little endian) - PAYLOAD_SIZE=32BIT PAYLOAD_SIZE=64BIT - ---- ------------------- ------------------- - 0 Payload[ 7: 0] Payload[ 7: 0] - 1 Payload[15: 8] Payload[15: 8] - 2 Payload[23:16] Payload[23:16] - 3 Payload[31:24] Payload[31:24] - 4 0 Payload[39:32] - 5 0 Payload[47:40] - 6 0 Payload[55:48] - 7 0 Payload[63:56] - 8 timer[ 7: 0] timer[ 7: 0] - 9 timer[15: 8] timer[15: 8] - 10 timer[23:16] timer[23:16] - 11 timer[31:24] timer[31:24] - 12 timer[39:32] timer[39:32] - 13 timer[47:40] timer[47:40] - 14 timer[55:48] timer[55:48] - 15 timer[63:56] timer[63:56] - ---- ------------------- ------------------- - - -Semaphore reduction operations: - - The NV_UDMA_SEM_EXECUTE_REDUCTION field specifies the reduction operation -to perform on the semaphore memory value, using the semaphore payload from -SEM_PAYLOAD_LO/HI as an operand, when the OPERATION field is -OPERATION_REDUCTION. Based on the PAYLOAD_SIZE field the semaphore value and -the payload are interpreted as 32bit or 64bit integers and the reduction -operation is performed according to the signedness specified via the -REDUCTION_FORMAT field described below. The reduction operation leaves the -modified value in the semaphore memory according to the operation as follows: - -REDUCTION_IMIN - the minimum of the value and payload -REDUCTION_IMAX - the maximum of the value and payload -REDUCTION_IXOR - the bitwise exclusive or (XOR) of the value and payload -REDUCTION_IAND - the bitwise AND of the value and payload -REDUCTION_IOR - bitwise OR of the value and payload -REDUCTION_IADD - the sum of the value and payload -REDUCTION_INC - the value incremented by 1, or reset to 0 if the incremented - value would exceed the payload -REDUCTION_DEC - the value decremented by 1, or reset back to the payload - if the original value is already 0 or exceeds the payload - -Note that INC and DEC are somewhat surprising: they can be used to repeatedly -loop the semaphore value when performed successively with the same payload p. -INC repeatedly iterates from 0 to p inclusive, resetting to 0 once exceeding p. -DEC repeatedly iterates down from p to 0 inclusive, resetting back to p once -the value would otherwise underflow. Therefore, an INC or DEC reduction with -payload 0 effectively releases a semaphore by setting its value to 0. - -The reduction opcode assignment matches the enumeration in the XBAR translator -(to avoid extra remapping of hardware), but this does not match the graphics FE -reduction opcodes used by graphics backend semaphores. The reduction operation -itself is performed by L2. - -Semaphore signedness option: - - The NV_UDMA_SEM_EXECUTE_REDUCTION_FORMAT field specifies whether the -values involved in a reduction operation will be interpreted as signed or -unsigned. - -The following table summarizes each reduction operation, and the signedness and -payload size supported for each operation: - - signedness - r op 32b 64b function (v = memory value, p = semaphore payload) - -----+-----+-----+--------------------------------------------------- - IMIN U,S U,S v = (v < p) ? v : p - IMAX U,S U,S v = (v > p) ? v : p - IXOR N/A N/A v = v ^ p - IAND N/A N/A v = v & p - IOR N/A N/A v = v | p - IADD U,S U v = v + p - INC U inv v = (v >= p) ? 0 : v + 1 - DEC U inv v = (v == 0 || v > p) ? p : v - 1 (from L2 IAS) - -An operation with signedness "N/A" will ignore the value of REDUCTION_FORMAT -when executing, and either value of REDUCTION_FORMAT is valid. If an operation -is "U only" this means a signed version of this operation is not supported, and -if it is marked "inv" then it is unsupported for any signedness. If Host sees -an unsupported reduction op (in other words, is expected to run a reduction op -while PAYLOAD_SIZE and REDUCTION_FORMAT are set to unsupported values for that -op), Host will raise the NV_PPBDMA_INTR_0_SEMAPHORE interrupt. - -Example: A signed 32-bit IADD reduction operation is valid. A signed 64-bit -IADD reduction operation is unsupported and will trigger an interrupt if sent to -Host. A 64-bit INC (or DEC) operation is not supported and will trigger an -interrupt if sent to Host. - -Legal semaphore operation combinations: - - For iGPU cases where a semaphore release can be mapped to an onchip syncpoint, -the SIZE must be 4Bytes to avoid double incrementing the target syncpoint. -Timestamping should also be disabled for a synpoint backed release to avoid -unexpected behavior. - - The following table diagrams the types of semaphore operations that are -possible. In the columns, "x" matches any field value. ACQ refers to any of -the ACQUIRE, ACQ_STRICT_GEQ, ACQ_CIRC_GEQ, ACQ_AND, and ACQ_NOR operations. -REL refers to either a RELEASE or a REDUCTION operation. - - OP SWITCH WFI PAYLOAD_SIZE TIMESTAMP Description - --- ------ --- ------------ --------- -------------------------------------------------------------- - ACQ 0 x 0 x acquire; 4B (32 bit comparison); retry on fail - ACQ 0 x 1 x acquire; 8B (64 bit comparison); retry on fail - ACQ 1 x 0 x acquire; 4B (32 bit comparison); switch on fail - ACQ 1 x 1 x acquire; 8B (64 bit comparison); switch on fail - REL x 0 0 1 WFI & release 4B payload + timestamp semaphore - REL x 0 1 1 WFI & release 8B payload + timestamp semaphore - REL x 1 0 1 do not WFI & release 4B payload + timestamp semaphore - REL x 1 1 1 do not WFI & release 8B payload + timestamp semaphore - REL x 0 0 0 WFI & release doubleword (4B) semaphore payload - REL x 0 1 0 WFI & release quadword (8B) semaphore payload - REL x 1 0 0 do not WFI & release doubleword (4B) semaphore payload - REL x 1 1 0 do not WFI & release quadword (8B) semaphore payload - --- ------ --- ------------ --------- -------------------------------------------------------------- - - While the channel is loaded on a PBDMA unit, information from this method -is stored in the NV_PPBDMA_SEM_EXECUTE register. Otherwise, this information -is stored in the NV_RAMFC_SEM_EXECUTE field of the RAMFC part of the channel's -instance block. - -Undefined bits: - - Bits in the NV_UDMA_SEM_EXECUTE method data that are not used by the -specified OPERATION should be set to 0. When non-zero, their behavior is -undefined. - - - -#define NV_UDMA_SEM_EXECUTE 0x0000006C /* -W-4R */ - -#define NV_UDMA_SEM_EXECUTE_OPERATION 2:0 /* -W-VF */ -#define NV_UDMA_SEM_EXECUTE_OPERATION_ACQUIRE 0x00000000 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_OPERATION_RELEASE 0x00000001 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_OPERATION_ACQ_STRICT_GEQ 0x00000002 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_OPERATION_ACQ_CIRC_GEQ 0x00000003 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_OPERATION_ACQ_AND 0x00000004 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_OPERATION_ACQ_NOR 0x00000005 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_OPERATION_REDUCTION 0x00000006 /* -W--V */ - -#define NV_UDMA_SEM_EXECUTE_ACQUIRE_SWITCH_TSG 12:12 /* -W-VF */ -#define NV_UDMA_SEM_EXECUTE_ACQUIRE_SWITCH_TSG_DIS 0x00000000 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_ACQUIRE_SWITCH_TSG_EN 0x00000001 /* -W--V */ - -#define NV_UDMA_SEM_EXECUTE_RELEASE_WFI 20:20 /* -W-VF */ -#define NV_UDMA_SEM_EXECUTE_RELEASE_WFI_DIS 0x00000000 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_RELEASE_WFI_EN 0x00000001 /* -W--V */ - -#define NV_UDMA_SEM_EXECUTE_PAYLOAD_SIZE 24:24 /* -W-VF */ -#define NV_UDMA_SEM_EXECUTE_PAYLOAD_SIZE_32BIT 0x00000000 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_PAYLOAD_SIZE_64BIT 0x00000001 /* -W--V */ - -#define NV_UDMA_SEM_EXECUTE_RELEASE_TIMESTAMP 25:25 /* -W-VF */ -#define NV_UDMA_SEM_EXECUTE_RELEASE_TIMESTAMP_DIS 0x00000000 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_RELEASE_TIMESTAMP_EN 0x00000001 /* -W--V */ - -#define NV_UDMA_SEM_EXECUTE_REDUCTION 30:27 /* -W-VF */ -#define NV_UDMA_SEM_EXECUTE_REDUCTION_IMIN 0x00000000 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_REDUCTION_IMAX 0x00000001 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_REDUCTION_IXOR 0x00000002 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_REDUCTION_IAND 0x00000003 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_REDUCTION_IOR 0x00000004 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_REDUCTION_IADD 0x00000005 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_REDUCTION_INC 0x00000006 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_REDUCTION_DEC 0x00000007 /* -W--V */ - -#define NV_UDMA_SEM_EXECUTE_REDUCTION_FORMAT 31:31 /* -W-VF */ -#define NV_UDMA_SEM_EXECUTE_REDUCTION_FORMAT_SIGNED 0x00000000 /* -W--V */ -#define NV_UDMA_SEM_EXECUTE_REDUCTION_FORMAT_UNSIGNED 0x00000001 /* -W--V */ - - -NON_STALL_INT [method] - Non-Stalling Interrupt Method - - The NON_STALL_INT method causes the NV_PFIFO_INTR_0_CHANNEL_INTR field -to be set to PENDING in the channel's interrupt register, as well as -NV_PFIFO_INTR_HIER_* registers. This will cause an interrupt if it is -enabled. Host does not stall the execution of the GPU context's -method, does not switch out the GPU context, and does not disable switching the -GPU context. - A NON_STALL_INT method's data (NV_UDMA_NON_STALL_INT_HANDLE) is ignored. - Software should handle all of a channel's non-stalling interrupts before it -unbinds the channel from the GPU context. - - -#define NV_UDMA_NON_STALL_INT 0x00000020 /* -W-4R */ - -#define NV_UDMA_NON_STALL_INT_HANDLE 31:0 /* -W-VF */ - - - - -MEM_OP methods: membars, and cache and TLB management. - - MEM_OP_A, MEM_OP_B, and MEM_OP_C set up state for performing a memory -operation. MEM_OP_D sets additional state, specifies the type of memory -operation to perform, and triggers sending the mem op to HUB. To avoid -unexpected behavior for future revisions of the MEM_OP methods, all 4 methods -should be sent for each requested mem op, with irrelevant fields set to 0. -Note that hardware does not enforce the requirement that unrelated fields be set -to 0, but ignoring this advice could break forward compatibility. - Host does not wait until an engine is idle before beginning to execute -this method. - While a GPU context is bound to a channel and assigned to a PBDMA unit, -the NV_UDMA_MEM_OP_A-C values are stored in the NV_PPBDMA_MEM_OP_A-C registers -respectively. While the GPU context is not assigned to a PBDMA unit, these -values are stored in the respective NV_RAMFC_MEM_OP_A-C fields of the RAMFC part -of the GPU context's instance block in memory. - -Usage, operations, and configuration: - - MEM_OP_D_OPERATION specifies the type of memory operation to perform. This -field determines the value of the opcode on the Host/FB interface. When Host -encounters the MEM_OP_D method, Host sends the specified request to the FB and -waits for an indication that the request has completed before beginning to -process the next method. To issue a memory operation, first issue the 3 -MEM_OP_A-C methods to configure the operation as documented below. Then send -MEM_OP_D to complete the configuration and trigger the operation. The -operations available for MEM_OP_D_OPERATION are as follows: - MEMBAR - perform a memory barrier; see below. - MMU_TLB_INVALIDATE - invalidate page translation and attribute data from -the given page directory that are cached in the Memory-Management Unit TLBs. - MMU_TLB_INVALIDATE_TARGETED - invalidate page translation and attributes -data corresponding to a specific page in a given page directory. - L2_SYSMEM_INVALIDATE - invalidate data from system memory cached in L2. - L2_PEERMEM_INVALIDATE - invalidate peer-to-peer data in the L2 cache. - L2_CLEAN_COMPTAGS - clean the L2 compression tag cache. - L2_FLUSH_DIRTY - flush dirty lines from L2. - L2_WAIT_FOR_SYS_PENDING_READS - ensure all sysmem reads are past the point -of being modified by a write through a reflected mapping. To do this, L2 drains -all sysmem reads to the point where they cannot be modified by future -non-blocking writes to reflected sysmem. L2 will block any new sysmem read -requests and drain out all read responses. Note VC's with sysmem read requests -at the head would stall any request till the flush is complete. The niso-nb vc -does not have sysmem read requests so it would continue to flow. L2 will ack -that the sys flush is complete and unblock all VC's. Note this operation is a -NOP on tegra chips. - ACCESS_COUNTER_CLR - clear page access counters. - - Depending on the operation given in MEM_OP_D_OPERATION, the other fields of -all four MEM_OP methods are interpreted differently: - -MMU_TLB_INVALIDATE* -------------------- - - When the operation is MMU_TLB_INVALIDATE or MMU_TLB_INVALIDATE_TARGETED, -then Host will initiate a TLB invalidate as described above. The MEM_OP -configuration fields specify what to invalidate, where to perform the -invalidate, and optionally trigger a replay or cancel event for replayable -faults buffered within the TLBs as part of UVM page management. - When the operation is MMU_TLB_INVALIDATE_TARGETED, -MEM_OP_C_TLB_INVALIDATE_PDB must be ONE, and the TLB_INVALIDATE_TARGET_ADDR_LO -and HI fields must be filled in to specify the target page. - These operations are privileged and can only be executed from channels -with NV_PPBDMA_CONFIG_AUTH_LEVEL set to PRIVILEGED. This is configured via the -NV_RAMFC_CONFIG dword in the channel's RAMFC during channel setup. - - MEM_OP_A_TLB_INVALIDATE_CANCEL_TARGET_GPC_ID and -MEM_OP_A_TLB_INVALIDATE_CANCEL_TARGET_CLIENT_UNIT_ID identify the GPC and uTLB -within that GPC respectively that should perform the cancel operation when -MEM_OP_C_TLB_INVALIDATE_REPLAY is CANCEL_TARGETED. These field values should be -copied from the GPC_ID and CLIENT fields from the associated -NV_UVM_FAULT_BUF_ENTRY packet or NV_PFIFO_INTR_MMU_FAULT_INFO(i) entry. The -CLIENT_UNIT_ID corresponds to the values specified by NV_PFAULT_CLIENT_GPC_* in -dev_fault.ref. These fields are used with the CANCEL_TARGETED operation. The -fields also overlap with CANCEL_MMU_ENGINE_ID, and are interpreted as -CANCEL_MMU_ENGINE_ID during reply of type REPLAY_CANCEL_VA_GLOBAL. For other -replay operations, these fields must be 0. - - MEM_OP_A_TLB_INVALIDATE_CANCEL_MMU_ENGINE_ID specifies the associated -MMU_ENGINE_ID of the requests targeted by a REPLAY_CANCEL_VA_GLOBAL -operation. The field is ignored if the replay operation is not -REPLAY_CANCEL_VA_GLOBAL. This field overlaps with CANCEL_TARGET_GPC_ID and -CANCEL_TARGET_CLIENT_UNIT_ID field. - - MEM_OP_A_TLB_INVALIDATE_INVALIDATION_SIZE is aliased/repurposed - with MEM_OP_A_TLB_INVALIDATE_CANCEL_TARGET_CLIENT_UNIT_ID field - when MEM_OP_C_TLB_INVALIDATE_REPLAY (below) is anything other - than CANCEL_TARGETED or CANCEL_VA_GLOBAL or - CANCEL_VA_TARGETED. In the invalidation size enabled replay type - cases, actual region to be invalidated iscalculated as - 4K*(2^INVALIDATION_SIZE) i.e., - 4K*(2^CANCEL_TARGET_CLIENT_UNIT_ID); client unit id and gpc id - are not applicable. - - MEM_OP_A_TLB_INVALIDATE_SYSMEMBAR controls whether a Hub SYSMEMBAR -operation is performed after waiting for all outstanding acks to complete, after -the TLB is invalidated. Note if ACK_TYPE is ACK_TYPE_NONE then this field is -ignored and no MEMBAR will be performed. This is provided as a SW optimization -so that SW does not need to perform a NV_UDMA_MEM_OP_D_OPERATION_MEMBAR op with -MEMBAR_TYPE SYS_MEMBAR after the TLB_INVALIDATE. This field must be 0 if -TLB_INVALIDATE_GPC is DISABLE. - - MEM_OP_B_TLB_INVALIDATE_TARGET_ADDR_HI:MEM_OP_A_TLB_INVALIDATE_TARGET_ADDR_LO -specifies the 4k aligned virtual address of the page whose translation to -invalidate within the TLBs. These fields are valid only when OPERATION is -MMU_TLB_INVALIDATE_TARGETED; otherwise, they must be set to 0. - - MEM_OP_C_TLB_INVALIDATE_PDB controls whether a TLB invalidate should apply -to a particular page directory or to all of them. If PDB is ALL, then all page -directories are invalidated. If PDB is ONE, then the PDB address and aperture -are specified in the PDB_ADDR_LO:PDB_ADDR_HI and PDB_APERTURE fields. -Note that ALL does not make sense when OPERATION is MMU_TLB_INVALIDATE_TARGETED; -the behavior in that case is undefined. - - MEM_OP_C_TLB_INVALIDATE_GPC controls whether the GPC-MMU and uTLB entries -should be invalidated in addition to the Hub-MMU TLB (Note: the Hub TLB is -always invalidated). Set it to INVALIDATE_GPC_ENABLE to invalidate the GPC TLBs. -The REPLAY, ACK_TYPE, and SYSMEMBAR fields are only used by the GPC TLB and so -are ignored if INVALIDATE_GPC is DISABLE. - - MEM_OP_C_TLB_INVALIDATE_REPLAY specifies the type of replay to perform in -addition to the invalidate. A replay causes all replayable faults outstanding -in the TLB to attempt their translations again. Once a TLB acks a replay, that -TLB may start accepting new translations again. The replay flavors are as -follows: - NONE - do not replay any replayable faults on invalidate. - START - initiate a replay across all TLBs, but don't wait for completion. - The replay will be acked as soon as the invalidate is processed, but - replays themselves are in flight and not necessarily translated. - START_ACK_ALL - initiate the replay and wait until it completes. - The replay will be acked after all pending transactions in the replay - fifo have been translated. New requests will remain stalled in the - gpcmmu until all transactions in the replay fifo have completed and - there are no pending faults left in the replay fifo. - CANCEL_TARGETED - initiate a cancel-replay on a targeted uTLB, causing any - replayable translations buffered in that uTLB to become non-replayable - if they fault again. In this case, the first faulting translation - will be reported in the NV_PFIFO_INTR_MMU_FAULT registers and will - raise PFIFO_INTR_0_MMU_FAULT. The specific TLB to target for the - cancel is specified in the CANCEL_TARGET fields. Note the TLB - invalidate still applies globally to all TLBs. - CANCEL_GLOBAL - like CANCEL_TARGETED, but all TLBs will cancel-replay. - CANCEL_VA_GLOBAL - initiates a cancel operation that cancels all requests - with the matching mmu_engine_id and access_type that land in the - specified 4KB aligned virtual address within the scope of specified - PDB. All other requests are replayed. If the specified engine is not - bound, or if the PDB of the specified engine does not match the - specified PDB, all requests will be replayed and none will be canceled. - - MEM_OP_C_TLB_INVALIDATE_ACK_TYPE controls which sort of ACK the uTLBs wait -for after having issued a membar to L2. ACK_TYPE_NONE does not perform any sort -of membar. ACK_TYPE_INTRANODE waits for an ack from the XBAR. -ACK_TYPE_GLOBALLY waits for an L2 ACK. ACK_TYPE_GLOBALLY is equivalent to a -MEMBAR operation from the engine, or a SYS_MEMBAR if -MEM_OP_A_TLB_INVALIDATE_SYSMEMBAR is EN. - - MEM_OP_C_TLB_INVALIDATE_PAGE_TABLE_LEVEL specifies which levels in the page -directory hierarchy of the TLB cache to invalidate. The levels are numbered -from the bottom up, with the PTE being at the bottom with level 1. The -specified level and all those below it in the hierarchy -- that is, all those -with a lower numbered level -- are invalidated. ALL (the 0 default) is -special-cased to indicate the top level; this causes the invalidate to apply to -the entire page mapping structure. The field is ignored if the replay operation -is REPLAY_CANCEL_VA_GLOBAL. - - MEM_OP_C_TLB_INVALIDATE_ACCESS_TYPE specifies the associated ACCESS_TYPE of -the requests targeted by a REPLAY_CANCEL_VA_GLOBAL operation. This field -overlaps with the INVALIDATE_PAGE_TABLE_LEVEL field, and is ignored if the -replay operation is not REPLAY_CANCEL_VA_GLOBAL. The ACCESS_TYPE field can get -one of the following values: - READ - the cancel_va_global should be performed on all pending read requests. - WRITE - the cancel_va_global should be performed on all pending write requests. - ATOMIC_STRONG - the cancel_va_global should be performed on all pending - strong atomic requests. - ATOMIC_WEAK - the cancel_va_global should be performed on all pending - weak atomic requests. - ATOMIC_ALL - the cancel_va_global should be performed on all pending atomic - requests. - WRITE_AND_ATOMIC - the cancel_va_global should be performed on all pending - write and atomic requests. - ALL - the cancel_va_global should be performed on all pending requests. - - - MEM_OP_C_TLB_INVALIDATE_PDB_APERTURE specifies the target aperture of the -page directory for which TLB entries should be invalidated. This field must be -0 when TLB_INVALIDATE_PDB is ALL. - - MEM_OP_C_TLB_INVALIDATE_PDB_ADDR_LO specifies the low 20 bits of the -4k-block-aligned PDB (base address of the page directory) when -TLB_INVALIDATE_PDB is ONE; otherwise this field must be 0. The PDB byte address -should be 4k aligned and right-shifted by 12 before being split and packed into -the ADDR fields. Note that the PDB_ADDR_LO field starts at bit 12, so it is -possible to set MEM_OP_C to the low 32 bits of the byte address, mask off the -low 12, and then or in the rest of the configuration fields. - - MEM_OP_D_TLB_INVALIDATE_PDB_ADDR_HI contains the high bits of the PDB when -TLB_INVALIDATE_PDB is ONE. Otherwise this field must be 0. - -UVM handling of replayable faults: - - The following example illustrates how TLB invalidate may be used by the -UVM driver: - 1. When the TLB invalidate completes, all memory accesses using the old - TLB entries prior to the invalidate will finish translation (but not - completion), and any new virtual accesses will trigger new - translations. The outstanding in-flight translations are allowed to - fault but will not indefinitely stall the invalidate. - 2. When the TLB invalidate completes, in-flight memory accesses using the - old physical translations may not yet be visible to other GPU clients - (such as CopyEngine) or to the CPU. Accesses coming from clients that - support recoverable faults (such as TEX and GCC) can be made visible by - requesting the MMU to perform a membar using the ACK_TYPE and SYSMEMBAR - fields. - a. If ACK_TYPE is NONE the SYSMEMBAR field is ignored and no membar - is performed. - b. If ACK_TYPE is INTRANODE the invalidate will wait until all - in-flight physical accesses using the old translations are visible - to XBAR clients on the blocking VC. - c. If ACK_TYPE is GLOBALLY the invalidate will wait until all - in-flight physical accesses using the old translations are at the - point of coherence in L2, meaning writes will be visible to all - other GPU clients and reads will not be mutable by them. - d. If the SYSMEMBAR field is set to EN then a Hub SYSMEMBAR will also - be performed following the ACK_TYPE membar. This is the equivalent - of performing a NV_UDMA_MEM_OP_C_MEMBAR_TYPE_SYS_MEMBAR. - 3. If fault replay was requested then all pending recoverable faults in - the TLB replay list will be retranslated. This includes all faults - discovered while the invalidate was pending. This replay may generate - more recoverable faults. - 4. If fault replay cancel was requested then another replay is attempted of - all pending replayable faults on the targeted TLB(s). If any of these - re-fault they are discarded (sticky NACK or ACK/TRAP sent back to the - client depending on the setting of NV_PGPC_PRI_MMU_DEBUG_CTRL). - - - -MEMBAR ------- - - When the operation is MEMBAR, Host will perform a memory barrier operation. -All other fields must be set to 0 except for MEM_OP_C_MEMBAR_TYPE. When -MEMBAR_TYPE is MEMBAR, then a memory barrier will be performed with respect to -other clients on the GPU. When it is SYS_MEMBAR, the memory barrier will also be -performed with respect to the CPU and peer GPUs. - - MEMBAR - This issues a MEMBAR operation following all reads, writes, and -atomics currently in flight from the PBDMA. The MEMBAR operation will push all -such accesses already in flight on the same VC as the PBDMA to a point of GPU -coherence before proceeding. After this operation is complete, reads from any -GPU client will see prior writes from this PBDMA, and writes from any GPU client -cannot modify the return data of earlier reads from this PBDMA. This is true -regardless of whether those accesses target vidmem, sysmem, or peer mem. - WARNING: This only guarantees accesses from the same VC as the PBDMA that -are already in flight are coherent. Accesses from clients such as SM or a -non-PBDMA engine need already be at some point of coherency before this -operation to be coherent. - - SYS_MEMBAR - This implies the MEMBAR type above but in addition to having -accesses reach coherence with all GPU clients, this further waits for accesses -to be coherent with respect to the CPU and peer GPUs as well. After this -operation is complete, reads from the CPU or peer GPUs will see prior writes -from this PBDMA, and writes from the CPU or peer GPUs cannot modify the return -data of earlier reads from this PBDMA (with the exception of CPU reflected -writes, which can modify earlier reads). Note SYS_MEMBAR is really only needed -to guarantee ordering with off-chip clients. For on-chip clients such as the -graphics engine or copy engine, accesses to sysmem will be coherent with just a -MEMBAR operation. SYS_MEMBAR provides the same function as -OPERATION_SYSMEMBAR_FLUSH on previous architectures. - WARNING: As described above, SYS_MEMBAR will not prevent CPU reflected -writes issued after the SYS_MEMBAR from clobbering the return data of reads -issued before the SYS_MEMBAR. To handle this case, the invalidate must be -followed with a separate L2_WAIT_FOR_SYS_PENDING_READS mem op. - - - -L2* ---- - - These values initiate a cache management operation -- see above. All other -fields must be 0; there are no configuration options. - - - - -The ACCESS_COUNTER_CLR operation --------------------------------- - When MEM_OP_D_OPERATION is ACCESS_COUNTER_CLR, Host will request to clear -the the page access counters. There are two types of access counters - MIMC and -MOMC. This operation can be issued to clear all counters of all types, all -counters of a specified type (MIMC or MOMC), or a specific counter indicated by -counter type, bank and notify tag. - This operation is privileged and can only be executed from channels with -NV_PPBDMA_CONFIG_AUTH_LEVEL set to PRIVILEGED. This is configured via the -NV_RAMFC_CONFIG dword in the channel's RAMFC during channel setup. - -The operation uses the following fields in the MEM_OP_* methods: -ACCESS_COUNTER_CLR_TYPE (TY) : type of the access counter clear - operation -ACCESS_COUNTER_CLR_TARGETED_TYPE (T) : type of the access counter for - targeted operation -ACCESS_COUNTER_CLR_TARGETED_NOTIFY_TAG : 20 bits notify tag of the access - counter for targeted operation -ACCESS_COUNTER_CLR_TARGETED_BANK : 4 bits bank number of the access - counter for targeted operation - - - - - -MEM_OP method field defines: - -MEM_OP_A [method] - Memory Operation Method 1/4 - see above for documentation - -#define NV_UDMA_MEM_OP_A 0x00000028 /* -W-4R */ - -#define NV_UDMA_MEM_OP_A_TLB_INVALIDATE_CANCEL_TARGET_CLIENT_UNIT_ID 5:0 /* -W-VF */ -#define NV_UDMA_MEM_OP_A_TLB_INVALIDATE_INVALIDATION_SIZE 5:0 /* -W-VF */ -#define NV_UDMA_MEM_OP_A_TLB_INVALIDATE_CANCEL_TARGET_GPC_ID 10:6 /* -W-VF */ -#define NV_UDMA_MEM_OP_A_TLB_INVALIDATE_CANCEL_MMU_ENGINE_ID 6:0 /* -W-VF */ -#define NV_UDMA_MEM_OP_A_TLB_INVALIDATE_SYSMEMBAR 11:11 /* -W-VF */ -#define NV_UDMA_MEM_OP_A_TLB_INVALIDATE_SYSMEMBAR_EN 0x00000001 /* -W--V */ -#define NV_UDMA_MEM_OP_A_TLB_INVALIDATE_SYSMEMBAR_DIS 0x00000000 /* -W--V */ -#define NV_UDMA_MEM_OP_A_TLB_INVALIDATE_TARGET_ADDR_LO 31:12 /* -W-VF */ - - -MEM_OP_B [method] - Memory Operation Method 2/4 - see above for documentation - -#define NV_UDMA_MEM_OP_B 0x0000002c /* -W-4R */ - -#define NV_UDMA_MEM_OP_B_TLB_INVALIDATE_TARGET_ADDR_HI 31:0 /* -W-VF */ - - -MEM_OP_C [method] - Memory Operation Method 3/4 - see above for documentation - -#define NV_UDMA_MEM_OP_C 0x00000030 /* -W-4R */ - -Membar configuration field. Note: overlaps MMU_TLB_INVALIDATE* config fields. -#define NV_UDMA_MEM_OP_C_MEMBAR_TYPE 2:0 /* -W-VF */ -#define NV_UDMA_MEM_OP_C_MEMBAR_TYPE_SYS_MEMBAR 0x00000000 /* -W--V */ -#define NV_UDMA_MEM_OP_C_MEMBAR_TYPE_MEMBAR 0x00000001 /* -W--V */ -Invalidate TLB entries for ONE page directory base, or for ALL of them. -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PDB 0:0 /* -W-VF */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PDB_ONE 0x00000000 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PDB_ALL 0x00000001 /* -W--V */ -Invalidate GPC MMU TLB entries or not (Hub-MMU entries are always invalidated). -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_GPC 1:1 /* -W-VF */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_GPC_ENABLE 0x00000000 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_GPC_DISABLE 0x00000001 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_REPLAY 4:2 /* -W-VF */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_REPLAY_NONE 0x00000000 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_REPLAY_START 0x00000001 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_REPLAY_START_ACK_ALL 0x00000002 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_REPLAY_CANCEL_TARGETED 0x00000003 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_REPLAY_CANCEL_GLOBAL 0x00000004 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_REPLAY_CANCEL_VA_GLOBAL 0x00000005 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACK_TYPE 6:5 /* -W-VF */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACK_TYPE_NONE 0x00000000 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACK_TYPE_GLOBALLY 0x00000001 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACK_TYPE_INTRANODE 0x00000002 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACCESS_TYPE 9:7 /* -W-VF */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACCESS_TYPE_VIRT_READ 0 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACCESS_TYPE_VIRT_WRITE 1 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACCESS_TYPE_VIRT_ATOMIC_STRONG 2 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACCESS_TYPE_VIRT_RSVRVD 3 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACCESS_TYPE_VIRT_ATOMIC_WEAK 4 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACCESS_TYPE_VIRT_ATOMIC_ALL 5 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACCESS_TYPE_VIRT_WRITE_AND_ATOMIC 6 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_ACCESS_TYPE_VIRT_ALL 7 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PAGE_TABLE_LEVEL 9:7 /* -W-VF */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PAGE_TABLE_LEVEL_ALL 0x00000000 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PAGE_TABLE_LEVEL_PTE_ONLY 0x00000001 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PAGE_TABLE_LEVEL_UP_TO_PDE0 0x00000002 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PAGE_TABLE_LEVEL_UP_TO_PDE1 0x00000003 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PAGE_TABLE_LEVEL_UP_TO_PDE2 0x00000004 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PAGE_TABLE_LEVEL_UP_TO_PDE3 0x00000005 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PAGE_TABLE_LEVEL_UP_TO_PDE4 0x00000006 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PAGE_TABLE_LEVEL_UP_TO_PDE5 0x00000007 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PDB_APERTURE 11:10 /* -W-VF */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PDB_APERTURE_VID_MEM 0x00000000 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PDB_APERTURE_SYS_MEM_COHERENT 0x00000002 /* -W--V */ -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PDB_APERTURE_SYS_MEM_NONCOHERENT 0x00000003 /* -W--V */ -Address[31:12] of page directory for which TLB entries should be invalidated. -#define NV_UDMA_MEM_OP_C_TLB_INVALIDATE_PDB_ADDR_LO 31:12 /* -W-VF */ - -#define NV_UDMA_MEM_OP_C_ACCESS_COUNTER_CLR_TARGETED_NOTIFY_TAG 19:0 /* -W-VF */ - -MEM_OP_D [method] - Memory Operation Method 4/4 - see above for documentation -(Must be preceded by MEM_OP_A-C.) - -#define NV_UDMA_MEM_OP_D 0x00000034 /* -W-4R */ - -Address[58:32] of page directory for which TLB entries should be invalidated. -#define NV_UDMA_MEM_OP_D_TLB_INVALIDATE_PDB_ADDR_HI 26:0 /* -W-VF */ -#define NV_UDMA_MEM_OP_D_OPERATION 31:27 /* -W-VF */ -#define NV_UDMA_MEM_OP_D_OPERATION_MEMBAR 0x00000005 /* -W--V */ -#define NV_UDMA_MEM_OP_D_OPERATION_MMU_TLB_INVALIDATE 0x00000009 /* -W--V */ -#define NV_UDMA_MEM_OP_D_OPERATION_MMU_TLB_INVALIDATE_TARGETED 0x0000000a /* -W--V */ -#define NV_UDMA_MEM_OP_D_OPERATION_L2_PEERMEM_INVALIDATE 0x0000000d /* -W--V */ -#define NV_UDMA_MEM_OP_D_OPERATION_L2_SYSMEM_INVALIDATE 0x0000000e /* -W--V */ -#define NV_UDMA_MEM_OP_D_OPERATION_L2_CLEAN_COMPTAGS 0x0000000f /* -W--V */ -#define NV_UDMA_MEM_OP_D_OPERATION_L2_FLUSH_DIRTY 0x00000010 /* -W--V */ -#define NV_UDMA_MEM_OP_D_OPERATION_L2_WAIT_FOR_SYS_PENDING_READS 0x00000015 /* -W--V */ - -#define NV_UDMA_MEM_OP_D_OPERATION_ACCESS_COUNTER_CLR 0x00000016 /* -W--V */ - -#define NV_UDMA_MEM_OP_D_ACCESS_COUNTER_CLR_TYPE 1:0 /* -W-VF */ -#define NV_UDMA_MEM_OP_D_ACCESS_COUNTER_CLR_TYPE_MIMC 0x00000000 /* -W--V */ -#define NV_UDMA_MEM_OP_D_ACCESS_COUNTER_CLR_TYPE_MOMC 0x00000001 /* -W--V */ -#define NV_UDMA_MEM_OP_D_ACCESS_COUNTER_CLR_TYPE_ALL 0x00000002 /* -W--V */ -#define NV_UDMA_MEM_OP_D_ACCESS_COUNTER_CLR_TYPE_TARGETED 0x00000003 /* -W--V */ - -#define NV_UDMA_MEM_OP_D_ACCESS_COUNTER_CLR_TARGETED_TYPE 2:2 /* -W-VF */ -#define NV_UDMA_MEM_OP_D_ACCESS_COUNTER_CLR_TARGETED_TYPE_MIMC 0x00000000 /* -W--V */ -#define NV_UDMA_MEM_OP_D_ACCESS_COUNTER_CLR_TARGETED_TYPE_MOMC 0x00000001 /* -W--V */ - -#define NV_UDMA_MEM_OP_D_ACCESS_COUNTER_CLR_TARGETED_BANK 6:3 /* -W-VF */ - - -SET_REF [method] - Set Reference Count Method - - The SET_REF method allows the user to set the reference count -(NV_PPBDMA_REF_CNT) to a value. The reference count may be monitored to track -Host's progress through the pushbuffer. Instead of monitoring -NV_RAMUSERD_TOP_LEVEL_GET, software may put into the method stream SET_REF -methods that set the reference count to ever increasing values, and then read -NV_RAMUSERD_REF to determine how far in the stream Host has gone. - Before the reference count value is altered, Host waits for the engine to -be idle (to have completed executing all earlier methods), issues a SysMemBar -flush, and waits for the flush to complete. - While the GPU context is bound to a channel and assigned to a PBDMA unit, -the reference count value is stored in the NV_PPBDMA_REF register. While the -GPU context is not assigned to a PBDMA unit, the reference count value is stored -in the NV_RAMFC_REF field of the RAMFC portion of the GPU context's GPU-instance -block. - - -#define NV_UDMA_SET_REF 0x00000050 /* -W-4R */ - -#define NV_UDMA_SET_REF_CNT 31:0 /* -W-VF */ - - - -CRC_CHECK [method] - Method-CRC Check Method - - When debugging a problem in a real chip, it may be useful to determine -whether a PBDMA unit has sent the proper methods toward the engine. The -CRC_CHECK method checks whether the cyclic redundancy check value -calculated over previous methods has an expected value. If the value in the -NV_PPBDMA_METHOD_CRC register is not equal to NV_UDMA_CRC_CHECK_VALUE, then -Host initiates an interrupt (NV_PPBDMA_INTR_0_METHODCRC) and stalls. After -each comparison, the NV_PPBDMA_METHOD_CRC register is cleared. - The IEEE 802.3 CRC-32 polynomial (0x04c11db7) is used to calculate CRC -values. The CRC is calculated over the method subchannel, method address, and -method data of methods sent to an engine. Host can set both single and dual -methods to engines. The CRC is calculated as if dual methods were sent as -two single methods. The CRC is calculated on the byte-stream in little-endian -order. - - -Pseudocode for CRC calculation is: - - static NVR_U32 table[256]; - void init() { - for (NVR_U32 i = 0; i < 256; i++) { // create crc value for every byte - NVR_U32 crc = i << 24; - for (int j = 0; j < 8; j++) { // for every bit in the byte - if (crc & 0x80000000) crc = (crc << 1) ^ 0x04c11db7 - else crc = (crc << 1); - } - table[i] = crc; - } - } - NVR_U32 new_crc(unsigned char byte, NVR_U32 old_crc) { - NVR_U32 crc_top_byte = old_crc >> 24; - crc_top_byte ^= byte; - NVR_U32 new_crc = (old_crc << 8) ^ table[crc_top_byte]; - return new_crc; - } - - This method is used for debug. - This method was added in Fermi. - - -#define NV_UDMA_CRC_CHECK 0x0000007c /* -W-4R */ - -#define NV_UDMA_CRC_CHECK_VALUE 31:0 /* -W-VF */ - - -YIELD [method] - Yield Method - - The YIELD method causes a channel to yield the remainder of its timeslice. -The method's OP field specifies whether the channels' PBDMA timeslice, the -channel's runlist timeslice, or no timeslice is yielded. - If YIELD_OP_RUNLIST_TIMESLICE, then Host will act as if the channel's -runlist or TSG timeslice expired. Host will exit the TSG and switch to the next -channel after the TSG on the runlist. If there is no such channel to switch to, -then YIELD_OP_RUNLIST_TIMESLICE will not cause a switch. - When the PBDMA executes a YIELD_OP_RUNLIST_TIMESLICE method, it guarantees -that it will not execute further methods from the same channel or TSG until the -channel is restarted by the scheduler. However, note that this does not yield -the engine timeslice; if the engine is preemptable, the context will continue -to run on the engine until the remainder of its timeslice expires before Host -will attempt to preempt it. Also if there is an outstanding ctx load either -due to ctx_reload or from the other PBDMA in the SCG case, then yielding won't -take place until the outstanding ctx load finishes or aborts due to a preempt. -When the ctx load does complete on the other PBDMA, it is possible for that -PBDMA to execute some small number of additional methods before the runlist -yield takes effect and that PBDMA halts work for its channel. - If NV_UDMA_YIELD_OP_TSG, and if the channel is part of a TSG, then Host -will switch to the next channel in the same TSG, and if the channel is not part -of the TSG then this will be treated similar to YIELD_OP_NOP. If there is only -one channel with work in the TSG, Host will simply reschedule the same channel -in the TSG. YIELD_OP_TSG does not cause the scheduler to leave the TSG. The TSG -timeslice (TSG timeslice is equivalent to runlist timeslice for TSGs) counter -continues to increment through the channel switch and does not restart after -executing the yield method. When the PBDMA executes a Yield method, it -guarantees that it will not execute the method following that Yield until the -channel is restarted by the scheduler. - YIELD_OP_NOP is simply a NOP. Neither timeslice is yielded. This was kept -for compatibility with existing tests; NV_UDMA_NOP is the preferred NOP, but -also see the universal NOP PB instruction. See the description of -NV_FIFO_DMA_NOP in the "FIFO_DMA" section of dev_ram.ref. - - If an unknown OP is specified, Host will raise an NV_PPBDMA_INTR_*_METHOD -interrupt. - - -#define NV_UDMA_YIELD 0x00000080 /* -W-4R */ - -#define NV_UDMA_YIELD_OP 1:0 /* -W-VF */ -#define NV_UDMA_YIELD_OP_NOP 0x00000000 /* -W--V */ -#define NV_UDMA_YIELD_OP_RUNLIST_TIMESLICE 0x00000002 /* -W--V */ -#define NV_UDMA_YIELD_OP_TSG 0x00000003 /* -W--V */ - - -WFI [method] - Wait-for-Idle Method - - The WFI (Wait-For-Idle) method will stall Host from processing any more -methods on the channel until the engine to which the channel last sent methods -is idle. Note that the subchannel encoded in the method header is ignored (as -it is for all Host-only methods) and does NOT specify which engine to idle. In -Kepler, this is only relevant on runlists that serve multiple engines -(specifically, the graphics runlist, which also serves GR COPY). - The WFI method has a single field SCOPE which specifies the level of WFI -the Host method performs. ALL waits for all work in the engine from the same -context to be idle across all classes and subchannels. CURRENT_VEID causes the -WFI to only apply to work from the same VEID as the current channel. Note for -engines that do not support VEIDs, CURRENT_VEID works identically to ALL. - Note that Host methods ignore the subchannel field in the method. A Host -WFI method always applies to the engine the channel last sent methods to. If a -WFI with ALL is specified and the channel last sent work to the GRCE, this will -only guarantee that GRCE has no work in progress. It is possible that the GR -context will have work in progress from other VEIDs, or even the current VEID if -the current channel targets GRCE and has never sent FE methods before. This -means that if SW wants to idle the graphics pipe for all VEIDs, SW must send a -method to GR immediately before the WFI method. A GR_NOP is sufficient. - Note also that even if the current NV_PPBDMA_TARGET is GRAPHICS and not -GRCE, there are cases where Host can trivially complete a WFI without sending -the NV_PMETHOD_HOST_WFI internal method to FE. This can happen when - -1. the runlist timeslices to a different TSG just before the WFI method, -2. the other TSG does a ctxsw request due to methods for FE, and -3. FECS reports non-preempted in the ctx ack, so CTX_RELOAD doesn't get set. - -In that case, when the channel switches back onto the PBDMA, the PBDMA rightly -concludes that there is no way the context could be non-idle for that channel, -and therefore filters out the WFI, even if the other PBDMA is sending work to -other VEIDs. As in the subchannel case, a GR_NOP preceding the WFI is -sufficient to ensure that a SCOPE_ALL_VEID WFI will be sent to FE regardless of -timeslicing as long as the NOP and the WFI are submitted as part of the same -GP_PUT update. This is ensured by the semantics of the channel state -SHOULD_SEND_HOST_TSG_EVENT behaving like CTX_RELOAD: the GR_NOP causes the PBDMA -to set the SHOULD_SEND_HOST_TSG_EVENT state, so even a channel or context switch -will still result in the PBDMA having the engine context loaded. Thus the WFI -will cause the HOST_WFI internal method to be sent to FE. - - -#define NV_UDMA_WFI 0x00000078 /* -W-4R */ - -#define NV_UDMA_WFI_SCOPE 0:0 /* -W-VF */ -#define NV_UDMA_WFI_SCOPE_CURRENT_VEID 0x00000000 /* -W--V */ -#define NV_UDMA_WFI_SCOPE_ALL 0x00000001 /* -W--V */ -#define NV_UDMA_WFI_SCOPE_ALL_VEID 0x00000001 /* */ - - - -CLEAR_FAULTED [method] - Clear Faulted Method - - The CLEAR_FAULTED method clears a channel's PCCSR PBDMA_FAULTED or -ENG_FAULTED bit. These bits are set by Host in response to a PBDMA fault or -engine fault respectively on the specified channel; see dev_fifo.ref. - - The CHID field specifies the ID of the channel whose FAULTED bit is to be -cleared. - - The TYPE field specifies which FAULTED bit is to be cleared: either -PBDMA_FAULTED or ENG_FAULTED. - - When Host receives a CLEAR_FAULTED method for a channel, the corresponding -PCCSR FAULTED bit for the channel should be set. However, due to a race between -SW seeing the fault message from MMU and handling the fault and sending the -CLEAR_FAULT method verses Host seeing the fault from CE or MMU and setting the -FAULTED bit, it is possible for the CLEAR_FAULTED method to arrive before the -FAULTED bit is set. Host will handle a CLEAR_FAULTED method according to the -following cases: - - a. The FAULTED bit specified by TYPE is set. Host will clear the bit and -retire the CLEAR_FAULTED method. - - b. If the bit is not set, the PBDMA will continue to retry the -CLEAR_FAULTED method on every PTIMER microsecond tick by rechecking the FAULTED -bit of the target channel. Once the bit is set, the PBDMA will clear the bit and -retire the method. The execution of the fault handling channel will stall on the -CLEAR_FAULTED method until the FAULTED bit for the target channel is set. The -PBDMA will retry the CLEAR_FAULTED method approximately every microsecond. - - c. If the fault handling channel's timeslice expires while stalled on a -CLEAR_FAULTED method, the channel will switch out. Once rescheduled, the -channel will resume retrying the CLEAR_FAULTED method. - - d. To avoid indefinitely waiting for the CLEAR_FAULTED method to retire -(likely due to wrongly injected CLEAR_FAULTED method due to a SW bug), Host -has a timeout mechanism to inform SW of a potential bug. This timeout is -controlled by NV_PFIFO_CLEAR_FAULTED_TIMEOUT; see dev_fifo.ref for details. - - e. When a CLEAR_FAULTED timeout is detected, Host will raise a stalling -interrupt by setting the NV_PPBDMA_INTR_0_CLEAR_FAULTED_ERROR field. The -address of the invalid CLEAR_FAULTED method will be in NV_PPBDMA_METHOD0, and -its payload will be in NV_PPBDMA_DATA0. - - Note Setting the timeout value too low could result in false stalling -interrupts to SW. The timeout should be set equal to NV_PFIFO_FB_TIMEOUT_PERIOD. - - Note the CLEAR_FAULTED timeout mechanism uses the same PBDMA registers and -RAMFC fields as the semaphore acquire timeout mechanism: -NV_PPBDMA_SEM_EXECUTE_ACQUIRE_FAIL is set TRUE when the first attempt fails, and -the NV_PPBDMA_ACQUIRE_DEADLINE is loaded with the sum of the current PTIMER and -the NV_PFIFO_CLEAR_FAULTED_TIMEOUT. The ACQUIRE_FAIL bit is reset to FALSE when -the CLEAR_FAULTED method times out or succeeds. - - -#define NV_UDMA_CLEAR_FAULTED 0x00000084 /* -W-4R */ - -#define NV_UDMA_CLEAR_FAULTED_CHID 11:0 /* -W-VF */ -#define NV_UDMA_CLEAR_FAULTED_TYPE 31:31 /* -W-VF */ -#define NV_UDMA_CLEAR_FAULTED_TYPE_PBDMA_FAULTED 0x00000000 /* -W--V */ -#define NV_UDMA_CLEAR_FAULTED_TYPE_ENG_FAULTED 0x00000001 /* -W--V */ - - - - Addresses that are not defined in this device are reserved. Those below -0x100 are reserved for future Host methods. Addresses 0x100 and beyond are -reserved for the engines served by Host. diff --git a/Host-Fifo/volta/gv100/dev_ram.ref.txt b/Host-Fifo/volta/gv100/dev_ram.ref.txt deleted file mode 100644 index e80d9c0..0000000 --- a/Host-Fifo/volta/gv100/dev_ram.ref.txt +++ /dev/null @@ -1,1269 +0,0 @@ -Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. - -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. --------------------------------------------------------------------------------- - -2 - GPU INSTANCE RAM (RAMIN) -============================== - - A GPU contains a block called "XVE" that manages the interface with PCI, a -block called "Host" that fetches graphics instructions, blocks called "engines" -that execute graphics instructions, and blocks that manage the interface with -memory. - - .-----. .------. - | |<------------------>| | - | | | | - | | .---------. | | - | |<--->| Engine1 |<---| | - | | `---------' | | -.---------. | | | | -| GPU | | | .---------. | Host | -| Local |<-->| FB |<--->| Engine2 |<---| | -| Memory | | MMU | `---------' | | -`---------' | Hub | ... | | .--------. - | | .---------. | | | System | - | |<--->| EngineN |<---| | | Memory | - | | `---------' `------' `--------' - | | ^ ^ - | | | | -.---------. | | .--V--. PCI .--V--. .-----. -| Display |<-->| |<------------------>| XVE |<--->| NB |<--->| CPU | -`---------' `-----' `-----' `-----' `-----' - - A GPU context is a virtualization of the GPU for a particular software -application. A GPU instance block is a block of memory that contains the state -for a GPU context. A GPU context's instance block consists of Host state, -pointers to each engine's state, and memory management state. A GPU instance -block also contains a pointer to a block of memory that contains that part of a -GPU context's state that a user-level driver may access. A GPU instance block -fits within a single 4K-byte page of memory. - - Run List Channel-Map RAM - .----------. Ch Id .----------------. - | RL Entry0 |----. |Ch0 Inst Blk Ptr| - | RL Entry1 | | |Ch1 Inst Blk Ptr| - | RL Entry2 | | | ... | - | ... | `--->|ChI Inst Blk Ptr|----. - | RL EntryN | | ... | | - `-----------' |ChN Inst Blk Ptr| | - `----------------' | - | - .-----------------------------------------------' - | - | GPU Instance Block GPFIFO - `-->.-----------------. GP_GET .--------. PB Seg - | |------------------------------>|GP Entry| .--------. - | Host State | |GP Entry|--->|PB Entry| - | (RAMFC) | User-Driver State | | |PB Entry| - | | .-------. |GP Entry| | ... | - | |------------->|(USERD)| GP_PUT |GP Entry| |PB Entry| - | | | |------->`--------' `--------' - | | | | - +-----------------+ | | - | Memory | `-------' - | Management |----------. Page Directory Page Table - | State | | .-------. .-------. - +-----------------+ `-->| PDE | | PTE | - | Pointer to | | PDE |------->| PTE | - | Engine0 |--------. | ... | | ... | - | State | | | PDE | | PTE | - +-----------------+ | `-------' `-------' - | Pointer to | | - | Engine1 |-----. | Engine0 State - | State | | | .-------. - +-----------------+ | `---->| | - ... | `-------' - +-----------------+ | - | Pointer to | | Engine1 State - | EngineN |--. | .-------. - | State | | `------->| | - `-----------------' | `-------' - | ... - | - | EngineN State - | .-------. - `---------->| | - `-------' - - The GPU context's Host state occupies the first 128 double words of an -instance block. A GPU context's Host state is called "RAMFC". Please see -the NV_RAMFC section below for a description of Host state. - - The GPU context's memory-management state defines the virtual address space -that the GPU context uses. Memory management state consists of page and -directory tables (that specify the mapping between virtual addresses and -physical addresses, and the attributes of memory pages), and the limit of the -virtual address space. The NV_RAMIN_PAGE_DIR_BASE entry contains the address of -base of the GPU context's page directory table (PDB). NV_RAMIN_PAGE_DIR_BASE is -4K-byte aligned. - - The NV_RAMIN_ENG*_WFI_PTR entry contains the address of a block of memory -for storing an engine's context state. Blocks of memory that contain engine state -are 4K-byte aligned. Only one engine context is supported per instance block. - - The NV_RAMIN_ENG*_CS field is deprecated, it was used to indicate whether -GPU state should be restored from the FGCS pointer or from the WFI CS pointer. -Engines only need/support one CTXSW pointer and all state is stored there -whether a WFI CS or other form of preemption was performed. This field must -always be set to WFI for legacy reasons, and will eventually be deleted. - - -#define NV_RAMIN /* ----G */ - -// The instance block must be 4k-aligned. -#define NV_RAMIN_BASE_SHIFT 12 /* */ - -// The instance block size fits within a single 4k block. -#define NV_RAMIN_ALLOC_SIZE 4096 /* */ - -// Host State -#define NV_RAMIN_RAMFC (127*32+31):(0*32+0) /* RWXUF */ - -// Memory-Management State - - The following fields are used for non-VEID engines. The NV_RAMIN_SC_* described later - are used for VEID engines. - - NV_RAMIN_PAGE_DIR_BASE_TARGET determines if the top level of the page tables - is in video memory or system memory (peer is not allowed), and the CPU cache - coherency for system memory. - Using INVALID, unbinds the selected engine. - -#define NV_RAMIN_PAGE_DIR_BASE_TARGET (128*32+1):(128*32+0) /* RWXUF */ -#define NV_RAMIN_PAGE_DIR_BASE_TARGET_VID_MEM 0x00000000 /* RW--V */ -#define NV_RAMIN_PAGE_DIR_BASE_TARGET_INVALID 0x00000001 /* RW--V */ -#define NV_RAMIN_PAGE_DIR_BASE_TARGET_SYS_MEM_COHERENT 0x00000002 /* RW--V */ -#define NV_RAMIN_PAGE_DIR_BASE_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* RW--V */ - - NV_RAMIN_PAGE_DIR_BASE_VOL identifies the volatile behavior - of top level of the page table (whether local L2 can cache it or not). - -#define NV_RAMIN_PAGE_DIR_BASE_VOL (128*32+2):(128*32+2) /* RWXUF */ -#define NV_RAMIN_PAGE_DIR_BASE_VOL_TRUE 0x00000001 /* RW--V */ -#define NV_RAMIN_PAGE_DIR_BASE_VOL_FALSE 0x00000000 /* RW--V */ - - - These bits specify whether the MMU will treats faults as replayable or not. - The engine will send these bits to the MMU as part of the instance bind. - -#define NV_RAMIN_PAGE_DIR_BASE_FAULT_REPLAY_TEX (128*32+4):(128*32+4) /* RWXUF */ -#define NV_RAMIN_PAGE_DIR_BASE_FAULT_REPLAY_TEX_DISABLED 0x00000000 /* RW--V */ -#define NV_RAMIN_PAGE_DIR_BASE_FAULT_REPLAY_TEX_ENABLED 0x00000001 /* RW--V */ -#define NV_RAMIN_PAGE_DIR_BASE_FAULT_REPLAY_GCC (128*32+5):(128*32+5) /* RWXUF */ -#define NV_RAMIN_PAGE_DIR_BASE_FAULT_REPLAY_GCC_DISABLED 0x00000000 /* RW--V */ -#define NV_RAMIN_PAGE_DIR_BASE_FAULT_REPLAY_GCC_ENABLED 0x00000001 /* RW--V */ - - NV_RAMIN_USE_NEW_PT_FORMAT determines which page table format to use. - When NV_RAMIN_USE_NEW_PT_FORMAT is false, the page table uses the old format. - When NV_RAMIN_USE_NEW_PT_FORMAT is true, the page table uses the new format. - - Volta only supports the new format. Selecting the old format results in an UNBOUND_INSTANCE fault. - - -#define NV_RAMIN_USE_VER2_PT_FORMAT (128*32+10):(128*32+10) /* */ -#define NV_RAMIN_USE_VER2_PT_FORMAT_FALSE 0x00000000 /* */ -#define NV_RAMIN_USE_VER2_PT_FORMAT_TRUE 0x00000001 /* */ - - When NV_PFB_PRI_MMU_CTRL_USE_PDB_BIG_PAGE_SIZE is bit TRUE, the bit selects the big page size. - When NV_PFB_PRI_MMU_CTRL_USE_PDB_BIG_PAGE_SIZE is bit FALSE, NV_PFB_PRI_MMU_CTRL_VM_PG_SIZE selects the big page size. - - Volta only supports 64KB for big pages. Selecting 128KB for big pages results in an UNBOUND_INSTANCE fault. - -#define NV_RAMIN_BIG_PAGE_SIZE (128*32+11):(128*32+11) /* RWXUF */ -#define NV_RAMIN_BIG_PAGE_SIZE_128KB 0x00000000 /* RW--V */ -#define NV_RAMIN_BIG_PAGE_SIZE_64KB 0x00000001 /* RW--V */ - - NV_RAMIN_PAGE_DIR_BASE_LO and NV_RAMIN_PAGE_DIR_BASE_HI - identify the page directory base (start of the page table) - location for this context. - -#define NV_RAMIN_PAGE_DIR_BASE_LO (128*32+31):(128*32+12) /* RWXUF */ -#define NV_RAMIN_PAGE_DIR_BASE_HI (129*32+31):(129*32+0) /* RWXUF */ - -// Single engine pointer channels cannot support multiple -// engines with CTXSW pointers -#define NV_RAMIN_ENGINE_CS (132*32+3):(132*32+3) /* */ -#define NV_RAMIN_ENGINE_CS_WFI 0x00000000 /* */ -#define NV_RAMIN_ENGINE_CS_FG 0x00000001 /* */ -#define NV_RAMIN_ENGINE_WFI_TARGET (132*32+1):(132*32+0) /* */ -#define NV_RAMIN_ENGINE_WFI_TARGET_LOCAL_MEM 0x00000000 /* */ -#define NV_RAMIN_ENGINE_WFI_TARGET_SYS_MEM_COHERENT 0x00000002 /* */ -#define NV_RAMIN_ENGINE_WFI_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* */ -#define NV_RAMIN_ENGINE_WFI_MODE (132*32+2):(132*32+2) /* */ -#define NV_RAMIN_ENGINE_WFI_MODE_PHYSICAL 0x00000000 /* */ -#define NV_RAMIN_ENGINE_WFI_MODE_VIRTUAL 0x00000001 /* */ -#define NV_RAMIN_ENGINE_WFI_PTR_LO (132*32+31):(132*32+12) /* */ -#define NV_RAMIN_ENGINE_WFI_PTR_HI (133*32+7):(133*32+0) /* */ - -#define NV_RAMIN_ENGINE_WFI_VEID (134*32+(6-1)):(134*32+0) /* */ -#define NV_RAMIN_ENABLE_ATS (135*32+31):(135*32+31) /* RWXUF */ -#define NV_RAMIN_ENABLE_ATS_TRUE 0x00000001 /* RW--V */ -#define NV_RAMIN_ENABLE_ATS_FALSE 0x00000000 /* RW--V */ -#define NV_RAMIN_PASID (135*32+(20-1)):(135*32+0) /* RWXUF */ - - - Pointer to a method buffer in BAR2 memory where a faulted engine can save -out methods. BAR2 accesses are assumed to be virtual, so the address saved here -is a virtual address. - -#define NV_RAMIN_ENG_METHOD_BUFFER_ADDR_LO (136*32+31):(136*32+0) /* RWXUF */ -#define NV_RAMIN_ENG_METHOD_BUFFER_ADDR_HI (137*32+(((49-1)-32))):(137*32+0) /* RWXUF */ - - - - These entries are used to inform FECS which of the below array of PDBs are - valid/filled in and need to subsequently be bound. - - This needs to reserve at least NV_LITTER_NUM_SUBCTX entries. Currently - there is enough space reserved for 64 subcontexts. -#define NV_RAMIN_SC_PDB_VALID(i) (166*32+i):(166*32+i) /* RWXUF */ -#define NV_RAMIN_SC_PDB_VALID__SIZE_1 64 /* */ -#define NV_RAMIN_SC_PDB_VALID_FALSE 0x00000000 /* RW--V */ -#define NV_RAMIN_SC_PDB_VALID_TRUE 0x00000001 /* RW--V */ - -// Memory-Management VEID array - - The NV_RAMIN_SC_PAGE_DIR_BASE_* entries are an array of page table settings - for each subcontext. When a context supports subcontexts, the page table - information for a given VEID/Subcontext needs to be filled in or else page - faults will result on access. - - These properties for the page table must be filled in for all channels - sharing the same context as any channel's NV_RAMIN may be used to load the - context. - - The non-subcontext page table information such as NV_RAMIN_PAGE_DIR_BASE* - are used by non-subcontext engines and clients such as Host, CE, or the - video engines. - - NV_RAMIN_SC_PAGE_DIR_BASE_TARGET(i) determines if the top level of the page tables - is in video memory or system memory (peer is not allowed), and the CPU cache - coherency for system memory. - Using INVALID, unbinds the selected subcontext. - -#define NV_RAMIN_SC_PAGE_DIR_BASE_TARGET(i) ((168+(i)*4)*32+1):((168+(i)*4)*32+0) /* RWXUF */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_TARGET__SIZE_1 64 /* */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_TARGET_VID_MEM 0x00000000 /* RW--V */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_TARGET_INVALID 0x00000001 /* RW--V */ // Note: INVALID should match PEER -#define NV_RAMIN_SC_PAGE_DIR_BASE_TARGET_SYS_MEM_COHERENT 0x00000002 /* RW--V */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* RW--V */ - - NV_RAMIN_SC_PAGE_DIR_BASE_VOL(i) identifies the volatile behavior - of the top level of the page table (whether local L2 can cache it or not). - -#define NV_RAMIN_SC_PAGE_DIR_BASE_VOL(i) ((168+(i)*4)*32+2):((168+(i)*4)*32+2) /* RWXUF */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_VOL__SIZE_1 64 /* */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_VOL_TRUE 0x00000001 /* RW--V */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_VOL_FALSE 0x00000000 /* RW--V */ - - NV_RAMIN_SC_PAGE_DIR_BASE_FAULT_REPLAY_TEX(i) and - NV_RAMIN_SC_PAGE_DIR_BASE_FAULT_REPLAY_GCC(i) bits specify whether - the MMU will treats faults from TEX and GCC as replayable or - not. Based on that fault packets are written into replayable fault - buffer (or not) and faulting requests are put into replay request - buffer (or not). - The last bind that does not unbind a sub-context determines the REPLAY_TEX and REPLAY_GCC for all sub-contexts. - -#define NV_RAMIN_SC_PAGE_DIR_BASE_FAULT_REPLAY_TEX(i) ((168+(i)*4)*32+4):((168+(i)*4)*32+4) /* RWXUF */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_FAULT_REPLAY_TEX__SIZE_1 64 /* */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_FAULT_REPLAY_TEX_DISABLED 0x00000000 /* RW--V */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_FAULT_REPLAY_TEX_ENABLED 0x00000001 /* RW--V */ - -#define NV_RAMIN_SC_PAGE_DIR_BASE_FAULT_REPLAY_GCC(i) ((168+(i)*4)*32+5):((168+(i)*4)*32+5) /* RWXUF */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_FAULT_REPLAY_GCC__SIZE_1 64 /* */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_FAULT_REPLAY_GCC_DISABLED 0x00000000 /* RW--V */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_FAULT_REPLAY_GCC_ENABLED 0x00000001 /* RW--V */ - - NV_RAMIN_SC_USE_VER2_PT_FORMAT determines which page table format to use. - When NV_RAMIN_SC_USE_VER2_PT_FORMAT is false, the page table uses - the old format(2-level page table). When - NV_RAMIN_SC_USE_VER2_PT_FORMAT is true, the page table uses the - new format (5-level 49-bit VA format). - The last bind that does not unbind a sub-context determines the page table format for all sub-contexts. - Volta only supports the new format. Selecting the old format results in an UNBOUND_INSTANCE fault. - -#define NV_RAMIN_SC_USE_VER2_PT_FORMAT(i) ((168+(i)*4)*32+10):((168+(i)*4)*32+10) /* RWXUF */ -#define NV_RAMIN_SC_USE_VER2_PT_FORMAT__SIZE_1 64 /* */ -#define NV_RAMIN_SC_USE_VER2_PT_FORMAT_FALSE 0x00000000 /* RW--V */ -#define NV_RAMIN_SC_USE_VER2_PT_FORMAT_TRUE 0x00000001 /* RW--V */ - - The last bind that does not unbind a sub-context determines the big page size for all sub-contexts. - Volta only supports 64KB for big pages. - -#define NV_RAMIN_SC_BIG_PAGE_SIZE(i) ((168+(i)*4)*32+11):((168+(i)*4)*32+11) /* RWXUF */ -#define NV_RAMIN_SC_BIG_PAGE_SIZE__SIZE_1 64 /* */ -#define NV_RAMIN_SC_BIG_PAGE_SIZE_64KB 0x00000001 /* RW--V */ - - NV_RAMIN_SC_PAGE_DIR_BASE_LO(i) and NV_RAMIN_SC_PAGE_DIR_BASE_HI(i) - identify the page directory base (start of the page table) - location for subcontext i. - -#define NV_RAMIN_SC_PAGE_DIR_BASE_LO(i) ((168+(i)*4)*32+31):((168+(i)*4)*32+12) /* RWXUF */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_LO__SIZE_1 64 /* */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_HI(i) ((169+(i)*4)*32+31):((169+(i)*4)*32+0) /* RWXUF */ -#define NV_RAMIN_SC_PAGE_DIR_BASE_HI__SIZE_1 64 /* */ - - - - - - NV_RAMIN_SC_ENABLE_ATS(i) tells whether subcontext i is ATS - enabled or not. In case, set to TRUE, GMMU will look for VA->PA - translations into both GMMU and ATS page tables. - ATS can be enabled or disabled per subcontext. - -#define NV_RAMIN_SC_ENABLE_ATS(i) ((170+(i)*4)*32+31):((170+(i)*4)*32+31) /* RWXUF */ - - NV_RAMIN_SC_PASID(i) identifies the PASID (process address space - ID) in CPU for subcontext i. PASID is used to get ATS - translation when ATS page table lookup is needed. During ATS TLB - shootdown, PASID is also used to match against the one coming with - shootdown request. - -#define NV_RAMIN_SC_PASID(i) ((170+(i)*4)*32+(20-1)):((170+(i)*4)*32+0) /* RWXUF */ - - - - -3 - FIFO CONTEXT RAM (RAMFC) -============================== - - - The NV_RAMFC part of a GPU-instance block contains Host's part of a virtual -GPU's state. Host is referred to as "FIFO". "FC" stands for FIFO Context. -When Host switches from serving one GPU context to serving a second, Host saves -state for the first GPU context to the first GPU context's RAMFC area, and loads -state for the second GPU context from the second GPU context's RAMFC area. - - RAMFC is located at NV_RAMIN_RAMFC within the GPU instance block. In -Kepler, this is at the start of the block. RAMFC is 4KB aligned. - - Every Host word entry in RAMFC directly corresponds to a PRI-accessible -register. For a description of the contents of a RAMFC entry, please see the -description of the corresponding register in "manuals/dev_pbdma.ref". The -offsets of the fields within each entry in RAMFC match those of the -corresponding register in the associated PBDMA unit's PRI space. - - - RAMFC Entry PBDMA Register - ------------------------------- ---------------------------------- - NV_RAMFC_SIGNATURE NV_PPBDMA_SIGNATURE(i) - NV_RAMFC_GP_BASE NV_PPBDMA_GP_BASE(i) - NV_RAMFC_GP_BASE_HI NV_PPBDMA_GP_BASE_HI(i) - NV_RAMFC_GP_FETCH NV_PPBDMA_GP_FETCH(i) - NV_RAMFC_GP_GET NV_PPBDMA_GP_GET(i) - NV_RAMFC_GP_PUT NV_PPBDMA_GP_PUT(i) - NV_RAMFC_PB_FETCH NV_PPBDMA_PB_FETCH(i) - NV_RAMFC_PB_FETCH_HI NV_PPBDMA_PB_FETCH_HI(i) - NV_RAMFC_PB_GET NV_PPBDMA_GET(i) - NV_RAMFC_PB_GET_HI NV_PPBDMA_GET_HI(i) - NV_RAMFC_PB_PUT NV_PPBDMA_PUT(i) - NV_RAMFC_PB_PUT_HI NV_PPBDMA_PUT_HI(i) - NV_RAMFC_PB_TOP_LEVEL_GET NV_PPBDMA_TOP_LEVEL_GET(i) - NV_RAMFC_PB_TOP_LEVEL_GET_HI NV_PPBDMA_TOP_LEVEL_GET_HI(i) - NV_RAMFC_GP_CRC NV_PPBDMA_GP_CRC(i) - NV_RAMFC_PB_HEADER NV_PPBDMA_PB_HEADER(i) - NV_RAMFC_PB_COUNT NV_PPBDMA_PB_COUNT(i) - NV_RAMFC_PB_CRC NV_PPBDMA_PB_CRC(i) - NV_RAMFC_SUBDEVICE NV_PPBDMA_SUBDEVICE(i) - NV_RAMFC_METHOD0 NV_PPBDMA_METHOD0(i) - NV_RAMFC_METHOD1 NV_PPBDMA_METHOD1(i) - NV_RAMFC_METHOD2 NV_PPBDMA_METHOD2(i) - NV_RAMFC_METHOD3 NV_PPBDMA_METHOD3(i) - NV_RAMFC_DATA0 NV_PPBDMA_DATA0(i) - NV_RAMFC_DATA1 NV_PPBDMA_DATA1(i) - NV_RAMFC_DATA2 NV_PPBDMA_DATA2(i) - NV_RAMFC_DATA3 NV_PPBDMA_DATA3(i) - NV_RAMFC_TARGET NV_PPBDMA_TARGET(i) - NV_RAMFC_METHOD_CRC NV_PPBDMA_METHOD_CRC(i) - NV_RAMFC_REF NV_PPBDMA_REF(i) - NV_RAMFC_RUNTIME NV_PPBDMA_RUNTIME(i) - NV_RAMFC_SEM_ADDR_LO NV_PPBDMA_SEM_ADDR_LO(i) - NV_RAMFC_SEM_ADDR_HI NV_PPBDMA_SEM_ADDR_HI(i) - NV_RAMFC_SEM_PAYLOAD_LO NV_PPBDMA_SEM_PAYLOAD_LO(i) - NV_RAMFC_SEM_PAYLOAD_HI NV_PPBDMA_SEM_PAYLOAD_HI(i) - NV_RAMFC_SEM_EXECUTE NV_PPBDMA_SEM_EXECUTE(i) - NV_RAMFC_ACQUIRE_DEADLINE NV_PPBDMA_ACQUIRE_DEADLINE(i) - NV_RAMFC_ACQUIRE NV_PPBDMA_ACQUIRE(i) - NV_RAMFC_MEM_OP_A NV_PPBDMA_MEM_OP_A(i) - NV_RAMFC_MEM_OP_B NV_PPBDMA_MEM_OP_B(i) - NV_RAMFC_MEM_OP_C NV_PPBDMA_MEM_OP_C(i) - NV_RAMFC_USERD NV_PPBDMA_USERD(i) - NV_RAMFC_USERD_HI NV_PPBDMA_USERD_HI(i) - NV_RAMFC_HCE_CTRL NV_PPBDMA_HCE_CTRL(i) - NV_RAMFC_CONFIG NV_PPBDMA_CONFIG(i) - NV_RAMFC_SET_CHANNEL_INFO NV_PPBDMA_SET_CHANNEL_INFO(i) - ------------------------------- ---------------------------------- - -#define NV_RAMFC /* ----G */ -#define NV_RAMFC_GP_PUT (0*32+31):(0*32+0) /* RWXUF */ -#define NV_RAMFC_MEM_OP_A (1*32+31):(1*32+0) /* RWXUF */ -#define NV_RAMFC_USERD (2*32+31):(2*32+0) /* RWXUF */ -#define NV_RAMFC_USERD_HI (3*32+31):(3*32+0) /* RWXUF */ -#define NV_RAMFC_SIGNATURE (4*32+31):(4*32+0) /* RWXUF */ -#define NV_RAMFC_GP_GET (5*32+31):(5*32+0) /* RWXUF */ -#define NV_RAMFC_PB_GET (6*32+31):(6*32+0) /* RWXUF */ -#define NV_RAMFC_PB_GET_HI (7*32+31):(7*32+0) /* RWXUF */ -#define NV_RAMFC_PB_TOP_LEVEL_GET (8*32+31):(8*32+0) /* RWXUF */ -#define NV_RAMFC_PB_TOP_LEVEL_GET_HI (9*32+31):(9*32+0) /* RWXUF */ -#define NV_RAMFC_REF (10*32+31):(10*32+0) /* RWXUF */ -#define NV_RAMFC_RUNTIME (11*32+31):(11*32+0) /* RWXUF */ -#define NV_RAMFC_ACQUIRE (12*32+31):(12*32+0) /* RWXUF */ -#define NV_RAMFC_ACQUIRE_DEADLINE (13*32+31):(13*32+0) /* RWXUF */ -#define NV_RAMFC_SEM_ADDR_HI (14*32+31):(14*32+0) /* RWXUF */ -#define NV_RAMFC_SEM_ADDR_LO (15*32+31):(15*32+0) /* RWXUF */ -#define NV_RAMFC_SEM_PAYLOAD_LO (16*32+31):(16*32+0) /* RWXUF */ -#define NV_RAMFC_SEM_EXECUTE (17*32+31):(17*32+0) /* RWXUF */ -#define NV_RAMFC_GP_BASE (18*32+31):(18*32+0) /* RWXUF */ -#define NV_RAMFC_GP_BASE_HI (19*32+31):(19*32+0) /* RWXUF */ -#define NV_RAMFC_GP_FETCH (20*32+31):(20*32+0) /* RWXUF */ -#define NV_RAMFC_PB_FETCH (21*32+31):(21*32+0) /* RWXUF */ -#define NV_RAMFC_PB_FETCH_HI (22*32+31):(22*32+0) /* RWXUF */ -#define NV_RAMFC_PB_PUT (23*32+31):(23*32+0) /* RWXUF */ -#define NV_RAMFC_PB_PUT_HI (24*32+31):(24*32+0) /* RWXUF */ -#define NV_RAMFC_MEM_OP_B (25*32+31):(25*32+0) /* RWXUF */ -#define NV_RAMFC_RESERVED26 (26*32+31):(26*32+0) /* RWXUF */ -#define NV_RAMFC_RESERVED27 (27*32+31):(27*32+0) /* RWXUF */ -#define NV_RAMFC_RESERVED28 (28*32+31):(28*32+0) /* RWXUF */ -#define NV_RAMFC_GP_CRC (29*32+31):(29*32+0) /* RWXUF */ -#define NV_RAMFC_PB_HEADER (33*32+31):(33*32+0) /* RWXUF */ -#define NV_RAMFC_PB_COUNT (34*32+31):(34*32+0) /* RWXUF */ -#define NV_RAMFC_SUBDEVICE (37*32+31):(37*32+0) /* RWXUF */ -#define NV_RAMFC_PB_CRC (38*32+31):(38*32+0) /* RWXUF */ -#define NV_RAMFC_SEM_PAYLOAD_HI (39*32+31):(39*32+0) /* RWXUF */ -#define NV_RAMFC_MEM_OP_C (40*32+31):(40*32+0) /* RWXUF */ -#define NV_RAMFC_RESERVED20 (41*32+31):(41*32+0) /* RWXUF */ -#define NV_RAMFC_RESERVED21 (42*32+31):(42*32+0) /* RWXUF */ -#define NV_RAMFC_TARGET (43*32+31):(43*32+0) /* RWXUF */ -#define NV_RAMFC_METHOD_CRC (44*32+31):(44*32+0) /* RWXUF */ -#define NV_RAMFC_METHOD0 (48*32+31):(48*32+0) /* RWXUF */ -#define NV_RAMFC_DATA0 (49*32+31):(49*32+0) /* RWXUF */ -#define NV_RAMFC_METHOD1 (50*32+31):(50*32+0) /* RWXUF */ -#define NV_RAMFC_DATA1 (51*32+31):(51*32+0) /* RWXUF */ -#define NV_RAMFC_METHOD2 (52*32+31):(52*32+0) /* RWXUF */ -#define NV_RAMFC_DATA2 (53*32+31):(53*32+0) /* RWXUF */ -#define NV_RAMFC_METHOD3 (54*32+31):(54*32+0) /* RWXUF */ -#define NV_RAMFC_DATA3 (55*32+31):(55*32+0) /* RWXUF */ -#define NV_RAMFC_HCE_CTRL (57*32+31):(57*32+0) /* RWXUF */ -#define NV_RAMFC_CONFIG (61*32+31):(61*32+0) /* RWXUF */ -#define NV_RAMFC_SET_CHANNEL_INFO (63*32+31):(63*32+0) /* RWXUF */ - -#define NV_RAMFC_BASE_SHIFT 12 /* */ - - Size of the full range of RAMFC in bytes. -#define NV_RAMFC_SIZE_VAL 0x00000200 /* ----C */ - -4 - USER-DRIVER ACCESSIBLE RAM (RAMUSERD) -========================================= - - A user-level driver is allowed to access only a small portion of a GPU -context's state. The portion of a GPU context's state that a user-level driver -can access is stored in a block of memory called NV_RAMUSERD. NV_RAMUSERD is a -user-level driver's window into NV_RAMFC. The NV_RAMUSERD state for each GPU -context is stored in an aligned NV_RAMUSERD_CHAN_SIZE-byte block of memory. - - To submit more methods, a user driver writes a PB segment to -memory, writes a GP entry that points to the PB segment, updates GP_PUT in -RAMUSERD, and writes the channel's handle to the -NV_USERMODE_NOTIFY_CHANNEL_PENDING register (see dev_usermode.ref). - - The RAMUSERD data structure is updated at regular intervals as controlled -by the NV_PFIFO_USERD_WRITEBACK setting (see dev_fifo.ref). For a particular -channel, RAMUSERD writeback can be disabled and it is reccomended that SW track -pushbuffer and channel progress via Host WFI_DIS semaphores rather than reading -the RAMUSERD data structure. - - When write-back is enabled a user driver can check the GPU progress in -executing a channel's PB segments. The driver can use: - * GP_GET to monitor the index of the next GP entry the GPU will process - * PB_GET to monitor the address of the next PB entry the GPU will process - * TOP_LEVEL_GET (see NV_PPBDMA_TOP_LEVEL_GET) to monitor the address of the - next "top-level" (non-SUBROUTINE) PB entry the GPU will process - * REF to monitor the current "reference count" value see NV_PPBDMA_REF. - - Each entry in RAMUSERD corresponds to a PRI-accessible PBDMA register in Host. -For a description of the behavior and contents of a RAMUSERD entry, please see -the description of the corresponding register in "manuals/dev_pbdma.ref". - - RAMUSERD Entry PBDMA Register Access - ------------------------------- ----------------------------- ---------- - NV_RAMUSERD_GP_PUT NV_PPBDMA_GP_PUT(i) Read/Write - NV_RAMUSERD_GP_GET NV_PPBDMA_GP_GET(i) Read-only - NV_RAMUSERD_GET NV_PPBDMA_GET(i) Read-only - NV_RAMUSERD_GET_HI NV_PPBDMA_GET_HI(i) Read-only - NV_RAMUSERD_PUT NV_PPBDMA_PUT(i) Read-only - NV_RAMUSERD_PUT_HI NV_PPBDMA_PUT_HI(i) Read-only - NV_RAMUSERD_TOP_LEVEL_GET NV_PPBDMA_TOP_LEVEL_GET(i) Read-only - NV_RAMUSERD_TOP_LEVEL_GET_HI NV_PPBDMA_TOP_LEVEL_GET_HI(i) Read-only - NV_RAMUSERD_REF NV_PPBDMA_REF(i) Read-only - ------------------------------- ----------------------------- ---------- - - A user driver may write to NV_RAMUSERD_GP_PUT to kick off more work in a -channel. Although writes to the other, read-only, entries can alter memory, -writes to those entries will not affect the operation of the GPU, and can be -overwritten by the GPU. - - When Host loads its part of a GPU context's state from RAMFC memory, it -may not immediately read RAMUSERD_GP_PUT. Host can use the GP_PUT values from -RAMFC directly from RAMFC while waiting for the RAMUSERD_GP_PUT to synchronize. -Because reads of RAMUSERD_GP_PUT can be delayed, the value in NV_PPBDMA_GP_PUT -can be older than the value in NV_RAMUSERD_GP_PUT. - - When Host saves a GPU context's state to NV_RAMFC, it also writes to -NV_RAMUSERD the values of the entries other than GP_PUT. -Because Host does not continuously write the read-only RAMFC entries, the -read-only values in USERD memory can be older than the values in the Host PBDMA -unit. - -#define NV_RAMUSERD /* ----G */ -#define NV_RAMUSERD_PUT (16*32+31):(16*32+0) /* RWXUF */ -#define NV_RAMUSERD_GET (17*32+31):(17*32+0) /* RWXUF */ -#define NV_RAMUSERD_REF (18*32+31):(18*32+0) /* RWXUF */ -#define NV_RAMUSERD_PUT_HI (19*32+31):(19*32+0) /* RWXUF */ -#define NV_RAMUSERD_TOP_LEVEL_GET (22*32+31):(22*32+0) /* RWXUF */ -#define NV_RAMUSERD_TOP_LEVEL_GET_HI (23*32+31):(23*32+0) /* RWXUF */ -#define NV_RAMUSERD_GET_HI (24*32+31):(24*32+0) /* RWXUF */ -#define NV_RAMUSERD_GP_GET (34*32+31):(34*32+0) /* RWXUF */ -#define NV_RAMUSERD_GP_PUT (35*32+31):(35*32+0) /* RWXUF */ -#define NV_RAMUSERD_BASE_SHIFT 9 /* */ -#define NV_RAMUSERD_CHAN_SIZE 512 /* */ - - - - -5 - RUN-LIST RAM (RAMRL) -======================== - - Software specifies the GPU contexts that hardware should "run" by writing a -list of entries (known as a "runlist") to a 4k-aligned area of memory (beginning -at NV_PFIFO_RUNLIST_BASE), and by notifying Host that a new list is available -(by writing to NV_PFIFO_RUNLIST). - Submission of a new runlist causes Host to expire the timeslice of all work -scheduled by the previous runlist, allowing it to schedule the channels present -in the new runlist once they are fetched. SW can check the status of the runlist -by polling NV_PFIFO_ENG_RUNLIST_PENDING. (see dev_fifo.ref NV_PFIFO_RUNLIST for -a full description of the runlist submit mechanism). - Runlists can be stored in system memory or video memory (as specified by -NV_PFIFO_RUNLIST_BASE_TARGET). If a runlist is stored in video memory, software -will have to execute flush or read the last entry written before submitting the -runlist to Host to guarantee coherency . - The size of a runlist entry data structure is 16 bytes. Each entry -specifies either a channel entry or a TSG header; the type is determined by the -NV_RAMRL_ENTRY_TYPE. - - -Runlist Channel Entry Type: - - A runlist entry of type NV_RAMRL_ENTRY_TYPE_CHAN specifies a channel to -run. All such entries must occur within the span of some TSG as specified by -the NV_RAMRL_ENTRY_TYPE_TSG described below. If a channel entry is encountered -outside a TSG, Host will raise the NV_PFIFO_INTR_SCHED_ERROR_CODE_BAD_TSG -interrupt. - - The fields available in a channel runlist entry are as follows (Fig 5.1): - - ENTRY_TYPE (T) : type of this entry: ENTRY_TYPE_CHAN - CHID (ID) : identifier of the channel to run (overlays ENTRY_ID) - RUNQUEUE_SELECTOR (Q) : selects which PBDMA should run this channel if - more than one PBDMA is supported by the runlist - - INST_PTR_LO : lower 20 bits of the 4k-aligned instance block pointer - INST_PTR_HI : upper 32 bit of instance block pointer - INST_TARGET (TGI) : aperture of the instance block - - USERD_PTR_LO : upper 24 bits of the low 32 bits, of the 512-byte-aligned USERD pointer - USERD_PTR_HI : upper 32 bits of USERD pointer - USERD_TARGET (TGU) : aperture of the USERD data structure - - CHID is a channel identifier that uniquely specifies the channel described -by this runlist entry to the scheduling hardware and is reported in various -status registers. - RUNQUEUE_SELECTOR determines to which runqueue the channel belongs, and -thereby which PBDMA will run the channel. Increasing values select increasingly -numbered PBDMA IDs serving the runlist. If the selector value exceeds the -number of PBDMAs on the runlist, the hardware will silently reassign the channel -to run on the first PBDMA as though RUNQUEUE_SELECTOR had been set to 0. (In -current hardware, this is used by SCG on the graphics runlist only to determine -which FE pipe should service a given channel. A value of 0 targets the first FE -pipe, which can process all FE driven engines: Graphics, Compute, Inline2Memory, -and TwoD. A value of 1 targets the second FE pipe, which can only process -Compute work. Note that GRCE work is allowed on either runqueue.) - The INST fields specify the physical address of the channel's instance -block, the in-memory data structure that stores the context state. -The target aperture of the instance block is given by INST_TARGET, and the byte -offset within that aperture is calculated as - - (INST_PTR_HI << 32) | (INST_PTR_LO << NV_RAMRL_ENTRY_CHAN_INST_PTR_ALIGN_SHIFT) - -This address should match the one specified in the channel RAM's -NV_PCCSR_CHANNEL_INST register; see NV_RAMIN and NV_RAMFC for the format of the -instance block. The hardware ignores the RAMRL INST fields, but in future -chips the instance pointer may be removed from the channel RAM and the RAMRL -INST fields used instead, resulting in smaller hardware. - The USERD fields specify the physical address of the USERD memory region -used by software to submit additional work to the channel. The target aperture -of the USERD region is given by USERD_TARGET, and the byte offset within that -aperture is calculated as - - (USERD_PTR_HI << 32) | (USERD_PTR_LO << NV_RAMRL_ENTRY_CHAN_USERD_PTR_ALIGN_SHIFT) - - -SW uses the NV_RAMUSERD_CHAN_SIZE define to allocate and align a channel's -RAMUSERD data structure. See the documentation for NV_RAMUSERD for a -description of the use of USERD and its format. This address and it's -alignment must match the one specified in the RAMFC's NV_RAMFC_USERD and -NV_RAMFC_USERD_HI fields which are backed by NV_PPBDMA_USERD in dev_pbdma.ref. -The hardware ignores the RAMRL USERD fields, but in future chips the USERD -pointer may be read from these fields in the runlist entry instead of the RAMFC -to avoid the extra level of indirection in fetching the USERD data that -currently results in a dependent read. - - -Runlist TSG Entry Type: - - The other type of runlist entry is Timeslice Group (TSG) header entry -(Fig 5.2). This type of entry is specified by NV_RAMRL_ENTRY_TYPE_TSG. A TSG -entry describes a collection of channels all of which share the same context and -are scheduled as a single unit by Host. All runlists support this type of entry. - - The fields available in a TSG header runlist entry are as follows (Fig 5.2): - - ENTRY_TYPE (T) : type of this entry: ENTRY_TYPE_TSG - TSGID : identifier of the Timeslice group (overlays ENTRY_ID) - TSG_LENGTH : number of channels that are part of this timeslice group - TIMESLICE_SCALE : scale factor for the TSG's timeslice - TIMESLICE_TIMEOUT : timeout amount for the TSG's timeslice - - A timeslice group entry consists of an integer identifier along with a -length which specifies the number of channels in the TSG. After a TSG header -runlist entry, the next TSG_LENGTH runlist entries are considered to be part of -the timeslice group. Note that the minimum length of a TSG is at least one entry. - All channels in a TSG share the same runlist timeslice which specifies how -long a single context runs on an engine or PBDMA before being swapped for a -different context. The timeslice period is set in the TSG header by specifying -TSG_TIMESLICE_TIMEOUT and TSG_TIMESLICE_SCALE. The TSG timeslice period is -calculated as follows: - - timeslice = (TSG_TIMESLICE_TIMEOUT << TSG_TIMESLICE_SCALE) * 1024 nanoseconds - - The timeslice period should normally not be set to zero. A timeslice of -zero will be treated as a timeslice period of one . The runlist -timeslice period begins after the context has been loaded on a PBDMA but is -paused while the channel has an outstanding context load to an engine. Time -spent switching a context into an engine is not part of the runlist timeslice. - - If Host reaches the end of the runlist or receives another entry of type -NV_RAMRL_ENTRY_TYPE_TSG before processing TSG_LENGTH additional runlist entries, -or if it encounters a TSG of length 0, a SCHED_ERROR interrupt will be generated -with ERROR_CODE_BAD_TSG. - - -Host Scheduling Memory Layout: - -Example of graphics runlist entry to GPU context mapping via channel id: - - - .------Ints_ptr -------. - | | - Graphics Runlist | Channel-Map RAM | GPU Instance Block - .------------ . | .----------------. | .-------------------. - | TSG Hdr L=m |--.----' |Ch0 Inst Blk Ptr|--'------->| Host State | - | RL Entry T1 | | |Ch1 Inst Blk Ptr| .------| Memory State | - | RL Entry T2 | | | ... | | | Engine0 State Ptr | - | ... | |-chid->|ChI Inst Blk Ptr| | | Engine1 State Ptr | - | RL Entry Tm | | | ... | | | ... | - | TSG Hdr L=n | | |ChN Inst Blk Ptr| | .-| EngineN State Ptr | - | RL Entry T1 | | `----------------' | | `-------------------' - | RL Entry T2 |userd_ptr | | - | ... | | .--------------. | | .--------------. - | RL Entry Tn | | | USERD | | | | Engine Ctx | - | | '------->| |<----' '-->| State N | - `-------------' | | | | - `--------------' `--------------' - -Runlist Diagram Description: - Here we have (M+N) number of channel type (ENTRY_TYPE_CHID) runlist entries -grouped together within two TSGs. The first entry in the runlist is a TSG header -entry (ENTRY_TYPE_TSG) that describes the first TSG. The TSG header specifies m -as the length of the TSG. The header would also contain the timeslice -information for the TSG (SCALE/TIMEOUT), as well as the TSG id specified in the -TSGID field. - Because the length here is M, the Runlist *must* contain M additional -runlist entries of type ENTRY_TYPE_CHAN that will be part of this TSG. -Similarly, the next (N+1) number of entries, a TSG header entry followed by N -number of regular channel entry, correspond to the second TSG. - -#define NV_RAMRL_ENTRY /* ----G */ -#define NV_RAMRL_ENTRY_RANGE 0xF:0x00000000 /* RW--M */ -#define NV_RAMRL_ENTRY_SIZE 16 /* */ -// Runlist base must be 4k-aligned. -#define NV_RAMRL_ENTRY_BASE_SHIFT 12 /* */ - - -#define NV_RAMRL_ENTRY_TYPE (0+0*32):(0+0*32) /* RWXUF */ -#define NV_RAMRL_ENTRY_TYPE_CHAN 0x00000000 /* RW--V */ -#define NV_RAMRL_ENTRY_TYPE_TSG 0x00000001 /* RW--V */ - -#define NV_RAMRL_ENTRY_ID (11+2*32):(0+2*32) /* RWXUF */ -#define NV_RAMRL_ENTRY_ID_HW 11:0 /* RWXUF */ -#define NV_RAMRL_ENTRY_ID_MAX (4096-1) /* RW--V */ - - - - - -#define NV_RAMRL_ENTRY_CHAN_RUNQUEUE_SELECTOR (1+0*32):(1+0*32) /* RWXUF */ - -#define NV_RAMRL_ENTRY_CHAN_INST_TARGET (5+0*32):(4+0*32) /* RWXUF */ -#define NV_RAMRL_ENTRY_CHAN_INST_TARGET_VID_MEM 0x00000000 /* RW--V */ -#define NV_RAMRL_ENTRY_CHAN_INST_TARGET_SYS_MEM_COHERENT 0x00000002 /* RW--V */ -#define NV_RAMRL_ENTRY_CHAN_INST_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* RW--V */ - -#define NV_RAMRL_ENTRY_CHAN_USERD_TARGET (7+0*32):(6+0*32) /* RWXUF */ -#define NV_RAMRL_ENTRY_CHAN_USERD_TARGET_VID_MEM 0x00000000 /* RW--V */ -#define NV_RAMRL_ENTRY_CHAN_USERD_TARGET_VID_MEM_NVLINK_COHERENT 0x00000001 /* RW--V */ -#define NV_RAMRL_ENTRY_CHAN_USERD_TARGET_SYS_MEM_COHERENT 0x00000002 /* RW--V */ -#define NV_RAMRL_ENTRY_CHAN_USERD_TARGET_SYS_MEM_NONCOHERENT 0x00000003 /* RW--V */ - -#define NV_RAMRL_ENTRY_CHAN_USERD_PTR_LO (31+0*32):(8+0*32) /* RWXUF */ -#define NV_RAMRL_ENTRY_CHAN_USERD_PTR_HI (31+1*32):(0+1*32) /* RWXUF */ - -#define NV_RAMRL_ENTRY_CHAN_CHID (11+2*32):(0+2*32) /* RWXUF */ - -#define NV_RAMRL_ENTRY_CHAN_INST_PTR_LO (31+2*32):(12+2*32) /* RWXUF */ -#define NV_RAMRL_ENTRY_CHAN_INST_PTR_HI (31+3*32):(0+3*32) /* RWXUF */ - - - -// Macros for shifting out low bits of INST_PTR and USERD_PTR. -#define NV_RAMRL_ENTRY_CHAN_INST_PTR_ALIGN_SHIFT 12 /* ----C */ -#define NV_RAMRL_ENTRY_CHAN_USERD_PTR_ALIGN_SHIFT 8 /* ----C */ - - - - - - - -#define NV_RAMRL_ENTRY_TSG_TIMESLICE_SCALE (19+0*32):(16+0*32) /* RWXUF */ -#define NV_RAMRL_ENTRY_TSG_TIMESLICE_SCALE_3 0x00000003 /* RWI-V */ -#define NV_RAMRL_ENTRY_TSG_TIMESLICE_TIMEOUT (31+0*32):(24+0*32) /* RWXUF */ -#define NV_RAMRL_ENTRY_TSG_TIMESLICE_TIMEOUT_128 0x00000080 /* RWI-V */ - - -#define NV_RAMRL_ENTRY_TSG_TIMESLICE_TIMEOUT_1US 0x00000000 /* */ - -#define NV_RAMRL_ENTRY_TSG_LENGTH (7+1*32):(0+1*32) /* RWXUF */ -#define NV_RAMRL_ENTRY_TSG_LENGTH_INIT 0x00000000 /* RW--V */ -#define NV_RAMRL_ENTRY_TSG_LENGTH_MIN 0x00000001 /* RW--V */ -#define NV_RAMRL_ENTRY_TSG_LENGTH_MAX 0x00000080 /* RW--V */ - -#define NV_RAMRL_ENTRY_TSG_TSGID (11+2*32):(0+2*32) /* RWXUF */ - - - -6 - Host Pushbuffer Format (FIFO_DMA) -======================================= - - "FIFO" refers to Host. "FIFO_DMA" means data that Host reads from memory: -the pushbuffer. Host autonomously reads pushbuffer data from memory and -generates method address/data pairs from the data. - - Pushbuffer terminology: - - - A channel is the logical sequence of instructions associated with a GPU - context. - - - The pushbuffer is a stream of data in memory containing the - specifications of the operations that a channel is to perform for a - particular client. Pushbuffer data consists of pushbuffer entries. - - - A pushbuffer entry (PB entry) is a 32-bit (doubleword) sized unit of - pushbuffer data. This is the smallest granularity at which Host consumes - pushbuffer data. A PB entry is either a PB instruction (which is either - a PB control entry or a PB method header), or a method data entry. - - - A pushbuffer segment (PB segment) is a contiguous block of memory - containing pushbuffer entries. The location and size of a pushbuffer - segment is defined by its respective GP entry in the GPFIFO. - - - A pushbuffer control entry (PB control entry) is a single PB entry of - type SET_SUBDEVICE_MASK, STORE_SUBDEVICE_MASK, USE_SUBDEVICE_MASK, - END_PB_SEGMENT, or a universal NOP (NV_FIFO_DMA_NOP). - - - A pushbuffer compressed method sequence is a sequence of pushbuffer - entries starting with a method header and a variable-length sequence of - method data entries (the length being defined by the method header). A - single PB compressed method sequence expands into one or more methods. - This may also be known as a "pushbuffer method" (PB method), but that - terminology is ambiguous and not preferred. - - - A pushbuffer method header (PB method header) is the first PB entry found - in a PB compressed method sequence. A PB method header is a PB - instruction performed on method data entries. - - - A pushbuffer instruction (PB instruction) is a PB entry that is not a PB - method data entry. A PB instruction is either a PB control entry or a PB - method header. - - - A method is an address/data pair representing an operation to perform. - - - A method data entry is the 32-bit operand for its corresponding method. - - - -#define NV_FIFO_PB_ENTRY_SIZE 4 /* */ - - - Some engines such as Graphics internally support a double-wide method FIFO; -these are known as "data-hi" methods. It is Host that performs the packing of -two methods into one double-wide entry. Host will only generate data-hi methods -if the following conditions are satisfied: - - 1. The two methods come from the same PB method (in other words they share - the same method header). - - 2. The method header specifies a non-incrementing method, an incrementing - method, or an increment-once method. - - 3. The paired methods either have the same method address, or the first - method has an even NV_FIFO_DMA_METHOD_ADDRESS field and the second - (data-hi) method is the increment of the first. (That is, the - left-shifted method address as listed in the class files must be - divisible by 8 for this condition to hold.) - - 4. The second method is available at the time of pushing the first one into - the engine's method FIFO. In other words, Host will not wait to pack - methods. Note that if the engine's method fifo is full, the - back-pressure will in itself create a "wait time". - -The first three conditions are under SW's control. Only the graphics engine -supports data-hi methods. - - -Types of PB Entries - - PB entries can be classified into three types: PB method headers, PB -control entries, and PB method data. Different types of PB entries have -different formats. Because PB compressed method sequences are of variable -length, it is impossible to determine the type of a PB entry without tracking -the pushbuffer from the beginning or from the location of a PB entry that is -known to not be a PB method data entry. - - A PB method data entry is always found in a method data sequence -immediately following a PB method header in the logical stream of PB entries. -The PB method header contains a NV_FIFO_DMA_METHOD_COUNT field, the value of -which is equal to the length of the method data sequence. Note a PB method -header does not necessarily come with PB method data entries (see details below -about immediate-data method headers and method headers for which COUNT is zero). -Also note the PB method data entries may be located in a PB segment separate -from their corresponding method header. The format of any given PB method data -entry is defined in the "NV_UDMA" section of dev_pbdma.ref. - - A PB entry that is either a PB method header or PB control entry is known -as a PB instruction. The type of a PB instruction is specified by the -NV_FIFO_DMA_SEC_OP field and the NV_FIFO_DMA_TERT_OP field. - - secondary tertiary - opcode opcode entry type - --------- -------- -------------------------------- - 000 01 SET_SUBDEVICE_MASK - 000 10 STORE_SUBDEVICE_MASK - 000 11 USE_SUBDEVICE_MASK - 001 xx incrementing method header - 011 xx non-incrementing method header - 100 xx immediate-data method header - 101 xx increment-once method header - 111 xx END_PB_SEGMENT - --------- -------- -------------------------------- - - Types of methods: - - - A Host method is a method whose address is defined in the NV_UDMA device - range. - - - A Host-only method is any Host method excluding SetObject (also known as - NV_UDMA_OBJECT). - - - An engine method is a method whose address is not defined within the - NV_UDMA device range. There are multiple engines designated by a - subchannel ID. Software methods are included in this category. - - - A software method (SW method) is a method which causes an interrupt for - the express purpose of being handled by software. For details see the - section on software methods below. - - For more information about types of methods see "HOST METHODS" and -"RESERVED METHOD ADDRESSES" in dev_pbdma.ref. - - The method address in a PB method header (stored in the -NV_FIFO_DMA_METHOD_ADDRESS field) is a dword-address, not a byte-address. In -other words the least significant two bits of the address are not stored because -the byte-address is dword-aligned (thus the least significant two bits are -always zero). - - The subchannel in a PB method header (stored in the -NV_FIFO_DMA_*_SUBCHANNEL field) determines the engine to which a method will be -sent if the method is SetObject or an engine method (otherwise, the SUBCHANNEL -field is ignored). SetObject enables SW to request HW to check the expectation -that a given subchannel serves the specified class ID; see the description of -"NV_UDMA_OBJECT" in dev_pbdma.ref. - - The mapping between subchannels and engines is fixed. A subchannel is -bound to a given class according to the runlist. Each engine method is applied -to an "object," which itself is an instance of an NV class as defined by the -master MFS class files. Each object belongs to an engine. For SetObject and -engine methods, the engine is determined entirely by the SUBCHANNEL field of -the method's header via a fixed mapping that depends on the runlist on which the -method arrives. - - Methods on subchannels 0-4 are handled by the primary engine served by the -runlist, except that subchannel 4 targets GRCOPY0 and GRCOPY1 on the graphics -runlist. For Graphics/Compute, SetObject associates subchannels 0, 1, 2, and 3 -with class identifiers for 3D, compute, I2M, and 2D respectively. On other -runlists, the subchannel is ignored, and Host does not send the subchannel ID to -the engine. It is recommended that SW only use subchannel 4 on the dedicated -copy engines for consistency with GRCOPY usage. - - Subchannels 5-7 are for software methods. Any methods on these subchannels -(including SetObject methods) are kicked back to software for handling via the -SW method dispatch mechanism using the NV_PPBDMA_INTR_*_DEVICE interrupt. SW -may choose to send a SetObject method to each engine subchannel before sending -any methods on that particular subchannel in order to support multiple software -classes. - - If a method stream subchannel-switches from targeting graphics/compute to a -copy engine or vice-versa, that is, to or from subchannel 4 on GR, Host will: - - 1. Wait until the first engine has completed all its methods, - - 2. Wait until that engine indicates that it is idle (WFI), and - - 3. Send a sysmem barrier flush and wait until it completes. - -Only then will Host send methods to the newly targeted engine. - - Note that this WFI will not occur for sending Host-only methods on the new -subchannel, since Host-only methods ignore the subchannel field. Additionally, -when switching from CE to graphics/compute, Host forces FE to perform a cache -invalidate. Other subchannel switch semantics may be provided by the engines -themselves, such as switching between subchannels 0-3 within FE. - - -#define NV_FIFO_DMA /* ----G */ -#define NV_FIFO_DMA_METHOD_ADDRESS_OLD 12:2 /* RWXUF */ -#define NV_FIFO_DMA_METHOD_ADDRESS 11:0 /* RWXUF */ - -#define NV_FIFO_DMA_SUBDEVICE_MASK 15:4 /* RWXUF */ - -#define NV_FIFO_DMA_METHOD_SUBCHANNEL 15:13 /* RWXUF */ - -#define NV_FIFO_DMA_TERT_OP 17:16 /* RWXUF */ -#define NV_FIFO_DMA_TERT_OP_GRP0_SET_SUB_DEV_MASK 0x00000001 /* RW--V */ -#define NV_FIFO_DMA_TERT_OP_GRP0_STORE_SUB_DEV_MASK 0x00000002 /* RW--V */ -#define NV_FIFO_DMA_TERT_OP_GRP0_USE_SUB_DEV_MASK 0x00000003 /* RW--V */ - -#define NV_FIFO_DMA_METHOD_COUNT_OLD 28:18 /* RWXUF */ -#define NV_FIFO_DMA_METHOD_COUNT 28:16 /* RWXUF */ -#define NV_FIFO_DMA_IMMD_DATA 28:16 /* RWXUF */ - -#define NV_FIFO_DMA_SEC_OP 31:29 /* RWXUF */ -#define NV_FIFO_DMA_SEC_OP_GRP0_USE_TERT 0x00000000 /* RW--V */ -#define NV_FIFO_DMA_SEC_OP_INC_METHOD 0x00000001 /* RW--V */ -#define NV_FIFO_DMA_SEC_OP_NON_INC_METHOD 0x00000003 /* RW--V */ -#define NV_FIFO_DMA_SEC_OP_IMMD_DATA_METHOD 0x00000004 /* RW--V */ -#define NV_FIFO_DMA_SEC_OP_ONE_INC 0x00000005 /* RW--V */ -#define NV_FIFO_DMA_SEC_OP_RESERVED6 0x00000006 /* RW--V */ -#define NV_FIFO_DMA_SEC_OP_END_PB_SEGMENT 0x00000007 /* RW--V */ - - -Incrementing PB Method Header Format - - An incrementing PB method header specifies that Host generate a sequence of -methods. The length of the sequence is defined by the method header. The -method data for each method in this sequence is found in a sequence of PB -entries immediately following the method header. - - The dword-address of the first method is specified by the method header, -and the dword-address of each subsequent method is equal to the dword-address of -the previous method plus one. Or in other words, the byte-address of each -subsequent method is equal to the byte-address of the previous method plus four. - -Example sequence of methods generated from an incrementing method header: - - addr data0 - addr+1 data1 - addr+2 data2 - addr+3 data3 - ... ... - - The NV_FIFO_DMA_INCR_COUNT field contains the number of methods in the -generated sequence. This is the same as the number of method data entries that -follow the method header. If the COUNT field is zero, the other fields are -ignored, and the PB method effectively becomes a no-op with no method data -entries following it. - - The NV_FIFO_DMA_INCR_SUBCHANNEL field contains the subchannel to use for -the methods generated from the method header. See the documentation above for -NV_FIFO_DMA_*_SUBCHANNEL. - - The NV_FIFO_DMA_INCR_ADDRESS field contains the method address for the -first method in the generated sequence. The dword-address of the method is -incremented by one each time a method is generated. A method address specifies -an operation to be performed. Note that because the ADDRESS is a dword-address -and not a byte-address, the least two significant bits of the method's -byte-address are not stored. - - The NV_FIFO_DMA_INCR_DATA fields contain the method data for the methods in -the generated sequence. The number of method data entries is defined by the -COUNT field. A method data entry contains an operand for its respective method. - - Bit 12 is reserved for the future expansion of either the subchannel or the -address fields. - - -#define NV_FIFO_DMA_INCR /* ----G */ -#define NV_FIFO_DMA_INCR_OPCODE (0*32+31):(0*32+29) /* RWXUF */ -#define NV_FIFO_DMA_INCR_OPCODE_VALUE 0x00000001 /* ----V */ -#define NV_FIFO_DMA_INCR_COUNT (0*32+28):(0*32+16) /* RWXUF */ -#define NV_FIFO_DMA_INCR_SUBCHANNEL (0*32+15):(0*32+13) /* RWXUF */ -#define NV_FIFO_DMA_INCR_ADDRESS (0*32+11):(0*32+0) /* RWXUF */ -#define NV_FIFO_DMA_INCR_DATA (1*32+31):(1*32+0) /* RWXUF */ - - -Non-Incrementing PB Method Header Format - - A non-incrementing PB method header specifies that Host generate a sequence -of methods. The length of the sequence is defined by the method header. The -method data for each method in this sequence is contained within the PB entries -immediately following the method header. - - Unlike with the incrementing PB method header, the sequence of methods -generated all have the same method address. The dword-address of every method -in this sequence is specified by the method header. Although the methods all -have the same address, the method data entries may be different. - -Example sequence of methods generated from a non-incrementing method header: - - addr data0 - addr data1 - addr data2 - addr data3 - ... ... - - The NV_FIFO_DMA_NONINCR_COUNT field contains the number of methods -in the generated sequence. This is the same as the number of method data -entries that follow the method header. If the COUNT field is zero, the other -fields are ignored, and the PB method effectively becomes a no-op with no method -data entries following it. - - The NV_FIFO_DMA_NONINCR_SUBCHANNEL field contains the subchannel to use for -the methods generated from the method header. See the documentation above for -NV_FIFO_DMA_*_SUBCHANNEL. - - The NV_FIFO_DMA_NONINCR_ADDRESS field contains the method address for every -method in the generated sequence. A method address specifies an operation to be -performed. Note that because the ADDRESS field is a dword-address and not a -byte-address, the least two significant bits of the method's byte-address are -not stored. - - The NV_FIFO_DMA_NONINCR_DATA fields contain the method data for the methods -in the generated sequence. The number of method data entries is defined by the -COUNT field. A method data entry contains an operand for its respective method. - - Bit 12 is reserved for the future expansion of either the subchannel or the -address fields. - - -#define NV_FIFO_DMA_NONINCR /* ----G */ -#define NV_FIFO_DMA_NONINCR_OPCODE (0*32+31):(0*32+29) /* RWXUF */ -#define NV_FIFO_DMA_NONINCR_OPCODE_VALUE 0x00000003 /* ----V */ -#define NV_FIFO_DMA_NONINCR_COUNT (0*32+28):(0*32+16) /* RWXUF */ -#define NV_FIFO_DMA_NONINCR_SUBCHANNEL (0*32+15):(0*32+13) /* RWXUF */ -#define NV_FIFO_DMA_NONINCR_ADDRESS (0*32+11):(0*32+0) /* RWXUF */ -#define NV_FIFO_DMA_NONINCR_DATA (1*32+31):(1*32+0) /* RWXUF */ - - -Increment-Once PB Method Header Format - - An increment-once PB method header specifies that Host generate a sequence -of methods. The length of the sequence is defined by the method header. The -method data for each method in this sequence is found in a sequence of PB -entries immediately following the method header. - - The dword-address of the first method is specified by the method header. -The address of the second and all following methods is equal to the -dword-address of the first method plus one. In other words, the byte-address of -the second and all following methods is equal to the byte-address of the first -method plus four. - -Example sequence of methods generated from an increment-once method header: - - addr data0 - addr+1 data1 - addr+1 data2 - addr+1 data3 - ... ... - - The NV_FIFO_DMA_ONEINCR_COUNT field contains the number of methods in the -generated sequence. This is the same as the number of method data entries that -follow the method header. If the COUNT field is zero, the other fields are -ignored, and the PB method effectively becomes a no-op method with no method -data entries following it. - - The NV_FIFO_DMA_ONEINCR_SUBCHANNEL field contains the subchannel to use for -the methods generated from the method header. See the documentation above for -NV_FIFO_DMA_*_SUBCHANNEL. - - The NV_FIFO_DMA_ONEINCR_ADDRESS field contains the method address for the -first method in the generated sequence. A method address specifies an operation -to be performed. Note that because the ADDRESS is a dword-address and not a -byte-address, the least two significant bits of the method's byte-address are -not stored. - - The NV_FIFO_DMA_ONEINCR_DATA fields contain the method data for the methods -in the generated sequence. The number of method data entries is defined by the -COUNT field. A method data entry contains an operand for its respective method. - - Bit 12 is reserved for the future expansion of either the subchannel or the -address fields. - - -#define NV_FIFO_DMA_ONEINCR /* ----G */ -#define NV_FIFO_DMA_ONEINCR_OPCODE (0*32+31):(0*32+29) /* RWXUF */ -#define NV_FIFO_DMA_ONEINCR_OPCODE_VALUE 0x00000005 /* ----V */ -#define NV_FIFO_DMA_ONEINCR_COUNT (0*32+28):(0*32+16) /* RWXUF */ -#define NV_FIFO_DMA_ONEINCR_SUBCHANNEL (0*32+15):(0*32+13) /* RWXUF */ -#define NV_FIFO_DMA_ONEINCR_ADDRESS (0*32+11):(0*32+0) /* RWXUF */ -#define NV_FIFO_DMA_ONEINCR_DATA (1*32+31):(1*32+0) /* RWXUF */ - - -No-Operation PB Instruction Formats - - The method header for a no-op PB method may be specified in multiple ways, -but the preferred way is to set the PB instruction to NV_FIFO_DMA_NOP. -In any case NV_FIFO_DMA_NOP is a universal NOP entry that bypasses any method -header format check, and is not considered a method header. - - -#define NV_FIFO_DMA_NOP 0x00000000 /* ----C */ - - -Immediate-Data PB Method Header Format - - If a method's operand fits within 13 bits, a PB method may be specified in -a single PB entry, using the immediate-data PB method header format. Exactly -one method is generated from this method header. - - The NV_FIFO_DMA_IMMD_SUBCHANNEL field contains the subchannel to use for -the method generated from the method header. See the documentation above for -NV_FIFO_DMA_*_SUBCHANNEL. - - The NV_FIFO_DMA_IMMD_ADDRESS field contains the method address for the -single generated method. A method address specifies an operation to be -performed. Note that because the ADDRESS is a dword-address and not a -byte-address, the least two significant bits of the method's byte-address are -not stored. - - The single NV_FIFO_DMA_IMMD_DATA field contains the method data for the -generated method. This method data contains an operand for the generated -method. - - -#define NV_FIFO_DMA_IMMD /* ----G */ -#define NV_FIFO_DMA_IMMD_ADDRESS 11:0 /* RWXUF */ -#define NV_FIFO_DMA_IMMD_SUBCHANNEL 15:13 /* RWXUF */ -#define NV_FIFO_DMA_IMMD_DATA 28:16 /* RWXUF */ -#define NV_FIFO_DMA_IMMD_OPCODE 31:29 /* RWXUF */ -#define NV_FIFO_DMA_IMMD_OPCODE_VALUE 0x00000004 /* ----V */ - - -Set Sub-Device Mask PB Control Entry Format - - The SET_SUBDEVICE_MASK (SSDM) PB control entry is used when multiple GPU -contexts are using the same pushbuffer (for example, for SLI or for stereo -rendering) and there is data in the push buffer that is for only a subset of the -GPU contexts. This instruction allows the pushbuffer to tell a specific GPU -context to use or ignore methods following the SET_SUBDEVICE_MASK. While the -logical-AND of NV_FIFO_DMA_SET_SUBDEVICE_MASK_VALUE and the GPU context's -NV_PPBDMA_SUBDEVICE_ID value is zero, methods are ignored. Pushbuffer control -entries (like SET_SUBDEVICE_MASK) are not ignored. - -******************************************************************************** -Warning: When using subdevice masking, one must take care to synchronize -properly with any later GP entries marked FETCH_CONDITIONAL. If GP fetching -gets too far ahead of PB processing, it is possible for a later conditional PB -segment to be discarded prior to reaching an SSDM command that sets -SUBDEVICE_STATUS to ACTIVE. This would cause Host to execute garbage data. One -way to avoid this would be to set the SYNC_WAIT flag on any FETCH_CONDITIONAL -segments following a subdevice reenable. -******************************************************************************** - - - -#define NV_FIFO_DMA_SET_SUBDEVICE_MASK /* ----G */ -#define NV_FIFO_DMA_SET_SUBDEVICE_MASK_VALUE 15:4 /* RWXUF */ -#define NV_FIFO_DMA_SET_SUBDEVICE_MASK_OPCODE 31:16 /* RWXUF */ -#define NV_FIFO_DMA_SET_SUBDEVICE_MASK_OPCODE_VALUE 0x00000001 /* ----V */ - - -Store Sub-Device Mask PB Control Entry Format - - The STORE_SUBDEVICE_MASK PB control entry is used to save a subdevice mask -value to be used later by a USE_SUBDEVICE_MASK PB instruction. - - -#define NV_FIFO_DMA_STORE_SUBDEVICE_MASK /* ----G */ -#define NV_FIFO_DMA_STORE_SUBDEVICE_MASK_VALUE 15:4 /* RWXUF */ -#define NV_FIFO_DMA_STORE_SUBDEVICE_MASK_OPCODE 31:16 /* RWXUF */ -#define NV_FIFO_DMA_STORE_SUBDEVICE_MASK_OPCODE_VALUE 0x00000002 /* ----V */ - - -Use Sub-Device Mask PB Control Entry Format - - The USE_SUBDEVICE_MASK PB control entry is used to apply the subdevice mask -value saved by a STORE_SUBDEVICE_MASK PB instruction. The effect of the mask is -the same as for a SET_SUBDEVICE_MASK PB instruction. - - -#define NV_FIFO_DMA_USE_SUBDEVICE_MASK /* ----G */ -#define NV_FIFO_DMA_USE_SUBDEVICE_MASK_OPCODE 31:16 /* RWXUF */ -#define NV_FIFO_DMA_USE_SUBDEVICE_MASK_OPCODE_VALUE 0x00000003 /* ----V */ - - -End-PB-Segment PB Control Entry Format - - Engines may write PB segments themselves, but they cannot write GP entries. -Because they cannot write GP entries, they cannot alter the size of a PB -segment. If an engine is writing a PB segment, and if it does not need to fill -the entire PB segment it was allocated, instead of filling the remainder of the -PB segment with no-op PB instructions, it may write a single End-PB-Segment -control entry to indicate that the pushbuffer data contains no further valid -data. No further PB entries from that PB segment will be decoded or processed. -Host may have already issued requests to fetch the remainder of the PB segment -before an End-PB-Segment PB instruction is processed. Host may or may not fetch -the remainder of the PB segment. Also note that doing a PB CRC check on this -segment via NV_PPBDMA_GP_ENTRY1_OPCODE_PB_CRC will be indeterminate. - - -#define NV_FIFO_DMA_ENDSEG_OPCODE 31:29 /* RWXUF */ -#define NV_FIFO_DMA_ENDSEG_OPCODE_VALUE 0x00000007 /* ----V */ - - diff --git a/Host-Fifo/volta/gv100/dev_timer.ref.txt b/Host-Fifo/volta/gv100/dev_timer.ref.txt deleted file mode 100644 index 3f56b3b..0000000 --- a/Host-Fifo/volta/gv100/dev_timer.ref.txt +++ /dev/null @@ -1,79 +0,0 @@ -Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. - -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. --------------------------------------------------------------------------------- - -#define NV_PTIMER_PRI_TIMEOUT 0x00009080 /* RW-4R */ -#define NV_PTIMER_PRI_TIMEOUT_PERIOD 23:0 /* RWIVF */ -#define NV_PTIMER_PRI_TIMEOUT_PERIOD_MIN 0x00000003 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_PERIOD_MAX 0x00ffffff /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_PERIOD_RTL 0x0000000a /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_PERIOD_SHORT 0x00000006 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_PERIOD_INIT 0x00000100 /* RWI-V */ -#define NV_PTIMER_PRI_TIMEOUT_PERIOD__PROD 0x00002000 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_EN 31:31 /* RWIVF */ -#define NV_PTIMER_PRI_TIMEOUT_EN_DISABLED 0x00000000 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_EN_ENABLED 0x00000001 /* RWI-V */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0 0x00009084 /* RW-4R */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_TO 0:0 /* RWXVF */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_TO_ERROR 0x1 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_TO_CLEAR 0x0 /* -W--V */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_TO_NONE 0x0 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_WRITE 1:1 /* RWXVF */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_WRITE_TRUE 0x1 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_WRITE_FALSE 0x0 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_ADDR 23:2 /* RWXVF */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_FECS_TGT 31:31 /* RWXVF */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_FECS_TGT_TRUE 0x1 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_0_FECS_TGT_FALSE 0x0 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_1 0x00009088 /* RW-4R */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_1_DATA 31:0 /* RWXVF */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_1_DATA_WAS_READ 0x0 /* RW--V */ -#define NV_PTIMER_PRI_TIMEOUT_FECS_ERRCODE 0x0000908C /* RW-4R */ -#define NV_PTIMER_PRI_TIMEOUT_FECS_ERRCODE_DATA 31:0 /* RWXVF */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_3 0x00009090 /* RW-4R */ -#define NV_PTIMER_PRI_TIMEOUT_SAVE_3_SUBID 3:0 /* R-XVF */ -#define NV_PTIMER_INTR_0 0x00009100 /* RW-4R */ -#define NV_PTIMER_INTR_0_ALARM 0:0 /* RWXVF */ -#define NV_PTIMER_INTR_0_ALARM_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PTIMER_INTR_0_ALARM_PENDING 0x00000001 /* R---V */ -#define NV_PTIMER_INTR_0_ALARM_RESET 0x00000001 /* -W--C */ -#define NV_PTIMER_INTR_0_TIMER 1:1 /* RWXVF */ -#define NV_PTIMER_INTR_0_TIMER_NOT_PENDING 0x00000000 /* R---V */ -#define NV_PTIMER_INTR_0_TIMER_PENDING 0x00000001 /* R---V */ -#define NV_PTIMER_INTR_0_TIMER_RESET 0x00000001 /* -W--C */ -#define NV_PTIMER_INTR_EN_0 0x00009140 /* RW-4R */ -#define NV_PTIMER_INTR_EN_0_ALARM 0:0 /* RWIVF */ -#define NV_PTIMER_INTR_EN_0_ALARM_DISABLED 0x00000000 /* RWI-V */ -#define NV_PTIMER_INTR_EN_0_ALARM_ENABLED 0x00000001 /* RW--V */ -#define NV_PTIMER_INTR_EN_0_TIMER 1:1 /* RWIVF */ -#define NV_PTIMER_INTR_EN_0_TIMER_DISABLED 0x00000000 /* RWI-V */ -#define NV_PTIMER_INTR_EN_0_TIMER_ENABLED 0x00000001 /* RW--V */ -#define NV_PTIMER_GR_TICK_FREQ 0x00009480 /* RW-4R */ -#define NV_PTIMER_GR_TICK_FREQ_SELECT 2:0 /* RWIUF */ -#define NV_PTIMER_GR_TICK_FREQ_SELECT_MAX 0x00000000 /* RW--V */ -#define NV_PTIMER_GR_TICK_FREQ_SELECT_DEFAULT 0x00000005 /* RWI-V */ -#define NV_PTIMER_GR_TICK_FREQ_SELECT_MIN 0x00000007 /* RW--V */ -#define NV_PTIMER_ALARM_0 0x00009420 /* RW-4R */ -#define NV_PTIMER_ALARM_0_NSEC 31:5 /* RWIUF */ -#define NV_PTIMER_ALARM_0_NSEC_INIT 0x0 /* RWI-V */ -#define NV_PTIMER_TIMER_0 0x00009428 /* RW-4R */ -#define NV_PTIMER_TIMER_0_NSEC 31:0 /* */ -#define NV_PTIMER_TIMER_0_USEC 31:10 /* RWIUF */ -#define NV_PTIMER_TIMER_0_USEC_INIT 0x0 /* RWI-V */ diff --git a/Host-Fifo/volta/gv100/dev_usermode.ref.txt b/Host-Fifo/volta/gv100/dev_usermode.ref.txt deleted file mode 100644 index cb98f96..0000000 --- a/Host-Fifo/volta/gv100/dev_usermode.ref.txt +++ /dev/null @@ -1,134 +0,0 @@ -Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. - -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. --------------------------------------------------------------------------------- - - This manual describes the USERMODE device. USERMODE is a mappable range of -registers for use by usermode drivers. The range is 64KB aligned and 64KB in -size to match the maximum page size of systems supported by NVIDIA hardware. - - Note that accesses to undefined registers in this device range do not cause -PRI_TIMEOUT interrupts to be raised. This is different from other PRI devices. -Writes to undefined registers are silently thrown away. Reads from undefined -registers return 0. - -Mnemonic Description Size Interface -------- ----------- ---- --------- -USERMODE Usermode region 64K HOST - -#define NV_USERMODE 0x0081FFFF:0x00810000 /* RW--D */ - - Table 1-1 Local Devices - - - -2 - IDENTIFICATION AND CAPABILITIES REGISTERS -=============================================================================== - - The first 128 bytes of the NV_USERMODE device are reserved for up to 32 -configuration and capabilities registers. - - -CFG0 - Config register 0: Class ID for the NV_USERMODE class - - The USERMODE_CLASS_ID field of the CFG0 register contains the class ID for -the class corresponding to the NV_USERMODE device. In gv100, this is the class -volta_usermode_a. - - -#define NV_USERMODE_CFG0 0x00810000 /* R--4R */ -#define NV_USERMODE_CFG0_USERMODE_CLASS_ID 15:0 /* R-IUF */ -#define NV_USERMODE_CFG0_USERMODE_CLASS_ID_VALUE 50017 /* R-I-V */ - -// Note: addresses up to 0x810080 are reserved for CGF and capabilities registers - - -3 - PTIMER CURRENT TIME REGISTERS -=============================================================================== - - The TIME registers contain the current time as kept by the PTIMER; see -dev_timer.ref. The current time is expressed in elapsed nanoseconds since the -UNIX epoch, 00:00 GMT, January 1, 1970 (zero hour). It generally has a -resolution of 32 nanoseconds. - - Note: To query the current time, read TIME_1, then TIME_0, and then TIME_1 -again. If the two readings of TIME_1 do not match, repeat the procedure. This -avoids incorrectly retrieving an incorrect time referring to a point up to 4 -seconds in the future: if one were to simply read TIME_0 and then TIME_1, TIME_0 -may overflow between the two reads. - - TIME_0 contains the low 32 bits of the timer. The least significant 5 bits -are always zero. The NSEC field contains the low order bits in 32ns -granularity. - - TIME_1 contains the high order bits. The NSEC field contains the upper 29 -bits of the timer. - - -TIME_0 Register - Timer Low Bits - - -#define NV_USERMODE_TIME_0 0x00810080 /* R--4R */ -#define NV_USERMODE_TIME_0_NSEC 31:5 /* R-XUF */ - - -TIME_1 Register - Timer High Bits - - -#define NV_USERMODE_TIME_1 0x00810084 /* R--4R */ -#define NV_USERMODE_TIME_1_NSEC 28:0 /* R-XUF */ - -// Note: addresses 0x810088 and 0x81008c are reserved for future TIME registers - - - -4 - CHANNEL WORK SUBMISSION REGISTERS -=============================================================================== - -NOTIFY_CHANNEL_PENDING - Notify Host that a channel has new work available - - Writing a channel ID to the ID field of NOTIFY_CHANNEL_PENDING tells Host -that new work is available to run on that channel. This causes the PENDING -status to be set in the NV_PCCSR_CHANNEL_STATUS field for that channel and -behaves identically to writing NV_PCCSR_CHANNEL_FORCE_PENDING, but is accessible -to usermode drivers. Setting pending will cause Host to schedule the channel -the next time it comes up in the runlist. Once the channel is scheduled, the -PBDMA will read GP_PUT from USERD to determine whether work is actually -available for the channel. - - Submitting new work to a channel involves these steps: - - 1. Write methods to the pushbuffer space - 2. Construct a new gp_fifo entry pointing to that pushbuffer space - 3. Update GP_PUT in USERD to indicate the new gp_fifo entry is ready - 4. Write the channel's handle to NV_USERMODE_NOTIFY_CHANNEL_PENDING_ID - - Note that if the ID refers to a non-existent channel, the write will be -ignored. Moreover, a write to an ID that exceeds the maximum supported channel -ID will have no effect (it will not overflow, causing some other channel to go -pending). - - Note that if the ID refers to a channel for which GP_PUT == GP_GET, Host will -still schedule the channel in order to determine the current status of its -GP_PUT, at which point it will discover there is no new work and move on to the -next channel. - - -#define NV_USERMODE_NOTIFY_CHANNEL_PENDING 0x00810090 /* -W-4R */ -#define NV_USERMODE_NOTIFY_CHANNEL_PENDING_ID 31:0 /* -W-UF */ diff --git a/Host-Fifo/volta/gv100/index.html b/Host-Fifo/volta/gv100/index.html deleted file mode 100644 index 53c9812..0000000 --- a/Host-Fifo/volta/gv100/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - gv100 - -

gv100

- dev_bus.ref.txt
- dev_fifo.ref.txt
- dev_master.ref.txt
- dev_pbdma.ref.txt
- dev_ram.ref.txt
- dev_timer.ref.txt
- dev_usermode.ref.txt
- - diff --git a/Host-Fifo/volta/index.html b/Host-Fifo/volta/index.html deleted file mode 100644 index 4e6c771..0000000 --- a/Host-Fifo/volta/index.html +++ /dev/null @@ -1,7 +0,0 @@ - - volta - -

volta

- gv100
- - -- cgit v1.2.3