From 1d3207b27b178ea88f413dd47b195445a14adc6a Mon Sep 17 00:00:00 2001 From: Daniel Fox Franke Date: Mon, 3 Aug 2015 00:14:36 -0400 Subject: [PATCH 1/4] ati-drivers: update to Catalyst 15.7 and fix build with recent kernels --- pkgs/os-specific/linux/ati-drivers/builder.sh | 5 +- .../os-specific/linux/ati-drivers/default.nix | 8 +-- .../fglrx_3.17rc6-no_hotplug.patch | 31 ---------- ...rx_3.18.19-no_hotplug_underscore_cr4.patch | 58 +++++++++++++++++++ 4 files changed, 66 insertions(+), 36 deletions(-) delete mode 100644 pkgs/os-specific/linux/ati-drivers/fglrx_3.17rc6-no_hotplug.patch create mode 100644 pkgs/os-specific/linux/ati-drivers/fglrx_3.18.19-no_hotplug_underscore_cr4.patch diff --git a/pkgs/os-specific/linux/ati-drivers/builder.sh b/pkgs/os-specific/linux/ati-drivers/builder.sh index 8df03910146..520f20e2ed6 100644 --- a/pkgs/os-specific/linux/ati-drivers/builder.sh +++ b/pkgs/os-specific/linux/ati-drivers/builder.sh @@ -7,8 +7,11 @@ set -x die(){ echo $@; exit 1; } # custom unpack: +mkdir fglrx +cd fglrx unzip $src -run_file=$(echo fglrx-*/amd-driver-installer-*) +cd .. +run_file=$(echo fglrx/amd-driver-installer-*) sh $run_file --extract . eval "$patchPhase" diff --git a/pkgs/os-specific/linux/ati-drivers/default.nix b/pkgs/os-specific/linux/ati-drivers/default.nix index 179166bbc79..e61237fcb7c 100644 --- a/pkgs/os-specific/linux/ati-drivers/default.nix +++ b/pkgs/os-specific/linux/ati-drivers/default.nix @@ -31,7 +31,7 @@ assert (!libsOnly) -> kernel != null; with stdenv.lib; stdenv.mkDerivation { - name = "ati-drivers-14.12" + (optionalString (!libsOnly) "-${kernel.version}"); + name = "ati-drivers-15.7" + (optionalString (!libsOnly) "-${kernel.version}"); builder = ./builder.sh; @@ -39,12 +39,12 @@ stdenv.mkDerivation { gcc = stdenv.cc.cc; src = fetchurl { - url = http://www2.ati.com/drivers/linux/amd-catalyst-omega-14.12-linux-run-installers.zip; - sha256 = "0jd2scrdlyapynxfjdrarnwcdzxjqrk5fg5i10g3bm0ay8v9hrk8"; + url = "http://www2.ati.com/drivers/linux/amd-driver-installer-15.20.1046-x86.x86_64.zip"; + sha256 = "ffde64203f49d9288eaa25f4d744187b6f4f14a87a444bab6a001d822b327a9d"; curlOpts = "--referer http://support.amd.com/en-us/download/desktop?os=Linux%20x86_64"; }; - patchPhase = "patch -p1 < ${./fglrx_3.17rc6-no_hotplug.patch}"; + patchPhase = "patch -p1 < ${./fglrx_3.18.19-no_hotplug_underscore_cr4.patch}"; patchPhaseSamples = "patch -p2 < ${./patch-samples.patch}"; buildInputs = diff --git a/pkgs/os-specific/linux/ati-drivers/fglrx_3.17rc6-no_hotplug.patch b/pkgs/os-specific/linux/ati-drivers/fglrx_3.17rc6-no_hotplug.patch deleted file mode 100644 index 7afd54a59c5..00000000000 --- a/pkgs/os-specific/linux/ati-drivers/fglrx_3.17rc6-no_hotplug.patch +++ /dev/null @@ -1,31 +0,0 @@ -source: https://aur.archlinux.org/packages/catalyst/ - -diff -uNr 14.9/common/lib/modules/fglrx/build_mod/firegl_public.c 14.9/common/lib/modules/fglrx/build_mod/firegl_public.c ---- 14.9/common/lib/modules/fglrx/build_mod/firegl_public.c 2014-09-09 16:10:17.000000000 +0200 -+++ 14.9/common/lib/modules/fglrx/build_mod/firegl_public.c 2014-09-26 19:01:44.000000000 +0200 -@@ -1093,6 +1093,9 @@ - // directly here to allow suspend/resume without X server start. - firegl_pci_save_state((KCL_PCI_DevHandle)pdev, privdev); - pci_disable_device(pdev); -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0) -+ pci_ignore_hotplug(pdev); -+#endif - PMSG_EVENT(pdev->dev.power.power_state) = state; - } - else -diff -uNr 14.9/common/lib/modules/fglrx/build_mod/kcl_acpi.c 14.9/common/lib/modules/fglrx/build_mod/kcl_acpi.c ---- 14.9/common/lib/modules/fglrx/build_mod/kcl_acpi.c 2014-09-09 16:10:17.000000000 +0200 -+++ 14.9/common/lib/modules/fglrx/build_mod/kcl_acpi.c 2014-09-26 18:57:27.000000000 +0200 -@@ -840,10 +840,12 @@ - if(tdev != NULL) - { - device = (acpi_device_adr(tdev) >> 16) & 0xffff; -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0) - if(PCI_SLOT(pdev->devfn) == device) - { - tdev->flags.no_hotplug = true; - } -+#endif - } - #endif - return 0; diff --git a/pkgs/os-specific/linux/ati-drivers/fglrx_3.18.19-no_hotplug_underscore_cr4.patch b/pkgs/os-specific/linux/ati-drivers/fglrx_3.18.19-no_hotplug_underscore_cr4.patch new file mode 100644 index 00000000000..0d6839a1012 --- /dev/null +++ b/pkgs/os-specific/linux/ati-drivers/fglrx_3.18.19-no_hotplug_underscore_cr4.patch @@ -0,0 +1,58 @@ +diff -Nru 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 15.7.new/common/lib/modules/fglrx/build_mod/firegl_public.c +--- 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 2015-07-04 10:31:23.000000000 -0400 ++++ 15.7.new/common/lib/modules/fglrx/build_mod/firegl_public.c 2015-08-02 19:47:04.123014897 -0400 +@@ -4498,8 +4498,8 @@ + + if (cpu_has_pge) + { +- cr4 = read_cr4(); +- write_cr4(cr4 & ~X86_CR4_PGE); ++ cr4 = __read_cr4(); ++ __write_cr4(cr4 & ~X86_CR4_PGE); + } + __flush_tlb(); + +@@ -4512,7 +4512,7 @@ + write_cr0(cr0 & 0xbfffffff); + if (cpu_has_pge) + { +- write_cr4(cr4); ++ __write_cr4(cr4); + } + local_irq_restore(flags); + +@@ -4539,8 +4539,8 @@ + + if (cpu_has_pge) + { +- cr4 = read_cr4(); +- write_cr4(cr4 & ~X86_CR4_PGE); ++ cr4 = __read_cr4(); ++ __write_cr4(cr4 & ~X86_CR4_PGE); + } + __flush_tlb(); + +@@ -4552,7 +4552,7 @@ + write_cr0(cr0 & 0xbfffffff); + if (cpu_has_pge) + { +- write_cr4(cr4); ++ __write_cr4(cr4); + } + local_irq_restore(flags); + +diff -Nru 15.7/common/lib/modules/fglrx/build_mod/kcl_acpi.c 15.7.new/common/lib/modules/fglrx/build_mod/kcl_acpi.c +--- 15.7/common/lib/modules/fglrx/build_mod/kcl_acpi.c 2015-07-04 10:31:23.000000000 -0400 ++++ 15.7.new/common/lib/modules/fglrx/build_mod/kcl_acpi.c 2015-08-02 19:59:54.797911610 -0400 +@@ -861,7 +861,10 @@ + #elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0) + if(pdev) + { +- pci_ignore_hotplug(pdev); ++ struct pci_dev *bridge = pdev->bus->self; ++ ++ pdev->ignore_hotplug = 1; ++ if(bridge) bridge->ignore_hotplug = 1; + } + #endif + } From 6f2db8fe4423be2a117822016603fdaf1e2a547d Mon Sep 17 00:00:00 2001 From: Daniel Fox Franke Date: Mon, 3 Aug 2015 00:36:30 -0400 Subject: [PATCH 2/4] ati-drivers: Fixes for kernel 4.1. * IRQF_DISABLED was already a no-op in recent kernels, has now been removed. * strnicmp is renamed to strncasecmp. --- ...rx_3.18.19-no_hotplug_underscore_cr4.patch | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/pkgs/os-specific/linux/ati-drivers/fglrx_3.18.19-no_hotplug_underscore_cr4.patch b/pkgs/os-specific/linux/ati-drivers/fglrx_3.18.19-no_hotplug_underscore_cr4.patch index 0d6839a1012..de1984c4c49 100644 --- a/pkgs/os-specific/linux/ati-drivers/fglrx_3.18.19-no_hotplug_underscore_cr4.patch +++ b/pkgs/os-specific/linux/ati-drivers/fglrx_3.18.19-no_hotplug_underscore_cr4.patch @@ -1,7 +1,21 @@ diff -Nru 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 15.7.new/common/lib/modules/fglrx/build_mod/firegl_public.c --- 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 2015-07-04 10:31:23.000000000 -0400 -+++ 15.7.new/common/lib/modules/fglrx/build_mod/firegl_public.c 2015-08-02 19:47:04.123014897 -0400 -@@ -4498,8 +4498,8 @@ ++++ 15.7.new/common/lib/modules/fglrx/build_mod/firegl_public.c 2015-08-03 00:30:34.927839497 -0400 +@@ -3495,10 +3495,12 @@ + KCL_PUB_InterruptHandlerWrap, + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) + ((useMSI) ? (SA_INTERRUPT) : (SA_SHIRQ)), +-#else ++#elif LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) + //when MSI enabled. keep irq disabled when calling the action handler, + //exclude this IRQ from irq balancing (only on one CPU) + ((useMSI) ? (IRQF_DISABLED) : (IRQF_SHARED)), ++#else ++ ((useMSI) ? 0 : IRQF_SHARED), + #endif + dev_name, + context); +@@ -4498,8 +4500,8 @@ if (cpu_has_pge) { @@ -12,7 +26,7 @@ diff -Nru 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 15.7.new/commo } __flush_tlb(); -@@ -4512,7 +4512,7 @@ +@@ -4512,7 +4514,7 @@ write_cr0(cr0 & 0xbfffffff); if (cpu_has_pge) { @@ -21,7 +35,7 @@ diff -Nru 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 15.7.new/commo } local_irq_restore(flags); -@@ -4539,8 +4539,8 @@ +@@ -4539,8 +4541,8 @@ if (cpu_has_pge) { @@ -32,7 +46,7 @@ diff -Nru 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 15.7.new/commo } __flush_tlb(); -@@ -4552,7 +4552,7 @@ +@@ -4552,7 +4554,7 @@ write_cr0(cr0 & 0xbfffffff); if (cpu_has_pge) { @@ -56,3 +70,15 @@ diff -Nru 15.7/common/lib/modules/fglrx/build_mod/kcl_acpi.c 15.7.new/common/lib } #endif } +diff -Nru 15.7/common/lib/modules/fglrx/build_mod/kcl_str.c 15.7.new/common/lib/modules/fglrx/build_mod/kcl_str.c +--- 15.7/common/lib/modules/fglrx/build_mod/kcl_str.c 2015-07-04 10:31:23.000000000 -0400 ++++ 15.7.new/common/lib/modules/fglrx/build_mod/kcl_str.c 2015-08-03 00:35:25.938410435 -0400 +@@ -169,7 +169,7 @@ + const char* s2, + KCL_TYPE_SizeSigned count) + { +- return strnicmp(s1, s2, count); ++ return strncasecmp(s1, s2, count); + } + + /** \brief Locate character in string From 17fb7ac352530c84f1d4b2d3e112c4c01d0db9f7 Mon Sep 17 00:00:00 2001 From: Daniel Fox Franke Date: Mon, 3 Aug 2015 00:46:29 -0400 Subject: [PATCH 3/4] ati-drivers: give the patch file a more sensible name It makes several API fixes for several kernel versions so stop trying to enumerate them all in the filename. --- pkgs/os-specific/linux/ati-drivers/default.nix | 2 +- ...9-no_hotplug_underscore_cr4.patch => kernel-api-fixes.patch} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename pkgs/os-specific/linux/ati-drivers/{fglrx_3.18.19-no_hotplug_underscore_cr4.patch => kernel-api-fixes.patch} (100%) diff --git a/pkgs/os-specific/linux/ati-drivers/default.nix b/pkgs/os-specific/linux/ati-drivers/default.nix index e61237fcb7c..834e798e8d1 100644 --- a/pkgs/os-specific/linux/ati-drivers/default.nix +++ b/pkgs/os-specific/linux/ati-drivers/default.nix @@ -44,7 +44,7 @@ stdenv.mkDerivation { curlOpts = "--referer http://support.amd.com/en-us/download/desktop?os=Linux%20x86_64"; }; - patchPhase = "patch -p1 < ${./fglrx_3.18.19-no_hotplug_underscore_cr4.patch}"; + patchPhase = "patch -p1 < ${./kernel-api-fixes.patch}"; patchPhaseSamples = "patch -p2 < ${./patch-samples.patch}"; buildInputs = diff --git a/pkgs/os-specific/linux/ati-drivers/fglrx_3.18.19-no_hotplug_underscore_cr4.patch b/pkgs/os-specific/linux/ati-drivers/kernel-api-fixes.patch similarity index 100% rename from pkgs/os-specific/linux/ati-drivers/fglrx_3.18.19-no_hotplug_underscore_cr4.patch rename to pkgs/os-specific/linux/ati-drivers/kernel-api-fixes.patch From d7443ffb892be6c61eb71a20ae19e2da23f29dc8 Mon Sep 17 00:00:00 2001 From: Daniel Fox Franke Date: Mon, 3 Aug 2015 21:42:08 -0400 Subject: [PATCH 4/4] Only use underscored versions of read_cr4 and write_cr4 in 3.18 and above. I'm not sure precisely in what micro-version the API change was made, so the check for 3.18.0 and above may not be quite correct. But it's at least sufficient for every version currently included in NixOS. --- .../linux/ati-drivers/kernel-api-fixes.patch | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/pkgs/os-specific/linux/ati-drivers/kernel-api-fixes.patch b/pkgs/os-specific/linux/ati-drivers/kernel-api-fixes.patch index de1984c4c49..f763518b249 100644 --- a/pkgs/os-specific/linux/ati-drivers/kernel-api-fixes.patch +++ b/pkgs/os-specific/linux/ati-drivers/kernel-api-fixes.patch @@ -1,7 +1,22 @@ diff -Nru 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 15.7.new/common/lib/modules/fglrx/build_mod/firegl_public.c --- 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 2015-07-04 10:31:23.000000000 -0400 -+++ 15.7.new/common/lib/modules/fglrx/build_mod/firegl_public.c 2015-08-03 00:30:34.927839497 -0400 -@@ -3495,10 +3495,12 @@ ++++ 15.7.new/common/lib/modules/fglrx/build_mod/firegl_public.c 2015-08-03 21:21:13.893211082 -0400 +@@ -242,6 +242,14 @@ + #endif + + // ============================================================ ++ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,18,0) ++#define __read_cr4 read_cr4 ++#define __write_cr4 write_cr4 ++#endif ++ ++// ============================================================ ++ + /* globals */ + + char* firegl = NULL; +@@ -3495,10 +3503,12 @@ KCL_PUB_InterruptHandlerWrap, #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) ((useMSI) ? (SA_INTERRUPT) : (SA_SHIRQ)), @@ -15,7 +30,7 @@ diff -Nru 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 15.7.new/commo #endif dev_name, context); -@@ -4498,8 +4500,8 @@ +@@ -4498,8 +4508,8 @@ if (cpu_has_pge) { @@ -26,7 +41,7 @@ diff -Nru 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 15.7.new/commo } __flush_tlb(); -@@ -4512,7 +4514,7 @@ +@@ -4512,7 +4522,7 @@ write_cr0(cr0 & 0xbfffffff); if (cpu_has_pge) { @@ -35,7 +50,7 @@ diff -Nru 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 15.7.new/commo } local_irq_restore(flags); -@@ -4539,8 +4541,8 @@ +@@ -4539,8 +4549,8 @@ if (cpu_has_pge) { @@ -46,7 +61,7 @@ diff -Nru 15.7/common/lib/modules/fglrx/build_mod/firegl_public.c 15.7.new/commo } __flush_tlb(); -@@ -4552,7 +4554,7 @@ +@@ -4552,7 +4562,7 @@ write_cr0(cr0 & 0xbfffffff); if (cpu_has_pge) {