mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-01-31 05:29:47 +00:00
550.40.55
This commit is contained in:
@@ -90,6 +90,7 @@ ifeq ($(TARGET_ARCH),aarch64)
|
||||
CFLAGS += -mgeneral-regs-only
|
||||
CFLAGS += -march=armv8-a
|
||||
CFLAGS += -mstrict-align
|
||||
CFLAGS += -ffixed-x18
|
||||
CONDITIONAL_CFLAGS += $(call TEST_CC_ARG, -mno-outline-atomics)
|
||||
endif
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ NV_STATUS hypervisorInjectInterrupt_IMPL
|
||||
NV_STATUS status = NV_ERR_NOT_SUPPORTED;
|
||||
|
||||
if (pVgpuNsIntr->pVgpuVfioRef)
|
||||
status = osVgpuInjectInterrupt(pVgpuNsIntr->pVgpuVfioRef);
|
||||
return NV_ERR_NOT_SUPPORTED;
|
||||
else
|
||||
{
|
||||
if (pVgpuNsIntr->guestMSIAddr && pVgpuNsIntr->guestMSIData)
|
||||
|
||||
@@ -799,6 +799,7 @@ static const CHIPS_RELEASED sChipsReleased[] = {
|
||||
{ 0x1FF2, 0x1613, 0x103c, "NVIDIA T400 4GB" },
|
||||
{ 0x1FF2, 0x8a80, 0x103c, "NVIDIA T400 4GB" },
|
||||
{ 0x1FF2, 0x1613, 0x10de, "NVIDIA T400 4GB" },
|
||||
{ 0x1FF2, 0x18ff, 0x10de, "NVIDIA T400E" },
|
||||
{ 0x1FF2, 0x1613, 0x17aa, "NVIDIA T400 4GB" },
|
||||
{ 0x1FF2, 0x18ff, 0x17aa, "NVIDIA T400E" },
|
||||
{ 0x1FF9, 0x0000, 0x0000, "Quadro T1000" },
|
||||
@@ -959,6 +960,7 @@ static const CHIPS_RELEASED sChipsReleased[] = {
|
||||
{ 0x2571, 0x1611, 0x10de, "NVIDIA RTX A2000 12GB" },
|
||||
{ 0x2571, 0x1611, 0x17aa, "NVIDIA RTX A2000 12GB" },
|
||||
{ 0x2582, 0x0000, 0x0000, "NVIDIA GeForce RTX 3050" },
|
||||
{ 0x2584, 0x0000, 0x0000, "NVIDIA GeForce RTX 3050" },
|
||||
{ 0x25A0, 0x0000, 0x0000, "NVIDIA GeForce RTX 3050 Ti Laptop GPU" },
|
||||
{ 0x25A0, 0x8928, 0x103c, "NVIDIA GeForce RTX 3050Ti Laptop GPU" },
|
||||
{ 0x25A0, 0x89f9, 0x103c, "NVIDIA GeForce RTX 3050Ti Laptop GPU" },
|
||||
@@ -1052,6 +1054,9 @@ static const CHIPS_RELEASED sChipsReleased[] = {
|
||||
{ 0x28B0, 0x1870, 0x10de, "NVIDIA RTX 2000 Ada Generation" },
|
||||
{ 0x28B0, 0x1870, 0x17aa, "NVIDIA RTX 2000 Ada Generation" },
|
||||
{ 0x28B8, 0x0000, 0x0000, "NVIDIA RTX 2000 Ada Generation Laptop GPU" },
|
||||
{ 0x28B9, 0x0000, 0x0000, "NVIDIA RTX 1000 Ada Generation Laptop GPU" },
|
||||
{ 0x28BA, 0x0000, 0x0000, "NVIDIA RTX 500 Ada Generation Laptop GPU" },
|
||||
{ 0x28BB, 0x0000, 0x0000, "NVIDIA RTX 500 Ada Generation Laptop GPU" },
|
||||
{ 0x28E0, 0x0000, 0x0000, "NVIDIA GeForce RTX 4060 Laptop GPU" },
|
||||
{ 0x28E1, 0x0000, 0x0000, "NVIDIA GeForce RTX 4050 Laptop GPU" },
|
||||
{ 0x28F8, 0x0000, 0x0000, "NVIDIA RTX 2000 Ada Generation Embedded GPU" },
|
||||
|
||||
@@ -103,4 +103,24 @@ typedef struct MESSAGE_QUEUE_COLLECTION
|
||||
#define GSP_MSG_QUEUE_HEADER_SIZE RM_PAGE_SIZE
|
||||
#define GSP_MSG_QUEUE_HEADER_ALIGN 4 // 2 ^ 4 = 16
|
||||
|
||||
/*!
|
||||
* Calculate 32-bit checksum
|
||||
*
|
||||
* This routine assumes that the data is padded out with zeros to the next
|
||||
* 8-byte alignment, and it is OK to read past the end to the 8-byte alignment.
|
||||
*/
|
||||
static NV_INLINE NvU32 _checkSum32(void *pData, NvU32 uLen)
|
||||
{
|
||||
NvU64 *p = (NvU64 *)pData;
|
||||
NvU64 *pEnd = (NvU64 *)((NvUPtr)pData + uLen);
|
||||
NvU64 checkSum = 0;
|
||||
|
||||
NV_ASSERT_CHECKED(uLen > 0);
|
||||
|
||||
while (p < pEnd)
|
||||
checkSum ^= *p++;
|
||||
|
||||
return NvU64_HI32(checkSum) ^ NvU64_LO32(checkSum);
|
||||
}
|
||||
|
||||
#endif // _MESSAGE_QUEUE_PRIV_H_
|
||||
|
||||
@@ -585,6 +585,13 @@ kbifRestorePcieConfigRegisters_GM107
|
||||
NvU64 timeStampStart;
|
||||
NvU64 timeStampEnd;
|
||||
|
||||
if (pKernelBif->xveRegmapRef[0].bufBootConfigSpace == NULL)
|
||||
{
|
||||
NV_PRINTF(LEVEL_ERROR, "Config space buffer is NULL!\n");
|
||||
NV_ASSERT(0);
|
||||
return NV_ERR_OBJECT_NOT_FOUND;
|
||||
}
|
||||
|
||||
// Restore pcie config space for function 0
|
||||
status = _kbifRestorePcieConfigRegisters_GM107(pGpu, pKernelBif,
|
||||
&pKernelBif->xveRegmapRef[0]);
|
||||
|
||||
@@ -476,24 +476,6 @@ void GspMsgQueuesCleanup(MESSAGE_QUEUE_COLLECTION **ppMQCollection)
|
||||
*ppMQCollection = NULL;
|
||||
}
|
||||
|
||||
/*!
|
||||
* Calculate 32-bit checksum
|
||||
*
|
||||
* This routine assumes that the data is padded out with zeros to the next
|
||||
* 8-byte alignment, and it is OK to read past the end to the 8-byte alignment.
|
||||
*/
|
||||
static NV_INLINE NvU32 _checkSum32(void *pData, NvU32 uLen)
|
||||
{
|
||||
NvU64 *p = (NvU64 *)pData;
|
||||
NvU64 *pEnd = (NvU64 *)((NvUPtr)pData + uLen);
|
||||
NvU64 checkSum = 0;
|
||||
|
||||
while (p < pEnd)
|
||||
checkSum ^= *p++;
|
||||
|
||||
return NvU64_HI32(checkSum) ^ NvU64_LO32(checkSum);
|
||||
}
|
||||
|
||||
/*!
|
||||
* GspMsgQueueSendCommand
|
||||
*
|
||||
@@ -532,7 +514,7 @@ NV_STATUS GspMsgQueueSendCommand(MESSAGE_QUEUE_INFO *pMQI, OBJGPU *pGpu)
|
||||
|
||||
pCQE->seqNum = pMQI->txSeqNum;
|
||||
pCQE->elemCount = GSP_MSG_QUEUE_BYTES_TO_ELEMENTS(uElementSize);
|
||||
pCQE->checkSum = 0;
|
||||
pCQE->checkSum = 0; // The checkSum field is included in the checksum calculation, so zero it.
|
||||
|
||||
if (gpuIsCCFeatureEnabled(pGpu))
|
||||
{
|
||||
@@ -666,7 +648,8 @@ NV_STATUS GspMsgQueueReceiveStatus(MESSAGE_QUEUE_INFO *pMQI, OBJGPU *pGpu)
|
||||
NvU32 nRetries;
|
||||
NvU32 nMaxRetries = 3;
|
||||
NvU32 nElements = 1; // Assume record fits in one queue element for now.
|
||||
NvU32 uElementSize = 0;
|
||||
NvU32 uElementSize;
|
||||
NvU32 checkSum;
|
||||
NvU32 seqMismatchDiff = NV_U32_MAX;
|
||||
NV_STATUS nvStatus = NV_OK;
|
||||
|
||||
@@ -717,15 +700,23 @@ NV_STATUS GspMsgQueueReceiveStatus(MESSAGE_QUEUE_INFO *pMQI, OBJGPU *pGpu)
|
||||
// Retry if checksum fails.
|
||||
if (gpuIsCCFeatureEnabled(pGpu))
|
||||
{
|
||||
// In Confidential Compute scenario, checksum includes complete element range.
|
||||
if (_checkSum32(pMQI->pCmdQueueElement, (nElements * GSP_MSG_QUEUE_ELEMENT_SIZE_MIN)) != 0)
|
||||
{
|
||||
NV_PRINTF(LEVEL_ERROR, "Bad checksum.\n");
|
||||
nvStatus = NV_ERR_INVALID_DATA;
|
||||
continue;
|
||||
}
|
||||
//
|
||||
// In the Confidential Compute scenario, the actual message length
|
||||
// is inside the encrypted payload, and we can't access it before
|
||||
// decryption, therefore the checksum encompasses the whole element
|
||||
// range. This makes checksum verification significantly slower
|
||||
// because messages are typically much smaller than element size.
|
||||
//
|
||||
checkSum = _checkSum32(pMQI->pCmdQueueElement,
|
||||
(nElements * GSP_MSG_QUEUE_ELEMENT_SIZE_MIN));
|
||||
} else
|
||||
if (_checkSum32(pMQI->pCmdQueueElement, uElementSize) != 0)
|
||||
{
|
||||
checkSum = _checkSum32(pMQI->pCmdQueueElement,
|
||||
(GSP_MSG_QUEUE_ELEMENT_HDR_SIZE +
|
||||
pMQI->pCmdQueueElement->rpc.length));
|
||||
}
|
||||
|
||||
if (checkSum != 0)
|
||||
{
|
||||
NV_PRINTF(LEVEL_ERROR, "Bad checksum.\n");
|
||||
nvStatus = NV_ERR_INVALID_DATA;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: Copyright (c) 1993-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-FileCopyrightText: Copyright (c) 1993-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: Copyright (c) 1993-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-FileCopyrightText: Copyright (c) 1993-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
@@ -475,11 +475,14 @@ _kmemsysGetFbInfos
|
||||
// It will be zero unless VGA display memory is reserved
|
||||
if (pKernelMemorySystem->fbOverrideStartKb != 0)
|
||||
{
|
||||
status = NV_OK;
|
||||
data = NvU64_LO32(pKernelMemorySystem->fbOverrideStartKb);
|
||||
NV_ASSERT(((NvU64) data << 10ULL) == pKernelMemorySystem->fbOverrideStartKb);
|
||||
NV_ASSERT_OR_ELSE((NvU64) data == pKernelMemorySystem->fbOverrideStartKb,
|
||||
status = NV_ERR_INVALID_DATA);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
else
|
||||
{
|
||||
//
|
||||
// Returns start of heap in kbytes. This is zero unless
|
||||
// VGA display memory is reserved.
|
||||
|
||||
@@ -606,7 +606,8 @@ _memoryexportVerifyMem
|
||||
if (pGpu == NULL)
|
||||
return NV_OK;
|
||||
|
||||
if (pKernelMIGGpuInstance != NULL)
|
||||
// MIG is about vidmem partitioning, so limit the check.
|
||||
if ((pKernelMIGGpuInstance != NULL) && (addrSpace == ADDR_FBMEM))
|
||||
{
|
||||
if ((pKernelMIGGpuInstance->pMemoryPartitionHeap != pSrcMemory->pHeap))
|
||||
return NV_ERR_INVALID_OBJECT_PARENT;
|
||||
|
||||
@@ -1396,15 +1396,9 @@ NvU32 kvgpumgrGetPgpuSubdevIdEncoding(OBJGPU *pGpu, NvU8 *pgpuString,
|
||||
return NV_U32_MAX;
|
||||
}
|
||||
|
||||
switch (chipID)
|
||||
{
|
||||
default:
|
||||
// The encoding of the subdevice ID is its value converted to string
|
||||
bytes = NvU32ToAsciiStr(subID, SUBDEVID_ENCODED_VALUE_SIZE,
|
||||
// The encoding of the subdevice ID is its value converted to string
|
||||
bytes = NvU32ToAsciiStr(subID, SUBDEVID_ENCODED_VALUE_SIZE,
|
||||
pgpuString, NV_FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user