diff options
author | Lenard Spencer <lenardrspencer@gmai.com> | 2022-06-04 06:29:12 +0100 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2022-06-11 08:58:59 +0700 |
commit | 788dd37b52c79388683ab5e671ade6ae90576159 (patch) | |
tree | 5f839cb5cd14a05ceb7701e678f5b85e2f088132 | |
parent | c106cf00023b1e29306cf456b601d13b8480c454 (diff) | |
download | slackbuilds-788dd37b52c79388683ab5e671ade6ae90576159.tar.gz |
system/nvidia-legacy390-kernel: Patched for linux 5.18.
Signed-off-by: Dave Woodfall <dave@slackbuilds.org>
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
3 files changed, 159 insertions, 4 deletions
diff --git a/system/nvidia-legacy390-kernel/README b/system/nvidia-legacy390-kernel/README index bf3939d5a4..9b9edc3be0 100644 --- a/system/nvidia-legacy390-kernel/README +++ b/system/nvidia-legacy390-kernel/README @@ -16,6 +16,6 @@ The xf86-video-nouveau-blacklist package from /extra is required. The Nvidia 390.xx series will be supported through December 2022. -BIG FAT NOTE! If you are installing this on -current, please note -that while the Nvidia legacy390 kernel module has been updated for -the 5.17 kernel, it WILL NOT BUILD on 5.18. +NOTE FOR -CURRENT: The script now includes a patch for the 5.18 kernel +(BIG thanks to Archlinux for this one). It is NOT necessary to remove +it for earlier kernels. diff --git a/system/nvidia-legacy390-kernel/nvidia-legacy390-kernel-5.18.patch b/system/nvidia-legacy390-kernel/nvidia-legacy390-kernel-5.18.patch new file mode 100644 index 0000000000..70ebf15f22 --- /dev/null +++ b/system/nvidia-legacy390-kernel/nvidia-legacy390-kernel-5.18.patch @@ -0,0 +1,152 @@ +diff --git a/kernel/common/inc/nv.h b/kernel/common/inc/nv.h +index def0551..f7db7ed 100644 +--- a/kernel/common/inc/nv.h ++++ b/kernel/common/inc/nv.h +@@ -12,6 +12,11 @@ + #ifndef _NV_H_ + #define _NV_H_ + ++#include <linux/version.h> ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)) ++#include <pci-dma-compat.h> ++#endif ++ + #include <nvlimits.h> + #include <nvtypes.h> + #include <nvCpuUuid.h> +diff --git a/kernel/common/inc/pci-dma-compat.h b/kernel/common/inc/pci-dma-compat.h +new file mode 100644 +index 0000000..4e94d4e +--- /dev/null ++++ b/kernel/common/inc/pci-dma-compat.h +@@ -0,0 +1,130 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++/* include this file if the platform implements the dma_ DMA Mapping API ++ * and wants to provide the pci_ DMA Mapping API in terms of it */ ++ ++#ifndef _ASM_GENERIC_PCI_DMA_COMPAT_H ++#define _ASM_GENERIC_PCI_DMA_COMPAT_H ++ ++#include <linux/dma-mapping.h> ++#include <linux/pci.h> ++ ++/* This defines the direction arg to the DMA mapping routines. */ ++#define PCI_DMA_BIDIRECTIONAL DMA_BIDIRECTIONAL ++#define PCI_DMA_TODEVICE DMA_TO_DEVICE ++#define PCI_DMA_FROMDEVICE DMA_FROM_DEVICE ++#define PCI_DMA_NONE DMA_NONE ++ ++static inline void * ++pci_alloc_consistent(struct pci_dev *hwdev, size_t size, ++ dma_addr_t *dma_handle) ++{ ++ return dma_alloc_coherent(&hwdev->dev, size, dma_handle, GFP_ATOMIC); ++} ++ ++static inline void * ++pci_zalloc_consistent(struct pci_dev *hwdev, size_t size, ++ dma_addr_t *dma_handle) ++{ ++ return dma_alloc_coherent(&hwdev->dev, size, dma_handle, GFP_ATOMIC); ++} ++ ++static inline void ++pci_free_consistent(struct pci_dev *hwdev, size_t size, ++ void *vaddr, dma_addr_t dma_handle) ++{ ++ dma_free_coherent(&hwdev->dev, size, vaddr, dma_handle); ++} ++ ++static inline dma_addr_t ++pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction) ++{ ++ return dma_map_single(&hwdev->dev, ptr, size, (enum dma_data_direction)direction); ++} ++ ++static inline void ++pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, ++ size_t size, int direction) ++{ ++ dma_unmap_single(&hwdev->dev, dma_addr, size, (enum dma_data_direction)direction); ++} ++ ++static inline dma_addr_t ++pci_map_page(struct pci_dev *hwdev, struct page *page, ++ unsigned long offset, size_t size, int direction) ++{ ++ return dma_map_page(&hwdev->dev, page, offset, size, (enum dma_data_direction)direction); ++} ++ ++static inline void ++pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address, ++ size_t size, int direction) ++{ ++ dma_unmap_page(&hwdev->dev, dma_address, size, (enum dma_data_direction)direction); ++} ++ ++static inline int ++pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, ++ int nents, int direction) ++{ ++ return dma_map_sg(&hwdev->dev, sg, nents, (enum dma_data_direction)direction); ++} ++ ++static inline void ++pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, ++ int nents, int direction) ++{ ++ dma_unmap_sg(&hwdev->dev, sg, nents, (enum dma_data_direction)direction); ++} ++ ++static inline void ++pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle, ++ size_t size, int direction) ++{ ++ dma_sync_single_for_cpu(&hwdev->dev, dma_handle, size, (enum dma_data_direction)direction); ++} ++ ++static inline void ++pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle, ++ size_t size, int direction) ++{ ++ dma_sync_single_for_device(&hwdev->dev, dma_handle, size, (enum dma_data_direction)direction); ++} ++ ++static inline void ++pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sg, ++ int nelems, int direction) ++{ ++ dma_sync_sg_for_cpu(&hwdev->dev, sg, nelems, (enum dma_data_direction)direction); ++} ++ ++static inline void ++pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sg, ++ int nelems, int direction) ++{ ++ dma_sync_sg_for_device(&hwdev->dev, sg, nelems, (enum dma_data_direction)direction); ++} ++ ++static inline int ++pci_dma_mapping_error(struct pci_dev *pdev, dma_addr_t dma_addr) ++{ ++ return dma_mapping_error(&pdev->dev, dma_addr); ++} ++ ++#ifdef CONFIG_PCI ++static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) ++{ ++ return dma_set_mask(&dev->dev, mask); ++} ++ ++static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) ++{ ++ return dma_set_coherent_mask(&dev->dev, mask); ++} ++#else ++static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) ++{ return -EIO; } ++static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) ++{ return -EIO; } ++#endif ++ ++#endif diff --git a/system/nvidia-legacy390-kernel/nvidia-legacy390-kernel.SlackBuild b/system/nvidia-legacy390-kernel/nvidia-legacy390-kernel.SlackBuild index 0ff3f164a2..9da89ce3e2 100644 --- a/system/nvidia-legacy390-kernel/nvidia-legacy390-kernel.SlackBuild +++ b/system/nvidia-legacy390-kernel/nvidia-legacy390-kernel.SlackBuild @@ -29,7 +29,7 @@ cd $(dirname $0) ; CWD=$(pwd) PRGNAM=nvidia-legacy390-kernel VERSION=${VERSION:-390.151} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} @@ -83,6 +83,9 @@ find -L . \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; +# Patch for 5.18 kernel (Thanks to archlinux for this one) +patch -p1 < $CWD/nvidia-legacy390-kernel-5.18.patch + ( unset ARCH cd kernel || exit 1 |