If I plug in the display after the kernel is done booting, it outputs fine. But if I boot with the display plugged in, it outputs a skewed image with only the first few rows of pixels on 1440p, changing to 1080p fixes the image in that case, or it doesn’t output anything and the display goes into power save mode (in which case changing resolution doesn’t help).
I found a hot fix for this. I think that the problem is the simple-framebuffer driver from kernel 6.8.7. When the display is not connected on boot, the UEFI and the simple-framebuffer driver did not start the display. Then, when we connect the display after boot, is the nvdisplay driver who first init successfully the display. This, because the UEFI did not pass the framebuffer configuration to the kernel device tree, in order that the simple-framebuffer driver inits the display.
My hot fix is to assign a dummy driver name to the framebuffer node in the device tree. In this way, the UEFI will not init the display, and then not pass the framebuffer configuration to the simple-framebuffer driver in the kernel.
With this hot fix, my 1080p display works when is connected from boot.
The cons is that we lost the Linux boot messages. A permanent fix should be done by analyzing what causes the problem in the simple-framebuffer driver from Nvidia Linux 5.15 to main stream Linux 6.8.
Hi. Thanks for the help. Reverting kernel commit 5727dcfd8486399c40e39d2c08fe36fedab29d99 ("fbdev: Make registered_fb[] private to fbmem.c") and building clean (“make clean”) to ensure conftest is updated fixes it. Issue is in kernel-open/nvidia/nv-platform.c, where nvidia forcefully disables the clocks used by the framebuffer driver. Upstream removed the variable they used to check for (to see if a framebuffer has been registered?) before disabling the clocks.
I had similar kind of issue with multiple displays (bootloader showing ok, later no image signal detected). For the source of error I determined my display port 2.0 cable. One older cable works and another out of the bag does not work.