Skip to content

Commit 288f16e

Browse files
committed
580.76.05
1 parent 307159f commit 288f16e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+2037
-863
lines changed

README.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# NVIDIA Linux Open GPU Kernel Module Source
22

33
This is the source release of the NVIDIA Linux open GPU kernel modules,
4-
version 580.65.06.
4+
version 580.76.05.
55

66

77
## How to Build
@@ -17,7 +17,7 @@ as root:
1717

1818
Note that the kernel modules built here must be used with GSP
1919
firmware and user-space NVIDIA GPU driver components from a corresponding
20-
580.65.06 driver release. This can be achieved by installing
20+
580.76.05 driver release. This can be achieved by installing
2121
the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
2222
option. E.g.,
2323

@@ -185,7 +185,7 @@ table below).
185185
For details on feature support and limitations, see the NVIDIA GPU driver
186186
end user README here:
187187

188-
https://us.download.nvidia.com/XFree86/Linux-x86_64/580.65.06/README/kernel_open.html
188+
https://us.download.nvidia.com/XFree86/Linux-x86_64/580.76.05/README/kernel_open.html
189189

190190
For vGPU support, please refer to the README.vgpu packaged in the vGPU Host
191191
Package for more details.
@@ -951,6 +951,7 @@ Subsystem Device ID.
951951
| NVIDIA GB200 | 2941 10DE 21CA |
952952
| NVIDIA GeForce RTX 5090 | 2B85 |
953953
| NVIDIA GeForce RTX 5090 D | 2B87 |
954+
| NVIDIA GeForce RTX 5090 D V2 | 2B8C |
954955
| NVIDIA RTX PRO 6000 Blackwell Workstation Edition | 2BB1 1028 204B |
955956
| NVIDIA RTX PRO 6000 Blackwell Workstation Edition | 2BB1 103C 204B |
956957
| NVIDIA RTX PRO 6000 Blackwell Workstation Edition | 2BB1 10DE 204B |
@@ -972,6 +973,10 @@ Subsystem Device ID.
972973
| NVIDIA RTX PRO 4500 Blackwell | 2C31 103C 2051 |
973974
| NVIDIA RTX PRO 4500 Blackwell | 2C31 10DE 2051 |
974975
| NVIDIA RTX PRO 4500 Blackwell | 2C31 17AA 2051 |
976+
| NVIDIA RTX PRO 4000 Blackwell SFF Edition | 2C33 1028 2053 |
977+
| NVIDIA RTX PRO 4000 Blackwell SFF Edition | 2C33 103C 2053 |
978+
| NVIDIA RTX PRO 4000 Blackwell SFF Edition | 2C33 10DE 2053 |
979+
| NVIDIA RTX PRO 4000 Blackwell SFF Edition | 2C33 17AA 2053 |
975980
| NVIDIA RTX PRO 4000 Blackwell | 2C34 1028 2052 |
976981
| NVIDIA RTX PRO 4000 Blackwell | 2C34 103C 2052 |
977982
| NVIDIA RTX PRO 4000 Blackwell | 2C34 10DE 2052 |
@@ -984,6 +989,10 @@ Subsystem Device ID.
984989
| NVIDIA GeForce RTX 5060 | 2D05 |
985990
| NVIDIA GeForce RTX 5070 Laptop GPU | 2D18 |
986991
| NVIDIA GeForce RTX 5060 Laptop GPU | 2D19 |
992+
| NVIDIA RTX PRO 2000 Blackwell | 2D30 1028 2054 |
993+
| NVIDIA RTX PRO 2000 Blackwell | 2D30 103C 2054 |
994+
| NVIDIA RTX PRO 2000 Blackwell | 2D30 10DE 2054 |
995+
| NVIDIA RTX PRO 2000 Blackwell | 2D30 17AA 2054 |
987996
| NVIDIA RTX PRO 2000 Blackwell Generation Laptop GPU | 2D39 |
988997
| NVIDIA GeForce RTX 5070 Laptop GPU | 2D58 |
989998
| NVIDIA GeForce RTX 5060 Laptop GPU | 2D59 |

kernel-open/Kbuild

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ ccflags-y += -I$(src)/common/inc
7979
ccflags-y += -I$(src)
8080
ccflags-y += -Wall $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-format-extra-args
8181
ccflags-y += -D__KERNEL__ -DMODULE -DNVRM
82-
ccflags-y += -DNV_VERSION_STRING=\"580.65.06\"
82+
ccflags-y += -DNV_VERSION_STRING=\"580.76.05\"
8383

8484
# Include and link Tegra out-of-tree modules.
8585
ifneq ($(wildcard /usr/src/nvidia/nvidia-oot),)

kernel-open/common/inc/nv.h

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -656,23 +656,24 @@ typedef NV_STATUS (*nvPmaEvictRangeCallback)(void *, NvU64, NvU64, nvgpuGpuMemor
656656
* flags
657657
*/
658658

659-
#define NV_FLAG_OPEN 0x0001
660-
#define NV_FLAG_EXCLUDE 0x0002
661-
#define NV_FLAG_CONTROL 0x0004
662-
#define NV_FLAG_PCI_P2P_UNSUPPORTED_CHIPSET 0x0008
663-
#define NV_FLAG_SOC_DISPLAY 0x0010
664-
#define NV_FLAG_USES_MSI 0x0020
665-
#define NV_FLAG_USES_MSIX 0x0040
666-
#define NV_FLAG_PASSTHRU 0x0080
667-
#define NV_FLAG_SUSPENDED 0x0100
659+
#define NV_FLAG_OPEN 0x0001
660+
#define NV_FLAG_EXCLUDE 0x0002
661+
#define NV_FLAG_CONTROL 0x0004
662+
#define NV_FLAG_PCI_P2P_UNSUPPORTED_CHIPSET 0x0008
663+
#define NV_FLAG_SOC_DISPLAY 0x0010
664+
#define NV_FLAG_USES_MSI 0x0020
665+
#define NV_FLAG_USES_MSIX 0x0040
666+
#define NV_FLAG_PASSTHRU 0x0080
667+
#define NV_FLAG_SUSPENDED 0x0100
668+
#define NV_FLAG_HAS_CONSOLE_IN_SYSMEM_CARVEOUT 0x0200
668669
/* To be set when an FLR needs to be triggered after device shut down. */
669-
#define NV_FLAG_TRIGGER_FLR 0x0400
670-
#define NV_FLAG_PERSISTENT_SW_STATE 0x0800
671-
#define NV_FLAG_IN_RECOVERY 0x1000
672-
#define NV_FLAG_PCI_REMOVE_IN_PROGRESS 0x2000
673-
#define NV_FLAG_UNBIND_LOCK 0x4000
670+
#define NV_FLAG_TRIGGER_FLR 0x0400
671+
#define NV_FLAG_PERSISTENT_SW_STATE 0x0800
672+
#define NV_FLAG_IN_RECOVERY 0x1000
673+
#define NV_FLAG_PCI_REMOVE_IN_PROGRESS 0x2000
674+
#define NV_FLAG_UNBIND_LOCK 0x4000
674675
/* To be set when GPU is not present on the bus, to help device teardown */
675-
#define NV_FLAG_IN_SURPRISE_REMOVAL 0x8000
676+
#define NV_FLAG_IN_SURPRISE_REMOVAL 0x8000
676677

677678
typedef enum
678679
{
@@ -729,6 +730,9 @@ typedef enum
729730
#define NV_IS_DEVICE_IN_SURPRISE_REMOVAL(nv) \
730731
(((nv)->flags & NV_FLAG_IN_SURPRISE_REMOVAL) != 0)
731732

733+
#define NV_HAS_CONSOLE_IN_SYSMEM_CARVEOUT(nv) \
734+
(((nv)->flags & NV_FLAG_HAS_CONSOLE_IN_SYSMEM_CARVEOUT) != 0)
735+
732736
/*
733737
* For console setup by EFI GOP, the base address is BAR1.
734738
* For console setup by VBIOS, the base address is BAR2 + 16MB.

kernel-open/nvidia-uvm/uvm_va_range.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -785,7 +785,8 @@ static NV_STATUS va_range_add_gpu_va_space_managed(uvm_va_range_managed_t *manag
785785
NV_STATUS status = NV_OK;
786786
const bool should_add_remote_mappings =
787787
uvm_processor_mask_test(&managed_range->policy.accessed_by, gpu->id) ||
788-
uvm_processor_mask_test(&managed_range->va_range.uvm_lite_gpus, gpu->id);
788+
uvm_processor_mask_test(&managed_range->va_range.uvm_lite_gpus, gpu->id) ||
789+
gpu->parent->is_integrated_gpu;
789790

790791
// By this time, the gpu is already in the registration mask.
791792
const bool should_disable_read_duplication =

kernel-open/nvidia/nv.c

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1450,50 +1450,35 @@ static int nv_start_device(nv_state_t *nv, nvidia_stack_t *sp)
14501450
{
14511451
rc = os_alloc_mutex(&nvl->isr_bh_unlocked_mutex);
14521452
if (rc != 0)
1453-
goto failed;
1453+
goto failed_release_irq;
14541454
nv_kthread_q_item_init(&nvl->bottom_half_q_item, nvidia_isr_bh_unlocked, (void *)nv);
14551455
rc = nv_kthread_q_init(&nvl->bottom_half_q, nv_device_name);
14561456
if (rc != 0)
1457-
goto failed;
1457+
goto failed_release_irq;
14581458
kthread_init = NV_TRUE;
14591459

14601460
rc = nv_kthread_q_init(&nvl->queue.nvk, "nv_queue");
14611461
if (rc)
1462-
goto failed;
1462+
goto failed_release_irq;
14631463
nv->queue = &nvl->queue;
14641464

14651465
if (nv_platform_use_auto_online(nvl))
14661466
{
14671467
rc = nv_kthread_q_init(&nvl->remove_numa_memory_q,
14681468
"nv_remove_numa_memory");
14691469
if (rc)
1470-
goto failed;
1470+
goto failed_release_irq;
14711471
remove_numa_memory_kthread_init = NV_TRUE;
14721472
}
14731473
}
14741474

14751475
if (!rm_init_adapter(sp, nv))
14761476
{
1477-
if (!(nv->flags & NV_FLAG_USES_MSIX) &&
1478-
!(nv->flags & NV_FLAG_SOC_DISPLAY))
1479-
{
1480-
free_irq(nv->interrupt_line, (void *) nvl);
1481-
}
1482-
else if (nv->flags & NV_FLAG_SOC_DISPLAY)
1483-
{
1484-
nv_soc_free_irqs(nv);
1485-
}
1486-
#if defined(NV_LINUX_PCIE_MSI_SUPPORTED)
1487-
else
1488-
{
1489-
nv_free_msix_irq(nvl);
1490-
}
1491-
#endif
14921477
NV_DEV_PRINTF(NV_DBG_ERRORS, nv,
14931478
"rm_init_adapter failed, device minor number %d\n",
14941479
nvl->minor_num);
14951480
rc = -EIO;
1496-
goto failed;
1481+
goto failed_release_irq;
14971482
}
14981483

14991484
{
@@ -1527,6 +1512,26 @@ static int nv_start_device(nv_state_t *nv, nvidia_stack_t *sp)
15271512

15281513
return 0;
15291514

1515+
failed_release_irq:
1516+
if (!(nv->flags & NV_FLAG_PERSISTENT_SW_STATE))
1517+
{
1518+
if (!(nv->flags & NV_FLAG_USES_MSIX) &&
1519+
!(nv->flags & NV_FLAG_SOC_DISPLAY))
1520+
{
1521+
free_irq(nv->interrupt_line, (void *) nvl);
1522+
}
1523+
else if (nv->flags & NV_FLAG_SOC_DISPLAY)
1524+
{
1525+
nv_soc_free_irqs(nv);
1526+
}
1527+
#if defined(NV_LINUX_PCIE_MSI_SUPPORTED)
1528+
else
1529+
{
1530+
nv_free_msix_irq(nvl);
1531+
}
1532+
#endif
1533+
}
1534+
15301535
failed:
15311536
#if defined(NV_LINUX_PCIE_MSI_SUPPORTED)
15321537
if (nv->flags & NV_FLAG_USES_MSI)
@@ -2452,6 +2457,7 @@ nvidia_ioctl(
24522457
if (arg_cmd == NV_ESC_WAIT_OPEN_COMPLETE)
24532458
{
24542459
nv_ioctl_wait_open_complete_t *params = arg_copy;
2460+
24552461
params->rc = nvlfp->open_rc;
24562462
params->adapterStatus = nvlfp->adapter_status;
24572463
goto done_early;
@@ -6154,8 +6160,13 @@ void NV_API_CALL nv_get_screen_info(
61546160
if (!registered_fb[i])
61556161
continue;
61566162

6157-
/* Make sure base address is mapped to GPU BAR */
6158-
if (NV_IS_CONSOLE_MAPPED(nv, registered_fb[i]->fix.smem_start))
6163+
/*
6164+
* Ensure that either this is a zero-FB SOC GPU with a console in
6165+
* the system carveout, or it’s a dGPU device with console mapped
6166+
* onto its BAR.
6167+
*/
6168+
if (NV_HAS_CONSOLE_IN_SYSMEM_CARVEOUT(nv) ||
6169+
NV_IS_CONSOLE_MAPPED(nv, registered_fb[i]->fix.smem_start))
61596170
{
61606171
*pPhysicalAddress = registered_fb[i]->fix.smem_start;
61616172
*pFbWidth = registered_fb[i]->var.xres;
@@ -6203,9 +6214,13 @@ void NV_API_CALL nv_get_screen_info(
62036214
physAddr |= (NvU64)screen_info.ext_lfb_base << 32;
62046215
}
62056216
#endif
6206-
6207-
/* Make sure base address is mapped to GPU BAR */
6208-
if (NV_IS_CONSOLE_MAPPED(nv, physAddr))
6217+
/*
6218+
* Ensure that either this is a zero-FB SOC GPU with a console in the
6219+
* system carveout, or it’s a dGPU device with console mapped onto its
6220+
* BAR.
6221+
*/
6222+
if (NV_HAS_CONSOLE_IN_SYSMEM_CARVEOUT(nv) ||
6223+
NV_IS_CONSOLE_MAPPED(nv, physAddr))
62096224
{
62106225
*pPhysicalAddress = physAddr;
62116226
*pFbWidth = screen_info.lfb_width;
@@ -6222,7 +6237,7 @@ void NV_API_CALL nv_get_screen_info(
62226237
* If screen info can't be fetched with previous methods, then try
62236238
* to get the base address and size from the memory resource tree.
62246239
*/
6225-
if (pci_dev != NULL)
6240+
if ((pci_dev != NULL) && !NV_HAS_CONSOLE_IN_SYSMEM_CARVEOUT(nv))
62266241
{
62276242
BUILD_BUG_ON(NV_GPU_BAR_INDEX_IMEM != NV_GPU_BAR_INDEX_FB + 1);
62286243
for (i = NV_GPU_BAR_INDEX_FB; i <= NV_GPU_BAR_INDEX_IMEM; i++)

kernel-open/nvidia/os-interface.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2313,7 +2313,7 @@ static int os_numa_verify_gpu_memory_zone(struct notifier_block *nb,
23132313
return NOTIFY_OK;
23142314
}
23152315

2316-
#define ADD_REMOVE_GPU_MEMORY_NUM_SEGMENTS 4
2316+
#define ADD_REMOVE_GPU_MEMORY_NUM_SEGMENTS 128
23172317

23182318
NV_STATUS NV_API_CALL os_numa_add_gpu_memory
23192319
(

src/common/displayport/inc/dp_connectorimpl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,9 @@ namespace DisplayPort
391391
bool bForceDisableTunnelBwAllocation;
392392
bool bDisableEffBppSST8b10b;
393393

394+
// Use regkey DP_DSC_DEVID_WAR to toggle this flag.
395+
bool bEnableDevId;
396+
394397
Group *perHeadAttachedGroup[NV_MAX_HEADS];
395398
NvU32 inTransitionHeadMask;
396399

src/common/displayport/inc/dp_regkeydatabase.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@
100100
// Bug 5088957 : Force head shutdown in DpLib
101101
#define NV_DP_REGKEY_FORCE_HEAD_SHUTDOWN "DP_WAR_5088957"
102102

103+
// This regkey forces devID to be exposed to vendors via DPCD 0x309 for DSC-enabled SKUs.
104+
#define NV_DP_REGKEY_EXPOSE_DSC_DEVID_WAR "DP_DSC_DEVID_WAR"
105+
103106
//
104107
// Data Base used to store all the regkey values.
105108
// The actual data base is declared statically in dp_evoadapter.cpp.
@@ -142,6 +145,7 @@ struct DP_REGKEY_DATABASE
142145
bool bSkipZeroOuiCache;
143146
bool bEnable5147205Fix;
144147
bool bForceHeadShutdown;
148+
bool bEnableDevId;
145149
};
146150

147151
extern struct DP_REGKEY_DATABASE dpRegkeyDatabase;

src/common/displayport/src/dp_configcaps2x.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,16 @@ void DPCDHALImpl2x::parseAndReadCaps()
285285

286286
DPCDHALImpl::parseAndReadCaps();
287287

288+
// reset DP tunneling UHBR caps
289+
caps2x.dpInTunnelingCaps.bUHBR_10GSupported = NV_FALSE;
290+
caps2x.dpInTunnelingCaps.bUHBR_13_5GSupported = NV_FALSE;
291+
caps2x.dpInTunnelingCaps.bUHBR_20GSupported = NV_FALSE;
292+
293+
// reset rxCableCaps
294+
caps2x.rxCableCaps.bUHBR_10GSupported = NV_TRUE;
295+
caps2x.rxCableCaps.bUHBR_13_5GSupported = NV_TRUE;
296+
caps2x.rxCableCaps.bUHBR_20GSupported = NV_TRUE;
297+
288298
// 02206h
289299
if (AuxRetry::ack == bus.read(NV_DPCD14_EXTENDED_MAIN_LINK_CHANNEL_CODING, &buffer[0], 1))
290300
{

src/common/displayport/src/dp_connectorimpl.cpp

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,17 @@
5151
#include "ctrl/ctrl0073/ctrl0073dp.h"
5252
#include "dp_tracing.h"
5353

54+
/*
55+
* This is needed by Synaptics to disable DisplayExpand feature
56+
* in some of their docking station based on if GPU supports DSC.
57+
* Feature is not needed if DSC is supported.
58+
* Customers reported problems with the feature enabled on GB20x devices
59+
* and requested GPU DSC detection to disable DisplayExpand feature.
60+
* DSC is supported in Turing and later SKUs hence
61+
* exposing Turing DevId to customers to address their requirement.
62+
*/
63+
#define TURING_DEV_ID 0x1E
64+
5465
using namespace DisplayPort;
5566

5667
ConnectorImpl::ConnectorImpl(MainLink * main, AuxBus * auxBus, Timer * timer, Connector::EventSink * sink)
@@ -184,6 +195,7 @@ void ConnectorImpl::applyRegkeyOverrides(const DP_REGKEY_DATABASE& dpRegkeyDatab
184195
this->bForceDisableTunnelBwAllocation = dpRegkeyDatabase.bForceDisableTunnelBwAllocation;
185196
this->bSkipZeroOuiCache = dpRegkeyDatabase.bSkipZeroOuiCache;
186197
this->bForceHeadShutdownFromRegkey = dpRegkeyDatabase.bForceHeadShutdown;
198+
this->bEnableDevId = dpRegkeyDatabase.bEnableDevId;
187199
this->bDisableEffBppSST8b10b = dpRegkeyDatabase.bDisableEffBppSST8b10b;
188200
}
189201

@@ -3904,14 +3916,20 @@ bool ConnectorImpl::getIgnoreSourceOuiHandshake()
39043916
bool ConnectorImpl::performIeeeOuiHandshake()
39053917
{
39063918
const char *ieeeOuiDevId = "NVIDIA";
3919+
NvU8 chipRevision = 0x0;
3920+
bool bGpuDscSupported = NV_FALSE;
3921+
3922+
main->getDscCaps(&bGpuDscSupported);
3923+
if ((this->bEnableDevId) && (bGpuDscSupported))
3924+
{
3925+
chipRevision = TURING_DEV_ID;
3926+
}
39073927

39083928
if (!hal->getOuiSupported() || getIgnoreSourceOuiHandshake())
39093929
return false;
39103930

3911-
if (hal->setOuiSource(DPCD_OUI_NVIDIA, ieeeOuiDevId, 6 /* string length of ieeeOuiDevId */, 0) == AuxRetry::ack)
3931+
if (hal->setOuiSource(DPCD_OUI_NVIDIA, ieeeOuiDevId, 6 /* string length of ieeeOuiDevId */, chipRevision) == AuxRetry::ack)
39123932
{
3913-
NvU8 chipRevision = 0;
3914-
39153933
// parse client OUI.
39163934
if (hal->getOuiSink(ouiId, &modelName[0], sizeof(modelName), chipRevision))
39173935
{

0 commit comments

Comments
 (0)