[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:30:54 UTC 2016


https://bugzilla.kernel.org/show_bug.cgi?id=117131

--- Comment #3 from Jason Vas Dias <jason.vas.dias at gmail.com> ---
(In reply to 3pb33h+1ymmkx54pslys from comment #2)
> Check this bug https://bugs.freedesktop.org/show_bug.cgi?id=95078
> Does it work if you revert that commit?

Thanks for the info ! But 'git revert e64c952efb8e0c15ae82cec8e455ab4910690ef1'
didn't work, and the code looks rather different now than it did for that
commit back in March:

> commit e64c952efb8e0c15ae82cec8e455ab4910690ef1
> Author: Alex Deucher <alexander.deucher at amd.com>
> Date:   Wed Mar 2 11:47:29 2016 -0500
>
>    drm/radeon: disable runtime pm on PX laptops without dGPU power control

There is no 'radeon_has_atpx_dgpu_power_cntl' function being called in
radeon_atpx_handler.c as
was added with that commit in the 'v4.5' branch.

Maybe if I try disabling radeon power management with radeon.dpm=0 ?

But I think the problem is triggered via this function making an ACPI 
call that goes wrong ? :



/**
 * radeon_atpx_call - call an ATPX method
 *
 * @handle: acpi handle
 * @function: the ATPX function to execute
 * @params: ATPX function params
 *
 * Executes the requested ATPX function (all asics).
 * Returns a pointer to the acpi output buffer.
 */
static union acpi_object *radeon_atpx_call(acpi_handle handle, int function,
                       struct acpi_buffer *params)
{
    acpi_status status;
    union acpi_object atpx_arg_elements[2];
    struct acpi_object_list atpx_arg;
    struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };

    atpx_arg.count = 2;
    atpx_arg.pointer = &atpx_arg_elements[0];

    atpx_arg_elements[0].type = ACPI_TYPE_INTEGER;
    atpx_arg_elements[0].integer.value = function;

    if (params) {
        atpx_arg_elements[1].type = ACPI_TYPE_BUFFER;
        atpx_arg_elements[1].buffer.length = params->length;
        atpx_arg_elements[1].buffer.pointer = params->pointer;
    } else {
        /* We need a second fake parameter */
        atpx_arg_elements[1].type = ACPI_TYPE_INTEGER;
        atpx_arg_elements[1].integer.value = 0;
    }

    status = acpi_evaluate_object(handle, NULL, &atpx_arg, &buffer);

    /* Fail only if calling the method fails and ATPX is supported */
    if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
        printk("failed to evaluate ATPX got %s\n",
               acpi_format_exception(status));
        kfree(buffer.pointer);
        return NULL;
    }

    return buffer.pointer;
}


The question is, how fatal to vga_switcheroo is this ACPI call failure ?
investigating ...

-- 
You are receiving this mail because:
You are watching the assignee of the bug.


More information about the dri-devel mailing list