Bug 72651 - [NV11] Hang during suspend/resume on Geforce 2 MX200 & MX400
Summary: [NV11] Hang during suspend/resume on Geforce 2 MX200 & MX400
Status: NEW
Alias: None
Product: xorg
Classification: Unclassified
Component: Driver/nouveau (show other bugs)
Version: unspecified
Hardware: x86 (IA32) Linux (All)
: medium normal
Assignee: Nouveau Project
QA Contact: Xorg Project Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-12-12 22:28 UTC by Michal Welnicki
Modified: 2013-12-12 22:37 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments
Serial console dump from MX200 card (boot + crash) (179.61 KB, text/plain)
2013-12-12 22:28 UTC, Michal Welnicki
no flags Details
Serial console dump from MX400 card (crash only) (53.85 KB, text/plain)
2013-12-12 22:29 UTC, Michal Welnicki
no flags Details
VBIOS from MX200 card (47.00 KB, application/octet-stream)
2013-12-12 22:31 UTC, Michal Welnicki
no flags Details
VBIOS from MX400 card (51.00 KB, application/octet-stream)
2013-12-12 22:32 UTC, Michal Welnicki
no flags Details
Workaround: don't create the TMDS output (1.14 KB, patch)
2013-12-12 22:37 UTC, Michal Welnicki
no flags Details | Splinter Review

Note You need to log in before you can comment on or make changes to this bug.
Description Michal Welnicki 2013-12-12 22:28:32 UTC
Created attachment 90680 [details]
Serial console dump from MX200 card (boot + crash)

Hibernation and suspend/resume always hangs on a GeForce2 MX200/MX400 (NV11) with nouveau loaded.

Steps to reproduce:
- boot a kernel, load nouveau
- echo "disk" > /sys/power/state
- machine hangs after suspending devices but before the image writing begins
- after several seconds, the monitor complains about "input signal out of range"

Same thing happens with "echo freeze > /sys/power/state".
If nouveau is unloaded before hibernation, everything works fine.

This happens on two different systems with a GeForce2 MX200/400:
1) Athlon XP 1700+ on an Asrock K7VT2,
   GeForce2 MX400 64MB AGP, with VGA output
2) Pentium II 400 on a 440BX-based Gigabyte GA-BX2000+,
   GeForce2 MX200 32MB AGP, with VGA and TV-out (S-Video + Cinch)

I'm using CentOS 6 userspace, and various kernels:
linux-2.6.32-358.18.1.el6
linux-3.0.x
linux-3.10.x
linux-3.12.1
linux-3.12.4

Using a serial console I was able to narrow down the hang to run_tmds_table(), called from nv04_dfp_restore().
Dmesg output and VBIOS of both cards is attached.

Note that neither of my cards has DVI/HDMI.
It seems that the flat panel connector is wrongly fabricated in nouveau_bios.c:fabricate_dcb_encoder_table().

Commenting out the call to fabricate_dcb_output(dcb, DCB_OUTPUT_TMDS, ...) makes hibernation work fine (patch attached).

The current condition of checking bios->tmds.output{0,1}_script_ptr seems wrong. But since I don't have any NV11 with DVI output, I'm not sure what to key creating the TMDS output on.
Comment 1 Michal Welnicki 2013-12-12 22:29:52 UTC
Created attachment 90681 [details]
Serial console dump from MX400 card (crash only)
Comment 2 Michal Welnicki 2013-12-12 22:31:22 UTC
Created attachment 90682 [details]
VBIOS from MX200 card
Comment 3 Michal Welnicki 2013-12-12 22:32:00 UTC
Created attachment 90683 [details]
VBIOS from MX400 card
Comment 4 Michal Welnicki 2013-12-12 22:37:09 UTC
Created attachment 90684 [details] [review]
Workaround: don't create the TMDS output


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.