1. 01 3月, 2010 1 次提交
    • D
      vga_switcheroo: initial implementation (v15) · 6a9ee8af
      Dave Airlie 提交于
      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: NDave Airlie <airlied@redhat.com>
      6a9ee8af
  2. 10 9月, 2009 1 次提交
    • B
      PCI/GPU: implement VGA arbitration on Linux · deb2d2ec
      Benjamin Herrenschmidt 提交于
      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: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NTiago Vignatti <tiago.vignatti@nokia.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      deb2d2ec