This commit is contained in:
Maneet Singh
2025-08-05 09:14:02 -07:00
parent 4d6c416e7f
commit e0566f7913
31 changed files with 830 additions and 629 deletions

View File

@@ -1,7 +1,7 @@
# NVIDIA Linux Open GPU Kernel Module Source
This is the source release of the NVIDIA Linux open GPU kernel modules,
version 570.172.08.
version 570.181.
## How to Build
@@ -17,7 +17,7 @@ as root:
Note that the kernel modules built here must be used with GSP
firmware and user-space NVIDIA GPU driver components from a corresponding
570.172.08 driver release. This can be achieved by installing
570.181 driver release. This can be achieved by installing
the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
option. E.g.,
@@ -185,7 +185,7 @@ table below).
For details on feature support and limitations, see the NVIDIA GPU driver
end user README here:
https://us.download.nvidia.com/XFree86/Linux-x86_64/570.172.08/README/kernel_open.html
https://us.download.nvidia.com/XFree86/Linux-x86_64/570.181/README/kernel_open.html
For vGPU support, please refer to the README.vgpu packaged in the vGPU Host
Package for more details.

View File

@@ -79,7 +79,7 @@ ccflags-y += -I$(src)/common/inc
ccflags-y += -I$(src)
ccflags-y += -Wall $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-format-extra-args
ccflags-y += -D__KERNEL__ -DMODULE -DNVRM
ccflags-y += -DNV_VERSION_STRING=\"570.172.08\"
ccflags-y += -DNV_VERSION_STRING=\"570.181\"
ifneq ($(SYSSRCHOST1X),)
ccflags-y += -I$(SYSSRCHOST1X)

View File

@@ -36,6 +36,7 @@ NV_HEADER_PRESENCE_TESTS = \
generated/autoconf.h \
generated/compile.h \
generated/utsrelease.h \
linux/pfn_t.h \
linux/aperture.h \
linux/dma-direct.h \
linux/efi.h \

View File

@@ -157,7 +157,13 @@ static vm_fault_t __nv_drm_gem_user_memory_handle_vma_fault(
#if !defined(NV_LINUX)
return vmf_insert_pfn(vma, address, pfn);
#elif defined(NV_VMF_INSERT_MIXED_PRESENT)
#if defined(NV_LINUX_PFN_T_H_PRESENT)
return vmf_insert_mixed(vma, address, pfn_to_pfn_t(pfn));
#else
return vmf_insert_mixed(vma, address, pfn);
#endif
#else
return __nv_vm_insert_mixed_helper(vma, address, pfn);
#endif

View File

@@ -1417,16 +1417,16 @@ static int nv_start_device(nv_state_t *nv, nvidia_stack_t *sp)
{
rc = os_alloc_mutex(&nvl->isr_bh_unlocked_mutex);
if (rc != 0)
goto failed;
goto failed_release_irq;
nv_kthread_q_item_init(&nvl->bottom_half_q_item, nvidia_isr_bh_unlocked, (void *)nv);
rc = nv_kthread_q_init(&nvl->bottom_half_q, nv_device_name);
if (rc != 0)
goto failed;
goto failed_release_irq;
kthread_init = NV_TRUE;
rc = nv_kthread_q_init(&nvl->queue.nvk, "nv_queue");
if (rc)
goto failed;
goto failed_release_irq;
nv->queue = &nvl->queue;
if (nv_platform_use_auto_online(nvl))
@@ -1434,33 +1434,18 @@ static int nv_start_device(nv_state_t *nv, nvidia_stack_t *sp)
rc = nv_kthread_q_init(&nvl->remove_numa_memory_q,
"nv_remove_numa_memory");
if (rc)
goto failed;
goto failed_release_irq;
remove_numa_memory_kthread_init = NV_TRUE;
}
}
if (!rm_init_adapter(sp, nv))
{
if (!(nv->flags & NV_FLAG_USES_MSIX) &&
!(nv->flags & NV_FLAG_SOC_DISPLAY) &&
!(nv->flags & NV_FLAG_SOC_IGPU))
{
free_irq(nv->interrupt_line, (void *) nvl);
}
else if (nv->flags & NV_FLAG_SOC_DISPLAY)
{
}
#if defined(NV_LINUX_PCIE_MSI_SUPPORTED)
else
{
nv_free_msix_irq(nvl);
}
#endif
NV_DEV_PRINTF(NV_DBG_ERRORS, nv,
"rm_init_adapter failed, device minor number %d\n",
nvl->minor_num);
rc = -EIO;
goto failed;
goto failed_release_irq;
}
{
@@ -1494,6 +1479,26 @@ static int nv_start_device(nv_state_t *nv, nvidia_stack_t *sp)
return 0;
failed_release_irq:
if (!(nv->flags & NV_FLAG_PERSISTENT_SW_STATE))
{
if (!(nv->flags & NV_FLAG_USES_MSIX) &&
!(nv->flags & NV_FLAG_SOC_DISPLAY) &&
!(nv->flags & NV_FLAG_SOC_IGPU))
{
free_irq(nv->interrupt_line, (void *) nvl);
}
else if (nv->flags & NV_FLAG_SOC_DISPLAY)
{
}
#if defined(NV_LINUX_PCIE_MSI_SUPPORTED)
else
{
nv_free_msix_irq(nvl);
}
#endif
}
failed:
#if defined(NV_LINUX_PCIE_MSI_SUPPORTED)
if (nv->flags & NV_FLAG_USES_MSI)
@@ -2417,6 +2422,7 @@ nvidia_ioctl(
if (arg_cmd == NV_ESC_WAIT_OPEN_COMPLETE)
{
nv_ioctl_wait_open_complete_t *params = arg_copy;
params->rc = nvlfp->open_rc;
params->adapterStatus = nvlfp->adapter_status;
goto done_early;

View File

@@ -388,6 +388,9 @@ namespace DisplayPort
NvU64 allocatedDpTunnelBwShadow;
bool bForceDisableTunnelBwAllocation;
// Use regkey DP_DSC_DEVID_WAR to toggle this flag.
bool bEnableDevId;
Group *perHeadAttachedGroup[NV_MAX_HEADS];
NvU32 inTransitionHeadMask;

View File

@@ -99,6 +99,9 @@
#define NV_DP_REGKEY_DISABLE_FIX_FOR_5019537 "DP_DISABLE_5019537_FIX"
#define NV_DP_REGKEY_ENABLE_FIX_FOR_5147205 "DP_ENABLE_5147205_FIX"
// This regkey forces devID to be exposed to vendors via DPCD 0x309 for DSC-enabled SKUs.
#define NV_DP_REGKEY_EXPOSE_DSC_DEVID_WAR "DP_DSC_DEVID_WAR"
// Bug 5088957 : Force head shutdown in DpLib
#define NV_DP_REGKEY_FORCE_HEAD_SHUTDOWN "DP_WAR_5088957"
@@ -150,6 +153,7 @@ struct DP_REGKEY_DATABASE
bool bForceHeadShutdown;
bool bEnableLowerBppCheckForDsc;
bool bSkipSettingLinkStateDuringUnplug;
bool bEnableDevId;
};
extern struct DP_REGKEY_DATABASE dpRegkeyDatabase;

View File

@@ -51,6 +51,17 @@
#include "ctrl/ctrl0073/ctrl0073dp.h"
#include "dp_tracing.h"
/*
* This is needed by Synaptics to disable DisplayExpand feature
* in some of their docking station based on if GPU supports DSC.
* Feature is not needed if DSC is supported.
* Customers reported problems with the feature enabled on GB20x devices
* and requested GPU DSC detection to disable DisplayExpand feature.
* DSC is supported in Turing and later SKUs hence
* exposing Turing DevId to customers to address their requirement.
*/
#define TURING_DEV_ID 0x1E
using namespace DisplayPort;
ConnectorImpl::ConnectorImpl(MainLink * main, AuxBus * auxBus, Timer * timer, Connector::EventSink * sink)
@@ -187,6 +198,7 @@ void ConnectorImpl::applyRegkeyOverrides(const DP_REGKEY_DATABASE& dpRegkeyDatab
this->bForceHeadShutdownFromRegkey = dpRegkeyDatabase.bForceHeadShutdown;
this->bEnableLowerBppCheckForDsc = dpRegkeyDatabase.bEnableLowerBppCheckForDsc;
this->bSkipSettingLinkStateDuringUnplug = dpRegkeyDatabase.bSkipSettingLinkStateDuringUnplug;
this->bEnableDevId = dpRegkeyDatabase.bEnableDevId;
}
void ConnectorImpl::setPolicyModesetOrderMitigation(bool enabled)
@@ -3894,14 +3906,20 @@ bool ConnectorImpl::getIgnoreSourceOuiHandshake()
bool ConnectorImpl::performIeeeOuiHandshake()
{
const char *ieeeOuiDevId = "NVIDIA";
NvU8 chipRevision = 0x0;
bool bGpuDscSupported = NV_FALSE;
main->getDscCaps(&bGpuDscSupported);
if ((this->bEnableDevId) && (bGpuDscSupported))
{
chipRevision = TURING_DEV_ID;
}
if (!hal->getOuiSupported() || getIgnoreSourceOuiHandshake())
return false;
if (hal->setOuiSource(DPCD_OUI_NVIDIA, ieeeOuiDevId, 6 /* string length of ieeeOuiDevId */, 0) == AuxRetry::ack)
if (hal->setOuiSource(DPCD_OUI_NVIDIA, ieeeOuiDevId, 6 /* string length of ieeeOuiDevId */, chipRevision) == AuxRetry::ack)
{
NvU8 chipRevision = 0;
// parse client OUI.
if (hal->getOuiSink(ouiId, &modelName[0], sizeof(modelName), chipRevision))
{

View File

@@ -107,7 +107,8 @@ const struct
{NV_DP_REGKEY_ENABLE_FIX_FOR_5147205, &dpRegkeyDatabase.bEnable5147205Fix, DP_REG_VAL_BOOL},
{NV_DP_REGKEY_FORCE_HEAD_SHUTDOWN, &dpRegkeyDatabase.bForceHeadShutdown, DP_REG_VAL_BOOL},
{NV_DP_REGKEY_ENABLE_LOWER_BPP_CHECK_FOR_DSC, &dpRegkeyDatabase.bEnableLowerBppCheckForDsc, DP_REG_VAL_BOOL},
{NV_DP_REGKEY_SKIP_SETTING_LINK_STATE_DURING_UNPLUG, &dpRegkeyDatabase.bSkipSettingLinkStateDuringUnplug, DP_REG_VAL_BOOL}
{NV_DP_REGKEY_SKIP_SETTING_LINK_STATE_DURING_UNPLUG, &dpRegkeyDatabase.bSkipSettingLinkStateDuringUnplug, DP_REG_VAL_BOOL},
{NV_DP_REGKEY_EXPOSE_DSC_DEVID_WAR, &dpRegkeyDatabase.bEnableDevId, DP_REG_VAL_BOOL}
};
EvoMainLink::EvoMainLink(EvoInterface * provider, Timer * timer) :

View File

@@ -117,9 +117,9 @@ void ConnectorImpl2x::applyOuiWARs()
(modelName[1] == 'C') &&
(modelName[2] == '2') &&
(modelName[3] == '9') &&
(modelName[4] == '0') &&
(modelName[5] == 0x04U))
(modelName[4] == '0'))
{
bForceHeadShutdownPerMonitor = true;
bApplyStuffDummySymbolsWAR = true;
bStuffDummySymbolsFor128b132b = false;
bStuffDummySymbolsFor8b10b = true;

View File

@@ -36,25 +36,25 @@
// and then checked back in. You cannot make changes to these sections without
// corresponding changes to the buildmeister script
#ifndef NV_BUILD_BRANCH
#define NV_BUILD_BRANCH r573_48
#define NV_BUILD_BRANCH r570_00
#endif
#ifndef NV_PUBLIC_BRANCH
#define NV_PUBLIC_BRANCH r573_48
#define NV_PUBLIC_BRANCH r570_00
#endif
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS)
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r570/r573_48-509"
#define NV_BUILD_CHANGELIST_NUM (36220323)
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r570/r570_00-540"
#define NV_BUILD_CHANGELIST_NUM (36324750)
#define NV_BUILD_TYPE "Official"
#define NV_BUILD_NAME "rel/gpu_drv/r570/r573_48-509"
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (36220323)
#define NV_BUILD_NAME "rel/gpu_drv/r570/r570_00-540"
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (36324750)
#else /* Windows builds */
#define NV_BUILD_BRANCH_VERSION "r573_48-4"
#define NV_BUILD_CHANGELIST_NUM (36212872)
#define NV_BUILD_BRANCH_VERSION "r570_00-536"
#define NV_BUILD_CHANGELIST_NUM (36324750)
#define NV_BUILD_TYPE "Official"
#define NV_BUILD_NAME "573.55"
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (36212872)
#define NV_BUILD_NAME "573.65"
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (36324750)
#define NV_BUILD_BRANCH_BASE_VERSION R570
#endif
// End buildmeister python edited section

View File

@@ -4,7 +4,7 @@
#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)
#define NV_VERSION_STRING "570.172.08"
#define NV_VERSION_STRING "570.181"
#else

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2006-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2006-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@@ -4593,4 +4593,25 @@ typedef struct NV2080_CTRL_GPU_GET_TPC_RECONFIG_MASK_PARAMS {
NvU32 tpcReconfigMask;
} NV2080_CTRL_GPU_GET_TPC_RECONFIG_MASK_PARAMS;
/*
* NV2080_CTRL_CMD_GPU_FORCE_GSP_UNLOAD
*
* This command is used to trigger GSP Unload
*
* flags[IN]
* Flags passed by caller - For future use.
*
* Possible status values returned are:
* NV_OK
* NV_ERR_INSUFFICIENT_PERMISSIONS
* NV_ERR_NOT_SUPPORTED
*/
#define NV2080_CTRL_CMD_GPU_FORCE_GSP_UNLOAD (0x208001e9U) /* finn: Evaluated from "(FINN_NV20_SUBDEVICE_0_GPU_INTERFACE_ID << 8) | NV2080_CTRL_GPU_FORCE_GSP_UNLOAD_PARAMS_MESSAGE_ID" */
#define NV2080_CTRL_GPU_FORCE_GSP_UNLOAD_PARAMS_MESSAGE_ID (0xe9U)
typedef struct NV2080_CTRL_GPU_FORCE_GSP_UNLOAD_PARAMS {
NvU32 flags;
} NV2080_CTRL_GPU_FORCE_GSP_UNLOAD_PARAMS;
/* _ctrl2080gpu_h_ */

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2023 - 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@@ -259,7 +259,8 @@ typedef enum {
// unhandled interrupt)
NV_CRASHCAT_CAUSE_TYPE_TIMEOUT = 0x1, // Crash observed via timeout or hang condition
NV_CRASHCAT_CAUSE_TYPE_PANIC = 0x2, // Crash observed via direct panic condition
NV_CRASHCAT_CAUSE_TYPE_LAST = 0x2
NV_CRASHCAT_CAUSE_TYPE_WATCHDOG = 0x3, // Timeout observed via Libos watchdog
NV_CRASHCAT_CAUSE_TYPE_LAST = 0x3
} NV_CRASHCAT_CAUSE_TYPE;
//
@@ -599,6 +600,7 @@ typedef struct NvCrashCatReport_V1 {
#define NV_CRASHCAT_REPORT_V1_SOURCE_CAUSE_TYPE_EXCEPTION NV_CRASHCAT_CAUSE_TYPE_EXCEPTION
#define NV_CRASHCAT_REPORT_V1_SOURCE_CAUSE_TYPE_TIMEOUT NV_CRASHCAT_CAUSE_TYPE_TIMEOUT
#define NV_CRASHCAT_REPORT_V1_SOURCE_CAUSE_TYPE_PANIC NV_CRASHCAT_CAUSE_TYPE_PANIC
#define NV_CRASHCAT_REPORT_V1_SOURCE_CAUSE_TYPE_WATCHDOG NV_CRASHCAT_CAUSE_TYPE_WATCHDOG
#define NV_CRASHCAT_REPORT_V1_SOURCE_CAUSE_CONTAINMENT 7:4
#define NV_CRASHCAT_REPORT_V1_SOURCE_CAUSE_CONTAINMENT_UNSPECIFIED \

View File

@@ -176,6 +176,20 @@ void crashcatReportDestruct_V1(struct CrashCatReport *arg1);
#define __nvoc_crashcatReportDestruct(arg1) crashcatReportDestruct_V1(arg1)
NvBool crashcatReportIsWatchdog_V1(struct CrashCatReport *arg1);
#ifdef __nvoc_crashcat_report_h_disabled
static inline NvBool crashcatReportIsWatchdog(struct CrashCatReport *arg1) {
NV_ASSERT_FAILED_PRECOMP("CrashCatReport was disabled!");
return NV_FALSE;
}
#else //__nvoc_crashcat_report_h_disabled
#define crashcatReportIsWatchdog(arg1) crashcatReportIsWatchdog_V1(arg1)
#endif //__nvoc_crashcat_report_h_disabled
#define crashcatReportIsWatchdog_HAL(arg1) crashcatReportIsWatchdog(arg1)
void *crashcatReportExtract_V1(struct CrashCatReport *arg1, void *pReportBytes, NvLength bytesRemaining);
@@ -425,14 +439,18 @@ const char *crashcatReportRiscvCauseToString(NvU64 xcause);
#endif
#define CRASHCAT_REPORT_LOG_PACKET_TYPE(pReport, fmt, ...) \
portDbgPrintf(CRASHCAT_LOG_PREFIX CRASHCAT_LOG_INDENT fmt, ##__VA_ARGS__); \
NVLOG_PRINTF(NV_PRINTF_MODULE, NVLOG_ROUTE_RM, LEVEL_ERROR, \
CRASHCAT_LOG_PREFIX CRASHCAT_LOG_INDENT fmt, ##__VA_ARGS__)
do {\
portDbgPrintf(CRASHCAT_LOG_PREFIX CRASHCAT_LOG_INDENT fmt, ##__VA_ARGS__); \
NVLOG_PRINTF(NV_PRINTF_MODULE, NVLOG_ROUTE_RM, LEVEL_ERROR, \
CRASHCAT_LOG_PREFIX CRASHCAT_LOG_INDENT fmt, ##__VA_ARGS__); \
} while (0)
#define CRASHCAT_REPORT_LOG_DATA(pReport, fmt, ...) \
portDbgPrintf(CRASHCAT_LOG_PREFIX CRASHCAT_LOG_INDENT CRASHCAT_LOG_INDENT fmt, ##__VA_ARGS__); \
NVLOG_PRINTF(NV_PRINTF_MODULE, NVLOG_ROUTE_RM, LEVEL_ERROR, \
CRASHCAT_LOG_PREFIX CRASHCAT_LOG_INDENT CRASHCAT_LOG_INDENT fmt, ##__VA_ARGS__)
do {\
portDbgPrintf(CRASHCAT_LOG_PREFIX CRASHCAT_LOG_INDENT CRASHCAT_LOG_INDENT fmt, ##__VA_ARGS__); \
NVLOG_PRINTF(NV_PRINTF_MODULE, NVLOG_ROUTE_RM, LEVEL_ERROR, \
CRASHCAT_LOG_PREFIX CRASHCAT_LOG_INDENT CRASHCAT_LOG_INDENT fmt, ##__VA_ARGS__); \
} while (0)
#endif // CRASHCAT_REPORT_H

View File

@@ -73,6 +73,19 @@ extern "C" {
typedef struct SimAccessBuffer SimAccessBuffer;
typedef struct GSP_FMC_BOOT_PARAMS GSP_FMC_BOOT_PARAMS;
struct CrashCatReport;
#ifndef __NVOC_CLASS_CrashCatReport_TYPEDEF__
#define __NVOC_CLASS_CrashCatReport_TYPEDEF__
typedef struct CrashCatReport CrashCatReport;
#endif /* __NVOC_CLASS_CrashCatReport_TYPEDEF__ */
#ifndef __nvoc_class_id_CrashCatReport
#define __nvoc_class_id_CrashCatReport 0xde4777
#endif /* __nvoc_class_id_CrashCatReport */
/*!
* Structure for VBIOS image for early FRTS.
*/
@@ -478,6 +491,7 @@ struct KernelGsp {
NvBool bInLockdown;
NvBool bPollingForRpcResponse;
NvBool bFatalError;
struct CrashCatReport *pWatchdogReport;
MEMORY_DESCRIPTOR *pMemDesc_simAccessBuf;
SimAccessBuffer *pSimAccessBuf;
NvP64 pSimAccessBufPriv;

View File

@@ -5451,6 +5451,7 @@ static const CHIPS_RELEASED sChipsReleased[] = {
{ 0x2D39, 0x0000, 0x0000, "NVIDIA RTX PRO 2000 Blackwell Generation Laptop GPU" },
{ 0x2D58, 0x0000, 0x0000, "NVIDIA GeForce RTX 5070 Laptop GPU" },
{ 0x2D59, 0x0000, 0x0000, "NVIDIA GeForce RTX 5060 Laptop GPU" },
{ 0x2D83, 0xc791, 0x17aa, "NVIDIA GeForce RTX 5050" },
{ 0x2D98, 0x0000, 0x0000, "NVIDIA GeForce RTX 5050 Laptop GPU" },
{ 0x2DB8, 0x0000, 0x0000, "NVIDIA RTX PRO 1000 Blackwell Generation Laptop GPU" },
{ 0x2DB9, 0x0000, 0x0000, "NVIDIA RTX PRO 500 Blackwell Generation Laptop GPU" },

File diff suppressed because it is too large Load Diff

View File

@@ -148,7 +148,7 @@ struct Subdevice {
struct Notifier *__nvoc_pbase_Notifier; // notify super
struct Subdevice *__nvoc_pbase_Subdevice; // subdevice
// Vtable with 620 per-object function pointers
// Vtable with 621 per-object function pointers
NV_STATUS (*__subdeviceCtrlCmdBiosGetInfoV2__)(struct Subdevice * /*this*/, NV2080_CTRL_BIOS_GET_INFO_V2_PARAMS *); // halified (2 hals) exported (id=0x20800810) body
NV_STATUS (*__subdeviceCtrlCmdBiosGetNbsiV2__)(struct Subdevice * /*this*/, NV2080_CTRL_BIOS_GET_NBSI_V2_PARAMS *); // exported (id=0x2080080e)
NV_STATUS (*__subdeviceCtrlCmdBiosGetSKUInfo__)(struct Subdevice * /*this*/, NV2080_CTRL_BIOS_GET_SKU_INFO_PARAMS *); // halified (2 hals) exported (id=0x20800808)
@@ -424,6 +424,7 @@ struct Subdevice {
NV_STATUS (*__subdeviceCtrlCmdGrStaticGetFecsTraceDefines__)(struct Subdevice * /*this*/, NV2080_CTRL_INTERNAL_STATIC_GR_GET_FECS_TRACE_DEFINES_PARAMS *); // exported (id=0x20800a3e)
NV_STATUS (*__subdeviceCtrlCmdKGrInternalInitBug4208224War__)(struct Subdevice * /*this*/, NV2080_CTRL_INTERNAL_KGR_INIT_BUG4208224_WAR_PARAMS *); // exported (id=0x20800a46)
NV_STATUS (*__subdeviceCtrlCmdGpuGetCachedInfo__)(struct Subdevice * /*this*/, NV2080_CTRL_GPU_GET_INFO_V2_PARAMS *); // exported (id=0x20800182)
NV_STATUS (*__subdeviceCtrlCmdGpuForceGspUnload__)(struct Subdevice * /*this*/, NV2080_CTRL_GPU_FORCE_GSP_UNLOAD_PARAMS *); // exported (id=0x208001e9)
NV_STATUS (*__subdeviceCtrlCmdGpuGetInfoV2__)(struct Subdevice * /*this*/, NV2080_CTRL_GPU_GET_INFO_V2_PARAMS *); // exported (id=0x20800102)
NV_STATUS (*__subdeviceCtrlCmdGpuGetIpVersion__)(struct Subdevice * /*this*/, NV2080_CTRL_GPU_GET_IP_VERSION_PARAMS *); // exported (id=0x2080014d)
NV_STATUS (*__subdeviceCtrlCmdGpuGetPhysicalBridgeVersionInfo__)(struct Subdevice * /*this*/, NV2080_CTRL_GPU_GET_PHYSICAL_BRIDGE_VERSION_INFO_PARAMS *); // exported (id=0x2080015a)
@@ -1460,6 +1461,8 @@ NV_STATUS __nvoc_objCreate_Subdevice(Subdevice**, Dynamic*, NvU32, struct CALL_C
#define subdeviceCtrlCmdKGrInternalInitBug4208224War(pSubdevice, pParams) subdeviceCtrlCmdKGrInternalInitBug4208224War_DISPATCH(pSubdevice, pParams)
#define subdeviceCtrlCmdGpuGetCachedInfo_FNPTR(pSubdevice) pSubdevice->__subdeviceCtrlCmdGpuGetCachedInfo__
#define subdeviceCtrlCmdGpuGetCachedInfo(pSubdevice, pGpuInfoParams) subdeviceCtrlCmdGpuGetCachedInfo_DISPATCH(pSubdevice, pGpuInfoParams)
#define subdeviceCtrlCmdGpuForceGspUnload_FNPTR(pSubdevice) pSubdevice->__subdeviceCtrlCmdGpuForceGspUnload__
#define subdeviceCtrlCmdGpuForceGspUnload(pSubdevice, pGpuInfoParams) subdeviceCtrlCmdGpuForceGspUnload_DISPATCH(pSubdevice, pGpuInfoParams)
#define subdeviceCtrlCmdGpuGetInfoV2_FNPTR(pSubdevice) pSubdevice->__subdeviceCtrlCmdGpuGetInfoV2__
#define subdeviceCtrlCmdGpuGetInfoV2(pSubdevice, pGpuInfoParams) subdeviceCtrlCmdGpuGetInfoV2_DISPATCH(pSubdevice, pGpuInfoParams)
#define subdeviceCtrlCmdGpuGetIpVersion_FNPTR(pSubdevice) pSubdevice->__subdeviceCtrlCmdGpuGetIpVersion__
@@ -3335,6 +3338,10 @@ static inline NV_STATUS subdeviceCtrlCmdGpuGetCachedInfo_DISPATCH(struct Subdevi
return pSubdevice->__subdeviceCtrlCmdGpuGetCachedInfo__(pSubdevice, pGpuInfoParams);
}
static inline NV_STATUS subdeviceCtrlCmdGpuForceGspUnload_DISPATCH(struct Subdevice *pSubdevice, NV2080_CTRL_GPU_FORCE_GSP_UNLOAD_PARAMS *pGpuInfoParams) {
return pSubdevice->__subdeviceCtrlCmdGpuForceGspUnload__(pSubdevice, pGpuInfoParams);
}
static inline NV_STATUS subdeviceCtrlCmdGpuGetInfoV2_DISPATCH(struct Subdevice *pSubdevice, NV2080_CTRL_GPU_GET_INFO_V2_PARAMS *pGpuInfoParams) {
return pSubdevice->__subdeviceCtrlCmdGpuGetInfoV2__(pSubdevice, pGpuInfoParams);
}
@@ -5529,6 +5536,8 @@ NV_STATUS subdeviceCtrlCmdKGrInternalInitBug4208224War_IMPL(struct Subdevice *pS
NV_STATUS subdeviceCtrlCmdGpuGetCachedInfo_IMPL(struct Subdevice *pSubdevice, NV2080_CTRL_GPU_GET_INFO_V2_PARAMS *pGpuInfoParams);
NV_STATUS subdeviceCtrlCmdGpuForceGspUnload_IMPL(struct Subdevice *pSubdevice, NV2080_CTRL_GPU_FORCE_GSP_UNLOAD_PARAMS *pGpuInfoParams);
NV_STATUS subdeviceCtrlCmdGpuGetInfoV2_IMPL(struct Subdevice *pSubdevice, NV2080_CTRL_GPU_GET_INFO_V2_PARAMS *pGpuInfoParams);
NV_STATUS subdeviceCtrlCmdGpuGetIpVersion_IMPL(struct Subdevice *pSubdevice, NV2080_CTRL_GPU_GET_IP_VERSION_PARAMS *pGpuIpVersionParams);

View File

@@ -404,7 +404,12 @@ gsyncAttachGpu(PDACEXTERNALDEVICE pExtDev, OBJGPU *pGpu,
// The timing source needs to agree with this, but all GPUs on the GSync
// should be the same, so we will use the type of the first GPU
//
NV_ASSERT_OK_OR_RETURN(pGsync->gsyncHal.gsyncSetRasterSyncDecodeMode(pGpu, pGpu, pGsync->pExtDev));
// Errors here should not prevent from loading the Gsync board
//
NV_STATUS status;
NV_CHECK_OK(status, LEVEL_WARNING,
pGsync->gsyncHal.gsyncSetRasterSyncDecodeMode(pGpu, pGpu, pGsync->pExtDev));
}
return NV_OK;
@@ -2515,23 +2520,10 @@ gsyncNullSetRasterSyncDecodeMode
)
{
//
// Performs no action on the Gsync board except for P2061 FW 3.00+
// But, this detects when the raster sync mode is not supported by earlier FWs
// No action needed on P2061 pre-3.0 FW.
// Framelock is not possible on Blackwell with pre-3.0 FW, but that is for
// NV_ESC_NVAPI_GSYNC_QUERY_CAPABILITIES.isFirmwareRevMismatch to catch.
//
NV2080_CTRL_INTERNAL_GSYNC_GET_RASTER_SYNC_DECODE_MODE_PARAMS
rasterSyncDecodeModeParams;
RM_API *pRmApi = GPU_GET_PHYSICAL_RMAPI(pServerGpu);
// Pre-3.00 FW can only use NV2080_CTRL_CMD_INTERNAL_GSYNC_GET_RASTER_SYNC_DECODE_MODE
NV_ASSERT_OK_OR_RETURN(pRmApi->Control(pRmApi, pServerGpu->hInternalClient,
pServerGpu->hInternalSubdevice, NV2080_CTRL_CMD_INTERNAL_GSYNC_GET_RASTER_SYNC_DECODE_MODE,
&rasterSyncDecodeModeParams, sizeof(rasterSyncDecodeModeParams)));
NV_CHECK_OR_RETURN(LEVEL_WARNING,
rasterSyncDecodeModeParams.rasterSyncDecodeMode ==
NV_P2061_CONTROL5_RASTER_SYNC_DECODE_MODE_VSYNC_SHORT_PULSE,
NV_ERR_INVALID_OPERATION);
return NV_OK;
}

View File

@@ -990,6 +990,21 @@ kgspHealthCheck_TU102
while ((pReport = crashcatEngineGetNextCrashReport(pCrashCatEng)) != NULL)
{
if (crashcatReportIsWatchdog_HAL(pReport))
{
NV_PRINTF(LEVEL_INFO, "Assign a CrashcatReport to pWatchdogReport\n");
//
// Keep the first report until the corresponding RPC is done
// Before that, subsequent reports are ignored
//
if (pKernelGsp->pWatchdogReport != NULL)
objDelete(pReport);
else
pKernelGsp->pWatchdogReport = pReport;
continue;
}
if (kgspCrashCatReportImpactsGspRm(pReport))
bHealthy = NV_FALSE;

View File

@@ -91,6 +91,8 @@
#include "diagnostics/code_coverage_mgr.h"
#endif
#include "crashcat/crashcat_report.h"
#define RPC_HDR ((rpc_message_header_v*)(pRpc->message_buffer))
struct MIG_CI_UPDATE_CALLBACK_PARAMS
@@ -1963,7 +1965,7 @@ _kgspLogXid119
NvU64 ts_end = osGetTimestamp();
NvU64 duration;
char durationUnitsChar;
KernelGsp *pKernelGsp = GPU_GET_KERNEL_GSP(pGpu);
if (pRpc->timeoutCount == 1)
{
NV_PRINTF(LEVEL_ERROR,
@@ -1990,6 +1992,13 @@ _kgspLogXid119
if (pRpc->timeoutCount == 1)
{
if (pKernelGsp->pWatchdogReport != NULL)
{
crashcatReportLog(pKernelGsp->pWatchdogReport);
objDelete(pKernelGsp->pWatchdogReport);
pKernelGsp->pWatchdogReport = NULL;
}
kgspLogRpcDebugInfo(pGpu, pRpc, GSP_RPC_TIMEOUT, NV_TRUE/*bPollingForRpcResponse*/);
osAssertFailed();
@@ -2163,6 +2172,12 @@ _kgspRpcRecvPoll
// The synchronous RPC response we were waiting for is here
_kgspCompleteRpcHistoryEntry(pRpc->rpcHistory, pRpc->rpcHistoryCurrent);
rpcStatus = NV_OK;
// The watchdog report that's related to this RPC is no longer needed
if (pKernelGsp->pWatchdogReport != NULL)
{
objDelete(pKernelGsp->pWatchdogReport);
pKernelGsp->pWatchdogReport = NULL;
}
goto done;
case NV_OK:
// Check timeout and continue outer loop.
@@ -2515,6 +2530,7 @@ kgspInitVgpuPartitionLogging_IMPL
NV_STATUS nvStatus = NV_OK;
char sourceName[SOURCE_NAME_MAX_LENGTH];
NvBool bPreserveLogBufferFull = NV_FALSE;
OBJTMR *pTmr = GPU_GET_TIMER(pGpu);
if (gfid > MAX_PARTITIONS_WITH_GFID)
{
@@ -2642,6 +2658,8 @@ kgspInitVgpuPartitionLogging_IMPL
*pPreserveLogBufferFull = bPreserveLogBufferFull;
libosLogUpdateTimerDelta(&pKernelGsp->logDecodeVgpuPartition[gfid - 1], pTmr->sysTimerOffsetNs);
exit:
if (nvStatus != NV_OK)
_kgspFreeLibosVgpuPartitionLoggingStructures(pGpu, pKernelGsp, gfid);
@@ -3876,6 +3894,12 @@ kgspUnloadRm_IMPL
osDelay(250);
}
if (pKernelGsp->pWatchdogReport != NULL)
{
objDelete(pKernelGsp->pWatchdogReport);
pKernelGsp->pWatchdogReport = NULL;
}
if (rpcStatus != NV_OK)
{
return rpcStatus;

View File

@@ -61,7 +61,7 @@ intrGetLocklessVectorsInRmSubtree_GA100
//
NV_ASSERT(i < NV_ARRAY_ELEMENTS((*pInterruptVectors)));
if (!IS_VGPU_GSP_PLUGIN_OFFLOAD_ENABLED(pGpu))
if (IS_VIRTUAL(pGpu) || !IS_VGPU_GSP_PLUGIN_OFFLOAD_ENABLED(pGpu))
{
(*pInterruptVectors)[i] = intrGetVectorFromEngineId(pGpu, pIntr,
MC_ENGINE_IDX_NON_REPLAYABLE_FAULT,

View File

@@ -1321,8 +1321,6 @@ void intrProcessDPCQueue_IMPL
DPCQUEUE *pDPCQueue = &pIntr->dpcQueue;
MC_ENGINE_BITVECTOR pendingEngines;
NvU16 nextEngine;
KernelGmmu *pKernelGmmu = GPU_GET_KERNEL_GMMU(pGpu);
NvU32 faultsCopied = 0;
do
{
@@ -1355,14 +1353,6 @@ void intrProcessDPCQueue_IMPL
if (!bitVectorTestAllCleared(&pendingEngines))
{
nextEngine = bitVectorCountTrailingZeros(&pendingEngines);
//
// Service Non-Replayable interrupt in bottom-half
// in case it is triggered while handling other software events like p-state in VGPU.
//
if (IS_VIRTUAL(pGpu) && (nextEngine == MC_ENGINE_IDX_NON_REPLAYABLE_FAULT))
{
kgmmuCopyMmuFaults_HAL(pGpu, pKernelGmmu, NULL, &faultsCopied, NON_REPLAYABLE_FAULT_BUFFER, NV_FALSE);
}
intrQueueInterruptBasedDpc(pGpu, pIntr, nextEngine);
bitVectorCopy(&pIntr->pmcIntrPending, &pendingEngines);
bitVectorClr(&pIntr->pmcIntrPending, nextEngine);

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2004-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2004-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@@ -39,6 +39,7 @@
#include "gpu/bif/kernel_bif.h"
#include "gpu/bus/kern_bus.h"
#include "gpu/gsp/gsp_static_config.h"
#include "gpu/gsp/kernel_gsp.h"
#include "gpu/disp/kern_disp.h"
#include "disp/nvfbc_session.h"
#include "gpu/mmu/kern_gmmu.h"
@@ -549,6 +550,30 @@ subdeviceCtrlCmdGpuGetCachedInfo_IMPL
return getGpuInfos(pSubdevice, pGpuInfoParams, NV_FALSE);
}
NV_STATUS
subdeviceCtrlCmdGpuForceGspUnload_IMPL
(
Subdevice *pSubdevice,
NV2080_CTRL_GPU_FORCE_GSP_UNLOAD_PARAMS *pGpuInfoParams
)
{
NV_STATUS rmStatus = NV_OK;
OBJGPU *pGpu = GPU_RES_GET_GPU(pSubdevice);
KernelGsp *pKernelGsp = GPU_GET_KERNEL_GSP(pGpu);
NV_CHECK_OR_RETURN(LEVEL_INFO, !IS_MIG_IN_USE(pGpu), NV_ERR_NOT_SUPPORTED);
NV_CHECK_OR_RETURN(LEVEL_INFO, IS_VGPU_GSP_PLUGIN_OFFLOAD_ENABLED(pGpu), NV_ERR_NOT_SUPPORTED);
// Call gsp unload now.
rmStatus = kgspUnloadRm(pGpu, pKernelGsp, KGSP_UNLOAD_MODE_NORMAL, GPU_STATE_FLAGS_FAST_UNLOAD);
pKernelGsp->bFatalError = NV_TRUE;
return rmStatus;;
}
static OBJHWBC *
getBridgeObject(OBJHWBC *pHWBC, NvU32 hwbcId)
{

View File

@@ -3139,7 +3139,7 @@ nvpcf2xGetStaticParams_exit:
NvU8 *pData = NULL;
NvU32 i;
NvU8 prevThreshold = 99;
NvU8 version;
NvU32 version;
NvU16 size = NVPCF_DC_SYSTEM_POWER_LIMITS_TABLE_1X_HEADER_SIZE_04 +
(NVPCF_DC_SYSTEM_POWER_LIMITS_TABLE_VERSION_10_MAX_ENTRIES *
NVPCF_DC_SYSTEM_POWER_LIMITS_TABLE_1X_ENTRY_SIZE_11);

View File

@@ -84,7 +84,8 @@ void crashcatReportLog_IMPL(CrashCatReport *pReport)
}
FOR_EACH_INDEX_IN_MASK_END;
CRASHCAT_REPORT_LOG_PACKET_TYPE(pReport, "------------[ end crash report ]------------\n");
if (!crashcatReportIsWatchdog_HAL(pReport))
CRASHCAT_REPORT_LOG_PACKET_TYPE(pReport, "------------[ end crash report ]------------\n");
}
// xcause CSR format and codes are a backward-compatible part of the RISC-V standard

View File

@@ -548,3 +548,8 @@ void crashcatReportLogIo32State_V1(CrashCatReport *pReport)
break;
}
}
NvBool crashcatReportIsWatchdog_V1(CrashCatReport *pReport)
{
return crashcatReportV1SourceCauseType(&pReport->v1.report) == NV_CRASHCAT_CAUSE_TYPE_WATCHDOG;
}

View File

@@ -70,11 +70,13 @@ void crashcatReportLogSource_V1_LIBOS2(CrashCatReport *pReport)
NvU8 taskId = crashcatReportV1SourceLibos2TaskId(pReportV1);
#define CRASHCAT_LOG_LIBOS2_SOURCE(fmt, ...) \
if (taskId == NV_CRASHCAT_REPORT_V1_SOURCE_ID_LIBOS2_TASK_ID_UNSPECIFIED) \
crashcatEnginePrintf(pReport->pEngine, NV_TRUE, fmt, __VA_ARGS__ ); \
else \
crashcatEnginePrintf(pReport->pEngine, NV_TRUE, fmt ", task:%u", __VA_ARGS__, taskId)
#define CRASHCAT_LOG_LIBOS2_SOURCE(fmt, ...) \
do { \
if (taskId == NV_CRASHCAT_REPORT_V1_SOURCE_ID_LIBOS2_TASK_ID_UNSPECIFIED) \
crashcatEnginePrintf(pReport->pEngine, NV_TRUE, fmt, ##__VA_ARGS__); \
else \
crashcatEnginePrintf(pReport->pEngine, NV_TRUE, fmt ", task:%u", ##__VA_ARGS__, taskId); \
} while (0)
const char *pModeStr = crashcatReportModeToString_LIBOS2(crashcatReportV1SourceMode(pReportV1));
switch (crashcatReportV1SourceCauseType(pReportV1))
@@ -106,6 +108,13 @@ void crashcatReportLogSource_V1_LIBOS2(CrashCatReport *pReport)
reason, pReportV1->sourcePc, pReportV1->sourceData);
break;
}
case NV_CRASHCAT_CAUSE_TYPE_WATCHDOG:
{
// Watchdog is not supported in libos2
CRASHCAT_LOG_LIBOS2_SOURCE(
"Watchdog is not supported in libos2, please check if NV_CRASHCAT_CAUSE_TYPE is set correctly");
break;
}
}
}

View File

@@ -73,13 +73,22 @@ void crashcatReportLogSource_V1_LIBOS3(CrashCatReport *pReport)
NvCrashCatNvriscvPartition sourcePartition = crashcatReportV1SourcePartition(pReportV1);
NvCrashCatNvriscvUcodeId sourceUcodeId = crashcatReportV1SourceUcodeId(pReportV1);
/*
* We use the CRASHCAT_REPORT_LOG_PACKET_TYPE macro to get the correct
* prefix/indentation for the watchdog report
*/
#define CRASHCAT_LOG_LIBOS3_SOURCE(fmt, ...) \
if (taskId == NV_CRASHCAT_REPORT_V1_SOURCE_ID_LIBOS3_TASK_ID_UNSPECIFIED) \
crashcatEnginePrintf(pReport->pEngine, NV_TRUE, fmt ", partition:%u#%u", \
__VA_ARGS__, sourcePartition, sourceUcodeId); \
else \
crashcatEnginePrintf(pReport->pEngine, NV_TRUE, fmt ", partition:%u#%u, task:%u", \
__VA_ARGS__, sourcePartition, sourceUcodeId, taskId)
do { \
if (crashcatReportIsWatchdog_HAL(pReport)) \
CRASHCAT_REPORT_LOG_PACKET_TYPE(pReport, fmt ", partition:%u#%u, task:%u\n", \
##__VA_ARGS__, sourcePartition, sourceUcodeId, taskId); \
else if (taskId == NV_CRASHCAT_REPORT_V1_SOURCE_ID_LIBOS3_TASK_ID_UNSPECIFIED) \
crashcatEnginePrintf(pReport->pEngine, NV_TRUE, fmt ", partition:%u#%u", \
##__VA_ARGS__, sourcePartition, sourceUcodeId); \
else \
crashcatEnginePrintf(pReport->pEngine, NV_TRUE, fmt ", partition:%u#%u, task:%u", \
##__VA_ARGS__, sourcePartition, sourceUcodeId, taskId); \
} while(0)
const char *pModeStr = crashcatReportModeToString_LIBOS3(crashcatReportV1SourceMode(pReportV1));
switch (crashcatReportV1SourceCauseType(pReportV1))
@@ -102,6 +111,13 @@ void crashcatReportLogSource_V1_LIBOS3(CrashCatReport *pReport)
pModeStr, pReportV1->sourcePc);
break;
}
case NV_CRASHCAT_CAUSE_TYPE_WATCHDOG:
{
CRASHCAT_LOG_LIBOS3_SOURCE(
"%s watchdog timeout @ pc:0x%" NvU64_fmtx,
pModeStr, pReportV1->sourcePc);
break;
}
case NV_CRASHCAT_CAUSE_TYPE_PANIC:
{
// Kernel or task panic

View File

@@ -1,4 +1,4 @@
NVIDIA_VERSION = 570.172.08
NVIDIA_VERSION = 570.181
# This file.
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))