raspberry-pi/4: Add modesetting option
This commit is contained in:
parent
9e58ee154c
commit
38af9c5048
|
@ -1,6 +1,10 @@
|
|||
{ lib, pkgs, ...}:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./modesetting.nix
|
||||
];
|
||||
|
||||
boot = {
|
||||
kernelPackages = lib.mkDefault pkgs.linuxPackages_rpi4;
|
||||
initrd.availableKernelModules = [ "usbhid" "usb_storage" "vc4" ];
|
||||
|
|
107
raspberry-pi/4/modesetting.nix
Normal file
107
raspberry-pi/4/modesetting.nix
Normal file
|
@ -0,0 +1,107 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
cfg = config.hardware.raspberry-pi."4".fkms-3d;
|
||||
in
|
||||
{
|
||||
options.hardware = {
|
||||
raspberry-pi."4".fkms-3d = {
|
||||
enable = lib.mkEnableOption ''
|
||||
Enable modesetting through fkms-3d
|
||||
'';
|
||||
cma = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 512;
|
||||
description = ''
|
||||
Amount of CMA (contiguous memory allocator) to reserve, in MiB.
|
||||
|
||||
The foundation overlay defaults to 256MiB, for backward compatibility.
|
||||
As the Raspberry Pi 4 family of hardware has ample amount of memory, we
|
||||
can reserve more without issue.
|
||||
|
||||
Additionally, reserving too much is not an issue. The kernel will use
|
||||
CMA last if the memory is needed.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# Configure for modesetting in the device tree
|
||||
hardware.deviceTree = {
|
||||
filter = "bcm2711-rpi-*.dtb";
|
||||
overlays = [
|
||||
# Equivalent to:
|
||||
# https://github.com/raspberrypi/linux/blob/rpi-5.10.y/arch/arm/boot/dts/overlays/cma-overlay.dts
|
||||
{
|
||||
name = "rpi4-cma-overlay";
|
||||
dtsText = ''
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/dts-v1/;
|
||||
/plugin/;
|
||||
|
||||
/ {
|
||||
compatible = "brcm,bcm2711";
|
||||
|
||||
fragment@0 {
|
||||
target = <&cma>;
|
||||
__overlay__ {
|
||||
size = <(${toString cfg.cma} * 1024 * 1024)>;
|
||||
};
|
||||
};
|
||||
};
|
||||
'';
|
||||
}
|
||||
# Equivalent to:
|
||||
# https://github.com/raspberrypi/linux/blob/rpi-5.10.y/arch/arm/boot/dts/overlays/vc4-fkms-v3d-overlay.dts
|
||||
{
|
||||
name = "rpi4-vc4-fkms-v3d-overlay";
|
||||
dtsText = ''
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/dts-v1/;
|
||||
/plugin/;
|
||||
|
||||
/ {
|
||||
compatible = "brcm,bcm2711";
|
||||
|
||||
fragment@1 {
|
||||
target = <&fb>;
|
||||
__overlay__ {
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
fragment@2 {
|
||||
target = <&firmwarekms>;
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
fragment@3 {
|
||||
target = <&v3d>;
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
fragment@4 {
|
||||
target = <&vc4>;
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
# Also configure the system for modesetting.
|
||||
|
||||
services.xserver.videoDrivers = lib.mkBefore [
|
||||
"modesetting" # Prefer the modesetting driver in X11
|
||||
"fbdev" # Fallback to fbdev
|
||||
];
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue