Skip to content

Commit 684ae16

Browse files
authored
Merge pull request #247 from NixOS/mnt-reform2-nitrogen8m
Add mnt-reform2-nitrogen8m
2 parents 1facb18 + f39a23d commit 684ae16

File tree

8 files changed

+289
-0
lines changed

8 files changed

+289
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ See code for all available configurations.
136136
| [Lenovo ThinkPad X13][] | `<nixos-hardware/lenovo/thinkpad/x13` |
137137
| [Microsoft Surface Range][] | `<nixos-hardware/microsoft/surface>` |
138138
| [Microsoft Surface Pro 3][] | `<nixos-hardware/microsoft/surface-pro/3>` |
139+
| [MNT Reform (i.MX8M)][] | `<nixos-hardware/mnt/reform2-nitrogen8m>` |
139140
| [MSI GS60 2QE][] | `<nixos-hardware/msi/gs60>` |
140141
| PC Engines APU | `<nixos-hardware/pcengines/apu>` |
141142
| [Raspberry Pi 2][] | `<nixos-hardware/raspberry-pi/2>` |

flake.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
lenovo-thinkpad-x13-yoga = import ./lenovo/thinkpad/x13-yoga;
7474
microsoft-surface = import ./microsoft/surface;
7575
microsoft-surface-pro-3 = import ./microsoft/surface-pro/3;
76+
mnt-reform2-nitrogen8m = import ./mnt/reform2-nitrogen8m;
7677
pcengines-apu = import ./pcengines/apu;
7778
raspberry-pi-2 = import ./raspberry-pi/2;
7879
raspberry-pi-4 = import ./raspberry-pi/4;

mnt/reform2-nitrogen8m/default.nix

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
{ config, lib, pkgs, ... }:
2+
3+
{
4+
imports = [ ../../common/pc/laptop/ssd ];
5+
6+
boot = {
7+
kernelPackages = lib.mkDefault pkgs.linuxPackages_reformNitrogen8m_latest;
8+
9+
kernelParams = [ "console=ttymxc0,115200" "console=tty1" "pci=nomsi" ];
10+
11+
extraModprobeConfig = "options imx-dcss dcss_use_hdmi=0";
12+
13+
initrd = {
14+
kernelModules = [ "nwl-dsi" "imx-dcss" ];
15+
availableKernelModules = # hack to remove ATA modules
16+
lib.mkForce ([
17+
"cryptd"
18+
"dm_crypt"
19+
"dm_mod"
20+
"input_leds"
21+
"mmc_block"
22+
"nvme"
23+
"usbhid"
24+
"xhci_hcd"
25+
] ++ config.boot.initrd.luks.cryptoModules);
26+
};
27+
28+
loader = {
29+
generic-extlinux-compatible.enable = lib.mkDefault true;
30+
grub.enable = lib.mkDefault false;
31+
timeout = lib.mkDefault 1;
32+
# Cannot interact with U-Boot directly
33+
};
34+
};
35+
36+
environment.etc."systemd/system.conf".text = "DefaultTimeoutStopSec=15s";
37+
38+
environment.systemPackages = with pkgs; [ brightnessctl usbutils ];
39+
40+
hardware.deviceTree.name = lib.mkDefault "freescale/imx8mq-mnt-reform2.dtb";
41+
42+
hardware.pulseaudio.daemon.config.default-sample-rate = lib.mkDefault "48000";
43+
44+
nixpkgs = {
45+
system = "aarch64-linux";
46+
overlays = [
47+
(final: prev:
48+
with final; {
49+
50+
linux_5_7 = callPackage ./kernel/linux-5.7.nix {
51+
kernelPatches = [
52+
kernelPatches.bridge_stp_helper
53+
kernelPatches.request_key_helper
54+
kernelPatches.export_kernel_fpu_functions."5.3"
55+
];
56+
};
57+
58+
linux_reformNitrogen8m_latest =
59+
callPackage ./kernel { kernelPatches = [ ]; };
60+
61+
linuxPackages_reformNitrogen8m_latest =
62+
linuxPackagesFor linux_reformNitrogen8m_latest;
63+
64+
ubootReformImx8mq = callPackage ./uboot { };
65+
66+
})
67+
];
68+
};
69+
70+
programs.sway.extraPackages = # unbloat
71+
lib.mkDefault (with pkgs; [ swaylock swayidle xwayland ]);
72+
73+
system.activationScripts.asound = let
74+
initialAsoundState = pkgs.fetchurl {
75+
url =
76+
"https://source.mnt.re/reform/reform-system-image/-/raw/84bec717ad7366b1d385f3200da192efb0f5bccb/reform2-imx8mq/template-etc/asound.state";
77+
sha256 = "11wfy8fad5mhr6bga36k7lri85wq74rfzwj9bb9j5rp5cll4jnmb";
78+
};
79+
in ''
80+
if [ ! -e "/var/lib/alsa/asound.state" ]; then
81+
mkdir -p /var/lib/alsa
82+
cp ${initialAsoundState} /var/lib/alsa/asound.state
83+
fi
84+
'';
85+
86+
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
{ lib, buildLinux, fetchurl, fetchgit, linux_5_7, kernelPatches, ... }@args:
2+
3+
let
4+
linux = linux_5_7;
5+
systemImageSrc = fetchgit {
6+
url = "https://source.mnt.re/reform/reform-system-image.git";
7+
rev = "ef6bae4def9ef08ee388254abf4f1839d44c07a1";
8+
sha256 = "03nnwjzm8a0bk821p6sfscd04x3jgj29l16ccdkg10xcv2g2z5s8";
9+
} + "/reform2-imx8mq";
10+
in lib.overrideDerivation (buildLinux (args // {
11+
inherit (linux) src version;
12+
13+
features = {
14+
efiBootStub = false;
15+
iwlwifi = false;
16+
} // (args.features or { });
17+
18+
kernelPatches = let
19+
patchDir = "${systemImageSrc}/template-kernel/patches";
20+
reformPatches = map ({ name, extraConfig ? "" }: {
21+
inherit name extraConfig;
22+
patch = "${patchDir}/${name}.patch";
23+
}) [
24+
{
25+
name = "0001-drm-bridge-Add-NWL-MIPI-DSI-host-controller-support";
26+
extraConfig = ''
27+
DRM_NWL_MIPI_DSI m
28+
'';
29+
}
30+
{ name = "0002-dt-bindings-display-bridge-Add-binding-for-NWL-mipi-"; }
31+
{
32+
name =
33+
"0003-DCSS-v4-Add-support-for-iMX8MQ-Display-Controller-Subsystem";
34+
extraConfig = ''
35+
DRM_IMX_DCSS m
36+
'';
37+
}
38+
{ name = "4101-media-vb2-wait-for-dmabuf-fences"; }
39+
{ name = "4201-HACK-media-vb2-don-t-validate-buffer-length"; }
40+
{ name = "44f0bbdcf0433052b4e85940cb41d04c13fdad57"; }
41+
{ name = "git.linuxtv.org-28a202c55963386b8bc45bcc52029362e9aa0d33"; }
42+
{ name = "git.linuxtv.org-88d06362d1d052e4c844ac95a2ca308ed4d90452"; }
43+
{ name = "mnt1000-pcie-reparent-clocks"; }
44+
{ name = "mnt1001-pcie-support-internal-refclk-aspm"; }
45+
{ name = "mnt2000-audio-wm8960-add-dacslope-setting"; }
46+
{ name = "mnt2001-audio-sai-workaround-rate-matching"; }
47+
{ name = "mnt3000-imx-dcss-tweak-DCSS-pixel-rate-to-prevent-sporadic-d"; }
48+
{ name = "mnt3001-nwl-dsi-disable-bridge_mode_fixup-that-breaks-hs-vs-"; }
49+
{ name = "mnt3002-MNT-Reform2-add-simple-panel-Innolux-N125HCE-GN1"; }
50+
{
51+
name = "mnt3003-MNT-Reform-import-cadence-HDMI-driver-for-imx8mq-fro";
52+
extraConfig = ''
53+
DRM_CDNS_AUDIO m
54+
DRM_CDNS_DP m
55+
DRM_CDNS_HDMI m
56+
DRM_CDNS_HDMI_CEC m
57+
DRM_CDNS_MHDP m
58+
'';
59+
}
60+
{ name = "mnt3004-MNT-Reform-imx8mq-add-PHY_27M-clock"; }
61+
{ name = "mnt3005-MNT-Reform-imx8mq-DCSS-add-module-option-to-toggle-h"; }
62+
{ name = "mnt3006-MNT-Reform-imx8mq-add-PHY_27M-clock-missing-define"; }
63+
{
64+
name = "mnt3007-MNT-Reform-imx8mq-missing-kconf-makefile-for-cadence";
65+
extraConfig = ''
66+
DRM_IMX_CDNS_MHDP m
67+
DRM_IMX_DCSS m
68+
'';
69+
}
70+
{
71+
name = "mnt3008-MNT-Reform-imx8mq-missing-makefile-change-for-imx-dc";
72+
extraConfig = ''
73+
DRM_IMX_DCSS m
74+
'';
75+
}
76+
];
77+
in lib.lists.unique (kernelPatches ++ reformPatches ++ [{
78+
name = "MNT-Reform-imx8mq-config";
79+
patch = null;
80+
extraConfig = fetchurl {
81+
url =
82+
"https://github.com/NixOS/nixos-hardware/releases/download/mnt-reform2-nitrogen8m-v1/kernel-config";
83+
sha256 = "1brazbr9zflb29i4fjhwn1z87bg475lqvzkksvi5n775zx28fk65";
84+
};
85+
}]);
86+
87+
allowImportFromDerivation = true;
88+
89+
} // (args.argsOverride or { }))) (attrs: {
90+
prePatch = attrs.prePatch + ''
91+
cp ${systemImageSrc}/template-kernel/*.dts arch/arm64/boot/dts/freescale/
92+
cp ${systemImageSrc}/template-kernel/*.dtsi arch/arm64/boot/dts/freescale/
93+
echo 'dtb-$(CONFIG_ARCH_MXC) += imx8mq-mnt-reform2.dtb' >> \
94+
arch/arm64/boot/dts/freescale/Makefile
95+
'';
96+
makeFlags = attrs.makeFlags ++ [ "LOADADDR=0x40480000" ];
97+
})
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{ lib, stdenv, buildPackages, fetchurl, perl, buildLinux, modDirVersionArg ? null, ... } @ args:
2+
3+
with lib;
4+
5+
buildLinux (args // rec {
6+
version = "5.7.19";
7+
8+
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
9+
modDirVersion = if (modDirVersionArg == null) then concatStringsSep "." (take 3 (splitVersion "${version}.0")) else modDirVersionArg;
10+
11+
# branchVersion needs to be x.y
12+
extraMeta.branch = versions.majorMinor version;
13+
14+
src = fetchurl {
15+
url = "mirror://kernel/linux/kernel/v5.x/linux-${version}.tar.xz";
16+
sha256 = "1rwzp51ddlkdzanj6i8jqj5yh0njpzn7ly4r8nnzwkdfp5465721";
17+
};
18+
} // (args.argsOverride or {}))
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{ buildUBoot, fetchgit }:
2+
3+
buildUBoot rec {
4+
pname = "uboot-reform2-imx8mq";
5+
version = "2020-06-01";
6+
src = fetchgit {
7+
url = "https://source.mntmn.com/MNT/reform-boundary-uboot.git";
8+
rev = version;
9+
sha256 = "0ychnwhisjqm0gzyz0nv9xynl9g114xmxpwz4vm0l5w6sc60jshw";
10+
};
11+
defconfig = "nitrogen8m_som_4g_defconfig";
12+
extraMeta.platforms = [ "aarch64-linux" ];
13+
filesToInstall = [ "flash.bin" ];
14+
patches = [ ./shell-syntax.patch ./env_vars.patch ];
15+
makeFlags = filesToInstall;
16+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
commit 32ba0e0bf12827a67959f435e457fb4594a6708f
2+
Author: Emery Hemingway <[email protected]>
3+
Date: Mon Jul 27 10:18:38 2020 +0200
4+
5+
reform: set envvars for booting NixOS
6+
7+
diff --git a/board/boundary/nitrogen8m_som/nitrogen8m_som.c b/board/boundary/nitrogen8m_som/nitrogen8m_som.c
8+
index d4d866001d..d1fac5934f 100644
9+
--- a/board/boundary/nitrogen8m_som/nitrogen8m_som.c
10+
+++ b/board/boundary/nitrogen8m_som/nitrogen8m_som.c
11+
@@ -322,17 +322,13 @@ void init_usb_clk(int usbno);
12+
13+
static void set_env_vars(void)
14+
{
15+
- printf("set_env_vars()");
16+
- env_set("board", "MNT Reform 2.0"); // "nitrogen8m_som");
17+
+#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
18+
+ if (!env_get("board"))
19+
+ env_set("board", "imx8mq-mnt-reform2");
20+
env_set("soc", "imx8mq");
21+
env_set("imx_cpu", get_imx_type((get_cpu_rev() & 0xFF000) >> 12));
22+
env_set("uboot_defconfig", CONFIG_DEFCONFIG);
23+
-
24+
- // MNT Reform 2
25+
- env_set("fdt_addr", "0x50000000");
26+
- env_set("bootargs", "noinitrd root=/dev/mmcblk1p1 rootwait rw console=ttymxc0,115200 console=tty1 cma=512M no_console_suspend pci=nomsi");
27+
- env_set("bootcmd", "ext4load mmc 1 ${loadaddr} /Image; ext4load mmc 1 ${fdt_addr} /imx8mq-mnt-reform2.dtb; booti ${loadaddr} - ${fdt_addr}");
28+
- env_set("bootdelay", "1");
29+
+#endif
30+
}
31+
32+
void board_set_default_env(void)
33+
diff --git a/include/configs/nitrogen8m_som.h b/include/configs/nitrogen8m_som.h
34+
index 3ada3900db..548e7cd71c 100644
35+
--- a/include/configs/nitrogen8m_som.h
36+
+++ b/include/configs/nitrogen8m_som.h
37+
@@ -208,7 +208,7 @@
38+
#define SYS_AUXCORE_BOOTDATA_DDR 0x80000000
39+
#define SYS_AUXCORE_BOOTDATA_TCM 0x007E0000
40+
41+
-/*#define CONFIG_EXTRA_ENV_SETTINGS \
42+
+#define CONFIG_EXTRA_ENV_SETTINGS \
43+
"console=" BD_CONSOLE "\0" \
44+
"env_dev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \
45+
"env_part=" __stringify(CONFIG_SYS_MMC_ENV_PART) "\0" \
46+
@@ -247,7 +247,10 @@
47+
"setenv ipaddr 10.0.0.2; " \
48+
"setenv netmask 255.255.255.0; " \
49+
"setenv serverip 10.0.0.1;\0" \
50+
- BOOTENV*/
51+
+ BOOTENV \
52+
+ "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
53+
+ "ramdisk_addr_r=0x44480000\0" \
54+
+ "fdt_addr_r=0x43000000\0"
55+
56+
/*
57+
* PCI express
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
2+
index f8c3fff1d1..bb68e119e2 100644
3+
--- a/scripts/Makefile.lib
4+
+++ b/scripts/Makefile.lib
5+
@@ -299,7 +299,7 @@ quiet_cmd_dtc = DTC $@
6+
# Modified for U-Boot
7+
# Bring in any U-Boot-specific include at the end of the file
8+
cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \
9+
- (cat $<; $(if $(u_boot_dtsi),echo '\#include "$(u_boot_dtsi)"')) > $(pre-tmp); \
10+
+ (cat $<; $(if $(u_boot_dtsi),echo '#include "$(u_boot_dtsi)"')) > $(pre-tmp); \
11+
$(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $(pre-tmp) ; \
12+
$(DTC) -O dtb -o $@ -b 0 \
13+
-i $(dir $<) $(DTC_FLAGS) \

0 commit comments

Comments
 (0)