mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-04-30 03:01:19 +00:00
570.181
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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) :
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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_ */
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
NVIDIA_VERSION = 570.172.08
|
||||
NVIDIA_VERSION = 570.181
|
||||
|
||||
# This file.
|
||||
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
|
||||
|
||||
Reference in New Issue
Block a user