glats
June 6, 2017, 4:26pm
1
Hi everyone,
I search a lot to my issue described here
https://www.reddit.com/r/linuxhardware/comments/6ewpyy/ubuntu_freezes_on_login_after_nvidiaprime/
The only thing I believe can work is the fix propose by medakk
opened 07:45PM - 06 May 16 UTC
Power Management
Bug
P:Medium
[edit by @Lekensteyn]
This issue affects newer laptops (from about 2015-2016) w… ith Skylake and GTX 9xxM/10xx cards/
A workaround exists for some laptops, see https://github.com/Bumblebee-Project/Bumblebee/issues/764#issuecomment-234494238
[/edit]
___
I'm having a weird issue, and I'm not sure what kind of debug information is neccesary, but let me know what to give and I'll supply anything you need.
When I start my graphics (lxdm), I get a freeze (keyboard stops working, no response on monitor at all, even log files stop working), but I can work around this by enabling the graphics card before starting graphics.
System (installed with `bumblebee-nvidia` in debian testing repos):
```
Debian Testing
GTX 965M
Nvidia Proprietary Driver: 352.79
Laptop: SAGER NP7258
```
Optirun --version:
```
optirun (Bumblebee) 3.2.1
Copyright (C) 2011 The Bumblebee Project
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
```
My laptop seems to not work without optimus, the intel drivers work fine, but trying to run w/o the intel drivers (nvidia only) seems to result in a frozen screen. Using the workaround works perfectly for me, however.
Steps to Reproduce:
1. `systemctl start bumblebeed`
2. `systemctl start lxdm`
3. Freeze occurs
Workaround:
1. `systemctl start bumblebeed`
2. `echo "ON" >/proc/acpi/bbswitch`
3. `systemctl start lxdm`
Unfortunately, any X11 log files don't seem to survive after my system freezes (they show everything completed successfully, probably from the previous successfull boot). If you know any way of retreiving them I'd be happy to supply them though! (When the system freezes, even my shell history file gets corrupted).
I did have to make some changes to my config files to get things to work in my situation though, I'll post anything I remember changing below. Let me know if you need any more information, I am happy to supply it! Without bumblebee, my laptop would be unusuable :+1:
### bumblebee.conf
```
# Configuration file for Bumblebee. Values should **not** be put between quotes
## Server options. Any change made in this section will need a server restart
# to take effect.
[bumblebeed]
# The secondary Xorg server DISPLAY number
VirtualDisplay=:8
# Should the unused Xorg server be kept running? Set this to true if waiting
# for X to be ready is too long and don't need power management at all.
KeepUnusedXServer=false
# The name of the Bumbleblee server group name (GID name)
ServerGroup=bumblebee
# Card power state at exit. Set to false if the card shoud be ON when Bumblebee
# server exits.
TurnCardOffAtExit=false
# The default behavior of '-f' option on optirun. If set to "true", '-f' will
# be ignored.
NoEcoModeOverride=false
# The Driver used by Bumblebee server. If this value is not set (or empty),
# auto-detection is performed. The available drivers are nvidia and nouveau
# (See also the driver-specific sections below)
Driver=nvidia
# Directory with a dummy config file to pass as a -configdir to secondary X
XorgConfDir=/etc/bumblebee/xorg.conf.d
## Client options. Will take effect on the next optirun executed.
[optirun]
# Acceleration/ rendering bridge, possible values are auto, virtualgl and
# primus.
Bridge=auto
# The method used for VirtualGL to transport frames between X servers.
# Possible values are proxy, jpeg, rgb, xv and yuv.
VGLTransport=proxy
# List of paths which are searched for the primus libGL.so.1 when using
# the primus bridge
PrimusLibraryPath=/usr/lib/x86_64-linux-gnu/primus:/usr/lib/i386-linux-gnu/primus:/usr/lib/primus:/usr/lib32/primus
# Should the program run under optirun even if Bumblebee server or nvidia card
# is not available?
AllowFallbackToIGC=false
# Driver-specific settings are grouped under [driver-NAME]. The sections are
# parsed if the Driver setting in [bumblebeed] is set to NAME (or if auto-
# detection resolves to NAME).
# PMMethod: method to use for saving power by disabling the nvidia card, valid
# values are: auto - automatically detect which PM method to use
# bbswitch - new in BB 3, recommended if available
# switcheroo - vga_switcheroo method, use at your own risk
# none - disable PM completely
# https://github.com/Bumblebee-Project/Bumblebee/wiki/Comparison-of-PM-methods
## Section with nvidia driver specific options, only parsed if Driver=nvidia
[driver-nvidia]
# Module name to load, defaults to Driver if empty or unset
KernelDriver=nvidia-current
PMMethod=bbswitch
# colon-separated path to the nvidia libraries
LibraryPath=/usr/lib/x86_64-linux-gnu/nvidia:/usr/lib/i386-linux-gnu/nvidia:/usr/lib/nvidia
# comma-separated path of the directory containing nvidia_drv.so and the
# default Xorg modules path
XorgModulePath=/usr/lib/nvidia,/usr/lib/xorg/modules
XorgConfFile=/etc/bumblebee/xorg.conf.nvidia
## Section with nouveau driver specific options, only parsed if Driver=nouveau
[driver-nouveau]
KernelDriver=nouveau
PMMethod=auto
XorgConfFile=/etc/bumblebee/xorg.conf.nouveau
```
### xorg.conf.nvidia
```
Section "ServerLayout"
Identifier "Layout0"
Option "AutoAddDevices" "false"
Option "AutoAddGPU" "false"
EndSection
Section "Device"
Identifier "DiscreteNvidiaj"
Driver "nvidia"
VendorName "NVIDIA Corporation"
# If the X server does not automatically detect your VGA device,
# you can manually set it here.
# To get the BusID prop, run `lspci | egrep 'VGA|3D'` and input the data
# as you see in the commented example.
# This Setting may be needed in some platforms with more than one
# nvidia card, which may confuse the proprietary driver (e.g.,
# trying to take ownership of the wrong device). Also needed on Ubuntu 13.04.
BusID "PCI:01:00:0"
# Setting ProbeAllGpus to false prevents the new proprietary driver
# instance spawned to try to control the integrated graphics card,
# which is already being managed outside bumblebee.
# This option doesn't hurt and it is required on platforms running
# more than one nvidia graphics card with the proprietary driver.
# (E.g. Macbook Pro pre-2010 with nVidia 9400M + 9600M GT).
# If this option is not set, the new Xorg may blacken the screen and
# render it unusable (unless you have some way to run killall Xorg).
Option "ProbeAllGpus" "false"
Option "NoLogo" "true"
Option "UseEDID" "false"
Option "UseDisplayDevice" "none"
EndSection
# Section "Screen"
# Identifier "Default Screen"
# Device "DiscreteNvidia"
# EndSection
```
If I run prime-select nvidia, then log off, I get a black screen with a blinking white cursor in the top left. sometimes, I get a dialog saying graphics, input etc. devices weren’t found, and I could configure them. From there, I can’t get anywhere,...
I followed the steps mentioned early but when I put the SSD3T.aml into Grub2 doesn’t start.
So my question is how I can find the mismatch mentioned by medakk here:
The acpidump files and the SSDT files in /sys/firmware/acpi/tables are mismatched! Its SSDT9 through acpidump, and SSDT3 through /sys/firmware/acpi/tables. I used the /sys/firmware/acpi/tables method since I think that is what the kernel is currently using.
I deleted SSDT1.dat, after which it succesfully disassembled. I replaced all instances of OSYS except the declaration in SSDT3.dsl to 0x07D9. And then I bumped the number in the DefinitionBlock line by 1. I then followed these instructions to compile it and pack into an image: DSDT - ArchWiki
After booting with the new DSDT image, I am able to switch between GPUs without rebooting.
I hope you can help me!
Thanks for advanced
Judging by the reddit thread you have a similar Asus as medakk but not he same.
acpi_osi=! acpi_osi=“Windows 2009” stopped the freezing
Touchpad stopped working, so needs modified ssdt
similar duplicate definition of PRT0 in ssdt
Just as a note, one conclusion of medakk’s thread is that you will have to ‘systemctl restart diplay-manager’ to switch gpus when using GDM/Gnome, logout/login won’t work.
What did you do to extract/disassemble/modify/assemble/pack the ssdt?
To find the right ssdt to disassemble and modify, grep for LKEN
To find the ssdt with the duplicate definition to remove for disassembly , grep for PRT0 but dont remove the dsdt.
Please run acpidump/nvidia-bug-report.sh and attach output files.
Edit: typo PRT0 not PR0
glats
June 7, 2017, 2:20am
3
It’s the same as medakk’s so his howto should work unchanged. But your logs don’t show a trace that you’re loading the modified table.
dmesg should tell:
ACPI: SSDT ACPI table found in initrd [kernel/firmware/acpi/ssdt3.aml]
and
ACPI: Table Upgrade: override [SSDT-PegSsd- PegSsdt]
Did you make the changes to grub and ran update-grub2 afterwards?
glats
June 7, 2017, 3:36pm
5
Yes I did it.
I’ll try again and I’ll check in dmesg if I find the override.
I’ll comment soon.
Thanks.
glats
June 7, 2017, 11:53pm
6
After followed the steps nothing changed.
Here my dmesg grep ACPI:
Here my grub entry:
This is really frustrating.
glats
June 8, 2017, 1:21am
7
I finally did it.
I had to do:
cat initrd.img-4.12.0-041200rc3-generic >> acpi_gpufix.img
and then:
glats@GL553VD:~$ dmesg | grep ACPI | grep override
[ 0.000000] ACPI: Table Upgrade: override [SSDT-PegSsd- PegSsdt]
[ 0.000000] ACPI: SSDT 0x000000007A715080 Physical table override, new table: 0x0000000079493000
[ 0.000000] ACPI: IRQ0 used by override.
[ 0.000000] ACPI: IRQ9 used by override.
I don’t know why two initrd into grub entry doesn’t work.
Don’t do that. You won’t be able to boot once you get a kernel update. You can’t have two initrd entries, the second is overwriting the first. Instead, put both images in one line:
initrd /boot/acpi_gpufix /boot/initrd.img-4.12.0-041200rc3-generic
And don’t modify the grub.cfg, instead modify the script for generating it, like medakk said:
in /etc/grub.d/10_linux
change the line (around line 143)
initrd ${rel_dirname}/${initrd}
to
initrd ${rel_dirname}/acpi_gpufix ${rel_dirname}/${initrd}
and run update-grub2 afterwards. This will keep the override working on kernel updates.
glats
June 8, 2017, 1:02pm
9
Yes I already edited 10_linux to put the initrd line but I did two initrd instead of one.
I’ll try that option.
Thanks.
glats
June 10, 2017, 3:20pm
10
Another question, With Intel GPU the fan start run but with nvidia GPU the fan doesn’t start.
How I can turn off? It’s really noisy
Don’t know, use ‘sensors’ to see if anything’s overheating and ‘top’ what’s causing this. PM medakk to see if he’s facing the same problem.