Bug 69180 - [NVC1] Delays when using nouveau and switcheroo
Summary: [NVC1] Delays when using nouveau and switcheroo
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-09-10 14:58 UTC by janh
Modified: 2013-11-30 06:39 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments
lspci output (2.39 KB, text/plain)
2013-09-10 14:58 UTC, janh
no flags Details
dmesg output of switching dedicated GPU off and on (64.25 KB, text/plain)
2013-09-10 15:00 UTC, janh
no flags Details
dmesg output of unloading and loading nouveau (67.80 KB, text/plain)
2013-09-10 15:01 UTC, janh
no flags Details
dmesg output of switching to Nvidia GPU, turning Intel card on and switching back to Intel card (64.48 KB, text/plain)
2013-09-10 15:03 UTC, janh
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description janh 2013-09-10 14:58:07 UTC
Created attachment 85566 [details]
lspci output

First of all: you did a very good job! Actually I wanted to report an X server crash and a kernel panic in nouveau/vgaswitcheroo in Ubuntu 13.04, but now that I installed the latest version of nouveau I see that these bugs are gone! However, there are still some other bugs in the latest version that I want to report.

Kernel version: 3.11.0-031100-generic
DRM version: 1.1.0 20060810
Nouveau version: 1.1.1 20120801

I did a out-of-tree compilation using the nouveau snapshot of today.

My notebook (Medion Akoya P6624) uses a Nvidia GeForce GT 425M together with an Intel HD graphics card. X is not involved in these reports. I always booted to console and never started X. To make it clear how long a command took to execute, I used a script that logs to dmesg and syslog when a command started executing and when it was done. The commands of each report were executed directly after boot. The output of "cat /sys/kernel/debug/vgaswitcheroo/switch" after boot is always
0:IGD:+:Pwr:0000:00:02.0
1:DIS: :Pwr:0000:01:00.0

1) Switching the dedicated card off takes 45 seconds and reports some errors

	1.1) Switch dedicated card off:
	
		dmesg output:
		[  109.787177] Before "echo OFF > /sys/kernel/debug/vgaswitcheroo/switch"
		[  109.787404] VGA switcheroo: switched nouveau off
		[  109.787476] ACPI Warning: \_SB_.PCI0.P0P1.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20130517/nsarguments-95)
		[  109.787830] nouveau  [     DRM] suspending fbcon...
		[  109.787836] nouveau  [     DRM] suspending display...
		[  109.787841] nouveau  [     DRM] unpinning framebuffer(s)...
		[  109.787893] nouveau  [     DRM] evicting buffers...
		[  139.807186] nouveau  [     DRM] waiting for kernel channels to go idle...
		[  154.814513] nouveau E[     DRM] failed to idle channel 0xcccc0001 [DRM]
		[  154.819750] After "echo OFF > /sys/kernel/debug/vgaswitcheroo/switch"

		"cat /sys/kernel/debug/vgaswitcheroo/switch" output:
		0:IGD:+:Pwr:0000:00:02.0
		1:DIS: :Off:0000:01:00.0

	1.2) Switch dedicated card back on:
	
		dmesg output:
		[  188.129397] Before "echo ON > /sys/kernel/debug/vgaswitcheroo/switch"
		[  188.129674] VGA switcheroo: switched nouveau on
		[  188.129765] nouveau  [     DRM] re-enabling device...
		[  188.129783] nouveau  [     DRM] resuming kernel object tree...
		[  188.129871] nouveau  [     DRM] resuming client object trees...
		[  188.129877] nouveau  [     DRM] resuming display...
		[  188.129890] nouveau E[     DRM] Could not pin/map cursor.
		[  188.129980] nouveau E[     DRM] Could not pin/map cursor.
		[  188.135706] After "echo ON > /sys/kernel/debug/vgaswitcheroo/switch"

		"cat /sys/kernel/debug/vgaswitcheroo/switch" output:
		0:IGD:+:Pwr:0000:00:02.0
		1:DIS: :Pwr:0000:01:00.0


2) Unloading and loading nouveau takes almost a minute (~40s + ~15s) and reports some errors

	2.1) Unload nouveau:

		dmesg output:
		[   81.873603] Before "modprobe -r nouveau"
		[   96.894475] nouveau E[     DRM] failed to idle channel 0xcccc0000 [DRM]
		[   98.896050] nouveau E[   PFIFO][0000:01:00.0] channel 1 [DRM] kick timeout
		[  100.897626] nouveau E[   PFIFO][0000:01:00.0] playlist update failed
		[  100.897812] nouveau W[   PFIFO][0000:01:00.0] INTR 0x00000001: 0x00000003
		[  115.906124] nouveau E[     DRM] failed to idle channel 0xcccc0001 [DRM]
		[  117.907634] nouveau E[   PFIFO][0000:01:00.0] channel 0 [DRM] kick timeout
		[  119.909206] nouveau E[   PFIFO][0000:01:00.0] playlist update failed
		[  119.910780] [TTM] Finalizing pool allocator
		[  119.910790] [TTM] Finalizing DMA pool allocator
		[  119.910871] [TTM] Zone  kernel: Used memory at exit: 0 kiB
		[  119.910877] [TTM] Zone highmem: Used memory at exit: 0 kiB
		[  119.910883] vga_switcheroo: disabled
		[  119.913110] [drm] Module unloaded
		[  119.941120] After "modprobe -r nouveau"

	2.2) Load nouveau:

		dmesg output:
		[  161.070144] Before "modprobe nouveau"
		[  161.145759] MXM: GUID detected in BIOS
		[  161.145810] ACPI Warning: \_SB_.PCI0.GFX0._DSM: Argument #4 type mismatch - Found [Integer], ACPI requires [Package] (20130517/nsarguments-95)
		[  161.146039] ACPI Warning: \_SB_.PCI0.GFX0._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20130517/nsarguments-95)
		[  161.146226] ACPI Warning: \_SB_.PCI0.P0P1.PEGP._DSM: Argument #4 type mismatch - Found [Integer], ACPI requires [Package] (20130517/nsarguments-95)
		[  161.146315] ACPI Warning: \_SB_.PCI0.P0P1.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20130517/nsarguments-95)
		[  161.146418] VGA switcheroo: detected Optimus DSM method \_SB_.PCI0.P0P1.PEGP handle
		[  161.146980] nouveau  [  DEVICE][0000:01:00.0] BOOT0  : 0x0c1800a1
		[  161.146984] nouveau  [  DEVICE][0000:01:00.0] Chipset: GF108 (NVC1)
		[  161.146987] nouveau  [  DEVICE][0000:01:00.0] Family : NVC0
		[  161.148457] nouveau  [   VBIOS][0000:01:00.0] checking PRAMIN for image...
		[  161.148466] nouveau  [   VBIOS][0000:01:00.0] ... signature not found
		[  161.148468] nouveau  [   VBIOS][0000:01:00.0] checking PROM for image...
		[  161.148523] nouveau  [   VBIOS][0000:01:00.0] ... signature not found
		[  161.148524] nouveau  [   VBIOS][0000:01:00.0] checking ACPI for image...
		[  174.524023] nouveau  [   VBIOS][0000:01:00.0] ... appears to be valid
		[  174.524029] nouveau  [   VBIOS][0000:01:00.0] using image from ACPI
		[  174.524253] nouveau  [   VBIOS][0000:01:00.0] BIT signature found
		[  174.524258] nouveau  [   VBIOS][0000:01:00.0] version 70.08.19.00.21
		[  174.525052] nouveau  [     PFB][0000:01:00.0] RAM type: DDR3
		[  174.525058] nouveau  [     PFB][0000:01:00.0] RAM size: 512 MiB
		[  174.525063] nouveau  [     PFB][0000:01:00.0]    ZCOMP: 0 tags
		[  174.557517] nouveau  [  PTHERM][0000:01:00.0] FAN control: none / external
		[  174.557528] nouveau  [  PTHERM][0000:01:00.0] fan management: disabled
		[  174.557533] nouveau  [  PTHERM][0000:01:00.0] internal sensor: yes
		[  174.566347] vga_switcheroo: enabled
		[  174.566659] [TTM] Zone  kernel: Available graphics memory: 426710 kiB
		[  174.566666] [TTM] Zone highmem: Available graphics memory: 1963648 kiB
		[  174.566669] [TTM] Initializing pool allocator
		[  174.566681] [TTM] Initializing DMA pool allocator
		[  174.566705] nouveau  [     DRM] VRAM: 512 MiB
		[  174.566709] nouveau  [     DRM] GART: 1048576 MiB
		[  174.566719] nouveau  [     DRM] TMDS table version 2.0
		[  174.566723] nouveau  [     DRM] DCB version 4.0
		[  174.566729] nouveau  [     DRM] DCB outp 00: 02021300 00000000
		[  174.566735] nouveau  [     DRM] DCB conn 00: 00000040
		[  174.566741] nouveau  [     DRM] DCB conn 01: 00000100
		[  174.566745] nouveau  [     DRM] DCB conn 02: 00002261
		[  174.568326] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
		[  174.568331] [drm] No driver support for vblank timestamp query.
		[  174.568337] nouveau  [     DRM] ACPI backlight interface available, not registering our own
		[  174.568543] nouveau  [     DRM] 3 available performance level(s)
		[  174.568547] nouveau  [     DRM] 0: core 50MHz shader 101MHz memory 135MHz voltage 830mV
		[  174.568549] nouveau  [     DRM] 1: core 202MHz shader 405MHz memory 324MHz voltage 830mV
		[  174.568552] nouveau  [     DRM] 3: core 560MHz shader 1120MHz memory 800MHz voltage 900mV
		[  174.568555] nouveau  [     DRM] c: core 202MHz shader 405MHz memory 324MHz voltage 900mV
		[  174.586084] nouveau  [     DRM] MM: using COPY0 for buffer copies
		[  174.596625] nouveau 0000:01:00.0: No connectors reported connected with modes
		[  174.596649] [drm] Cannot find any crtc or sizes - going 1024x768
		[  174.619661] nouveau E[    PBUS][0000:01:00.0] MMIO write of 0x00000401 FAULT at 0x002010 [ IBUS TIMEOUT ]
		[  174.711581] nouveau  [     DRM] allocated 1024x768 fb: 0x60000, bo f653bc00
		[  174.711815] nouveau 0000:01:00.0: fb1: nouveaufb frame buffer device
		[  174.711824] [drm] Initialized nouveau 1.1.1 20120801 for 0000:01:00.0 on minor 1
		[  174.714771] After "modprobe nouveau"

3) Can't switch to dedicated graphics card

	3.1) Switch to Nvidia card

		Result: Screen turns off (including backlight). Everything else still works, commands entered through the keyboard and SSH are still executed.

		dmesg output:
		[   82.843529] Before "echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch"
		[   82.989327] nouveau E[     DRM] GPU lockup - switching to software fbcon
		[   83.196574] fbcon: Remapping primary device, fb1, to tty 1-63
		[   83.207133] i915: switched off
		[   83.688663] After "echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch"

		"cat /sys/kernel/debug/vgaswitcheroo/switch" output:
		0:IGD: :Off:0000:00:02.0
		1:DIS:+:Pwr:0000:01:00.0

	3.2) Re-enable Intel card

		Result: Backlight turns on again but the screen is black.

		dmesg output:
		[  183.941797] Before "echo ON > /sys/kernel/debug/vgaswitcheroo/switch"
		[  183.942058] i915: switched on
		[  183.957639] i915 0000:00:02.0: setting latency timer to 64
		[  184.421649] After "echo ON > /sys/kernel/debug/vgaswitcheroo/switch"

		"cat /sys/kernel/debug/vgaswitcheroo/switch" output:
		0:IGD: :Pwr:0000:00:02.0
		1:DIS:+:Pwr:0000:01:00.0

	3.3) Switch to intel card

	Result: Screen works again.

	dmesg output:
	[  276.129781] Before "echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch"
	[  276.434822] fbcon: Remapping primary device, fb0, to tty 1-63
	[  276.434829] VGA switcheroo: switched nouveau off
	[  276.434846] ACPI Warning: \_SB_.PCI0.P0P1.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20130517/nsarguments-95)
	[  276.435073] nouveau  [     DRM] suspending fbcon...
	[  276.435077] nouveau  [     DRM] suspending display...
	[  276.435080] nouveau  [     DRM] unpinning framebuffer(s)...
	[  276.435128] nouveau  [     DRM] evicting buffers...
	[  306.454470] nouveau  [     DRM] waiting for kernel channels to go idle...
	[  321.461603] nouveau E[     DRM] failed to idle channel 0xcccc0001 [DRM]
	[  321.466829] After "echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch"

	"cat /sys/kernel/debug/vgaswitcheroo/switch" output:
	0:IGD:+:Pwr:0000:00:02.0
	1:DIS: :Off:0000:01:00.0

	AFAIK the Nvidia graphics card sends its output to the Intel card, which is responsible for the graphics output to the screen. So I guess the problem is that switcheroo disables the Intel card which causes the graphics output to stop.
	
I would be glad if someone could take a look at these issues. Please let me know if I should supply more logs or try out a different version.
Comment 1 janh 2013-09-10 15:00:44 UTC
Created attachment 85567 [details]
dmesg output of switching dedicated GPU off and on
Comment 2 janh 2013-09-10 15:01:21 UTC
Created attachment 85568 [details]
dmesg output of unloading and loading nouveau
Comment 3 janh 2013-09-10 15:03:14 UTC
Created attachment 85569 [details]
dmesg output of switching to Nvidia GPU, turning Intel card on and switching back to Intel card
Comment 4 Ilia Mirkin 2013-09-10 15:14:24 UTC
(In reply to comment #0)
> AFAIK the Nvidia graphics card sends its output to the Intel card, which is
> responsible for the graphics output to the screen. So I guess the problem is
> that switcheroo disables the Intel card which causes the graphics output to
> stop.

If you don't have a hardware mux, stay away from vgaswitcheroo. Take a look at http://nouveau.freedesktop.org/wiki/Optimus/.
Comment 5 Ilia Mirkin 2013-11-30 06:39:03 UTC
Please try this with 3.11.10 or 3.12.2 or 3.13-rc2. There was a patch that could help NVC1 cards included in all 3 of those (well, it went into 3.13-rc1). https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=13d2b35a065399 . Note that 3.12+ also have runtime pm for optimus setups, which will automatically turn the nvidia card on/off depending on whether it's being used (in theory).


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.