Nvidia quadro 4000M and Nouveau driver in kernel 5.15.x

I have an old but well equipped laptop (quad processor, 16 GB Ram, Quadro Video Card, etc…) that has an nvidia quadro 4000M card, compatible with the 390x series of proprietary drivers.
With the arrival of the 5.15.xx Kernel the card stopped to work with the propietary drivers as in RPM Fusion repo the legacy drivers have not yet been upgraded with the latest patches (what do they wait to do so?).
So I removed the nvidia driver according to rpmfusion instructions to use the Nouveau driver.
Now the situation on fedora 35, kde flavor, is as follows:

  • Kernel 5.15.xx compiled for Fedora 35, only a blank screen with a couple a lines of multicolor garbage, in wayland and Xorg desktops.
  • Kernel 5.15xx and 14.xx compiled for fedora 34 KDE, Xorg working, wayland same garbage as before.

Any idea about how to solve this issue?

:thinking: I think it’s only work with Xorg for 390xx Nvidia driver. From RPMFussion doc said:

Supported on current stable Xorg server release.

I also have old laptop with 340xx Nvidia driver and it only support Xorg. I believe only the newer that support wayland.

All nvidia drivers version 470 and older will only work with xorg. Fedora 35 defaults to the nouveau driver and wayland.

If you have removed the nvidia driver completely then during boot you will need to make a boot modification from the grub menu to enable the nouveau driver and allow booting to graphical mode.

From the grub menu press “e” to edit the commands, then on the line that begins with “linux” move over and delete rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 from that line. Continue booting by pressing ‘ctrl-X’

Once the system has completed booting then install the proper drivers. Here I assume you have the rpmfusion-nonfree repo enabled, so you would use sudo dnf install akmod-nvidia-390xx which should reinstall the proper drivers and you would be done except for a reboot.

The last thing you may need to do is to make certain that your login completes with xorg and does not try to start wayland. From the login screen where you enter your password there usually is, at the bottom right, a gear. There you can select the video driver to use for login, and if available you would select ‘gnome with xorg’. If xorg is not available then you are already configured to use xorg.

Thank you for your replies.
I was aware of the limits of the legacy drivers, so I didn´t expect them to work in Wayland, but I did expect Nouveau to work in wayland.
In any case the drivers in rpmfusion repo have not been updated to work with Kernel 5.15:xxx
I checked if any nvidia module was still in memory and that the nouveau modules had been loaded:

[root@Andrea-Laptop2 andrea]# lsmod | grep nvidia
[root@Andrea-Laptop2 andrea]# lsmod | grep nouveau
nouveau 2400256 39
drm_ttm_helper 16384 1 nouveau
ttm 81920 2 drm_ttm_helper,nouveau
i2c_algo_bit 16384 1 nouveau
mxm_wmi 16384 1 nouveau
drm_kms_helper 303104 1 nouveau
drm 630784 22 drm_kms_helper,drm_ttm_helper,ttm,nouveau
wmi 36864 6 dell_wmi,wmi_bmof,dell_smbios,dell_wmi_descriptor,mxm_wmi,nouveau
video 57344 3 dell_wmi,dell_laptop,nouveau
[root@Andrea-Laptop2 andrea]#

Then, as suggested I checked the grub entries for nvidia and nouveau commands and found none.
The only place where I found the mentioned references was in /boot/grub2/grub.cfg:

DO NOT EDIT THIS FILE

It is automatically generated by grub2-mkconfig using templates

from /etc/grub.d and settings from /etc/default/grub

BEGIN /etc/grub.d/00_header

set pager=1

if [ -f ${config_directory}/grubenv ]; then
load_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; then
load_env
fi
if [ “${next_entry}” ] ; then
set default=“${next_entry}”
set next_entry=
save_env next_entry
set boot_once=true
else
set default=“${saved_entry}”
fi

if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option=“–id”
else
menuentry_id_option=“”
fi

export menuentry_id_option

if [ “${prev_saved_entry}” ]; then
set saved_entry=“${prev_saved_entry}”
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi

function savedefault {
if [ -z “${boot_once}” ]; then
saved_entry=“${chosen}”
save_env saved_entry
fi
}

function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}

terminal_output console
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5

Fallback normal timeout code in case the timeout_style feature is

unavailable.

else
set timeout=5
fi

END /etc/grub.d/00_header

BEGIN /etc/grub.d/01_users

if [ -f ${prefix}/user.cfg ]; then
source ${prefix}/user.cfg
if [ -n “${GRUB2_PASSWORD}” ]; then
set superusers=“root”
export superusers
password_pbkdf2 root ${GRUB2_PASSWORD}
fi
fi

END /etc/grub.d/01_users

BEGIN /etc/grub.d/08_fallback_counting

insmod increment

Check if boot_counter exists and boot_success=0 to activate this behaviour.

if [ -n “${boot_counter}” -a “${boot_success}” = “0” ]; then

if countdown has ended, choose to boot rollback deployment,

i.e. default=1 on OSTree-based systems.

if [ “${boot_counter}” = “0” -o “${boot_counter}” = “-1” ]; then
set default=1
set boot_counter=-1

otherwise decrement boot_counter

else
decrement boot_counter
fi
save_env boot_counter
fi

END /etc/grub.d/08_fallback_counting

BEGIN /etc/grub.d/10_linux

insmod part_gpt
insmod ext2
set root=‘hd0,gpt7’
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt7 --hint-efi=hd0,gpt7 --hint-baremetal=ahci0,gpt7 281b51bd-e378-439f-ab26-0a1f8f23f923
else
search --no-floppy --fs-uuid --set=root 281b51bd-e378-439f-ab26-0a1f8f23f923
fi
insmod part_gpt
insmod fat
set boot=‘hd0,gpt3’
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=boot --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 8200-5037
else
search --no-floppy --fs-uuid --set=boot 8200-5037
fi

This section was generated by a script. Do not modify the generated file - all changes

will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.

The blscfg command parses the BootLoaderSpec files stored in /boot/loader/entries and

populates the boot menu. Please refer to the Boot Loader Specification documentation

for the files format: BootLoaderSpec.

set default_kernelopts="root=UUID=281b51bd-e378-439f-ab26-0a1f8f23f923 ro rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 resume=UUID=29e65e38-8245-4b27-a49a-d5734aafa037 rhgb quiet "

insmod blscfg
blscfg

END /etc/grub.d/10_linux

BEGIN /etc/grub.d/10_reset_boot_success

Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry

if [ “${boot_success}” = “1” -o “${boot_indeterminate}” = “1” ]; then
set menu_hide_ok=1
else
set menu_hide_ok=0
fi

Reset boot_indeterminate after a successful boot

if [ “${boot_success}” = “1” ] ; then
set boot_indeterminate=0

Avoid boot_indeterminate causing the menu to be hidden more then once

elif [ “${boot_indeterminate}” = “1” ]; then
set boot_indeterminate=2
fi

Reset boot_success for current boot

set boot_success=0
save_env boot_success boot_indeterminate

END /etc/grub.d/10_reset_boot_success

BEGIN /etc/grub.d/12_menu_auto_hide

if [ x$feature_timeout_style = xy ] ; then
if [ “${menu_show_once}” ]; then
unset menu_show_once
save_env menu_show_once
set timeout_style=menu
set timeout=60
elif [ “${menu_auto_hide}” -a “${menu_hide_ok}” = “1” ]; then
set orig_timeout_style=${timeout_style}
set orig_timeout=${timeout}
if [ “${fastboot}” = “1” ]; then
# timeout_style=menu + timeout=0 avoids the countdown code keypress check
set timeout_style=menu
set timeout=0
else
set timeout_style=hidden
set timeout=1
fi
fi
fi

END /etc/grub.d/12_menu_auto_hide

BEGIN /etc/grub.d/20_linux_xen

END /etc/grub.d/20_linux_xen

BEGIN /etc/grub.d/20_ppc_terminfo

END /etc/grub.d/20_ppc_terminfo

BEGIN /etc/grub.d/30_os-prober

menuentry ‘Windows Boot Manager (on /dev/sda3)’ --class windows --class os $menuentry_id_option ‘osprober-efi-8200-5037’ {
savedefault
insmod part_gpt
insmod fat
set root=‘hd0,gpt3’
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 8200-5037
else
search --no-floppy --fs-uuid --set=root 8200-5037
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

Other OS found, undo autohiding of menu unless menu_auto_hide=2

if [ “${orig_timeout_style}” -a “${menu_auto_hide}” != “2” ]; then
set timeout_style=${orig_timeout_style}
set timeout=${orig_timeout}
fi

END /etc/grub.d/30_os-prober

BEGIN /etc/grub.d/30_uefi-firmware

END /etc/grub.d/30_uefi-firmware

BEGIN /etc/grub.d/40_custom

This file provides an easy way to add custom menu entries. Simply type the

menu entries you want to add after this comment. Be careful not to change

the ‘exec tail’ line above.

END /etc/grub.d/40_custom

BEGIN /etc/grub.d/41_custom

if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z “${config_directory}” -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi

END /etc/grub.d/41_custom

But it looks like the default_kernelopts variable had not been used for any entry, as I didn´t find any trace of it in the kernel entries at boot time.
Shall I assume that there is a bug in fedora 35 5.15.x Kernel?