aboutsummaryrefslogtreecommitdiff
path: root/system/nvidia-legacy390-kernel
diff options
context:
space:
mode:
authorLenard Spencer <lenardrspencer@gmai.com>2022-06-04 06:29:12 +0100
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2022-06-11 08:58:59 +0700
commit788dd37b52c79388683ab5e671ade6ae90576159 (patch)
tree5f839cb5cd14a05ceb7701e678f5b85e2f088132 /system/nvidia-legacy390-kernel
parentc106cf00023b1e29306cf456b601d13b8480c454 (diff)
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>
Diffstat (limited to 'system/nvidia-legacy390-kernel')
-rw-r--r--system/nvidia-legacy390-kernel/README6
-rw-r--r--system/nvidia-legacy390-kernel/nvidia-legacy390-kernel-5.18.patch152
-rw-r--r--system/nvidia-legacy390-kernel/nvidia-legacy390-kernel.SlackBuild5
3 files changed, 159 insertions, 4 deletions
diff --git a/system/nvidia-legacy390-kernel/README b/system/nvidia-legacy390-kernel/README
index bf3939d5a477..9b9edc3be089 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 000000000000..70ebf15f2230
--- /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 0ff3f164a29e..9da89ce3e221 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