1. 10 11月, 2016 3 次提交
  2. 27 10月, 2016 1 次提交
  3. 20 10月, 2016 2 次提交
  4. 14 10月, 2016 15 次提交
    • Z
      drm/i915/gvt: vGPU command scanner · be1da707
      Zhi Wang 提交于
      This patch introduces a command scanner to scan guest command buffers.
      Signed-off-by: NYulei Zhang <yulei.zhang@intel.com>
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      be1da707
    • Z
      drm/i915/gvt: vGPU context switch · 17865713
      Zhi Wang 提交于
      As different VM may configure different render MMIOs when executing
      workload, to schedule workloads between different VM, the render MMIOs
      have to be switched.
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      17865713
    • Z
      drm/i915/gvt: vGPU schedule policy framework · 4b63960e
      Zhi Wang 提交于
      This patch introduces a vGPU schedule policy framework, with a timer based
      schedule policy module for now
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      4b63960e
    • Z
      drm/i915/gvt: vGPU workload scheduler · e4734057
      Zhi Wang 提交于
      This patch introduces the vGPU workload scheduler routines.
      
      GVT workload scheduler is responsible for picking and executing GVT workload
      from current scheduled vGPU. Before the workload is submitted to host i915,
      the guest execlist context will be shadowed in the host GVT shadow context.
      the instructions in guest ring buffer will be copied into GVT shadow ring
      buffer. Then GVT-g workload scheduler will scan the instructions in guest
      ring buffer and submit it to host i915.
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      e4734057
    • Z
      drm/i915/gvt: vGPU workload submission · 28c4c6ca
      Zhi Wang 提交于
      This patch introduces the vGPU workload submission logics.
      
      Under virtualization environment, guest will submit workload through
      virtual execlist submit port. The submitted workload load will be wrapped
      into an gvt workload which will be picked by GVT workload scheduler and
      executed on host i915 later.
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      28c4c6ca
    • Z
      drm/i915/gvt: vGPU execlist virtualization · 8453d674
      Zhi Wang 提交于
      This patch introduces the vGPU execlist virtualization.
      
      Under virtulization environment, HW execlist interface are fully emulated
      including virtual CSB emulation, virtual execlist emulation. The framework
      will emulate the virtual CSB according to the guest workload running status
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      8453d674
    • Z
      drm/i915/gvt: vGPU display virtualization · 04d348ae
      Zhi Wang 提交于
      This patch introduces the GVT-g display virtualization.
      
      It consists a collection of display MMIO handlers, like power well register
      handler, pipe register handler, plane register handler, which will emulate
      all display MMIOs behavior to support virtual mode setting sequence for
      guest.
      Signed-off-by: NBing Niu <bing.niu@intel.com>
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      04d348ae
    • Z
      drm/i915/gvt: vGPU MMIO virtualization · e39c5add
      Zhi Wang 提交于
      This patch introduces the generic vGPU MMIO emulation intercept
      framework.  The MPT modules will request GVT-g core logic to
      emulate MMIO read/write through IO emulation operations
      callback when hypervisor trapped a guest GTTMMIO read/write.
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      e39c5add
    • Z
      drm/i915/gvt: vGPU PCI configuration space virtualization · 4d60c5fd
      Zhi Wang 提交于
      This patch introduces vGPU PCI configuration space virtualization.
      
      - Adjust the trapped GPFN(Guest Page Frame Number) window of virtual GEN
      PCI BAR 0 when guest initializes PCI BAR 0 address.
      
      - Emulate OpRegion when guest touches OpRegion.
      
      - Pass-through a part of aperture to guest when guest initializes
      aperture BAR.
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      4d60c5fd
    • Z
      drm/i915/gvt: vGPU graphics memory virtualization · 2707e444
      Zhi Wang 提交于
      The vGPU graphics memory emulation framework is responsible for graphics
      memory table virtualization. Under virtualization environment, a VM will
      populate the page table entry with guest page frame number(GPFN/GFN), while
      HW needs a page table filled with MFN(Machine frame number). The
      relationship between GFN and MFN(Machine frame number) is managed by
      hypervisor, while GEN HW doesn't have such knowledge to translate a GFN.
      
      To solve this gap, shadow GGTT/PPGTT page table is introdcued.
      
      For GGTT, the GFN inside the guest GGTT page table entry will be translated
      into MFN and written into physical GTT MMIO registers when guest write
      virtual GTT MMIO registers.
      
      For PPGTT, a shadow PPGTT page table will be created and write-protected
      translated from guest PPGTT page table.  And the shadow page table root
      pointers will be written into the shadow context after a guest workload
      is shadowed.
      
      vGPU graphics memory emulation framework consists:
      
      - Per-GEN HW platform page table entry bits extract/de-extract routines.
      - GTT MMIO register emulation handlers, which will call hypercall to do
      GFN->MFN translation when guest write GTT MMIO register
      - PPGTT shadow page table routines, e.g. shadow create/destroy/out-of-sync
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      2707e444
    • Z
      drm/i915/gvt: vGPU interrupt virtualization. · c8fe6a68
      Zhi Wang 提交于
      This patch introduces vGPU interrupt emulation framework.
      
      The vGPU intrerrupt emulation framework is an event-based interrupt
      emulation framework. It's responsible for emulating GEN hardware interrupts
      during emulating other HW behaviour.
      
      It consists several components:
      
      - Descriptions of interrupt register bit
      - Upper level <-> lower level interrupt mapping
      - GEN HW IER/IMR/IIR register emulation routines
      - Event-based interrupt propagation interface
      
      When a GVT-g component wants to inject an interrupt to a VM during a
      emulation, first it should specify the event needs to be emulated and the
      framework will deal with the rest of emulation:
      
      - Generating related virtual IIR bit according to virtual IER and IMRs,
      - Generate related virtual upper level virtual IIR bit accodring to the
      per-platform interrupt mapping
      - Injecting a MSI to VM
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      c8fe6a68
    • Z
      drm/i915/gvt: Introduce basic vGPU life cycle management · 82d375d1
      Zhi Wang 提交于
      A vGPU represents a virtual Intel GEN hardware, which consists following
      virtual resources:
      
      - Configuration space (virtualized)
      - HW registers (virtualized)
      - GGTT memory space (partitioned)
      - GPU page table (shadowed)
      - Fence registers (partitioned)
      
      * virtualized: fully emulated by GVT-g.
      * partitioned: Only a part of the HW resource is allowed to be accessed
      by VM.
      * shadowed: Resource needs to be translated and shadowed before getting
      applied into HW.
      
      This patch introduces vGPU life cycle management framework, which is
      responsible for creating/destroying a vGPU and preparing/free resources
      related to a vGPU.
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      82d375d1
    • Z
      drm/i915/gvt: golden virtual HW state management · 579cea5f
      Zhi Wang 提交于
      Each vGPU expects a golden virtual HW state, which is just the state after
      system is freshly powered on. GVT-g will try to load the golden virtual HW
      state via kernel firmware interface.
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      579cea5f
    • Z
      drm/i915/gvt: Introduce a framework for tracking HW registers. · 12d14cc4
      Zhi Wang 提交于
      This patch introduces a framework for tracking HW registers on different
      GEN platforms.
      
      Accesses to GEN HW registers from VMs will be trapped by hypervisor. It
      will forward these emulation requests to GVT-g device model, which
      requires this framework to search for related register descriptions.
      
      Each MMIO entry in this framework describes a GEN HW registers, e.g.
      offset, length, whether it contains RO bits, whether it can be accessed by
      LRIs...and also emulation handlers for emulating register reading and
      writing.
      
      - Use i915 MMIO register definition & statement.(Joonas)
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      12d14cc4
    • Z
      drm/i915/gvt: vGPU HW resource management · 28a60dee
      Zhi Wang 提交于
      This patch introduces the GVT-g vGPU HW resource management. Under
      GVT-g virtualizaion environment, each vGPU requires portions HW
      resources, including aperture, hidden GM space, and fence registers.
      
      When creating a vGPU, GVT-g will request these HW resources from host,
      and return them to host after a vGPU is destroyed.
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NZhenyu Wang <zhenyuw@linux.intel.com>
      28a60dee
  5. 18 6月, 2016 3 次提交
  6. 11 5月, 2016 1 次提交
  7. 18 11月, 2015 2 次提交
    • V
      drm/i915: Type safe register read/write · f0f59a00
      Ville Syrjälä 提交于
      Make I915_READ and I915_WRITE more type safe by wrapping the register
      offset in a struct. This should eliminate most of the fumbles we've had
      with misplaced parens.
      
      This only takes care of normal mmio registers. We could extend the idea
      to other register types and define each with its own struct. That way
      you wouldn't be able to accidentally pass the wrong thing to a specific
      register access function.
      
      The gpio_reg setup is probably the ugliest thing left. But I figure I'd
      just leave it for now, and wait for some divine inspiration to strike
      before making it nice.
      
      As for the generated code, it's actually a bit better sometimes. Eg.
      looking at i915_irq_handler(), we can see the following change:
        lea    0x70024(%rdx,%rax,1),%r9d
        mov    $0x1,%edx
      - movslq %r9d,%r9
      - mov    %r9,%rsi
      - mov    %r9,-0x58(%rbp)
      - callq  *0xd8(%rbx)
      + mov    %r9d,%esi
      + mov    %r9d,-0x48(%rbp)
       callq  *0xd8(%rbx)
      
      So previously gcc thought the register offset might be signed and
      decided to sign extend it, just in case. The rest appears to be
      mostly just minor shuffling of instructions.
      
      v2: i915_mmio_reg_{offset,equal,valid}() helpers added
          s/_REG/_MMIO/ in the register defines
          mo more switch statements left to worry about
          ring_emit stuff got sorted in a prep patch
          cmd parser, lrc context and w/a batch buildup also in prep patch
          vgpu stuff cleaned up and moved to a prep patch
          all other unrelated changes split out
      v3: Rebased due to BXT DSI/BLC, MOCS, etc.
      v4: Rebased due to churn, s/i915_mmio_reg_t/i915_reg_t/
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Link: http://patchwork.freedesktop.org/patch/msgid/1447853606-2751-1-git-send-email-ville.syrjala@linux.intel.com
      f0f59a00
    • V
      drm/i915: Turn vgpu pdps into an array · ab75bb5d
      Ville Syrjälä 提交于
      We'll want to avoid performing arithmetic with register offsets, so
      instead calculating the vgpu PDP as pdp0_lo+offset, make the PDPs
      into an array. This way we can simply loop through them.
      
      Cc: Eddie Dong <eddie.dong@intel.com>
      Cc: Jike Song <jike.song@intel.com>
      Cc: Kevin Tian <kevin.tian@intel.com>
      Cc: Yu Zhang <yu.c.zhang@linux.intel.com>
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Zhiyuan Lv <zhiyuan.lv@intel.com>
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1446672017-24497-25-git-send-email-ville.syrjala@linux.intel.comReviewed-by: NZhiyuan Lv <zhiyuan.lv@intel.com>
      ab75bb5d
  8. 02 9月, 2015 1 次提交
    • Z
      drm/i915: Update PV INFO page definition for Intel GVT-g · 532beabf
      Zhiyuan Lv 提交于
      Some more definitions in the PV info page are added. They are mainly
      for the guest notification to Intel GVT-g device model. They are used
      for Broadwell enabling.
      
      The notification of PPGTT page table creation/destroy is to notify
      GVT-g device model the life cycle of guest page tables. Then device
      model will implement shadow page table for guests.
      
      The notification of context create/destroy is optional. If it is used,
      the device model will create/destroy shadow context corresponding to
      the context's life cycle. Guest driver needs to make sure that the
      context's LRCA and backing storage address unchanged. If it is not
      used, the device model will perform the context shadow work in the
      context scheduling time.
      Signed-off-by: NZhiyuan Lv <zhiyuan.lv@intel.com>
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      532beabf
  9. 18 3月, 2015 1 次提交
  10. 14 2月, 2015 3 次提交
    • Y
      drm/i915: Add the display switch logic for vGPU in i915 driver · e21fd552
      Yu Zhang 提交于
      Display switch logic is added to notify the host side that
      current vGPU have a valid surface to show. It does so by
      writing the display_ready field in PV INFO page, and then
      will be handled in the host side. This is useful to avoid
      trickiness when the VM's framebuffer is being accessed in
      the middle of VM modesetting, e.g. compositing the framebuffer
      in the host side.
      
      v2:
              - move the notification code outside the 'else' in load sequence
              - remove the notification code in intel_crtc_set_config()
      
      v4:
              - code rebase, no need to define another dev_priv
              - use #define instead of enum for display readiness
      Signed-off-by: NYu Zhang <yu.c.zhang@linux.intel.com>
      Signed-off-by: NJike Song <jike.song@intel.com>
      Signed-off-by: NZhiyuan Lv <zhiyuan.lv@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      e21fd552
    • Y
      drm/i915: Adds graphic address space ballooning logic · 5dda8fa3
      Yu Zhang 提交于
      With Intel GVT-g, the global graphic memory space is partitioned by
      multiple vGPU instances in different VMs. The ballooning code is called
      in i915_gem_setup_global_gtt(), utilizing the drm mm allocator APIs to
      mark the graphic address space which are partitioned out to other vGPUs
      as reserved. With ballooning, host side does not need to translate a
      grahpic address from guest view to host view. By now, current implementation
      only support the static ballooning, but in the future, with more cooperation
      from guest driver, the same interfaces can be extended to grow/shrink the
      guest graphic memory dynamically.
      
      v2:
      take Chris and Daniel's comments:
      	- no guard page between different VMs
      	- use drm_mm_reserve_node() to do the reservation for ballooning,
      	instead of the previous drm_mm_insert_node_in_range_generic()
      
      v3:
      take Daniel's comments:
      	- move ballooning functions into i915_vgpu.c
      	- add kerneldoc to ballooning functions
      
      v4:
      take Tvrtko's comments:
      	- more accurate comments and commit message
      Signed-off-by: NYu Zhang <yu.c.zhang@linux.intel.com>
      Signed-off-by: NJike Song <jike.song@intel.com>
      Signed-off-by: NZhi Wang <zhi.a.wang@intel.com>
      Signed-off-by: NEddie Dong <eddie.dong@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      5dda8fa3
    • Y
      drm/i915: Introduce a PV INFO page structure for Intel GVT-g. · cf9d2890
      Yu Zhang 提交于
      Introduce a PV INFO structure, to facilitate the Intel GVT-g
      technology, which is a GPU virtualization solution with mediated
      pass-through. This page contains the shared information between
      i915 driver and the host emulator. For now, this structure utilizes
      an area of 4K bytes on HSW GPU's unused MMIO space. Future hardware
      will have the reserved window architecturally defined, and layout
      of the page will be added in future BSpec.
      
      The i915 driver load routine detects if it is running in a VM by
      reading the contents of this PV INFO page. Thereafter a flag,
      vgpu.active is set, and intel_vgpu_active() is used by checking
      this flag to conclude if GPU is virtualized with Intel GVT-g. By
      now, intel_vgpu_active() will return true, only when the driver
      is running as a guest in the Intel GVT-g enhanced environment on
      HSW platform.
      
      v2:
      take Chris' comments:
              - call the i915_check_vgpu() in intel_uncore_init()
              - sanitize i915_check_vgpu() by adding BUILD_BUG_ON() and debug info
      take Daniel's comments:
              - put the definition of PV INFO into a new header - i915_vgt_if.h
      other changes:
              - access mmio regs by readq/readw in i915_check_vgpu()
      
      v3:
      take Daniel's comments:
              - move the i915/vgt interfaces into a new i915_vgpu.c
              - update makefile
              - add kerneldoc to functions which are non-static
              - add a DOC: section describing some of the high-level design
              - update drm docbook
      other changes:
              - rename i915_vgt_if.h to i915_vgpu.h
      
      v4:
      take Tvrtko's comments:
              - fix a typo in commit message
              - add debug message when vgt version mismatches
              - rename low_gmadr/high_gmadr to mappable/non-mappable in PV INFO
                structure
      Signed-off-by: NYu Zhang <yu.c.zhang@linux.intel.com>
      Signed-off-by: NJike Song <jike.song@intel.com>
      Signed-off-by: NEddie Dong <eddie.dong@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      cf9d2890