Skip to content

Commit a8ed568

Browse files
committed
orange-pi-5-max: init
1 parent 26ed7a0 commit a8ed568

16 files changed

+708
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,7 @@ See code for all available configurations.
377377
| [Omen 15-en1007sa](omen/15-en1007sa) | `<nixos-hardware/omen/15-en1007sa>` | `omen-15-en1007sa` |
378378
| [Omen 15-en0002np](omen/15-en0002np) | `<nixos-hardware/omen/15-en0002np>` | `omen-15-en0002np` |
379379
| [One-Netbook OneNetbook 4](onenetbook/4) | `<nixos-hardware/onenetbook/4>` | `onenetbook-4` |
380+
| [Orange Pi 5 Max](orange-pi/5-max) | `<nixos-hardware/orange-pi/5-max>` | `orange-pi-5-max` |
380381
| [Panasonic Let's Note CF-LX4](panasonic/letsnote/cf-lx4) | `<nixos-hardware/panasonic/letsnote/cf-lx4>` | `panasonic-letsnote-cf-lx4` |
381382
| [PC Engines APU](pcengines/apu) | `<nixos-hardware/pcengines/apu>` | `pcengines-apu` |
382383
| [PINE64 Pinebook Pro](pine64/pinebook-pro/) | `<nixos-hardware/pine64/pinebook-pro>` | `pine64-pinebook-pro` |

flake.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@
320320
omen-15-en0002np = import ./omen/15-en0002np;
321321
onenetbook-4 = import ./onenetbook/4;
322322
olimex-teres_i = import ./olimex/teres_i;
323+
orange-pi-5-max = import ./orange-pi/5-max;
323324
pcengines-apu = import ./pcengines/apu;
324325
pine64-pinebook-pro = import ./pine64/pinebook-pro;
325326
pine64-rockpro64 = import ./pine64/rockpro64;

orange-pi/5-max/README.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# Creating an installation SD card image
2+
3+
Create and customize a `flake.nix` file:
4+
5+
```nix
6+
{
7+
inputs = {
8+
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
9+
nixos-hardware.url = "github:nixos/nixos-hardware";
10+
};
11+
12+
outputs = { nixpkgs, nixos-hardware, ... }:
13+
let
14+
supportedSystems = [
15+
"x86_64-linux"
16+
"aarch64-linux"
17+
"riscv64-linux"
18+
"x86_64-darwin"
19+
"aarch64-darwin"
20+
];
21+
forAllSupportedSystems = nixpkgs.lib.genAttrs supportedSystems;
22+
in
23+
{
24+
packages = forAllSupportedSystems (system: rec {
25+
default = sd-image;
26+
sd-image = (import "${nixpkgs}/nixos" {
27+
configuration = {
28+
imports = [
29+
"${nixos-hardware}/orange-pi/5-max/sd-image-installer.nix"
30+
];
31+
32+
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [
33+
"orangepi-firmware"
34+
"mali-g610-firmware"
35+
];
36+
37+
# If you want to use ssh set a password
38+
# users.users.nixos.password = "super secure password";
39+
# OR add your public ssh key
40+
# users.users.nixos.openssh.authorizedKeys.keys = [ "ssh-rsa ..." ];
41+
42+
nixpkgs.buildPlatform.system = system;
43+
nixpkgs.hostPlatform.system = "aarch64-linux";
44+
45+
system.stateVersion = "24.11";
46+
};
47+
inherit system;
48+
}).config.system.build.sdImage;
49+
});
50+
};
51+
}
52+
```
53+
54+
Then build the image by running `nix build .#` in the same folder.
55+
56+
## Flashing image
57+
Replace `/dev/sdX` with the device name of your sd card.
58+
```sh
59+
zstdcat result/sd-image/nixos-sd-image-*-orange-pi-5-max.img.zst | sudo dd status=progress bs=8M of=/dev/sdX
60+
```
61+
62+
# Updating the bootloader
63+
Install the enable the update scripts
64+
```nix
65+
hardware.orange-pi."5-max".uboot.updater.enable = true;
66+
```
67+
68+
uart debugging options are applied to the bootloader installed by the firmware update script
69+
```nix
70+
hardware.orange-pi."5-max".uartDebug = {
71+
enable = true; # enabled by default for debugging
72+
baudRate = 57600; # default is 1500000
73+
};
74+
```
75+
76+
## SD-Card
77+
Run as root
78+
``` sh
79+
orangepi5max-firmware-update-sd
80+
```
81+
## SPI Flash
82+
Run as root
83+
``` sh
84+
orangepi5max-firmware-update-flash
85+
```

orange-pi/5-max/audio.nix

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{ config, lib, ... }:
2+
let
3+
cfg = config.hardware.orange-pi."5-max".audio;
4+
in
5+
{
6+
options.hardware = {
7+
orange-pi."5-max".audio = {
8+
enable = lib.mkEnableOption "audio device configuration" // {
9+
default = true;
10+
};
11+
};
12+
};
13+
14+
config = lib.mkIf cfg.enable {
15+
services.pipewire.wireplumber.extraConfig = {
16+
"orange-pi-5-max-descriptions" = {
17+
"monitor.alsa.rules" =
18+
let
19+
makeRule = name: description: {
20+
matches = [ { "device.name" = name; } ];
21+
actions = {
22+
update-props = {
23+
"device.description" = description;
24+
};
25+
};
26+
};
27+
in
28+
[
29+
(makeRule "alsa_card.platform-hdmi0-sound" "HDMI0 Audio")
30+
(makeRule "alsa_card.platform-hdmi1-sound" "HDMI1 Audio")
31+
(makeRule "alsa_card.platform-sound" "ES8388 Audio")
32+
];
33+
};
34+
};
35+
36+
services.udev.extraRules = ''
37+
SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-hdmi0-sound", ENV{SOUND_DESCRIPTION}="HDMI0 Audio"
38+
SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-hdmi1-sound", ENV{SOUND_DESCRIPTION}="HDMI1 Audio"
39+
SUBSYSTEM=="sound", ENV{ID_PATH}=="platform-sound", ENV{SOUND_DESCRIPTION}="ES8388 Audio"
40+
'';
41+
};
42+
}

orange-pi/5-max/bcmdhd_sdio.nix

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{
2+
fetchFromGitHub,
3+
kernel,
4+
lib,
5+
stdenv,
6+
...
7+
}:
8+
let
9+
rev = "101.10.591.52.27-4";
10+
in
11+
stdenv.mkDerivation rec {
12+
pname = "bcmdhd_sdio";
13+
version = "${rev}-${kernel.version}";
14+
15+
passthru.moduleName = "bcmdhd_sdio";
16+
17+
src = fetchFromGitHub {
18+
owner = "armbian";
19+
repo = "bcmdhd-dkms";
20+
inherit rev;
21+
hash = "sha256-e9oWorovZrsqm7qZjXygVluahTCIxi4yJy2Pp6lwdl8=";
22+
};
23+
24+
sourceRoot = "${src.name}/src";
25+
26+
hardeningDisable = [ "pic" ];
27+
28+
nativeBuildInputs = kernel.moduleBuildDependencies;
29+
30+
postPatch = ''
31+
substituteInPlace include/linuxver.h \
32+
--replace-fail 'del_timer(&((t)->timer))' 'timer_delete(&((t)->timer))'
33+
substituteInPlace include/linuxver.h \
34+
--replace-fail 'del_timer_sync(&((t)->timer))' 'timer_delete_sync(&((t)->timer))'
35+
'';
36+
37+
buildPhase = ''
38+
make \
39+
LINUXDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build \
40+
ARCH=arm64 \
41+
CROSS_COMPILE=${stdenv.cc.targetPrefix} \
42+
bcmdhd_sdio \
43+
CONFIG_BCMDHD_SDIO=y \
44+
CONFIG_BCMDHD_DTS=y
45+
'';
46+
47+
installPhase = ''
48+
install -D bcmdhd_sdio.ko $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/bcmdhd_sdio.ko
49+
install -D dhd_static_buf_sdio.ko $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_static_buf_sdio.ko
50+
'';
51+
52+
meta.license = lib.licenses.gpl2Only;
53+
}

orange-pi/5-max/default.nix

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
{ lib, pkgs, ... }:
2+
let
3+
orangepi-firmware = pkgs.callPackage ./orangepi-firmware.nix { };
4+
in
5+
{
6+
imports = [
7+
./audio.nix
8+
./wireless.nix
9+
./graphics.nix
10+
./leds.nix
11+
./uart.nix
12+
./uboot
13+
../../common/gpu/24.05-compat.nix
14+
];
15+
16+
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
17+
18+
boot = {
19+
kernelPackages =
20+
if (lib.versionOlder pkgs.linux.version "6.15") then
21+
lib.mkDefault pkgs.linuxPackages_latest
22+
else
23+
lib.mkDefault pkgs.linuxPackages;
24+
supportedFilesystems.zfs = false;
25+
26+
kernelParams = [
27+
"rootwait"
28+
"consoleblank=0"
29+
"console=tty1"
30+
];
31+
32+
initrd.includeDefaultModules = false;
33+
initrd.availableKernelModules = [
34+
"nvme"
35+
"mmc_block"
36+
"usbhid"
37+
"hid_generic"
38+
"dm_mod"
39+
"input_leds"
40+
];
41+
42+
loader = {
43+
grub.enable = lib.mkDefault false;
44+
generic-extlinux-compatible.enable = lib.mkDefault true;
45+
};
46+
};
47+
48+
disabledModules = [ "profiles/all-hardware.nix" ];
49+
50+
hardware = {
51+
deviceTree = {
52+
enable = lib.mkDefault true;
53+
name = lib.mkDefault "rockchip/rk3588-orangepi-5-max.dtb";
54+
};
55+
56+
firmware = [ orangepi-firmware ];
57+
58+
enableRedistributableFirmware = lib.mkDefault true;
59+
};
60+
61+
networking.networkmanager.wifi.scanRandMacAddress = lib.mkDefault false;
62+
63+
systemd.services."orangepi5-usb2-init" = {
64+
description = "Initialize USB2 on Orange Pi 5";
65+
wantedBy = [ "default.target" ];
66+
serviceConfig = {
67+
Type = "oneshot";
68+
ExecStart = "${pkgs.bash}/bin/sh -c 'echo host > /sys/kernel/debug/usb/fc000000.usb/mode'";
69+
};
70+
};
71+
}

orange-pi/5-max/graphics.nix

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
config,
3+
pkgs,
4+
lib,
5+
...
6+
}:
7+
let
8+
cfg = config.hardware.orange-pi."5-max".graphics;
9+
mali-firmware = pkgs.callPackage ./mali-firmware.nix { };
10+
in
11+
{
12+
options.hardware = {
13+
orange-pi."5-max".graphics = {
14+
enable = lib.mkEnableOption "gpu configuration" // {
15+
default = config.hardware.graphics.enable;
16+
};
17+
};
18+
};
19+
20+
config = lib.mkIf cfg.enable {
21+
hardware = {
22+
firmware = [
23+
mali-firmware
24+
];
25+
};
26+
# VK_KHR_sampler_ycbcr_conversion is not available for g610 in older mesa versions
27+
environment.sessionVariables = lib.optionalAttrs (lib.versionOlder pkgs.mesa.version "25.1.0") {
28+
GDK_VULKAN_DISABLE = "ycbcr";
29+
};
30+
};
31+
}

orange-pi/5-max/leds.nix

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{ config, lib, ... }:
2+
let
3+
cfg = config.hardware.orange-pi."5-max".leds;
4+
in
5+
{
6+
options.hardware.orange-pi."5-max".leds = {
7+
enable = lib.mkEnableOption "heartbeat leds" // {
8+
default = true;
9+
};
10+
};
11+
12+
config = lib.mkIf (!cfg.enable) {
13+
hardware = {
14+
deviceTree = {
15+
overlays = [
16+
{
17+
name = "orangepi-5-max-enable-leds";
18+
dtsText = ''
19+
/dts-v1/;
20+
/plugin/;
21+
/ {
22+
compatible = "xunlong,orangepi-5-max";
23+
};
24+
/ {
25+
fragment@0 {
26+
target = <&led_blue_pwm>;
27+
__overlay__ {
28+
linux,default-trigger = "none";
29+
};
30+
};
31+
};
32+
/ {
33+
fragment@1 {
34+
target = <&led_green_pwm>;
35+
__overlay__ {
36+
linux,default-trigger = "none";
37+
};
38+
};
39+
};
40+
'';
41+
}
42+
];
43+
};
44+
};
45+
};
46+
}

orange-pi/5-max/mali-firmware.nix

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
fetchurl,
3+
lib,
4+
stdenv,
5+
...
6+
}:
7+
stdenv.mkDerivation {
8+
pname = "mali-g610-firmware";
9+
version = "g18p0-01eac0";
10+
11+
src = fetchurl {
12+
url = "https://github.com/JeffyCN/mirrors/raw/e08ced3e0235b25a7ba2a3aeefd0e2fcbd434b68/firmware/g610/mali_csffw.bin";
13+
hash = "sha256-jnyCGlXKHDRcx59hJDYW3SX8NbgfCQlG8wKIbWdxLfU=";
14+
};
15+
16+
buildCommand = ''
17+
install -Dm444 $src $out/lib/firmware/mali_csffw.bin
18+
'';
19+
20+
compressFirmware = false;
21+
22+
meta.license = lib.licenses.unfreeRedistributableFirmware;
23+
}

0 commit comments

Comments
 (0)