Skip to content

Commit

Permalink
Merge pull request #261 from samueldr/feature/rpi-4-overlays
Browse files Browse the repository at this point in the history
raspberry-pi/4: Add modesetting option
  • Loading branch information
domenkozar authored May 13, 2021
2 parents 9e58ee1 + 38af9c5 commit 936e464
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 0 deletions.
4 changes: 4 additions & 0 deletions raspberry-pi/4/default.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
{ lib, pkgs, ...}:

{
imports = [
./modesetting.nix
];

boot = {
kernelPackages = lib.mkDefault pkgs.linuxPackages_rpi4;
initrd.availableKernelModules = [ "usbhid" "usb_storage" "vc4" ];
Expand Down
107 changes: 107 additions & 0 deletions raspberry-pi/4/modesetting.nix
Original file line number Diff line number Diff line change
@@ -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
];
};
}

0 comments on commit 936e464

Please sign in to comment.