Skip to content

Commit 57130a2

Browse files
committed
610.43.02
1 parent 51edebe commit 57130a2

1,136 files changed

Lines changed: 551155 additions & 419162 deletions

File tree

Some content is hidden

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

README.md

Lines changed: 4 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 595.71.05.
4+
version 610.43.02.
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-
595.71.05 driver release. This can be achieved by installing
20+
610.43.02 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/595.71.05/README/kernel_open.html
188+
https://us.download.nvidia.com/XFree86/Linux-x86_64/610.43.02/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.
@@ -1020,6 +1020,7 @@ Subsystem Device ID.
10201020
| NVIDIA RTX PRO 500 Blackwell Embedded GPU | 2DF9 |
10211021
| NVIDIA GB10 | 2E12 10DE 21EC |
10221022
| NVIDIA GeForce RTX 5070 | 2F04 |
1023+
| NVIDIA GeForce RTX 5060 | 2F06 |
10231024
| NVIDIA GeForce RTX 5070 Ti Laptop GPU | 2F18 |
10241025
| NVIDIA RTX PRO 3000 Blackwell Generation Laptop GPU | 2F38 |
10251026
| NVIDIA GeForce RTX 5070 Ti Laptop GPU | 2F58 |

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=\"595.71.05\"
82+
ccflags-y += -DNV_VERSION_STRING=\"610.43.02\"
8383

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

kernel-open/common/inc/nv-firmware.h

Lines changed: 48 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ typedef enum
3434
NV_FIRMWARE_TYPE_GSP,
3535
NV_FIRMWARE_TYPE_GSP_LOG,
3636
#if defined(NV_VMWARE)
37-
NV_FIRMWARE_TYPE_BINDATA
37+
// GR-3428: Merge _BINDATA and _UCODES
38+
NV_FIRMWARE_TYPE_BINDATA,
3839
#endif
40+
NV_FIRMWARE_TYPE_UCODES
3941
} nv_firmware_type_t;
4042

4143
typedef enum
@@ -49,6 +51,7 @@ typedef enum
4951
NV_FIRMWARE_CHIP_FAMILY_GH100 = 6,
5052
NV_FIRMWARE_CHIP_FAMILY_GB10X = 8,
5153
NV_FIRMWARE_CHIP_FAMILY_GB20X = 9,
54+
NV_FIRMWARE_CHIP_FAMILY_GR10X = 10,
5255
NV_FIRMWARE_CHIP_FAMILY_GB10Y = 11,
5356
NV_FIRMWARE_CHIP_FAMILY_GB20Y = 12,
5457
NV_FIRMWARE_CHIP_FAMILY_END,
@@ -59,6 +62,7 @@ static inline const char *nv_firmware_chip_family_to_string(
5962
)
6063
{
6164
switch (fw_chip_family) {
65+
case NV_FIRMWARE_CHIP_FAMILY_GR10X: return "gr10x";
6266
case NV_FIRMWARE_CHIP_FAMILY_GB10X: return "gb10x";
6367
case NV_FIRMWARE_CHIP_FAMILY_GB10Y: return "gb10y";
6468
case NV_FIRMWARE_CHIP_FAMILY_GB20Y: return "gb20y";
@@ -79,7 +83,7 @@ static inline const char *nv_firmware_chip_family_to_string(
7983

8084
// The includer may optionally define
8185
// NV_FIRMWARE_FOR_NAME(name)
82-
// to return a platform-defined string for a given a gsp_* or gsp_log_* name.
86+
// to return a platform-defined string for a given a firmware base name.
8387
//
8488
// The function nv_firmware_for_chip_family will then be available.
8589
#if defined(NV_FIRMWARE_FOR_NAME)
@@ -88,69 +92,64 @@ static inline const char *nv_firmware_for_chip_family(
8892
nv_firmware_chip_family_t fw_chip_family
8993
)
9094
{
91-
if (fw_type == NV_FIRMWARE_TYPE_GSP)
95+
switch (fw_chip_family)
9296
{
93-
switch (fw_chip_family)
97+
case NV_FIRMWARE_CHIP_FAMILY_GR10X: // fall through
98+
case NV_FIRMWARE_CHIP_FAMILY_GB10X: // fall through
99+
case NV_FIRMWARE_CHIP_FAMILY_GB10Y: // fall through
100+
case NV_FIRMWARE_CHIP_FAMILY_GB20Y: // fall through
101+
case NV_FIRMWARE_CHIP_FAMILY_GB20X: // fall through
102+
case NV_FIRMWARE_CHIP_FAMILY_GH100: // fall through
103+
case NV_FIRMWARE_CHIP_FAMILY_AD10X: // fall through
104+
case NV_FIRMWARE_CHIP_FAMILY_GA10X:
94105
{
95-
case NV_FIRMWARE_CHIP_FAMILY_GB10X: // fall through
96-
case NV_FIRMWARE_CHIP_FAMILY_GB10Y: // fall through
97-
case NV_FIRMWARE_CHIP_FAMILY_GB20Y: // fall through
98-
case NV_FIRMWARE_CHIP_FAMILY_GB20X: // fall through
99-
case NV_FIRMWARE_CHIP_FAMILY_GH100: // fall through
100-
case NV_FIRMWARE_CHIP_FAMILY_AD10X: // fall through
101-
case NV_FIRMWARE_CHIP_FAMILY_GA10X:
102-
return NV_FIRMWARE_FOR_NAME("gsp_ga10x");
103-
104-
case NV_FIRMWARE_CHIP_FAMILY_GA100: // fall through
105-
case NV_FIRMWARE_CHIP_FAMILY_TU11X: // fall through
106-
case NV_FIRMWARE_CHIP_FAMILY_TU10X:
107-
return NV_FIRMWARE_FOR_NAME("gsp_tu10x");
108-
109-
case NV_FIRMWARE_CHIP_FAMILY_END: // fall through
110-
case NV_FIRMWARE_CHIP_FAMILY_NULL:
111-
return "";
106+
switch (fw_type)
107+
{
108+
case NV_FIRMWARE_TYPE_GSP: return NV_FIRMWARE_FOR_NAME("gsp_ga10x");
109+
case NV_FIRMWARE_TYPE_GSP_LOG: return NV_FIRMWARE_FOR_NAME("gsp_log_ga10x");
110+
#if defined(NV_VMWARE)
111+
case NV_FIRMWARE_TYPE_BINDATA: return NV_FIRMWARE_FOR_NAME("bindata_image");
112+
#endif
113+
case NV_FIRMWARE_TYPE_UCODES: return NV_FIRMWARE_FOR_NAME("ucodes_ga10x");
114+
}
115+
return "";
112116
}
113-
}
114-
else if (fw_type == NV_FIRMWARE_TYPE_GSP_LOG)
115-
{
116-
switch (fw_chip_family)
117-
{
118-
case NV_FIRMWARE_CHIP_FAMILY_GB10X: // fall through
119-
case NV_FIRMWARE_CHIP_FAMILY_GB10Y: // fall through
120-
case NV_FIRMWARE_CHIP_FAMILY_GB20Y: // fall through
121-
case NV_FIRMWARE_CHIP_FAMILY_GB20X: // fall through
122-
case NV_FIRMWARE_CHIP_FAMILY_GH100: // fall through
123-
case NV_FIRMWARE_CHIP_FAMILY_AD10X: // fall through
124-
case NV_FIRMWARE_CHIP_FAMILY_GA10X:
125-
return NV_FIRMWARE_FOR_NAME("gsp_log_ga10x");
126-
127-
case NV_FIRMWARE_CHIP_FAMILY_GA100: // fall through
128-
case NV_FIRMWARE_CHIP_FAMILY_TU11X: // fall through
129-
case NV_FIRMWARE_CHIP_FAMILY_TU10X:
130-
return NV_FIRMWARE_FOR_NAME("gsp_log_tu10x");
131117

132-
case NV_FIRMWARE_CHIP_FAMILY_END: // fall through
133-
case NV_FIRMWARE_CHIP_FAMILY_NULL:
134-
return "";
135-
}
136-
}
118+
case NV_FIRMWARE_CHIP_FAMILY_GA100: // fall through
119+
case NV_FIRMWARE_CHIP_FAMILY_TU11X: // fall through
120+
case NV_FIRMWARE_CHIP_FAMILY_TU10X:
121+
{
122+
switch (fw_type)
123+
{
124+
case NV_FIRMWARE_TYPE_GSP: return NV_FIRMWARE_FOR_NAME("gsp_tu10x");
125+
case NV_FIRMWARE_TYPE_GSP_LOG: return NV_FIRMWARE_FOR_NAME("gsp_log_tu10x");
137126
#if defined(NV_VMWARE)
138-
else if (fw_type == NV_FIRMWARE_TYPE_BINDATA)
139-
{
140-
return NV_FIRMWARE_FOR_NAME("bindata_image");
141-
}
127+
case NV_FIRMWARE_TYPE_BINDATA: return NV_FIRMWARE_FOR_NAME("bindata_image");
142128
#endif
129+
case NV_FIRMWARE_TYPE_UCODES: return NV_FIRMWARE_FOR_NAME("ucodes_tu10x");
130+
}
131+
return "";
132+
}
133+
134+
case NV_FIRMWARE_CHIP_FAMILY_END: // fall through
135+
case NV_FIRMWARE_CHIP_FAMILY_NULL:
136+
return "";
137+
}
138+
143139
return "";
144140
}
145141
#endif // defined(NV_FIRMWARE_FOR_NAME)
146142

147143
// The includer may optionally define
148144
// NV_FIRMWARE_DECLARE_GSP(name)
149145
// which will then be invoked (at the top-level) for each
150-
// gsp_* (but not gsp_log_*)
146+
// gsp_* and ucodes_* (but not gsp_log_*)
151147
#if defined(NV_FIRMWARE_DECLARE_GSP)
152148
NV_FIRMWARE_DECLARE_GSP("gsp_ga10x")
153149
NV_FIRMWARE_DECLARE_GSP("gsp_tu10x")
150+
NV_FIRMWARE_DECLARE_GSP("ucodes_ga10x")
151+
NV_FIRMWARE_DECLARE_GSP("ucodes_tu10x")
154152
#endif // defined(NV_FIRMWARE_DECLARE_GSP)
155153

156154
#endif // NV_FIRMWARE_DECLARE_GSP
155+

kernel-open/common/inc/nv-linux.h

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: Copyright (c) 2001-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
* SPDX-FileCopyrightText: Copyright (c) 2001-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
33
* SPDX-License-Identifier: MIT
44
*
55
* Permission is hereby granted, free of charge, to any person obtaining a
@@ -231,16 +231,6 @@ NV_STATUS nvos_forward_error_to_cray(struct pci_dev *, NvU32,
231231
#include <asm/kgdb.h>
232232
#endif
233233

234-
#if defined(NVCPU_X86_64) && !defined(NV_XEN_SUPPORT_FULLY_VIRTUALIZED_KERNEL)
235-
#define NV_ENABLE_PAT_SUPPORT
236-
#endif
237-
238-
#define NV_PAT_MODE_DISABLED 0
239-
#define NV_PAT_MODE_KERNEL 1
240-
#define NV_PAT_MODE_BUILTIN 2
241-
242-
extern int nv_pat_mode;
243-
244234
#if defined(CONFIG_HOTPLUG_CPU)
245235
#define NV_ENABLE_HOTPLUG_CPU
246236
#include <linux/notifier.h> /* struct notifier_block, etc */
@@ -288,13 +278,7 @@ extern int nv_pat_mode;
288278
#if defined(NVCPU_AARCH64) || defined(NVCPU_RISCV64)
289279
#define NV_ALLOW_WRITE_COMBINING(mt) 1
290280
#elif defined(NVCPU_X86_64)
291-
#if defined(NV_ENABLE_PAT_SUPPORT)
292-
#define NV_ALLOW_WRITE_COMBINING(mt) \
293-
((nv_pat_mode != NV_PAT_MODE_DISABLED) && \
294-
((mt) != NV_MEMORY_TYPE_REGISTERS))
295-
#else
296-
#define NV_ALLOW_WRITE_COMBINING(mt) 0
297-
#endif
281+
#define NV_ALLOW_WRITE_COMBINING(mt) ((mt) != NV_MEMORY_TYPE_REGISTERS)
298282
#endif
299283

300284
#define NV_MAX_RECURRING_WARNING_MESSAGES 10
@@ -949,18 +933,12 @@ typedef struct nv_alloc_s {
949933
* Starting with the 5.0 kernel, SWIOTLB is merged into
950934
* direct_dma, so systems without an IOMMU use direct_dma. We
951935
* need to know if this is the case, so that we can use a
952-
* different check for SWIOTLB enablement.
936+
* different check for SWIOTLB enablement. dma_is_direct()
937+
* performs this same check.
953938
*/
954939
static inline NvBool nv_is_dma_direct(struct device *dev)
955940
{
956-
NvBool is_direct = NV_FALSE;
957-
958-
#if defined(NV_DMA_IS_DIRECT_PRESENT)
959-
if (dma_is_direct(get_dma_ops(dev)))
960-
is_direct = NV_TRUE;
961-
#endif
962-
963-
return is_direct;
941+
return get_dma_ops(dev) == NULL;
964942
}
965943

966944
/**
@@ -1427,6 +1405,7 @@ typedef struct nv_linux_state_s {
14271405
struct nv_pci_tegra_devfreq_dev *nvd_devfreq_dev;
14281406
struct nv_pci_tegra_devfreq_dev *sys_devfreq_dev;
14291407
struct nv_pci_tegra_devfreq_dev *pwr_devfreq_dev;
1408+
NvU32 tegra_suspend_freq;
14301409

14311410
int (*devfreq_suspend)(struct device *dev);
14321411
int (*devfreq_resume)(struct device *dev);
@@ -1604,6 +1583,7 @@ static inline NV_STATUS nv_check_gpu_state(nv_state_t *nv)
16041583
}
16051584

16061585
extern NvU32 NVreg_EnableUserNUMAManagement;
1586+
extern NvU32 NVreg_OsEnableCxlSupport;
16071587
extern NvU32 NVreg_RegisterPCIDriver;
16081588
extern NvU32 NVreg_RegisterPlatformDeviceDriver;
16091589
extern NvU32 NVreg_EnableResizableBar;

kernel-open/common/inc/nv-pci.h

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: Copyright (c) 2019-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
* SPDX-FileCopyrightText: Copyright (c) 2019-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
33
* SPDX-License-Identifier: MIT
44
*
55
* Permission is hereby granted, free of charge, to any person obtaining a
@@ -39,4 +39,30 @@ nv_linux_state_t * find_pci(NvU32, NvU8, NvU8, NvU8);
3939
NvBool nv_pci_is_valid_topology_for_direct_pci(nv_state_t *, struct pci_dev *);
4040
NvBool nv_pci_has_common_pci_switch(nv_state_t *nv, struct pci_dev *);
4141
void nv_pci_tegra_boost_clocks(struct device *dev);
42+
43+
/* Register Block Identifier (RBI) */
44+
enum cxl_regloc_type {
45+
CXL_REGLOC_RBI_EMPTY = 0,
46+
CXL_REGLOC_RBI_COMPONENT,
47+
CXL_REGLOC_RBI_VIRT,
48+
CXL_REGLOC_RBI_MEMDEV,
49+
CXL_REGLOC_RBI_PMU,
50+
CXL_REGLOC_RBI_TYPES
51+
};
52+
53+
#define CXL_CM_OFFSET 0x1000
54+
#define CXL_CM_CAP_HDR_OFFSET 0x0
55+
#define CXL_CM_CAP_HDR_ID_MASK GENMASK(15, 0)
56+
#define CM_CAP_HDR_CAP_ID 1
57+
#define CXL_CM_CAP_HDR_ARRAY_SIZE_MASK GENMASK(31, 24)
58+
#define CXL_CM_CAP_PTR_MASK GENMASK(31, 20)
59+
#define CXL_CM_CAP_CAP_ID_HDM 0x5
60+
#define CXL_HDM_DECODER_CAP_OFFSET 0x0
61+
#define CXL_HDM_DECODER0_BASE_LOW_OFFSET(i) (0x20 * (i) + 0x10)
62+
#define CXL_HDM_DECODER0_BASE_HIGH_OFFSET(i) (0x20 * (i) + 0x14)
63+
#define CXL_HDM_DECODER0_SIZE_LOW_OFFSET(i) (0x20 * (i) + 0x18)
64+
#define CXL_HDM_DECODER0_SIZE_HIGH_OFFSET(i) (0x20 * (i) + 0x1c)
65+
#define CXL_HDM_DECODER0_CTRL_OFFSET(i) (0x20 * (i) + 0x20)
66+
#define CXL_HDM_DECODER0_CTRL_COMMITTED BIT(10)
67+
4268
#endif

kernel-open/common/inc/nv-pgprot.h

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: Copyright (c) 2015-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
* SPDX-FileCopyrightText: Copyright (c) 2015-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
33
* SPDX-License-Identifier: MIT
44
*
55
* Permission is hereby granted, free of charge, to any person obtaining a
@@ -31,31 +31,11 @@
3131

3232
#if !defined(NV_VMWARE)
3333
#if defined(NVCPU_X86_64)
34-
/* mark memory UC-, rather than UC (don't use _PAGE_PWT) */
35-
static inline pgprot_t pgprot_noncached_weak(pgprot_t old_prot)
36-
{
37-
pgprot_t new_prot = old_prot;
38-
if (boot_cpu_data.x86 > 3)
39-
new_prot = __pgprot(pgprot_val(old_prot) | _PAGE_PCD);
40-
return new_prot;
41-
}
42-
43-
#if !defined (pgprot_noncached)
44-
static inline pgprot_t pgprot_noncached(pgprot_t old_prot)
45-
{
46-
pgprot_t new_prot = old_prot;
47-
if (boot_cpu_data.x86 > 3)
48-
new_prot = __pgprot(pgprot_val(old_prot) | _PAGE_PCD | _PAGE_PWT);
49-
return new_prot;
50-
}
51-
#endif
5234
static inline pgprot_t pgprot_modify_writecombine(pgprot_t old_prot)
53-
{
54-
pgprot_t new_prot = old_prot;
55-
pgprot_val(new_prot) &= ~(_PAGE_PSE | _PAGE_PCD | _PAGE_PWT);
56-
new_prot = __pgprot(pgprot_val(new_prot) | _PAGE_PWT);
57-
return new_prot;
58-
}
35+
{
36+
return __pgprot((pgprot_val(old_prot) & ~_PAGE_CACHE_MASK) |
37+
cachemode2protval(_PAGE_CACHE_MODE_WC));
38+
}
5939
#endif /* defined(NVCPU_X86_64) */
6040
#endif /* !defined(NV_VMWARE) */
6141

@@ -68,6 +48,10 @@ extern NvBool nvos_is_chipset_io_coherent(void);
6848
#define NV_PGPROT_UNCACHED(old_prot) \
6949
__pgprot_modify((old_prot), PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC))
7050
#else
51+
/*
52+
* Note: the kernel's implementation of pgprot_noncached() on x86-64 evaluates to
53+
* UC- (noncached weak ordering) instead of strict UC.
54+
*/
7155
#define NV_PGPROT_UNCACHED(old_prot) pgprot_noncached(old_prot)
7256
#endif
7357

@@ -77,7 +61,7 @@ extern NvBool nvos_is_chipset_io_coherent(void);
7761
#define NV_PGPROT_READ_ONLY(old_prot) \
7862
__pgprot_modify(old_prot, 0, PTE_RDONLY)
7963
#elif defined(NVCPU_X86_64)
80-
#define NV_PGPROT_UNCACHED_WEAK(old_prot) pgprot_noncached_weak(old_prot)
64+
#define NV_PGPROT_UNCACHED_WEAK(old_prot) pgprot_noncached(old_prot)
8165
#define NV_PGPROT_WRITE_COMBINED(old_prot) \
8266
pgprot_modify_writecombine(old_prot)
8367
#define NV_PGPROT_READ_ONLY(old_prot) \

kernel-open/common/inc/nv-proto.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ NV_STATUS nv_alloc_contig_pages (nv_state_t *, nv_alloc_t *);
5454
void nv_free_contig_pages (nv_alloc_t *);
5555
NV_STATUS nv_alloc_system_pages (nv_state_t *, nv_alloc_t *);
5656
void nv_free_system_pages (nv_alloc_t *);
57+
int nv_init_page_pools (void);
58+
void nv_destroy_page_pools (void);
5759

5860
int nv_uvm_init (void);
5961
void nv_uvm_exit (void);
@@ -83,6 +85,9 @@ void nvidia_modeset_probe (const nv_linux_state_t *nvl);
8385
NvBool nv_is_uuid_in_gpu_exclusion_list (const char *);
8486

8587
NV_STATUS nv_parse_per_device_option_string(nvidia_stack_t *sp);
88+
void nv_enable_cdmm_mode(nvidia_stack_t *sp);
89+
NvBool nv_is_galaxy_workstation (void);
90+
8691
nv_linux_state_t * find_uuid(const NvU8 *uuid);
8792
void nv_report_error(struct pci_dev *dev, NvU32 error_number, const char *format, va_list ap);
8893
void nv_shutdown_adapter(nvidia_stack_t *, nv_state_t *, nv_linux_state_t *);

0 commit comments

Comments
 (0)