diff --git a/configuration.nix b/configuration.nix index 57308a1..5bfc501 100644 --- a/configuration.nix +++ b/configuration.nix @@ -11,6 +11,7 @@ pkgs.linux-firmware (pkgs.callPackage ./pkgs/t14s-firmware.nix { }) ]; + boot.loader.efi.canTouchEfiVariables = false; boot.loader.systemd-boot = { enable = true; extraFiles = { @@ -48,6 +49,38 @@ services.getty.autologinUser = lib.mkDefault "root"; + nixpkgs.overlays = [ + (final: prev: { + qrtr = prev.callPackage ./pkgs/qrtr.nix {}; + qmic = prev.callPackage ./pkgs/qmic.nix {}; + rmtfs = prev.callPackage ./pkgs/rmtfs.nix { inherit (final) qrtr qmic; }; + pd-mapper = final.callPackage ./pkgs/pd-mapper.nix { inherit (final) qrtr; }; + }) + ]; + + systemd.services = { + pd-mapper = { + unitConfig = { + Requires = "qrtr-ns.service"; + After = "qrtr-ns.service"; + }; + serviceConfig = { + Restart = "always"; + ExecStart = "${pkgs.pd-mapper}/bin/pd-mapper"; + }; + wantedBy = [ + "multi-user.target" + ]; + }; + qrtr-ns = { + serviceConfig = { + ExecStart = "${pkgs.qrtr}/bin/qrtr-ns -v -f 1"; + Restart = "always"; + }; + wantedBy = ["multi-user.target"]; + }; + }; + nixpkgs.config.allowUnfree = true; nix.settings = { diff --git a/kernel.nix b/kernel.nix index 9b0bb63..90689c9 100644 --- a/kernel.nix +++ b/kernel.nix @@ -1,71 +1,102 @@ { config, lib, pkgs, ... }: let - inherit (config.boot.loader) efi; - linux_x1e_pkg = { buildLinux, ... } @ args: buildLinux (args // rec { - version = "6.10.0"; - modDirVersion = "6.10.0-next-20240725"; + version = "6.12.0"; + modDirVersion = "6.12.0-rc3"; - src = pkgs.fetchFromGitLab { - domain = "git.codelinaro.org"; - owner = "abel.vesa"; - repo = "linux"; - rev = "x1e80100-20240725"; # "x1e80100-next"; - hash = "sha256-0DFmPJEFl+cQT3Li4vuptBwavRc9CQOatd8TIYht+54="; + src = pkgs.fetchFromGitHub { + owner = "jhovold"; + repo = "linux"; + # wip/x1e80100-6.12-rc3 + rev = "84318c8e3038f579070e7c5d109d1d2311a5f437"; + hash = "sha256-kpuzjqcI4YGS+S9OvIUhm6z8xCGMA5h5+JlcHhoEETM="; }; kernelPatches = (args.kernelPatches or [ ]); - extraMeta.branch = "6.10"; + extraMeta.branch = "6.12"; } // (args.argsOverride or { })); - linux_x1e = pkgs.callPackage linux_x1e_pkg { defconfig = "x1e_defconfig"; }; + linux_x1e = pkgs.callPackage linux_x1e_pkg { + defconfig = "johan_defconfig"; + }; + linuxPackages_x1e = pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor linux_x1e); - dtb = "${linuxPackages_x1e.kernel}/dtbs/qcom/x1e78100-lenovo-thinkpad-t14s.dtb"; - dtbHash = builtins.hashFile "md5" dtb; - dtbName = "x1e78100-${dtbHash}.dtb"; in { + hardware = { + deviceTree = { + enable = true; + name = "qcom/x1e78100-lenovo-thinkpad-t14s.dtb"; + }; + }; + boot = { kernelPackages = linuxPackages_x1e; + kernelPatches = [ + { + name = "backlight"; + patch = ./patches/backlight.patch; + } + { + name = "bluetooth"; + patch = ./patches/bluetooth.patch; + } + { + name = "disable-type-c-dp"; + patch = ./patches/disable-type-c-dp.patch; + } + { + name = "vmlinuz.efi"; + patch = null; + extraStructuredConfig = with lib.kernel; { + EFI_ZBOOT = lib.mkForce no; + }; + } + { + name = "disable-qr-code-panic-screen"; + patch = null; + extraStructuredConfig = with lib.kernel; { + DRM_PANIC_SCREEN_QR_CODE = lib.mkForce no; + }; + } + { + name = "disable-rust"; + patch = null; + extraStructuredConfig = with lib.kernel; { + RUST = lib.mkForce no; + }; + } + ]; + kernelParams = [ - "dtb=${dtbName}" - - #"initcall_debug" - - #"earlycon=efifb" - "console=tty0" - #"ignore_loglevel" - #"keep_bootcon" - "regulator_ignore_unused" "clk_ignore_unused" "pd_ignore_unused" "arm64.nopauth" - #"acpi=no" "efi=novamap" - #"efi=noruntime" - "pcie_aspm.policy=powersupersave" "iommu.strict=0" "iommu.passthrough=0" - - #"earlyprintk=xdbc" - #"usbcore.autosuspend=-1" - "module_blacklist=edac_core,qcom_q6v5_pas" ]; supportedFilesystems.zfs = false; initrd = { + systemd = { + enable = true; + enableTpm2 = false; + }; + includeDefaultModules = false; availableKernelModules = [ "nvme" "uas" "usb-storage" + "pcie-qcom" "gpio-sbu-mux" "leds-qcom-lpg" @@ -96,36 +127,6 @@ in { # fat32 "vfat" "nls-cp437" "nls-iso8859-1" ]; - - systemd = { - enable = true; - enableTpm2 = false; - }; - }; - - loader = { - systemd-boot.enable = lib.mkForce true; - efi.canTouchEfiVariables = false; - systemd-boot.extraFiles = { - "${dtbName}" = dtb; - }; }; }; - - system.activationScripts.t14s-gen6-dtb = '' - in_package="${dtb}" - esp_tool_folder="${efi.efiSysMountPoint}/" - in_esp="''${esp_tool_folder}${dtbName}" - in_esp_backup="''${esp_tool_folder}/dtb/${dtbName}" - in_esp_backup_dir="''${esp_tool_folder}/dtb/" - mkdir -p "$in_esp_backup_dir" - cp "$in_package" "$in_esp_backup" - >&2 echo "Ensuring $in_esp in EFI System Partition" - if ! ${pkgs.diffutils}/bin/cmp --silent "$in_package" "$in_esp"; then - >&2 echo "Copying $in_package -> $in_esp" - mkdir -p "$esp_tool_folder" - cp "$in_package" "$in_esp" - sync - fi - ''; } diff --git a/patches/backlight.patch b/patches/backlight.patch new file mode 100644 index 0000000..2af0b9a --- /dev/null +++ b/patches/backlight.patch @@ -0,0 +1,51 @@ +diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts +index 04d6983ca8f3..0d42b275fd66 100644 +--- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts ++++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts +@@ -19,6 +19,14 @@ / { + compatible = "lenovo,thinkpad-t14s", "qcom,x1e78100", "qcom,x1e80100"; + chassis-type = "laptop"; + ++ backlight: backlight { ++ compatible = "pwm-backlight"; ++ pwms = <&pmk8550_pwm 0 5000000>; ++ enable-gpios = <&pmc8380_3_gpios 4 GPIO_ACTIVE_HIGH>; ++ pinctrl-0 = <&edp_bl_en>, <&edp_bl_pwm>; ++ pinctrl-names = "default"; ++ }; ++ + gpio-keys { + compatible = "gpio-keys"; + +@@ -744,12 +752,9 @@ &mdss_dp3 { + aux-bus { + panel { + compatible = "edp-panel"; +- enable-gpios = <&pmc8380_3_gpios 4 GPIO_ACTIVE_HIGH>; ++ backlight = <&backlight>; + power-supply = <&vreg_edp_3p3>; + +- pinctrl-0 = <&edp_bl_en>; +- pinctrl-names = "default"; +- + port { + edp_panel_in: endpoint { + remote-endpoint = <&mdss_dp3_out>; +@@ -849,6 +854,17 @@ rtmr0_1p15_reg_en: rtmr0-1p15-reg-en-state { + }; + }; + ++&pmk8550_pwm { ++ status = "okay"; ++}; ++ ++&pmk8550_gpios { ++ edp_bl_pwm: edp-bl-pwm-state { ++ pins = "gpio5"; ++ function = "func3"; ++ }; ++}; ++ + &qupv3_0 { + status = "okay"; + }; diff --git a/patches/bluetooth.patch b/patches/bluetooth.patch new file mode 100644 index 0000000..0bcce95 --- /dev/null +++ b/patches/bluetooth.patch @@ -0,0 +1,48 @@ +diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts +index 04d6983ca8f3..0bb3ca93cfaa 100644 +--- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts ++++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts +@@ -19,6 +19,11 @@ / { + compatible = "lenovo,thinkpad-t14s", "qcom,x1e78100", "qcom,x1e80100"; + chassis-type = "laptop"; + ++ aliases { ++ serial0 = &uart21; ++ serial1 = &uart14; ++ }; ++ + gpio-keys { + compatible = "gpio-keys"; + +@@ -1013,6 +1018,31 @@ wcd_default: wcd-reset-n-active-state { + bias-disable; + output-low; + }; ++ ++ bt_en_default: bt-en-sleep { ++ pins = "gpio116"; ++ function = "gpio"; ++ output-low; ++ bias-disable; ++ qcom,drive-strength = <16>; ++ }; ++}; ++ ++&uart14 { ++ status = "okay"; ++ ++ bluetooth: bt_wcn7850 { ++ compatible = "qcom,wcn7850-bt"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&bt_en_default>; ++ enable-gpios = <&tlmm 116 GPIO_ACTIVE_HIGH>; ++ max-speed = <3200000>; ++ }; ++}; ++ ++&uart21 { ++ compatible = "qcom,geni-debug-uart"; ++ status = "okay"; + }; + + &usb_1_ss0_hsphy { diff --git a/patches/disable-type-c-dp.patch b/patches/disable-type-c-dp.patch new file mode 100644 index 0000000..74ab6fa --- /dev/null +++ b/patches/disable-type-c-dp.patch @@ -0,0 +1,27 @@ +diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts +index 04d6983ca8f3..998cb8920dbc 100644 +--- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts ++++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts +@@ -719,22 +719,6 @@ &mdss { + status = "okay"; + }; + +-&mdss_dp0 { +- status = "okay"; +-}; +- +-&mdss_dp0_out { +- data-lanes = <0 1 2 3>; +-}; +- +-&mdss_dp1 { +- status = "okay"; +-}; +- +-&mdss_dp1_out { +- data-lanes = <0 1 2 3>; +-}; +- + &mdss_dp3 { + compatible = "qcom,x1e80100-dp"; + /delete-property/ #sound-dai-cells; diff --git a/pkgs/pd-mapper.nix b/pkgs/pd-mapper.nix new file mode 100644 index 0000000..c013996 --- /dev/null +++ b/pkgs/pd-mapper.nix @@ -0,0 +1,33 @@ +{ + stdenv, + lib, + fetchFromGitHub, + pkg-config, + qrtr, + lzma, +}: + +stdenv.mkDerivation { + pname = "pd-mapper"; + version = "2024-06-19"; + + src = fetchFromGitHub { + owner = "linux-msm"; + repo = "pd-mapper"; + rev = "e7c42e1522249593302a5b8920b9e7b42dc3f25e"; + sha256 = "sha256-gTUpltbY5439IEEvnxnt8WOFUgfpQUJWr5f+OB12W8A="; + }; + + nativeBuildInputs = [ pkg-config lzma ]; + + buildInputs = [ qrtr ]; + + installFlags = [ "prefix=$(out)" ]; + + meta = with lib; { + description = "pd mapper"; + homepage = "https://github.com/linux-msm/pd-mapper"; + license = licenses.bsd3; + platforms = platforms.linux; + }; +} diff --git a/pkgs/qmic.nix b/pkgs/qmic.nix new file mode 100644 index 0000000..eb6fcf6 --- /dev/null +++ b/pkgs/qmic.nix @@ -0,0 +1,26 @@ +{ + stdenv, + lib, + fetchFromGitHub +}: + +stdenv.mkDerivation { + pname = "qmic"; + version = "2022-07-18"; + + src = fetchFromGitHub { + owner = "linux-msm"; + repo = "qmic"; + rev = "4574736afce75aa5eec1e1069a19563410167c9f"; + sha256 = "sha256-0/mIg98pN66ZaVsQ6KmZINuNfiKvdEHMsqDx0iciF8w="; + }; + + installFlags = [ "prefix=$(out)" ]; + + meta = with lib; { + description = "QMI IDL compiler"; + homepage = "https://github.com/linux-msm/qmic"; + license = licenses.bsd3; + platforms = platforms.aarch64; + }; +} diff --git a/pkgs/qrtr.nix b/pkgs/qrtr.nix new file mode 100644 index 0000000..a8f1733 --- /dev/null +++ b/pkgs/qrtr.nix @@ -0,0 +1,33 @@ +{ + stdenv, + lib, + fetchFromGitHub, + meson, + cmake, + pkg-config, + systemd, + ninja, +}: + +stdenv.mkDerivation { + pname = "qrtr"; + version = "2024-05-21"; + + src = fetchFromGitHub { + owner = "linux-msm"; + repo = "qrtr"; + rev = "daf7f4cc326a5036dcce2bd7deaf2c32841b0336"; + hash = "sha256-OGx5fxxtrNN9EJJxxH4MTDRFGsyu4LNo+ks46zbJqF0="; + }; + + nativeBuildInputs = [ meson cmake pkg-config systemd ninja ]; + + installFlags = [ "prefix=$(out)" ]; + + meta = with lib; { + description = "QMI IDL compiler"; + homepage = "https://github.com/linux-msm/qrtr"; + license = licenses.bsd3; + platforms = platforms.aarch64; + }; +} diff --git a/pkgs/rmtfs.nix b/pkgs/rmtfs.nix new file mode 100644 index 0000000..0b2087f --- /dev/null +++ b/pkgs/rmtfs.nix @@ -0,0 +1,31 @@ +{ + lib, + stdenv, + fetchFromGitHub, + udev, + qrtr, + qmic +}: + +stdenv.mkDerivation { + pname = "rmtfs"; + version = "2024-03-18"; + + buildInputs = [ udev qrtr qmic ]; + + src = fetchFromGitHub { + owner = "linux-msm"; + repo = "rmtfs"; + rev = "33e1e40615efc59b17a515afe857c51b8b8c1ad1"; + hash = "sha256-AxFuDmfLTcnnwm+nezwLc8yaHcX+pFkX5qSIO38T/BM="; + }; + + installFlags = [ "prefix=$(out)" ]; + + meta = with lib; { + description = "Qualcomm Remote Filesystem Service"; + homepage = "https://github.com/linux-msm/rmtfs"; + license = licenses.bsd3; + platforms = platforms.aarch64; + }; +} diff --git a/pkgs/t14s-firmware.nix b/pkgs/t14s-firmware.nix index 7cfe132..a18896e 100644 --- a/pkgs/t14s-firmware.nix +++ b/pkgs/t14s-firmware.nix @@ -7,13 +7,13 @@ stdenvNoCC.mkDerivation rec { pname = "linux-firmware"; - version = "20240726"; + version = "20241003"; src = fetchFromGitHub { owner = "jollheef"; repo = "linux-firmware-x1e78100-lenovo-thinkpad-t14s"; - rev = "4ba0b781ffc27cb48736942822192b548a316838"; - hash = "sha256-ZeV6JRxU1gMwtWZH8sePCrZXFa27GxoKpLK4sg3Ljyo="; + rev = "e3ba8bb550b023b9f8501360f1d85d74d3de96b4"; + hash = "sha256-REkQpg+27to11VoDfAksvqzi5M7MDjAcAvR7P8cnRk0="; }; installPhase = '' diff --git a/scripts/make-image.sh b/scripts/make-image.sh index c1d1bf8..b594ea6 100755 --- a/scripts/make-image.sh +++ b/scripts/make-image.sh @@ -5,7 +5,7 @@ efi_part_label=i_t14sg6_efi nix_part_label=i_t14sg6_nix boot_size=256M -fallocate -l4G ${file} +fallocate -l8G ${file} parted ${file} mklabel gpt parted ${file} mkpart ${efi_part_label} fat32 0% ${boot_size} @@ -23,7 +23,7 @@ mkdir /mnt/boot mount ${drive}p1 /mnt/boot mkdir -p /mnt/etc/nixos -cp -r pkgs *.nix /mnt/etc/nixos/ +cp -r patches pkgs *.nix /mnt/etc/nixos/ nixos-install --root /mnt --no-root-password umount -R /mnt