1# This module provides the proprietary AMDGPU-PRO drivers.
2
3{ config, lib, pkgs, pkgs_i686, ... }:
4
5with lib;
6
7let
8
9 drivers = config.services.xserver.videoDrivers;
10
11 enabled = elem "amdgpu-pro" drivers;
12
13 package = config.boot.kernelPackages.amdgpu-pro;
14 package32 = pkgs_i686.linuxPackages.amdgpu-pro.override { libsOnly = true; kernel = null; };
15
16 opengl = config.hardware.opengl;
17
18 kernel = pkgs.linux_4_9.override {
19 extraConfig = ''
20 KALLSYMS_ALL y
21 '';
22 };
23
24in
25
26{
27
28 config = mkIf enabled {
29
30 nixpkgs.config.xorg.abiCompat = "1.19";
31
32 services.xserver.drivers = singleton
33 { name = "amdgpu"; modules = [ package ]; libPath = [ package ]; };
34
35 hardware.opengl.package = package;
36 hardware.opengl.package32 = package32;
37
38 boot.extraModulePackages = [ package ];
39
40 boot.kernelPackages =
41 pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor kernel);
42
43 boot.blacklistedKernelModules = [ "radeon" ];
44
45 hardware.firmware = [ package ];
46
47 system.activationScripts.setup-amdgpu-pro = ''
48 mkdir -p /run/lib
49 ln -sfn ${package}/lib ${package.libCompatDir}
50 ln -sfn ${package} /run/amdgpu-pro
51 '' + optionalString opengl.driSupport32Bit ''
52 ln -sfn ${package32}/lib ${package32.libCompatDir}
53 '';
54
55 system.requiredKernelConfig = with config.lib.kernelConfig; [
56 (isYes "KALLSYMS_ALL")
57 ];
58
59 environment.etc = {
60 "amd/amdrc".source = package + "/etc/amd/amdrc";
61 "amd/amdapfxx.blb".source = package + "/etc/amd/amdapfxx.blb";
62 "gbm/gbm.conf".source = package + "/etc/gbm/gbm.conf";
63 };
64
65 };
66
67}