[Intel-gfx] [PATCH 00/17 v2] Batch submission via GuC

Dave Gordon david.s.gordon at intel.com
Thu Jun 25 07:39:56 PDT 2015


This patch series enables command submission via the GuC. In this mode,
instead of the host CPU driving the execlist port directly, it hands
over work items to the GuC, using a doorbell mechanism to tell the GuC
that new items have been added to its work queue. The GuC then dispatches
contexts to the various GPU engines, and manages the resulting context-
switch interrupts. Completion of a batch is however still signalled to
the CPU; the GuC is not involved in handling user interrupts.

There are four subsequences within the patch series:

  drm/i915: Add i915_gem_object_create_from_data()
  drm/i915: Embedded microcontroller (uC) firmware loading support

These first two patches provide a generic framework for fetching the
firmware that may be required by any embedded microcontroller from a
file, using an asynchronous thread so that driver initialisation can
continue while the firmware is being fetched. The framework provides
synchronisation with the completion of the fetcher thread, so the load
of the code into the device occurs synchronously at a subsequent time
of the caller's choice.  It is hoped that this framework is sufficiently
general that it can be used for all curent and future microcontrollers.

  drm/i915: Add GuC-related module parameters
  drm/i915: Add GuC-related header files
  drm/i915: GuC-specific firmware loader
  drm/i915: Debugfs interface to read GuC load status

These four patches complete the GuC loader. At this point in the sequence
we can load and activate the GuC firmware, but not submit any batches
through it. (This is nonetheless a potentially useful state, as the GuC
could do other useful work even when not handling batch submissions).

  drm/i915: Split late for_each_ring loop from i915_gem_init_hw()
  drm/i915: Defer default hardware context initialisation until first open

These two patches defer the later phases of hardware initialisation until
the first time the device is opened. This allows firmware loading to be
deferred until user processes are running, allowing it to work even when
the firmware image is not available during driver load. In addition, this
may speed up the appearance of the software-rendered bootsplash as it
allows driver loading to return earlier, leaving the second phase of GPU
initialisation (anything involving sending batches to the GPU engines)
to be completed later.

  drm/i915: Expose two LRC functions for GuC submission mode
  drm/i915: GuC submission setup, phase 1
  drm/i915: Enable GuC firmware log
  drm/i915: Implementation of GuC client
  drm/i915: Interrupt routing for GuC submission
  drm/i915: Integrate GuC-based command submission
  drm/i915: Debugfs interface for GuC submission statistics
  Documentation/drm: kerneldoc for GuC
  drm/i915: Enable GuC submission, where supported

In the final section, we implement the GuC submission mechanism, link
it into the (execlist-based) submission path, and finally enable it
(on supported platforms). On platforms where there is no GuC, or if
the GuC firmware cannot be found or is invalid, batch submission will
revert to using the execlist mechanism directly.

The GuC firmware itself is not included in this patchset; it is or will
be available for download from https://01.org/linuxgraphics/downloads/
This driver works with and requires GuC firmware revision 3.x. It will
not work with any firmware version 1.x, as the GuC protocol in those
revisions was incompatible and is no longer supported.

Prerequisites: GuC submission will expose existing inadequacies in
some of the existing codepaths unless certain other patches are applied.
In particular we will require some version of Michel Thierry's patch
  drm/i915/lrc: Update PDPx registers with LRI commands
(because the GuC support light-restore, which execlist mode doesn't),
The previous prerequisite patch
  drm/i915: Allocate OLR more safely (workaround until OLR goes away)
is no longer required as the OLR has now gone away :)

Alex Dai (7):
  drm/i915: Add GuC-related module parameters
  drm/i915: GuC-specific firmware loader
  drm/i915: Debugfs interface to read GuC load status
  drm/i915: GuC submission setup, phase 1
  drm/i915: Enable GuC firmware log
  drm/i915: Integrate GuC-based command submission
  Documentation/drm: kerneldoc for GuC

Dave Gordon (10):
  drm/i915: Add i915_gem_object_create_from_data()
  drm/i915: Embedded microcontroller (uC) firmware loading support
  drm/i915: Add GuC-related header files
  drm/i915: Split late for_each_ring loop from i915_gem_init_hw()
  drm/i915: Defer default hardware context initialisation until first open
  drm/i915: Expose two LRC functions for GuC submission mode
  drm/i915: Implementation of GuC client
  drm/i915: Interrupt routing for GuC submission
  drm/i915: Debugfs interface for GuC submission statistics
  drm/i915: Enable GuC submission, where supported

Ben Widawsky (0):
Vinit Azad (0):
Michael H. Nguyen (0):
  created the original versions on which some of these patches are based.

 Documentation/DocBook/drm.tmpl             |   19 +
 drivers/gpu/drm/i915/Makefile              |    7 +
 drivers/gpu/drm/i915/i915_debugfs.c        |  116 +++-
 drivers/gpu/drm/i915/i915_dma.c            |    4 +
 drivers/gpu/drm/i915/i915_drv.h            |   18 +
 drivers/gpu/drm/i915/i915_gem.c            |  131 +++--
 drivers/gpu/drm/i915/i915_gem_context.c    |   52 +-
 drivers/gpu/drm/i915/i915_guc_reg.h        |  102 ++++
 drivers/gpu/drm/i915/i915_guc_submission.c |  861 ++++++++++++++++++++++++++++
 drivers/gpu/drm/i915/i915_irq.c            |   48 ++
 drivers/gpu/drm/i915/i915_params.c         |    9 +
 drivers/gpu/drm/i915/i915_reg.h            |   15 +-
 drivers/gpu/drm/i915/intel_guc.h           |  101 ++++
 drivers/gpu/drm/i915/intel_guc_fwif.h      |  236 ++++++++
 drivers/gpu/drm/i915/intel_guc_loader.c    |  521 +++++++++++++++++
 drivers/gpu/drm/i915/intel_lrc.c           |   75 ++-
 drivers/gpu/drm/i915/intel_lrc.h           |   11 +
 drivers/gpu/drm/i915/intel_uc_loader.c     |  332 +++++++++++
 drivers/gpu/drm/i915/intel_uc_loader.h     |   86 +++
 19 files changed, 2673 insertions(+), 71 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/i915_guc_reg.h
 create mode 100644 drivers/gpu/drm/i915/i915_guc_submission.c
 create mode 100644 drivers/gpu/drm/i915/intel_guc.h
 create mode 100644 drivers/gpu/drm/i915/intel_guc_fwif.h
 create mode 100644 drivers/gpu/drm/i915/intel_guc_loader.c
 create mode 100644 drivers/gpu/drm/i915/intel_uc_loader.c
 create mode 100644 drivers/gpu/drm/i915/intel_uc_loader.h

-- 
1.7.9.5



More information about the Intel-gfx mailing list