diff options
23 files changed, 1214 insertions, 236 deletions
diff --git a/machines/aszlig/arilou.nix b/machines/aszlig/arilou.nix index b9a1c87d..469d6de9 100644 --- a/machines/aszlig/arilou.nix +++ b/machines/aszlig/arilou.nix @@ -25,7 +25,7 @@ in { fileSystems."/".device = "/dev/disk/by-uuid/${rootUUID}"; fileSystems."/".fsType = "btrfs"; - fileSystems."/".options = concatStringsSep "," [ + fileSystems."/".options = [ "ssd" "space_cache" "compress-force=zlib" @@ -34,7 +34,7 @@ in { fileSystems."/tmp".device = "none"; fileSystems."/tmp".fsType = "tmpfs"; - fileSystems."/tmp".options = "nosuid,nodev,relatime"; + fileSystems."/tmp".options = [ "nosuid" "nodev" "relatime" ]; swapDevices = singleton { device = "/dev/disk/by-uuid/${swapUUID}"; diff --git a/machines/aszlig/dnyarri-kconf.nix b/machines/aszlig/dnyarri-kconf.nix index a34f9871..614a7888 100644 --- a/machines/aszlig/dnyarri-kconf.nix +++ b/machines/aszlig/dnyarri-kconf.nix @@ -8,8 +8,11 @@ "CONFIG_ARCH_DEFCONFIG" = "arch/x86/configs/x86_64_defconfig"; "CONFIG_LOCKDEP_SUPPORT" = "y"; "CONFIG_STACKTRACE_SUPPORT" = "y"; - "CONFIG_HAVE_LATENCYTOP_SUPPORT" = "y"; "CONFIG_MMU" = "y"; + "CONFIG_ARCH_MMAP_RND_BITS_MIN" = "28"; + "CONFIG_ARCH_MMAP_RND_BITS_MAX" = "32"; + "CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN" = "8"; + "CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX" = "16"; "CONFIG_NEED_DMA_MAP_STATE" = "y"; "CONFIG_NEED_SG_DMA_LENGTH" = "y"; "CONFIG_GENERIC_ISA_DMA" = "y"; @@ -101,15 +104,15 @@ "CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH" = "y"; "CONFIG_ARCH_SUPPORTS_INT128" = "y"; "CONFIG_CGROUPS" = "y"; - "CONFIG_CGROUP_FREEZER" = "y"; - "CONFIG_CGROUP_PIDS" = "y"; - "CONFIG_CGROUP_DEVICE" = "y"; - "CONFIG_CPUSETS" = "y"; - "CONFIG_CGROUP_CPUACCT" = "y"; + "CONFIG_BLK_CGROUP" = "y"; "CONFIG_CGROUP_SCHED" = "y"; "CONFIG_FAIR_GROUP_SCHED" = "y"; "CONFIG_CFS_BANDWIDTH" = "y"; - "CONFIG_BLK_CGROUP" = "y"; + "CONFIG_CGROUP_PIDS" = "y"; + "CONFIG_CGROUP_FREEZER" = "y"; + "CONFIG_CPUSETS" = "y"; + "CONFIG_CGROUP_DEVICE" = "y"; + "CONFIG_CGROUP_CPUACCT" = "y"; "CONFIG_NAMESPACES" = "y"; "CONFIG_UTS_NS" = "y"; "CONFIG_IPC_NS" = "y"; @@ -169,7 +172,6 @@ "CONFIG_HAVE_OPTPROBES" = "y"; "CONFIG_HAVE_KPROBES_ON_FTRACE" = "y"; "CONFIG_HAVE_ARCH_TRACEHOOK" = "y"; - "CONFIG_HAVE_DMA_ATTRS" = "y"; "CONFIG_HAVE_DMA_CONTIGUOUS" = "y"; "CONFIG_GENERIC_SMP_IDLE_THREAD" = "y"; "CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT" = "y"; @@ -202,6 +204,10 @@ "CONFIG_MODULES_USE_ELF_RELA" = "y"; "CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK" = "y"; "CONFIG_ARCH_HAS_ELF_RANDOMIZE" = "y"; + "CONFIG_HAVE_ARCH_MMAP_RND_BITS" = "y"; + "CONFIG_ARCH_MMAP_RND_BITS" = "28"; + "CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS" = "y"; + "CONFIG_ARCH_MMAP_RND_COMPAT_BITS" = "8"; "CONFIG_HAVE_COPY_THREAD_TLS" = "y"; "CONFIG_OLD_SIGSUSPEND3" = "y"; "CONFIG_COMPAT_OLD_SIGACTION" = "y"; @@ -215,7 +221,6 @@ "CONFIG_MODULE_FORCE_UNLOAD" = "y"; "CONFIG_MODVERSIONS" = "y"; "CONFIG_MODULES_TREE_LOOKUP" = "y"; - "CONFIG_STOP_MACHINE" = "y"; "CONFIG_BLOCK" = "y"; "CONFIG_BLK_DEV_BSG" = "y"; "CONFIG_BLK_DEV_INTEGRITY" = "y"; @@ -246,6 +251,7 @@ "CONFIG_ZONE_DMA" = "y"; "CONFIG_SMP" = "y"; "CONFIG_X86_FEATURE_NAMES" = "y"; + "CONFIG_X86_FAST_FEATURE_TESTS" = "y"; "CONFIG_IOSF_MBI" = "m"; "CONFIG_X86_SUPPORTS_MEMORY_FAILURE" = "y"; "CONFIG_SCHED_OMIT_FRAME_POINTER" = "y"; @@ -412,6 +418,7 @@ "CONFIG_PMC_ATOM" = "y"; "CONFIG_NET" = "y"; "CONFIG_NET_INGRESS" = "y"; + "CONFIG_NET_EGRESS" = "y"; "CONFIG_PACKET" = "y"; "CONFIG_PACKET_DIAG" = "m"; "CONFIG_UNIX" = "y"; @@ -504,6 +511,9 @@ "CONFIG_NFT_REJECT" = "m"; "CONFIG_NFT_REJECT_INET" = "m"; "CONFIG_NFT_COMPAT" = "m"; + "CONFIG_NF_DUP_NETDEV" = "m"; + "CONFIG_NFT_DUP_NETDEV" = "m"; + "CONFIG_NFT_FWD_NETDEV" = "m"; "CONFIG_NETFILTER_XTABLES" = "m"; "CONFIG_NETFILTER_XT_MARK" = "m"; "CONFIG_NETFILTER_XT_CONNMARK" = "m"; @@ -752,6 +762,7 @@ "CONFIG_RPS" = "y"; "CONFIG_RFS_ACCEL" = "y"; "CONFIG_XPS" = "y"; + "CONFIG_SOCK_CGROUP_DATA" = "y"; "CONFIG_CGROUP_NET_CLASSID" = "y"; "CONFIG_NET_RX_BUSY_POLL" = "y"; "CONFIG_BQL" = "y"; @@ -805,6 +816,7 @@ "CONFIG_DM_UEVENT" = "y"; "CONFIG_DM_FLAKEY" = "m"; "CONFIG_DM_VERITY" = "m"; + "CONFIG_DM_VERITY_FEC" = "y"; "CONFIG_DM_LOG_WRITES" = "m"; "CONFIG_NETDEVICES" = "y"; "CONFIG_NET_CORE" = "y"; @@ -849,6 +861,10 @@ "CONFIG_INPUT_KEYBOARD" = "y"; "CONFIG_KEYBOARD_ATKBD" = "y"; "CONFIG_INPUT_MOUSE" = "y"; + "CONFIG_INPUT_JOYSTICK" = "y"; + "CONFIG_JOYSTICK_XPAD" = "y"; + "CONFIG_JOYSTICK_XPAD_FF" = "y"; + "CONFIG_JOYSTICK_XPAD_LEDS" = "y"; "CONFIG_INPUT_MISC" = "y"; "CONFIG_INPUT_UINPUT" = "m"; "CONFIG_SERIO" = "y"; @@ -900,6 +916,7 @@ "CONFIG_INTEL_PCH_THERMAL" = "m"; "CONFIG_SSB_POSSIBLE" = "y"; "CONFIG_BCMA_POSSIBLE" = "y"; + "CONFIG_MFD_CORE" = "m"; "CONFIG_MEDIA_SUPPORT" = "y"; "CONFIG_MEDIA_CAMERA_SUPPORT" = "y"; "CONFIG_VIDEO_DEV" = "y"; @@ -975,6 +992,7 @@ "CONFIG_DRM_BRIDGE" = "y"; "CONFIG_FB" = "y"; "CONFIG_FB_CMDLINE" = "y"; + "CONFIG_FB_NOTIFY" = "y"; "CONFIG_FB_CFB_FILLRECT" = "y"; "CONFIG_FB_CFB_COPYAREA" = "y"; "CONFIG_FB_CFB_IMAGEBLIT" = "y"; @@ -1040,18 +1058,7 @@ "CONFIG_HID_BATTERY_STRENGTH" = "y"; "CONFIG_UHID" = "m"; "CONFIG_HID_GENERIC" = "y"; - "CONFIG_HID_A4TECH" = "y"; - "CONFIG_HID_APPLE" = "y"; - "CONFIG_HID_BELKIN" = "y"; - "CONFIG_HID_CHERRY" = "y"; - "CONFIG_HID_CHICONY" = "y"; - "CONFIG_HID_CYPRESS" = "y"; - "CONFIG_HID_EZKEY" = "y"; - "CONFIG_HID_GEMBIRD" = "m"; - "CONFIG_HID_KENSINGTON" = "y"; - "CONFIG_HID_LOGITECH" = "y"; "CONFIG_HID_MICROSOFT" = "y"; - "CONFIG_HID_MONTEREY" = "y"; "CONFIG_HID_PANTHERLORD" = "y"; "CONFIG_PANTHERLORD_FF" = "y"; "CONFIG_HID_SONY" = "m"; @@ -1059,7 +1066,10 @@ "CONFIG_HID_GREENASIA" = "y"; "CONFIG_GREENASIA_FF" = "y"; "CONFIG_HID_WACOM" = "m"; + "CONFIG_HID_SENSOR_HUB" = "m"; + "CONFIG_HID_SENSOR_CUSTOM_SENSOR" = "m"; "CONFIG_USB_HID" = "y"; + "CONFIG_HID_PID" = "y"; "CONFIG_USB_HIDDEV" = "y"; "CONFIG_I2C_HID" = "m"; "CONFIG_USB_OHCI_LITTLE_ENDIAN" = "y"; @@ -1133,6 +1143,7 @@ "CONFIG_USB_SERIAL_METRO" = "m"; "CONFIG_USB_SERIAL_MOS7720" = "m"; "CONFIG_USB_SERIAL_MOS7840" = "m"; + "CONFIG_USB_SERIAL_MXUPORT11" = "m"; "CONFIG_USB_SERIAL_MXUPORT" = "m"; "CONFIG_USB_SERIAL_NAVMAN" = "m"; "CONFIG_USB_SERIAL_PL2303" = "m"; @@ -1157,8 +1168,9 @@ "CONFIG_USB_SERIAL_DEBUG" = "m"; "CONFIG_USB_EZUSB_FX2" = "m"; "CONFIG_NEW_LEDS" = "y"; - "CONFIG_LEDS_CLASS" = "m"; - "CONFIG_LEDS_CLASS_FLASH" = "m"; + "CONFIG_LEDS_CLASS" = "y"; + "CONFIG_LEDS_CLASS_FLASH" = "y"; + "CONFIG_LEDS_TRIGGERS" = "y"; "CONFIG_EDAC_ATOMIC_SCRUB" = "y"; "CONFIG_EDAC_SUPPORT" = "y"; "CONFIG_RTC_LIB" = "y"; @@ -1175,7 +1187,7 @@ "CONFIG_CLKEVT_I8253" = "y"; "CONFIG_I8253_LOCK" = "y"; "CONFIG_CLKBLD_I8253" = "y"; - "CONFIG_EXTCON" = "m"; + "CONFIG_ARM_GIC_MAX_NR" = "1"; "CONFIG_RAS" = "y"; "CONFIG_FIRMWARE_MEMMAP" = "y"; "CONFIG_DMIID" = "y"; @@ -1331,7 +1343,10 @@ "CONFIG_TEST_HEXDUMP" = "m"; "CONFIG_MEMTEST" = "y"; "CONFIG_HAVE_ARCH_KGDB" = "y"; + "CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL" = "y"; + "CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED" = "y"; "CONFIG_STRICT_DEVMEM" = "y"; + "CONFIG_IO_STRICT_DEVMEM" = "y"; "CONFIG_X86_VERBOSE_BOOTUP" = "y"; "CONFIG_EARLY_PRINTK" = "y"; "CONFIG_DOUBLEFAULT" = "y"; @@ -1566,6 +1581,7 @@ "CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE" = "y"; "CONFIG_CLZ_TAB" = "y"; "CONFIG_CORDIC" = "y"; + "CONFIG_IRQ_POLL" = "y"; "CONFIG_MPILIB" = "y"; "CONFIG_OID_REGISTRY" = "y"; "CONFIG_FONT_SUPPORT" = "y"; diff --git a/machines/aszlig/dnyarri.nix b/machines/aszlig/dnyarri.nix index 5192e955..a041486e 100644 --- a/machines/aszlig/dnyarri.nix +++ b/machines/aszlig/dnyarri.nix @@ -109,7 +109,7 @@ with lib; # TODO: Try to avoid this, but as there is only a single user using audio on # this machine, it's okay for now. But remember that this will break heavily, # should there be another user accessing the audio devices. - users.extraUsers.aszlig.extraGroups = [ "audio" "vboxusers" ]; + users.users.aszlig.extraGroups = [ "audio" "vboxusers" ]; services.synergy.client.enable = true; services.synergy.client.serverAddress = "mmrnmhrm"; diff --git a/machines/aszlig/kzerza.nix b/machines/aszlig/kzerza.nix index b90b05d2..41b380b9 100644 --- a/machines/aszlig/kzerza.nix +++ b/machines/aszlig/kzerza.nix @@ -24,7 +24,7 @@ in { fileSystems."/".device = "/dev/disk/by-uuid/${rootUUID}"; fileSystems."/".fsType = "btrfs"; - fileSystems."/".options = concatStringsSep "," [ + fileSystems."/".options = [ "ssd" "space_cache" "compress-force=zlib" @@ -38,10 +38,10 @@ in { fileSystems."/tmp".device = "none"; fileSystems."/tmp".fsType = "tmpfs"; - fileSystems."/tmp".options = "nosuid,nodev,relatime"; + fileSystems."/tmp".options = [ "nosuid" "nodev" "relatime" ]; - users.extraGroups.grandpa.gid = 666; - users.extraUsers.grandpa = { + users.groups.grandpa.gid = 666; + users.users.grandpa = { uid = 666; description = "GrandPA User"; group = "grandpa"; diff --git a/machines/aszlig/managed/haenk.nix b/machines/aszlig/managed/haenk.nix deleted file mode 100644 index 75730ff4..00000000 --- a/machines/aszlig/managed/haenk.nix +++ /dev/null @@ -1,95 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - boot.initrd.availableKernelModules = [ - "pata_sis" "ohci_pci" "ehci_pci" "firewire_ohci" "sd_mod" "sr_mod" - ]; - boot.kernelPackages = pkgs.linuxPackages_latest; - boot.loader.grub = { - enable = true; - version = 2; - device = "/dev/disk/by-id/ata-FUJITSU_MHV2080AH_NT61T782VR71"; - }; - - environment.systemPackages = with pkgs; [ - cdparanoia chromium figlet gajim gimp htop inkscape kde5.oxygen-icons5 - libreoffice mosh mpv pciutils skype vlc vuizvui.greybird-xfce-theme - vuizvui.tomahawk wget youtubeDL - ]; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/df1cab2d-cbca-4fc5-af6a-c0580c4db1b7"; - fsType = "btrfs"; - }; - - swapDevices = lib.singleton { - device = "/dev/disk/by-uuid/b5ea0ae8-20c6-43dd-ad97-6d8c783dac02"; - }; - - hardware = { - cpu.amd.updateMicrocode = true; - - firmware = lib.singleton (pkgs.runCommand "ipw2x00-firmware" {} '' - mkdir -p "$out/lib/firmware" - cp "${pkgs.fetchgit rec { - name = "ipw2x00-20151227"; - url = "git://anonscm.debian.org/kernel/firmware-nonfree.git"; - rev = "e4147b94a856dfe7d4dac11b5da7d9e96b3c2e95"; - sha256 = "18kymqzhlppj520n6vkq5666qgryz3prym1pxn3sqv34yvav7agi"; - }}"/debian/config/ipw2x00/*.fw "$out/lib/firmware/" - ''); - - pulseaudio.enable = true; - }; - - i18n.consoleKeyMap = "de"; - i18n.defaultLocale = "en_US.UTF-8"; - - networking.hostName = "haenk"; - networking.firewall.enable = false; - networking.wireless.enable = true; - networking.useNetworkd = true; - networking.enableIntel2200BGFirmware = true; - - nix.maxJobs = 1; - nix.useChroot = true; - nix.extraOptions = '' - auto-optimise-store = true - ''; - - nixpkgs.config = { - allowUnfree = true; - pulseaudio = true; - chromium.enablePepperFlash = true; - - packageOverrides = opkgs: { - # This is because the driver for the NV44M GPU doesn't like LLVM 3.7 - mesa_noglu = opkgs.mesa_noglu.override { - llvmPackages = opkgs.llvmPackages_36; - }; - }; - }; - - services.openssh.enable = true; - services.tlp.enable = true; - services.ntp.extraFlags = [ "-G" ]; - - services.xserver.enable = true; - services.xserver.layout = "de"; - services.xserver.xkbOptions = "eurosign:e"; - services.xserver.displayManager.auto.enable = true; - services.xserver.displayManager.auto.user = "bla"; - services.xserver.desktopManager.xfce.enable = true; - services.xserver.synaptics.enable = true; - services.xserver.wacom.enable = true; - - time.timeZone = "Europe/Berlin"; - - users.extraUsers.bla = { - isNormalUser = true; - uid = 1000; - extraGroups = [ "video" "wheel" ]; - }; - - vuizvui.user.aszlig.programs.vim.enable = true; -} diff --git a/machines/aszlig/managed/notsure.nix b/machines/aszlig/managed/notsure.nix index 1b807e35..3d222970 100644 --- a/machines/aszlig/managed/notsure.nix +++ b/machines/aszlig/managed/notsure.nix @@ -15,7 +15,7 @@ in { fileSystems."/" = { label = "root"; fsType = "btrfs"; - options = "rw,space_cache,relatime"; + options = [ "space_cache" "relatime" ]; }; hardware = { @@ -86,4 +86,5 @@ in { time.timeZone = "Europe/Berlin"; vuizvui.user.aszlig.programs.vim.enable = true; + vuizvui.enableGlobalNixpkgsConfig = true; } diff --git a/machines/aszlig/managed/tyree.nix b/machines/aszlig/managed/tyree.nix index fead2ef3..6e02e54f 100644 --- a/machines/aszlig/managed/tyree.nix +++ b/machines/aszlig/managed/tyree.nix @@ -17,7 +17,7 @@ fileSystems."/".label = "tyree-root"; fileSystems."/".fsType = "btrfs"; - fileSystems."/".options = lib.concatStringsSep "," [ + fileSystems."/".options = [ "compress=lzo" "discard" "noatime" @@ -37,7 +37,9 @@ networking.hostName = "tyree"; networking.firewall.enable = false; - networking.wireless.enable = true; + networking.wireless.enable = false; + networking.enableRTL8192cFirmware = true; + networking.networkmanager.enable = true; networking.useNetworkd = true; nix.maxJobs = 4; @@ -63,12 +65,11 @@ services.xserver.displayManager.auto.enable = true; services.xserver.displayManager.auto.user = "bla"; services.xserver.desktopManager.kde5.enable = true; - services.xserver.synaptics.enable = true; services.xserver.wacom.enable = true; time.timeZone = "Europe/Berlin"; - users.extraUsers.bla = { + users.users.bla = { isNormalUser = true; uid = 1000; extraGroups = [ "video" "wheel" ]; diff --git a/machines/aszlig/mmrnmhrm-kconf.nix b/machines/aszlig/mmrnmhrm-kconf.nix index 17c5cc7e..539f0346 100644 --- a/machines/aszlig/mmrnmhrm-kconf.nix +++ b/machines/aszlig/mmrnmhrm-kconf.nix @@ -8,8 +8,11 @@ "CONFIG_ARCH_DEFCONFIG" = "arch/x86/configs/x86_64_defconfig"; "CONFIG_LOCKDEP_SUPPORT" = "y"; "CONFIG_STACKTRACE_SUPPORT" = "y"; - "CONFIG_HAVE_LATENCYTOP_SUPPORT" = "y"; "CONFIG_MMU" = "y"; + "CONFIG_ARCH_MMAP_RND_BITS_MIN" = "28"; + "CONFIG_ARCH_MMAP_RND_BITS_MAX" = "32"; + "CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN" = "8"; + "CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX" = "16"; "CONFIG_NEED_DMA_MAP_STATE" = "y"; "CONFIG_NEED_SG_DMA_LENGTH" = "y"; "CONFIG_GENERIC_ISA_DMA" = "y"; @@ -100,22 +103,21 @@ "CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH" = "y"; "CONFIG_ARCH_SUPPORTS_INT128" = "y"; "CONFIG_CGROUPS" = "y"; - "CONFIG_CGROUP_FREEZER" = "y"; - "CONFIG_CGROUP_PIDS" = "y"; - "CONFIG_CGROUP_DEVICE" = "y"; - "CONFIG_CPUSETS" = "y"; - "CONFIG_CGROUP_CPUACCT" = "y"; "CONFIG_PAGE_COUNTER" = "y"; "CONFIG_MEMCG" = "y"; "CONFIG_MEMCG_SWAP" = "y"; "CONFIG_MEMCG_SWAP_ENABLED" = "y"; - "CONFIG_MEMCG_KMEM" = "y"; - "CONFIG_CGROUP_PERF" = "y"; + "CONFIG_BLK_CGROUP" = "y"; + "CONFIG_CGROUP_WRITEBACK" = "y"; "CONFIG_CGROUP_SCHED" = "y"; "CONFIG_FAIR_GROUP_SCHED" = "y"; "CONFIG_CFS_BANDWIDTH" = "y"; - "CONFIG_BLK_CGROUP" = "y"; - "CONFIG_CGROUP_WRITEBACK" = "y"; + "CONFIG_CGROUP_PIDS" = "y"; + "CONFIG_CGROUP_FREEZER" = "y"; + "CONFIG_CPUSETS" = "y"; + "CONFIG_CGROUP_DEVICE" = "y"; + "CONFIG_CGROUP_CPUACCT" = "y"; + "CONFIG_CGROUP_PERF" = "y"; "CONFIG_NAMESPACES" = "y"; "CONFIG_UTS_NS" = "y"; "CONFIG_IPC_NS" = "y"; @@ -175,7 +177,6 @@ "CONFIG_HAVE_OPTPROBES" = "y"; "CONFIG_HAVE_KPROBES_ON_FTRACE" = "y"; "CONFIG_HAVE_ARCH_TRACEHOOK" = "y"; - "CONFIG_HAVE_DMA_ATTRS" = "y"; "CONFIG_HAVE_DMA_CONTIGUOUS" = "y"; "CONFIG_GENERIC_SMP_IDLE_THREAD" = "y"; "CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT" = "y"; @@ -208,6 +209,10 @@ "CONFIG_MODULES_USE_ELF_RELA" = "y"; "CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK" = "y"; "CONFIG_ARCH_HAS_ELF_RANDOMIZE" = "y"; + "CONFIG_HAVE_ARCH_MMAP_RND_BITS" = "y"; + "CONFIG_ARCH_MMAP_RND_BITS" = "28"; + "CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS" = "y"; + "CONFIG_ARCH_MMAP_RND_COMPAT_BITS" = "8"; "CONFIG_HAVE_COPY_THREAD_TLS" = "y"; "CONFIG_OLD_SIGSUSPEND3" = "y"; "CONFIG_COMPAT_OLD_SIGACTION" = "y"; @@ -221,7 +226,6 @@ "CONFIG_MODULE_FORCE_UNLOAD" = "y"; "CONFIG_MODVERSIONS" = "y"; "CONFIG_MODULES_TREE_LOOKUP" = "y"; - "CONFIG_STOP_MACHINE" = "y"; "CONFIG_BLOCK" = "y"; "CONFIG_BLK_DEV_BSG" = "y"; "CONFIG_BLK_DEV_INTEGRITY" = "y"; @@ -252,6 +256,7 @@ "CONFIG_ZONE_DMA" = "y"; "CONFIG_SMP" = "y"; "CONFIG_X86_FEATURE_NAMES" = "y"; + "CONFIG_X86_FAST_FEATURE_TESTS" = "y"; "CONFIG_X86_SUPPORTS_MEMORY_FAILURE" = "y"; "CONFIG_SCHED_OMIT_FRAME_POINTER" = "y"; "CONFIG_NO_BOOTMEM" = "y"; @@ -416,6 +421,7 @@ "CONFIG_PMC_ATOM" = "y"; "CONFIG_NET" = "y"; "CONFIG_NET_INGRESS" = "y"; + "CONFIG_NET_EGRESS" = "y"; "CONFIG_PACKET" = "y"; "CONFIG_PACKET_DIAG" = "m"; "CONFIG_UNIX" = "y"; @@ -438,7 +444,6 @@ "CONFIG_DEFAULT_TCP_CONG" = "cubic"; "CONFIG_IPV6" = "y"; "CONFIG_IPV6_ROUTER_PREF" = "y"; - "CONFIG_IPV6_ILA" = "m"; "CONFIG_INET6_TUNNEL" = "m"; "CONFIG_IPV6_SIT" = "m"; "CONFIG_IPV6_NDISC_NODETYPE" = "y"; @@ -512,6 +517,7 @@ "CONFIG_RPS" = "y"; "CONFIG_RFS_ACCEL" = "y"; "CONFIG_XPS" = "y"; + "CONFIG_SOCK_CGROUP_DATA" = "y"; "CONFIG_CGROUP_NET_CLASSID" = "y"; "CONFIG_NET_RX_BUSY_POLL" = "y"; "CONFIG_BQL" = "y"; @@ -589,8 +595,11 @@ "CONFIG_INPUT_JOYDEV" = "y"; "CONFIG_INPUT_EVDEV" = "y"; "CONFIG_INPUT_KEYBOARD" = "y"; - "CONFIG_KEYBOARD_ATKBD" = "y"; "CONFIG_INPUT_MOUSE" = "y"; + "CONFIG_INPUT_JOYSTICK" = "y"; + "CONFIG_JOYSTICK_XPAD" = "y"; + "CONFIG_JOYSTICK_XPAD_FF" = "y"; + "CONFIG_JOYSTICK_XPAD_LEDS" = "y"; "CONFIG_INPUT_TABLET" = "y"; "CONFIG_SERIO" = "y"; "CONFIG_ARCH_MIGHT_HAVE_PC_SERIO" = "y"; @@ -675,6 +684,7 @@ "CONFIG_DRM_BRIDGE" = "y"; "CONFIG_FB" = "y"; "CONFIG_FB_CMDLINE" = "y"; + "CONFIG_FB_NOTIFY" = "y"; "CONFIG_FB_CFB_FILLRECT" = "y"; "CONFIG_FB_CFB_COPYAREA" = "y"; "CONFIG_FB_CFB_IMAGEBLIT" = "y"; @@ -737,8 +747,11 @@ "CONFIG_HIDRAW" = "y"; "CONFIG_UHID" = "m"; "CONFIG_HID_GENERIC" = "y"; + "CONFIG_HID_MICROSOFT" = "m"; "CONFIG_HID_GREENASIA" = "y"; "CONFIG_GREENASIA_FF" = "y"; + "CONFIG_HID_SENSOR_HUB" = "m"; + "CONFIG_HID_SENSOR_CUSTOM_SENSOR" = "m"; "CONFIG_USB_HID" = "y"; "CONFIG_USB_HIDDEV" = "y"; "CONFIG_I2C_HID" = "m"; @@ -806,6 +819,7 @@ "CONFIG_USB_SERIAL_METRO" = "m"; "CONFIG_USB_SERIAL_MOS7720" = "m"; "CONFIG_USB_SERIAL_MOS7840" = "m"; + "CONFIG_USB_SERIAL_MXUPORT11" = "m"; "CONFIG_USB_SERIAL_MXUPORT" = "m"; "CONFIG_USB_SERIAL_NAVMAN" = "m"; "CONFIG_USB_SERIAL_PL2303" = "m"; @@ -860,6 +874,7 @@ "CONFIG_CLKEVT_I8253" = "y"; "CONFIG_I8253_LOCK" = "y"; "CONFIG_CLKBLD_I8253" = "y"; + "CONFIG_ARM_GIC_MAX_NR" = "1"; "CONFIG_RAS" = "y"; "CONFIG_LIBNVDIMM" = "m"; "CONFIG_ND_BLK" = "m"; @@ -1029,7 +1044,10 @@ "CONFIG_TEST_HEXDUMP" = "m"; "CONFIG_MEMTEST" = "y"; "CONFIG_HAVE_ARCH_KGDB" = "y"; + "CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL" = "y"; + "CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED" = "y"; "CONFIG_STRICT_DEVMEM" = "y"; + "CONFIG_IO_STRICT_DEVMEM" = "y"; "CONFIG_X86_VERBOSE_BOOTUP" = "y"; "CONFIG_EARLY_PRINTK" = "y"; "CONFIG_DOUBLEFAULT" = "y"; @@ -1261,6 +1279,7 @@ "CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE" = "y"; "CONFIG_CLZ_TAB" = "y"; "CONFIG_CORDIC" = "y"; + "CONFIG_IRQ_POLL" = "y"; "CONFIG_MPILIB" = "m"; "CONFIG_OID_REGISTRY" = "y"; "CONFIG_FONT_SUPPORT" = "y"; diff --git a/machines/aszlig/mmrnmhrm.nix b/machines/aszlig/mmrnmhrm.nix index 49826d9b..b9d422e6 100644 --- a/machines/aszlig/mmrnmhrm.nix +++ b/machines/aszlig/mmrnmhrm.nix @@ -23,12 +23,7 @@ with lib; "/" = { label = "root"; fsType = "btrfs"; - options = concatStringsSep "," [ - "autodefrag" - "space_cache" - "compress=lzo" - "noatime" - ]; + options = [ "autodefrag" "space_cache" "compress=lzo" "noatime" ]; }; }; diff --git a/machines/aszlig/tishtushi.nix b/machines/aszlig/tishtushi.nix index a3f281f4..3232d222 100644 --- a/machines/aszlig/tishtushi.nix +++ b/machines/aszlig/tishtushi.nix @@ -40,17 +40,13 @@ in { fileSystems."/" = { device = "/dev/disk/by-uuid/${rootUUID}"; fsType = "btrfs"; - options = concatStringsSep "," [ - "space_cache" "compress=zlib" "noatime" - ]; + options = [ "space_cache" "compress=zlib" "noatime" ]; }; fileSystems."/nix/store" = { device = "/dev/disk/by-uuid/${storeUUID}"; fsType = "btrfs"; - options = concatStringsSep "," [ - "ssd" "compress-force=zlib" "noatime" - ]; + options = [ "ssd" "compress-force=zlib" "noatime" ]; }; swapDevices = singleton { diff --git a/machines/default.nix b/machines/default.nix index 7c0ed379..d15bd7eb 100644 --- a/machines/default.nix +++ b/machines/default.nix @@ -10,7 +10,6 @@ in { kzerza = callMachine ./aszlig/kzerza.nix {}; tishtushi = callMachine ./aszlig/tishtushi.nix {}; managed = { - haenk = callMachine ./aszlig/managed/haenk.nix {}; notsure = callMachine ./aszlig/managed/notsure.nix {}; tyree = callMachine ./aszlig/managed/tyree.nix {}; }; diff --git a/machines/labnet/labtop.nix b/machines/labnet/labtop.nix index 65e3723d..a206f93c 100644 --- a/machines/labnet/labtop.nix +++ b/machines/labnet/labtop.nix @@ -1,28 +1,6 @@ { pkgs, lib, ... }: let - greybird = pkgs.stdenv.mkDerivation { - name = "greybird-xfce-theme"; - - src = pkgs.fetchFromGitHub { - repo = "Greybird"; - owner = "shimmerproject"; - rev = "61ec18d22780aa87998381599c941e0cf4f7bfb5"; - sha256 = "03h8hba4lfp337a4drylcplrbggry9gz8dq1f3gjy25fhqkgvq05"; - }; - - phases = [ "unpackPhase" "installPhase" ]; - - installPhase = '' - mkdir -p "$out/share/themes/Greybird" \ - "$out/share/themes/Greybird-compact/xfwm4" - cp -vrt "$out/share/themes/Greybird" \ - gtk-* metacity-1 unity xfce-notify-4.0 xfwm4 - cp -vrt "$out/share/themes/Greybird-compact/xfwm4" \ - xfwm4_compact/* - ''; - }; - modulesPath = "${import ../../nixpkgs-path.nix}/nixos/modules"; in { @@ -48,6 +26,8 @@ in { vuizvui.hardware.thinkpad.enable = true; + hardware.trackpoint.enable = false; + environment.systemPackages = with pkgs; [ #repetierhost <- TODO ack @@ -62,7 +42,6 @@ in { gimp git gmpc - vuizvui.greybird-xfce-theme inkscape ino (libreoffice.overrideDerivation (lib.const { doCheck = false; })) @@ -85,21 +64,12 @@ in { displayManager.auto.enable = true; displayManager.auto.user = "openlab"; - desktopManager.xfce.enable = true; - # synaptics.enable = true; - # synaptics.minSpeed = "0.5"; - # synaptics.accelFactor = "0.01"; + desktopManager.gnome3.enable = true; + synaptics.enable = true; + synaptics.minSpeed = "0.5"; + synaptics.accelFactor = "0.01"; }; - - # hardware.trackpoint = { - # enable = true; - # emulateWheel = true; - # sensitivity = 130; - # speed = 350; - # }; - - services.openssh.enable = true; networking.networkmanager.enable = true; @@ -114,7 +84,7 @@ in { nix.maxJobs = 2; users.mutableUsers = false; - users.extraUsers.openlab = { + users.users.openlab = { uid = 1000; isNormalUser = true; password = "openlab"; diff --git a/machines/profpatsch/katara.nix b/machines/profpatsch/katara.nix index 98074e41..73f0430c 100644 --- a/machines/profpatsch/katara.nix +++ b/machines/profpatsch/katara.nix @@ -299,7 +299,7 @@ in { # Nobody wants mutable state. :) users.mutableUsers = false; - users.extraUsers = + users.users = let authKeys = ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJhthfk38lzDvoI7lPqRneI0yBpZEhLDGRBpcXzpPSu+V0YlgrDix5fHhBl+EKfw4aeQNvQNuAky3pDtX+BDK1b7idbz9ZMCExy2a1kBKDVJz/onLSQxiiZMuHlAljVj9iU4uoTOxX3vB85Ok9aZtMP1rByRIWR9e81/km4HdfZTCjFVRLWfvo0s29H7l0fnbG9bb2E6kydlvjnXJnZFXX+KUM16X11lK53ilPdPJdm87VtxeSKZ7GOiBz6q7FHzEd2Zc3CnzgupQiXGSblXrlN22IY3IWfm5S/8RTeQbMLVoH0TncgCeenXH7FU/sXD79ypqQV/WaVVDYMOirsnh/ philip@nyx"]; in { philip = rec { diff --git a/machines/sternenseemann/fliewatuet.nix b/machines/sternenseemann/fliewatuet.nix index 6c8994ee..94d84287 100644 --- a/machines/sternenseemann/fliewatuet.nix +++ b/machines/sternenseemann/fliewatuet.nix @@ -256,7 +256,7 @@ in { programs.fish.enable = true; users.mutableUsers = false; - users.extraUsers.lukas = { + users.users.lukas = { isNormalUser = true; uid = 1000; home = "/home/lukas"; diff --git a/machines/sternenseemann/schnurrkadse.nix b/machines/sternenseemann/schnurrkadse.nix index e1bf9f63..fc38373f 100644 --- a/machines/sternenseemann/schnurrkadse.nix +++ b/machines/sternenseemann/schnurrkadse.nix @@ -16,8 +16,16 @@ ]; nix.maxJobs = 1; - networking.enableIntel2200BGFirmware = true; - hardware.enableAllFirmware = true; + hardware.firmware = let myfirmware = pkgs.firmwareLinuxNonfree.overrideDerivation + (old: { + name = "myfirmware"; + src = pkgs.fetchFromGitHub { + owner = "wkennington"; + repo = "linux-firmware"; + rev = "2016-01-26"; + sha256="07hv4kgbsxndhm1va6k6scy083886aap3naq1l4jdz7dnph4ir02"; + }; + }); in [ myfirmware ]; hardware.trackpoint = { enable = true; @@ -96,7 +104,7 @@ programs.fish.enable = true; - users.extraUsers.lukas = { + users.users.lukas = { isNormalUser = true; uid = 1000; shell = "/run/current-system/sw/bin/fish"; diff --git a/modules/hardware/t100ha/default.nix b/modules/hardware/t100ha/default.nix index d5f2138e..c55a1acc 100644 --- a/modules/hardware/t100ha/default.nix +++ b/modules/hardware/t100ha/default.nix @@ -8,13 +8,61 @@ in { options.vuizvui.hardware.t100ha.enable = lib.mkEnableOption desc; config = lib.mkIf cfg.enable { - # Needed for booting from MMC: - boot.initrd.availableKernelModules = [ - "xhci_pci" "sdhci_acpi" "mmc_block" - ]; - # It's a CherryTrail SoC, so we want to have the latest and greatest: - boot.kernelPackages = pkgs.linuxPackages_latest; + # It's a CherryTrail SoC, so we want to have the latest and greatest with a + # few additional patches: + boot.kernelPackages = let + nixpkgs = import ../../../nixpkgs-path.nix; + mkKernel = import "${nixpkgs}/pkgs/os-specific/linux/kernel/generic.nix"; + t100haKernel = mkKernel rec { + version = "4.5-rc5"; + modDirVersion = "4.5.0-rc5"; + extraMeta.branch = "4.5"; + + src = pkgs.fetchurl { + url = "mirror://kernel/linux/kernel/v4.x/testing/" + + "linux-${version}.tar.xz"; + sha256 = "06qlypnrlkckxhf3clq6l2d3kps7rwfw811sxapjbnhzjd75fcx8"; + }; + + kernelPatches = lib.singleton { + name = "drm-fixes.patch"; + patch = ./drm-fixes.patch; + }; + + extraConfig = '' + MMC y + MMC_BLOCK y + MMC_SDHCI y + MMC_SDHCI_ACPI y + PINCTRL_CHERRYVIEW y + ''; + + features.iwlwifi = true; + features.efiBootStub = true; + features.needsCifsUtils = true; + features.canDisableNetfilterConntrackHelpers = true; + features.netfilterRPFilter = true; + + inherit (pkgs) stdenv perl buildLinux; + }; + self = pkgs.linuxPackagesFor t100haKernel self; + in self; + # By default the console is rotated by 90 degrees to the right. boot.kernelParams = [ "fbcon=rotate:3" ]; + services.xserver.deviceSection = '' + Option "monitor-DSI1" "Monitor[0]" + ''; + services.xserver.monitorSection = '' + Option "Rotate" "left" + ''; + services.xserver.videoDriver = "intel"; + + # The touch screen needs to be rotated as well: + services.xserver.inputClassSections = lib.singleton '' + Identifier "touchscreen" + MatchProduct "SIS0457" + Option "TransformationMatrix" "0 -1 1 1 0 0 0 0 1" + ''; }; } diff --git a/modules/hardware/t100ha/drm-fixes.patch b/modules/hardware/t100ha/drm-fixes.patch new file mode 100644 index 00000000..2aceb0dc --- /dev/null +++ b/modules/hardware/t100ha/drm-fixes.patch @@ -0,0 +1,1019 @@ +diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c +index 0fc38bb..cf39ed3 100644 +--- a/drivers/gpu/drm/i915/i915_debugfs.c ++++ b/drivers/gpu/drm/i915/i915_debugfs.c +@@ -825,8 +825,11 @@ static int i915_interrupt_info(struct seq_file *m, void *data) + } + + for_each_pipe(dev_priv, pipe) { +- if (!intel_display_power_is_enabled(dev_priv, +- POWER_DOMAIN_PIPE(pipe))) { ++ enum intel_display_power_domain power_domain; ++ ++ power_domain = POWER_DOMAIN_PIPE(pipe); ++ if (!intel_display_power_get_if_enabled(dev_priv, ++ power_domain)) { + seq_printf(m, "Pipe %c power disabled\n", + pipe_name(pipe)); + continue; +@@ -840,6 +843,8 @@ static int i915_interrupt_info(struct seq_file *m, void *data) + seq_printf(m, "Pipe %c IER:\t%08x\n", + pipe_name(pipe), + I915_READ(GEN8_DE_PIPE_IER(pipe))); ++ ++ intel_display_power_put(dev_priv, power_domain); + } + + seq_printf(m, "Display Engine port interrupt mask:\t%08x\n", +@@ -3985,6 +3990,7 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, + struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[pipe]; + struct intel_crtc *crtc = to_intel_crtc(intel_get_crtc_for_pipe(dev, + pipe)); ++ enum intel_display_power_domain power_domain; + u32 val = 0; /* shut up gcc */ + int ret; + +@@ -3995,7 +4001,8 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, + if (pipe_crc->source && source) + return -EINVAL; + +- if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PIPE(pipe))) { ++ power_domain = POWER_DOMAIN_PIPE(pipe); ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) { + DRM_DEBUG_KMS("Trying to capture CRC while pipe is off\n"); + return -EIO; + } +@@ -4012,7 +4019,7 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, + ret = ivb_pipe_crc_ctl_reg(dev, pipe, &source, &val); + + if (ret != 0) +- return ret; ++ goto out; + + /* none -> real source transition */ + if (source) { +@@ -4024,8 +4031,10 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, + entries = kcalloc(INTEL_PIPE_CRC_ENTRIES_NR, + sizeof(pipe_crc->entries[0]), + GFP_KERNEL); +- if (!entries) +- return -ENOMEM; ++ if (!entries) { ++ ret = -ENOMEM; ++ goto out; ++ } + + /* + * When IPS gets enabled, the pipe CRC changes. Since IPS gets +@@ -4081,7 +4090,12 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, + hsw_enable_ips(crtc); + } + +- return 0; ++ ret = 0; ++ ++out: ++ intel_display_power_put(dev_priv, power_domain); ++ ++ return ret; + } + + /* +diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h +index e7cd311..b0847b9 100644 +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -751,6 +751,7 @@ struct intel_csr { + uint32_t mmio_count; + i915_reg_t mmioaddr[8]; + uint32_t mmiodata[8]; ++ uint32_t dc_state; + }; + + #define DEV_INFO_FOR_EACH_FLAG(func, sep) \ +diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c +index 9c89df1..a7b4a524 100644 +--- a/drivers/gpu/drm/i915/intel_crt.c ++++ b/drivers/gpu/drm/i915/intel_crt.c +@@ -71,22 +71,29 @@ static bool intel_crt_get_hw_state(struct intel_encoder *encoder, + struct intel_crt *crt = intel_encoder_to_crt(encoder); + enum intel_display_power_domain power_domain; + u32 tmp; ++ bool ret; + + power_domain = intel_display_port_power_domain(encoder); +- if (!intel_display_power_is_enabled(dev_priv, power_domain)) ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + return false; + ++ ret = false; ++ + tmp = I915_READ(crt->adpa_reg); + + if (!(tmp & ADPA_DAC_ENABLE)) +- return false; ++ goto out; + + if (HAS_PCH_CPT(dev)) + *pipe = PORT_TO_PIPE_CPT(tmp); + else + *pipe = PORT_TO_PIPE(tmp); + +- return true; ++ ret = true; ++out: ++ intel_display_power_put(dev_priv, power_domain); ++ ++ return ret; + } + + static unsigned int intel_crt_get_flags(struct intel_encoder *encoder) +diff --git a/drivers/gpu/drm/i915/intel_csr.c b/drivers/gpu/drm/i915/intel_csr.c +index 9bb63a8..647d85e 100644 +--- a/drivers/gpu/drm/i915/intel_csr.c ++++ b/drivers/gpu/drm/i915/intel_csr.c +@@ -240,6 +240,8 @@ void intel_csr_load_program(struct drm_i915_private *dev_priv) + I915_WRITE(dev_priv->csr.mmioaddr[i], + dev_priv->csr.mmiodata[i]); + } ++ ++ dev_priv->csr.dc_state = 0; + } + + static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv, +diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c +index 54a165b..0f3df2c 100644 +--- a/drivers/gpu/drm/i915/intel_ddi.c ++++ b/drivers/gpu/drm/i915/intel_ddi.c +@@ -1969,13 +1969,16 @@ bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector) + enum transcoder cpu_transcoder; + enum intel_display_power_domain power_domain; + uint32_t tmp; ++ bool ret; + + power_domain = intel_display_port_power_domain(intel_encoder); +- if (!intel_display_power_is_enabled(dev_priv, power_domain)) ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + return false; + +- if (!intel_encoder->get_hw_state(intel_encoder, &pipe)) +- return false; ++ if (!intel_encoder->get_hw_state(intel_encoder, &pipe)) { ++ ret = false; ++ goto out; ++ } + + if (port == PORT_A) + cpu_transcoder = TRANSCODER_EDP; +@@ -1987,23 +1990,33 @@ bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector) + switch (tmp & TRANS_DDI_MODE_SELECT_MASK) { + case TRANS_DDI_MODE_SELECT_HDMI: + case TRANS_DDI_MODE_SELECT_DVI: +- return (type == DRM_MODE_CONNECTOR_HDMIA); ++ ret = type == DRM_MODE_CONNECTOR_HDMIA; ++ break; + + case TRANS_DDI_MODE_SELECT_DP_SST: +- if (type == DRM_MODE_CONNECTOR_eDP) +- return true; +- return (type == DRM_MODE_CONNECTOR_DisplayPort); ++ ret = type == DRM_MODE_CONNECTOR_eDP || ++ type == DRM_MODE_CONNECTOR_DisplayPort; ++ break; ++ + case TRANS_DDI_MODE_SELECT_DP_MST: + /* if the transcoder is in MST state then + * connector isn't connected */ +- return false; ++ ret = false; ++ break; + + case TRANS_DDI_MODE_SELECT_FDI: +- return (type == DRM_MODE_CONNECTOR_VGA); ++ ret = type == DRM_MODE_CONNECTOR_VGA; ++ break; + + default: +- return false; ++ ret = false; ++ break; + } ++ ++out: ++ intel_display_power_put(dev_priv, power_domain); ++ ++ return ret; + } + + bool intel_ddi_get_hw_state(struct intel_encoder *encoder, +@@ -2015,15 +2028,18 @@ bool intel_ddi_get_hw_state(struct intel_encoder *encoder, + enum intel_display_power_domain power_domain; + u32 tmp; + int i; ++ bool ret; + + power_domain = intel_display_port_power_domain(encoder); +- if (!intel_display_power_is_enabled(dev_priv, power_domain)) ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + return false; + ++ ret = false; ++ + tmp = I915_READ(DDI_BUF_CTL(port)); + + if (!(tmp & DDI_BUF_CTL_ENABLE)) +- return false; ++ goto out; + + if (port == PORT_A) { + tmp = I915_READ(TRANS_DDI_FUNC_CTL(TRANSCODER_EDP)); +@@ -2041,25 +2057,32 @@ bool intel_ddi_get_hw_state(struct intel_encoder *encoder, + break; + } + +- return true; +- } else { +- for (i = TRANSCODER_A; i <= TRANSCODER_C; i++) { +- tmp = I915_READ(TRANS_DDI_FUNC_CTL(i)); ++ ret = true; + +- if ((tmp & TRANS_DDI_PORT_MASK) +- == TRANS_DDI_SELECT_PORT(port)) { +- if ((tmp & TRANS_DDI_MODE_SELECT_MASK) == TRANS_DDI_MODE_SELECT_DP_MST) +- return false; ++ goto out; ++ } + +- *pipe = i; +- return true; +- } ++ for (i = TRANSCODER_A; i <= TRANSCODER_C; i++) { ++ tmp = I915_READ(TRANS_DDI_FUNC_CTL(i)); ++ ++ if ((tmp & TRANS_DDI_PORT_MASK) == TRANS_DDI_SELECT_PORT(port)) { ++ if ((tmp & TRANS_DDI_MODE_SELECT_MASK) == ++ TRANS_DDI_MODE_SELECT_DP_MST) ++ goto out; ++ ++ *pipe = i; ++ ret = true; ++ ++ goto out; + } + } + + DRM_DEBUG_KMS("No pipe for ddi port %c found\n", port_name(port)); + +- return false; ++out: ++ intel_display_power_put(dev_priv, power_domain); ++ ++ return ret; + } + + void intel_ddi_enable_pipe_clock(struct intel_crtc *intel_crtc) +@@ -2508,12 +2531,14 @@ static bool hsw_ddi_wrpll_get_hw_state(struct drm_i915_private *dev_priv, + { + uint32_t val; + +- if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS)) ++ if (!intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_PLLS)) + return false; + + val = I915_READ(WRPLL_CTL(pll->id)); + hw_state->wrpll = val; + ++ intel_display_power_put(dev_priv, POWER_DOMAIN_PLLS); ++ + return val & WRPLL_PLL_ENABLE; + } + +@@ -2523,12 +2548,14 @@ static bool hsw_ddi_spll_get_hw_state(struct drm_i915_private *dev_priv, + { + uint32_t val; + +- if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS)) ++ if (!intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_PLLS)) + return false; + + val = I915_READ(SPLL_CTL); + hw_state->spll = val; + ++ intel_display_power_put(dev_priv, POWER_DOMAIN_PLLS); ++ + return val & SPLL_PLL_ENABLE; + } + +@@ -2645,16 +2672,19 @@ static bool skl_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv, + uint32_t val; + unsigned int dpll; + const struct skl_dpll_regs *regs = skl_dpll_regs; ++ bool ret; + +- if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS)) ++ if (!intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_PLLS)) + return false; + ++ ret = false; ++ + /* DPLL0 is not part of the shared DPLLs, so pll->id is 0 for DPLL1 */ + dpll = pll->id + 1; + + val = I915_READ(regs[pll->id].ctl); + if (!(val & LCPLL_PLL_ENABLE)) +- return false; ++ goto out; + + val = I915_READ(DPLL_CTRL1); + hw_state->ctrl1 = (val >> (dpll * 6)) & 0x3f; +@@ -2664,8 +2694,12 @@ static bool skl_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv, + hw_state->cfgcr1 = I915_READ(regs[pll->id].cfgcr1); + hw_state->cfgcr2 = I915_READ(regs[pll->id].cfgcr2); + } ++ ret = true; + +- return true; ++out: ++ intel_display_power_put(dev_priv, POWER_DOMAIN_PLLS); ++ ++ return ret; + } + + static void skl_shared_dplls_init(struct drm_i915_private *dev_priv) +@@ -2932,13 +2966,16 @@ static bool bxt_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv, + { + enum port port = (enum port)pll->id; /* 1:1 port->PLL mapping */ + uint32_t val; ++ bool ret; + +- if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS)) ++ if (!intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_PLLS)) + return false; + ++ ret = false; ++ + val = I915_READ(BXT_PORT_PLL_ENABLE(port)); + if (!(val & PORT_PLL_ENABLE)) +- return false; ++ goto out; + + hw_state->ebb0 = I915_READ(BXT_PORT_PLL_EBB_0(port)); + hw_state->ebb0 &= PORT_PLL_P1_MASK | PORT_PLL_P2_MASK; +@@ -2985,7 +3022,12 @@ static bool bxt_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv, + I915_READ(BXT_PORT_PCS_DW12_LN23(port))); + hw_state->pcsdw12 &= LANE_STAGGER_MASK | LANESTAGGER_STRAP_OVRD; + +- return true; ++ ret = true; ++ ++out: ++ intel_display_power_put(dev_priv, POWER_DOMAIN_PLLS); ++ ++ return ret; + } + + static void bxt_shared_dplls_init(struct drm_i915_private *dev_priv) +@@ -3120,11 +3162,15 @@ bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv, + { + u32 temp; + +- if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) { ++ if (intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_AUDIO)) { + temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD); ++ ++ intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO); ++ + if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe)) + return true; + } ++ + return false; + } + +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 5feb657..46947ff 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -1351,18 +1351,21 @@ void assert_pipe(struct drm_i915_private *dev_priv, + bool cur_state; + enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv, + pipe); ++ enum intel_display_power_domain power_domain; + + /* if we need the pipe quirk it must be always on */ + if ((pipe == PIPE_A && dev_priv->quirks & QUIRK_PIPEA_FORCE) || + (pipe == PIPE_B && dev_priv->quirks & QUIRK_PIPEB_FORCE)) + state = true; + +- if (!intel_display_power_is_enabled(dev_priv, +- POWER_DOMAIN_TRANSCODER(cpu_transcoder))) { +- cur_state = false; +- } else { ++ power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder); ++ if (intel_display_power_get_if_enabled(dev_priv, power_domain)) { + u32 val = I915_READ(PIPECONF(cpu_transcoder)); + cur_state = !!(val & PIPECONF_ENABLE); ++ ++ intel_display_power_put(dev_priv, power_domain); ++ } else { ++ cur_state = false; + } + + I915_STATE_WARN(cur_state != state, +@@ -8171,18 +8174,22 @@ static bool i9xx_get_pipe_config(struct intel_crtc *crtc, + { + struct drm_device *dev = crtc->base.dev; + struct drm_i915_private *dev_priv = dev->dev_private; ++ enum intel_display_power_domain power_domain; + uint32_t tmp; ++ bool ret; + +- if (!intel_display_power_is_enabled(dev_priv, +- POWER_DOMAIN_PIPE(crtc->pipe))) ++ power_domain = POWER_DOMAIN_PIPE(crtc->pipe); ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + return false; + + pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe; + pipe_config->shared_dpll = DPLL_ID_PRIVATE; + ++ ret = false; ++ + tmp = I915_READ(PIPECONF(crtc->pipe)); + if (!(tmp & PIPECONF_ENABLE)) +- return false; ++ goto out; + + if (IS_G4X(dev) || IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) { + switch (tmp & PIPECONF_BPC_MASK) { +@@ -8262,7 +8269,12 @@ static bool i9xx_get_pipe_config(struct intel_crtc *crtc, + pipe_config->base.adjusted_mode.crtc_clock = + pipe_config->port_clock / pipe_config->pixel_multiplier; + +- return true; ++ ret = true; ++ ++out: ++ intel_display_power_put(dev_priv, power_domain); ++ ++ return ret; + } + + static void ironlake_init_pch_refclk(struct drm_device *dev) +@@ -9366,18 +9378,21 @@ static bool ironlake_get_pipe_config(struct intel_crtc *crtc, + { + struct drm_device *dev = crtc->base.dev; + struct drm_i915_private *dev_priv = dev->dev_private; ++ enum intel_display_power_domain power_domain; + uint32_t tmp; ++ bool ret; + +- if (!intel_display_power_is_enabled(dev_priv, +- POWER_DOMAIN_PIPE(crtc->pipe))) ++ power_domain = POWER_DOMAIN_PIPE(crtc->pipe); ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + return false; + + pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe; + pipe_config->shared_dpll = DPLL_ID_PRIVATE; + ++ ret = false; + tmp = I915_READ(PIPECONF(crtc->pipe)); + if (!(tmp & PIPECONF_ENABLE)) +- return false; ++ goto out; + + switch (tmp & PIPECONF_BPC_MASK) { + case PIPECONF_6BPC: +@@ -9440,7 +9455,12 @@ static bool ironlake_get_pipe_config(struct intel_crtc *crtc, + + ironlake_get_pfit_config(crtc, pipe_config); + +- return true; ++ ret = true; ++ ++out: ++ intel_display_power_put(dev_priv, power_domain); ++ ++ return ret; + } + + static void assert_can_disable_lcpll(struct drm_i915_private *dev_priv) +@@ -9950,12 +9970,17 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc, + { + struct drm_device *dev = crtc->base.dev; + struct drm_i915_private *dev_priv = dev->dev_private; +- enum intel_display_power_domain pfit_domain; ++ enum intel_display_power_domain power_domain; ++ unsigned long power_domain_mask; + uint32_t tmp; ++ bool ret; + +- if (!intel_display_power_is_enabled(dev_priv, +- POWER_DOMAIN_PIPE(crtc->pipe))) ++ power_domain = POWER_DOMAIN_PIPE(crtc->pipe); ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + return false; ++ power_domain_mask = BIT(power_domain); ++ ++ ret = false; + + pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe; + pipe_config->shared_dpll = DPLL_ID_PRIVATE; +@@ -9982,13 +10007,14 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc, + pipe_config->cpu_transcoder = TRANSCODER_EDP; + } + +- if (!intel_display_power_is_enabled(dev_priv, +- POWER_DOMAIN_TRANSCODER(pipe_config->cpu_transcoder))) +- return false; ++ power_domain = POWER_DOMAIN_TRANSCODER(pipe_config->cpu_transcoder); ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) ++ goto out; ++ power_domain_mask |= BIT(power_domain); + + tmp = I915_READ(PIPECONF(pipe_config->cpu_transcoder)); + if (!(tmp & PIPECONF_ENABLE)) +- return false; ++ goto out; + + haswell_get_ddi_port_state(crtc, pipe_config); + +@@ -9998,14 +10024,14 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc, + skl_init_scalers(dev, crtc, pipe_config); + } + +- pfit_domain = POWER_DOMAIN_PIPE_PANEL_FITTER(crtc->pipe); +- + if (INTEL_INFO(dev)->gen >= 9) { + pipe_config->scaler_state.scaler_id = -1; + pipe_config->scaler_state.scaler_users &= ~(1 << SKL_CRTC_INDEX); + } + +- if (intel_display_power_is_enabled(dev_priv, pfit_domain)) { ++ power_domain = POWER_DOMAIN_PIPE_PANEL_FITTER(crtc->pipe); ++ if (intel_display_power_get_if_enabled(dev_priv, power_domain)) { ++ power_domain_mask |= BIT(power_domain); + if (INTEL_INFO(dev)->gen >= 9) + skylake_get_pfit_config(crtc, pipe_config); + else +@@ -10023,7 +10049,13 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc, + pipe_config->pixel_multiplier = 1; + } + +- return true; ++ ret = true; ++ ++out: ++ for_each_power_domain(power_domain, power_domain_mask) ++ intel_display_power_put(dev_priv, power_domain); ++ ++ return ret; + } + + static void i845_update_cursor(struct drm_crtc *crtc, u32 base, bool on) +@@ -13630,7 +13662,7 @@ static bool ibx_pch_dpll_get_hw_state(struct drm_i915_private *dev_priv, + { + uint32_t val; + +- if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS)) ++ if (!intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_PLLS)) + return false; + + val = I915_READ(PCH_DPLL(pll->id)); +@@ -13638,6 +13670,8 @@ static bool ibx_pch_dpll_get_hw_state(struct drm_i915_private *dev_priv, + hw_state->fp0 = I915_READ(PCH_FP0(pll->id)); + hw_state->fp1 = I915_READ(PCH_FP1(pll->id)); + ++ intel_display_power_put(dev_priv, POWER_DOMAIN_PLLS); ++ + return val & DPLL_VCO_ENABLE; + } + +@@ -15568,10 +15602,12 @@ void i915_redisable_vga(struct drm_device *dev) + * level, just check if the power well is enabled instead of trying to + * follow the "don't touch the power well if we don't need it" policy + * the rest of the driver uses. */ +- if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_VGA)) ++ if (!intel_display_power_get_if_enabled(dev_priv, POWER_DOMAIN_VGA)) + return; + + i915_redisable_vga_power_on(dev); ++ ++ intel_display_power_put(dev_priv, POWER_DOMAIN_VGA); + } + + static bool primary_get_hw_state(struct intel_plane *plane) +diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c +index 1bbd67b..1d8de43 100644 +--- a/drivers/gpu/drm/i915/intel_dp.c ++++ b/drivers/gpu/drm/i915/intel_dp.c +@@ -2362,15 +2362,18 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder, + struct drm_i915_private *dev_priv = dev->dev_private; + enum intel_display_power_domain power_domain; + u32 tmp; ++ bool ret; + + power_domain = intel_display_port_power_domain(encoder); +- if (!intel_display_power_is_enabled(dev_priv, power_domain)) ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + return false; + ++ ret = false; ++ + tmp = I915_READ(intel_dp->output_reg); + + if (!(tmp & DP_PORT_EN)) +- return false; ++ goto out; + + if (IS_GEN7(dev) && port == PORT_A) { + *pipe = PORT_TO_PIPE_CPT(tmp); +@@ -2381,7 +2384,9 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder, + u32 trans_dp = I915_READ(TRANS_DP_CTL(p)); + if (TRANS_DP_PIPE_TO_PORT(trans_dp) == port) { + *pipe = p; +- return true; ++ ret = true; ++ ++ goto out; + } + } + +@@ -2393,7 +2398,12 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder, + *pipe = PORT_TO_PIPE(tmp); + } + +- return true; ++ ret = true; ++ ++out: ++ intel_display_power_put(dev_priv, power_domain); ++ ++ return ret; + } + + static void intel_dp_get_config(struct intel_encoder *encoder, +diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h +index ea54158..df7f3cb 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -1428,6 +1428,8 @@ bool __intel_display_power_is_enabled(struct drm_i915_private *dev_priv, + enum intel_display_power_domain domain); + void intel_display_power_get(struct drm_i915_private *dev_priv, + enum intel_display_power_domain domain); ++bool intel_display_power_get_if_enabled(struct drm_i915_private *dev_priv, ++ enum intel_display_power_domain domain); + void intel_display_power_put(struct drm_i915_private *dev_priv, + enum intel_display_power_domain domain); + +@@ -1514,6 +1516,7 @@ enable_rpm_wakeref_asserts(struct drm_i915_private *dev_priv) + enable_rpm_wakeref_asserts(dev_priv) + + void intel_runtime_pm_get(struct drm_i915_private *dev_priv); ++bool intel_runtime_pm_get_if_in_use(struct drm_i915_private *dev_priv); + void intel_runtime_pm_get_noresume(struct drm_i915_private *dev_priv); + void intel_runtime_pm_put(struct drm_i915_private *dev_priv); + +diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c +index 44742fa..0193c62a 100644 +--- a/drivers/gpu/drm/i915/intel_dsi.c ++++ b/drivers/gpu/drm/i915/intel_dsi.c +@@ -664,13 +664,16 @@ static bool intel_dsi_get_hw_state(struct intel_encoder *encoder, + struct drm_device *dev = encoder->base.dev; + enum intel_display_power_domain power_domain; + enum port port; ++ bool ret; + + DRM_DEBUG_KMS("\n"); + + power_domain = intel_display_port_power_domain(encoder); +- if (!intel_display_power_is_enabled(dev_priv, power_domain)) ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + return false; + ++ ret = false; ++ + /* XXX: this only works for one DSI output */ + for_each_dsi_port(port, intel_dsi->ports) { + i915_reg_t ctrl_reg = IS_BROXTON(dev) ? +@@ -691,12 +694,16 @@ static bool intel_dsi_get_hw_state(struct intel_encoder *encoder, + if (dpi_enabled || (func & CMD_MODE_DATA_WIDTH_MASK)) { + if (I915_READ(MIPI_DEVICE_READY(port)) & DEVICE_READY) { + *pipe = port == PORT_A ? PIPE_A : PIPE_B; +- return true; ++ ret = true; ++ ++ goto out; + } + } + } ++out: ++ intel_display_power_put(dev_priv, power_domain); + +- return false; ++ return ret; + } + + static void intel_dsi_get_config(struct intel_encoder *encoder, +diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c +index 4a77639..cb5d1b1 100644 +--- a/drivers/gpu/drm/i915/intel_hdmi.c ++++ b/drivers/gpu/drm/i915/intel_hdmi.c +@@ -880,15 +880,18 @@ static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder, + struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); + enum intel_display_power_domain power_domain; + u32 tmp; ++ bool ret; + + power_domain = intel_display_port_power_domain(encoder); +- if (!intel_display_power_is_enabled(dev_priv, power_domain)) ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + return false; + ++ ret = false; ++ + tmp = I915_READ(intel_hdmi->hdmi_reg); + + if (!(tmp & SDVO_ENABLE)) +- return false; ++ goto out; + + if (HAS_PCH_CPT(dev)) + *pipe = PORT_TO_PIPE_CPT(tmp); +@@ -897,7 +900,12 @@ static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder, + else + *pipe = PORT_TO_PIPE(tmp); + +- return true; ++ ret = true; ++ ++out: ++ intel_display_power_put(dev_priv, power_domain); ++ ++ return ret; + } + + static void intel_hdmi_get_config(struct intel_encoder *encoder, +diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c +index 0da0240..bc04d8d 100644 +--- a/drivers/gpu/drm/i915/intel_lvds.c ++++ b/drivers/gpu/drm/i915/intel_lvds.c +@@ -75,22 +75,30 @@ static bool intel_lvds_get_hw_state(struct intel_encoder *encoder, + struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base); + enum intel_display_power_domain power_domain; + u32 tmp; ++ bool ret; + + power_domain = intel_display_port_power_domain(encoder); +- if (!intel_display_power_is_enabled(dev_priv, power_domain)) ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + return false; + ++ ret = false; ++ + tmp = I915_READ(lvds_encoder->reg); + + if (!(tmp & LVDS_PORT_EN)) +- return false; ++ goto out; + + if (HAS_PCH_CPT(dev)) + *pipe = PORT_TO_PIPE_CPT(tmp); + else + *pipe = PORT_TO_PIPE(tmp); + +- return true; ++ ret = true; ++ ++out: ++ intel_display_power_put(dev_priv, power_domain); ++ ++ return ret; + } + + static void intel_lvds_get_config(struct intel_encoder *encoder, +diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c +index a234687..b28c29f 100644 +--- a/drivers/gpu/drm/i915/intel_pm.c ++++ b/drivers/gpu/drm/i915/intel_pm.c +@@ -2829,7 +2829,10 @@ void skl_ddb_get_hw_state(struct drm_i915_private *dev_priv, + memset(ddb, 0, sizeof(*ddb)); + + for_each_pipe(dev_priv, pipe) { +- if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PIPE(pipe))) ++ enum intel_display_power_domain power_domain; ++ ++ power_domain = POWER_DOMAIN_PIPE(pipe); ++ if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) + continue; + + for_each_plane(dev_priv, pipe, plane) { +@@ -2841,6 +2844,8 @@ void skl_ddb_get_hw_state(struct drm_i915_private *dev_priv, + val = I915_READ(CUR_BUF_CFG(pipe)); + skl_ddb_entry_init_from_hw(&ddb->plane[pipe][PLANE_CURSOR], + val); ++ ++ intel_display_power_put(dev_priv, power_domain); + } + } + +diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c +index ddbdbff..678ed34 100644 +--- a/drivers/gpu/drm/i915/intel_runtime_pm.c ++++ b/drivers/gpu/drm/i915/intel_runtime_pm.c +@@ -470,6 +470,43 @@ static void gen9_set_dc_state_debugmask_memory_up( + } + } + ++static void gen9_write_dc_state(struct drm_i915_private *dev_priv, ++ u32 state) ++{ ++ int rewrites = 0; ++ int rereads = 0; ++ u32 v; ++ ++ I915_WRITE(DC_STATE_EN, state); ++ ++ /* It has been observed that disabling the dc6 state sometimes ++ * doesn't stick and dmc keeps returning old value. Make sure ++ * the write really sticks enough times and also force rewrite until ++ * we are confident that state is exactly what we want. ++ */ ++ do { ++ v = I915_READ(DC_STATE_EN); ++ ++ if (v != state) { ++ I915_WRITE(DC_STATE_EN, state); ++ rewrites++; ++ rereads = 0; ++ } else if (rereads++ > 5) { ++ break; ++ } ++ ++ } while (rewrites < 100); ++ ++ if (v != state) ++ DRM_ERROR("Writing dc state to 0x%x failed, now 0x%x\n", ++ state, v); ++ ++ /* Most of the times we need one retry, avoid spam */ ++ if (rewrites > 1) ++ DRM_DEBUG_KMS("Rewrote dc state to 0x%x %d times\n", ++ state, rewrites); ++} ++ + static void gen9_set_dc_state(struct drm_i915_private *dev_priv, uint32_t state) + { + uint32_t val; +@@ -494,10 +531,18 @@ static void gen9_set_dc_state(struct drm_i915_private *dev_priv, uint32_t state) + val = I915_READ(DC_STATE_EN); + DRM_DEBUG_KMS("Setting DC state from %02x to %02x\n", + val & mask, state); ++ ++ /* Check if DMC is ignoring our DC state requests */ ++ if ((val & mask) != dev_priv->csr.dc_state) ++ DRM_ERROR("DC state mismatch (0x%x -> 0x%x)\n", ++ dev_priv->csr.dc_state, val & mask); ++ + val &= ~mask; + val |= state; +- I915_WRITE(DC_STATE_EN, val); +- POSTING_READ(DC_STATE_EN); ++ ++ gen9_write_dc_state(dev_priv, val); ++ ++ dev_priv->csr.dc_state = val & mask; + } + + void bxt_enable_dc9(struct drm_i915_private *dev_priv) +@@ -1442,6 +1487,22 @@ static void chv_pipe_power_well_disable(struct drm_i915_private *dev_priv, + chv_set_pipe_power_well(dev_priv, power_well, false); + } + ++static void ++__intel_display_power_get_domain(struct drm_i915_private *dev_priv, ++ enum intel_display_power_domain domain) ++{ ++ struct i915_power_domains *power_domains = &dev_priv->power_domains; ++ struct i915_power_well *power_well; ++ int i; ++ ++ for_each_power_well(i, power_well, BIT(domain), power_domains) { ++ if (!power_well->count++) ++ intel_power_well_enable(dev_priv, power_well); ++ } ++ ++ power_domains->domain_use_count[domain]++; ++} ++ + /** + * intel_display_power_get - grab a power domain reference + * @dev_priv: i915 device instance +@@ -1457,24 +1518,53 @@ static void chv_pipe_power_well_disable(struct drm_i915_private *dev_priv, + void intel_display_power_get(struct drm_i915_private *dev_priv, + enum intel_display_power_domain domain) + { +- struct i915_power_domains *power_domains; +- struct i915_power_well *power_well; +- int i; ++ struct i915_power_domains *power_domains = &dev_priv->power_domains; + + intel_runtime_pm_get(dev_priv); + +- power_domains = &dev_priv->power_domains; ++ mutex_lock(&power_domains->lock); ++ ++ __intel_display_power_get_domain(dev_priv, domain); ++ ++ mutex_unlock(&power_domains->lock); ++} ++ ++/** ++ * intel_display_power_get_if_enabled - grab a reference for an enabled display power domain ++ * @dev_priv: i915 device instance ++ * @domain: power domain to reference ++ * ++ * This function grabs a power domain reference for @domain and ensures that the ++ * power domain and all its parents are powered up. Therefore users should only ++ * grab a reference to the innermost power domain they need. ++ * ++ * Any power domain reference obtained by this function must have a symmetric ++ * call to intel_display_power_put() to release the reference again. ++ */ ++bool intel_display_power_get_if_enabled(struct drm_i915_private *dev_priv, ++ enum intel_display_power_domain domain) ++{ ++ struct i915_power_domains *power_domains = &dev_priv->power_domains; ++ bool is_enabled; ++ ++ if (!intel_runtime_pm_get_if_in_use(dev_priv)) ++ return false; + + mutex_lock(&power_domains->lock); + +- for_each_power_well(i, power_well, BIT(domain), power_domains) { +- if (!power_well->count++) +- intel_power_well_enable(dev_priv, power_well); ++ if (__intel_display_power_is_enabled(dev_priv, domain)) { ++ __intel_display_power_get_domain(dev_priv, domain); ++ is_enabled = true; ++ } else { ++ is_enabled = false; + } + +- power_domains->domain_use_count[domain]++; +- + mutex_unlock(&power_domains->lock); ++ ++ if (!is_enabled) ++ intel_runtime_pm_put(dev_priv); ++ ++ return is_enabled; + } + + /** +@@ -2246,6 +2336,43 @@ void intel_runtime_pm_get(struct drm_i915_private *dev_priv) + } + + /** ++ * intel_runtime_pm_get_if_in_use - grab a runtime pm reference if device in use ++ * @dev_priv: i915 device instance ++ * ++ * This function grabs a device-level runtime pm reference if the device is ++ * already in use and ensures that it is powered up. ++ * ++ * Any runtime pm reference obtained by this function must have a symmetric ++ * call to intel_runtime_pm_put() to release the reference again. ++ */ ++bool intel_runtime_pm_get_if_in_use(struct drm_i915_private *dev_priv) ++{ ++ struct drm_device *dev = dev_priv->dev; ++ struct device *device = &dev->pdev->dev; ++ int ret; ++ ++ if (!IS_ENABLED(CONFIG_PM)) ++ return true; ++ ++ ret = pm_runtime_get_if_in_use(device); ++ ++ /* ++ * In cases runtime PM is disabled by the RPM core and we get an ++ * -EINVAL return value we are not supposed to call this function, ++ * since the power state is undefined. This applies atm to the ++ * late/early system suspend/resume handlers. ++ */ ++ WARN_ON_ONCE(ret < 0); ++ if (ret <= 0) ++ return false; ++ ++ atomic_inc(&dev_priv->pm.wakeref_count); ++ assert_rpm_wakelock_held(dev_priv); ++ ++ return true; ++} ++ ++/** + * intel_runtime_pm_get_noresume - grab a runtime pm reference + * @dev_priv: i915 device instance + * diff --git a/modules/system/thinkpad.nix b/modules/hardware/thinkpad.nix index 025ce760..ba55c80b 100644 --- a/modules/system/thinkpad.nix +++ b/modules/hardware/thinkpad.nix @@ -16,9 +16,9 @@ in environment.systemPackages = [ pkgs.acpi ]; # for wifi - hardware.enableAllFirmware = true; + hardware.enableAllFirmware = mkDefault true; - hardware.trackpoint = { + hardware.trackpoint = mkDefault { enable = true; emulateWheel = true; speed = 250; @@ -26,6 +26,6 @@ in }; # TLP Linux Advanced Power Management - services.tlp.enable = true; + services.tlp.enable = mkDefault true; }; } diff --git a/modules/module-list.nix b/modules/module-list.nix index a606acb3..a0672259 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -1,12 +1,12 @@ [ ./hardware/gamecontroller.nix ./hardware/t100ha + ./hardware/thinkpad.nix ./profiles/common.nix ./profiles/tests.nix ./services/multipath-vpn.nix ./services/postfix ./system/iso.nix - ./system/thinkpad.nix ./user/aszlig/profiles/base.nix ./user/aszlig/profiles/workstation ./user/aszlig/programs/gajim diff --git a/modules/user/aszlig/profiles/workstation/default.nix b/modules/user/aszlig/profiles/workstation/default.nix index 2e0d8a40..01eaaeaf 100644 --- a/modules/user/aszlig/profiles/workstation/default.nix +++ b/modules/user/aszlig/profiles/workstation/default.nix @@ -165,14 +165,11 @@ in { virtualisation.virtualbox.host.enable = true; - users.extraUsers.aszlig = { + users.users.aszlig = { uid = 1000; + isNormalUser = true; description = "aszlig"; - group = "users"; extraGroups = [ "wheel" "video" ]; - home = "/home/aszlig"; - useDefaultShell = true; - createHome = true; }; }; } diff --git a/modules/user/aszlig/system/kernel.nix b/modules/user/aszlig/system/kernel.nix index b1f666e4..39128817 100644 --- a/modules/user/aszlig/system/kernel.nix +++ b/modules/user/aszlig/system/kernel.nix @@ -18,11 +18,11 @@ let in pkgs.writeText "generated.kconf" (mkConf exprs + "\n"); mainlineKernel = { - version = "4.4.0-rc8"; + version = "4.5.0-rc5"; src = pkgs.fetchgit { url = git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git; - rev = "02006f7a7a715af10974a30b7ad8e6ee340f954c"; - sha256 = "1m08bjbizh2w04l17rq0mkmrayfrhrrsbymaawlr5mi2gvv9rmca"; + rev = "81f70ba233d5f660e1ea5fe23260ee323af5d53a"; + sha256 = "0zr5fq85plb3mpbwz6rczy4478p0rp6mgd0p9bza7wi2ny2xw87a"; }; }; diff --git a/pkgs/games/steam/starbound.nix b/pkgs/games/steam/starbound.nix index ba63fcfa..0dab7cf2 100644 --- a/pkgs/games/steam/starbound.nix +++ b/pkgs/games/steam/starbound.nix @@ -33,30 +33,34 @@ let else if stdenv.system == "x86_64-cygwin" then "win64" else throw "Unsupported system ${stdenv.system} for Starbound"; - upstream = let - attrs = if flavor == "stable" then { - name = "starbound"; - appId = 211820; - depotId = 211821; - manifestId = 1842730272313189605; - sha256 = "0qppfn56c778wsg38hi6sxgi3rl9nv72h9rmmxybi1vzpf3p49py"; - } else if flavor == "unstable" then { - name = "starbound-unstable"; - appId = 367540; - depotId = 367541; - manifestId = 6970641909803280413; - sha256 = "0qppfn56c778wsg38hi6sxgi3rl9nv72h9rmmxybi1vzpf3p49py"; - } else throw "Unsupported flavor, use either `stable' or `unstable'."; - in fetchSteam (attrs // { + upstreamInfo = if flavor == "stable" then { + name = "starbound"; + version = "20151216"; + appId = 211820; + depotId = 211821; + manifestId = 1842730272313189605; + sha256 = "0qppfn56c778wsg38hi6sxgi3rl9nv72h9rmmxybi1vzpf3p49py"; + } else if flavor == "unstable" then { + name = "starbound-unstable"; + version = "20160223"; + appId = 367540; + depotId = 367541; + manifestId = 6970641909803280413; + sha256 = "0qppfn56c778wsg38hi6sxgi3rl9nv72h9rmmxybi1vzpf3p49py"; + } else throw "Unsupported flavor, use either `stable' or `unstable'."; + + upstream = fetchSteam { + inherit (upstreamInfo) name appId depotId manifestId sha256; fileList = [ "^(?:assets|tiled)/" ( "^${binpath}(?:/Starbound\\.app/Contents/MacOS)?" + "/(?:[a-zA-Z0-9_-]+(?:\\.exe)?|sbboot\\.config)$") ]; - }); + }; in stdenv.mkDerivation { - name = "${upstream.name}-20160208"; + name = "${upstreamInfo.name}-${upstreamInfo.version}"; + inherit (upstreamInfo) version; unpackPhase = ":"; diff --git a/pkgs/nixops/default.nix b/pkgs/nixops/default.nix index af16b56c..e1dddb72 100644 --- a/pkgs/nixops/default.nix +++ b/pkgs/nixops/default.nix @@ -1,8 +1,8 @@ { stdenv, fetchFromGitHub, fetchpatch, git }: let - rev = "9076dbc722a4125b2a08d4b49d94b2073b71578f"; - sha256 = "05zc12spjk9pcspqq88wz3k4rgqy8bsxy28ysjw752959b95ys1z"; + rev = "b66db0aa1c2bea64fe821ff67d51555c85943572"; + sha256 = "15wwhah9ghwn7w3nq0jj0vqyz2al76w3vwfnl4aklbffmj2jbzwy"; master = stdenv.mkDerivation rec { name = "nixops-upstream-patched"; |