Created attachment 84381 [details] lspci -vvv On my muxed hybrid system (Lenovo IdeaPad U455) vga_switcheroo doesn't work as expected. Initially after system booting both video cards are powered and the IGD one is active. Then, when i try to switch active gpu with # echo DIS > /sys/kernel/debug/vgaswitcheroo/switch screen goes black. The first bad commit, that broke vga_switcheroo is: commit 492b49a2f21a7ce6cb0abce36017daa06036a626 Author: Alex Deucher <alexander.deucher@amd.com> Date: Thu Aug 16 14:07:37 2012 -0400 drm/radeon: reorganize ATPX support (v2) - rework the acpi execute code - User proper parameters for ATPX functions v2: rebase fixes Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Created attachment 84391 [details] debug output Can you attach the dmesg output with this patch applied? No need to try and switch gpus. I just need the output.
Created attachment 84401 [details] dmesg output for v3.7.0-rc2+ with the patch applied I'm sure that i did everything right, but there is no "ATPX function mask" message in the log.
Created attachment 84441 [details] debug output Try this version.
Still no "ATPX function mask" in the log.
Does it show up if you try switching?
No.
It should be printing. Make sure you've booted the right kernel and are using the right module. If you are using an initrd, make sure it's up to date. Make sure you aren't redirecting your kernel output somewhere. Maybe check /var/log/messages as well.
Created attachment 84451 [details] dmesg output for v3.7.0-rc2+ This dmesg output was produced with following changes: ---------------------------------------------- static int radeon_atpx_verify_interface(struct radeon_atpx *atpx) { union acpi_object *info; struct atpx_verify_interface output; size_t size; int err = 0; printk("*\n"); info = radeon_atpx_call(atpx->handle, ATPX_FUNCTION_VERIFY_INTERFACE, NULL); if (!info) return -EIO; printk("**\n"); memset(&output, 0, sizeof(output)); size = *(u16 *) info->buffer.pointer; if (size < 8) { printk("ATPX buffer is too small: %zu\n", size); err = -EINVAL; goto out; } printk("***\n"); size = min(sizeof(output), size); memcpy(&output, info->buffer.pointer, size); /* TODO: check version? */ printk("ATPX version %u\n", output.version); printk("****\n"); radeon_atpx_parse_functions(&atpx->functions, output.function_bits); out: kfree(info); return err; } ---------------------------------------------- And there is only one asterisk in the log: ---------------------------------------------- [ 11.199661] vga_switcheroo: enabled [ 11.199747] * ---------------------------------------------- So it is clear that some error is encountered in radeon_atpx_call(atpx->handle, ATPX_FUNCTION_VERIFY_INTERFACE, NULL); That explains why there is no "ATPX function mask" message in the log.
Created attachment 84461 [details] possible fix 1 Try this patch and see if it helps.
Created attachment 84471 [details] possible fix 2 If the previous patch doesn't help, try this one.
The first patch doesn't help.
Created attachment 84481 [details] dmesg output for v3.7.0-rc2+ with kbug49351-2.diff applied The second patch doens't help either. And it results in the following warnings: -------------------------------------------- [ 11.675240] ACPI Warning: For \_SB_.PCI0.AGP_.VGA_.ATIF: Insufficient arguments - needs 2, found 1 (20120913/nspredef-321) [ 11.675688] ACPI Warning: For \_SB_.PCI0.AGP_.VGA_.ATIF: Insufficient arguments - needs 2, found 1 (20120913/nspredef-321) --------------------------------------------
Please attach the dmesg output from a working kernel.
Created attachment 84491 [details] debug output Please attach the dmesg output with this patch applied.
Created attachment 84511 [details] dmesg output for v3.5.2
Created attachment 84531 [details] dmesg output for v3.7.0-rc2+ with kbug49351.diff applied [ 11.833549] vga_switcheroo: enabled [ 11.833648] evaluate ATPX got AE_NOT_FOUND [ 11.833750] buffer.pointer NULL
Created attachment 84541 [details] possible fix Does this patch fix the issue?
Created attachment 84561 [details] dmesg output for v3.7.0-rc2+ with the patch from comment #17 vga_switcheroo seems to work fine with the last patch. [ 11.832217] vga_switcheroo: enabled [ 11.852254] ATPX version 1 [ 11.852325] ATPX function mask 0x087
Fixed by: commit 0b90365e7a32317b948583c4b5c2712d84610b08 Author: Alex Deucher <alexander.deucher@amd.com> Date: Tue Oct 23 17:57:54 2012 -0400 drm/radeon: fix ATPX regression in acpi rework Copy and paste typo in the apci rework. Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=49351