mirror of
				https://github.com/NixOS/nixos-hardware.git
				synced 2025-11-04 09:17:14 +08:00 
			
		
		
		
	15ach6h
This commit is contained in:
		
							
								
								
									
										30
									
								
								lenovo/legion/15ach6h/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								lenovo/legion/15ach6h/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
## Introduction
 | 
			
		||||
Due to the introduction of DDG feature, you may toggle DDG frequently, so for the default settings of this laptop, we use "specialization" feature of Nix so that you can easily select the required graphics card driver in the startup menu.  
 | 
			
		||||
**But It will slow down NixOS evaluation by factor 2 and increase memory usage.**  
 | 
			
		||||
So if you don't need specialization feature, you can just use hybrid only configuration or nvidia only (DDG only) configuration
 | 
			
		||||
 | 
			
		||||
## Using multiple drives with this configuration
 | 
			
		||||
 | 
			
		||||
When using more than one drive, the value of `hardware.nvidia.prime.amdgpuBusId` will change from the default of `PCI:5:0:0`.
 | 
			
		||||
 | 
			
		||||
Make sure you override this default in your personal configuration. For two drives, it should be `PCI:6:0:0`.
 | 
			
		||||
 | 
			
		||||
## Setup at the time of testing
 | 
			
		||||
```
 | 
			
		||||
$ nix-info -m
 | 
			
		||||
 - system: `"x86_64-linux"`
 | 
			
		||||
 - host os: `Linux 6.0.9, NixOS, 22.11 (Raccoon), 22.11beta19.c9538a9b707`
 | 
			
		||||
 - multi-user?: `yes`
 | 
			
		||||
 - sandbox: `yes`
 | 
			
		||||
 - version: `nix-env (Nix) 2.11.0`
 | 
			
		||||
 - channels(root): `"nixos-22.11"`
 | 
			
		||||
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`
 | 
			
		||||
 ```
 | 
			
		||||
 ```
 | 
			
		||||
 $ lspci
 | 
			
		||||
...
 | 
			
		||||
01:00.0 VGA compatible controller: NVIDIA Corporation GA104M [GeForce RTX 3070 Mobile / Max-Q] (rev a1)
 | 
			
		||||
...
 | 
			
		||||
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne (rev c5)
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										11
									
								
								lenovo/legion/15ach6h/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								lenovo/legion/15ach6h/default.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
{ ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [ ./hybrid ];
 | 
			
		||||
 | 
			
		||||
  specialisation.ddg.configuration = {
 | 
			
		||||
    # This specialisation is for the case where "DDG" (Dual-Direct GFX, A hardware feature that can enable in bios) is enabled, since the amd igpu is blocked at hardware level and the built-in display is directly connected to the dgpu, we no longer need the amdgpu and prime configuration.
 | 
			
		||||
    system.nixos.tags = [ "Dual-Direct-GFX-Mode" ];
 | 
			
		||||
    imports = [ ./nvidia ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								lenovo/legion/15ach6h/edid/16ach6h.bin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lenovo/legion/15ach6h/edid/16ach6h.bin
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										17
									
								
								lenovo/legion/15ach6h/edid/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lenovo/legion/15ach6h/edid/default.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
{ pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  # This file was obtained from the display while "DDG" mode was enabled.
 | 
			
		||||
  chip_edid = pkgs.runCommandNoCC "chip_edid" { } ''
 | 
			
		||||
    mkdir -p $out/lib/firmware/edid
 | 
			
		||||
    cp ${./15ach6h.bin} $out/lib/firmware/edid/15ach6h.bin
 | 
			
		||||
  '';
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  hardware.firmware = [ chip_edid ];
 | 
			
		||||
 | 
			
		||||
  boot.kernelParams = [ "drm.edid_firmware=edid/15ach6h.bin" ];
 | 
			
		||||
  # This fails at the moment, https://github.com/NixOS/nixos-hardware/issues/795
 | 
			
		||||
  # Extra refresh rates seem to work regardless
 | 
			
		||||
  # boot.initrd.extraFiles."lib/firmware/edid/15ach6h.bin".source = pkgs.runCommandLocal "chip_edid" { } "cp ${./15ach6h.bin} $out";
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								lenovo/legion/15ach6h/hybrid/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								lenovo/legion/15ach6h/hybrid/default.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
{ lib, ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [
 | 
			
		||||
    ../../../../common/cpu/amd
 | 
			
		||||
    ../../../../common/cpu/amd/pstate.nix
 | 
			
		||||
    ../../../../common/gpu/amd
 | 
			
		||||
    ../../../../common/gpu/nvidia/prime.nix
 | 
			
		||||
    ../../../../common/pc/laptop
 | 
			
		||||
    ../../../../common/pc/laptop/ssd
 | 
			
		||||
    ../edid
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  # Still needs to load at some point if we want X11 to work
 | 
			
		||||
  boot.kernelModules = [ "amdgpu" ];
 | 
			
		||||
 | 
			
		||||
  # modesetting just doesn't work (on X11?), so get rid of it by only explicitly declaring nvidia
 | 
			
		||||
  # Needed due to https://github.com/NixOS/nixos-hardware/commit/630a8e3e4eea61d35524699f2f59dbc64886357d
 | 
			
		||||
  # See also https://github.com/NixOS/nixos-hardware/issues/628
 | 
			
		||||
  # options.services.xserver.drivers will have a amdgpu entry from using the prime stuff in nixpkgs
 | 
			
		||||
  services.xserver.videoDrivers = [ "nvidia" ];
 | 
			
		||||
 | 
			
		||||
  hardware = {
 | 
			
		||||
    amdgpu.loadInInitrd = lib.mkDefault false;
 | 
			
		||||
 | 
			
		||||
    nvidia = {
 | 
			
		||||
      modesetting.enable = lib.mkDefault true;
 | 
			
		||||
      powerManagement.enable = lib.mkDefault true;
 | 
			
		||||
 | 
			
		||||
      prime = {
 | 
			
		||||
        amdgpuBusId = lib.mkDefault "PCI:6:0:0";
 | 
			
		||||
        nvidiaBusId = "PCI:1:0:0";
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								lenovo/legion/15ach6h/nvidia/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								lenovo/legion/15ach6h/nvidia/default.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
{ ... }:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [ ../hybrid ];
 | 
			
		||||
  services.xserver.videoDrivers = [ "nvidia" ]; # This will override services.xserver.videoDrivers = lib.mkDefault [ "amdgpu" "nvidia" ];
 | 
			
		||||
  # When I play the game through proton, I found that in the case of Dual-Direct GFX
 | 
			
		||||
  # enabled (dGPU disabled), proton will crash directly. But in the case of hybrid,
 | 
			
		||||
  # the game runs fine with or without nvidia-offload After investigation, this is
 | 
			
		||||
  # because when writing the specialization of Dual-Direct GFX, I did not completely
 | 
			
		||||
  # remove all packages for amd igpu. I only removed amdgpu from
 | 
			
		||||
  # services.xserver.videoDrivers by overriding. This is because the specialization
 | 
			
		||||
  # of nix cannot implement such an operation as canceling an import. In the end, if
 | 
			
		||||
  # it is enabled in Dual-Direct GFX In the absence of amd igpu, the amdvlk package
 | 
			
		||||
  # caused the proton to crash. In order to solve this problem, I add the option of
 | 
			
		||||
  # whether to enable amdvlk to the configuration file of amd gpu, and open it by
 | 
			
		||||
  # default, and turn it off in specialization, so as to delete amdvlk package and
 | 
			
		||||
  # other packages for amd igpu in specialization. At the same time, I also added an
 | 
			
		||||
  # option to amdgpu's opencl runtime.
 | 
			
		||||
  hardware = {
 | 
			
		||||
    nvidia.prime.offload.enable = false;
 | 
			
		||||
    amdgpu = {
 | 
			
		||||
      amdvlk = false;
 | 
			
		||||
      opencl = false;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user