Bug#438650: xserver-xorg-video-intel: fails to start (No valid modes)
Good morning!
Here is some additional info. I've tried to step the Xorg in gdb.
The error is first reported by intel driver with message:
(EE) intel(0): No valid modes.
It is written at src/i830_driver.c:1377
if (!xf86InitialConfiguration (pScrn, FALSE)) <== fails here
{
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes.\n");
RestoreHWState(pScrn);
PreInitCleanup(pScrn);
return FALSE;
}
Tracing shows, that xf86InitialConfiguration function fails and
returns NULL.
hw/xfree86/modes/xf86Crtc.c:1513
Bool
xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
{
...... // a lot of code skipped
/*
* Assign CRTCs to fit output configuration
*/
if (!xf86PickCrtcs (scrn, crtcs, modes, 0, width, height)) <== fails here
{
xfree (crtcs);
xfree (modes);
return FALSE;
}
Function xf86InitialConfiguration fails to assign CRTS. It call function
xf86PickCrtcs and last return FALSE.
hw/xfree86/modes/xf86Crtc.c:787
static int
xf86PickCrtcs (ScrnInfoPtr scrn,
xf86CrtcPtr *best_crtcs,
DisplayModePtr *modes,
int n,
int width,
int height)
{
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
int c, o;
xf86OutputPtr output;
xf86CrtcPtr crtc;
xf86CrtcPtr *crtcs;
xf86CrtcPtr best_crtc;
int best_score;
int score;
int my_score;
if (n == config->num_output)
return 0;
output = config->output[n];
/*
* Compute score with this output disabled
*/
best_crtcs[n] = NULL;
best_crtc = NULL;
best_score = xf86PickCrtcs (scrn, best_crtcs, modes, n+1, width, height);
^== this functions returns NULL
if (modes[n] == NULL)
===> return best_score; <== and we also return NULL here
At this point we have:
n = 0, best_score = 0, modes[0] = 0,
so we return NULL.
Here is some excerpt from GDB session.
(gdb) next
xf86PickCrtcs (scrn=0x820ff08, best_crtcs=0x8213710, modes=0x8213bb0, n=0, width=2048, height=2048)
at ../../../../hw/xfree86/modes/xf86Crtc.c:807
807 in ../../../../hw/xfree86/modes/xf86Crtc.c
(gdb) print modes
$15 = (DisplayModePtr *) 0x8213bb0
(gdb) print modes[0]
$16 = (DisplayModePtr) 0x0
(gdb) print n
$17 = 0
(gdb) print output
$18 = (xf86OutputPtr) 0x8212520
(gdb) print *output
$19 = {scrn = 0x820ff08, crtc = 0x0, possible_crtcs = 1, possible_clones = 1, interlaceAllowed = 0, doubleScanAllowed = 0,
probed_modes = 0x0, options = 0x8212f40, conf_monitor = 0x8203f00, initial_x = 0, initial_y = 0, initial_rotation = 0,
status = XF86OutputStatusDisconnected, MonInfo = 0x0, subpixel_order = 0, mm_width = 0, mm_height = 0,
name = 0x8212578 "VGA", funcs = 0xb7bc9b60, driver_private = 0x8212a68, use_screen_monitor = 1, randr_output = 0x0}
<=== NOTE "status = XF86OutputStatusDisconnected" here, is it ok?
(gdb) print best_score
$20 = 0
(gdb) next
806 in ../../../../hw/xfree86/modes/xf86Crtc.c
(gdb) next
807 in ../../../../hw/xfree86/modes/xf86Crtc.c
(gdb) next
868 in ../../../../hw/xfree86/modes/xf86Crtc.c
(gdb) next
xf86InitialConfiguration (scrn=0x820ff08, canGrow=0) at ../../../../hw/xfree86/modes/xf86Crtc.c:1620
1620 in ../../../../hw/xfree86/modes/xf86Crtc.c
(gdb) bt
#0 xf86InitialConfiguration (scrn=0x820ff08, canGrow=0) at ../../../../hw/xfree86/modes/xf86Crtc.c:1620
#1 0xb7b9df50 in I830PreInit (pScrn=0x820ff08, flags=<value optimized out>) at ../../src/i830_driver.c:1377
#2 0x080a8394 in InitOutput (pScreenInfo=0x81fe360, argc=1, argv=0xbfec3fd4) at ../../../../hw/xfree86/common/xf86Init.c:601
#3 0x08076c6b in main (argc=1, argv=0xbfec3fd4, envp=0xbfec3fdc) at ../../dix/main.c:370
(gdb)
This function just returned FALSE, so all subsequent functions just
returns with error.
Any ideas? What else can I trace to find useful information?
You can send me a patch and I will recompile server or intel driver with
it.
With best regards,
Alexander.
Reply to: