mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2025-02-27 00:54:16 +01:00
520.56.06
This commit is contained in:
parent
90eb10774f
commit
7c345b838b
@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
## Release 520 Entries
|
## Release 520 Entries
|
||||||
|
|
||||||
|
### [520.56.06] 2022-10-12
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- Introduce support for GeForce RTX 4090 GPUs.
|
||||||
|
|
||||||
### [520.61.05] 2022-10-10
|
### [520.61.05] 2022-10-10
|
||||||
|
|
||||||
#### Added
|
#### Added
|
||||||
|
12
README.md
12
README.md
@ -1,7 +1,7 @@
|
|||||||
# NVIDIA Linux Open GPU Kernel Module Source
|
# NVIDIA Linux Open GPU Kernel Module Source
|
||||||
|
|
||||||
This is the source release of the NVIDIA Linux open GPU kernel modules,
|
This is the source release of the NVIDIA Linux open GPU kernel modules,
|
||||||
version 520.61.05.
|
version 520.56.06.
|
||||||
|
|
||||||
|
|
||||||
## How to Build
|
## How to Build
|
||||||
@ -17,7 +17,7 @@ as root:
|
|||||||
|
|
||||||
Note that the kernel modules built here must be used with gsp.bin
|
Note that the kernel modules built here must be used with gsp.bin
|
||||||
firmware and user-space NVIDIA GPU driver components from a corresponding
|
firmware and user-space NVIDIA GPU driver components from a corresponding
|
||||||
520.61.05 driver release. This can be achieved by installing
|
520.56.06 driver release. This can be achieved by installing
|
||||||
the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
|
the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
|
||||||
option. E.g.,
|
option. E.g.,
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ for the target kernel.
|
|||||||
## Compatible GPUs
|
## Compatible GPUs
|
||||||
|
|
||||||
The open-gpu-kernel-modules can be used on any Turing or later GPU
|
The open-gpu-kernel-modules can be used on any Turing or later GPU
|
||||||
(see the table below). However, in the 520.61.05 release,
|
(see the table below). However, in the 520.56.06 release,
|
||||||
GeForce and Workstation support is still considered alpha-quality.
|
GeForce and Workstation support is still considered alpha-quality.
|
||||||
|
|
||||||
To enable use of the open kernel modules on GeForce and Workstation GPUs,
|
To enable use of the open kernel modules on GeForce and Workstation GPUs,
|
||||||
@ -175,7 +175,7 @@ set the "NVreg_OpenRmEnableUnsupportedGpus" nvidia.ko kernel module
|
|||||||
parameter to 1. For more details, see the NVIDIA GPU driver end user
|
parameter to 1. For more details, see the NVIDIA GPU driver end user
|
||||||
README here:
|
README here:
|
||||||
|
|
||||||
https://us.download.nvidia.com/XFree86/Linux-x86_64/520.61.05/README/kernel_open.html
|
https://us.download.nvidia.com/XFree86/Linux-x86_64/520.56.06/README/kernel_open.html
|
||||||
|
|
||||||
In the below table, if three IDs are listed, the first is the PCI Device
|
In the below table, if three IDs are listed, the first is the PCI Device
|
||||||
ID, the second is the PCI Subsystem Vendor ID, and the third is the PCI
|
ID, the second is the PCI Subsystem Vendor ID, and the third is the PCI
|
||||||
@ -685,6 +685,7 @@ Subsystem Device ID.
|
|||||||
| NVIDIA GeForce RTX 3090 Ti | 2203 |
|
| NVIDIA GeForce RTX 3090 Ti | 2203 |
|
||||||
| NVIDIA GeForce RTX 3090 | 2204 |
|
| NVIDIA GeForce RTX 3090 | 2204 |
|
||||||
| NVIDIA GeForce RTX 3080 | 2206 |
|
| NVIDIA GeForce RTX 3080 | 2206 |
|
||||||
|
| NVIDIA GeForce RTX 3070 Ti | 2207 |
|
||||||
| NVIDIA GeForce RTX 3080 Ti | 2208 |
|
| NVIDIA GeForce RTX 3080 Ti | 2208 |
|
||||||
| NVIDIA GeForce RTX 3080 | 220A |
|
| NVIDIA GeForce RTX 3080 | 220A |
|
||||||
| NVIDIA CMP 90HX | 220D |
|
| NVIDIA CMP 90HX | 220D |
|
||||||
@ -709,6 +710,7 @@ Subsystem Device ID.
|
|||||||
| NVIDIA A10 | 2236 10DE 1482 |
|
| NVIDIA A10 | 2236 10DE 1482 |
|
||||||
| NVIDIA A10G | 2237 10DE 152F |
|
| NVIDIA A10G | 2237 10DE 152F |
|
||||||
| NVIDIA A10M | 2238 10DE 1677 |
|
| NVIDIA A10M | 2238 10DE 1677 |
|
||||||
|
| NVIDIA H100 PCIe | 2331 10DE 1626 |
|
||||||
| NVIDIA GeForce RTX 3060 Ti | 2414 |
|
| NVIDIA GeForce RTX 3060 Ti | 2414 |
|
||||||
| NVIDIA GeForce RTX 3080 Ti Laptop GPU | 2420 |
|
| NVIDIA GeForce RTX 3080 Ti Laptop GPU | 2420 |
|
||||||
| NVIDIA RTX A5500 Laptop GPU | 2438 |
|
| NVIDIA RTX A5500 Laptop GPU | 2438 |
|
||||||
@ -736,6 +738,7 @@ Subsystem Device ID.
|
|||||||
| NVIDIA RTX A3000 12GB Laptop GPU | 24B9 |
|
| NVIDIA RTX A3000 12GB Laptop GPU | 24B9 |
|
||||||
| NVIDIA RTX A4500 Laptop GPU | 24BA |
|
| NVIDIA RTX A4500 Laptop GPU | 24BA |
|
||||||
| NVIDIA RTX A3000 12GB Laptop GPU | 24BB |
|
| NVIDIA RTX A3000 12GB Laptop GPU | 24BB |
|
||||||
|
| NVIDIA GeForce RTX 3060 Ti | 24C9 |
|
||||||
| NVIDIA GeForce RTX 3080 Laptop GPU | 24DC |
|
| NVIDIA GeForce RTX 3080 Laptop GPU | 24DC |
|
||||||
| NVIDIA GeForce RTX 3070 Laptop GPU | 24DD |
|
| NVIDIA GeForce RTX 3070 Laptop GPU | 24DD |
|
||||||
| NVIDIA GeForce RTX 3070 Ti Laptop GPU | 24E0 |
|
| NVIDIA GeForce RTX 3070 Ti Laptop GPU | 24E0 |
|
||||||
@ -751,6 +754,7 @@ Subsystem Device ID.
|
|||||||
| NVIDIA RTX A2000 | 2531 103C 151D |
|
| NVIDIA RTX A2000 | 2531 103C 151D |
|
||||||
| NVIDIA RTX A2000 | 2531 10DE 151D |
|
| NVIDIA RTX A2000 | 2531 10DE 151D |
|
||||||
| NVIDIA RTX A2000 | 2531 17AA 151D |
|
| NVIDIA RTX A2000 | 2531 17AA 151D |
|
||||||
|
| NVIDIA GeForce RTX 3060 | 2544 |
|
||||||
| NVIDIA GeForce RTX 3060 Laptop GPU | 2560 |
|
| NVIDIA GeForce RTX 3060 Laptop GPU | 2560 |
|
||||||
| NVIDIA GeForce RTX 3050 Ti Laptop GPU | 2563 |
|
| NVIDIA GeForce RTX 3050 Ti Laptop GPU | 2563 |
|
||||||
| NVIDIA RTX A2000 12GB | 2571 1028 1611 |
|
| NVIDIA RTX A2000 12GB | 2571 1028 1611 |
|
||||||
|
@ -72,7 +72,7 @@ EXTRA_CFLAGS += -I$(src)/common/inc
|
|||||||
EXTRA_CFLAGS += -I$(src)
|
EXTRA_CFLAGS += -I$(src)
|
||||||
EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args
|
EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args
|
||||||
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM
|
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM
|
||||||
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"520.61.05\"
|
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"520.56.06\"
|
||||||
|
|
||||||
EXTRA_CFLAGS += -Wno-unused-function
|
EXTRA_CFLAGS += -Wno-unused-function
|
||||||
|
|
||||||
|
@ -78,8 +78,13 @@ static inline pgprot_t pgprot_modify_writecombine(pgprot_t old_prot)
|
|||||||
|
|
||||||
#define NV_PGPROT_UNCACHED_DEVICE(old_prot) pgprot_noncached(old_prot)
|
#define NV_PGPROT_UNCACHED_DEVICE(old_prot) pgprot_noncached(old_prot)
|
||||||
#if defined(NVCPU_AARCH64)
|
#if defined(NVCPU_AARCH64)
|
||||||
|
#if defined(NV_MT_DEVICE_GRE_PRESENT)
|
||||||
|
#define NV_PROT_WRITE_COMBINED_DEVICE (PROT_DEFAULT | PTE_PXN | PTE_UXN | \
|
||||||
|
PTE_ATTRINDX(MT_DEVICE_GRE))
|
||||||
|
#else
|
||||||
#define NV_PROT_WRITE_COMBINED_DEVICE (PROT_DEFAULT | PTE_PXN | PTE_UXN | \
|
#define NV_PROT_WRITE_COMBINED_DEVICE (PROT_DEFAULT | PTE_PXN | PTE_UXN | \
|
||||||
PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
||||||
|
#endif
|
||||||
#define NV_PGPROT_WRITE_COMBINED_DEVICE(old_prot) \
|
#define NV_PGPROT_WRITE_COMBINED_DEVICE(old_prot) \
|
||||||
__pgprot_modify(old_prot, PTE_ATTRINDX_MASK, NV_PROT_WRITE_COMBINED_DEVICE)
|
__pgprot_modify(old_prot, PTE_ATTRINDX_MASK, NV_PROT_WRITE_COMBINED_DEVICE)
|
||||||
#define NV_PGPROT_WRITE_COMBINED(old_prot) NV_PGPROT_UNCACHED(old_prot)
|
#define NV_PGPROT_WRITE_COMBINED(old_prot) NV_PGPROT_UNCACHED(old_prot)
|
||||||
|
@ -636,33 +636,27 @@ typedef enum
|
|||||||
#define NV_GET_NV_STATE(pGpu) \
|
#define NV_GET_NV_STATE(pGpu) \
|
||||||
(nv_state_t *)((pGpu) ? (pGpu)->pOsGpuInfo : NULL)
|
(nv_state_t *)((pGpu) ? (pGpu)->pOsGpuInfo : NULL)
|
||||||
|
|
||||||
static inline NvBool IS_REG_OFFSET(nv_state_t *nv, NvU64 offset, NvU64 length)
|
#define IS_REG_OFFSET(nv, offset, length) \
|
||||||
{
|
(((offset) >= (nv)->regs->cpu_address) && \
|
||||||
return ((offset >= nv->regs->cpu_address) &&
|
(((offset) + ((length)-1)) <= \
|
||||||
((offset + (length - 1)) <= (nv->regs->cpu_address + (nv->regs->size - 1))));
|
(nv)->regs->cpu_address + ((nv)->regs->size-1)))
|
||||||
}
|
|
||||||
|
|
||||||
static inline NvBool IS_FB_OFFSET(nv_state_t *nv, NvU64 offset, NvU64 length)
|
#define IS_FB_OFFSET(nv, offset, length) \
|
||||||
{
|
(((nv)->fb) && ((offset) >= (nv)->fb->cpu_address) && \
|
||||||
return ((nv->fb) && (offset >= nv->fb->cpu_address) &&
|
(((offset) + ((length)-1)) <= (nv)->fb->cpu_address + ((nv)->fb->size-1)))
|
||||||
((offset + (length - 1)) <= (nv->fb->cpu_address + (nv->fb->size - 1))));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline NvBool IS_UD_OFFSET(nv_state_t *nv, NvU64 offset, NvU64 length)
|
#define IS_UD_OFFSET(nv, offset, length) \
|
||||||
{
|
(((nv)->ud.cpu_address != 0) && ((nv)->ud.size != 0) && \
|
||||||
return ((nv->ud.cpu_address != 0) && (nv->ud.size != 0) &&
|
((offset) >= (nv)->ud.cpu_address) && \
|
||||||
(offset >= nv->ud.cpu_address) &&
|
(((offset) + ((length)-1)) <= (nv)->ud.cpu_address + ((nv)->ud.size-1)))
|
||||||
((offset + (length - 1)) <= (nv->ud.cpu_address + (nv->ud.size - 1))));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline NvBool IS_IMEM_OFFSET(nv_state_t *nv, NvU64 offset, NvU64 length)
|
#define IS_IMEM_OFFSET(nv, offset, length) \
|
||||||
{
|
(((nv)->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address != 0) && \
|
||||||
return ((nv->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address != 0) &&
|
((nv)->bars[NV_GPU_BAR_INDEX_IMEM].size != 0) && \
|
||||||
(nv->bars[NV_GPU_BAR_INDEX_IMEM].size != 0) &&
|
((offset) >= (nv)->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address) && \
|
||||||
(offset >= nv->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address) &&
|
(((offset) + ((length) - 1)) <= \
|
||||||
((offset + (length - 1)) <= (nv->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address +
|
(nv)->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address + \
|
||||||
(nv->bars[NV_GPU_BAR_INDEX_IMEM].size - 1))));
|
((nv)->bars[NV_GPU_BAR_INDEX_IMEM].size - 1)))
|
||||||
}
|
|
||||||
|
|
||||||
#define NV_RM_MAX_MSIX_LINES 8
|
#define NV_RM_MAX_MSIX_LINES 8
|
||||||
|
|
||||||
|
@ -2334,6 +2334,23 @@ compile_test() {
|
|||||||
compile_check_conftest "$CODE" "NV_PCI_DEV_HAS_ATS_ENABLED" "" "types"
|
compile_check_conftest "$CODE" "NV_PCI_DEV_HAS_ATS_ENABLED" "" "types"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
mt_device_gre)
|
||||||
|
#
|
||||||
|
# Determine if MT_DEVICE_GRE flag is present.
|
||||||
|
#
|
||||||
|
# MT_DEVICE_GRE flag is removed by commit 58cc6b72a21274
|
||||||
|
# ("arm64: mm: Remove unused support for Device-GRE memory type") in v5.14-rc1
|
||||||
|
# (2021-06-01).
|
||||||
|
#
|
||||||
|
CODE="
|
||||||
|
#include <asm/memory.h>
|
||||||
|
unsigned int conftest_mt_device_gre(void) {
|
||||||
|
return MT_DEVICE_GRE;
|
||||||
|
}"
|
||||||
|
|
||||||
|
compile_check_conftest "$CODE" "NV_MT_DEVICE_GRE_PRESENT" "" "types"
|
||||||
|
;;
|
||||||
|
|
||||||
get_user_pages)
|
get_user_pages)
|
||||||
#
|
#
|
||||||
# Conftest for get_user_pages()
|
# Conftest for get_user_pages()
|
||||||
|
@ -431,7 +431,7 @@ static int nvidia_mmap_numa(
|
|||||||
const nv_alloc_mapping_context_t *mmap_context)
|
const nv_alloc_mapping_context_t *mmap_context)
|
||||||
{
|
{
|
||||||
NvU64 start, addr;
|
NvU64 start, addr;
|
||||||
NvU64 pages;
|
unsigned int pages;
|
||||||
NvU64 i;
|
NvU64 i;
|
||||||
|
|
||||||
pages = NV_VMA_SIZE(vma) >> PAGE_SHIFT;
|
pages = NV_VMA_SIZE(vma) >> PAGE_SHIFT;
|
||||||
|
@ -1429,9 +1429,6 @@ static int nv_open_device(nv_state_t *nv, nvidia_stack_t *sp)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(NV_ATOMIC_READ(nvl->usage_count) >= NV_S32_MAX))
|
|
||||||
return -EMFILE;
|
|
||||||
|
|
||||||
if ( ! (nv->flags & NV_FLAG_OPEN))
|
if ( ! (nv->flags & NV_FLAG_OPEN))
|
||||||
{
|
{
|
||||||
/* Sanity check: !NV_FLAG_OPEN requires usage_count == 0 */
|
/* Sanity check: !NV_FLAG_OPEN requires usage_count == 0 */
|
||||||
|
@ -243,6 +243,7 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += vmalloc_has_pgprot_t_arg
|
|||||||
NV_CONFTEST_TYPE_COMPILE_TESTS += mm_has_mmap_lock
|
NV_CONFTEST_TYPE_COMPILE_TESTS += mm_has_mmap_lock
|
||||||
NV_CONFTEST_TYPE_COMPILE_TESTS += pci_channel_state
|
NV_CONFTEST_TYPE_COMPILE_TESTS += pci_channel_state
|
||||||
NV_CONFTEST_TYPE_COMPILE_TESTS += pci_dev_has_ats_enabled
|
NV_CONFTEST_TYPE_COMPILE_TESTS += pci_dev_has_ats_enabled
|
||||||
|
NV_CONFTEST_TYPE_COMPILE_TESTS += mt_device_gre
|
||||||
NV_CONFTEST_TYPE_COMPILE_TESTS += remove_memory_has_nid_arg
|
NV_CONFTEST_TYPE_COMPILE_TESTS += remove_memory_has_nid_arg
|
||||||
NV_CONFTEST_TYPE_COMPILE_TESTS += add_memory_driver_managed_has_mhp_flags_arg
|
NV_CONFTEST_TYPE_COMPILE_TESTS += add_memory_driver_managed_has_mhp_flags_arg
|
||||||
NV_CONFTEST_TYPE_COMPILE_TESTS += num_registered_fb
|
NV_CONFTEST_TYPE_COMPILE_TESTS += num_registered_fb
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: Copyright (c) 2015-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
* SPDX-FileCopyrightText: Copyright (c) 2015-2019 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
@ -207,6 +207,8 @@ static int nvlink_fops_release(struct inode *inode, struct file *filp)
|
|||||||
|
|
||||||
nvlink_print(NVLINK_DBG_INFO, "nvlink driver close\n");
|
nvlink_print(NVLINK_DBG_INFO, "nvlink driver close\n");
|
||||||
|
|
||||||
|
WARN_ON(private == NULL);
|
||||||
|
|
||||||
mutex_lock(&nvlink_drvctx.lock);
|
mutex_lock(&nvlink_drvctx.lock);
|
||||||
|
|
||||||
if (private->capability_fds.fabric_mgmt > 0)
|
if (private->capability_fds.fabric_mgmt > 0)
|
||||||
|
@ -36,25 +36,25 @@
|
|||||||
// and then checked back in. You cannot make changes to these sections without
|
// and then checked back in. You cannot make changes to these sections without
|
||||||
// corresponding changes to the buildmeister script
|
// corresponding changes to the buildmeister script
|
||||||
#ifndef NV_BUILD_BRANCH
|
#ifndef NV_BUILD_BRANCH
|
||||||
#define NV_BUILD_BRANCH r521_82
|
#define NV_BUILD_BRANCH r521_90
|
||||||
#endif
|
#endif
|
||||||
#ifndef NV_PUBLIC_BRANCH
|
#ifndef NV_PUBLIC_BRANCH
|
||||||
#define NV_PUBLIC_BRANCH r521_82
|
#define NV_PUBLIC_BRANCH r521_90
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS)
|
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS)
|
||||||
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r520/r521_82-338"
|
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r520/r521_90-315"
|
||||||
#define NV_BUILD_CHANGELIST_NUM (31864828)
|
#define NV_BUILD_CHANGELIST_NUM (31900380)
|
||||||
#define NV_BUILD_TYPE "Official"
|
#define NV_BUILD_TYPE "Official"
|
||||||
#define NV_BUILD_NAME "rel/gpu_drv/r520/r521_82-338"
|
#define NV_BUILD_NAME "rel/gpu_drv/r520/r521_90-315"
|
||||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31864828)
|
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31900380)
|
||||||
|
|
||||||
#else /* Windows builds */
|
#else /* Windows builds */
|
||||||
#define NV_BUILD_BRANCH_VERSION "r521_82-4"
|
#define NV_BUILD_BRANCH_VERSION "r521_90-15"
|
||||||
#define NV_BUILD_CHANGELIST_NUM (31858738)
|
#define NV_BUILD_CHANGELIST_NUM (31900380)
|
||||||
#define NV_BUILD_TYPE "Official"
|
#define NV_BUILD_TYPE "Official"
|
||||||
#define NV_BUILD_NAME "522.06"
|
#define NV_BUILD_NAME "522.25"
|
||||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31858738)
|
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31900380)
|
||||||
#define NV_BUILD_BRANCH_BASE_VERSION R520
|
#define NV_BUILD_BRANCH_BASE_VERSION R520
|
||||||
#endif
|
#endif
|
||||||
// End buildmeister python edited section
|
// End buildmeister python edited section
|
||||||
|
@ -136,6 +136,7 @@ static const PNPVendorId PNPVendorIds[] =
|
|||||||
{ "CLO", _VENDOR_NAME_ENTRY("Clone Computers/Analogy") },
|
{ "CLO", _VENDOR_NAME_ENTRY("Clone Computers/Analogy") },
|
||||||
{ "CLT", _VENDOR_NAME_ENTRY("automated computer control systems")},
|
{ "CLT", _VENDOR_NAME_ENTRY("automated computer control systems")},
|
||||||
{ "CMD", _VENDOR_NAME_ENTRY("CMD Technology") },
|
{ "CMD", _VENDOR_NAME_ENTRY("CMD Technology") },
|
||||||
|
{ "CMN", _VENDOR_NAME_ENTRY("Chimei innolux corp.") },
|
||||||
{ "CMO", _VENDOR_NAME_ENTRY("Chi Mei Optoelectronics corp.") },
|
{ "CMO", _VENDOR_NAME_ENTRY("Chi Mei Optoelectronics corp.") },
|
||||||
{ "CNI", _VENDOR_NAME_ENTRY("Connect International") },
|
{ "CNI", _VENDOR_NAME_ENTRY("Connect International") },
|
||||||
{ "CNT", _VENDOR_NAME_ENTRY("CNet Technology") },
|
{ "CNT", _VENDOR_NAME_ENTRY("CNet Technology") },
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) || defined(NV_VMWARE) || defined(NV_QNX) || defined(NV_INTEGRITY) || \
|
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) || defined(NV_VMWARE) || defined(NV_QNX) || defined(NV_INTEGRITY) || \
|
||||||
(defined(RMCFG_FEATURE_PLATFORM_GSP) && RMCFG_FEATURE_PLATFORM_GSP == 1)
|
(defined(RMCFG_FEATURE_PLATFORM_GSP) && RMCFG_FEATURE_PLATFORM_GSP == 1)
|
||||||
|
|
||||||
#define NV_VERSION_STRING "520.61.05"
|
#define NV_VERSION_STRING "520.56.06"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ typedef struct
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
NvU16 nodeId;
|
NvU16 nodeId;
|
||||||
NvU16 linkIndex;
|
NvU32 linkIndex;
|
||||||
nvlink_pci_dev_info pciInfo;
|
nvlink_pci_dev_info pciInfo;
|
||||||
} nvlink_endpoint;
|
} nvlink_endpoint;
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ typedef struct
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
NvU16 nodeId;
|
NvU16 nodeId;
|
||||||
NvU16 linkIndex;
|
NvU32 linkIndex;
|
||||||
nvlink_pci_dev_info pciInfo;
|
nvlink_pci_dev_info pciInfo;
|
||||||
NvU8 devUuid[NVLINK_UUID_LEN];
|
NvU8 devUuid[NVLINK_UUID_LEN];
|
||||||
NvU32 devType;
|
NvU32 devType;
|
||||||
@ -189,9 +189,9 @@ typedef enum
|
|||||||
/* link and sublink state of an nvlink endpoint */
|
/* link and sublink state of an nvlink endpoint */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
NvU8 linkMode;
|
NvU32 linkMode;
|
||||||
NvU8 txSubLinkMode;
|
NvU32 txSubLinkMode;
|
||||||
NvU8 rxSubLinkMode;
|
NvU32 rxSubLinkMode;
|
||||||
} nvlink_link_state;
|
} nvlink_link_state;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -354,7 +354,7 @@ typedef struct
|
|||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
NvU16 linkIndex;
|
NvU32 linkIndex;
|
||||||
NvBool initStatus;
|
NvBool initStatus;
|
||||||
} nvlink_link_init_status;
|
} nvlink_link_init_status;
|
||||||
|
|
||||||
@ -503,7 +503,7 @@ typedef struct
|
|||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
NvU16 linkIndex;
|
NvU32 linkIndex;
|
||||||
NV_DECLARE_ALIGNED(NvU64 tokenValue, 8);
|
NV_DECLARE_ALIGNED(NvU64 tokenValue, 8);
|
||||||
} nvlink_token_info;
|
} nvlink_token_info;
|
||||||
|
|
||||||
@ -1111,11 +1111,6 @@ typedef struct
|
|||||||
NvU32 endStatesCount;
|
NvU32 endStatesCount;
|
||||||
} nvlink_get_device_link_states;
|
} nvlink_get_device_link_states;
|
||||||
|
|
||||||
/*
|
|
||||||
* Note: Verify that new parameter structs for IOCTLs satisfy
|
|
||||||
* sizing restrictions for all OSs they could be used in.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define CTRL_NVLINK_CHECK_VERSION 0x01
|
#define CTRL_NVLINK_CHECK_VERSION 0x01
|
||||||
#define CTRL_NVLINK_SET_NODE_ID 0x02
|
#define CTRL_NVLINK_SET_NODE_ID 0x02
|
||||||
#define CTRL_NVLINK_SET_TX_COMMON_MODE 0x03
|
#define CTRL_NVLINK_SET_TX_COMMON_MODE 0x03
|
||||||
|
@ -78,18 +78,7 @@ nvlink_core_check_link_state
|
|||||||
return NV_FALSE;
|
return NV_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = link->link_handlers->get_dl_link_mode(link, &crntDlLinkMode);
|
if (crntTlLinkMode == NVLINK_LINKSTATE_HS)
|
||||||
if (status != NVL_SUCCESS)
|
|
||||||
{
|
|
||||||
NVLINK_PRINT((DBG_MODULE_NVLINK_CORE, NVLINK_DBG_LEVEL_ERRORS,
|
|
||||||
"%s: Unable to get DL link mode for %s:%s\n",
|
|
||||||
__FUNCTION__, link->dev->deviceName, link->linkName));
|
|
||||||
return NV_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (crntTlLinkMode == NVLINK_LINKSTATE_HS &&
|
|
||||||
(crntDlLinkMode == NVLINK_LINKSTATE_HS ||
|
|
||||||
crntDlLinkMode == NVLINK_LINKSTATE_SLEEP))
|
|
||||||
{
|
{
|
||||||
return NV_TRUE;
|
return NV_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -430,7 +430,7 @@ nvlink_core_powerdown_intranode_conns_from_active_to_off
|
|||||||
|
|
||||||
// to track Failure
|
// to track Failure
|
||||||
conns[i]->end0->inSWCFG = NV_FALSE;
|
conns[i]->end0->inSWCFG = NV_FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
conns[i]->end0->inSWCFG = NV_TRUE;
|
conns[i]->end0->inSWCFG = NV_TRUE;
|
||||||
@ -448,14 +448,14 @@ nvlink_core_powerdown_intranode_conns_from_active_to_off
|
|||||||
|
|
||||||
// to track Failure
|
// to track Failure
|
||||||
conns[i]->end1->inSWCFG = NV_FALSE;
|
conns[i]->end1->inSWCFG = NV_FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
conns[i]->end1->inSWCFG = NV_TRUE;
|
conns[i]->end1->inSWCFG = NV_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change each sublink state to SAFE
|
// Change each sublink state to SAFE
|
||||||
if(conns[i]->end0->inSWCFG == NV_TRUE)
|
if(conns[i]->end0->inSWCFG == NV_TRUE)
|
||||||
{
|
{
|
||||||
conns[i]->end0->link_handlers->set_tx_mode(conns[i]->end0,
|
conns[i]->end0->link_handlers->set_tx_mode(conns[i]->end0,
|
||||||
NVLINK_SUBLINK_STATE_TX_SAFE,
|
NVLINK_SUBLINK_STATE_TX_SAFE,
|
||||||
@ -928,8 +928,7 @@ nvlink_core_powerdown_floorswept_conns_to_off
|
|||||||
{
|
{
|
||||||
nvlink_core_get_intranode_conn(links[j], &(conn));
|
nvlink_core_get_intranode_conn(links[j], &(conn));
|
||||||
if (conn == NULL ||
|
if (conn == NULL ||
|
||||||
_nvlink_core_check_if_conn_in_array(visitedConns, connCount, conn) ||
|
_nvlink_core_check_if_conn_in_array(visitedConns, connCount, conn))
|
||||||
(conn->end0 == NULL || conn->end1 == NULL))
|
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -535,7 +535,6 @@ void nvswitch_reset_persistent_link_hw_state(nvswitch_device *device, NvU32
|
|||||||
void nvswitch_store_topology_information(nvswitch_device *device, nvlink_link *link);
|
void nvswitch_store_topology_information(nvswitch_device *device, nvlink_link *link);
|
||||||
|
|
||||||
NvlStatus nvswitch_launch_ALI(nvswitch_device *device);
|
NvlStatus nvswitch_launch_ALI(nvswitch_device *device);
|
||||||
NvlStatus nvswitch_launch_ALI_link_training(nvswitch_device *device, nvlink_link *link, NvBool bSync);
|
|
||||||
NvlStatus nvswitch_inband_read_data(nvswitch_device *device, NvU8 *dest, NvU32 linkId, NvU32 *dataSize);
|
NvlStatus nvswitch_inband_read_data(nvswitch_device *device, NvU8 *dest, NvU32 linkId, NvU32 *dataSize);
|
||||||
void nvswitch_filter_messages(nvswitch_device *device, NvU32 linkId);
|
void nvswitch_filter_messages(nvswitch_device *device, NvU32 linkId);
|
||||||
NvlStatus nvswitch_set_training_mode(nvswitch_device *device);
|
NvlStatus nvswitch_set_training_mode(nvswitch_device *device);
|
||||||
|
@ -210,7 +210,7 @@
|
|||||||
|
|
||||||
#define NVSWITCH_HAL_FUNCTION_LIST_LS10(_op, _arch) \
|
#define NVSWITCH_HAL_FUNCTION_LIST_LS10(_op, _arch) \
|
||||||
_op(NvlStatus, nvswitch_launch_ALI, (nvswitch_device *device), _arch) \
|
_op(NvlStatus, nvswitch_launch_ALI, (nvswitch_device *device), _arch) \
|
||||||
_op(NvlStatus, nvswitch_launch_ALI_link_training, (nvswitch_device *device, nvlink_link *link, NvBool bSync), _arch) \
|
_op(NvlStatus, nvswitch_launch_ALI_link_training, (nvswitch_device *device, nvlink_link *link), _arch) \
|
||||||
_op(NvlStatus, nvswitch_ctrl_inband_send_data, (nvswitch_device *device, NVSWITCH_INBAND_SEND_DATA_PARAMS *p), _arch) \
|
_op(NvlStatus, nvswitch_ctrl_inband_send_data, (nvswitch_device *device, NVSWITCH_INBAND_SEND_DATA_PARAMS *p), _arch) \
|
||||||
_op(NvlStatus, nvswitch_ctrl_inband_read_data, (nvswitch_device *device, NVSWITCH_INBAND_READ_DATA_PARAMS *p), _arch) \
|
_op(NvlStatus, nvswitch_ctrl_inband_read_data, (nvswitch_device *device, NVSWITCH_INBAND_READ_DATA_PARAMS *p), _arch) \
|
||||||
_op(NvlStatus, nvswitch_ctrl_set_residency_bins, (nvswitch_device *device, NVSWITCH_SET_RESIDENCY_BINS *p), _arch) \
|
_op(NvlStatus, nvswitch_ctrl_set_residency_bins, (nvswitch_device *device, NVSWITCH_SET_RESIDENCY_BINS *p), _arch) \
|
||||||
|
@ -648,7 +648,7 @@ NvlStatus nvswitch_ctrl_get_nvlink_lp_counters_lr10(nvswitch_device *device, NVS
|
|||||||
NvlStatus nvswitch_service_nvldl_fatal_link_lr10(nvswitch_device *device, NvU32 nvliptInstance, NvU32 link);
|
NvlStatus nvswitch_service_nvldl_fatal_link_lr10(nvswitch_device *device, NvU32 nvliptInstance, NvU32 link);
|
||||||
NvlStatus nvswitch_ctrl_inband_send_data_lr10(nvswitch_device *device, NVSWITCH_INBAND_SEND_DATA_PARAMS *p);
|
NvlStatus nvswitch_ctrl_inband_send_data_lr10(nvswitch_device *device, NVSWITCH_INBAND_SEND_DATA_PARAMS *p);
|
||||||
NvlStatus nvswitch_ctrl_inband_read_data_lr10(nvswitch_device *device, NVSWITCH_INBAND_READ_DATA_PARAMS *p);
|
NvlStatus nvswitch_ctrl_inband_read_data_lr10(nvswitch_device *device, NVSWITCH_INBAND_READ_DATA_PARAMS *p);
|
||||||
NvlStatus nvswitch_launch_ALI_link_training_lr10(nvswitch_device *device, nvlink_link *link, NvBool bSync);
|
NvlStatus nvswitch_launch_ALI_link_training_lr10(nvswitch_device *device, nvlink_link *link);
|
||||||
NvlStatus nvswitch_service_minion_link_lr10(nvswitch_device *device, NvU32 nvliptInstance);
|
NvlStatus nvswitch_service_minion_link_lr10(nvswitch_device *device, NvU32 nvliptInstance);
|
||||||
void nvswitch_apply_recal_settings_lr10(nvswitch_device *device, nvlink_link *link);
|
void nvswitch_apply_recal_settings_lr10(nvswitch_device *device, nvlink_link *link);
|
||||||
NvlStatus nvswitch_ctrl_get_sw_info_lr10(nvswitch_device *device, NVSWITCH_GET_SW_INFO_PARAMS *p);
|
NvlStatus nvswitch_ctrl_get_sw_info_lr10(nvswitch_device *device, NVSWITCH_GET_SW_INFO_PARAMS *p);
|
||||||
|
@ -2047,8 +2047,7 @@ NvlStatus
|
|||||||
nvswitch_launch_ALI_link_training_lr10
|
nvswitch_launch_ALI_link_training_lr10
|
||||||
(
|
(
|
||||||
nvswitch_device *device,
|
nvswitch_device *device,
|
||||||
nvlink_link *link,
|
nvlink_link *link
|
||||||
NvBool bSync
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return NVL_ERR_NOT_IMPLEMENTED;
|
return NVL_ERR_NOT_IMPLEMENTED;
|
||||||
|
@ -307,7 +307,7 @@ _nvswitch_corelib_ali_training
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
nvswitch_device *device = link->dev->pDevInfo;
|
nvswitch_device *device = link->dev->pDevInfo;
|
||||||
return device->hal.nvswitch_launch_ALI_link_training(device, link, NV_FALSE);
|
return device->hal.nvswitch_launch_ALI_link_training(device, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -4191,11 +4191,10 @@ NvlStatus
|
|||||||
nvswitch_launch_ALI_link_training
|
nvswitch_launch_ALI_link_training
|
||||||
(
|
(
|
||||||
nvswitch_device *device,
|
nvswitch_device *device,
|
||||||
nvlink_link *link,
|
nvlink_link *link
|
||||||
NvBool bSync
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return device->hal.nvswitch_launch_ALI_link_training(device, link, bSync);
|
return device->hal.nvswitch_launch_ALI_link_training(device, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
NvlStatus
|
NvlStatus
|
||||||
|
@ -583,25 +583,4 @@ typedef struct NV208F_CTRL_FB_CLEAR_REMAPPED_ROWS_PARAMS {
|
|||||||
NvU32 sourceMask;
|
NvU32 sourceMask;
|
||||||
} NV208F_CTRL_FB_CLEAR_REMAPPED_ROWS_PARAMS;
|
} NV208F_CTRL_FB_CLEAR_REMAPPED_ROWS_PARAMS;
|
||||||
|
|
||||||
/*
|
|
||||||
* NV208F_CTRL_CMD_FB_GET_FLOORSWEPT_FBPA_MASK
|
|
||||||
*
|
|
||||||
* This command calculates the floorswept fbpa mask by taking 1/2 HBM
|
|
||||||
* floorsweeping into account
|
|
||||||
*
|
|
||||||
* fbpaMask
|
|
||||||
* This value of the mask.
|
|
||||||
*
|
|
||||||
* Possbile status values returned are:
|
|
||||||
* NV_OK
|
|
||||||
* NV_ERR_NOT_SUPPORTED
|
|
||||||
*/
|
|
||||||
#define NV208F_CTRL_CMD_FB_GET_FLOORSWEPT_FBPA_MASK (0x208f0516) /* finn: Evaluated from "(FINN_NV20_SUBDEVICE_DIAG_FB_INTERFACE_ID << 8) | NV208F_CTRL_FB_GET_FLOORSWEPT_FBPA_MASK_PARAMS_MESSAGE_ID" */
|
|
||||||
|
|
||||||
#define NV208F_CTRL_FB_GET_FLOORSWEPT_FBPA_MASK_PARAMS_MESSAGE_ID (0x16U)
|
|
||||||
|
|
||||||
typedef struct NV208F_CTRL_FB_GET_FLOORSWEPT_FBPA_MASK_PARAMS {
|
|
||||||
NvU32 fbpaMask;
|
|
||||||
} NV208F_CTRL_FB_GET_FLOORSWEPT_FBPA_MASK_PARAMS;
|
|
||||||
|
|
||||||
/* _ctrl208ffb_h_ */
|
/* _ctrl208ffb_h_ */
|
||||||
|
@ -5200,11 +5200,13 @@ static NvBool EvoSetViewportInOut3(NVDevEvoPtr pDevEvo, const int head,
|
|||||||
const NVHwModeViewPortEvo *pViewPortMin,
|
const NVHwModeViewPortEvo *pViewPortMin,
|
||||||
const NVHwModeViewPortEvo *pViewPort,
|
const NVHwModeViewPortEvo *pViewPort,
|
||||||
const NVHwModeViewPortEvo *pViewPortMax,
|
const NVHwModeViewPortEvo *pViewPortMax,
|
||||||
NVEvoUpdateState *updateState)
|
NVEvoUpdateState *updateState,
|
||||||
|
NvU32 setWindowUsageBounds)
|
||||||
{
|
{
|
||||||
const NVEvoCapabilitiesPtr pEvoCaps = &pDevEvo->gpus[0].capabilities;
|
const NVEvoCapabilitiesPtr pEvoCaps = &pDevEvo->gpus[0].capabilities;
|
||||||
NVEvoChannelPtr pChannel = pDevEvo->core;
|
NVEvoChannelPtr pChannel = pDevEvo->core;
|
||||||
struct NvKmsScalingUsageBounds scalingUsageBounds = { };
|
struct NvKmsScalingUsageBounds scalingUsageBounds = { };
|
||||||
|
NvU32 win;
|
||||||
|
|
||||||
/* These methods should only apply to a single pDpy */
|
/* These methods should only apply to a single pDpy */
|
||||||
nvAssert(pDevEvo->subDevMaskStackDepth > 0);
|
nvAssert(pDevEvo->subDevMaskStackDepth > 0);
|
||||||
@ -5250,6 +5252,35 @@ static NvBool EvoSetViewportInOut3(NVDevEvoPtr pDevEvo, const int head,
|
|||||||
DRF_NUM(C37D, _HEAD_SET_MAX_OUTPUT_SCALE_FACTOR, _VERTICAL,
|
DRF_NUM(C37D, _HEAD_SET_MAX_OUTPUT_SCALE_FACTOR, _VERTICAL,
|
||||||
scalingUsageBounds.maxVDownscaleFactor));
|
scalingUsageBounds.maxVDownscaleFactor));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Program MAX_PIXELS_FETCHED_PER_LINE window usage bounds
|
||||||
|
* for each window that is attached to the head.
|
||||||
|
*
|
||||||
|
* Precomp will clip the post-scaled window to the input viewport, reverse-scale
|
||||||
|
* this cropped size back to the input surface domain, and isohub will fetch
|
||||||
|
* this cropped size. This function assumes that there's no window scaling yet,
|
||||||
|
* so the MAX_PIXELS_FETCHED_PER_LINE will be bounded by the input viewport
|
||||||
|
* width. SetScalingUsageBoundsOneWindow5() will take care of updating
|
||||||
|
* MAX_PIXELS_FETCHED_PER_LINE, if window scaling is enabled later.
|
||||||
|
*
|
||||||
|
* Program MAX_PIXELS_FETCHED_PER_LINE for each window that is attached to
|
||||||
|
* head. For Turing+, SetScalingUsageBoundsOneWindow5() will take care of
|
||||||
|
* programming window usage bounds only for the layers/windows in use.
|
||||||
|
*/
|
||||||
|
setWindowUsageBounds |=
|
||||||
|
DRF_NUM(C37D, _WINDOW_SET_WINDOW_USAGE_BOUNDS, _MAX_PIXELS_FETCHED_PER_LINE,
|
||||||
|
GetMaxPixelsFetchedPerLine(pViewPort->in.width,
|
||||||
|
NV_EVO_SCALE_FACTOR_1X));
|
||||||
|
|
||||||
|
for (win = 0; win < pDevEvo->numWindows; win++) {
|
||||||
|
if (head != pDevEvo->headForWindow[win]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
nvDmaSetStartEvoMethod(pChannel, NVC37D_WINDOW_SET_WINDOW_USAGE_BOUNDS(win), 1);
|
||||||
|
nvDmaSetEvoMethodData(pChannel, setWindowUsageBounds);
|
||||||
|
}
|
||||||
|
|
||||||
return scalingUsageBounds.vUpscalingAllowed;
|
return scalingUsageBounds.vUpscalingAllowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5260,11 +5291,10 @@ static void EvoSetViewportInOutC3(NVDevEvoPtr pDevEvo, const int head,
|
|||||||
NVEvoUpdateState *updateState)
|
NVEvoUpdateState *updateState)
|
||||||
{
|
{
|
||||||
NVEvoChannelPtr pChannel = pDevEvo->core;
|
NVEvoChannelPtr pChannel = pDevEvo->core;
|
||||||
NvU32 win;
|
|
||||||
NvU32 setWindowUsageBounds = NV_EVO3_DEFAULT_WINDOW_USAGE_BOUNDS_C3;
|
|
||||||
NvBool verticalUpscalingAllowed =
|
NvBool verticalUpscalingAllowed =
|
||||||
EvoSetViewportInOut3(pDevEvo, head, pViewPortMin, pViewPort,
|
EvoSetViewportInOut3(pDevEvo, head, pViewPortMin, pViewPort,
|
||||||
pViewPortMax, updateState);
|
pViewPortMax, updateState,
|
||||||
|
NV_EVO3_DEFAULT_WINDOW_USAGE_BOUNDS_C3);
|
||||||
|
|
||||||
nvDmaSetStartEvoMethod(pChannel,
|
nvDmaSetStartEvoMethod(pChannel,
|
||||||
NVC37D_HEAD_SET_HEAD_USAGE_BOUNDS(head), 1);
|
NVC37D_HEAD_SET_HEAD_USAGE_BOUNDS(head), 1);
|
||||||
@ -5274,34 +5304,6 @@ static void EvoSetViewportInOutC3(NVDevEvoPtr pDevEvo, const int head,
|
|||||||
(verticalUpscalingAllowed ?
|
(verticalUpscalingAllowed ?
|
||||||
DRF_DEF(C37D, _HEAD_SET_HEAD_USAGE_BOUNDS, _UPSCALING_ALLOWED, _TRUE) :
|
DRF_DEF(C37D, _HEAD_SET_HEAD_USAGE_BOUNDS, _UPSCALING_ALLOWED, _TRUE) :
|
||||||
DRF_DEF(C37D, _HEAD_SET_HEAD_USAGE_BOUNDS, _UPSCALING_ALLOWED, _FALSE)));
|
DRF_DEF(C37D, _HEAD_SET_HEAD_USAGE_BOUNDS, _UPSCALING_ALLOWED, _FALSE)));
|
||||||
/*
|
|
||||||
* Program MAX_PIXELS_FETCHED_PER_LINE window usage bounds
|
|
||||||
* for each window that is attached to the head.
|
|
||||||
*
|
|
||||||
* Precomp will clip the post-scaled window to the input viewport, reverse-scale
|
|
||||||
* this cropped size back to the input surface domain, and isohub will fetch
|
|
||||||
* this cropped size. This function assumes that there's no window scaling yet,
|
|
||||||
* so the MAX_PIXELS_FETCHED_PER_LINE will be bounded by the input viewport
|
|
||||||
* width. SetScalingUsageBoundsOneWindow5() will take care of updating
|
|
||||||
* MAX_PIXELS_FETCHED_PER_LINE, if window scaling is enabled later.
|
|
||||||
* On Volta, Program for each window that is attached to head. For turing+,
|
|
||||||
* SetScalingUsageBoundsOneWindow5() will take care of programming window
|
|
||||||
* usage bounds only for the layers/windows in use.
|
|
||||||
*/
|
|
||||||
|
|
||||||
setWindowUsageBounds |=
|
|
||||||
DRF_NUM(C37D, _WINDOW_SET_WINDOW_USAGE_BOUNDS, _MAX_PIXELS_FETCHED_PER_LINE,
|
|
||||||
GetMaxPixelsFetchedPerLine(pViewPort->in.width,
|
|
||||||
NV_EVO_SCALE_FACTOR_1X));
|
|
||||||
|
|
||||||
for (win = 0; win < pDevEvo->numWindows; win++) {
|
|
||||||
if (head != pDevEvo->headForWindow[win]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
nvDmaSetStartEvoMethod(pChannel, NVC37D_WINDOW_SET_WINDOW_USAGE_BOUNDS(win), 1);
|
|
||||||
nvDmaSetEvoMethodData(pChannel, setWindowUsageBounds);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void EvoSetViewportInOutC5(NVDevEvoPtr pDevEvo, const int head,
|
static void EvoSetViewportInOutC5(NVDevEvoPtr pDevEvo, const int head,
|
||||||
@ -5311,9 +5313,13 @@ static void EvoSetViewportInOutC5(NVDevEvoPtr pDevEvo, const int head,
|
|||||||
NVEvoUpdateState *updateState)
|
NVEvoUpdateState *updateState)
|
||||||
{
|
{
|
||||||
NVEvoChannelPtr pChannel = pDevEvo->core;
|
NVEvoChannelPtr pChannel = pDevEvo->core;
|
||||||
|
NvU32 setWindowUsageBounds =
|
||||||
|
(NV_EVO3_DEFAULT_WINDOW_USAGE_BOUNDS_C5 |
|
||||||
|
DRF_DEF(C57D, _WINDOW_SET_WINDOW_USAGE_BOUNDS, _INPUT_SCALER_TAPS, _TAPS_2) |
|
||||||
|
DRF_DEF(C57D, _WINDOW_SET_WINDOW_USAGE_BOUNDS, _UPSCALING_ALLOWED, _FALSE));
|
||||||
NvU32 verticalUpscalingAllowed =
|
NvU32 verticalUpscalingAllowed =
|
||||||
EvoSetViewportInOut3(pDevEvo, head, pViewPortMin, pViewPort,
|
EvoSetViewportInOut3(pDevEvo, head, pViewPortMin, pViewPort,
|
||||||
pViewPortMax, updateState);
|
pViewPortMax, updateState, setWindowUsageBounds);
|
||||||
|
|
||||||
nvDmaSetStartEvoMethod(pChannel,
|
nvDmaSetStartEvoMethod(pChannel,
|
||||||
NVC57D_HEAD_SET_HEAD_USAGE_BOUNDS(head), 1);
|
NVC57D_HEAD_SET_HEAD_USAGE_BOUNDS(head), 1);
|
||||||
|
@ -636,33 +636,27 @@ typedef enum
|
|||||||
#define NV_GET_NV_STATE(pGpu) \
|
#define NV_GET_NV_STATE(pGpu) \
|
||||||
(nv_state_t *)((pGpu) ? (pGpu)->pOsGpuInfo : NULL)
|
(nv_state_t *)((pGpu) ? (pGpu)->pOsGpuInfo : NULL)
|
||||||
|
|
||||||
static inline NvBool IS_REG_OFFSET(nv_state_t *nv, NvU64 offset, NvU64 length)
|
#define IS_REG_OFFSET(nv, offset, length) \
|
||||||
{
|
(((offset) >= (nv)->regs->cpu_address) && \
|
||||||
return ((offset >= nv->regs->cpu_address) &&
|
(((offset) + ((length)-1)) <= \
|
||||||
((offset + (length - 1)) <= (nv->regs->cpu_address + (nv->regs->size - 1))));
|
(nv)->regs->cpu_address + ((nv)->regs->size-1)))
|
||||||
}
|
|
||||||
|
|
||||||
static inline NvBool IS_FB_OFFSET(nv_state_t *nv, NvU64 offset, NvU64 length)
|
#define IS_FB_OFFSET(nv, offset, length) \
|
||||||
{
|
(((nv)->fb) && ((offset) >= (nv)->fb->cpu_address) && \
|
||||||
return ((nv->fb) && (offset >= nv->fb->cpu_address) &&
|
(((offset) + ((length)-1)) <= (nv)->fb->cpu_address + ((nv)->fb->size-1)))
|
||||||
((offset + (length - 1)) <= (nv->fb->cpu_address + (nv->fb->size - 1))));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline NvBool IS_UD_OFFSET(nv_state_t *nv, NvU64 offset, NvU64 length)
|
#define IS_UD_OFFSET(nv, offset, length) \
|
||||||
{
|
(((nv)->ud.cpu_address != 0) && ((nv)->ud.size != 0) && \
|
||||||
return ((nv->ud.cpu_address != 0) && (nv->ud.size != 0) &&
|
((offset) >= (nv)->ud.cpu_address) && \
|
||||||
(offset >= nv->ud.cpu_address) &&
|
(((offset) + ((length)-1)) <= (nv)->ud.cpu_address + ((nv)->ud.size-1)))
|
||||||
((offset + (length - 1)) <= (nv->ud.cpu_address + (nv->ud.size - 1))));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline NvBool IS_IMEM_OFFSET(nv_state_t *nv, NvU64 offset, NvU64 length)
|
#define IS_IMEM_OFFSET(nv, offset, length) \
|
||||||
{
|
(((nv)->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address != 0) && \
|
||||||
return ((nv->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address != 0) &&
|
((nv)->bars[NV_GPU_BAR_INDEX_IMEM].size != 0) && \
|
||||||
(nv->bars[NV_GPU_BAR_INDEX_IMEM].size != 0) &&
|
((offset) >= (nv)->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address) && \
|
||||||
(offset >= nv->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address) &&
|
(((offset) + ((length) - 1)) <= \
|
||||||
((offset + (length - 1)) <= (nv->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address +
|
(nv)->bars[NV_GPU_BAR_INDEX_IMEM].cpu_address + \
|
||||||
(nv->bars[NV_GPU_BAR_INDEX_IMEM].size - 1))));
|
((nv)->bars[NV_GPU_BAR_INDEX_IMEM].size - 1)))
|
||||||
}
|
|
||||||
|
|
||||||
#define NV_RM_MAX_MSIX_LINES 8
|
#define NV_RM_MAX_MSIX_LINES 8
|
||||||
|
|
||||||
|
@ -780,8 +780,10 @@ static NV_STATUS RmAccessRegistry(
|
|||||||
RmStatus = NV_ERR_INVALID_STRING_LENGTH;
|
RmStatus = NV_ERR_INVALID_STRING_LENGTH;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get access to client's parmStr
|
// get access to client's parmStr
|
||||||
RMAPI_PARAM_COPY_INIT(parmStrParamCopy, tmpParmStr, clientParmStrAddress, ParmStrLength, 1);
|
RMAPI_PARAM_COPY_INIT(parmStrParamCopy, tmpParmStr, clientParmStrAddress, ParmStrLength, 1);
|
||||||
|
parmStrParamCopy.flags |= RMAPI_PARAM_COPY_FLAGS_ZERO_BUFFER;
|
||||||
RmStatus = rmapiParamsAcquire(&parmStrParamCopy, NV_TRUE);
|
RmStatus = rmapiParamsAcquire(&parmStrParamCopy, NV_TRUE);
|
||||||
if (RmStatus != NV_OK)
|
if (RmStatus != NV_OK)
|
||||||
{
|
{
|
||||||
@ -2027,7 +2029,6 @@ static NV_STATUS RmGetAllocPrivate(
|
|||||||
PMEMORY_DESCRIPTOR pMemDesc;
|
PMEMORY_DESCRIPTOR pMemDesc;
|
||||||
NvU32 pageOffset;
|
NvU32 pageOffset;
|
||||||
NvU64 pageCount;
|
NvU64 pageCount;
|
||||||
NvU64 endingOffset;
|
|
||||||
RsResourceRef *pResourceRef;
|
RsResourceRef *pResourceRef;
|
||||||
RmResource *pRmResource;
|
RmResource *pRmResource;
|
||||||
void *pMemData;
|
void *pMemData;
|
||||||
@ -2088,9 +2089,8 @@ static NV_STATUS RmGetAllocPrivate(
|
|||||||
if (rmStatus != NV_OK)
|
if (rmStatus != NV_OK)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
endingOffset = pageOffset + length;
|
pageCount = ((pageOffset + length) / os_page_size);
|
||||||
pageCount = (endingOffset / os_page_size);
|
pageCount += (*pPageIndex + (((pageOffset + length) % os_page_size) ? 1 : 0));
|
||||||
pageCount += (*pPageIndex + ((endingOffset % os_page_size) ? 1 : 0));
|
|
||||||
|
|
||||||
if (pageCount > NV_RM_PAGES_TO_OS_PAGES(pMemDesc->PageCount))
|
if (pageCount > NV_RM_PAGES_TO_OS_PAGES(pMemDesc->PageCount))
|
||||||
{
|
{
|
||||||
|
@ -638,15 +638,6 @@ osInitNvMapping(
|
|||||||
sysApplyLockingPolicy(pSys);
|
sysApplyLockingPolicy(pSys);
|
||||||
|
|
||||||
pGpu->busInfo.IntLine = nv->interrupt_line;
|
pGpu->busInfo.IntLine = nv->interrupt_line;
|
||||||
|
|
||||||
//
|
|
||||||
// Set the DMA address size as soon as we have the HAL to call to
|
|
||||||
// determine the precise number of physical address bits supported
|
|
||||||
// by the architecture. DMA allocations should not be made before
|
|
||||||
// this point.
|
|
||||||
//
|
|
||||||
nv_set_dma_address_size(nv, gpuGetPhysAddrWidth_HAL(pGpu, ADDR_SYSMEM));
|
|
||||||
|
|
||||||
pGpu->dmaStartAddress = (RmPhysAddr)nv_get_dma_start_address(nv);
|
pGpu->dmaStartAddress = (RmPhysAddr)nv_get_dma_start_address(nv);
|
||||||
if (nv->fb != NULL)
|
if (nv->fb != NULL)
|
||||||
{
|
{
|
||||||
@ -735,6 +726,15 @@ osTeardownScalability(
|
|||||||
return clTeardownPcie(pGpu, pCl);
|
return clTeardownPcie(pGpu, pCl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
RmSetDeviceDmaAddressSize(
|
||||||
|
nv_state_t *nv,
|
||||||
|
NvU8 numDmaAddressBits
|
||||||
|
)
|
||||||
|
{
|
||||||
|
nv_set_dma_address_size(nv, numDmaAddressBits);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
populateDeviceAttributes(
|
populateDeviceAttributes(
|
||||||
OBJGPU *pGpu,
|
OBJGPU *pGpu,
|
||||||
@ -884,6 +884,8 @@ RmInitNvDevice(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RmSetDeviceDmaAddressSize(nv, gpuGetPhysAddrWidth_HAL(pGpu, ADDR_SYSMEM));
|
||||||
|
|
||||||
os_disable_console_access();
|
os_disable_console_access();
|
||||||
|
|
||||||
status->rmStatus = gpumgrStateInitGpu(pGpu);
|
status->rmStatus = gpumgrStateInitGpu(pGpu);
|
||||||
@ -1187,7 +1189,7 @@ NvBool RmInitPrivateState(
|
|||||||
// Set up a reasonable default DMA address size, based on the minimum
|
// Set up a reasonable default DMA address size, based on the minimum
|
||||||
// possible on currently supported GPUs.
|
// possible on currently supported GPUs.
|
||||||
//
|
//
|
||||||
nv_set_dma_address_size(pNv, NV_GPU_MIN_SUPPORTED_DMA_ADDR_WIDTH);
|
RmSetDeviceDmaAddressSize(pNv, NV_GPU_MIN_SUPPORTED_DMA_ADDR_WIDTH);
|
||||||
|
|
||||||
os_mem_set(nvp, 0, sizeof(*nvp));
|
os_mem_set(nvp, 0, sizeof(*nvp));
|
||||||
nvp->status = NV_ERR_INVALID_STATE;
|
nvp->status = NV_ERR_INVALID_STATE;
|
||||||
@ -1581,7 +1583,7 @@ NvBool RmInitAdapter(
|
|||||||
//
|
//
|
||||||
if (nv->request_firmware)
|
if (nv->request_firmware)
|
||||||
{
|
{
|
||||||
nv_set_dma_address_size(nv, NV_GSP_GPU_MIN_SUPPORTED_DMA_ADDR_WIDTH);
|
RmSetDeviceDmaAddressSize(nv, NV_GSP_GPU_MIN_SUPPORTED_DMA_ADDR_WIDTH);
|
||||||
|
|
||||||
gspFwHandle = nv_get_firmware(nv, NV_FIRMWARE_GSP,
|
gspFwHandle = nv_get_firmware(nv, NV_FIRMWARE_GSP,
|
||||||
&gspFw.pBuf,
|
&gspFw.pBuf,
|
||||||
|
@ -214,17 +214,6 @@ void __nvoc_init_dataField_KernelNvlink(KernelNvlink *pThis, RmHalspecOwner *pRm
|
|||||||
pThis->setProperty(pThis, PDB_PROP_KNVLINK_UNSET_NVLINK_PEER_REFCNT, ((NvBool)(0 == 0)));
|
pThis->setProperty(pThis, PDB_PROP_KNVLINK_UNSET_NVLINK_PEER_REFCNT, ((NvBool)(0 == 0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// NVOC Property Hal field -- PDB_PROP_KNVLINK_CONFIG_REQUIRE_INITIALIZED_LINKS_CHECK
|
|
||||||
if (( ((chipHal_HalVarIdx >> 5) == 1UL) && ((1UL << (chipHal_HalVarIdx & 0x1f)) & 0x08000000UL) )) /* ChipHal: GH100 */
|
|
||||||
{
|
|
||||||
pThis->setProperty(pThis, PDB_PROP_KNVLINK_CONFIG_REQUIRE_INITIALIZED_LINKS_CHECK, ((NvBool)(0 == 0)));
|
|
||||||
}
|
|
||||||
// default
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pThis->setProperty(pThis, PDB_PROP_KNVLINK_CONFIG_REQUIRE_INITIALIZED_LINKS_CHECK, ((NvBool)(0 != 0)));
|
|
||||||
}
|
|
||||||
|
|
||||||
// NVOC Property Hal field -- PDB_PROP_KNVLINK_DECONFIG_HSHUB_ON_NO_MAPPING
|
// NVOC Property Hal field -- PDB_PROP_KNVLINK_DECONFIG_HSHUB_ON_NO_MAPPING
|
||||||
if (( ((chipHal_HalVarIdx >> 5) == 1UL) && ((1UL << (chipHal_HalVarIdx & 0x1f)) & 0x0870fc00UL) )) /* ChipHal: GA100 | GA102 | GA103 | GA104 | GA106 | GA107 | AD102 | AD103 | AD104 | GH100 */
|
if (( ((chipHal_HalVarIdx >> 5) == 1UL) && ((1UL << (chipHal_HalVarIdx & 0x1f)) & 0x0870fc00UL) )) /* ChipHal: GA100 | GA102 | GA103 | GA104 | GA106 | GA107 | AD102 | AD103 | AD104 | GH100 */
|
||||||
{
|
{
|
||||||
@ -646,22 +635,6 @@ static void __nvoc_init_funcTable_KernelNvlink_1(KernelNvlink *pThis, RmHalspecO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hal function -- knvlinkIsFloorSweepingNeeded
|
|
||||||
if (0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else if (( ((rmVariantHal_HalVarIdx >> 5) == 0UL) && ((1UL << (rmVariantHal_HalVarIdx & 0x1f)) & 0x00000002UL) )) /* RmVariantHal: PF_KERNEL_ONLY */
|
|
||||||
{
|
|
||||||
if (( ((chipHal_HalVarIdx >> 5) == 1UL) && ((1UL << (chipHal_HalVarIdx & 0x1f)) & 0x08000000UL) )) /* ChipHal: GH100 */
|
|
||||||
{
|
|
||||||
pThis->__knvlinkIsFloorSweepingNeeded__ = &knvlinkIsFloorSweepingNeeded_GH100;
|
|
||||||
}
|
|
||||||
else if (( ((chipHal_HalVarIdx >> 5) == 1UL) && ((1UL << (chipHal_HalVarIdx & 0x1f)) & 0x0070ffe0UL) )) /* ChipHal: TU102 | TU104 | TU106 | TU116 | TU117 | GA100 | GA102 | GA103 | GA104 | GA106 | GA107 | AD102 | AD103 | AD104 */
|
|
||||||
{
|
|
||||||
pThis->__knvlinkIsFloorSweepingNeeded__ = &knvlinkIsFloorSweepingNeeded_491d52;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pThis->__nvoc_base_OBJENGSTATE.__engstateConstructEngine__ = &__nvoc_thunk_KernelNvlink_engstateConstructEngine;
|
pThis->__nvoc_base_OBJENGSTATE.__engstateConstructEngine__ = &__nvoc_thunk_KernelNvlink_engstateConstructEngine;
|
||||||
|
|
||||||
pThis->__nvoc_base_OBJENGSTATE.__engstateStatePreInitLocked__ = &__nvoc_thunk_KernelNvlink_engstateStatePreInitLocked;
|
pThis->__nvoc_base_OBJENGSTATE.__engstateStatePreInitLocked__ = &__nvoc_thunk_KernelNvlink_engstateStatePreInitLocked;
|
||||||
|
@ -218,7 +218,6 @@ struct KernelNvlink {
|
|||||||
NV_STATUS (*__knvlinkIsAliSupported__)(OBJGPU *, struct KernelNvlink *);
|
NV_STATUS (*__knvlinkIsAliSupported__)(OBJGPU *, struct KernelNvlink *);
|
||||||
NV_STATUS (*__knvlinkPostSetupNvlinkPeer__)(OBJGPU *, struct KernelNvlink *);
|
NV_STATUS (*__knvlinkPostSetupNvlinkPeer__)(OBJGPU *, struct KernelNvlink *);
|
||||||
NV_STATUS (*__knvlinkDiscoverPostRxDetLinks__)(OBJGPU *, struct KernelNvlink *, OBJGPU *);
|
NV_STATUS (*__knvlinkDiscoverPostRxDetLinks__)(OBJGPU *, struct KernelNvlink *, OBJGPU *);
|
||||||
NvBool (*__knvlinkIsFloorSweepingNeeded__)(OBJGPU *, struct KernelNvlink *, NvU32, NvU32);
|
|
||||||
NV_STATUS (*__knvlinkReconcileTunableState__)(POBJGPU, struct KernelNvlink *, void *);
|
NV_STATUS (*__knvlinkReconcileTunableState__)(POBJGPU, struct KernelNvlink *, void *);
|
||||||
NV_STATUS (*__knvlinkStateInitLocked__)(POBJGPU, struct KernelNvlink *);
|
NV_STATUS (*__knvlinkStateInitLocked__)(POBJGPU, struct KernelNvlink *);
|
||||||
NV_STATUS (*__knvlinkStatePreLoad__)(POBJGPU, struct KernelNvlink *, NvU32);
|
NV_STATUS (*__knvlinkStatePreLoad__)(POBJGPU, struct KernelNvlink *, NvU32);
|
||||||
@ -237,7 +236,6 @@ struct KernelNvlink {
|
|||||||
NvBool PDB_PROP_KNVLINK_L2_POWER_STATE_ENABLED;
|
NvBool PDB_PROP_KNVLINK_L2_POWER_STATE_ENABLED;
|
||||||
NvBool PDB_PROP_KNVLINK_UNSET_NVLINK_PEER_SUPPORTED;
|
NvBool PDB_PROP_KNVLINK_UNSET_NVLINK_PEER_SUPPORTED;
|
||||||
NvBool PDB_PROP_KNVLINK_UNSET_NVLINK_PEER_REFCNT;
|
NvBool PDB_PROP_KNVLINK_UNSET_NVLINK_PEER_REFCNT;
|
||||||
NvBool PDB_PROP_KNVLINK_CONFIG_REQUIRE_INITIALIZED_LINKS_CHECK;
|
|
||||||
NvBool PDB_PROP_KNVLINK_DECONFIG_HSHUB_ON_NO_MAPPING;
|
NvBool PDB_PROP_KNVLINK_DECONFIG_HSHUB_ON_NO_MAPPING;
|
||||||
NvBool PDB_PROP_KNVLINK_LANE_SHUTDOWN_ENABLED;
|
NvBool PDB_PROP_KNVLINK_LANE_SHUTDOWN_ENABLED;
|
||||||
NvBool PDB_PROP_KNVLINK_LANE_SHUTDOWN_ON_UNLOAD;
|
NvBool PDB_PROP_KNVLINK_LANE_SHUTDOWN_ON_UNLOAD;
|
||||||
@ -318,16 +316,12 @@ extern const struct NVOC_CLASS_DEF __nvoc_class_def_KernelNvlink;
|
|||||||
((KernelNvlink*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(KernelNvlink)))
|
((KernelNvlink*)__nvoc_dynamicCast(staticCast((pThis), Dynamic), classInfo(KernelNvlink)))
|
||||||
#endif //__nvoc_kernel_nvlink_h_disabled
|
#endif //__nvoc_kernel_nvlink_h_disabled
|
||||||
|
|
||||||
#define PDB_PROP_KNVLINK_WAR_BUG_3471679_PEERID_FILTERING_BASE_CAST
|
|
||||||
#define PDB_PROP_KNVLINK_WAR_BUG_3471679_PEERID_FILTERING_BASE_NAME PDB_PROP_KNVLINK_WAR_BUG_3471679_PEERID_FILTERING
|
|
||||||
#define PDB_PROP_KNVLINK_MINION_GFW_BOOT_BASE_CAST
|
#define PDB_PROP_KNVLINK_MINION_GFW_BOOT_BASE_CAST
|
||||||
#define PDB_PROP_KNVLINK_MINION_GFW_BOOT_BASE_NAME PDB_PROP_KNVLINK_MINION_GFW_BOOT
|
#define PDB_PROP_KNVLINK_MINION_GFW_BOOT_BASE_NAME PDB_PROP_KNVLINK_MINION_GFW_BOOT
|
||||||
#define PDB_PROP_KNVLINK_CONFIG_REQUIRE_INITIALIZED_LINKS_CHECK_BASE_CAST
|
|
||||||
#define PDB_PROP_KNVLINK_CONFIG_REQUIRE_INITIALIZED_LINKS_CHECK_BASE_NAME PDB_PROP_KNVLINK_CONFIG_REQUIRE_INITIALIZED_LINKS_CHECK
|
|
||||||
#define PDB_PROP_KNVLINK_LANE_SHUTDOWN_ENABLED_BASE_CAST
|
|
||||||
#define PDB_PROP_KNVLINK_LANE_SHUTDOWN_ENABLED_BASE_NAME PDB_PROP_KNVLINK_LANE_SHUTDOWN_ENABLED
|
|
||||||
#define PDB_PROP_KNVLINK_SYSMEM_SUPPORT_ENABLED_BASE_CAST
|
#define PDB_PROP_KNVLINK_SYSMEM_SUPPORT_ENABLED_BASE_CAST
|
||||||
#define PDB_PROP_KNVLINK_SYSMEM_SUPPORT_ENABLED_BASE_NAME PDB_PROP_KNVLINK_SYSMEM_SUPPORT_ENABLED
|
#define PDB_PROP_KNVLINK_SYSMEM_SUPPORT_ENABLED_BASE_NAME PDB_PROP_KNVLINK_SYSMEM_SUPPORT_ENABLED
|
||||||
|
#define PDB_PROP_KNVLINK_LANE_SHUTDOWN_ENABLED_BASE_CAST
|
||||||
|
#define PDB_PROP_KNVLINK_LANE_SHUTDOWN_ENABLED_BASE_NAME PDB_PROP_KNVLINK_LANE_SHUTDOWN_ENABLED
|
||||||
#define PDB_PROP_KNVLINK_MINION_FORCE_ALI_TRAINING_BASE_CAST
|
#define PDB_PROP_KNVLINK_MINION_FORCE_ALI_TRAINING_BASE_CAST
|
||||||
#define PDB_PROP_KNVLINK_MINION_FORCE_ALI_TRAINING_BASE_NAME PDB_PROP_KNVLINK_MINION_FORCE_ALI_TRAINING
|
#define PDB_PROP_KNVLINK_MINION_FORCE_ALI_TRAINING_BASE_NAME PDB_PROP_KNVLINK_MINION_FORCE_ALI_TRAINING
|
||||||
#define PDB_PROP_KNVLINK_ENABLED_BASE_CAST
|
#define PDB_PROP_KNVLINK_ENABLED_BASE_CAST
|
||||||
@ -342,10 +336,12 @@ extern const struct NVOC_CLASS_DEF __nvoc_class_def_KernelNvlink;
|
|||||||
#define PDB_PROP_KNVLINK_L2_POWER_STATE_ENABLED_BASE_NAME PDB_PROP_KNVLINK_L2_POWER_STATE_ENABLED
|
#define PDB_PROP_KNVLINK_L2_POWER_STATE_ENABLED_BASE_NAME PDB_PROP_KNVLINK_L2_POWER_STATE_ENABLED
|
||||||
#define PDB_PROP_KNVLINK_IS_MISSING_BASE_CAST __nvoc_base_OBJENGSTATE.
|
#define PDB_PROP_KNVLINK_IS_MISSING_BASE_CAST __nvoc_base_OBJENGSTATE.
|
||||||
#define PDB_PROP_KNVLINK_IS_MISSING_BASE_NAME PDB_PROP_ENGSTATE_IS_MISSING
|
#define PDB_PROP_KNVLINK_IS_MISSING_BASE_NAME PDB_PROP_ENGSTATE_IS_MISSING
|
||||||
#define PDB_PROP_KNVLINK_BUG2274645_RESET_FOR_RTD3_FGC6_BASE_CAST
|
#define PDB_PROP_KNVLINK_WAR_BUG_3471679_PEERID_FILTERING_BASE_CAST
|
||||||
#define PDB_PROP_KNVLINK_BUG2274645_RESET_FOR_RTD3_FGC6_BASE_NAME PDB_PROP_KNVLINK_BUG2274645_RESET_FOR_RTD3_FGC6
|
#define PDB_PROP_KNVLINK_WAR_BUG_3471679_PEERID_FILTERING_BASE_NAME PDB_PROP_KNVLINK_WAR_BUG_3471679_PEERID_FILTERING
|
||||||
#define PDB_PROP_KNVLINK_SINGLE_LANE_POWER_STATE_ENABLED_BASE_CAST
|
#define PDB_PROP_KNVLINK_SINGLE_LANE_POWER_STATE_ENABLED_BASE_CAST
|
||||||
#define PDB_PROP_KNVLINK_SINGLE_LANE_POWER_STATE_ENABLED_BASE_NAME PDB_PROP_KNVLINK_SINGLE_LANE_POWER_STATE_ENABLED
|
#define PDB_PROP_KNVLINK_SINGLE_LANE_POWER_STATE_ENABLED_BASE_NAME PDB_PROP_KNVLINK_SINGLE_LANE_POWER_STATE_ENABLED
|
||||||
|
#define PDB_PROP_KNVLINK_BUG2274645_RESET_FOR_RTD3_FGC6_BASE_CAST
|
||||||
|
#define PDB_PROP_KNVLINK_BUG2274645_RESET_FOR_RTD3_FGC6_BASE_NAME PDB_PROP_KNVLINK_BUG2274645_RESET_FOR_RTD3_FGC6
|
||||||
#define PDB_PROP_KNVLINK_LANE_SHUTDOWN_ON_UNLOAD_BASE_CAST
|
#define PDB_PROP_KNVLINK_LANE_SHUTDOWN_ON_UNLOAD_BASE_CAST
|
||||||
#define PDB_PROP_KNVLINK_LANE_SHUTDOWN_ON_UNLOAD_BASE_NAME PDB_PROP_KNVLINK_LANE_SHUTDOWN_ON_UNLOAD
|
#define PDB_PROP_KNVLINK_LANE_SHUTDOWN_ON_UNLOAD_BASE_NAME PDB_PROP_KNVLINK_LANE_SHUTDOWN_ON_UNLOAD
|
||||||
#define PDB_PROP_KNVLINK_DECONFIG_HSHUB_ON_NO_MAPPING_BASE_CAST
|
#define PDB_PROP_KNVLINK_DECONFIG_HSHUB_ON_NO_MAPPING_BASE_CAST
|
||||||
@ -400,8 +396,6 @@ NV_STATUS __nvoc_objCreate_KernelNvlink(KernelNvlink**, Dynamic*, NvU32);
|
|||||||
#define knvlinkPostSetupNvlinkPeer_HAL(pGpu, pKernelNvlink) knvlinkPostSetupNvlinkPeer_DISPATCH(pGpu, pKernelNvlink)
|
#define knvlinkPostSetupNvlinkPeer_HAL(pGpu, pKernelNvlink) knvlinkPostSetupNvlinkPeer_DISPATCH(pGpu, pKernelNvlink)
|
||||||
#define knvlinkDiscoverPostRxDetLinks(pGpu, pKernelNvlink, pPeerGpu) knvlinkDiscoverPostRxDetLinks_DISPATCH(pGpu, pKernelNvlink, pPeerGpu)
|
#define knvlinkDiscoverPostRxDetLinks(pGpu, pKernelNvlink, pPeerGpu) knvlinkDiscoverPostRxDetLinks_DISPATCH(pGpu, pKernelNvlink, pPeerGpu)
|
||||||
#define knvlinkDiscoverPostRxDetLinks_HAL(pGpu, pKernelNvlink, pPeerGpu) knvlinkDiscoverPostRxDetLinks_DISPATCH(pGpu, pKernelNvlink, pPeerGpu)
|
#define knvlinkDiscoverPostRxDetLinks_HAL(pGpu, pKernelNvlink, pPeerGpu) knvlinkDiscoverPostRxDetLinks_DISPATCH(pGpu, pKernelNvlink, pPeerGpu)
|
||||||
#define knvlinkIsFloorSweepingNeeded(pGpu, pKernelNvlink, numActiveLinksPerIoctrl, numLinksPerIoctrl) knvlinkIsFloorSweepingNeeded_DISPATCH(pGpu, pKernelNvlink, numActiveLinksPerIoctrl, numLinksPerIoctrl)
|
|
||||||
#define knvlinkIsFloorSweepingNeeded_HAL(pGpu, pKernelNvlink, numActiveLinksPerIoctrl, numLinksPerIoctrl) knvlinkIsFloorSweepingNeeded_DISPATCH(pGpu, pKernelNvlink, numActiveLinksPerIoctrl, numLinksPerIoctrl)
|
|
||||||
#define knvlinkReconcileTunableState(pGpu, pEngstate, pTunableState) knvlinkReconcileTunableState_DISPATCH(pGpu, pEngstate, pTunableState)
|
#define knvlinkReconcileTunableState(pGpu, pEngstate, pTunableState) knvlinkReconcileTunableState_DISPATCH(pGpu, pEngstate, pTunableState)
|
||||||
#define knvlinkStateInitLocked(pGpu, pEngstate) knvlinkStateInitLocked_DISPATCH(pGpu, pEngstate)
|
#define knvlinkStateInitLocked(pGpu, pEngstate) knvlinkStateInitLocked_DISPATCH(pGpu, pEngstate)
|
||||||
#define knvlinkStatePreLoad(pGpu, pEngstate, arg0) knvlinkStatePreLoad_DISPATCH(pGpu, pEngstate, arg0)
|
#define knvlinkStatePreLoad(pGpu, pEngstate, arg0) knvlinkStatePreLoad_DISPATCH(pGpu, pEngstate, arg0)
|
||||||
@ -1074,19 +1068,6 @@ static inline NV_STATUS knvlinkSetUniqueFlaBaseAddress(OBJGPU *pGpu, struct Kern
|
|||||||
|
|
||||||
#define knvlinkSetUniqueFlaBaseAddress_HAL(pGpu, pKernelNvlink, arg0) knvlinkSetUniqueFlaBaseAddress(pGpu, pKernelNvlink, arg0)
|
#define knvlinkSetUniqueFlaBaseAddress_HAL(pGpu, pKernelNvlink, arg0) knvlinkSetUniqueFlaBaseAddress(pGpu, pKernelNvlink, arg0)
|
||||||
|
|
||||||
NV_STATUS knvlinkFloorSweep_IMPL(OBJGPU *pGpu, struct KernelNvlink *pKernelNvlink, NvU32 numLinksPerIp, NvU32 *pNumActiveLinks);
|
|
||||||
|
|
||||||
#ifdef __nvoc_kernel_nvlink_h_disabled
|
|
||||||
static inline NV_STATUS knvlinkFloorSweep(OBJGPU *pGpu, struct KernelNvlink *pKernelNvlink, NvU32 numLinksPerIp, NvU32 *pNumActiveLinks) {
|
|
||||||
NV_ASSERT_FAILED_PRECOMP("KernelNvlink was disabled!");
|
|
||||||
return NV_ERR_NOT_SUPPORTED;
|
|
||||||
}
|
|
||||||
#else //__nvoc_kernel_nvlink_h_disabled
|
|
||||||
#define knvlinkFloorSweep(pGpu, pKernelNvlink, numLinksPerIp, pNumActiveLinks) knvlinkFloorSweep_IMPL(pGpu, pKernelNvlink, numLinksPerIp, pNumActiveLinks)
|
|
||||||
#endif //__nvoc_kernel_nvlink_h_disabled
|
|
||||||
|
|
||||||
#define knvlinkFloorSweep_HAL(pGpu, pKernelNvlink, numLinksPerIp, pNumActiveLinks) knvlinkFloorSweep(pGpu, pKernelNvlink, numLinksPerIp, pNumActiveLinks)
|
|
||||||
|
|
||||||
static inline NvU64 knvlinkGetUniqueFabricBaseAddress_72249a(OBJGPU *pGpu, struct KernelNvlink *pKernelNvlink) {
|
static inline NvU64 knvlinkGetUniqueFabricBaseAddress_72249a(OBJGPU *pGpu, struct KernelNvlink *pKernelNvlink) {
|
||||||
return pKernelNvlink->fabricBaseAddr;
|
return pKernelNvlink->fabricBaseAddr;
|
||||||
}
|
}
|
||||||
@ -1391,16 +1372,6 @@ static inline NV_STATUS knvlinkDiscoverPostRxDetLinks_DISPATCH(OBJGPU *pGpu, str
|
|||||||
return pKernelNvlink->__knvlinkDiscoverPostRxDetLinks__(pGpu, pKernelNvlink, pPeerGpu);
|
return pKernelNvlink->__knvlinkDiscoverPostRxDetLinks__(pGpu, pKernelNvlink, pPeerGpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline NvBool knvlinkIsFloorSweepingNeeded_491d52(OBJGPU *pGpu, struct KernelNvlink *pKernelNvlink, NvU32 numActiveLinksPerIoctrl, NvU32 numLinksPerIoctrl) {
|
|
||||||
return ((NvBool)(0 != 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
NvBool knvlinkIsFloorSweepingNeeded_GH100(OBJGPU *pGpu, struct KernelNvlink *pKernelNvlink, NvU32 numActiveLinksPerIoctrl, NvU32 numLinksPerIoctrl);
|
|
||||||
|
|
||||||
static inline NvBool knvlinkIsFloorSweepingNeeded_DISPATCH(OBJGPU *pGpu, struct KernelNvlink *pKernelNvlink, NvU32 numActiveLinksPerIoctrl, NvU32 numLinksPerIoctrl) {
|
|
||||||
return pKernelNvlink->__knvlinkIsFloorSweepingNeeded__(pGpu, pKernelNvlink, numActiveLinksPerIoctrl, numLinksPerIoctrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline NV_STATUS knvlinkReconcileTunableState_DISPATCH(POBJGPU pGpu, struct KernelNvlink *pEngstate, void *pTunableState) {
|
static inline NV_STATUS knvlinkReconcileTunableState_DISPATCH(POBJGPU pGpu, struct KernelNvlink *pEngstate, void *pTunableState) {
|
||||||
return pEngstate->__knvlinkReconcileTunableState__(pGpu, pEngstate, pTunableState);
|
return pEngstate->__knvlinkReconcileTunableState__(pGpu, pEngstate, pTunableState);
|
||||||
}
|
}
|
||||||
|
@ -1077,7 +1077,6 @@ void memdescUnmapInternal(OBJGPU *pGpu, MEMORY_DESCRIPTOR *pMemDesc, NvU32 flags
|
|||||||
// currently for this, so a WAR is required for r515. The intent
|
// currently for this, so a WAR is required for r515. The intent
|
||||||
// is to remove this by r525.
|
// is to remove this by r525.
|
||||||
//
|
//
|
||||||
#define MEMDESC_FLAGS_WSL_SHARED_MEMORY NVBIT64(46)
|
|
||||||
|
|
||||||
#endif // _MEMDESC_H_
|
#endif // _MEMDESC_H_
|
||||||
|
|
||||||
|
@ -849,6 +849,7 @@ static const CHIPS_RELEASED sChipsReleased[] = {
|
|||||||
{ 0x2203, 0x0000, 0x0000, "NVIDIA GeForce RTX 3090 Ti" },
|
{ 0x2203, 0x0000, 0x0000, "NVIDIA GeForce RTX 3090 Ti" },
|
||||||
{ 0x2204, 0x0000, 0x0000, "NVIDIA GeForce RTX 3090" },
|
{ 0x2204, 0x0000, 0x0000, "NVIDIA GeForce RTX 3090" },
|
||||||
{ 0x2206, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080" },
|
{ 0x2206, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080" },
|
||||||
|
{ 0x2207, 0x0000, 0x0000, "NVIDIA GeForce RTX 3070 Ti" },
|
||||||
{ 0x2208, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080 Ti" },
|
{ 0x2208, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080 Ti" },
|
||||||
{ 0x220A, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080" },
|
{ 0x220A, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080" },
|
||||||
{ 0x220D, 0x0000, 0x0000, "NVIDIA CMP 90HX" },
|
{ 0x220D, 0x0000, 0x0000, "NVIDIA CMP 90HX" },
|
||||||
@ -873,6 +874,7 @@ static const CHIPS_RELEASED sChipsReleased[] = {
|
|||||||
{ 0x2236, 0x1482, 0x10de, "NVIDIA A10" },
|
{ 0x2236, 0x1482, 0x10de, "NVIDIA A10" },
|
||||||
{ 0x2237, 0x152f, 0x10de, "NVIDIA A10G" },
|
{ 0x2237, 0x152f, 0x10de, "NVIDIA A10G" },
|
||||||
{ 0x2238, 0x1677, 0x10de, "NVIDIA A10M" },
|
{ 0x2238, 0x1677, 0x10de, "NVIDIA A10M" },
|
||||||
|
{ 0x2331, 0x1626, 0x10de, "NVIDIA H100 PCIe" },
|
||||||
{ 0x2414, 0x0000, 0x0000, "NVIDIA GeForce RTX 3060 Ti" },
|
{ 0x2414, 0x0000, 0x0000, "NVIDIA GeForce RTX 3060 Ti" },
|
||||||
{ 0x2420, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080 Ti Laptop GPU" },
|
{ 0x2420, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080 Ti Laptop GPU" },
|
||||||
{ 0x2438, 0x0000, 0x0000, "NVIDIA RTX A5500 Laptop GPU" },
|
{ 0x2438, 0x0000, 0x0000, "NVIDIA RTX A5500 Laptop GPU" },
|
||||||
@ -900,6 +902,7 @@ static const CHIPS_RELEASED sChipsReleased[] = {
|
|||||||
{ 0x24B9, 0x0000, 0x0000, "NVIDIA RTX A3000 12GB Laptop GPU" },
|
{ 0x24B9, 0x0000, 0x0000, "NVIDIA RTX A3000 12GB Laptop GPU" },
|
||||||
{ 0x24BA, 0x0000, 0x0000, "NVIDIA RTX A4500 Laptop GPU" },
|
{ 0x24BA, 0x0000, 0x0000, "NVIDIA RTX A4500 Laptop GPU" },
|
||||||
{ 0x24BB, 0x0000, 0x0000, "NVIDIA RTX A3000 12GB Laptop GPU" },
|
{ 0x24BB, 0x0000, 0x0000, "NVIDIA RTX A3000 12GB Laptop GPU" },
|
||||||
|
{ 0x24C9, 0x0000, 0x0000, "NVIDIA GeForce RTX 3060 Ti" },
|
||||||
{ 0x24DC, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080 Laptop GPU" },
|
{ 0x24DC, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080 Laptop GPU" },
|
||||||
{ 0x24DD, 0x0000, 0x0000, "NVIDIA GeForce RTX 3070 Laptop GPU" },
|
{ 0x24DD, 0x0000, 0x0000, "NVIDIA GeForce RTX 3070 Laptop GPU" },
|
||||||
{ 0x24E0, 0x0000, 0x0000, "NVIDIA GeForce RTX 3070 Ti Laptop GPU" },
|
{ 0x24E0, 0x0000, 0x0000, "NVIDIA GeForce RTX 3070 Ti Laptop GPU" },
|
||||||
@ -915,6 +918,7 @@ static const CHIPS_RELEASED sChipsReleased[] = {
|
|||||||
{ 0x2531, 0x151d, 0x103c, "NVIDIA RTX A2000" },
|
{ 0x2531, 0x151d, 0x103c, "NVIDIA RTX A2000" },
|
||||||
{ 0x2531, 0x151d, 0x10de, "NVIDIA RTX A2000" },
|
{ 0x2531, 0x151d, 0x10de, "NVIDIA RTX A2000" },
|
||||||
{ 0x2531, 0x151d, 0x17aa, "NVIDIA RTX A2000" },
|
{ 0x2531, 0x151d, 0x17aa, "NVIDIA RTX A2000" },
|
||||||
|
{ 0x2544, 0x0000, 0x0000, "NVIDIA GeForce RTX 3060" },
|
||||||
{ 0x2560, 0x0000, 0x0000, "NVIDIA GeForce RTX 3060 Laptop GPU" },
|
{ 0x2560, 0x0000, 0x0000, "NVIDIA GeForce RTX 3060 Laptop GPU" },
|
||||||
{ 0x2563, 0x0000, 0x0000, "NVIDIA GeForce RTX 3050 Ti Laptop GPU" },
|
{ 0x2563, 0x0000, 0x0000, "NVIDIA GeForce RTX 3050 Ti Laptop GPU" },
|
||||||
{ 0x2571, 0x1611, 0x1028, "NVIDIA RTX A2000 12GB" },
|
{ 0x2571, 0x1611, 0x1028, "NVIDIA RTX A2000 12GB" },
|
||||||
@ -944,6 +948,7 @@ static const CHIPS_RELEASED sChipsReleased[] = {
|
|||||||
{ 0x25E5, 0x0000, 0x0000, "NVIDIA GeForce RTX 3050 Laptop GPU" },
|
{ 0x25E5, 0x0000, 0x0000, "NVIDIA GeForce RTX 3050 Laptop GPU" },
|
||||||
{ 0x25F9, 0x0000, 0x0000, "NVIDIA RTX A1000 Embedded GPU" },
|
{ 0x25F9, 0x0000, 0x0000, "NVIDIA RTX A1000 Embedded GPU" },
|
||||||
{ 0x25FA, 0x0000, 0x0000, "NVIDIA RTX A2000 Embedded GPU" },
|
{ 0x25FA, 0x0000, 0x0000, "NVIDIA RTX A2000 Embedded GPU" },
|
||||||
|
{ 0x2684, 0x0000, 0x0000, "NVIDIA GeForce RTX 4090" },
|
||||||
{ 0x13BD, 0x11cc, 0x10DE, "GRID M10-0B" },
|
{ 0x13BD, 0x11cc, 0x10DE, "GRID M10-0B" },
|
||||||
{ 0x13BD, 0x11cd, 0x10DE, "GRID M10-1B" },
|
{ 0x13BD, 0x11cd, 0x10DE, "GRID M10-1B" },
|
||||||
{ 0x13BD, 0x11ce, 0x10DE, "GRID M10-0Q" },
|
{ 0x13BD, 0x11ce, 0x10DE, "GRID M10-0Q" },
|
||||||
|
@ -309,7 +309,6 @@ kbusRemoveNvlinkPeerMapping_GP100
|
|||||||
NvU32 peerGpuInst = gpuGetInstance(pGpu1);
|
NvU32 peerGpuInst = gpuGetInstance(pGpu1);
|
||||||
KernelNvlink *pKernelNvlink0 = GPU_GET_KERNEL_NVLINK(pGpu0);
|
KernelNvlink *pKernelNvlink0 = GPU_GET_KERNEL_NVLINK(pGpu0);
|
||||||
NvBool bLoopback = (pGpu0 == pGpu1);
|
NvBool bLoopback = (pGpu0 == pGpu1);
|
||||||
NvBool bBufferReady = NV_FALSE;
|
|
||||||
|
|
||||||
NV_ASSERT_OR_RETURN(pKernelNvlink0 != NULL, NV_ERR_NOT_SUPPORTED);
|
NV_ASSERT_OR_RETURN(pKernelNvlink0 != NULL, NV_ERR_NOT_SUPPORTED);
|
||||||
|
|
||||||
@ -416,23 +415,8 @@ kbusRemoveNvlinkPeerMapping_GP100
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Call knvlinkUpdateCurrentConfig to flush settings to the registers
|
// Call knvlinkUpdateCurrentConfig to flush settings to the registers
|
||||||
// Skip this call if buffer ready is set and CONFIG_REQUIRE_INITIALIZED is true
|
status = knvlinkUpdateCurrentConfig(pGpu0, pKernelNvlink0);
|
||||||
//
|
|
||||||
status = knvlinkSyncLinkMasksAndVbiosInfo(pGpu0, pKernelNvlink0);
|
|
||||||
if (status != NV_OK)
|
|
||||||
{
|
|
||||||
NV_ASSERT(status == NV_OK);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
bBufferReady = ((pKernelNvlink0->initializedLinks & pKernelNvlink0->peerLinkMasks[peerId]) != 0) ? NV_TRUE : NV_FALSE;
|
|
||||||
if (!pKernelNvlink0->getProperty(pKernelNvlink0, PDB_PROP_KNVLINK_CONFIG_REQUIRE_INITIALIZED_LINKS_CHECK) ||
|
|
||||||
!bBufferReady)
|
|
||||||
{
|
|
||||||
status = knvlinkUpdateCurrentConfig(pGpu0, pKernelNvlink0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
|
@ -3756,7 +3756,6 @@ kchannelUpdateWorkSubmitTokenNotifIndex_IMPL
|
|||||||
Memory *pMemory;
|
Memory *pMemory;
|
||||||
ContextDma *pContextDma;
|
ContextDma *pContextDma;
|
||||||
NvU32 addressSpace;
|
NvU32 addressSpace;
|
||||||
NvU64 notificationBufferSize;
|
|
||||||
NV_STATUS status;
|
NV_STATUS status;
|
||||||
|
|
||||||
hNotifier = pKernelChannel->hErrorContext;
|
hNotifier = pKernelChannel->hErrorContext;
|
||||||
@ -3765,8 +3764,6 @@ kchannelUpdateWorkSubmitTokenNotifIndex_IMPL
|
|||||||
NV_CHECK_OR_RETURN(LEVEL_INFO, index != NV_CHANNELGPFIFO_NOTIFICATION_TYPE_ERROR,
|
NV_CHECK_OR_RETURN(LEVEL_INFO, index != NV_CHANNELGPFIFO_NOTIFICATION_TYPE_ERROR,
|
||||||
NV_ERR_INVALID_ARGUMENT);
|
NV_ERR_INVALID_ARGUMENT);
|
||||||
|
|
||||||
notificationBufferSize = (index + 1) * sizeof(NvNotification);
|
|
||||||
|
|
||||||
status = deviceGetByInstance(pClient, gpuGetDeviceInstance(pGpu), &pDevice);
|
status = deviceGetByInstance(pClient, gpuGetDeviceInstance(pGpu), &pDevice);
|
||||||
if (status != NV_OK)
|
if (status != NV_OK)
|
||||||
return NV_ERR_INVALID_DEVICE;
|
return NV_ERR_INVALID_DEVICE;
|
||||||
@ -3775,7 +3772,7 @@ kchannelUpdateWorkSubmitTokenNotifIndex_IMPL
|
|||||||
{
|
{
|
||||||
addressSpace = memdescGetAddressSpace(pMemory->pMemDesc);
|
addressSpace = memdescGetAddressSpace(pMemory->pMemDesc);
|
||||||
|
|
||||||
NV_CHECK_OR_RETURN(LEVEL_INFO, pMemory->Length >= notificationBufferSize,
|
NV_CHECK_OR_RETURN(LEVEL_INFO, pMemory->Length >= ((index + 1) * sizeof(NvNotification)),
|
||||||
NV_ERR_OUT_OF_RANGE);
|
NV_ERR_OUT_OF_RANGE);
|
||||||
switch (addressSpace)
|
switch (addressSpace)
|
||||||
{
|
{
|
||||||
@ -3793,7 +3790,7 @@ kchannelUpdateWorkSubmitTokenNotifIndex_IMPL
|
|||||||
&pDmaMappingInfo),
|
&pDmaMappingInfo),
|
||||||
NV_ERR_GENERIC);
|
NV_ERR_GENERIC);
|
||||||
|
|
||||||
NV_CHECK_OR_RETURN(LEVEL_INFO, pDmaMappingInfo->pMemDesc->Size >= notificationBufferSize,
|
NV_CHECK_OR_RETURN(LEVEL_INFO, pDmaMappingInfo->pMemDesc->Size >= ((index + 1) * sizeof(NvNotification)),
|
||||||
NV_ERR_OUT_OF_RANGE);
|
NV_ERR_OUT_OF_RANGE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3808,7 +3805,7 @@ kchannelUpdateWorkSubmitTokenNotifIndex_IMPL
|
|||||||
}
|
}
|
||||||
else if (NV_OK == ctxdmaGetByHandle(pClient, hNotifier, &pContextDma))
|
else if (NV_OK == ctxdmaGetByHandle(pClient, hNotifier, &pContextDma))
|
||||||
{
|
{
|
||||||
NV_CHECK_OR_RETURN(LEVEL_INFO, pContextDma->Limit >= (notificationBufferSize - 1),
|
NV_CHECK_OR_RETURN(LEVEL_INFO, pContextDma->Limit >= (((index + 1) * sizeof(NvNotification)) - 1),
|
||||||
NV_ERR_OUT_OF_RANGE);
|
NV_ERR_OUT_OF_RANGE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1927,7 +1927,6 @@ memmgrFillComprInfo_IMPL
|
|||||||
{
|
{
|
||||||
const MEMORY_SYSTEM_STATIC_CONFIG *pMemorySystemConfig =
|
const MEMORY_SYSTEM_STATIC_CONFIG *pMemorySystemConfig =
|
||||||
kmemsysGetStaticConfig(pGpu, GPU_GET_KERNEL_MEMORY_SYSTEM(pGpu));
|
kmemsysGetStaticConfig(pGpu, GPU_GET_KERNEL_MEMORY_SYSTEM(pGpu));
|
||||||
NvU32 size;
|
|
||||||
|
|
||||||
portMemSet(pComprInfo, 0, sizeof(*pComprInfo));
|
portMemSet(pComprInfo, 0, sizeof(*pComprInfo));
|
||||||
|
|
||||||
@ -1938,12 +1937,10 @@ memmgrFillComprInfo_IMPL
|
|||||||
|
|
||||||
NV_ASSERT(compTagStartOffset != ~(NvU32)0);
|
NV_ASSERT(compTagStartOffset != ~(NvU32)0);
|
||||||
|
|
||||||
size = pageSize * pageCount;
|
|
||||||
|
|
||||||
pComprInfo->compPageShift = pMemorySystemConfig->comprPageShift;
|
pComprInfo->compPageShift = pMemorySystemConfig->comprPageShift;
|
||||||
pComprInfo->compTagLineMin = compTagStartOffset;
|
pComprInfo->compTagLineMin = compTagStartOffset;
|
||||||
pComprInfo->compPageIndexLo = (NvU32)(surfOffset >> pComprInfo->compPageShift);
|
pComprInfo->compPageIndexLo = (NvU32)(surfOffset >> pComprInfo->compPageShift);
|
||||||
pComprInfo->compPageIndexHi = (NvU32)((surfOffset + size - 1) >> pComprInfo->compPageShift);
|
pComprInfo->compPageIndexHi = (NvU32)((surfOffset + pageSize * pageCount - 1) >> pComprInfo->compPageShift);
|
||||||
pComprInfo->compTagLineMultiplier = 1;
|
pComprInfo->compTagLineMultiplier = 1;
|
||||||
|
|
||||||
return NV_OK;
|
return NV_OK;
|
||||||
|
@ -132,8 +132,6 @@ knvlinkRemoveMapping_GA100
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
NV_STATUS status = NV_OK;
|
NV_STATUS status = NV_OK;
|
||||||
NvU32 peerId;
|
|
||||||
NvBool bBufferReady = NV_FALSE;
|
|
||||||
|
|
||||||
NV2080_CTRL_NVLINK_REMOVE_NVLINK_MAPPING_PARAMS params;
|
NV2080_CTRL_NVLINK_REMOVE_NVLINK_MAPPING_PARAMS params;
|
||||||
portMemSet(¶ms, 0, sizeof(params));
|
portMemSet(¶ms, 0, sizeof(params));
|
||||||
@ -163,35 +161,7 @@ knvlinkRemoveMapping_GA100
|
|||||||
// the MUX registers and the connection config registers. So, we have
|
// the MUX registers and the connection config registers. So, we have
|
||||||
// to call nvlinkCurrentConfig instead of nvlinkUpdateHshubConfigRegs
|
// to call nvlinkCurrentConfig instead of nvlinkUpdateHshubConfigRegs
|
||||||
//
|
//
|
||||||
status = knvlinkSyncLinkMasksAndVbiosInfo(pGpu, pKernelNvlink);
|
return knvlinkUpdateCurrentConfig(pGpu, pKernelNvlink);
|
||||||
if (status != NV_OK)
|
|
||||||
{
|
|
||||||
NV_ASSERT(status == NV_OK);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pKernelNvlink->getProperty(pKernelNvlink, PDB_PROP_KNVLINK_CONFIG_REQUIRE_INITIALIZED_LINKS_CHECK))
|
|
||||||
{
|
|
||||||
FOR_EACH_INDEX_IN_MASK(32, peerId, peerMask)
|
|
||||||
{
|
|
||||||
if (pKernelNvlink->initializedLinks & pKernelNvlink->peerLinkMasks[peerId])
|
|
||||||
{
|
|
||||||
bBufferReady = NV_TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} FOR_EACH_INDEX_IN_MASK_END;
|
|
||||||
|
|
||||||
if (!bBufferReady)
|
|
||||||
{
|
|
||||||
status = knvlinkUpdateCurrentConfig(pGpu, pKernelNvlink);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = knvlinkUpdateCurrentConfig(pGpu, pKernelNvlink);
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -248,49 +248,3 @@ knvlinkDiscoverPostRxDetLinks_GH100
|
|||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief Check if floorsweeping is needed for this particular chip
|
|
||||||
*
|
|
||||||
* @param[in] pGpu OBJGPU pointer
|
|
||||||
* @param[in] pKernelNvlink KernelNvlink pointer
|
|
||||||
*
|
|
||||||
* @returns On success, sets unique fabric address and returns NV_OK.
|
|
||||||
* On failure, returns NV_ERR_XXX.
|
|
||||||
*/
|
|
||||||
NvBool
|
|
||||||
knvlinkIsFloorSweepingNeeded_GH100
|
|
||||||
(
|
|
||||||
OBJGPU *pGpu,
|
|
||||||
KernelNvlink *pKernelNvlink,
|
|
||||||
NvU32 numActiveLinksPerIoctrl,
|
|
||||||
NvU32 numLinksPerIoctrl
|
|
||||||
)
|
|
||||||
{
|
|
||||||
|
|
||||||
//
|
|
||||||
// Only floorsweep down the given GPU if the following conditions are met:
|
|
||||||
// 1. if the number of links for the IP is > 0
|
|
||||||
//
|
|
||||||
// 2. The number of active links allowed for the IOCTRL is less then the
|
|
||||||
// total number of links for the IOCTRL. No reason to spend time in code
|
|
||||||
// if the exectution of it will be a NOP
|
|
||||||
//
|
|
||||||
// 3. If the GPU has never been floorswept. An optimization to make sure RM
|
|
||||||
// doesn't burn cycles repeatedly running running code that will be a NOP
|
|
||||||
//
|
|
||||||
// 4. (temporary) Run only on Silicon chips. Fmodel currently doesn't support
|
|
||||||
// this feature
|
|
||||||
//
|
|
||||||
|
|
||||||
if ((numLinksPerIoctrl > 0 && numActiveLinksPerIoctrl > 0) &&
|
|
||||||
numActiveLinksPerIoctrl < numLinksPerIoctrl &&
|
|
||||||
!pKernelNvlink->bFloorSwept &&
|
|
||||||
IS_SILICON(pGpu))
|
|
||||||
{
|
|
||||||
return NV_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NV_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -349,11 +349,7 @@ knvlinkGetP2pConnectionStatus_IMPL
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the remote ends of the links of local GPU from the nvlink core
|
// Get the remote ends of the links of local GPU from the nvlink core
|
||||||
status = knvlinkCoreGetRemoteDeviceInfo(pGpu0, pKernelNvlink0);
|
knvlinkCoreGetRemoteDeviceInfo(pGpu0, pKernelNvlink0);
|
||||||
if (status != NV_OK)
|
|
||||||
{
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Post topology link enable on links of local GPU
|
// Post topology link enable on links of local GPU
|
||||||
status = knvlinkEnableLinksPostTopology_HAL(pGpu0, pKernelNvlink0,
|
status = knvlinkEnableLinksPostTopology_HAL(pGpu0, pKernelNvlink0,
|
||||||
@ -369,11 +365,7 @@ knvlinkGetP2pConnectionStatus_IMPL
|
|||||||
if (knvlinkGetNumLinksToPeer(pGpu1, pKernelNvlink1, pGpu0) != numPeerLinks)
|
if (knvlinkGetNumLinksToPeer(pGpu1, pKernelNvlink1, pGpu0) != numPeerLinks)
|
||||||
{
|
{
|
||||||
// Get the remote ends of the links of remote GPU from the nvlink core
|
// Get the remote ends of the links of remote GPU from the nvlink core
|
||||||
status = knvlinkCoreGetRemoteDeviceInfo(pGpu1, pKernelNvlink1);
|
knvlinkCoreGetRemoteDeviceInfo(pGpu1, pKernelNvlink1);
|
||||||
if (status != NV_OK)
|
|
||||||
{
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Post topology link enable on links of remote GPU
|
// Post topology link enable on links of remote GPU
|
||||||
status = knvlinkEnableLinksPostTopology_HAL(pGpu1, pKernelNvlink1,
|
status = knvlinkEnableLinksPostTopology_HAL(pGpu1, pKernelNvlink1,
|
||||||
@ -492,12 +484,12 @@ knvlinkUpdateCurrentConfig_IMPL
|
|||||||
{
|
{
|
||||||
pKCe = GPU_GET_KCE(pGpu, i);
|
pKCe = GPU_GET_KCE(pGpu, i);
|
||||||
if (pKCe)
|
if (pKCe)
|
||||||
{
|
|
||||||
status = kceTopLevelPceLceMappingsUpdate(pGpu, pKCe);
|
|
||||||
if (status != NV_OK)
|
|
||||||
{
|
{
|
||||||
NV_PRINTF(LEVEL_ERROR, "Failed to update PCE-LCE mappings\n");
|
status = kceTopLevelPceLceMappingsUpdate(pGpu, pKCe);
|
||||||
}
|
if (status != NV_OK)
|
||||||
|
{
|
||||||
|
NV_PRINTF(LEVEL_ERROR, "Failed to update PCE-LCE mappings\n");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -815,8 +807,8 @@ knvlinkPrepareForXVEReset_IMPL
|
|||||||
|
|
||||||
// Remove all NVLink mappings in HSHUB config registers to init values
|
// Remove all NVLink mappings in HSHUB config registers to init values
|
||||||
if (!API_GPU_IN_RESET_SANITY_CHECK(pGpu) && !pGpu->getProperty(pGpu, PDB_PROP_GPU_IS_LOST))
|
if (!API_GPU_IN_RESET_SANITY_CHECK(pGpu) && !pGpu->getProperty(pGpu, PDB_PROP_GPU_IS_LOST))
|
||||||
status = knvlinkRemoveMapping_HAL(pGpu, pKernelNvlink, NV_TRUE, ((1 << NVLINK_MAX_PEERS_SW) - 1),
|
status = knvlinkRemoveMapping_HAL(pGpu, pKernelNvlink, NV_TRUE, ((1 << NVLINK_MAX_PEERS_SW) - 1),
|
||||||
NV_FALSE /* bL2Entry */);
|
NV_FALSE /* bL2Entry */);
|
||||||
if (status != NV_OK)
|
if (status != NV_OK)
|
||||||
{
|
{
|
||||||
NV_PRINTF(LEVEL_ERROR,
|
NV_PRINTF(LEVEL_ERROR,
|
||||||
@ -1217,7 +1209,7 @@ knvlinkUpdateLinkConnectionStatus_IMPL
|
|||||||
|
|
||||||
#if defined(INCLUDE_NVLINK_LIB)
|
#if defined(INCLUDE_NVLINK_LIB)
|
||||||
|
|
||||||
params.bConnected = pKernelNvlink->nvlinkLinks[linkId].remoteEndInfo.bConnected;
|
params.bConnected = pKernelNvlink->nvlinkLinks[linkId].remoteEndInfo.bConnected;
|
||||||
params.remoteDeviceType = pKernelNvlink->nvlinkLinks[linkId].remoteEndInfo.deviceType;
|
params.remoteDeviceType = pKernelNvlink->nvlinkLinks[linkId].remoteEndInfo.deviceType;
|
||||||
params.remoteLinkNumber = pKernelNvlink->nvlinkLinks[linkId].remoteEndInfo.linkNumber;
|
params.remoteLinkNumber = pKernelNvlink->nvlinkLinks[linkId].remoteEndInfo.linkNumber;
|
||||||
|
|
||||||
|
@ -241,7 +241,6 @@ subdeviceCtrlCmdBusGetNvlinkStatus_IMPL
|
|||||||
NvU32 r = 0;
|
NvU32 r = 0;
|
||||||
NvBool bPeerLink, bSysmemLink, bSwitchLink;
|
NvBool bPeerLink, bSysmemLink, bSwitchLink;
|
||||||
NV2080_CTRL_NVLINK_GET_LINK_AND_CLOCK_INFO_PARAMS nvlinkLinkAndClockInfoParams;
|
NV2080_CTRL_NVLINK_GET_LINK_AND_CLOCK_INFO_PARAMS nvlinkLinkAndClockInfoParams;
|
||||||
NvBool bIsNvlinkReady = NV_TRUE;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// vGPU:
|
// vGPU:
|
||||||
@ -288,28 +287,9 @@ subdeviceCtrlCmdBusGetNvlinkStatus_IMPL
|
|||||||
{
|
{
|
||||||
// Get the nvlink connections for this device from the core
|
// Get the nvlink connections for this device from the core
|
||||||
knvlinkCoreGetRemoteDeviceInfo(pGpu, pKernelNvlink);
|
knvlinkCoreGetRemoteDeviceInfo(pGpu, pKernelNvlink);
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Get the nvlink connections for this device from the core
|
|
||||||
// If the function fails then the corelib doesn't have enough
|
|
||||||
// info to validate connectivity so we should mark the API call
|
|
||||||
// as not ready
|
|
||||||
//
|
|
||||||
status = knvlinkCoreGetRemoteDeviceInfo(pGpu, pKernelNvlink);
|
|
||||||
if (status == NV_ERR_NOT_READY)
|
|
||||||
{
|
|
||||||
NV_PRINTF(LEVEL_INFO, "Nvlink is not ready yet!\n");
|
|
||||||
bIsNvlinkReady = NV_FALSE;
|
|
||||||
}
|
|
||||||
else if (status != NV_OK)
|
|
||||||
{
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If nvlink is not ready don't report back any links as being enabled
|
pParams->enabledLinkMask = pKernelNvlink->enabledLinks;
|
||||||
pParams->enabledLinkMask = (bIsNvlinkReady) ? pKernelNvlink->enabledLinks : 0x0;
|
|
||||||
|
|
||||||
r = pParams->enabledLinkMask;
|
r = pParams->enabledLinkMask;
|
||||||
while (r >>= 1 ) i++;
|
while (r >>= 1 ) i++;
|
||||||
|
@ -75,13 +75,16 @@ knvlinkCoreGetRemoteDeviceInfo_IMPL
|
|||||||
|
|
||||||
#if defined(INCLUDE_NVLINK_LIB)
|
#if defined(INCLUDE_NVLINK_LIB)
|
||||||
|
|
||||||
OBJSYS *pSys = SYS_GET_INSTANCE();
|
OBJSYS *pSys = SYS_GET_INSTANCE();
|
||||||
NvU32 flags = NVLINK_STATE_CHANGE_SYNC;
|
NvU32 flags = NVLINK_STATE_CHANGE_SYNC;
|
||||||
NvBool bNvswitchProxyPresent = NV_FALSE;
|
NvBool bNvswitchProxyPresent = NV_FALSE;
|
||||||
NvBool bUpdateConnStatus = NV_FALSE;
|
NvBool bUpdateConnStatus = NV_FALSE;
|
||||||
NvBool bCheckDegradedMode = NV_FALSE;
|
NvBool bCheckDegradedMode = NV_FALSE;
|
||||||
|
NvU32 linkId;
|
||||||
|
NvU32 tmpDisabledLinkMask = 0;
|
||||||
|
NvU32 tmpEnabledLinkMask = 0;
|
||||||
nvlink_conn_info conn_info;
|
nvlink_conn_info conn_info;
|
||||||
NvU32 linkId;
|
|
||||||
NvU32 numActiveLinksPerIoctrl = 0;
|
NvU32 numActiveLinksPerIoctrl = 0;
|
||||||
NvU32 numLinksPerIoctrl = 0;
|
NvU32 numLinksPerIoctrl = 0;
|
||||||
|
|
||||||
@ -91,6 +94,18 @@ knvlinkCoreGetRemoteDeviceInfo_IMPL
|
|||||||
//
|
//
|
||||||
if (!knvlinkPoweredUpForD3_HAL(pGpu, pKernelNvlink))
|
if (!knvlinkPoweredUpForD3_HAL(pGpu, pKernelNvlink))
|
||||||
{
|
{
|
||||||
|
if (pKernelNvlink->bEnableAli)
|
||||||
|
{
|
||||||
|
// Update the post Rx Det link Mask for the GPU
|
||||||
|
knvlinkUpdatePostRxDetectLinkMask(pGpu, pKernelNvlink);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pKernelNvlink->ipVerNvlink >= NVLINK_VERSION_40)
|
||||||
|
{
|
||||||
|
numActiveLinksPerIoctrl = knvlinkGetNumActiveLinksPerIoctrl(pGpu, pKernelNvlink);
|
||||||
|
numLinksPerIoctrl = knvlinkGetTotalNumLinksPerIoctrl(pGpu, pKernelNvlink);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Optimization: Check for nvlink proxy only when system fabric is externally
|
// Optimization: Check for nvlink proxy only when system fabric is externally
|
||||||
// managed. This would avoid RPCs in non-nvswitch cases.
|
// managed. This would avoid RPCs in non-nvswitch cases.
|
||||||
@ -100,26 +115,115 @@ knvlinkCoreGetRemoteDeviceInfo_IMPL
|
|||||||
bNvswitchProxyPresent = knvlinkIsNvswitchProxyPresent(pGpu, pKernelNvlink);
|
bNvswitchProxyPresent = knvlinkIsNvswitchProxyPresent(pGpu, pKernelNvlink);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pKernelNvlink->bEnableAli)
|
//
|
||||||
{
|
// If on Nvlink4.0+ then before topology discovery is performed then
|
||||||
// Update the post Rx Det link Mask for the GPU
|
// first enter the corelib floorsweeping function to floorsweep down
|
||||||
knvlinkUpdatePostRxDetectLinkMask(pGpu, pKernelNvlink);
|
// the GPU if requested.
|
||||||
}
|
// This path does not cache connection info since its main purpose is to
|
||||||
|
// edit the connection information before RM tries to cache and update itself
|
||||||
|
//
|
||||||
if (pKernelNvlink->ipVerNvlink >= NVLINK_VERSION_40 &&
|
if (pKernelNvlink->ipVerNvlink >= NVLINK_VERSION_40 &&
|
||||||
!bNvswitchProxyPresent &&
|
!bNvswitchProxyPresent &&
|
||||||
!pSys->getProperty(pSys, PDB_PROP_SYS_FABRIC_IS_EXTERNALLY_MANAGED) &&
|
!pSys->getProperty(pSys, PDB_PROP_SYS_FABRIC_IS_EXTERNALLY_MANAGED) &&
|
||||||
pKernelNvlink->pNvlinkDev != NULL)
|
pKernelNvlink->pNvlinkDev != NULL &&
|
||||||
|
!pKernelNvlink->bFloorSwept &&
|
||||||
|
IS_SILICON(pGpu) &&
|
||||||
|
numActiveLinksPerIoctrl < numLinksPerIoctrl)
|
||||||
{
|
{
|
||||||
numLinksPerIoctrl = knvlinkGetTotalNumLinksPerIoctrl(pGpu, pKernelNvlink);
|
// The path here is important not getting the connection info
|
||||||
status = knvlinkFloorSweep(pGpu, pKernelNvlink,
|
FOR_EACH_INDEX_IN_MASK(32, linkId, pKernelNvlink->enabledLinks)
|
||||||
numLinksPerIoctrl, &numActiveLinksPerIoctrl);
|
{
|
||||||
|
nvlink_lib_discover_and_get_remote_conn_info(
|
||||||
|
pKernelNvlink->nvlinkLinks[linkId].core_link, &conn_info, 0);
|
||||||
|
}
|
||||||
|
FOR_EACH_INDEX_IN_MASK_END;
|
||||||
|
|
||||||
|
// floorsweeping in corelib will update connection info that RM qill query below
|
||||||
|
(void)nvlink_lib_powerdown_floorswept_links_to_off(pKernelNvlink->pNvlinkDev);
|
||||||
|
|
||||||
|
//
|
||||||
|
// If a link in the enabledLinkMask is not trained after floorsweeping then
|
||||||
|
// then add it to a tmp disabled linkMask
|
||||||
|
//
|
||||||
|
|
||||||
|
// Get the link train status for the enabled link masks
|
||||||
|
NV2080_CTRL_NVLINK_ARE_LINKS_TRAINED_PARAMS linkTrainedParams;
|
||||||
|
|
||||||
|
portMemSet(&linkTrainedParams, 0, sizeof(linkTrainedParams));
|
||||||
|
linkTrainedParams.linkMask = pKernelNvlink->enabledLinks;
|
||||||
|
linkTrainedParams.bActiveOnly = NV_TRUE;
|
||||||
|
|
||||||
|
// Reset timeout to clear any accumulated timeouts from link init
|
||||||
|
if (IS_GSP_CLIENT(pGpu))
|
||||||
|
{
|
||||||
|
threadStateResetTimeout(pGpu);
|
||||||
|
}
|
||||||
|
|
||||||
|
status = knvlinkExecGspRmRpc(pGpu, pKernelNvlink,
|
||||||
|
NV2080_CTRL_CMD_NVLINK_ARE_LINKS_TRAINED,
|
||||||
|
(void *)&linkTrainedParams,
|
||||||
|
sizeof(linkTrainedParams));
|
||||||
if (status != NV_OK)
|
if (status != NV_OK)
|
||||||
{
|
{
|
||||||
NV_PRINTF(LEVEL_ERROR, "Failed to floorsweep valid nvlink config!\n");
|
NV_PRINTF(LEVEL_ERROR, "Failed to get the link train status for links\n");
|
||||||
return NV_ERR_NOT_READY;
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Create a temporary mask of all links that are now enabled:
|
||||||
|
// classified as a link in active
|
||||||
|
//
|
||||||
|
FOR_EACH_INDEX_IN_MASK(32, linkId, pKernelNvlink->enabledLinks)
|
||||||
|
{
|
||||||
|
if (linkTrainedParams.bIsLinkActive[linkId])
|
||||||
|
{
|
||||||
|
tmpEnabledLinkMask |= BIT(linkId);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmpDisabledLinkMask |= BIT(linkId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FOR_EACH_INDEX_IN_MASK_END;
|
||||||
|
|
||||||
|
// Redo linkMasks based on the search above being the ground truth
|
||||||
|
pKernelNvlink->enabledLinks = tmpEnabledLinkMask;
|
||||||
|
|
||||||
|
//
|
||||||
|
// remove any links not in active in the tmpEnabledLinkMask from all
|
||||||
|
// other link masks as these have been floorswept by the corelib
|
||||||
|
//
|
||||||
|
pKernelNvlink->disconnectedLinkMask = tmpEnabledLinkMask;
|
||||||
|
pKernelNvlink->initDisabledLinksMask = tmpDisabledLinkMask;
|
||||||
|
|
||||||
|
|
||||||
|
status = knvlinkProcessInitDisabledLinks(pGpu, pKernelNvlink);
|
||||||
|
if (status != NV_OK)
|
||||||
|
{
|
||||||
|
NV_ASSERT(status == NV_OK);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Re-sync the link masks with GSP
|
||||||
|
status = knvlinkSyncLinkMasksAndVbiosInfo(pGpu, pKernelNvlink);
|
||||||
|
if (status != NV_OK)
|
||||||
|
{
|
||||||
|
NV_ASSERT(status == NV_OK);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NV_PRINTF(LEVEL_INFO,
|
||||||
|
"Post Floorsweeping: discoveredLinks: 0x%x; enabledLinks:0x%x; disconnectedLinks:0x%x; initDisabledLinksMask:0x%x\n",
|
||||||
|
pKernelNvlink->discoveredLinks, pKernelNvlink->enabledLinks, pKernelNvlink->disconnectedLinkMask, pKernelNvlink->initDisabledLinksMask);
|
||||||
|
pKernelNvlink->bFloorSwept = NV_TRUE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Assert that the number of links in active is always less then
|
||||||
|
// or equal to the number of active links on the chips
|
||||||
|
//
|
||||||
|
NV_ASSERT_OR_ELSE_STR((nvPopCount32(tmpEnabledLinkMask) <= numActiveLinksPerIoctrl * nvPopCount32(pKernelNvlink->ioctrlMask)),
|
||||||
|
"Mismatch between links in active and #of links supported!\n", return NV_ERR_INVALID_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We only need to look at links that are still considered disconnected
|
// We only need to look at links that are still considered disconnected
|
||||||
@ -438,7 +542,7 @@ knvlinkCheckTrainingIsComplete_IMPL
|
|||||||
{
|
{
|
||||||
if (pKernelNvlink0->bLinkTrainingDebugSpew)
|
if (pKernelNvlink0->bLinkTrainingDebugSpew)
|
||||||
{
|
{
|
||||||
NV_PRINTF(LEVEL_INFO, "Links aren't fully trained yet!\n");
|
NV_PRINTF(LEVEL_INFO, "Links aren't fully trained yet!\n");
|
||||||
}
|
}
|
||||||
return NV_ERR_GENERIC;
|
return NV_ERR_GENERIC;
|
||||||
}
|
}
|
||||||
@ -495,7 +599,7 @@ knvlinkCheckTrainingIsComplete_IMPL
|
|||||||
{
|
{
|
||||||
if (pKernelNvlink1->bLinkTrainingDebugSpew)
|
if (pKernelNvlink1->bLinkTrainingDebugSpew)
|
||||||
{
|
{
|
||||||
NV_PRINTF(LEVEL_INFO, "Links aren't fully trained yet!\n");
|
NV_PRINTF(LEVEL_INFO, "Links aren't fully trained yet!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return NV_ERR_GENERIC;
|
return NV_ERR_GENERIC;
|
||||||
@ -1279,140 +1383,6 @@ knvlinkRetrainLink_IMPL
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief Floorsweep the nvlink config for the chip
|
|
||||||
*
|
|
||||||
* @param[in] pGpu OBJGPU pointer
|
|
||||||
* @param[in] pKernelNvlink KernelNvlink pointer
|
|
||||||
* @param[in] numLinksPerIp number of total links found in discovery
|
|
||||||
* @param[out] pNumLinkActive number of links needed to be active
|
|
||||||
*
|
|
||||||
* @returns On success, sets unique fabric address and returns NV_OK.
|
|
||||||
* On failure, returns NV_ERR_XXX.
|
|
||||||
*/
|
|
||||||
NV_STATUS
|
|
||||||
knvlinkFloorSweep_IMPL
|
|
||||||
(
|
|
||||||
OBJGPU *pGpu,
|
|
||||||
KernelNvlink *pKernelNvlink,
|
|
||||||
NvU32 numLinksPerIoctrl,
|
|
||||||
NvU32 *pNumActiveLinksPerIoctrl
|
|
||||||
)
|
|
||||||
{
|
|
||||||
|
|
||||||
#if defined(INCLUDE_NVLINK_LIB)
|
|
||||||
NV_STATUS status = NV_OK;
|
|
||||||
NvU32 linkId;
|
|
||||||
NvU32 tmpDisabledLinkMask = 0;
|
|
||||||
NvU32 tmpEnabledLinkMask = 0;
|
|
||||||
nvlink_conn_info conn_info;
|
|
||||||
|
|
||||||
*pNumActiveLinksPerIoctrl = knvlinkGetNumActiveLinksPerIoctrl(pGpu, pKernelNvlink);
|
|
||||||
if (!knvlinkIsFloorSweepingNeeded_HAL(pGpu, pKernelNvlink, *pNumActiveLinksPerIoctrl, numLinksPerIoctrl))
|
|
||||||
{
|
|
||||||
return NV_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The path here is important not getting the connection info
|
|
||||||
FOR_EACH_INDEX_IN_MASK(32, linkId, pKernelNvlink->enabledLinks)
|
|
||||||
{
|
|
||||||
nvlink_lib_discover_and_get_remote_conn_info(
|
|
||||||
pKernelNvlink->nvlinkLinks[linkId].core_link, &conn_info, 0);
|
|
||||||
}
|
|
||||||
FOR_EACH_INDEX_IN_MASK_END;
|
|
||||||
|
|
||||||
// floorsweeping in corelib will update connection info that RM qill query below
|
|
||||||
(void)nvlink_lib_powerdown_floorswept_links_to_off(pKernelNvlink->pNvlinkDev);
|
|
||||||
|
|
||||||
//
|
|
||||||
// If a link in the enabledLinkMask is not trained after floorsweeping then
|
|
||||||
// then add it to a tmp disabled linkMask
|
|
||||||
//
|
|
||||||
|
|
||||||
// Get the link train status for the enabled link masks
|
|
||||||
NV2080_CTRL_NVLINK_ARE_LINKS_TRAINED_PARAMS linkTrainedParams;
|
|
||||||
|
|
||||||
portMemSet(&linkTrainedParams, 0, sizeof(linkTrainedParams));
|
|
||||||
linkTrainedParams.linkMask = pKernelNvlink->enabledLinks;
|
|
||||||
linkTrainedParams.bActiveOnly = NV_TRUE;
|
|
||||||
|
|
||||||
// Reset timeout to clear any accumulated timeouts from link init
|
|
||||||
if (IS_GSP_CLIENT(pGpu))
|
|
||||||
{
|
|
||||||
threadStateResetTimeout(pGpu);
|
|
||||||
}
|
|
||||||
|
|
||||||
status = knvlinkExecGspRmRpc(pGpu, pKernelNvlink,
|
|
||||||
NV2080_CTRL_CMD_NVLINK_ARE_LINKS_TRAINED,
|
|
||||||
(void *)&linkTrainedParams,
|
|
||||||
sizeof(linkTrainedParams));
|
|
||||||
if (status != NV_OK)
|
|
||||||
{
|
|
||||||
NV_PRINTF(LEVEL_ERROR, "Failed to get the link train status for links\n");
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Create a temporary mask of all links that are now enabled:
|
|
||||||
// classified as a link in active
|
|
||||||
//
|
|
||||||
FOR_EACH_INDEX_IN_MASK(32, linkId, pKernelNvlink->enabledLinks)
|
|
||||||
{
|
|
||||||
if (linkTrainedParams.bIsLinkActive[linkId])
|
|
||||||
{
|
|
||||||
tmpEnabledLinkMask |= BIT(linkId);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tmpDisabledLinkMask |= BIT(linkId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FOR_EACH_INDEX_IN_MASK_END;
|
|
||||||
|
|
||||||
// Redo linkMasks based on the search above being the ground truth
|
|
||||||
pKernelNvlink->enabledLinks = tmpEnabledLinkMask;
|
|
||||||
|
|
||||||
//
|
|
||||||
// remove any links not in active in the tmpEnabledLinkMask from all
|
|
||||||
// other link masks as these have been floorswept by the corelib
|
|
||||||
//
|
|
||||||
pKernelNvlink->disconnectedLinkMask = tmpEnabledLinkMask;
|
|
||||||
pKernelNvlink->initDisabledLinksMask = tmpDisabledLinkMask;
|
|
||||||
|
|
||||||
|
|
||||||
status = knvlinkProcessInitDisabledLinks(pGpu, pKernelNvlink);
|
|
||||||
if (status != NV_OK)
|
|
||||||
{
|
|
||||||
NV_ASSERT(status == NV_OK);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Re-sync the link masks with GSP
|
|
||||||
status = knvlinkSyncLinkMasksAndVbiosInfo(pGpu, pKernelNvlink);
|
|
||||||
if (status != NV_OK)
|
|
||||||
{
|
|
||||||
NV_ASSERT(status == NV_OK);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Assert that the number of links in active is always less then
|
|
||||||
// or equal to the number of active links on the chips
|
|
||||||
//
|
|
||||||
if(!(nvPopCount32(tmpEnabledLinkMask) <= *pNumActiveLinksPerIoctrl * nvPopCount32(pKernelNvlink->ioctrlMask)))
|
|
||||||
{
|
|
||||||
NV_PRINTF(LEVEL_INFO,
|
|
||||||
"Floorsweeping didn't work! enabledMaskCount: 0x%x and numActiveLinksTotal: 0x%x. Current link info cached in SW: discoveredLinks: 0x%x; enabledLinks:0x%x; disconnectedLinks:0x%x; initDisabledLinksMask:0x%x\n",
|
|
||||||
nvPopCount32(tmpEnabledLinkMask), *pNumActiveLinksPerIoctrl * nvPopCount32(pKernelNvlink->ioctrlMask), pKernelNvlink->discoveredLinks, pKernelNvlink->enabledLinks, pKernelNvlink->disconnectedLinkMask, pKernelNvlink->initDisabledLinksMask);
|
|
||||||
|
|
||||||
return NV_ERR_NOT_READY;
|
|
||||||
}
|
|
||||||
|
|
||||||
pKernelNvlink->bFloorSwept = NV_TRUE;
|
|
||||||
#endif //INCLUDE_NVLINK_LIB
|
|
||||||
return NV_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Retrain the link from OFF state
|
* @brief Retrain the link from OFF state
|
||||||
*
|
*
|
||||||
|
@ -758,8 +758,6 @@ NvBool gpumgrIsDeviceRmFirmwareCapable
|
|||||||
0x2236, // A10 SKU215 Pris-24
|
0x2236, // A10 SKU215 Pris-24
|
||||||
0x2237, // A10G SKU215 Pris-24
|
0x2237, // A10G SKU215 Pris-24
|
||||||
0x25B6, // A16
|
0x25B6, // A16
|
||||||
0x20F5, // A800-80
|
|
||||||
0x20F6, // A800-40
|
|
||||||
};
|
};
|
||||||
NvU32 count = NV_ARRAY_ELEMENTS(defaultGspRmGpus);
|
NvU32 count = NV_ARRAY_ELEMENTS(defaultGspRmGpus);
|
||||||
NvU32 i;
|
NvU32 i;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
NVIDIA_VERSION = 520.61.05
|
NVIDIA_VERSION = 520.56.06
|
||||||
|
|
||||||
# This file.
|
# This file.
|
||||||
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
|
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user