01 Mar, 2010

1 commit

  • Many new laptops now come with 2 gpus, one to be used for low power
    modes and one for gaming/on-ac applications. These GPUs are typically
    wired to the laptop panel and VGA ports via a multiplexer unit which
    is controlled via ACPI methods.

    4 combinations of systems typically exist - with 2 ACPI methods.
    Intel/ATI - Lenovo W500/T500 - use ATPX ACPI method
    ATI/ATI - some ASUS - use ATPX ACPI Method
    Intel/Nvidia - - use _DSM ACPI method
    Nvidia/Nvidia - - use _DSM ACPI method.

    TODO:
    This patch adds support for the ATPX method and initial bits
    for the _DSM methods that need to written by someone with
    access to the hardware.
    Add a proper non-debugfs interface - need to get some proper
    testing first.

    v2: add power up/down support for both devices
    on W500 puts i915/radeon into D3 and cuts power to radeon.

    v3: redo probing methods, no DMI list, drm devices call to
    register with switcheroo, it tries to find an ATPX method on
    any device and once there is two devices + ATPX it inits the
    switcher.

    v4: ATPX msg handling using buffers - should work on more machines

    v5: rearchitect after more mjg59 discussion - move ATPX handling to
    radeon driver.

    v6: add file headers + initial nouveau bits (to be filled out).

    v7: merge delayed switcher code.

    v8: avoid suspend/resume of gpu that is off

    v9: rearchitect - mjg59 is always right. - move all ATPX code to
    radeon, should allow simpler DSM also proper ATRM handling

    v10: add ATRM support for radeon BIOS, add mutex to lock vgasr_priv

    v11: fix bug in resuming Intel for 2nd time.

    v12: start fixing up nvidia code blindly.

    v13: blindly guess at finishing nvidia code

    v14: remove radeon audio hacks - fix up intel resume more like upstream

    v15: clean up printks + remove unnecessary igd/dis pointers

    mount debugfs

    /sys/kernel/debug/vgaswitcheroo/switch - should exist if ATPX detected
    + 2 cards.

    DIS - immediate change to discrete
    IGD - immediate change to IGD
    DDIS - delayed change to discrete
    DIGD - delayed change to IGD
    ON - turn on not in use
    OFF - turn off not in use

    Tested on W500 (Intel/ATI) and T500 (Intel/ATI)

    Signed-off-by: Dave Airlie

    Dave Airlie
     

10 Sep, 2009

1 commit

  • Background:
    Graphic devices are accessed through ranges in I/O or memory space. While most
    modern devices allow relocation of such ranges, some "Legacy" VGA devices
    implemented on PCI will typically have the same "hard-decoded" addresses as
    they did on ISA. For more details see "PCI Bus Binding to IEEE Std 1275-1994
    Standard for Boot (Initialization Configuration) Firmware Revision 2.1"
    Section 7, Legacy Devices.

    The Resource Access Control (RAC) module inside the X server currently does
    the task of arbitration when more than one legacy device co-exists on the same
    machine. But the problem happens when these devices are trying to be accessed
    by different userspace clients (e.g. two server in parallel). Their address
    assignments conflict. Therefore an arbitration scheme _outside_ of the X
    server is needed to control the sharing of these resources. This document
    introduces the operation of the VGA arbiter implemented for Linux kernel.

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Tiago Vignatti
    Signed-off-by: Dave Airlie
    Signed-off-by: Jesse Barnes

    Benjamin Herrenschmidt