Created attachment 114114 [details]
netconsole log from nouveau before hang
Nouveau works fine on Dell Latitude C810 (GeForce2 Go) if no external monitor is connected and also when an external monitor is connected but not enabled before booting Linux.
However, when the external monitor is enabled (internal LCD is automatically disabled - seems that the BIOS does not support clone mode), machine hangs during nouveau initialization.
The weird thing is that when the monitors are switched using Fn+F8 before boot (doesn't matter which one is kept enabled), nouveau does not hang.
The same thing happens with Debian Wheezy default 3.2 kernel and also 3.16 kernel from backports.
Created attachment 114115 [details]
netconsole log from nouveau when it works
Could you do the problematic boot with
I assume that the nouveau messages are the last ones you see before the hang?
Also upload your vbios (/sys/kernel/debug/dri/0/vbios.rom) from a non-problematic boot.
Yes, that are the last messages.
nouveau.debug=trace does not seem to provide any more output
Created attachment 114682 [details]
By adding printks to the code, I found that it hangs in drm_fb_helper_single_add_all_connectors()
Sorry, I missed one printk. It hangs in drm_helper_disable_unused_functions()
Hangs while disabling LVDS:
[ 261.444665] before fbcon_init
[ 261.444733] before helper_prepare
[ 261.444743] before helper_init
[ 261.444769] before helper_add_all_conn
[ 261.444780] after helper_add_all_conn, ret=0
[ 261.444833] before disable_unused
[ 261.444843] drm_helper_disable_unused_functions
[ 261.445683] __drm_helper_disable_unused_functions
[ 261.445697] encoder=DAC-28
[ 261.445755] encoder not in use
[ 261.445765] setting dpms off
[ 261.445797] encoder disabled ok
[ 261.445806] encoder=LVDS-30
[ 261.445859] encoder not in use
[ 261.445868] setting dpms off
One thing to note is that your DCB has 3 items:
DCB 0: type 0 [ANALOG] I2C 0 heads 0 conntag 0 LOCAL OR 0 maxfreq 350000kHz
DCB 1: type 4 [???] I2C 1 heads 1 unk00_4 1 conntag 1 LOCAL OR 1
DCB 2: type 1 [TV] I2C 1 heads 0 unk00_4 1 conntag 2 EXT 0 OR 0
Type 4 is a reserved type, I've seen it used for external encoders like the external DVI encoder on 6150SE nForce motherboards. (There is also Type 3, LVDS, which you don't appear to have, but perhaps it didn't exist in the NV11 days.) However you're seeing a LVDS connector in the logs, which means that *somehow* it knows...
BTW, a bunch of the dispnv04 code uses NV_DEBUG() which IIRC will show up with drm.debug=0xe. I thought I had changed it to work with nouveau.debug, but... you may be using an older kernel, or I'm misremembering.
It looks like it hangs in nv04_dfp_get_bound_head() in the final NVReadRAMDAC call (in return):
[ 356.630063] encoder disabled ok
[ 356.630072] encoder=LVDS-30
[ 356.630125] encoder not in use
[ 356.630134] setting dpms off
[ 356.630156] nv04_lvds_dpms
[ 356.630167] Setting dpms mode 3 on lvds encoder (output 1)
[ 356.630219] before power_scripts
[ 356.630229] use_power_scripts
[ 356.630251] nv04_dfp_get_bound_head
[ 356.630261] nv04_dfp_get_bound_head after writeRAMDAC