[Bug 117131] vga_switcheroo does not switch IGP -> DIS ( IGP == i915 , DIS == radeon )
bugzilla-daemon at bugzilla.kernel.org
bugzilla-daemon at bugzilla.kernel.org
Sun Apr 24 20:44:00 UTC 2016
https://bugzilla.kernel.org/show_bug.cgi?id=117131
--- Comment #4 from Jason Vas Dias <jason.vas.dias at gmail.com> ---
Aha, so this ACPI call failure looks very fatal to any vga_switcheroo :
/**
* radeon_atpx_switch_start - notify the sbios of a GPU switch
*
* @atpx: atpx info struct
* @mux_id: mux state (0 = integrated GPU, 1 = discrete GPU)
*
* Execute the ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION ATPX
* function to notify the sbios that a switch between the discrete GPU and
* integrated GPU has begun (all asics).
* Returns 0 on success, error on failure.
*/
static int radeon_atpx_switch_start(struct radeon_atpx *atpx, u16 mux_id)
{
struct acpi_buffer params;
union acpi_object *info;
struct atpx_mux input;
if (atpx->functions.switch_start) {
input.size = 4;
input.mux = mux_id;
params.length = input.size;
params.pointer = &input;
info = radeon_atpx_call(atpx->handle,
ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION,
¶ms);
if (!info)
return -EIO;
kfree(info);
}
return 0;
}
/**
* radeon_atpx_switch_end - notify the sbios of a GPU switch
*
* @atpx: atpx info struct
* @mux_id: mux state (0 = integrated GPU, 1 = discrete GPU)
*
* Execute the ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION ATPX
* function to notify the sbios that a switch between the discrete GPU and
* integrated GPU has ended (all asics).
* Returns 0 on success, error on failure.
*/
static int radeon_atpx_switch_end(struct radeon_atpx *atpx, u16 mux_id)
{
struct acpi_buffer params;
union acpi_object *info;
struct atpx_mux input;
if (atpx->functions.switch_end) {
input.size = 4;
input.mux = mux_id;
params.length = input.size;
params.pointer = &input;
info = radeon_atpx_call(atpx->handle,
ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION,
¶ms);
if (!info)
return -EIO;
kfree(info);
}
return 0;
}
So if any of these ACPI calls fail, the entire switch fails .
There is obviously some way that the closed source FGLRX driver
is able to make these calls successfully ; the card goes into
graphics mode OK with fglrx under Linux 3.10 (EL7) .
But it appears that the new open source radeon driver 8970M support
is not working correctly in Linux 4.5.0 .
I guess this bug should more properly be raised directly against the
drivers/gpu/drm/radeon driver then .
Maybe I should try running the EL7 partition OS in a VM and tracing how
FGLRX is calling these ACPI calls & modifying radeon_atpx_handler to make
them the same way ? a rather cumbersome way to get to the bottom of it ...
I will also try various combinations of the above kernel parameters and
radeon.dpm=1 or radeon.dpm=0 .
--
You are receiving this mail because:
You are watching the assignee of the bug.
More information about the dri-devel
mailing list