diff --git a/hosts/modules/hal/pine64/default.nix b/hosts/modules/hal/pine64/default.nix index 47ecbfe8b..ddc3587f7 100644 --- a/hosts/modules/hal/pine64/default.nix +++ b/hosts/modules/hal/pine64/default.nix @@ -17,6 +17,15 @@ in # the filtering/calibration is bad that it causes the screen to go fully dark at times. # boot.blacklistedKernelModules = [ "stk3310" ]; + boot.blacklistedKernelModules = [ + # XXX: un-blacklisting these modules MAY break the camera (i didn't narrow down the exact set) + "gc2145_mipi" + "leds_group_multicolor" + "pinctrl_axp209" + # "led_class_multicolor" + # "v4l2_cci" + ]; + boot.extraModprobeConfig = '' # 2024-09-01: disable power-saving if using the rtw88 rtl8723cs WiFi driver # power saving was observed to cause frequent disconnections and reconnections diff --git a/hosts/modules/hal/pine64/kernel.nix b/hosts/modules/hal/pine64/kernel.nix index 689ef05fb..4b749ab42 100644 --- a/hosts/modules/hal/pine64/kernel.nix +++ b/hosts/modules/hal/pine64/kernel.nix @@ -41,7 +41,7 @@ in boot.kernelPackages = pkgs.linuxPackagesFor (pkgs.linux-armbian.override { usePmosConfig = true; withNixpkgsConfig = true; - withFullConfig = false; + withFullConfig = true; withModemPower = true; }); diff --git a/pkgs/additional/linux-armbian/default.nix b/pkgs/additional/linux-armbian/default.nix index e10ec269c..e85b854df 100644 --- a/pkgs/additional/linux-armbian/default.nix +++ b/pkgs/additional/linux-armbian/default.nix @@ -9,7 +9,7 @@ sane-kernel-tools, usePmosConfig ? true, withNixpkgsConfig ? true, - withFullConfig ? false, + withFullConfig ? true, withModemPower ? true, #VVV nixpkgs calls `.override` on the kernel to configure additional things, but we don't care about those things ... @@ -26,7 +26,7 @@ linux_latest.override { DTB = true; #< XXX: not sure if actually needed autoModules = withFullConfig; - preferBuiltin = withFullConfig; + preferBuiltin = true; enableCommonConfig = withNixpkgsConfig; @@ -271,7 +271,7 @@ linux_latest.override { # # byName."Defconfigs-for-all-my-devices" # # byName."Update-defconfigs" # ] ++ - lib.optionals withNixpkgsConfig [ + lib.optionals withFullConfig [ { name = "fix-compilation-specific-to-megi"; patch = null; @@ -285,6 +285,8 @@ linux_latest.override { # make[3]: *** [../scripts/Makefile.build:289: drivers/video/fbdev/sun5i-eink-neon.o] Error 1 FB_SUN5I_EINK = no; BES2600 = no; # fails to compile (implicit declaration of function 'ieee80211_tx_status'; did you mean 'ieee80211_tx_status_ni') + + # SUN8I_DE2_CCU = lib.mkForce module; #< want:y, got:M }; } # { @@ -304,88 +306,88 @@ linux_latest.override { # DRM = lib.mkForce module; # }; # } - { - name = "enable-rtw88-wifi-drivers"; - patch = null; - extraStructuredConfig = with lib.kernel; { - # default nixpkgs/pmos config enables RTW88, but not RTW88_8723CS. - # but the pinephone uses a 8723BS/8723CS chipset, so enable these - # and anything else that could possibly be needed, since these things are tangled. - # TODO: reduce this, this is surely more than i actually need - # RTL8187_LEDS=y - # RTLWIFI_DEBUG=y - RTL8180 = module; - RTL8187 = module; - RTL8188EE = module; - RTL8192CE = module; - RTL8192CU = module; - RTL8192C_COMMON = module; - RTL8192DE = module; - RTL8192D_COMMON = module; - RTL8192EE = module; - RTL8192SE = module; - RTL8723AE = module; - RTL8723BE = module; - RTL8723_COMMON = module; - RTL8821AE = module; - RTL8XXXU = module; - RTLBTCOEXIST = module; - RTLWIFI = module; - RTLWIFI_PCI = module; - RTLWIFI_USB = module; - RTW88_8703B = module; - RTW88_8723CS = module; - RTW88_8723D = module; - RTW88_8723DE = module; - RTW88_8723DS = module; - RTW88_8723DU = module; - RTW88_8723X = module; - RTW88_8821C = module; - RTW88_8821CE = module; - RTW88_8821CS = module; - RTW88_8821CU = module; - RTW88_8822BS = module; - RTW88_8822BU = module; - RTW88_8822CS = module; - RTW88_8822CU = module; - RTW88_SDIO = module; - RTW88_USB = module; - }; - } - { - # this could be enabled for *all* systems, but i'm not sure i really want that. - name = "quality-of-life"; - patch = null; - extraStructuredConfig = with lib.kernel; { - # optimize for faster builds. - # see - # note that several options can re-enable DEBUG_KERNEL (such as DEBUG_LIST) - # DEBUG_KERNEL = lib.mkForce no; # option group which seems to just gate the other DEBUG_ opts? - DEBUG_INFO = lib.mkForce no; # for gdb debugging (does it impact kernel stacktraces, too?) - # DEBUG_INFO_NONE = lib.mkForce no; - DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT = lib.mkForce no; - # DEBUG_LIST = lib.mkForce no; - # DEBUG_MISC = lib.mkForce no; - # DEBUG_FS = no; + # { + # name = "enable-rtw88-wifi-drivers"; + # patch = null; + # extraStructuredConfig = with lib.kernel; { + # # default nixpkgs/pmos config enables RTW88, but not RTW88_8723CS. + # # but the pinephone uses a 8723BS/8723CS chipset, so enable these + # # and anything else that could possibly be needed, since these things are tangled. + # # TODO: reduce this, this is surely more than i actually need + # # RTL8187_LEDS=y + # # RTLWIFI_DEBUG=y + # # RTL8180 = module; + # # RTL8187 = module; + # # RTL8188EE = module; + # # RTL8192CE = module; + # # RTL8192CU = module; + # # RTL8192C_COMMON = module; + # # RTL8192DE = module; + # # RTL8192D_COMMON = module; + # # RTL8192EE = module; + # # RTL8192SE = module; + # # RTL8723AE = module; + # # RTL8723BE = module; + # # RTL8723_COMMON = module; + # # RTL8821AE = module; + # # RTL8XXXU = module; + # # RTLBTCOEXIST = module; + # # RTLWIFI = module; + # # RTLWIFI_PCI = module; + # # RTLWIFI_USB = module; + # RTW88_8703B = module; + # RTW88_8723CS = module; + # RTW88_8723D = module; + # RTW88_8723DE = module; + # RTW88_8723DS = module; + # RTW88_8723DU = module; + # RTW88_8723X = module; + # RTW88_8821C = module; + # RTW88_8821CE = module; + # RTW88_8821CS = module; + # RTW88_8821CU = module; + # RTW88_8822BS = module; + # RTW88_8822BU = module; + # RTW88_8822CS = module; + # RTW88_8822CU = module; + # RTW88_SDIO = module; + # RTW88_USB = module; + # }; + # } + # { + # # this could be enabled for *all* systems, but i'm not sure i really want that. + # name = "quality-of-life"; + # patch = null; + # extraStructuredConfig = with lib.kernel; { + # # optimize for faster builds. + # # see + # # note that several options can re-enable DEBUG_KERNEL (such as DEBUG_LIST) + # # DEBUG_KERNEL = lib.mkForce no; # option group which seems to just gate the other DEBUG_ opts? + # DEBUG_INFO = lib.mkForce no; # for gdb debugging (does it impact kernel stacktraces, too?) + # # DEBUG_INFO_NONE = lib.mkForce no; + # DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT = lib.mkForce no; + # # DEBUG_LIST = lib.mkForce no; + # # DEBUG_MISC = lib.mkForce no; + # # DEBUG_FS = no; - DEBUG_INFO_BTF = lib.mkForce no; # BPF debug symbols. rec by - # SCHED_DEBUG = lib.mkForce no; # determines /sys/kernel/debug/sched - SUNRPC_DEBUG = lib.mkForce no; - # shave 500ms off Pinephone boot time (dmesg | grep raid6) - # - by default raid6 (on behalf of btrfs) will compute the fastest algorithms at boot. - # - AFAICT, this only comes into effect if using raid (i don't). - # - in any case, on moby, the fastest benchmark happens to be the default anyway. - # - on lappy/servo/desko, the default is about 3% slower than the fastest. but they compute this in < 100ms. - RAID6_PQ_BENCHMARK = no; - }; - } + # DEBUG_INFO_BTF = lib.mkForce no; # BPF debug symbols. rec by + # # SCHED_DEBUG = lib.mkForce no; # determines /sys/kernel/debug/sched + # SUNRPC_DEBUG = lib.mkForce no; + # # shave 500ms off Pinephone boot time (dmesg | grep raid6) + # # - by default raid6 (on behalf of btrfs) will compute the fastest algorithms at boot. + # # - AFAICT, this only comes into effect if using raid (i don't). + # # - in any case, on moby, the fastest benchmark happens to be the default anyway. + # # - on lappy/servo/desko, the default is about 3% slower than the fastest. but they compute this in < 100ms. + # RAID6_PQ_BENCHMARK = lib.mkForce no; + # }; + # } ] ++ lib.optionals withModemPower [ { name = "enable-megi-modem-power"; patch = null; extraStructuredConfig = with lib.kernel; { # enable /sys/class/modem-power, a thing specific to Megi's kernel/patches - MODEM_POWER = yes; + MODEM_POWER = module; }; } # ] ++ lib.optionals withNixpkgsConfig [ @@ -402,7 +404,7 @@ linux_latest.override { (sane-kernel-tools.parseDefconfigStructuredNonempty linux-postmarketos-allwinner.defconfigStr) ([ # remove attrs which nixpkgs wants to set for itself, only because the kernel config options are so fucked that i can't figure out how to override things without breaking eval - "RAID6_PQ_BENCHMARK" + # "RAID6_PQ_BENCHMARK" # these options have changed since the version which pmos ships? or pmos just ships invalid values # "repeated questions" @@ -432,12 +434,14 @@ linux_latest.override { "NLS_ISO8859_1" #< nixpkgs:m, pmos:y "NR_CPUS" - # "PREEMPT" #< nixpkgs:(n), pmos:y - # "STANDALONE" - # "TRANSPARENT_HUGEPAGE_ALWAYS" - # "UEVENT_HELPER" - # "USB_SERIAL" - # "ZSMALLOC" + "CMA_SIZE_MBYTES" + "DEFAULT_MMAP_MIN_ADDR" + "PREEMPT" + "STANDALONE" + "TRANSPARENT_HUGEPAGE_ALWAYS" + "UEVENT_HELPER" + "USB_SERIAL" + "ZSMALLOC" # "DRM_LIMA" # "DRM_PANFROST" @@ -448,14 +452,19 @@ linux_latest.override { "CC_VERSION_TEXT" "GCC_VERSION" ] ++ lib.optionals (withNixpkgsConfig && withFullConfig) [ - "BLK_DEV_DM" #< want:y, actual:m - "VFIO" #< want:y, actual:m + # "STMMAC_ETH" #< autoModules:m, pmos:y + # "STMMAC_PLATFORM" #< autoModules:m, pmos:y + # "DWMAC_GENERIC" #< autoModules:m, pmos:y + # "DWMAC_SUNXI" #< autoModules:m, pmos:y + # "DWMAC_SUN8I" #< autoModules:m, pmos:y + "BLK_DEV_DM" #< autoModules:m, pmos:y + "VFIO" #< autoModules:m, pmos:y ] ); } - ] ++ lib.optionals (withNixpkgsConfig || !usePmosConfig) [ + ] ++ lib.optionals (!usePmosConfig) [ { - name = "enable options for libcamera"; + name = "enable options for Pinephone"; patch = null; extraStructuredConfig = with lib.kernel; { # borrowed from postmarketOS, "to enable libcamera development" @@ -468,32 +477,35 @@ linux_latest.override { # - pinephone in mainline linux, postmarketOS, defaults to 7 # - nixos defaults to ... 19? CMA_AREAS = freeform "7"; - DRM_ACCEL = lib.mkForce no; + # DRM_ACCEL = lib.mkForce no; - CMA_SIZE_MBYTES = lib.mkForce (freeform "256"); #< also available at boot time via `cma=256M` CLI + # CMA_SIZE_MBYTES = lib.mkForce (freeform "256"); #< also available at boot time via `cma=256M` CLI # #vvv aside from SUN50I_IOMMU, this is just upgrading modules to `y` # DMA_SUN6I = yes; - # SUN50I_IOMMU = yes; + SUN50I_IOMMU = yes; # VIDEOBUF2_CORE = yes; # VIDEOBUF2_V4L2 = yes; # VIDEOBUF2_MEMOPS = yes; # VIDEOBUF2_DMA_CONTIG = yes; - # VIDEO_SUNXI = yes; - # # VIDEO_SUNXI_CEDRUS = yes; #< implied (i think) + VIDEO_SUNXI = yes; + VIDEO_SUNXI_CEDRUS = yes; + # # VIDEO_SUNXI_CEDRUS = module; #< implied by VIDEO_SUNXI # #^^^ this isn't enough to get camera working - # DRM = lib.mkForce yes; #< upgrade from module to builtin - DEFAULT_MMAP_MIN_ADDR = lib.mkForce (freeform "4096"); - STANDALONE = lib.mkForce no; - PREEMPT = lib.mkForce yes; - TRANSPARENT_HUGEPAGE_ALWAYS = lib.mkForce yes; - ZSMALLOC = lib.mkForce no; - UEVENT_HELPER = lib.mkForce yes; - USB_SERIAL = lib.mkForce module; - ZSWAP = lib.mkForce no; - # ZPOOL = lib.mkForce no; + MFD_SUN6I_PRCM = yes; + + # # DRM = lib.mkForce yes; #< upgrade from module to builtin + # DEFAULT_MMAP_MIN_ADDR = lib.mkForce (freeform "4096"); + # STANDALONE = lib.mkForce no; + # PREEMPT = lib.mkForce yes; + # TRANSPARENT_HUGEPAGE_ALWAYS = lib.mkForce yes; + # ZSMALLOC = lib.mkForce no; + # UEVENT_HELPER = lib.mkForce yes; + # USB_SERIAL = lib.mkForce module; + # ZSWAP = lib.mkForce no; + # # ZPOOL = lib.mkForce no; # see: # UDMABUF = yes; #< not needed (nixos default)