580.65.06

This commit is contained in:
Maneet Singh
2025-08-04 11:15:02 -07:00
parent d890313300
commit 307159f262
1315 changed files with 477791 additions and 279973 deletions

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 1999-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 1999-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a
@@ -61,16 +61,11 @@ static NV_STATUS nv_dma_map_contig(
NvU64 *va
)
{
#if defined(NV_DMA_MAP_PAGE_ATTRS_PRESENT) && defined(NV_DMA_ATTR_SKIP_CPU_SYNC_PRESENT)
*va = dma_map_page_attrs(dma_map->dev, dma_map->pages[0], 0,
dma_map->page_count * PAGE_SIZE,
DMA_BIDIRECTIONAL,
(dma_map->cache_type == NV_MEMORY_UNCACHED) ?
DMA_ATTR_SKIP_CPU_SYNC : 0);
#else
*va = dma_map_page(dma_map->dev, dma_map->pages[0], 0,
dma_map->page_count * PAGE_SIZE, DMA_BIDIRECTIONAL);
#endif
if (dma_mapping_error(dma_map->dev, *va))
{
return NV_ERR_OPERATING_SYSTEM;
@@ -95,16 +90,11 @@ static NV_STATUS nv_dma_map_contig(
static void nv_dma_unmap_contig(nv_dma_map_t *dma_map)
{
#if defined(NV_DMA_MAP_PAGE_ATTRS_PRESENT) && defined(NV_DMA_ATTR_SKIP_CPU_SYNC_PRESENT)
dma_unmap_page_attrs(dma_map->dev, dma_map->mapping.contig.dma_addr,
dma_map->page_count * PAGE_SIZE,
DMA_BIDIRECTIONAL,
(dma_map->cache_type == NV_MEMORY_UNCACHED) ?
DMA_ATTR_SKIP_CPU_SYNC : 0);
#else
dma_unmap_page(dma_map->dev, dma_map->mapping.contig.dma_addr,
dma_map->page_count * PAGE_SIZE, DMA_BIDIRECTIONAL);
#endif
}
static void nv_fill_scatterlist
@@ -386,7 +376,7 @@ NV_STATUS NV_API_CALL nv_dma_map_sgt(
return NV_ERR_NOT_SUPPORTED;
}
if (page_count > NV_NUM_PHYSPAGES)
if (page_count > get_num_physpages())
{
NV_DMA_DEV_PRINTF(NV_DBG_ERRORS, dma_dev,
"DMA mapping request too large!\n");
@@ -467,7 +457,7 @@ static NV_STATUS NV_API_CALL nv_dma_map_pages(
return NV_ERR_NOT_SUPPORTED;
}
if (page_count > NV_NUM_PHYSPAGES)
if (page_count > get_num_physpages())
{
NV_DMA_DEV_PRINTF(NV_DBG_ERRORS, dma_dev,
"DMA mapping request too large!\n");
@@ -537,7 +527,7 @@ static NV_STATUS NV_API_CALL nv_dma_unmap_pages(
dma_map = *priv;
if (page_count > NV_NUM_PHYSPAGES)
if (page_count > get_num_physpages())
{
NV_DMA_DEV_PRINTF(NV_DBG_ERRORS, dma_dev,
"DMA unmapping request too large!\n");
@@ -708,16 +698,13 @@ static NvBool nv_dma_use_map_resource
nv_dma_device_t *dma_dev
)
{
#if defined(NV_DMA_MAP_RESOURCE_PRESENT)
const struct dma_map_ops *ops = get_dma_ops(dma_dev->dev);
#endif
if (nv_dma_remap_peer_mmio == NV_DMA_REMAP_PEER_MMIO_DISABLE)
{
return NV_FALSE;
}
#if defined(NV_DMA_MAP_RESOURCE_PRESENT)
if (ops == NULL)
{
/* On pre-5.0 kernels, if dma_map_resource() is present, then we
@@ -732,9 +719,32 @@ static NvBool nv_dma_use_map_resource
}
return (ops->map_resource != NULL);
#else
return NV_FALSE;
#endif
}
/* DMA-map a peer device's C2C aperture for peer access. */
NV_STATUS NV_API_CALL nv_dma_map_non_pci_peer
(
nv_dma_device_t *dma_dev,
NvU64 page_count,
NvU64 *va
)
{
NV_STATUS status;
if (nv_dma_use_map_resource(dma_dev))
{
status = nv_dma_map_mmio(dma_dev, page_count, va);
}
else
{
/*
* Best effort - can't map through the iommu but at least try to
* use SPA as is.
*/
status = NV_OK;
}
return status;
}
/* DMA-map a peer PCI device's BAR for peer access. */
@@ -817,7 +827,6 @@ NV_STATUS NV_API_CALL nv_dma_map_mmio
NvU64 *va
)
{
#if defined(NV_DMA_MAP_RESOURCE_PRESENT)
BUG_ON(!va);
if (nv_dma_use_map_resource(dma_dev))
@@ -844,9 +853,6 @@ NV_STATUS NV_API_CALL nv_dma_map_mmio
}
return NV_OK;
#else
return NV_ERR_NOT_SUPPORTED;
#endif
}
void NV_API_CALL nv_dma_unmap_mmio
@@ -856,13 +862,11 @@ void NV_API_CALL nv_dma_unmap_mmio
NvU64 va
)
{
#if defined(NV_DMA_MAP_RESOURCE_PRESENT)
if (nv_dma_use_map_resource(dma_dev))
{
dma_unmap_resource(dma_dev->dev, va, page_count * PAGE_SIZE,
DMA_BIDIRECTIONAL, 0);
}
#endif
}
/*
@@ -905,40 +909,16 @@ void NV_API_CALL nv_dma_cache_invalidate
#endif
}
#if defined(NV_LINUX_DMA_BUF_H_PRESENT) && \
defined(NV_DRM_AVAILABLE) && defined(NV_DRM_DRM_GEM_H_PRESENT)
/*
* drm_gem_object_{get/put}() added by commit
* e6b62714e87c8811d5564b6a0738dcde63a51774 (2017-02-28) and
* drm_gem_object_{reference/unreference}() removed by commit
* 3e70fd160cf0b1945225eaa08dd2cb8544f21cb8 (2018-11-15).
*/
#if defined(NV_DRM_AVAILABLE)
static inline void
nv_dma_gem_object_unreference_unlocked(struct drm_gem_object *gem)
nv_dma_gem_object_put_unlocked(struct drm_gem_object *gem)
{
#if defined(NV_DRM_GEM_OBJECT_GET_PRESENT)
#if defined(NV_DRM_GEM_OBJECT_PUT_UNLOCK_PRESENT)
drm_gem_object_put_unlocked(gem);
#else
drm_gem_object_put(gem);
#endif
#else
drm_gem_object_unreference_unlocked(gem);
#endif
}
static inline void
nv_dma_gem_object_reference(struct drm_gem_object *gem)
{
#if defined(NV_DRM_GEM_OBJECT_GET_PRESENT)
drm_gem_object_get(gem);
#else
drm_gem_object_reference(gem);
#endif
}
NV_STATUS NV_API_CALL nv_dma_import_sgt
@@ -967,7 +947,7 @@ NV_STATUS NV_API_CALL nv_dma_import_sgt
// Do nothing with SGT, it is already mapped and pinned by the exporter
nv_dma_gem_object_reference(gem);
drm_gem_object_get(gem);
return NV_OK;
}
@@ -986,7 +966,7 @@ void NV_API_CALL nv_dma_release_sgt
// Do nothing with SGT, it will be unmapped and unpinned by the exporter
WARN_ON(sgt == NULL);
nv_dma_gem_object_unreference_unlocked(gem);
nv_dma_gem_object_put_unlocked(gem);
module_put(gem->dev->driver->fops->owner);
}
@@ -1010,4 +990,4 @@ void NV_API_CALL nv_dma_release_sgt
)
{
}
#endif /* NV_LINUX_DMA_BUF_H_PRESENT && NV_DRM_AVAILABLE && NV_DRM_DRM_GEM_H_PRESENT */
#endif /* NV_DRM_AVAILABLE */