nvidia: update
This commit is contained in:
parent
e042dc1db4
commit
0a4b669668
2 changed files with 195 additions and 24 deletions
181
nvidia/4.15-FS57305.patch
Normal file
181
nvidia/4.15-FS57305.patch
Normal file
|
@ -0,0 +1,181 @@
|
|||
diff --git a/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/conftest.sh b/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/conftest.sh
|
||||
index 292d7da..5f254e1 100755
|
||||
--- a/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/conftest.sh
|
||||
+++ b/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/conftest.sh
|
||||
@@ -2123,6 +2123,7 @@ compile_test() {
|
||||
#endif
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
+ #include <linux/version.h>
|
||||
#if !defined(CONFIG_DRM) && !defined(CONFIG_DRM_MODULE)
|
||||
#error DRM not enabled
|
||||
#endif
|
||||
@@ -2146,8 +2147,12 @@ compile_test() {
|
||||
/* 2014-12-18 88a48e297b3a3bac6022c03babfb038f1a886cea */
|
||||
i = DRIVER_ATOMIC;
|
||||
|
||||
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
/* 2015-04-10 df63b9994eaf942afcdb946d27a28661d7dfbf2a */
|
||||
for_each_crtc_in_state(s, c, cs, i) { }
|
||||
+ #else
|
||||
+ for_each_new_crtc_in_state(s, c, cs, i) {}
|
||||
+ #endif
|
||||
|
||||
/* 2015-05-18 036ef5733ba433760a3512bb5f7a155946e2df05 */
|
||||
a = offsetof(struct drm_mode_config_funcs, atomic_state_alloc);
|
||||
diff --git a/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-connector.c b/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-connector.c
|
||||
index cf16b6f..a66ae5a 100644
|
||||
--- a/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-connector.c
|
||||
+++ b/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-connector.c
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
+#include <linux/version.h>
|
||||
|
||||
static void nv_drm_connector_destroy(struct drm_connector *connector)
|
||||
{
|
||||
@@ -87,7 +88,11 @@ static enum drm_connector_status __nv_drm_connector_detect_internal(
|
||||
break;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
encoder = drm_encoder_find(dev, connector->encoder_ids[i]);
|
||||
+#else
|
||||
+ encoder = drm_encoder_find(dev, NULL, connector->encoder_ids[i]);
|
||||
+#endif
|
||||
|
||||
if (encoder == NULL) {
|
||||
BUG_ON(encoder != NULL);
|
||||
diff --git a/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-crtc.c b/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-crtc.c
|
||||
index b54128a..d820dc2 100644
|
||||
--- a/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-crtc.c
|
||||
+++ b/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-crtc.c
|
||||
@@ -37,6 +37,7 @@
|
||||
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
+#include <linux/version.h>
|
||||
|
||||
static const u32 nv_default_supported_plane_drm_formats[] = {
|
||||
DRM_FORMAT_ARGB1555,
|
||||
@@ -141,7 +142,11 @@ static int nv_drm_plane_atomic_check(struct drm_plane *plane,
|
||||
goto done;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
for_each_crtc_in_state(plane_state->state, crtc, crtc_state, i) {
|
||||
+#else
|
||||
+ for_each_new_crtc_in_state(plane_state->state, crtc, crtc_state, i) {
|
||||
+#endif
|
||||
struct nv_drm_crtc_state *nv_crtc_state = to_nv_crtc_state(crtc_state);
|
||||
struct NvKmsKapiHeadRequestedConfig *head_req_config =
|
||||
&nv_crtc_state->req_config;
|
||||
@@ -365,7 +370,11 @@ static int nv_drm_crtc_atomic_check(struct drm_crtc *crtc,
|
||||
|
||||
req_config->flags.displaysChanged = NV_TRUE;
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
for_each_connector_in_state(crtc_state->state,
|
||||
+#else
|
||||
+ for_each_new_connector_in_state(crtc_state->state,
|
||||
+#endif
|
||||
connector, connector_state, j) {
|
||||
if (connector_state->crtc != crtc) {
|
||||
continue;
|
||||
@@ -613,7 +622,11 @@ int nv_drm_get_crtc_crc32_ioctl(struct drm_device *dev,
|
||||
goto done;
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
crtc = drm_crtc_find(dev, params->crtc_id);
|
||||
+#else
|
||||
+ crtc = drm_crtc_find(dev, NULL, params->crtc_id);
|
||||
+#endif
|
||||
if (!crtc) {
|
||||
ret = -ENOENT;
|
||||
goto done;
|
||||
diff --git a/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-modeset.c b/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-modeset.c
|
||||
index da15d89..91f64ea 100644
|
||||
--- a/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-modeset.c
|
||||
+++ b/NVIDIA-Linux-x86_64-390.25-no-compat32/kernel/nvidia-drm/nvidia-drm-modeset.c
|
||||
@@ -33,6 +33,7 @@
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
+#include <linux/version.h>
|
||||
|
||||
struct nv_drm_atomic_state {
|
||||
struct NvKmsKapiRequestedModeSetConfig config;
|
||||
@@ -110,7 +111,11 @@ nv_drm_atomic_apply_modeset_config(struct drm_device *dev,
|
||||
memset(requested_config, 0, sizeof(*requested_config));
|
||||
|
||||
/* Loop over affected crtcs and construct NvKmsKapiRequestedModeSetConfig */
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#else
|
||||
+ for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#endif
|
||||
/*
|
||||
* When commiting a state, the new state is already stored in
|
||||
* crtc->state. When checking a proposed state, the proposed state is
|
||||
@@ -178,7 +183,11 @@ void nv_drm_atomic_helper_commit_tail(struct drm_atomic_state *state)
|
||||
nv_drm_write_combine_flush();
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#else
|
||||
+ for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#endif
|
||||
struct nv_drm_crtc *nv_crtc = to_nv_crtc(crtc);
|
||||
struct nv_drm_crtc_state *nv_crtc_state = to_nv_crtc_state(crtc->state);
|
||||
struct nv_drm_flip *nv_flip = nv_crtc_state->nv_flip;
|
||||
@@ -282,7 +291,11 @@ static void nv_drm_atomic_commit_task_callback(struct work_struct *work)
|
||||
ret);
|
||||
}
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#else
|
||||
+ for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#endif
|
||||
struct nv_drm_crtc *nv_crtc = to_nv_crtc(crtc);
|
||||
|
||||
if (wait_event_timeout(
|
||||
@@ -351,7 +364,11 @@ static int nv_drm_atomic_commit_internal(
|
||||
* condition between two/more nvKms->applyModeSetConfig() on single
|
||||
* crtc and generate flip events in correct order.
|
||||
*/
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#else
|
||||
+ for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#endif
|
||||
struct nv_drm_device *nv_dev = to_nv_device(dev);
|
||||
struct nv_drm_crtc *nv_crtc = to_nv_crtc(crtc);
|
||||
|
||||
@@ -372,7 +389,11 @@ static int nv_drm_atomic_commit_internal(
|
||||
}
|
||||
}
|
||||
} else {
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#else
|
||||
+ for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#endif
|
||||
struct nv_drm_crtc *nv_crtc = to_nv_crtc(crtc);
|
||||
|
||||
if (atomic_read(&nv_crtc->has_pending_commit) ||
|
||||
@@ -388,7 +409,11 @@ static int nv_drm_atomic_commit_internal(
|
||||
* flip events.
|
||||
*/
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#else
|
||||
+ for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
+#endif
|
||||
struct nv_drm_crtc *nv_crtc = to_nv_crtc(crtc);
|
||||
|
||||
atomic_set(&nv_crtc->has_pending_commit, true);
|
|
@ -4,18 +4,20 @@
|
|||
# Contributor: Thomas Baechler <thomas@archlinux.org>
|
||||
|
||||
pkgbase=nvidia
|
||||
pkgname=(nvidia nvidia-dkms)
|
||||
pkgname=nvidia
|
||||
pkgver=390.25
|
||||
_extramodules=extramodules-4.16-ARCH
|
||||
pkgrel=99
|
||||
pkgdesc="NVIDIA drivers for linux"
|
||||
arch=('x86_64')
|
||||
url="http://www.nvidia.com/"
|
||||
makedepends=('nvidia-libgl' "nvidia-utils=${pkgver}" 'linux' 'linux-headers>4.15' 'linux-headers<4.17')
|
||||
makedepends=('nvidia-libgl' "nvidia-utils=${pkgver}" 'linux' 'linux-headers>=4.15' 'linux-headers<4.17')
|
||||
license=('custom')
|
||||
options=('!strip')
|
||||
source=("http://us.download.nvidia.com/XFree86/Linux-x86_64/${pkgver}/NVIDIA-Linux-x86_64-${pkgver}-no-compat32.run")
|
||||
sha256sums=('02263bc81b66e68fc8224447b249f4f0ca4ae201c467e236d917be2fe187f3d6')
|
||||
source=("http://us.download.nvidia.com/XFree86/Linux-x86_64/${pkgver}/NVIDIA-Linux-x86_64-${pkgver}-no-compat32.run"
|
||||
4.15-FS57305.patch)
|
||||
sha256sums=('02263bc81b66e68fc8224447b249f4f0ca4ae201c467e236d917be2fe187f3d6'
|
||||
'145d436f117455a1a8315b31dc2c9fce3c90c135d8c530b8b8da0e70548f48d9')
|
||||
|
||||
_pkg="NVIDIA-Linux-x86_64-${pkgver}-no-compat32"
|
||||
|
||||
|
@ -23,6 +25,8 @@ prepare() {
|
|||
sh "${_pkg}.run" --extract-only
|
||||
cd "${_pkg}"
|
||||
|
||||
patch -Np2 -i "${srcdir}"/4.15-FS57305.patch
|
||||
|
||||
# Change to GPL license
|
||||
find . -name '*.c' -type f -print0 | xargs -0 sed -i -E 's/MODULE_LICENSE\("(.*)"\)/MODULE_LICENSE\("GPL"\)/g'
|
||||
|
||||
|
@ -52,33 +56,19 @@ build() {
|
|||
|
||||
package_nvidia() {
|
||||
pkgdesc="NVIDIA drivers for linux"
|
||||
depends=('linux>4.15' 'linux<4.17' "nvidia-utils=${pkgver}" 'libgl')
|
||||
depends=('linux>=4.15' 'linux<4.17' "nvidia-utils=${pkgver}" 'libgl')
|
||||
|
||||
install -Dt "${pkgdir}/usr/lib/modules/${_extramodules}" -m644 \
|
||||
"${srcdir}/${_pkg}/kernel"/nvidia{,-modeset,-drm,-uvm}.ko
|
||||
|
||||
find "${pkgdir}" -name '*.ko' -exec gzip -n {} +
|
||||
|
||||
echo "blacklist nouveau" |
|
||||
install -Dm644 /dev/stdin "${pkgdir}/usr/lib/modprobe.d/${pkgname}.conf"
|
||||
install -Dm644 /dev/stdin "${pkgdir}/usr/lib/modprobe.d/${pkgname}.conf" <<END
|
||||
blacklist nouveau
|
||||
blacklist nvidiafb
|
||||
blacklist rivafb
|
||||
END
|
||||
|
||||
install -Dt "${pkgdir}/usr/share/licenses/${pkgname}" -m644 "${srcdir}/${_pkg}/LICENSE"
|
||||
}
|
||||
|
||||
package_nvidia-dkms() {
|
||||
pkgdesc="NVIDIA driver sources for linux"
|
||||
depends=('dkms' "nvidia-utils=$pkgver" 'libgl')
|
||||
optdepends=('linux-headers: Build the module for Arch kernel'
|
||||
'linux-lts-headers: Build the module for LTS Arch kernel')
|
||||
conflicts+=('nvidia')
|
||||
|
||||
cd ${_pkg}
|
||||
|
||||
install -dm 755 "${pkgdir}"/usr/src
|
||||
cp -dr --no-preserve='ownership' kernel-dkms "${pkgdir}/usr/src/nvidia-${pkgver}"
|
||||
|
||||
echo "blacklist nouveau" |
|
||||
install -Dm644 /dev/stdin "${pkgdir}/usr/lib/modprobe.d/nvidia.conf"
|
||||
|
||||
install -Dt "${pkgdir}/usr/share/licenses/${pkgname}" -m644 "${srcdir}/${_pkg}/LICENSE"
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue