mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2025-02-27 00:54:16 +01:00
515.65.01
This commit is contained in:
parent
1e2a1b5fbe
commit
9855350159
@ -2,6 +2,13 @@
|
|||||||
|
|
||||||
## Release 515 Entries
|
## Release 515 Entries
|
||||||
|
|
||||||
|
### [515.65.01] 2022-08-02
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- Collection of minor fixes to issues, [#6](https://github.com/NVIDIA/open-gpu-kernel-modules/pull/61) by @Joshua-Ashton
|
||||||
|
- Remove unnecessary use of acpi_bus_get_device().
|
||||||
|
|
||||||
### [515.57] 2022-06-28
|
### [515.57] 2022-06-28
|
||||||
|
|
||||||
#### Fixed
|
#### Fixed
|
||||||
|
10
README.md
10
README.md
@ -1,7 +1,7 @@
|
|||||||
# NVIDIA Linux Open GPU Kernel Module Source
|
# NVIDIA Linux Open GPU Kernel Module Source
|
||||||
|
|
||||||
This is the source release of the NVIDIA Linux open GPU kernel modules,
|
This is the source release of the NVIDIA Linux open GPU kernel modules,
|
||||||
version 515.57.
|
version 515.65.01.
|
||||||
|
|
||||||
|
|
||||||
## How to Build
|
## How to Build
|
||||||
@ -17,7 +17,7 @@ as root:
|
|||||||
|
|
||||||
Note that the kernel modules built here must be used with gsp.bin
|
Note that the kernel modules built here must be used with gsp.bin
|
||||||
firmware and user-space NVIDIA GPU driver components from a corresponding
|
firmware and user-space NVIDIA GPU driver components from a corresponding
|
||||||
515.57 driver release. This can be achieved by installing
|
515.65.01 driver release. This can be achieved by installing
|
||||||
the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
|
the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
|
||||||
option. E.g.,
|
option. E.g.,
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ for the target kernel.
|
|||||||
## Compatible GPUs
|
## Compatible GPUs
|
||||||
|
|
||||||
The open-gpu-kernel-modules can be used on any Turing or later GPU
|
The open-gpu-kernel-modules can be used on any Turing or later GPU
|
||||||
(see the table below). However, in the 515.57 release,
|
(see the table below). However, in the 515.65.01 release,
|
||||||
GeForce and Workstation support is still considered alpha-quality.
|
GeForce and Workstation support is still considered alpha-quality.
|
||||||
|
|
||||||
To enable use of the open kernel modules on GeForce and Workstation GPUs,
|
To enable use of the open kernel modules on GeForce and Workstation GPUs,
|
||||||
@ -175,7 +175,7 @@ set the "NVreg_OpenRmEnableUnsupportedGpus" nvidia.ko kernel module
|
|||||||
parameter to 1. For more details, see the NVIDIA GPU driver end user
|
parameter to 1. For more details, see the NVIDIA GPU driver end user
|
||||||
README here:
|
README here:
|
||||||
|
|
||||||
https://us.download.nvidia.com/XFree86/Linux-x86_64/515.57/README/kernel_open.html
|
https://us.download.nvidia.com/XFree86/Linux-x86_64/515.65.01/README/kernel_open.html
|
||||||
|
|
||||||
In the below table, if three IDs are listed, the first is the PCI Device
|
In the below table, if three IDs are listed, the first is the PCI Device
|
||||||
ID, the second is the PCI Subsystem Vendor ID, and the third is the PCI
|
ID, the second is the PCI Subsystem Vendor ID, and the third is the PCI
|
||||||
@ -704,6 +704,8 @@ Subsystem Device ID.
|
|||||||
| NVIDIA RTX A5500 | 2233 10DE 165A |
|
| NVIDIA RTX A5500 | 2233 10DE 165A |
|
||||||
| NVIDIA RTX A5500 | 2233 17AA 165A |
|
| NVIDIA RTX A5500 | 2233 17AA 165A |
|
||||||
| NVIDIA A40 | 2235 10DE 145A |
|
| NVIDIA A40 | 2235 10DE 145A |
|
||||||
|
| NVIDIA A10 | 2236 10DE 1482 |
|
||||||
|
| NVIDIA A10G | 2237 10DE 152F |
|
||||||
| NVIDIA A10M | 2238 10DE 1677 |
|
| NVIDIA A10M | 2238 10DE 1677 |
|
||||||
| NVIDIA GeForce RTX 3060 Ti | 2414 |
|
| NVIDIA GeForce RTX 3060 Ti | 2414 |
|
||||||
| NVIDIA GeForce RTX 3080 Ti Laptop GPU | 2420 |
|
| NVIDIA GeForce RTX 3080 Ti Laptop GPU | 2420 |
|
||||||
|
@ -72,7 +72,7 @@ EXTRA_CFLAGS += -I$(src)/common/inc
|
|||||||
EXTRA_CFLAGS += -I$(src)
|
EXTRA_CFLAGS += -I$(src)
|
||||||
EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args
|
EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args
|
||||||
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM
|
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM
|
||||||
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"515.57\"
|
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"515.65.01\"
|
||||||
|
|
||||||
EXTRA_CFLAGS += -Wno-unused-function
|
EXTRA_CFLAGS += -Wno-unused-function
|
||||||
|
|
||||||
|
@ -989,6 +989,7 @@ NvBool NV_API_CALL rm_disable_iomap_wc(void);
|
|||||||
|
|
||||||
void NV_API_CALL rm_init_dynamic_power_management(nvidia_stack_t *, nv_state_t *, NvBool);
|
void NV_API_CALL rm_init_dynamic_power_management(nvidia_stack_t *, nv_state_t *, NvBool);
|
||||||
void NV_API_CALL rm_cleanup_dynamic_power_management(nvidia_stack_t *, nv_state_t *);
|
void NV_API_CALL rm_cleanup_dynamic_power_management(nvidia_stack_t *, nv_state_t *);
|
||||||
|
void NV_API_CALL rm_enable_dynamic_power_management(nvidia_stack_t *, nv_state_t *);
|
||||||
NV_STATUS NV_API_CALL rm_ref_dynamic_power(nvidia_stack_t *, nv_state_t *, nv_dynamic_power_mode_t);
|
NV_STATUS NV_API_CALL rm_ref_dynamic_power(nvidia_stack_t *, nv_state_t *, nv_dynamic_power_mode_t);
|
||||||
void NV_API_CALL rm_unref_dynamic_power(nvidia_stack_t *, nv_state_t *, nv_dynamic_power_mode_t);
|
void NV_API_CALL rm_unref_dynamic_power(nvidia_stack_t *, nv_state_t *, nv_dynamic_power_mode_t);
|
||||||
NV_STATUS NV_API_CALL rm_transition_dynamic_power(nvidia_stack_t *, nv_state_t *, NvBool);
|
NV_STATUS NV_API_CALL rm_transition_dynamic_power(nvidia_stack_t *, nv_state_t *, NvBool);
|
||||||
|
@ -5288,22 +5288,6 @@ compile_test() {
|
|||||||
rm -f conftest$$.c
|
rm -f conftest$$.c
|
||||||
;;
|
;;
|
||||||
|
|
||||||
acpi_bus_get_device)
|
|
||||||
#
|
|
||||||
# Determine if the acpi_bus_get_device() function is present
|
|
||||||
#
|
|
||||||
# acpi_bus_get_device() was removed by commit ac2a3feefad5
|
|
||||||
# ("ACPI: bus: Eliminate acpi_bus_get_device()") in
|
|
||||||
# v5.18-rc2 (2022-04-05).
|
|
||||||
#
|
|
||||||
CODE="
|
|
||||||
#include <linux/acpi.h>
|
|
||||||
int conftest_acpi_bus_get_device(void) {
|
|
||||||
return acpi_bus_get_device();
|
|
||||||
}"
|
|
||||||
compile_check_conftest "$CODE" "NV_ACPI_BUS_GET_DEVICE_PRESENT" "" "functions"
|
|
||||||
;;
|
|
||||||
|
|
||||||
dma_resv_add_fence)
|
dma_resv_add_fence)
|
||||||
#
|
#
|
||||||
# Determine if the dma_resv_add_fence() function is present.
|
# Determine if the dma_resv_add_fence() function is present.
|
||||||
@ -5365,6 +5349,23 @@ compile_test() {
|
|||||||
compile_check_conftest "$CODE" "NV_RESERVATION_OBJECT_RESERVE_SHARED_HAS_NUM_FENCES_ARG" "" "types"
|
compile_check_conftest "$CODE" "NV_RESERVATION_OBJECT_RESERVE_SHARED_HAS_NUM_FENCES_ARG" "" "types"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
get_task_ioprio)
|
||||||
|
#
|
||||||
|
# Determine if the __get_task_ioprio() function is present.
|
||||||
|
#
|
||||||
|
# __get_task_ioprio was added by commit 893e5d32d583
|
||||||
|
# ("block: Generalize get_current_ioprio() for any task") for
|
||||||
|
# v5.20 linux-next (2022-06-23).
|
||||||
|
#
|
||||||
|
CODE="
|
||||||
|
#include <linux/ioprio.h>
|
||||||
|
void conftest_get_task_ioprio(void) {
|
||||||
|
__get_task_ioprio();
|
||||||
|
}"
|
||||||
|
|
||||||
|
compile_check_conftest "$CODE" "NV_GET_TASK_IOPRIO_PRESENT" "" "functions"
|
||||||
|
;;
|
||||||
|
|
||||||
# When adding a new conftest entry, please use the correct format for
|
# When adding a new conftest entry, please use the correct format for
|
||||||
# specifying the relevant upstream Linux kernel commit.
|
# specifying the relevant upstream Linux kernel commit.
|
||||||
#
|
#
|
||||||
|
@ -715,12 +715,11 @@ NV_STATUS NV_API_CALL nv_acpi_ddc_method(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
struct acpi_device *device = NULL;
|
|
||||||
union acpi_object *ddc = NULL;
|
union acpi_object *ddc = NULL;
|
||||||
struct list_head *node, *next;
|
|
||||||
NvU32 i, largestEdidSize;
|
NvU32 i, largestEdidSize;
|
||||||
acpi_handle dev_handle = NULL;
|
acpi_handle dev_handle = NULL;
|
||||||
acpi_handle lcd_dev_handle = NULL;
|
acpi_handle lcd_dev_handle = NULL;
|
||||||
|
acpi_handle handle = NULL;
|
||||||
|
|
||||||
if (!nv_acpi_get_device_handle(nv, &dev_handle))
|
if (!nv_acpi_get_device_handle(nv, &dev_handle))
|
||||||
return NV_ERR_NOT_SUPPORTED;
|
return NV_ERR_NOT_SUPPORTED;
|
||||||
@ -728,15 +727,6 @@ NV_STATUS NV_API_CALL nv_acpi_ddc_method(
|
|||||||
if (!dev_handle)
|
if (!dev_handle)
|
||||||
return NV_ERR_INVALID_ARGUMENT;
|
return NV_ERR_INVALID_ARGUMENT;
|
||||||
|
|
||||||
#if defined(NV_ACPI_BUS_GET_DEVICE_PRESENT)
|
|
||||||
status = acpi_bus_get_device(dev_handle, &device);
|
|
||||||
#else
|
|
||||||
return NV_ERR_NOT_SUPPORTED;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (ACPI_FAILURE(status) || !device)
|
|
||||||
return NV_ERR_INVALID_ARGUMENT;
|
|
||||||
|
|
||||||
if (!NV_MAY_SLEEP())
|
if (!NV_MAY_SLEEP())
|
||||||
{
|
{
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
@ -747,16 +737,16 @@ NV_STATUS NV_API_CALL nv_acpi_ddc_method(
|
|||||||
return NV_ERR_NOT_SUPPORTED;
|
return NV_ERR_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_for_each_safe(node, next, &device->children)
|
while (lcd_dev_handle == NULL)
|
||||||
{
|
{
|
||||||
unsigned long long device_id = 0;
|
unsigned long long device_id = 0;
|
||||||
struct acpi_device *dev =
|
|
||||||
list_entry(node, struct acpi_device, node);
|
|
||||||
|
|
||||||
if (!dev)
|
status = acpi_get_next_object(ACPI_TYPE_DEVICE, dev_handle,
|
||||||
continue;
|
handle, &handle);
|
||||||
|
if (ACPI_FAILURE(status) || (handle == NULL))
|
||||||
|
break;
|
||||||
|
|
||||||
status = acpi_evaluate_integer(dev->handle, "_ADR", NULL, &device_id);
|
status = acpi_evaluate_integer(handle, "_ADR", NULL, &device_id);
|
||||||
if (ACPI_FAILURE(status))
|
if (ACPI_FAILURE(status))
|
||||||
/* Couldnt query device_id for this device */
|
/* Couldnt query device_id for this device */
|
||||||
continue;
|
continue;
|
||||||
@ -766,16 +756,13 @@ NV_STATUS NV_API_CALL nv_acpi_ddc_method(
|
|||||||
case 0x0118:
|
case 0x0118:
|
||||||
case 0x0400:
|
case 0x0400:
|
||||||
case 0xA420:
|
case 0xA420:
|
||||||
lcd_dev_handle = dev->handle;
|
lcd_dev_handle = handle;
|
||||||
nv_printf(NV_DBG_INFO, "NVRM: %s Found LCD: %x\n",
|
nv_printf(NV_DBG_INFO, "NVRM: %s Found LCD: %x\n",
|
||||||
__FUNCTION__, device_id);
|
__FUNCTION__, device_id);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lcd_dev_handle != NULL)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lcd_dev_handle == NULL)
|
if (lcd_dev_handle == NULL)
|
||||||
@ -1125,15 +1112,14 @@ NV_STATUS NV_API_CALL nv_acpi_mux_method(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
struct acpi_device *device = NULL;
|
|
||||||
struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
|
struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||||
union acpi_object *mux = NULL;
|
union acpi_object *mux = NULL;
|
||||||
union acpi_object mux_arg = { ACPI_TYPE_INTEGER };
|
union acpi_object mux_arg = { ACPI_TYPE_INTEGER };
|
||||||
struct acpi_object_list input = { 1, &mux_arg };
|
struct acpi_object_list input = { 1, &mux_arg };
|
||||||
acpi_handle dev_handle = NULL;
|
acpi_handle dev_handle = NULL;
|
||||||
acpi_handle mux_dev_handle = NULL;
|
acpi_handle mux_dev_handle = NULL;
|
||||||
|
acpi_handle handle = NULL;
|
||||||
unsigned long long device_id = 0;
|
unsigned long long device_id = 0;
|
||||||
struct list_head *node, *next;
|
|
||||||
|
|
||||||
if ((strcmp(pMethodName, "MXDS") != 0)
|
if ((strcmp(pMethodName, "MXDS") != 0)
|
||||||
&& (strcmp(pMethodName, "MXDM") != 0))
|
&& (strcmp(pMethodName, "MXDM") != 0))
|
||||||
@ -1154,16 +1140,6 @@ NV_STATUS NV_API_CALL nv_acpi_mux_method(
|
|||||||
if (!dev_handle)
|
if (!dev_handle)
|
||||||
return NV_ERR_INVALID_ARGUMENT;
|
return NV_ERR_INVALID_ARGUMENT;
|
||||||
|
|
||||||
#if defined(NV_ACPI_BUS_GET_DEVICE_PRESENT)
|
|
||||||
status = acpi_bus_get_device(dev_handle, &device);
|
|
||||||
#else
|
|
||||||
return NV_ERR_NOT_SUPPORTED;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
if (ACPI_FAILURE(status) || !device)
|
|
||||||
return NV_ERR_INVALID_ARGUMENT;
|
|
||||||
|
|
||||||
if (!NV_MAY_SLEEP())
|
if (!NV_MAY_SLEEP())
|
||||||
{
|
{
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
@ -1172,23 +1148,16 @@ NV_STATUS NV_API_CALL nv_acpi_mux_method(
|
|||||||
return NV_ERR_NOT_SUPPORTED;
|
return NV_ERR_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_for_each_safe(node, next, &device->children)
|
while (mux_dev_handle == NULL)
|
||||||
{
|
{
|
||||||
struct acpi_device *dev = list_entry(node, struct acpi_device, node);
|
status = acpi_get_next_object(ACPI_TYPE_DEVICE, dev_handle,
|
||||||
|
handle, &handle);
|
||||||
if (!dev)
|
if (ACPI_FAILURE(status) || (handle == NULL))
|
||||||
continue;
|
|
||||||
|
|
||||||
status = acpi_evaluate_integer(dev->handle, "_ADR", NULL, &device_id);
|
|
||||||
if (ACPI_FAILURE(status))
|
|
||||||
/* Could not query device_id for this device */
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (device_id == muxAcpiId)
|
|
||||||
{
|
|
||||||
mux_dev_handle = dev->handle;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
status = acpi_evaluate_integer(handle, "_ADR", NULL, &device_id);
|
||||||
|
if (ACPI_SUCCESS(status) && (device_id == muxAcpiId))
|
||||||
|
mux_dev_handle = handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mux_dev_handle == NULL)
|
if (mux_dev_handle == NULL)
|
||||||
|
@ -797,12 +797,12 @@ nv_dma_buf_reuse(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (buf->ops != &nv_dma_buf_ops)
|
||||||
|
{
|
||||||
|
nv_printf(NV_DBG_ERRORS, "NVRM: Invalid dma-buf fd\n");
|
||||||
|
status = NV_ERR_INVALID_ARGUMENT;
|
||||||
|
goto cleanup_dmabuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
priv = buf->priv;
|
priv = buf->priv;
|
||||||
|
@ -608,6 +608,13 @@ next_bar:
|
|||||||
dev_pm_set_driver_flags(nvl->dev, DPM_FLAG_NEVER_SKIP);
|
dev_pm_set_driver_flags(nvl->dev, DPM_FLAG_NEVER_SKIP);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Dynamic power management should be enabled as the last step.
|
||||||
|
* Kernel runtime power management framework can put the device
|
||||||
|
* into the suspended state. Hardware register access should not be done
|
||||||
|
* after enabling dynamic power management.
|
||||||
|
*/
|
||||||
|
rm_enable_dynamic_power_management(sp, nv);
|
||||||
nv_kmem_cache_free_stack(sp);
|
nv_kmem_cache_free_stack(sp);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -683,8 +690,9 @@ nv_pci_remove(struct pci_dev *pci_dev)
|
|||||||
if ((NV_ATOMIC_READ(nvl->usage_count) != 0) && !(nv->is_external_gpu))
|
if ((NV_ATOMIC_READ(nvl->usage_count) != 0) && !(nv->is_external_gpu))
|
||||||
{
|
{
|
||||||
nv_printf(NV_DBG_ERRORS,
|
nv_printf(NV_DBG_ERRORS,
|
||||||
"NVRM: Attempting to remove minor device %u with non-zero usage count!\n",
|
"NVRM: Attempting to remove device %04x:%02x:%02x.%x with non-zero usage count!\n",
|
||||||
nvl->minor_num);
|
NV_PCI_DOMAIN_NUMBER(pci_dev), NV_PCI_BUS_NUMBER(pci_dev),
|
||||||
|
NV_PCI_SLOT_NUMBER(pci_dev), PCI_FUNC(pci_dev->devfn));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We can't return from this function without corrupting state, so we wait for
|
* We can't return from this function without corrupting state, so we wait for
|
||||||
@ -708,7 +716,8 @@ nv_pci_remove(struct pci_dev *pci_dev)
|
|||||||
if (!nvl)
|
if (!nvl)
|
||||||
{
|
{
|
||||||
/* The device was not found, which should not happen */
|
/* The device was not found, which should not happen */
|
||||||
nv_printf(NV_DBG_ERRORS, "NVRM: Failed removal of minor device! %04x:%02x:%02x.%x\n",
|
nv_printf(NV_DBG_ERRORS,
|
||||||
|
"NVRM: Failed removal of device %04x:%02x:%02x.%x!\n",
|
||||||
NV_PCI_DOMAIN_NUMBER(pci_dev), NV_PCI_BUS_NUMBER(pci_dev),
|
NV_PCI_DOMAIN_NUMBER(pci_dev), NV_PCI_BUS_NUMBER(pci_dev),
|
||||||
NV_PCI_SLOT_NUMBER(pci_dev), PCI_FUNC(pci_dev->devfn));
|
NV_PCI_SLOT_NUMBER(pci_dev), PCI_FUNC(pci_dev->devfn));
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
@ -719,8 +728,9 @@ nv_pci_remove(struct pci_dev *pci_dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
nv_printf(NV_DBG_ERRORS,
|
nv_printf(NV_DBG_ERRORS,
|
||||||
"NVRM: Continuing with GPU removal for minor device %u\n",
|
"NVRM: Continuing with GPU removal for device %04x:%02x:%02x.%x\n",
|
||||||
nvl->minor_num);
|
NV_PCI_DOMAIN_NUMBER(pci_dev), NV_PCI_BUS_NUMBER(pci_dev),
|
||||||
|
NV_PCI_SLOT_NUMBER(pci_dev), PCI_FUNC(pci_dev->devfn));
|
||||||
}
|
}
|
||||||
|
|
||||||
rm_check_for_gpu_surprise_removal(sp, nv);
|
rm_check_for_gpu_surprise_removal(sp, nv);
|
||||||
|
@ -5443,7 +5443,19 @@ NvBool NV_API_CALL nv_s2idle_pm_configured(void)
|
|||||||
return NV_FALSE;
|
return NV_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* init_sync_kiocb() internally uses GPL licensed __get_task_ioprio() from
|
||||||
|
* v5.20-rc1.
|
||||||
|
*/
|
||||||
|
#if defined(NV_GET_TASK_IOPRIO_PRESENT)
|
||||||
|
memset(&kiocb, 0, sizeof(kiocb));
|
||||||
|
kiocb.ki_filp = file;
|
||||||
|
kiocb.ki_flags = iocb_flags(file);
|
||||||
|
kiocb.ki_ioprio = IOPRIO_DEFAULT;
|
||||||
|
#else
|
||||||
init_sync_kiocb(&kiocb, file);
|
init_sync_kiocb(&kiocb, file);
|
||||||
|
#endif
|
||||||
|
|
||||||
kiocb.ki_pos = 0;
|
kiocb.ki_pos = 0;
|
||||||
iov_iter_kvec(&iter, READ, &iov, 1, sizeof(buf));
|
iov_iter_kvec(&iter, READ, &iov, 1, sizeof(buf));
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += dma_buf_ops_has_map_atomic
|
|||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += dma_buf_has_dynamic_attachment
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += dma_buf_has_dynamic_attachment
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += dma_buf_attachment_has_peer2peer
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += dma_buf_attachment_has_peer2peer
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += dma_set_mask_and_coherent
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += dma_set_mask_and_coherent
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += acpi_bus_get_device
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += get_task_ioprio
|
||||||
|
|
||||||
NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_gpl_of_node_to_nid
|
NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_gpl_of_node_to_nid
|
||||||
NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_gpl_sme_active
|
NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_gpl_sme_active
|
||||||
|
@ -122,6 +122,8 @@ namespace DisplayPort
|
|||||||
ConnectorType connectorType;
|
ConnectorType connectorType;
|
||||||
Address address;
|
Address address;
|
||||||
GUID guid;
|
GUID guid;
|
||||||
|
GUID guid2;
|
||||||
|
bool bVirtualPeerDevice;
|
||||||
NvU8 peerDevice;
|
NvU8 peerDevice;
|
||||||
NvU8 dpcdRevisionMajor;
|
NvU8 dpcdRevisionMajor;
|
||||||
NvU8 dpcdRevisionMinor;
|
NvU8 dpcdRevisionMinor;
|
||||||
@ -357,6 +359,29 @@ namespace DisplayPort
|
|||||||
return hal->setIgnoreMSATimingParamters(msaTimingParamIgnoreEn);
|
return hal->setIgnoreMSATimingParamters(msaTimingParamIgnoreEn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isVirtualPeerDevice()
|
||||||
|
{
|
||||||
|
return bVirtualPeerDevice;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isBranchDevice()
|
||||||
|
{
|
||||||
|
return !isVideoSink() && !isAudioSink();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isAtLeastVersion(unsigned major, unsigned minor)
|
||||||
|
{
|
||||||
|
if (dpcdRevisionMajor > major)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (dpcdRevisionMajor < major)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return dpcdRevisionMinor >= minor;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void queryGUID2();
|
||||||
|
|
||||||
virtual bool getSDPExtnForColorimetrySupported();
|
virtual bool getSDPExtnForColorimetrySupported();
|
||||||
|
|
||||||
virtual bool isPowerSuspended();
|
virtual bool isPowerSuspended();
|
||||||
@ -447,6 +472,7 @@ namespace DisplayPort
|
|||||||
unsigned getDscPeakThroughputModel();
|
unsigned getDscPeakThroughputModel();
|
||||||
unsigned getDscMaxSliceWidth();
|
unsigned getDscMaxSliceWidth();
|
||||||
unsigned getDscDecoderColorDepthSupportMask();
|
unsigned getDscDecoderColorDepthSupportMask();
|
||||||
|
void setDscDecompressionDevice(bool bDscCapBasedOnParent);
|
||||||
};
|
};
|
||||||
class DeviceHDCPDetection : public Object, MessageManager::Message::MessageEventSink, Timer::TimerCallback
|
class DeviceHDCPDetection : public Object, MessageManager::Message::MessageEventSink, Timer::TimerCallback
|
||||||
{
|
{
|
||||||
|
@ -624,132 +624,36 @@ create:
|
|||||||
if (existingDev && existingDev->complianceDeviceEdidReadTest)
|
if (existingDev && existingDev->complianceDeviceEdidReadTest)
|
||||||
existingDev->lazyExitNow = true;
|
existingDev->lazyExitNow = true;
|
||||||
|
|
||||||
|
if(newDev->isBranchDevice() && newDev->isAtLeastVersion(1,4))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// GUID_2 will be non-zero for a virtual peer device and 0 for others.
|
||||||
|
// This will help identify if a device is virtual peer device or not.
|
||||||
|
//
|
||||||
|
newDev->queryGUID2();
|
||||||
|
}
|
||||||
|
|
||||||
// Read panel DSC support only if GPU supports DSC
|
// Read panel DSC support only if GPU supports DSC
|
||||||
bool bGpuDscSupported;
|
bool bGpuDscSupported;
|
||||||
main->getDscCaps(&bGpuDscSupported);
|
main->getDscCaps(&bGpuDscSupported);
|
||||||
if (bGpuDscSupported && newDev->getDSCSupport())
|
if (bGpuDscSupported)
|
||||||
{
|
{
|
||||||
// Read and parse DSC caps only if panel supports DSC
|
if (newDev->getDSCSupport())
|
||||||
newDev->readAndParseDSCCaps();
|
|
||||||
|
|
||||||
// Read and Parse Branch Specific DSC Caps
|
|
||||||
if (!newDev->isVideoSink() && !newDev->isAudioSink())
|
|
||||||
{
|
{
|
||||||
newDev->readAndParseBranchSpecificDSCCaps();
|
// Read and parse DSC caps only if panel supports DSC
|
||||||
}
|
newDev->readAndParseDSCCaps();
|
||||||
}
|
|
||||||
|
|
||||||
// Decide if DSC stream can be sent to new device
|
// Read and Parse Branch Specific DSC Caps
|
||||||
newDev->bDSCPossible = false;
|
if (!newDev->isVideoSink() && !newDev->isAudioSink())
|
||||||
newDev->devDoingDscDecompression = NULL;
|
|
||||||
if (bGpuDscSupported && !processedEdid.WARFlags.bIgnoreDscCap)
|
|
||||||
{
|
|
||||||
if (newDev->multistream)
|
|
||||||
{
|
|
||||||
if ((newDev->peerDevice == Dongle) &&
|
|
||||||
(newDev->dpcdRevisionMajor != 0) &&
|
|
||||||
!bDscCapBasedOnParent)
|
|
||||||
{
|
{
|
||||||
// For Peer Type 4 device with LAM DPCD rev != 0.0, check only the device's own DSC capability.
|
newDev->readAndParseBranchSpecificDSCCaps();
|
||||||
if (newDev->isDSCSupported())
|
|
||||||
{
|
|
||||||
newDev->bDSCPossible = true;
|
|
||||||
newDev->devDoingDscDecompression = newDev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (this->bDscMstEnablePassThrough)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Check the device's own and its parent's DSC capability.
|
|
||||||
// - Sink device will do DSC cecompression when
|
|
||||||
// 1. Sink device is capable of DSC decompression and parent
|
|
||||||
// supports DSC pass through.
|
|
||||||
//
|
|
||||||
// - Sink device's parent will do DSC decompression
|
|
||||||
// 1. If sink device supports DSC decompression but it's parent does not support
|
|
||||||
// DSC Pass through, but supports DSC decompression.
|
|
||||||
// 2. If the device does not support DSC decompression, but parent supports it.
|
|
||||||
//
|
|
||||||
if (newDev->isDSCSupported())
|
|
||||||
{
|
|
||||||
if (newDev->videoSink && newDev->parent)
|
|
||||||
{
|
|
||||||
if (newDev->parent->isDSCPassThroughSupported())
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// This condition takes care of DSC capable sink devices
|
|
||||||
// connected behind a DSC Pass through capable branch
|
|
||||||
//
|
|
||||||
newDev->devDoingDscDecompression = newDev;
|
|
||||||
newDev->bDSCPossible = true;
|
|
||||||
}
|
|
||||||
else if (newDev->parent->isDSCSupported())
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// This condition takes care of DSC capable sink devices
|
|
||||||
// connected behind a branch device that is not capable
|
|
||||||
// of DSC pass through but can do DSC decompression.
|
|
||||||
//
|
|
||||||
newDev->bDSCPossible = true;
|
|
||||||
newDev->devDoingDscDecompression = newDev->parent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// This condition takes care of branch device capable of DSC.
|
|
||||||
newDev->devDoingDscDecompression = newDev;
|
|
||||||
newDev->bDSCPossible = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (newDev->parent && newDev->parent->isDSCSupported())
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// This condition takes care of sink devices not capable of DSC
|
|
||||||
// but parent is capable of DSC decompression.
|
|
||||||
//
|
|
||||||
newDev->bDSCPossible = true;
|
|
||||||
newDev->devDoingDscDecompression = newDev->parent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Revert to old code if DSC Pass through support is not requested.
|
|
||||||
// This code will be deleted once DSC Pass through support will be enabled
|
|
||||||
// by default which will be done when 2Head1OR MST (GR-133) will be in production.
|
|
||||||
//
|
|
||||||
// Check the device's own and its parent's DSC capability. Parent of the device can do
|
|
||||||
// DSC decompression and send uncompressed stream to downstream device
|
|
||||||
//
|
|
||||||
if (newDev->isDSCSupported() || (newDev->parent && newDev->parent->isDSCSupported()))
|
|
||||||
{
|
|
||||||
newDev->bDSCPossible = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// For multistream device, determine who will do the DSC decompression
|
|
||||||
if (newDev->bDSCPossible)
|
|
||||||
{
|
|
||||||
if(!newDev->isDSCSupported())
|
|
||||||
{
|
|
||||||
newDev->devDoingDscDecompression = newDev->parent;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newDev->devDoingDscDecompression = newDev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (!processedEdid.WARFlags.bIgnoreDscCap)
|
||||||
{
|
{
|
||||||
if (newDev->isDSCSupported())
|
// Check if DSC is possible for the device and if so, set DSC Decompression device.
|
||||||
{
|
newDev->setDscDecompressionDevice(this->bDscCapBasedOnParent);
|
||||||
newDev->bDSCPossible = true;
|
|
||||||
newDev->devDoingDscDecompression = newDev;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1953,8 +1857,9 @@ void ConnectorImpl::fireEvents()
|
|||||||
void ConnectorImpl::fireEventsInternal()
|
void ConnectorImpl::fireEventsInternal()
|
||||||
{
|
{
|
||||||
ListElement * next;
|
ListElement * next;
|
||||||
Address::StringBuffer sb;
|
Address::StringBuffer sb, sb1;
|
||||||
DP_USED(sb);
|
DP_USED(sb);
|
||||||
|
DP_USED(sb1);
|
||||||
for (ListElement * e = deviceList.begin(); e != deviceList.end(); e = next)
|
for (ListElement * e = deviceList.begin(); e != deviceList.end(); e = next)
|
||||||
{
|
{
|
||||||
next = e->next;
|
next = e->next;
|
||||||
@ -2096,7 +2001,7 @@ void ConnectorImpl::fireEventsInternal()
|
|||||||
DP_LOG(("DPCONN> New device %s | Native DSC Capability - %s | DSC Decompression Device - %s",
|
DP_LOG(("DPCONN> New device %s | Native DSC Capability - %s | DSC Decompression Device - %s",
|
||||||
dev->address.toString(sb),
|
dev->address.toString(sb),
|
||||||
(dev->isDSCSupported() ? "Capable" : "Not Capable"),
|
(dev->isDSCSupported() ? "Capable" : "Not Capable"),
|
||||||
(dev->devDoingDscDecompression) ? dev->devDoingDscDecompression->address.toString(sb):"NA"));
|
(dev->devDoingDscDecompression) ? dev->devDoingDscDecompression->address.toString(sb1):"NA"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -81,6 +81,7 @@ DeviceImpl::DeviceImpl(DPCDHAL * hal, ConnectorImpl * connector, DeviceImpl * pa
|
|||||||
activeGroup(0),
|
activeGroup(0),
|
||||||
connector(connector),
|
connector(connector),
|
||||||
address(),
|
address(),
|
||||||
|
bVirtualPeerDevice(false),
|
||||||
plugged(false),
|
plugged(false),
|
||||||
friendlyAux(this),
|
friendlyAux(this),
|
||||||
isHDCPCap(False),
|
isHDCPCap(False),
|
||||||
@ -1445,6 +1446,8 @@ NvBool DeviceImpl::getDSCSupport()
|
|||||||
NvU8 byte = 0;
|
NvU8 byte = 0;
|
||||||
unsigned size = 0;
|
unsigned size = 0;
|
||||||
unsigned nakReason = NakUndefined;
|
unsigned nakReason = NakUndefined;
|
||||||
|
Address::StringBuffer sb;
|
||||||
|
DP_USED(sb);
|
||||||
|
|
||||||
dscCaps.bDSCSupported = false;
|
dscCaps.bDSCSupported = false;
|
||||||
|
|
||||||
@ -1462,6 +1465,11 @@ NvBool DeviceImpl::getDSCSupport()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DP_LOG(("DP-DEV> DSC Support AUX READ failed for %s!", address.toString(sb)));
|
||||||
|
}
|
||||||
|
|
||||||
return dscCaps.bDSCSupported;
|
return dscCaps.bDSCSupported;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1737,16 +1745,40 @@ bool DeviceImpl::readAndParseDSCCaps()
|
|||||||
|
|
||||||
unsigned sizeCompleted = 0;
|
unsigned sizeCompleted = 0;
|
||||||
unsigned nakReason = NakUndefined;
|
unsigned nakReason = NakUndefined;
|
||||||
|
Address::StringBuffer sb;
|
||||||
|
DP_USED(sb);
|
||||||
|
|
||||||
if(AuxBus::success != this->getDpcdData(NV_DPCD14_DSC_SUPPORT,
|
if(AuxBus::success != this->getDpcdData(NV_DPCD14_DSC_SUPPORT,
|
||||||
&rawDscCaps[0], sizeof(rawDscCaps), &sizeCompleted, &nakReason))
|
&rawDscCaps[0], sizeof(rawDscCaps), &sizeCompleted, &nakReason))
|
||||||
{
|
{
|
||||||
|
DP_LOG(("DP-DEV> Error querying DSC Caps on %s!", this->address.toString(sb)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return parseDscCaps(&rawDscCaps[0], sizeof(rawDscCaps));
|
return parseDscCaps(&rawDscCaps[0], sizeof(rawDscCaps));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeviceImpl::queryGUID2()
|
||||||
|
{
|
||||||
|
unsigned sizeCompleted = 0;
|
||||||
|
unsigned nakReason = NakUndefined;
|
||||||
|
Address::StringBuffer sb;
|
||||||
|
DP_USED(sb);
|
||||||
|
|
||||||
|
if(AuxBus::success == this->getDpcdData(NV_DPCD20_GUID_2,
|
||||||
|
&this->guid2.data[0], DPCD_GUID_SIZE, &sizeCompleted, &nakReason))
|
||||||
|
{
|
||||||
|
if (!(this->guid2.isGuidZero()))
|
||||||
|
{
|
||||||
|
this->bVirtualPeerDevice = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DP_LOG(("DP-DEV> Error querying GUID2 on %s!", this->address.toString(sb)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool DeviceImpl::readAndParseBranchSpecificDSCCaps()
|
bool DeviceImpl::readAndParseBranchSpecificDSCCaps()
|
||||||
{
|
{
|
||||||
unsigned sizeCompleted = 0;
|
unsigned sizeCompleted = 0;
|
||||||
@ -1785,7 +1817,7 @@ bool DeviceImpl::getDscEnable(bool *pEnable)
|
|||||||
|
|
||||||
if (status != AuxBus::success)
|
if (status != AuxBus::success)
|
||||||
{
|
{
|
||||||
DP_LOG(("DP> Error querying DSC Enable State!"));
|
DP_LOG(("DP-DEV> Error querying DSC Enable State!"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1793,13 +1825,110 @@ bool DeviceImpl::getDscEnable(bool *pEnable)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeviceImpl::setDscDecompressionDevice(bool bDscCapBasedOnParent)
|
||||||
|
{
|
||||||
|
// Decide if DSC stream can be sent to new device
|
||||||
|
this->bDSCPossible = false;
|
||||||
|
this->devDoingDscDecompression = NULL;
|
||||||
|
|
||||||
|
if (this->multistream)
|
||||||
|
{
|
||||||
|
if ((this->peerDevice == Dongle) &&
|
||||||
|
(this->dpcdRevisionMajor != 0) &&
|
||||||
|
!bDscCapBasedOnParent)
|
||||||
|
{
|
||||||
|
// For Peer Type 4 device with LAM DPCD rev != 0.0, check only the device's own DSC capability.
|
||||||
|
if (this->isDSCSupported())
|
||||||
|
{
|
||||||
|
this->bDSCPossible = true;
|
||||||
|
this->devDoingDscDecompression = this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Check the device's own and its parent's DSC capability.
|
||||||
|
// - Sink device will do DSC cecompression when
|
||||||
|
// 1. Sink device is capable of DSC decompression
|
||||||
|
// 2. Sink is on a logical port (8-15)
|
||||||
|
//
|
||||||
|
// OR
|
||||||
|
//
|
||||||
|
// 1. Sink device is capable of DSC decompression
|
||||||
|
// 2. Parent of sink is a Virtual Peer device
|
||||||
|
// 3. Parent of sink supports DSC Pass through
|
||||||
|
//
|
||||||
|
// - Sink device's parent will do DSC decompression
|
||||||
|
// 1. Above conditions are not true.
|
||||||
|
// 2. Parent of sink supports DSC decompression.
|
||||||
|
//
|
||||||
|
if (this->isDSCSupported())
|
||||||
|
{
|
||||||
|
if (this->isVideoSink() && this->getParent() != NULL)
|
||||||
|
{
|
||||||
|
if (this->isLogical())
|
||||||
|
{
|
||||||
|
this->devDoingDscDecompression = this;
|
||||||
|
this->bDSCPossible = true;
|
||||||
|
}
|
||||||
|
else if (this->parent->isVirtualPeerDevice() &&
|
||||||
|
this->parent->isDSCPassThroughSupported())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// This condition takes care of DSC capable sink devices
|
||||||
|
// connected behind a DSC Pass through capable branch
|
||||||
|
//
|
||||||
|
this->devDoingDscDecompression = this;
|
||||||
|
this->bDSCPossible = true;
|
||||||
|
}
|
||||||
|
else if (this->parent->isDSCSupported())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// This condition takes care of DSC capable sink devices
|
||||||
|
// connected behind a branch device that is not capable
|
||||||
|
// of DSC pass through but can do DSC decompression.
|
||||||
|
//
|
||||||
|
this->bDSCPossible = true;
|
||||||
|
this->devDoingDscDecompression = this->parent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// This condition takes care of branch device capable of DSC.
|
||||||
|
this->devDoingDscDecompression = this;
|
||||||
|
this->bDSCPossible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (this->parent && this->parent->isDSCSupported())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// This condition takes care of sink devices not capable of DSC
|
||||||
|
// but parent is capable of DSC decompression.
|
||||||
|
//
|
||||||
|
this->bDSCPossible = true;
|
||||||
|
this->devDoingDscDecompression = this->parent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this->isDSCSupported())
|
||||||
|
{
|
||||||
|
this->bDSCPossible = true;
|
||||||
|
this->devDoingDscDecompression = this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool DeviceImpl::setDscEnable(bool enable)
|
bool DeviceImpl::setDscEnable(bool enable)
|
||||||
{
|
{
|
||||||
NvU8 byte = 0;
|
NvU8 dscEnableByte = 0;
|
||||||
|
NvU8 dscPassthroughByte = 0;
|
||||||
unsigned size = 0;
|
unsigned size = 0;
|
||||||
unsigned nakReason = NakUndefined;
|
unsigned nakReason = NakUndefined;
|
||||||
bool bCurrDscEnable = false;
|
bool bCurrDscEnable = false;
|
||||||
bool bDscPassThrough = false;
|
bool bDscPassThrough = false;
|
||||||
|
bool bDscPassThroughUpdated = true;
|
||||||
Address::StringBuffer buffer;
|
Address::StringBuffer buffer;
|
||||||
DP_USED(buffer);
|
DP_USED(buffer);
|
||||||
|
|
||||||
@ -1809,12 +1938,13 @@ bool DeviceImpl::setDscEnable(bool enable)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((this->devDoingDscDecompression == this) && this->parent != NULL && this->connector->bDscMstEnablePassThrough)
|
if ((this->devDoingDscDecompression == this) && !this->isLogical() && this->parent != NULL && this->connector->bDscMstEnablePassThrough)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// If the device has a parent, that means the sink is on a MST link and
|
// If the device has a parent, that means the sink is on a MST link and
|
||||||
// and on a MST link if DSC is possible on the path and devDoingDscDecompression
|
// and on a MST link if DSC is possible on the path and devDoingDscDecompression
|
||||||
// is the sink itself, then the parent should be DSC Pass through capable..
|
// is the sink itself and sink is not on a logical port, then the parent should be
|
||||||
|
// DSC Pass through capable.
|
||||||
//
|
//
|
||||||
bDscPassThrough = true;
|
bDscPassThrough = true;
|
||||||
}
|
}
|
||||||
@ -1829,7 +1959,7 @@ bool DeviceImpl::setDscEnable(bool enable)
|
|||||||
//
|
//
|
||||||
if (!getDscEnable(&bCurrDscEnable))
|
if (!getDscEnable(&bCurrDscEnable))
|
||||||
{
|
{
|
||||||
DP_LOG(("DP> Not able to get DSC Enable State!"));
|
DP_LOG(("DP-DEV> Not able to get DSC Enable State!"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1838,66 +1968,59 @@ bool DeviceImpl::setDscEnable(bool enable)
|
|||||||
{
|
{
|
||||||
if(bDscPassThrough)
|
if(bDscPassThrough)
|
||||||
{
|
{
|
||||||
byte = FLD_SET_DRF(_DPCD20, _DSC_PASS_THROUGH, _ENABLE, _YES, byte);
|
dscPassthroughByte = FLD_SET_DRF(_DPCD20, _DSC_PASS_THROUGH, _ENABLE, _YES, dscPassthroughByte);
|
||||||
DP_LOG(("DP-DEV> Enabling DSC Pass through on branch device - %s",
|
DP_LOG(("DP-DEV> Enabling DSC Pass through on branch device - %s",
|
||||||
this->parent->getTopologyAddress().toString(buffer)));
|
this->parent->getTopologyAddress().toString(buffer)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!bCurrDscEnable)
|
||||||
|
{
|
||||||
|
dscEnableByte = FLD_SET_DRF(_DPCD14, _DSC_ENABLE, _SINK, _YES, dscEnableByte);
|
||||||
|
DP_LOG(("DP-DEV> Enabling DSC decompression on device - %s",
|
||||||
|
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!bCurrDscEnable)
|
DP_LOG(("DP-DEV> DSC decompression is already enabled on device - %s",
|
||||||
{
|
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||||
byte = FLD_SET_DRF(_DPCD14, _DSC_ENABLE, _SINK, _YES, byte);
|
return true;
|
||||||
DP_LOG(("DP-DEV> Enabling DSC decompression on device - %s",
|
|
||||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DP_LOG(("DP-DEV> DSC decompression is already enabled on device - %s",
|
|
||||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(bDscPassThrough)
|
if(bDscPassThrough)
|
||||||
{
|
{
|
||||||
byte = FLD_SET_DRF(_DPCD20, _DSC_PASS_THROUGH, _ENABLE, _NO, byte);
|
dscPassthroughByte = FLD_SET_DRF(_DPCD20, _DSC_PASS_THROUGH, _ENABLE, _NO, dscPassthroughByte);
|
||||||
DP_LOG(("DP-DEV> Disabling DSC Pass through on branch device - %s",
|
DP_LOG(("DP-DEV> Disabling DSC Pass through on branch device - %s",
|
||||||
this->parent->getTopologyAddress().toString(buffer)));
|
this->parent->getTopologyAddress().toString(buffer)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bCurrDscEnable)
|
||||||
|
{
|
||||||
|
dscEnableByte = FLD_SET_DRF(_DPCD14, _DSC_ENABLE, _SINK, _NO, dscEnableByte);
|
||||||
|
DP_LOG(("DP-DEV> Disabling DSC decompression on device - %s",
|
||||||
|
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (bCurrDscEnable)
|
DP_LOG(("DP-DEV> DSC decompression is already disabled on device - %s",
|
||||||
{
|
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||||
byte = FLD_SET_DRF(_DPCD14, _DSC_ENABLE, _SINK, _NO, byte);
|
return true;
|
||||||
DP_LOG(("DP-DEV> Disabling DSC decompression on device - %s",
|
|
||||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DP_LOG(("DP-DEV> DSC decompression is already disabled on device - %s",
|
|
||||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bDscPassThrough)
|
if (bDscPassThrough)
|
||||||
{
|
{
|
||||||
//
|
if(this->parent->setDpcdData(NV_DPCD20_DSC_PASS_THROUGH,
|
||||||
// When sink is DSC decompression capable and parent is DSC pass through capable
|
&dscPassthroughByte, sizeof dscPassthroughByte, &size, &nakReason))
|
||||||
// source needs to only enable DSC pass through on the parent branch and parent
|
{
|
||||||
// branch will take care of enabling DSC decompression on the sink.
|
DP_LOG(("DP-DEV> Setting DSC Passthrough state on parent branch failed"));
|
||||||
//
|
bDscPassThroughUpdated = false;
|
||||||
return (!this->parent->setDpcdData(NV_DPCD20_DSC_PASS_THROUGH,
|
}
|
||||||
&byte, sizeof byte, &size, &nakReason));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return (!this->devDoingDscDecompression->setDpcdData(NV_DPCD14_DSC_ENABLE,
|
|
||||||
&byte, sizeof byte, &size, &nakReason));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return (!this->devDoingDscDecompression->setDpcdData(NV_DPCD14_DSC_ENABLE,
|
||||||
|
&dscEnableByte, sizeof dscEnableByte, &size, &nakReason)) && bDscPassThroughUpdated;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned DeviceImpl::getDscVersionMajor()
|
unsigned DeviceImpl::getDscVersionMajor()
|
||||||
|
@ -651,9 +651,19 @@ void DiscoveryManager::BranchDetection::handleLinkAddressDownReply()
|
|||||||
if (child[i].isInputPort)
|
if (child[i].isInputPort)
|
||||||
{
|
{
|
||||||
parentDevice.peerDevice = child[i].peerDeviceType;
|
parentDevice.peerDevice = child[i].peerDeviceType;
|
||||||
parentDevice.dpcdRevisionMajor = child[i].dpcdRevisionMajor;
|
|
||||||
parentDevice.dpcdRevisionMinor = child[i].dpcdRevisionMinor;
|
|
||||||
parentDevice.portMap.inputMap |= (1 << child[i].portNumber);
|
parentDevice.portMap.inputMap |= (1 << child[i].portNumber);
|
||||||
|
if (address == Address(0))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// For immediate branch device, we will have already read DPCD version
|
||||||
|
// in notifyHPD. So we can just use that to populate here.
|
||||||
|
// For the remaining devices, LAM to parent branch will report the child
|
||||||
|
// DPCD version in reply and we are populating it in
|
||||||
|
// BranchDetection::detectCompleted.
|
||||||
|
//
|
||||||
|
parentDevice.dpcdRevisionMajor = parent->hal->getRevisionMajor();
|
||||||
|
parentDevice.dpcdRevisionMinor = parent->hal->getRevisionMinor();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,8 +82,6 @@ ParseResponseStatus LinkAddressMessage::parseResponseAck(EncodedMessage * messag
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
reader->readOrDefault(6 /*zeroes*/, 0x0);
|
reader->readOrDefault(6 /*zeroes*/, 0x0);
|
||||||
reply.res[i].dpcdRevisionMajor = 1;
|
|
||||||
reply.res[i].dpcdRevisionMinor = 2;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
#define NV_DPCD20_DSC_PASS_THROUGH_ENABLE_NO (0x00000000) /* R-XUV */
|
#define NV_DPCD20_DSC_PASS_THROUGH_ENABLE_NO (0x00000000) /* R-XUV */
|
||||||
#define NV_DPCD20_DSC_PASS_THROUGH_ENABLE_YES (0x00000001) /* R-XUV */
|
#define NV_DPCD20_DSC_PASS_THROUGH_ENABLE_YES (0x00000001) /* R-XUV */
|
||||||
|
|
||||||
|
#define NV_DPCD20_GUID_2 (0x00000040) /* R-XUR */
|
||||||
|
|
||||||
// PANEL REPLAY RELATED DPCD
|
// PANEL REPLAY RELATED DPCD
|
||||||
#define NV_DPCD20_PANEL_REPLAY_CAPABILITY (0x000000B0)
|
#define NV_DPCD20_PANEL_REPLAY_CAPABILITY (0x000000B0)
|
||||||
#define NV_DPCD20_PANEL_REPLAY_CAPABILITY_SUPPORTED 0:0
|
#define NV_DPCD20_PANEL_REPLAY_CAPABILITY_SUPPORTED 0:0
|
||||||
|
@ -36,25 +36,25 @@
|
|||||||
// and then checked back in. You cannot make changes to these sections without
|
// and then checked back in. You cannot make changes to these sections without
|
||||||
// corresponding changes to the buildmeister script
|
// corresponding changes to the buildmeister script
|
||||||
#ifndef NV_BUILD_BRANCH
|
#ifndef NV_BUILD_BRANCH
|
||||||
#define NV_BUILD_BRANCH r515_00
|
#define NV_BUILD_BRANCH r516_87
|
||||||
#endif
|
#endif
|
||||||
#ifndef NV_PUBLIC_BRANCH
|
#ifndef NV_PUBLIC_BRANCH
|
||||||
#define NV_PUBLIC_BRANCH r515_00
|
#define NV_PUBLIC_BRANCH r516_87
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS)
|
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS)
|
||||||
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r515/r515_00-269"
|
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r515/r516_87-317"
|
||||||
#define NV_BUILD_CHANGELIST_NUM (31485447)
|
#define NV_BUILD_CHANGELIST_NUM (31589401)
|
||||||
#define NV_BUILD_TYPE "Official"
|
#define NV_BUILD_TYPE "Official"
|
||||||
#define NV_BUILD_NAME "rel/gpu_drv/r515/r515_00-269"
|
#define NV_BUILD_NAME "rel/gpu_drv/r515/r516_87-317"
|
||||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31485447)
|
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31589401)
|
||||||
|
|
||||||
#else /* Windows builds */
|
#else /* Windows builds */
|
||||||
#define NV_BUILD_BRANCH_VERSION "r515_00-210"
|
#define NV_BUILD_BRANCH_VERSION "r516_87-1"
|
||||||
#define NV_BUILD_CHANGELIST_NUM (31485447)
|
#define NV_BUILD_CHANGELIST_NUM (31588177)
|
||||||
#define NV_BUILD_TYPE "Official"
|
#define NV_BUILD_TYPE "Official"
|
||||||
#define NV_BUILD_NAME "516.56"
|
#define NV_BUILD_NAME "516.90"
|
||||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31485447)
|
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31588177)
|
||||||
#define NV_BUILD_BRANCH_BASE_VERSION R515
|
#define NV_BUILD_BRANCH_BASE_VERSION R515
|
||||||
#endif
|
#endif
|
||||||
// End buildmeister python edited section
|
// 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) || \
|
#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)
|
(defined(RMCFG_FEATURE_PLATFORM_GSP) && RMCFG_FEATURE_PLATFORM_GSP == 1)
|
||||||
|
|
||||||
#define NV_VERSION_STRING "515.57"
|
#define NV_VERSION_STRING "515.65.01"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -3424,7 +3424,7 @@ nvlink_lib_ctrl_get_device_link_states
|
|||||||
NvU32 i = 0;
|
NvU32 i = 0;
|
||||||
|
|
||||||
nvlink_link **links = (nvlink_link **)nvlink_malloc(
|
nvlink_link **links = (nvlink_link **)nvlink_malloc(
|
||||||
sizeof(nvlink_link *) * NVLINK_MAX_NVLINK_ENDPOINTS);
|
sizeof(nvlink_link *) * NVLINK_MAX_SYSTEM_LINK_NUM);
|
||||||
if (links == NULL)
|
if (links == NULL)
|
||||||
{
|
{
|
||||||
return NVL_NO_MEM;
|
return NVL_NO_MEM;
|
||||||
|
@ -63,6 +63,7 @@ CHIPSET_SETUP_FUNC(Intel_A301_setupFunc)
|
|||||||
CHIPSET_SETUP_FUNC(Intel_0685_setupFunc)
|
CHIPSET_SETUP_FUNC(Intel_0685_setupFunc)
|
||||||
CHIPSET_SETUP_FUNC(Intel_4381_setupFunc)
|
CHIPSET_SETUP_FUNC(Intel_4381_setupFunc)
|
||||||
CHIPSET_SETUP_FUNC(Intel_7A82_setupFunc)
|
CHIPSET_SETUP_FUNC(Intel_7A82_setupFunc)
|
||||||
|
CHIPSET_SETUP_FUNC(Intel_7A04_setupFunc)
|
||||||
CHIPSET_SETUP_FUNC(SiS_656_setupFunc)
|
CHIPSET_SETUP_FUNC(SiS_656_setupFunc)
|
||||||
CHIPSET_SETUP_FUNC(ATI_RS400_setupFunc)
|
CHIPSET_SETUP_FUNC(ATI_RS400_setupFunc)
|
||||||
CHIPSET_SETUP_FUNC(ATI_RS480_setupFunc)
|
CHIPSET_SETUP_FUNC(ATI_RS480_setupFunc)
|
||||||
@ -182,6 +183,8 @@ CSINFO chipsetInfo[] =
|
|||||||
{PCI_VENDOR_ID_INTEL, 0x7A82, CS_INTEL_7A82, "Intel-AlderLake", Intel_7A82_setupFunc},
|
{PCI_VENDOR_ID_INTEL, 0x7A82, CS_INTEL_7A82, "Intel-AlderLake", Intel_7A82_setupFunc},
|
||||||
{PCI_VENDOR_ID_INTEL, 0x7A84, CS_INTEL_7A82, "Intel-AlderLake", Intel_7A82_setupFunc},
|
{PCI_VENDOR_ID_INTEL, 0x7A84, CS_INTEL_7A82, "Intel-AlderLake", Intel_7A82_setupFunc},
|
||||||
{PCI_VENDOR_ID_INTEL, 0x1B81, CS_INTEL_1B81, "Intel-SapphireRapids", NULL},
|
{PCI_VENDOR_ID_INTEL, 0x1B81, CS_INTEL_1B81, "Intel-SapphireRapids", NULL},
|
||||||
|
{PCI_VENDOR_ID_INTEL, 0x18DC, CS_INTEL_18DC, "Intel-IceLake", NULL},
|
||||||
|
{PCI_VENDOR_ID_INTEL, 0x7A04, CS_INTEL_7A04, "Intel-RaptorLake", Intel_7A04_setupFunc},
|
||||||
|
|
||||||
{PCI_VENDOR_ID_NVIDIA, 0x0FAE, CS_NVIDIA_T210, "T210", Nvidia_T210_setupFunc},
|
{PCI_VENDOR_ID_NVIDIA, 0x0FAE, CS_NVIDIA_T210, "T210", Nvidia_T210_setupFunc},
|
||||||
{PCI_VENDOR_ID_NVIDIA, 0x0FAF, CS_NVIDIA_T210, "T210", Nvidia_T210_setupFunc},
|
{PCI_VENDOR_ID_NVIDIA, 0x0FAF, CS_NVIDIA_T210, "T210", Nvidia_T210_setupFunc},
|
||||||
|
@ -642,6 +642,8 @@ enum {
|
|||||||
, CS_PHYTIUM_S2500
|
, CS_PHYTIUM_S2500
|
||||||
, CS_MELLANOX_BLUEFIELD2
|
, CS_MELLANOX_BLUEFIELD2
|
||||||
, CS_INTEL_1B81
|
, CS_INTEL_1B81
|
||||||
|
, CS_INTEL_18DC
|
||||||
|
, CS_INTEL_7A04
|
||||||
, CS_MAX_PCIE
|
, CS_MAX_PCIE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -943,6 +943,7 @@ NvBool NV_API_CALL rm_disable_iomap_wc(void);
|
|||||||
|
|
||||||
void NV_API_CALL rm_init_dynamic_power_management(nvidia_stack_t *, nv_state_t *, NvBool);
|
void NV_API_CALL rm_init_dynamic_power_management(nvidia_stack_t *, nv_state_t *, NvBool);
|
||||||
void NV_API_CALL rm_cleanup_dynamic_power_management(nvidia_stack_t *, nv_state_t *);
|
void NV_API_CALL rm_cleanup_dynamic_power_management(nvidia_stack_t *, nv_state_t *);
|
||||||
|
void NV_API_CALL rm_enable_dynamic_power_management(nvidia_stack_t *, nv_state_t *);
|
||||||
NV_STATUS NV_API_CALL rm_ref_dynamic_power(nvidia_stack_t *, nv_state_t *, nv_dynamic_power_mode_t);
|
NV_STATUS NV_API_CALL rm_ref_dynamic_power(nvidia_stack_t *, nv_state_t *, nv_dynamic_power_mode_t);
|
||||||
void NV_API_CALL rm_unref_dynamic_power(nvidia_stack_t *, nv_state_t *, nv_dynamic_power_mode_t);
|
void NV_API_CALL rm_unref_dynamic_power(nvidia_stack_t *, nv_state_t *, nv_dynamic_power_mode_t);
|
||||||
NV_STATUS NV_API_CALL rm_transition_dynamic_power(nvidia_stack_t *, nv_state_t *, NvBool);
|
NV_STATUS NV_API_CALL rm_transition_dynamic_power(nvidia_stack_t *, nv_state_t *, NvBool);
|
||||||
|
@ -50,6 +50,13 @@ void NV_API_CALL rm_cleanup_dynamic_power_management(
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NV_API_CALL rm_enable_dynamic_power_management(
|
||||||
|
nvidia_stack_t *sp,
|
||||||
|
nv_state_t *nv
|
||||||
|
)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
NV_STATUS NV_API_CALL rm_ref_dynamic_power(
|
NV_STATUS NV_API_CALL rm_ref_dynamic_power(
|
||||||
nvidia_stack_t *sp,
|
nvidia_stack_t *sp,
|
||||||
nv_state_t *nv,
|
nv_state_t *nv,
|
||||||
|
@ -178,6 +178,7 @@
|
|||||||
--undefined=rm_schedule_gpu_wakeup
|
--undefined=rm_schedule_gpu_wakeup
|
||||||
--undefined=rm_init_dynamic_power_management
|
--undefined=rm_init_dynamic_power_management
|
||||||
--undefined=rm_cleanup_dynamic_power_management
|
--undefined=rm_cleanup_dynamic_power_management
|
||||||
|
--undefined=rm_enable_dynamic_power_management
|
||||||
--undefined=rm_ref_dynamic_power
|
--undefined=rm_ref_dynamic_power
|
||||||
--undefined=rm_unref_dynamic_power
|
--undefined=rm_unref_dynamic_power
|
||||||
--undefined=rm_transition_dynamic_power
|
--undefined=rm_transition_dynamic_power
|
||||||
|
@ -868,6 +868,8 @@ static const CHIPS_RELEASED sChipsReleased[] = {
|
|||||||
{ 0x2233, 0x165a, 0x10de, "NVIDIA RTX A5500" },
|
{ 0x2233, 0x165a, 0x10de, "NVIDIA RTX A5500" },
|
||||||
{ 0x2233, 0x165a, 0x17aa, "NVIDIA RTX A5500" },
|
{ 0x2233, 0x165a, 0x17aa, "NVIDIA RTX A5500" },
|
||||||
{ 0x2235, 0x145a, 0x10de, "NVIDIA A40" },
|
{ 0x2235, 0x145a, 0x10de, "NVIDIA A40" },
|
||||||
|
{ 0x2236, 0x1482, 0x10de, "NVIDIA A10" },
|
||||||
|
{ 0x2237, 0x152f, 0x10de, "NVIDIA A10G" },
|
||||||
{ 0x2238, 0x1677, 0x10de, "NVIDIA A10M" },
|
{ 0x2238, 0x1677, 0x10de, "NVIDIA A10M" },
|
||||||
{ 0x2414, 0x0000, 0x0000, "NVIDIA GeForce RTX 3060 Ti" },
|
{ 0x2414, 0x0000, 0x0000, "NVIDIA GeForce RTX 3060 Ti" },
|
||||||
{ 0x2420, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080 Ti Laptop GPU" },
|
{ 0x2420, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080 Ti Laptop GPU" },
|
||||||
|
@ -491,6 +491,7 @@ struct RS_CPU_UNMAP_PARAMS
|
|||||||
NvP64 pLinearAddress; ///< [in] Address of mapped memory
|
NvP64 pLinearAddress; ///< [in] Address of mapped memory
|
||||||
NvU32 flags; ///< [in] Resource-specific flags
|
NvU32 flags; ///< [in] Resource-specific flags
|
||||||
NvU32 processId;
|
NvU32 processId;
|
||||||
|
NvBool bTeardown; ///< [in] Unmap operation is due to client teardown
|
||||||
|
|
||||||
/// [in] hContext Handle of resource that provides a context for the mapping (e.g., subdevice for channel map)
|
/// [in] hContext Handle of resource that provides a context for the mapping (e.g., subdevice for channel map)
|
||||||
NvHandle hContext;
|
NvHandle hContext;
|
||||||
|
@ -465,6 +465,7 @@ struct RS_CPU_UNMAP_PARAMS
|
|||||||
NvP64 pLinearAddress; ///< [in] Address of mapped memory
|
NvP64 pLinearAddress; ///< [in] Address of mapped memory
|
||||||
NvU32 flags; ///< [in] Resource-specific flags
|
NvU32 flags; ///< [in] Resource-specific flags
|
||||||
NvU32 processId;
|
NvU32 processId;
|
||||||
|
NvBool bTeardown; ///< [in] Unmap operation is due to client teardown
|
||||||
|
|
||||||
/// [in] hContext Handle of resource that provides a context for the mapping (e.g., subdevice for channel map)
|
/// [in] hContext Handle of resource that provides a context for the mapping (e.g., subdevice for channel map)
|
||||||
NvHandle hContext;
|
NvHandle hContext;
|
||||||
|
@ -56,6 +56,8 @@ dispsfConstruct_IMPL
|
|||||||
return NV_ERR_INSUFFICIENT_PERMISSIONS;
|
return NV_ERR_INSUFFICIENT_PERMISSIONS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NV_CHECK_OR_RETURN(LEVEL_ERROR, pKernelDisplay != NULL, NV_ERR_NOT_SUPPORTED);
|
||||||
|
|
||||||
// Set sf user RegBase offset
|
// Set sf user RegBase offset
|
||||||
kdispGetDisplaySfUserBaseAndSize_HAL(pGpu, pKernelDisplay,
|
kdispGetDisplaySfUserBaseAndSize_HAL(pGpu, pKernelDisplay,
|
||||||
&pDispSfUser->ControlOffset,
|
&pDispSfUser->ControlOffset,
|
||||||
|
@ -3713,6 +3713,7 @@ gvaspaceWalkUserCtxRelease_IMPL
|
|||||||
{
|
{
|
||||||
// If current context doesn't match, must have nested acquires (not allowed).
|
// If current context doesn't match, must have nested acquires (not allowed).
|
||||||
NV_ASSERT_OR_RETURN_VOID(pUserCtx->pGpuState);
|
NV_ASSERT_OR_RETURN_VOID(pUserCtx->pGpuState);
|
||||||
|
NV_ASSERT_OR_RETURN_VOID(pUserCtx->pGpuState->pWalk);
|
||||||
NV_ASSERT(pUserCtx == mmuWalkGetUserCtx(pUserCtx->pGpuState->pWalk));
|
NV_ASSERT(pUserCtx == mmuWalkGetUserCtx(pUserCtx->pGpuState->pWalk));
|
||||||
mmuWalkSetUserCtx(pUserCtx->pGpuState->pWalk, NULL);
|
mmuWalkSetUserCtx(pUserCtx->pGpuState->pWalk, NULL);
|
||||||
}
|
}
|
||||||
|
@ -880,6 +880,18 @@ Intel_7A82_setupFunc
|
|||||||
return NV_OK;
|
return NV_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Intel Z790 platform (Raptor Lake)
|
||||||
|
static NV_STATUS
|
||||||
|
Intel_7A04_setupFunc
|
||||||
|
(
|
||||||
|
OBJCL *pCl
|
||||||
|
)
|
||||||
|
{
|
||||||
|
pCl->setProperty(pCl, PDB_PROP_CL_HAS_RESIZABLE_BAR_ISSUE, NV_TRUE);
|
||||||
|
|
||||||
|
return NV_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static NV_STATUS
|
static NV_STATUS
|
||||||
Nvidia_T210_setupFunc
|
Nvidia_T210_setupFunc
|
||||||
(
|
(
|
||||||
|
@ -974,11 +974,24 @@ serverUnmap_Prologue
|
|||||||
{
|
{
|
||||||
rmStatus = osAttachToProcess(&pProcessHandle, ProcessId);
|
rmStatus = osAttachToProcess(&pProcessHandle, ProcessId);
|
||||||
if (rmStatus != NV_OK)
|
if (rmStatus != NV_OK)
|
||||||
return rmStatus;
|
{
|
||||||
|
if (pUnmapParams->bTeardown)
|
||||||
|
pProcessHandle = NULL;
|
||||||
|
else
|
||||||
|
return rmStatus;
|
||||||
|
}
|
||||||
|
|
||||||
pUnmapParams->pProcessHandle = pProcessHandle;
|
pUnmapParams->pProcessHandle = pProcessHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't do any filtering if this is a tear-down path
|
||||||
|
if (pUnmapParams->bTeardown)
|
||||||
|
{
|
||||||
|
pUnmapParams->fnFilter = NULL;
|
||||||
|
return NV_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
pUnmapParams->fnFilter = bKernel
|
pUnmapParams->fnFilter = bKernel
|
||||||
? serverutilMappingFilterKernel
|
? serverutilMappingFilterKernel
|
||||||
: serverutilMappingFilterCurrentUserProc;
|
: serverutilMappingFilterCurrentUserProc;
|
||||||
|
@ -205,7 +205,10 @@ mmuWalkLevelInstancesForceFree
|
|||||||
MMU_WALK *pWalk
|
MMU_WALK *pWalk
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
_mmuWalkLevelInstancesForceFree(pWalk, &pWalk->root);
|
if (pWalk != NULL)
|
||||||
|
{
|
||||||
|
_mmuWalkLevelInstancesForceFree(pWalk, &pWalk->root);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------Private Functions--------------------------------*/
|
/*----------------------------Private Functions--------------------------------*/
|
||||||
|
@ -110,6 +110,8 @@ mmuWalkReleaseEntries
|
|||||||
MMU_WALK_OP_PARAMS opParams = {0};
|
MMU_WALK_OP_PARAMS opParams = {0};
|
||||||
NV_STATUS status = NV_OK;
|
NV_STATUS status = NV_OK;
|
||||||
|
|
||||||
|
NV_ASSERT_OR_RETURN(NULL != pWalk, NV_ERR_INVALID_ARGUMENT);
|
||||||
|
|
||||||
NV_ASSERT_OR_RETURN(NULL != mmuWalkFindLevel(pWalk, pLevelFmt),
|
NV_ASSERT_OR_RETURN(NULL != mmuWalkFindLevel(pWalk, pLevelFmt),
|
||||||
NV_ERR_INVALID_ARGUMENT);
|
NV_ERR_INVALID_ARGUMENT);
|
||||||
NV_ASSERT_OR_RETURN(NV_IS_ALIGNED(vaLo, mmuFmtLevelPageSize(pLevelFmt)),
|
NV_ASSERT_OR_RETURN(NV_IS_ALIGNED(vaLo, mmuFmtLevelPageSize(pLevelFmt)),
|
||||||
|
@ -1085,6 +1085,7 @@ _clientUnmapResourceRefMappings
|
|||||||
params.hMemory = pResourceRef->hResource;
|
params.hMemory = pResourceRef->hResource;
|
||||||
params.pLinearAddress = pCpuMapping->pLinearAddress;
|
params.pLinearAddress = pCpuMapping->pLinearAddress;
|
||||||
params.processId = pCpuMapping->processId;
|
params.processId = pCpuMapping->processId;
|
||||||
|
params.bTeardown = NV_TRUE;
|
||||||
params.flags = pCpuMapping->flags;
|
params.flags = pCpuMapping->flags;
|
||||||
params.pSecInfo = &pCallContext->secInfo;
|
params.pSecInfo = &pCallContext->secInfo;
|
||||||
params.pLockInfo = &lockInfo;
|
params.pLockInfo = &lockInfo;
|
||||||
@ -1147,6 +1148,7 @@ _clientUnmapBackRefMappings
|
|||||||
params.hMemory = pBackRef->hResource;
|
params.hMemory = pBackRef->hResource;
|
||||||
params.pLinearAddress = pCpuMapping->pLinearAddress;
|
params.pLinearAddress = pCpuMapping->pLinearAddress;
|
||||||
params.processId = pCpuMapping->processId;
|
params.processId = pCpuMapping->processId;
|
||||||
|
params.bTeardown = NV_TRUE;
|
||||||
params.flags = pCpuMapping->flags;
|
params.flags = pCpuMapping->flags;
|
||||||
params.pSecInfo = &pCallContext->secInfo;
|
params.pSecInfo = &pCallContext->secInfo;
|
||||||
params.pLockInfo = &lockInfo;
|
params.pLockInfo = &lockInfo;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
NVIDIA_VERSION = 515.57
|
NVIDIA_VERSION = 515.65.01
|
||||||
|
|
||||||
# This file.
|
# This file.
|
||||||
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
|
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user